Codebase list hwloc / cd10925
New upstream version 2.5.0~rc1 Samuel Thibault 2 years ago
462 changed file(s) with 43978 addition(s) and 33831 deletion(s). Raw diff Collapse all Expand all
295295 CONFIGURE_DEPENDENCIES = @CONFIGURE_DEPENDENCIES@
296296 CPP = @CPP@
297297 CPPFLAGS = @CPPFLAGS@
298 CUDA_VERSION = @CUDA_VERSION@
298299 CXX = @CXX@
299300 CXXCPP = @CXXCPP@
300301 CXXDEPMODE = @CXXDEPMODE@
321322 HWLOC_CAIRO_LIBS = @HWLOC_CAIRO_LIBS@
322323 HWLOC_CFLAGS = @HWLOC_CFLAGS@
323324 HWLOC_CPPFLAGS = @HWLOC_CPPFLAGS@
325 HWLOC_CUDART_CFLAGS = @HWLOC_CUDART_CFLAGS@
326 HWLOC_CUDART_CPPFLAGS = @HWLOC_CUDART_CPPFLAGS@
327 HWLOC_CUDART_LDFLAGS = @HWLOC_CUDART_LDFLAGS@
328 HWLOC_CUDART_LIBS = @HWLOC_CUDART_LIBS@
329 HWLOC_CUDA_CFLAGS = @HWLOC_CUDA_CFLAGS@
330 HWLOC_CUDA_CPPFLAGS = @HWLOC_CUDA_CPPFLAGS@
331 HWLOC_CUDA_LDFLAGS = @HWLOC_CUDA_LDFLAGS@
324332 HWLOC_CUDA_LIBS = @HWLOC_CUDA_LIBS@
325333 HWLOC_DIFF_U = @HWLOC_DIFF_U@
326334 HWLOC_DIFF_W = @HWLOC_DIFF_W@
331339 HWLOC_EMBEDDED_LDFLAGS = @HWLOC_EMBEDDED_LDFLAGS@
332340 HWLOC_EMBEDDED_LIBS = @HWLOC_EMBEDDED_LIBS@
333341 HWLOC_GL_LIBS = @HWLOC_GL_LIBS@
342 HWLOC_HAVE_LEVELZERO = @HWLOC_HAVE_LEVELZERO@
334343 HWLOC_HAVE_LIBXML2 = @HWLOC_HAVE_LIBXML2@
335344 HWLOC_HAVE_NVML = @HWLOC_HAVE_NVML@
336345 HWLOC_HAVE_OPENCL = @HWLOC_HAVE_OPENCL@
337346 HWLOC_HAVE_RSMI = @HWLOC_HAVE_RSMI@
347 HWLOC_IBVERBS_LIBS = @HWLOC_IBVERBS_LIBS@
338348 HWLOC_LDFLAGS = @HWLOC_LDFLAGS@
349 HWLOC_LEVELZERO_CFLAGS = @HWLOC_LEVELZERO_CFLAGS@
350 HWLOC_LEVELZERO_LIBS = @HWLOC_LEVELZERO_LIBS@
339351 HWLOC_LIBS = @HWLOC_LIBS@
340352 HWLOC_LIBS_PRIVATE = @HWLOC_LIBS_PRIVATE@
341353 HWLOC_LIBXML2_CFLAGS = @HWLOC_LIBXML2_CFLAGS@
345357 HWLOC_MS_LIB_ARCH = @HWLOC_MS_LIB_ARCH@
346358 HWLOC_NUMA_CFLAGS = @HWLOC_NUMA_CFLAGS@
347359 HWLOC_NUMA_LIBS = @HWLOC_NUMA_LIBS@
360 HWLOC_NVML_CPPFLAGS = @HWLOC_NVML_CPPFLAGS@
361 HWLOC_NVML_LDFLAGS = @HWLOC_NVML_LDFLAGS@
348362 HWLOC_NVML_LIBS = @HWLOC_NVML_LIBS@
349 HWLOC_OPENCL_CFLAGS = @HWLOC_OPENCL_CFLAGS@
363 HWLOC_OPENCL_CPPFLAGS = @HWLOC_OPENCL_CPPFLAGS@
350364 HWLOC_OPENCL_LDFLAGS = @HWLOC_OPENCL_LDFLAGS@
351365 HWLOC_OPENCL_LIBS = @HWLOC_OPENCL_LIBS@
352366 HWLOC_PCIACCESS_CFLAGS = @HWLOC_PCIACCESS_CFLAGS@
472486 prefix = @prefix@
473487 program_transform_name = @program_transform_name@
474488 psdir = @psdir@
489 runstatedir = @runstatedir@
475490 sbindir = @sbindir@
476491 sharedstatedir = @sharedstatedir@
477492 srcdir = @srcdir@
971986 maintainer-clean-generic:
972987 @echo "This command is intended for maintainers to use"
973988 @echo "it deletes files that may require special tools to rebuild."
989 @HWLOC_BUILD_STANDALONE_FALSE@install-data-local:
990 @HWLOC_HAVE_WINDOWS_FALSE@install-data-local:
974991 @HWLOC_BUILD_STANDALONE_FALSE@uninstall-local:
975992 @HWLOC_HAVE_WINDOWS_FALSE@uninstall-local:
976 @HWLOC_BUILD_STANDALONE_FALSE@install-data-local:
977 @HWLOC_HAVE_WINDOWS_FALSE@install-data-local:
978993 clean: clean-recursive
979994
980995 clean-am: clean-generic clean-libtool mostlyclean-am
1414 This file contains the main features as well as overviews of specific
1515 bug fixes (and other actions) for each version of hwloc since version
1616 0.9.
17
18
19 Version 2.5.0
20 -------------
21 * API
22 + Add hwloc/windows.h to query Windows processor groups.
23 + Add hwloc_get_obj_with_same_locality() to convert between objects
24 with same locality, for instance NUMA nodes and Packages,
25 or OS devices within a PCI device.
26 + Add hwloc_distances_transform() to modify distances structures.
27 - hwloc-annotate and lstopo have new distances-transform options.
28 + hwloc_distances_add() is replaced with _add_create() followed by
29 _add_values() and _add_commit(). See hwloc/distances.h for details.
30 + Add topology flags to mitigate binding modifications during
31 hwloc discovery, especially on Windows:
32 - HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING and _MEMBINDING
33 restrict discovery to PUs and NUMA nodes inside the binding.
34 - HWLOC_TOPOLOGY_FLAG_DONT_CHANGE_BINDING prevents from ever
35 changing the binding during discovery.
36 * Backends
37 + Add a levelzero backend for oneAPI L0 devices, exposed as OS devices
38 of subtype "LevelZero" and name such as "ze0".
39 - Add hwloc/levelzero.h for interoperability between converting
40 between L0 API devices and hwloc cpusets or OS devices.
41 + Expose NEC Vector Engine cards on Linux as OS devices of subtype
42 "VectorEngine" and name "ve0", etc.
43 Thanks to Anara Kozhokanova, Tim Cramer and Erich Focht for the help.
44 + Add a NVLinkBandwidth distances structure between NVIDIA GPUs
45 (and POWER processor or NVSwitches) in the NVML backend,
46 and a XGMIBandwidth distances structure between AMD GPUs
47 in the RSMI backends.
48 - See "Topology Attributes: Distances, Memory Attributes and CPU Kinds"
49 in the documentation for details about these new distances.
50 + Add support for NUMA node 0 being offline in Linux, thanks to Jirka Hladky.
51 * Build
52 + Add --with-cuda-version=<version> or look at the CUDA_VERSION
53 environment variable to find the appropriate CUDA pkg-config files.
54 Thanks to Stephen Herbein for the suggestion.
55 - Also add --with-cuda=<dir> to specify the CUDA installation path
56 manually (and its NVML and OpenCL components).
57 Thanks to Andrea Bocci for the suggestion.
58 - See "How do I enable CUDA and select which CUDA version to use?"
59 in the FAQ for details.
60 * Tools
61 + lstopo now has a --windows-processor-groups option on Windows.
62 + hwloc-ps now has a --short-name option to avoid long/truncated
63 command path.
64 + hwloc-ps now has a --single-ancestor option to return a single
65 (possibly too large) object where a process is bound.
66 + hwloc-ps --pid-cmd may now query environment variables,
67 including MPI-specific variables to find out process ranks.
1768
1869
1970 Version 2.4.1
77 # Please update HWLOC_VERSION* in contrib/windows/hwloc_config.h too.
88
99 major=2
10 minor=4
11 release=1
10 minor=5
11 release=0
1212
1313 # greek is used for alpha or beta release tags. If it is non-empty,
1414 # it will be appended to the version number. It does not have to be
1717 # requirement is that it must be entirely printable ASCII characters
1818 # and have no white space.
1919
20 greek=
20 greek=rc1
2121
2222 # The date when this release was created
2323
24 date="Feb 11, 2021"
24 date="Jun 08, 2021"
2525
2626 # If snapshot=1, then use the value from snapshot_version as the
2727 # entire hwloc version (i.e., ignore major, minor, release, and
4040 # 2. Version numbers are described in the Libtool current:revision:age
4141 # format.
4242
43 libhwloc_so_version=19:1:4
43 libhwloc_so_version=20:0:5
4444 libnetloc_so_version=0:0:0
4545
4646 # Please also update the <TargetName> lines in contrib/windows/libhwloc.vcxproj
1313 m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
1414 m4_ifndef([AC_AUTOCONF_VERSION],
1515 [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
16 m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
17 [m4_warning([this file was generated for autoconf 2.69.
16 m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.71],,
17 [m4_warning([this file was generated for autoconf 2.71.
1818 You have another version of autoconf. It may work, but is not guaranteed to.
1919 If you have problems, you may need to regenerate the build system entirely.
2020 To do so, use the procedure documented by the package, typically 'autoreconf'.])])
00 #! /bin/sh
11 # Attempt to guess a canonical system name.
2 # Copyright 1992-2020 Free Software Foundation, Inc.
3
4 timestamp='2020-11-07'
2 # Copyright 1992-2021 Free Software Foundation, Inc.
3
4 timestamp='2021-01-25'
55
66 # This file is free software; you can redistribute it and/or modify it
77 # under the terms of the GNU General Public License as published by
2626 # Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
2727 #
2828 # You can get the latest version of this script from:
29 # https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
29 # https://git.savannah.gnu.org/cgit/config.git/plain/config.guess
3030 #
3131 # Please send patches to <config-patches@gnu.org>.
3232
4949 GNU config.guess ($timestamp)
5050
5151 Originally written by Per Bothner.
52 Copyright 1992-2020 Free Software Foundation, Inc.
52 Copyright 1992-2021 Free Software Foundation, Inc.
5353
5454 This is free software; see the source for copying conditions. There is NO
5555 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
137137
138138 case "$UNAME_SYSTEM" in
139139 Linux|GNU|GNU/*)
140 # If the system lacks a compiler, then just pick glibc.
141 # We could probably try harder.
142 LIBC=gnu
140 LIBC=unknown
143141
144142 set_cc_for_build
145143 cat <<-EOF > "$dummy.c"
148146 LIBC=uclibc
149147 #elif defined(__dietlibc__)
150148 LIBC=dietlibc
149 #elif defined(__GLIBC__)
150 LIBC=gnu
151151 #else
152152 #include <stdarg.h>
153 /* First heuristic to detect musl libc. */
153154 #ifdef __DEFINED_va_list
154155 LIBC=musl
155 #else
156 LIBC=gnu
157156 #endif
158157 #endif
159158 EOF
160159 eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g')"
160
161 # Second heuristic to detect musl libc.
162 if [ "$LIBC" = unknown ] &&
163 command -v ldd >/dev/null &&
164 ldd --version 2>&1 | grep -q ^musl; then
165 LIBC=musl
166 fi
167
168 # If the system lacks a compiler, then just pick glibc.
169 # We could probably try harder.
170 if [ "$LIBC" = unknown ]; then
171 LIBC=gnu
172 fi
161173 ;;
162174 esac
163175
175187 #
176188 # Note: NetBSD doesn't particularly care about the vendor
177189 # portion of the name. We always set it to "unknown".
178 sysctl="sysctl -n hw.machine_arch"
179190 UNAME_MACHINE_ARCH=$( (uname -p 2>/dev/null || \
180 "/sbin/$sysctl" 2>/dev/null || \
181 "/usr/sbin/$sysctl" 2>/dev/null || \
191 /sbin/sysctl -n hw.machine_arch 2>/dev/null || \
192 /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \
182193 echo unknown))
183194 case "$UNAME_MACHINE_ARCH" in
184195 aarch64eb) machine=aarch64_be-unknown ;;
983994 k1om:Linux:*:*)
984995 echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
985996 exit ;;
997 loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*)
998 echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
999 exit ;;
9861000 m32r*:Linux:*:*)
9871001 echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
9881002 exit ;;
10711085 ppcle:Linux:*:*)
10721086 echo powerpcle-unknown-linux-"$LIBC"
10731087 exit ;;
1074 riscv32:Linux:*:* | riscv64:Linux:*:*)
1088 riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*)
10751089 echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
10761090 exit ;;
10771091 s390:Linux:*:* | s390x:Linux:*:*)
14671481 i*86:rdos:*:*)
14681482 echo "$UNAME_MACHINE"-pc-rdos
14691483 exit ;;
1470 i*86:AROS:*:*)
1471 echo "$UNAME_MACHINE"-pc-aros
1484 *:AROS:*:*)
1485 echo "$UNAME_MACHINE"-unknown-aros
14721486 exit ;;
14731487 x86_64:VMkernel:*:*)
14741488 echo "$UNAME_MACHINE"-unknown-esx
16371651 operating system you are using. If your script is old, overwrite *all*
16381652 copies of config.guess and config.sub with the latest versions from:
16391653
1640 https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
1654 https://git.savannah.gnu.org/cgit/config.git/plain/config.guess
16411655 and
1642 https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
1656 https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
16431657 EOF
16441658
16451659 year=$(echo $timestamp | sed 's,-.*,,')
00 #! /bin/sh
11 # Configuration validation subroutine script.
2 # Copyright 1992-2020 Free Software Foundation, Inc.
3
4 timestamp='2020-11-07'
2 # Copyright 1992-2021 Free Software Foundation, Inc.
3
4 timestamp='2021-01-08'
55
66 # This file is free software; you can redistribute it and/or modify it
77 # under the terms of the GNU General Public License as published by
3232 # Otherwise, we print the canonical config type on stdout and succeed.
3333
3434 # You can get the latest version of this script from:
35 # https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
35 # https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
3636
3737 # This file is supposed to be the same for all GNU packages
3838 # and recognize all the CPU types, system types and aliases
6666 version="\
6767 GNU config.sub ($timestamp)
6868
69 Copyright 1992-2020 Free Software Foundation, Inc.
69 Copyright 1992-2021 Free Software Foundation, Inc.
7070
7171 This is free software; see the source for copying conditions. There is NO
7272 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
11841184 | k1om \
11851185 | le32 | le64 \
11861186 | lm32 \
1187 | loongarch32 | loongarch64 | loongarchx32 \
11871188 | m32c | m32r | m32rle \
11881189 | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \
11891190 | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \
12281229 | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \
12291230 | pru \
12301231 | pyramid \
1231 | riscv | riscv32 | riscv64 \
1232 | riscv | riscv32 | riscv32be | riscv64 | riscv64be \
12321233 | rl78 | romp | rs6000 | rx \
12331234 | s390 | s390x \
12341235 | score \
12401241 | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \
12411242 | spu \
12421243 | tahoe \
1244 | thumbv7* \
12431245 | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \
12441246 | tron \
12451247 | ubicom32 \
16801682
16811683 # Now, validate our (potentially fixed-up) OS.
16821684 case $os in
1683 # Sometimes we do "kernel-abi", so those need to count as OSes.
1685 # Sometimes we do "kernel-libc", so those need to count as OSes.
16841686 musl* | newlib* | uclibc*)
16851687 ;;
1686 # Likewise for "kernel-libc"
1687 eabi | eabihf | gnueabi | gnueabihf)
1688 # Likewise for "kernel-abi"
1689 eabi* | gnueabi*)
1690 ;;
1691 # VxWorks passes extra cpu info in the 4th filed.
1692 simlinux | simwindows | spe)
16881693 ;;
16891694 # Now accept the basic system types.
16901695 # The portable systems comes first.
17481753 ;;
17491754 kfreebsd*-gnu* | kopensolaris*-gnu*)
17501755 ;;
1756 vxworks-simlinux | vxworks-simwindows | vxworks-spe)
1757 ;;
17511758 nto-qnx*)
17521759 ;;
17531760 os2-emx)
00 dnl -*- Autoconf -*-
11 dnl
2 dnl Copyright © 2009-2020 Inria. All rights reserved.
2 dnl Copyright © 2009-2021 Inria. All rights reserved.
33 dnl Copyright © 2009-2012, 2015-2017, 2020 Université Bordeaux
44 dnl Copyright © 2004-2005 The Trustees of Indiana University and Indiana
55 dnl University Research and Technology
162162 [AC_DEFINE([HWLOC_SYM_TRANSFORM], [1])])
163163
164164 # hwloc 2.0+ requires a C99 compliant compiler
165 AC_PROG_CC_C99
166 # The result of AC_PROG_CC_C99 is stored in ac_cv_prog_cc_c99
165 # AC_PROG_CC_C99 obsolete, detected inside AC_PROG_CC, since autoconf 2.70
166 m4_version_prereq([2.70], [], [AC_PROG_CC_C99])
167 # The C99 result of AC_PROG_CC>=2.70 or AC_PROG_CC_C99 is stored in ac_cv_prog_cc_c99
167168 if test "x$ac_cv_prog_cc_c99" = xno ; then
168169 AC_MSG_WARN([hwloc requires a C99 compiler])
169170 AC_MSG_ERROR([Aborting.])
504505 AC_CHECK_LIB([user32], [PostQuitMessage], [hwloc_have_user32="yes"])
505506
506507 AC_PATH_PROGS([HWLOC_MS_LIB], [lib])
507 AC_ARG_VAR([HWLOC_MS_LIB], [Path to Microsoft's Visual Studio `lib' tool])
508508
509509 echo "**** end of Windows-specific checks"
510510 echo
667667 # "sysctlbyname" might still be available in libc (which autoconf
668668 # checks for), they might not be actually usable.
669669 AC_MSG_CHECKING([for sysctl])
670 AC_TRY_LINK([
671 #include <stdio.h>
672 #include <sys/types.h>
673 #include <sys/sysctl.h>
674 ],
675 [return sysctl(NULL,0,NULL,NULL,NULL,0);],
676 [AC_DEFINE([HAVE_SYSCTL],[1],[Define to '1' if sysctl is present and usable])
677 AC_MSG_RESULT(yes)],
678 [AC_MSG_RESULT(no)])
670 AC_LINK_IFELSE([
671 AC_LANG_PROGRAM([
672 #include <stdio.h>
673 #include <sys/types.h>
674 #include <sys/sysctl.h>
675 ], [
676 return sysctl(NULL,0,NULL,NULL,NULL,0);
677 ])],
678 [AC_DEFINE([HAVE_SYSCTL],[1],[Define to '1' if sysctl is present and usable])
679 AC_MSG_RESULT(yes)],
680 [AC_MSG_RESULT(no)])
679681 AC_MSG_CHECKING([for sysctlbyname])
680 AC_TRY_LINK([
681 #include <stdio.h>
682 #include <sys/types.h>
683 #include <sys/sysctl.h>
684 ],
685 [return sysctlbyname(NULL,NULL,NULL,NULL,0);],
686 [AC_DEFINE([HAVE_SYSCTLBYNAME],[1],[Define to '1' if sysctlbyname is present and usable])
687 AC_MSG_RESULT(yes)],
688 [AC_MSG_RESULT(no)])
682 AC_LINK_IFELSE([
683 AC_LANG_PROGRAM([
684 #include <stdio.h>
685 #include <sys/types.h>
686 #include <sys/sysctl.h>
687 ], [
688 return sysctlbyname(NULL,NULL,NULL,NULL,0);
689 ])],
690 [AC_DEFINE([HAVE_SYSCTLBYNAME],[1],[Define to '1' if sysctlbyname is present and usable])
691 AC_MSG_RESULT(yes)],
692 [AC_MSG_RESULT(no)])
689693 fi
690694
691695 AC_CHECK_DECLS([pthread_setaffinity_np],,[:],[[
721725 _SC_PAGE_SIZE,
722726 _SC_LARGE_PAGESIZE],,[:],[[#include <unistd.h>]])
723727
724 AC_HAVE_HEADERS([mach/mach_init.h])
725 AC_HAVE_HEADERS([mach_init.h])
726 AC_HAVE_HEADERS([mach/mach_host.h], [
728 AC_CHECK_HEADERS([mach/mach_init.h])
729 AC_CHECK_HEADERS([mach_init.h])
730 AC_CHECK_HEADERS([mach/mach_host.h], [
727731 AC_CHECK_FUNCS([host_info])
728732 ])
729733
770774 AC_CHECK_DECLS([getexecname], [], [], [AC_INCLUDES_DEFAULT])
771775 # program_invocation_name and __progname may be available but not exported in headers
772776 AC_MSG_CHECKING([for program_invocation_name])
773 AC_TRY_LINK([
774 #ifndef _GNU_SOURCE
775 # define _GNU_SOURCE
776 #endif
777 #include <errno.h>
778 #include <stdio.h>
779 extern char *program_invocation_name;
780 ],[
781 return printf("%s\n", program_invocation_name);
782 ],
783 [AC_DEFINE([HAVE_PROGRAM_INVOCATION_NAME], [1], [Define to '1' if program_invocation_name is present and usable])
784 AC_MSG_RESULT([yes])
785 ],[AC_MSG_RESULT([no])])
777 AC_LINK_IFELSE([
778 AC_LANG_PROGRAM([
779 #ifndef _GNU_SOURCE
780 # define _GNU_SOURCE
781 #endif
782 #include <errno.h>
783 #include <stdio.h>
784 extern char *program_invocation_name;
785 ], [
786 return printf("%s\n", program_invocation_name);
787 ])],
788 [AC_DEFINE([HAVE_PROGRAM_INVOCATION_NAME], [1], [Define to '1' if program_invocation_name is present and usable])
789 AC_MSG_RESULT([yes])
790 ], [AC_MSG_RESULT([no])])
786791 AC_MSG_CHECKING([for __progname])
787 AC_TRY_LINK([
788 #include <stdio.h>
789 extern char *__progname;
790 ],[
791 return printf("%s\n", __progname);
792 ],
793 [AC_DEFINE([HAVE___PROGNAME], [1], [Define to '1' if __progname is present and usable])
794 AC_MSG_RESULT([yes])
795 ],[AC_MSG_RESULT([no])])
792 AC_LINK_IFELSE([
793 AC_LANG_PROGRAM([
794 #include <stdio.h>
795 extern char *__progname;
796 ], [
797 return printf("%s\n", __progname);
798 ])],
799 [AC_DEFINE([HAVE___PROGNAME], [1], [Define to '1' if __progname is present and usable])
800 AC_MSG_RESULT([yes])
801 ],[AC_MSG_RESULT([no])])
796802
797803 case ${target} in
798804 *-*-mingw*|*-*-cygwin*)
908914 [AC_CHECK_HEADER([pciaccess.h],
909915 [AC_CHECK_LIB([pciaccess], [pci_slot_match_iterator_create],
910916 [hwloc_pciaccess_happy=yes
911 HWLOC_PCIACCESS_LIBS="-lpciaccess"])
917 HWLOC_PCIACCESS_LIBS="-lpciaccess"
918 AC_SUBST(HWLOC_PCIACCESS_LIBS)
919 ])
912920 ])
913921 ])
914922
922930 AC_MSG_WARN([find appropriate support])
923931 AC_MSG_ERROR([Cannot continue])])
924932 # don't add LIBS/CFLAGS/REQUIRES yet, depends on plugins
933
934 if test "x$enable_io" != xno && test "x$enable_opencl" != xno -o "x$enable_cuda" != xno -o "x$enable_nvml" != xno; then
935 # Try to find CUDA pkg-config using a specific CUDA version
936 # Use --with-cuda-version first, or $CUDA_VERSION
937 cuda_version=$CUDA_VERSION
938 if test "x$with_cuda_version" != xno -a "x$with_cuda_version" != x; then
939 cuda_version=$with_cuda_version
940 fi
941 if test x$cuda_version != x; then
942 AC_MSG_CHECKING([if cuda-$cuda_version.pc exists])
943 HWLOC_PKG_CHECK_EXISTS([cuda-$cuda_version], [
944 cudapc=cuda-$cuda_version
945 AC_MSG_RESULT(yes)
946 _HWLOC_PKG_CONFIG(cuda_includedir, [variable=includedir], $cudapc)
947 _HWLOC_PKG_CONFIG(cuda_libdir, [variable=libdir], $cudapc)
948 ], [AC_MSG_RESULT(no)])
949 AC_MSG_CHECKING([if cudart-$cuda_version.pc exists])
950 HWLOC_PKG_CHECK_EXISTS([cudart-$cuda_version], [
951 cudartpc=cudart-$cuda_version
952 AC_MSG_RESULT(yes)
953 ], [AC_MSG_RESULT(no)])
954 fi
955
956 # OpenCL/NVML/CUDA may use CUDA directories, define common directories
957 # libnvidia-ml.so (and libcuda.so for tests) is under stubs
958 # when the driver isn't installed on the build machine.
959 # hwloc programs will fail to link if libnvidia-ml.so.1 is not available there too.
960 if test "x$with_cuda" != xno -a "x$with_cuda" != x; then
961 if test "x${ac_cv_sizeof_void_p}" = x4; then
962 HWLOC_CUDA_COMMON_LDFLAGS="-L$with_cuda/lib/ -L$with_cuda/lib/stubs/"
963 else
964 HWLOC_CUDA_COMMON_LDFLAGS="-L$with_cuda/lib64/ -L$with_cuda/lib64/stubs/"
965 fi
966 HWLOC_CUDA_COMMON_CPPFLAGS="-I$with_cuda/include/"
967 else
968 # or use cuda libdir/includedir from cuda.pc above
969 if test x$HWLOC_pkg_cv_cuda_includedir != x -a x$HWLOC_pkg_cv_cuda_libdir != x; then
970 HWLOC_CUDA_COMMON_LDFLAGS="-L$HWLOC_pkg_cv_cuda_libdir -L$HWLOC_pkg_cv_cuda_libdir/stubs/"
971 HWLOC_CUDA_COMMON_CPPFLAGS="-I$HWLOC_pkg_cv_cuda_includedir"
972 fi
973 fi
974 AC_MSG_NOTICE([common CUDA/OpenCL/NVML CPPFLAGS: $HWLOC_CUDA_COMMON_CPPFLAGS])
975 AC_MSG_NOTICE([common CUDA/OpenCL/NVML LDFLAGS: $HWLOC_CUDA_COMMON_LDFLAGS])
976 fi
925977
926978 # OpenCL support
927979 hwloc_opencl_happy=no
9491001 ;;
9501002 *)
9511003 # On Others, look for OpenCL at normal locations
1004 HWLOC_OPENCL_CPPFLAGS="$HWLOC_CUDA_COMMON_CPPFLAGS"
1005 HWLOC_OPENCL_LDFLAGS="$HWLOC_CUDA_COMMON_LDFLAGS"
1006 tmp_save_CPPFLAGS="$CPPFLAGS"
1007 CPPFLAGS="$CPPFLAGS $HWLOC_OPENCL_CPPFLAGS"
1008 tmp_save_LDFLAGS="$LDFLAGS"
1009 LDFLAGS="$LDFLAGS $HWLOC_OPENCL_LDFLAGS"
9521010 AC_CHECK_HEADERS([CL/cl_ext.h], [
9531011 AC_CHECK_LIB([OpenCL], [clGetDeviceIDs], [HWLOC_OPENCL_LIBS="-lOpenCL"], [hwloc_opencl_happy=no])
9541012 ], [hwloc_opencl_happy=no])
1013 CPPFLAGS="$tmp_save_CPPFLAGS"
1014 LDFLAGS="$tmp_save_LDFLAGS"
9551015 ;;
9561016 esac
9571017 fi
958 AC_SUBST(HWLOC_OPENCL_CFLAGS)
1018 AC_SUBST(HWLOC_OPENCL_CPPFLAGS)
9591019 AC_SUBST(HWLOC_OPENCL_LIBS)
9601020 AC_SUBST(HWLOC_OPENCL_LDFLAGS)
9611021 # If we asked for opencl support but couldn't deliver, fail
9771037 hwloc_have_cuda=no
9781038 hwloc_have_cudart=no
9791039 if test "x$enable_io" != xno && test "x$enable_cuda" != "xno"; then
980 AC_CHECK_HEADERS([cuda.h], [
981 AC_MSG_CHECKING(if CUDA_VERSION >= 3020)
982 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1040 # Look for CUDA first, for our test only
1041 if test "x$cudapc" != x; then
1042 HWLOC_PKG_CHECK_MODULES([CUDA], [$cudapc], [cuInit], [cuda.h], [hwloc_have_cuda=yes])
1043 else
1044 HWLOC_CUDA_CPPFLAGS="$HWLOC_CUDA_COMMON_CPPFLAGS"
1045 HWLOC_CUDA_LDFLAGS="$HWLOC_CUDA_COMMON_LDFLAGS"
1046 tmp_save_CPPFLAGS="$CPPFLAGS"
1047 CPPFLAGS="$CPPFLAGS $HWLOC_CUDA_CPPFLAGS"
1048 tmp_save_LDFLAGS="$LDFLAGS"
1049 LDFLAGS="$LDFLAGS $HWLOC_CUDA_LDFLAGS"
1050 AC_CHECK_HEADERS([cuda.h], [
1051 AC_MSG_CHECKING(if CUDA_VERSION >= 3020)
1052 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
9831053 #include <cuda.h>
9841054 #ifndef CUDA_VERSION
9851055 #error CUDA_VERSION undefined
9861056 #elif CUDA_VERSION < 3020
9871057 #error CUDA_VERSION too old
9881058 #endif]], [[int i = 3;]])],
989 [AC_MSG_RESULT(yes)
990 AC_CHECK_LIB([cuda], [cuInit],
991 [AC_DEFINE([HAVE_CUDA], 1, [Define to 1 if we have -lcuda])
992 hwloc_have_cuda=yes])],
993 [AC_MSG_RESULT(no)])])
994
995 AC_CHECK_HEADERS([cuda_runtime_api.h], [
996 AC_MSG_CHECKING(if CUDART_VERSION >= 3020)
997 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1059 [AC_MSG_RESULT(yes)
1060 AC_CHECK_LIB([cuda], [cuInit], [
1061 HWLOC_CUDA_LIBS="-lcuda"
1062 hwloc_have_cuda=yes
1063 ])
1064 ],
1065 [AC_MSG_RESULT(no)])])
1066 CPPFLAGS="$tmp_save_CPPFLAGS"
1067 LDFLAGS="$tmp_save_LDFLAGS"
1068 fi
1069 if test x$hwloc_have_cuda = xyes; then
1070 AC_SUBST(HWLOC_CUDA_CPPFLAGS)
1071 AC_SUBST(HWLOC_CUDA_CFLAGS)
1072 AC_SUBST(HWLOC_CUDA_LIBS)
1073 AC_SUBST(HWLOC_CUDA_LDFLAGS)
1074 AC_DEFINE([HAVE_CUDA], 1, [Define to 1 if we have -lcuda])
1075 fi
1076
1077 # Look for CUDART now, for library and tests
1078 if test "x$cudartpc" != x; then
1079 HWLOC_PKG_CHECK_MODULES([CUDART], [$cudartpc], [cudaGetDeviceProperties], [cuda_runtime_api.h], [
1080 hwloc_have_cudart=yes
1081 HWLOC_CUDART_REQUIRES=$cudartpc
1082 ])
1083 else
1084 HWLOC_CUDART_CPPFLAGS="$HWLOC_CUDA_COMMON_CPPFLAGS"
1085 HWLOC_CUDART_LDFLAGS="$HWLOC_CUDA_COMMON_LDFLAGS"
1086 tmp_save_CPPFLAGS="$CPPFLAGS"
1087 CPPFLAGS="$CPPFLAGS $HWLOC_CUDART_CPPFLAGS"
1088 tmp_save_LDFLAGS="$LDFLAGS"
1089 LDFLAGS="$LDFLAGS $HWLOC_CUDART_LDFLAGS"
1090 AC_CHECK_HEADERS([cuda_runtime_api.h], [
1091 AC_MSG_CHECKING(if CUDART_VERSION >= 3020)
1092 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
9981093 #include <cuda_runtime_api.h>
9991094 #ifndef CUDART_VERSION
10001095 #error CUDART_VERSION undefined
10011096 #elif CUDART_VERSION < 3020
10021097 #error CUDART_VERSION too old
10031098 #endif]], [[int i = 3;]])],
1004 [AC_MSG_RESULT(yes)
1005 AC_CHECK_LIB([cudart], [cudaGetDeviceProperties], [
1006 HWLOC_CUDA_LIBS="-lcudart"
1007 AC_SUBST(HWLOC_CUDA_LIBS)
1008 hwloc_have_cudart=yes
1009 AC_DEFINE([HWLOC_HAVE_CUDART], [1], [Define to 1 if you have the `cudart' SDK.])
1099 [AC_MSG_RESULT(yes)
1100 AC_CHECK_LIB([cudart], [cudaGetDeviceProperties], [
1101 HWLOC_CUDART_LIBS="-lcudart"
1102 hwloc_have_cudart=yes
1103 ])
10101104 ])
10111105 ])
1012 ])
1106 CPPFLAGS="$tmp_save_CPPFLAGS"
1107 LDFLAGS="$tmp_save_LDFLAGS"
1108 fi
1109 if test x$hwloc_have_cudart = xyes; then
1110 AC_SUBST(HWLOC_CUDART_CPPFLAGS)
1111 AC_SUBST(HWLOC_CUDART_CFLAGS)
1112 AC_SUBST(HWLOC_CUDART_LIBS)
1113 AC_SUBST(HWLOC_CUDART_LDFLAGS)
1114 AC_DEFINE([HWLOC_HAVE_CUDART], [1], [Define to 1 if you have the `cudart' SDK.])
1115 fi
10131116
10141117 AS_IF([test "$enable_cuda" = "yes" -a "$hwloc_have_cudart" = "no"],
10151118 [AC_MSG_WARN([Specified --enable-cuda switch, but could not])
10161119 AC_MSG_WARN([find appropriate support])
10171120 AC_MSG_ERROR([Cannot continue])])
1121 AS_IF([test "x$with_cuda_version" != x -a "$hwloc_have_cudart" = "no"],
1122 [AC_MSG_WARN([Specified --with-cuda-version switch, but could not])
1123 AC_MSG_WARN([find appropriate support])
1124 AC_MSG_ERROR([Cannot continue])])
10181125
10191126 if test "x$hwloc_have_cudart" = "xyes"; then
10201127 hwloc_components="$hwloc_components cuda"
10261133 # NVML support
10271134 hwloc_nvml_happy=no
10281135 if test "x$enable_io" != xno && test "x$enable_nvml" != "xno"; then
1029 hwloc_nvml_happy=yes
1030 AC_CHECK_HEADERS([nvml.h], [
1031 AC_CHECK_LIB([nvidia-ml], [nvmlInit], [HWLOC_NVML_LIBS="-lnvidia-ml"], [hwloc_nvml_happy=no])
1032 ], [hwloc_nvml_happy=no])
1136 hwloc_nvml_happy=yes
1137 HWLOC_NVML_CPPFLAGS="$HWLOC_CUDA_COMMON_CPPFLAGS"
1138 HWLOC_NVML_LDFLAGS="$HWLOC_CUDA_COMMON_LDFLAGS"
1139 tmp_save_CPPFLAGS="$CPPFLAGS"
1140 CPPFLAGS="$CPPFLAGS $HWLOC_NVML_CPPFLAGS"
1141 tmp_save_LDFLAGS="$LDFLAGS"
1142 LDFLAGS="$LDFLAGS $HWLOC_NVML_LDFLAGS"
1143 AC_CHECK_HEADERS([nvml.h], [
1144 AC_CHECK_LIB([nvidia-ml], [nvmlInit], [HWLOC_NVML_LIBS="-lnvidia-ml"], [hwloc_nvml_happy=no])
1145 ], [hwloc_nvml_happy=no])
1146 CPPFLAGS="$tmp_save_CPPFLAGS"
1147 LDFLAGS="$tmp_save_LDFLAGS"
10331148 fi
10341149 if test "x$hwloc_nvml_happy" = "xyes"; then
1035 tmp_save_CFLAGS="$CFLAGS"
1036 CFLAGS="$CFLAGS $HWLOC_NVML_CFLAGS"
1037 tmp_save_LIBS="$LIBS"
1038 LIBS="$LIBS $HWLOC_NVML_LIBS"
1150 tmp_save_CPPFLAGS="$CPPFLAGS"
1151 CPPFLAGS="$CPPFLAGS $HWLOC_NVML_CPPFLAGS"
10391152 AC_CHECK_DECLS([nvmlDeviceGetMaxPcieLinkGeneration],,[:],[[#include <nvml.h>]])
1040 CFLAGS="$tmp_save_CFLAGS"
1041 LIBS="$tmp_save_LIBS"
1153 CPPFLAGS="$tmp_save_CPPFLAGS"
10421154 fi
10431155 AC_SUBST(HWLOC_NVML_LIBS)
1156 AC_SUBST(HWLOC_NVML_LDFLAGS)
1157 AC_SUBST(HWLOC_NVML_CPPFLAGS)
10441158 # If we asked for nvml support but couldn't deliver, fail
10451159 AS_IF([test "$enable_nvml" = "yes" -a "$hwloc_nvml_happy" = "no"],
10461160 [AC_MSG_WARN([Specified --enable-nvml switch, but could not])
10771191 hwloc_rsmi_component_maybeplugin=1
10781192 else
10791193 AC_SUBST([HWLOC_HAVE_RSMI], [0])
1194 fi
1195 # don't add LIBS/CFLAGS/REQUIRES yet, depends on plugins
1196
1197 # LevelZero support
1198 hwloc_levelzero_happy=no
1199 if test "x$enable_io" != xno && test "x$enable_levelzero" != "xno"; then
1200 HWLOC_PKG_CHECK_MODULES([LEVELZERO], [libze_loader], [zesDevicePciGetProperties], [level_zero/zes_api.h],
1201 [hwloc_levelzero_happy=yes
1202 HWLOC_LEVELZERO_REQUIRES=libze_loader
1203 ], [hwloc_levelzero_happy=no])
1204 if test x$hwloc_levelzero_happy = xno; then
1205 hwloc_levelzero_happy=yes
1206 AC_CHECK_HEADERS([level_zero/ze_api.h], [
1207 AC_CHECK_LIB([ze_loader], [zeInit], [
1208 AC_CHECK_HEADERS([level_zero/zes_api.h], [
1209 AC_CHECK_LIB([ze_loader], [zesDevicePciGetProperties], [HWLOC_LEVELZERO_LIBS="-lze_loader"], [hwloc_levelzero_happy=no])
1210 ], [hwloc_levelzero_happy=no])
1211 ], [hwloc_levelzero_happy=no])
1212 ], [hwloc_levelzero_happy=no])
1213 fi
1214 fi
1215 AC_SUBST(HWLOC_LEVELZERO_LIBS)
1216 # If we asked for LevelZero support but couldn't deliver, fail
1217 AS_IF([test "$enable_levelzero" = "yes" -a "$hwloc_levelzero_happy" = "no"],
1218 [AC_MSG_WARN([Specified --enable-levelzero switch, but could not])
1219 AC_MSG_WARN([find appropriate support])
1220 AC_MSG_ERROR([Cannot continue])])
1221 if test "x$hwloc_levelzero_happy" = "xyes"; then
1222 AC_DEFINE([HWLOC_HAVE_LEVELZERO], [1], [Define to 1 if you have the `LevelZero' library.])
1223 AC_SUBST([HWLOC_HAVE_LEVELZERO], [1])
1224 hwloc_components="$hwloc_components levelzero"
1225 hwloc_levelzero_component_maybeplugin=1
1226 else
1227 AC_SUBST([HWLOC_HAVE_LEVELZERO], [0])
10801228 fi
10811229 # don't add LIBS/CFLAGS/REQUIRES yet, depends on plugins
10821230
12951443 fi
12961444
12971445 AC_ARG_WITH([hwloc-plugins-path],
1298 AC_HELP_STRING([--with-hwloc-plugins-path=dir:...],
1446 AS_HELP_STRING([--with-hwloc-plugins-path=dir:...],
12991447 [Colon-separated list of plugin directories. Default: "$prefix/lib/hwloc". Plugins will be installed in the first directory. They will be loaded from all of them, in order.]),
13001448 [HWLOC_PLUGINS_PATH="$with_hwloc_plugins_path"],
13011449 [HWLOC_PLUGINS_PATH="\$(libdir)/hwloc"])
13241472
13251473 AS_IF([test "$hwloc_pci_component" = "static"],
13261474 [HWLOC_LIBS="$HWLOC_LIBS $HWLOC_PCIACCESS_LIBS"
1327 HWLOC_CFLAGS="$HWLOC_CFLAGS $HWLOC_PCIACCESS_CFLAGS"
1475 HWLOC_LDFLAGS="$HWLOC_LDFLAGS $HWLOC_PCIACCESS_LDFLAGS"
1476 HWLOC_CFLAGS="$HWLOC_CFLAGS $HWLOC_PCIACCESS_CPPFLAGS $HWLOC_PCIACCESS_CFLAGS"
13281477 HWLOC_REQUIRES="$HWLOC_PCIACCESS_REQUIRES $HWLOC_REQUIRES"])
13291478 AS_IF([test "$hwloc_opencl_component" = "static"],
13301479 [HWLOC_LIBS="$HWLOC_LIBS $HWLOC_OPENCL_LIBS"
13311480 HWLOC_LDFLAGS="$HWLOC_LDFLAGS $HWLOC_OPENCL_LDFLAGS"
1332 HWLOC_CFLAGS="$HWLOC_CFLAGS $HWLOC_OPENCL_CFLAGS"
1481 HWLOC_CFLAGS="$HWLOC_CFLAGS $HWLOC_OPENCL_CPPFLAGS $HWLOC_OPENCL_CFLAGS"
13331482 HWLOC_REQUIRES="$HWLOC_OPENCL_REQUIRES $HWLOC_REQUIRES"])
13341483 AS_IF([test "$hwloc_cuda_component" = "static"],
1335 [HWLOC_LIBS="$HWLOC_LIBS $HWLOC_CUDA_LIBS"
1336 HWLOC_CFLAGS="$HWLOC_CFLAGS $HWLOC_CUDA_CFLAGS"
1337 HWLOC_REQUIRES="$HWLOC_CUDA_REQUIRES $HWLOC_REQUIRES"])
1484 [HWLOC_LIBS="$HWLOC_LIBS $HWLOC_CUDART_LIBS"
1485 HWLOC_LDFLAGS="$HWLOC_LDFLAGS $HWLOC_CUDART_LDFLAGS"
1486 HWLOC_CFLAGS="$HWLOC_CFLAGS $HWLOC_CUDART_CPPFLAGS $HWLOC_CUDART_CFLAGS"
1487 HWLOC_REQUIRES="$HWLOC_CUDART_REQUIRES $HWLOC_REQUIRES"])
13381488 AS_IF([test "$hwloc_nvml_component" = "static"],
13391489 [HWLOC_LIBS="$HWLOC_LIBS $HWLOC_NVML_LIBS"
1340 HWLOC_CFLAGS="$HWLOC_CFLAGS $HWLOC_NVML_CFLAGS"
1490 HWLOC_LDFLAGS="$HWLOC_LDFLAGS $HWLOC_NVML_LDFLAGS"
1491 HWLOC_CFLAGS="$HWLOC_CFLAGS $HWLOC_NVML_CPPFLAGS $HWLOC_NVML_CFLAGS"
13411492 HWLOC_REQUIRES="$HWLOC_NVML_REQUIRES $HWLOC_REQUIRES"])
13421493 AS_IF([test "$hwloc_rsmi_component" = "static"],
13431494 [HWLOC_LIBS="$HWLOC_LIBS $HWLOC_RSMI_LIBS"
1344 HWLOC_CFLAGS="$HWLOC_CFLAGS $HWLOC_RSMI_CFLAGS"
1495 HWLOC_LDFLAGS="$HWLOC_LDFLAGS $HWLOC_RSMI_LDFLAGS"
1496 HWLOC_CFLAGS="$HWLOC_CFLAGS $HWLOC_RSMI_CPPFLAGS $HWLOC_RSMI_CFLAGS"
13451497 HWLOC_REQUIRES="$HWLOC_RSMI_REQUIRES $HWLOC_REQUIRES"])
1498 AS_IF([test "$hwloc_levelzero_component" = "static"],
1499 [HWLOC_LIBS="$HWLOC_LIBS $HWLOC_LEVELZERO_LIBS"
1500 HWLOC_LDFLAGS="$HWLOC_LDFLAGS $HWLOC_LEVELZERO_LDFLAGS"
1501 HWLOC_CFLAGS="$HWLOC_CFLAGS $HWLOC_LEVELZERO_CPPFLAGS $HWLOC_LEVELZERO_CFLAGS"
1502 HWLOC_REQUIRES="$HWLOC_LEVELZERO_REQUIRES $HWLOC_REQUIRES"])
13461503 AS_IF([test "$hwloc_gl_component" = "static"],
13471504 [HWLOC_LIBS="$HWLOC_LIBS $HWLOC_GL_LIBS"
1348 HWLOC_CFLAGS="$HWLOC_CFLAGS $HWLOC_GL_CFLAGS"
1505 HWLOC_LDFLAGS="$HWLOC_LDFLAGS $HWLOC_GL_LDFLAGS"
1506 HWLOC_CFLAGS="$HWLOC_CFLAGS $HWLOC_GL_CPPFLAGS $HWLOC_GL_CFLAGS"
13491507 HWLOC_REQUIRES="$HWLOC_GL_REQUIRES $HWLOC_REQUIRES"])
13501508 AS_IF([test "$hwloc_xml_libxml_component" = "static"],
13511509 [HWLOC_LIBS="$HWLOC_LIBS $HWLOC_LIBXML2_LIBS"
1352 HWLOC_CFLAGS="$HWLOC_CFLAGS $HWLOC_LIBXML2_CFLAGS"
1510 HWLOC_LDFLAGS="$HWLOC_LDFLAGS $HWLOC_LIBXML2_LDFLAGS"
1511 HWLOC_CFLAGS="$HWLOC_CFLAGS $HWLOC_LIBXML2_CPPFLAGS $HWLOC_LIBXML2_CFLAGS"
13531512 HWLOC_REQUIRES="$HWLOC_LIBXML2_REQUIRES $HWLOC_REQUIRES"])
13541513
13551514 #
14361595 AM_CONDITIONAL([HWLOC_HAVE_OPENCL], [test "$hwloc_opencl_happy" = "yes"])
14371596 AM_CONDITIONAL([HWLOC_HAVE_NVML], [test "$hwloc_nvml_happy" = "yes"])
14381597 AM_CONDITIONAL([HWLOC_HAVE_RSMI], [test "$hwloc_rsmi_happy" = "yes"])
1598 AM_CONDITIONAL([HWLOC_HAVE_LEVELZERO], [test "$hwloc_levelzero_happy" = "yes"])
14391599 AM_CONDITIONAL([HWLOC_HAVE_BUNZIPP], [test "x$BUNZIPP" != "xfalse"])
14401600 AM_CONDITIONAL([HWLOC_HAVE_USER32], [test "x$hwloc_have_user32" = "xyes"])
14411601
14711631 AM_CONDITIONAL([HWLOC_CUDA_BUILD_STATIC], [test "x$hwloc_cuda_component" = "xstatic"])
14721632 AM_CONDITIONAL([HWLOC_NVML_BUILD_STATIC], [test "x$hwloc_nvml_component" = "xstatic"])
14731633 AM_CONDITIONAL([HWLOC_RSMI_BUILD_STATIC], [test "x$hwloc_rsmi_component" = "xstatic"])
1634 AM_CONDITIONAL([HWLOC_LEVELZERO_BUILD_STATIC], [test "x$hwloc_levelzero_component" = "xstatic"])
14741635 AM_CONDITIONAL([HWLOC_GL_BUILD_STATIC], [test "x$hwloc_gl_component" = "xstatic"])
14751636 AM_CONDITIONAL([HWLOC_XML_LIBXML_BUILD_STATIC], [test "x$hwloc_xml_libxml_component" = "xstatic"])
14761637
99 # Copyright © 2004-2005 The Regents of the University of California.
1010 # All rights reserved.
1111 # and renamed for hwloc:
12 # Copyright © 2009 Inria. All rights reserved.
12 # Copyright © 2009-2021 Inria. All rights reserved.
1313 # Copyright © 2009 Université Bordeaux
1414 # Copyright © 2010 Cisco Systems, Inc. All rights reserved.
1515 # See COPYING in top-level directory.
9595 #
9696 # Try to compile using the C compiler
9797 #
98 AC_TRY_COMPILE([$2],[],
98 AC_COMPILE_IFELSE(
99 [AC_LANG_PROGRAM([$2], [])],
99100 [
100101 #
101102 # In case we did succeed: Fine, but was this due to the
117118 CFLAGS_safe=$CFLAGS
118119 CFLAGS="$CFLAGS [$4]"
119120
120 AC_TRY_COMPILE([$3],
121 [
122 int i=4711;
123 i=usage(&i);
124 ],
121 AC_COMPILE_IFELSE(
122 [AC_LANG_PROGRAM(
123 [$3],
124 [
125 int i=4711;
126 i=usage(&i);
127 ])
128 ],
125129 [hwloc_cv___attribute__[$1]=0],
126130 [
127131 #
174178 AC_MSG_CHECKING(for __attribute__)
175179
176180 AC_CACHE_VAL(hwloc_cv___attribute__, [
177 AC_TRY_COMPILE(
178 [#include <stdlib.h>
179 /* Check for the longest available __attribute__ (since gcc-2.3) */
180 struct foo {
181 AC_COMPILE_IFELSE(
182 [AC_LANG_PROGRAM(
183 [
184 #include <stdlib.h>
185 ], [
186 /* Check for the longest available __attribute__ (since gcc-2.3) */
187 struct foo {
181188 char a;
182189 int x[2] __attribute__ ((__packed__));
183 };
184 ],
190 };
191 ])],
185192 [],
186193 [hwloc_cv___attribute__=1],
187194 [hwloc_cv___attribute__=0],
188195 )
189196
190197 if test "$hwloc_cv___attribute__" = "1" ; then
191 AC_TRY_COMPILE(
192 [#include <stdlib.h>
193 /* Check for the longest available __attribute__ (since gcc-2.3) */
194 struct foo {
198 AC_COMPILE_IFELSE(
199 [AC_LANG_PROGRAM(
200 [
201 #include <stdlib.h>
202 ], [
203 /* Check for the longest available __attribute__ (since gcc-2.3) */
204 struct foo {
195205 char a;
196206 int x[2] __attribute__ ((__packed__));
197 };
198 ],
207 };
208 ])],
199209 [],
200210 [hwloc_cv___attribute__=1],
201211 [hwloc_cv___attribute__=0],
216226 hwloc_cv___attribute__cold=0
217227 hwloc_cv___attribute__const=0
218228 hwloc_cv___attribute__deprecated=0
229 hwloc_cv___attribute__constructor=0
219230 hwloc_cv___attribute__format=0
220231 hwloc_cv___attribute__hot=0
221232 hwloc_cv___attribute__malloc=0
270281 [],
271282 [])
272283
284 _HWLOC_CHECK_SPECIFIC_ATTRIBUTE([constructor],
285 [
286 void foo(void) __attribute__ ((__constructor__));
287 void foo(void) { return; }
288 ],
289 [],
290 [])
291
273292
274293 HWLOC_ATTRIBUTE_CFLAGS=
275294 case "$hwloc_c_vendor" in
503522 [Whether your compiler has __attribute__ const or not])
504523 AC_DEFINE_UNQUOTED(HWLOC_HAVE_ATTRIBUTE_DEPRECATED, [$hwloc_cv___attribute__deprecated],
505524 [Whether your compiler has __attribute__ deprecated or not])
525 AC_DEFINE_UNQUOTED(HWLOC_HAVE_ATTRIBUTE_CONSTRUCTOR, [$hwloc_cv___attribute__constructor],
526 [Whether your compiler has __attribute__ constructor or not])
506527 AC_DEFINE_UNQUOTED(HWLOC_HAVE_ATTRIBUTE_FORMAT, [$hwloc_cv___attribute__format],
507528 [Whether your compiler has __attribute__ format or not])
508529 AC_DEFINE_UNQUOTED(HWLOC_HAVE_ATTRIBUTE_HOT, [$hwloc_cv___attribute__hot],
1010 # All rights reserved.
1111 # Copyright © 2006-2007 Cisco Systems, Inc. All rights reserved.
1212 # and renamed/modified for hwloc:
13 # Copyright © 2009 Inria. All rights reserved.
13 # Copyright © 2009-2021 Inria. All rights reserved.
1414 # Copyright © 2009-2010 Université Bordeaux
1515 # Copyright © 2010-2012 Cisco Systems, Inc. All rights reserved.
1616 # See COPYING in top-level directory.
6262 # Check if the compiler has support for visibility, like some
6363 # versions of gcc, icc, Sun Studio cc.
6464 AC_ARG_ENABLE(visibility,
65 AC_HELP_STRING([--enable-visibility],
65 AS_HELP_STRING([--enable-visibility],
6666 [enable visibility feature of certain compilers/linkers (default: enabled on platforms that support it)]))
6767
6868 case ${target} in
00 dnl -*- Autoconf -*-
11 dnl
2 dnl Copyright © 2010-2020 Inria. All rights reserved.
2 dnl Copyright © 2010-2021 Inria. All rights reserved.
33 dnl Copyright © 2009, 2011 Université Bordeaux
44 dnl Copyright © 2004-2005 The Trustees of Indiana University and Indiana
55 dnl University Research and Technology
2525 AC_DEFUN([HWLOC_DEFINE_ARGS],[
2626 # Embedded mode, or standalone?
2727 AC_ARG_ENABLE([embedded-mode],
28 AC_HELP_STRING([--enable-embedded-mode],
28 AS_HELP_STRING([--enable-embedded-mode],
2929 [Using --enable-embedded-mode puts the HWLOC into "embedded" mode. The default is --disable-embedded-mode, meaning that the HWLOC is in "standalone" mode.]))
3030
3131 # Change the symbol prefix?
3232 AC_ARG_WITH([hwloc-symbol-prefix],
33 AC_HELP_STRING([--with-hwloc-symbol-prefix=STRING],
33 AS_HELP_STRING([--with-hwloc-symbol-prefix=STRING],
3434 [STRING can be any valid C symbol name. It will be prefixed to all public HWLOC symbols. Default: "hwloc_"]))
35
36 # For the windows build
37 AC_ARG_VAR([HWLOC_MS_LIB], [Path to Microsoft's Visual Studio `lib' tool])
3538
3639 # Debug mode?
3740 AC_ARG_ENABLE([debug],
38 AC_HELP_STRING([--enable-debug],
41 AS_HELP_STRING([--enable-debug],
3942 [Using --enable-debug enables various hwloc maintainer-level debugging controls. This option is not recomended for end users.]))
4043
4144 # Doxygen?
4245 AC_ARG_ENABLE([doxygen],
43 [AC_HELP_STRING([--enable-doxygen],
46 [AS_HELP_STRING([--enable-doxygen],
4447 [enable support for building Doxygen documentation (note that this option is ONLY relevant in developer builds; Doxygen documentation is pre-built for tarball builds and this option is therefore ignored)])])
4548
4649 # Picky?
4750 AC_ARG_ENABLE(picky,
48 AC_HELP_STRING([--disable-picky],
51 AS_HELP_STRING([--disable-picky],
4952 [When in developer checkouts of hwloc and compiling with gcc, the default is to enable maximum compiler pickyness. Using --disable-picky or --enable-picky overrides any default setting]))
5053
5154 # Cairo?
6669 # I/O?
6770 AC_ARG_ENABLE([io],
6871 AS_HELP_STRING([--disable-io],
69 [Disable I/O discovery build entirely (PCI, LinuxIO, CUDA, OpenCL, NVML, RSMI, GL) instead of only disabling it at runtime by default]))
72 [Disable I/O discovery build entirely (PCI, LinuxIO, CUDA, OpenCL, NVML, RSMI, LevelZero, GL) instead of only disabling it at runtime by default]))
7073
7174 # PCI?
7275 AC_ARG_ENABLE([pci],
9295 AS_HELP_STRING([--disable-nvml],
9396 [Disable the NVML device discovery build (instead of only disabling NVML at runtime by default)]))
9497
98 # CUDA version (for using its pkg-config cuda-x.y.pc)
99 AC_ARG_WITH([cuda-version],
100 AS_HELP_STRING([--with-cuda-version=<version>],
101 [Specify the CUDA version (e.g. 11.2) for selecting the appropriate pkg-config file]))
102 AC_ARG_VAR([CUDA_VERSION], [The CUDA version (e.g. 11.2) for selecting the appropriate pkg-config file])
103 # CUDA install path (and NVML and OpenCL)
104 AC_ARG_WITH([cuda],
105 AS_HELP_STRING([--with-cuda=<dir>],
106 [Specify the CUDA installation directory, used for NVIDIA NVML and OpenCL too]))
107
95108 # RSMI?
96109 AC_ARG_ENABLE([rsmi],
97110 AS_HELP_STRING([--disable-rsmi],
98111 [Disable the ROCm SMI device discovery]))
99112
113 # LevelZero
114 AC_ARG_ENABLE([levelzero],
115 AS_HELP_STRING([--disable-levelzero],
116 [Disable the oneAPI Level Zero device discovery]))
117
100118 # GL/Display
101119 AC_ARG_ENABLE([gl],
102120 AS_HELP_STRING([--disable-gl],
115133 # Look for dlopen
116134 # Not --disable-dlopen because $enable_dlopen is already used/set
117135 AC_ARG_ENABLE([plugin-dlopen],
118 AC_HELP_STRING([--disable-plugin-dlopen],
136 AS_HELP_STRING([--disable-plugin-dlopen],
119137 [Do not use dlopen for loading plugins.]))
120138 # Look for ltdl
121139 # Not --disable-ltdl for consistency wrt dlopen above
122140 AC_ARG_ENABLE([plugin-ltdl],
123 AC_HELP_STRING([--disable-plugin-ltdl],
141 AS_HELP_STRING([--disable-plugin-ltdl],
124142 [Do not use ltdl for loading plugins.]))
125143
126144 ])dnl
128146 #-----------------------------------------------------------------------
129147
130148 dnl We only build documentation if this is a developer checkout.
131 dnl Distribution tarballs just install pre-built docuemntation that was
149 dnl Distribution tarballs just install pre-built documentation that was
132150 dnl included in the tarball.
133151
134152 # Probably only ever invoked by hwloc's configure.ac
320338 chosen_curses=""
321339 for curses in ncurses curses
322340 do
323 for lib in "" -ltermcap -l${curses}w -l$curses -ltinfo
341 for lib in "" -l${curses}w -l$curses -ltinfo -ltermcap
324342 do
325343 AC_MSG_CHECKING(termcap support using $curses and $lib)
326344 LIBS="$hwloc_old_LIBS $lib"
418436 AC_CHECK_HEADERS([infiniband/verbs.h], [
419437 AC_CHECK_LIB([ibverbs], [ibv_open_device],
420438 [AC_DEFINE([HAVE_LIBIBVERBS], 1, [Define to 1 if we have -libverbs])
421 hwloc_have_libibverbs=yes])
439 hwloc_have_libibverbs=yes
440 HWLOC_IBVERBS_LIBS=-libverbs
441 AC_SUBST(HWLOC_IBVERBS_LIBS)
442 ])
422443 ])
423444
424445 AC_CHECK_PROGS(XMLLINT, [xmllint])
529550 hwloc_config_prefix[tests/hwloc/ports/topology-cuda.c]:hwloc_config_prefix[hwloc/topology-cuda.c]
530551 hwloc_config_prefix[tests/hwloc/ports/topology-nvml.c]:hwloc_config_prefix[hwloc/topology-nvml.c]
531552 hwloc_config_prefix[tests/hwloc/ports/topology-rsmi.c]:hwloc_config_prefix[hwloc/topology-rsmi.c]
553 hwloc_config_prefix[tests/hwloc/ports/topology-levelzero.c]:hwloc_config_prefix[hwloc/topology-levelzero.c]
532554 hwloc_config_prefix[tests/hwloc/ports/topology-gl.c]:hwloc_config_prefix[hwloc/topology-gl.c]
533555 hwloc_config_prefix[tests/hwloc/ports/lstopo-windows.c]:hwloc_config_prefix[utils/lstopo/lstopo-windows.c]
534556 hwloc_config_prefix[tests/hwloc/ports/lstopo-android.c]:hwloc_config_prefix[utils/lstopo/lstopo-android.c])
+9821
-7573
configure less more
00 #! /bin/sh
11 # Guess values for system-dependent variables and create Makefiles.
2 # Generated by GNU Autoconf 2.69 for hwloc 2.4.1.
2 # Generated by GNU Autoconf 2.71 for hwloc 2.5.0rc1.
33 #
44 # Report bugs to <https://github.com/open-mpi/hwloc/issues>.
55 #
66 #
7 # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
7 # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
8 # Inc.
89 #
910 #
1011 # This configure script is free software; the Free Software Foundation
1516
1617 # Be more Bourne compatible
1718 DUALCASE=1; export DUALCASE # for MKS sh
18 if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
19 as_nop=:
20 if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
21 then :
1922 emulate sh
2023 NULLCMD=:
2124 # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
2225 # is contrary to our usage. Disable this feature.
2326 alias -g '${1+"$@"}'='"$@"'
2427 setopt NO_GLOB_SUBST
25 else
28 else $as_nop
2629 case `(set -o) 2>/dev/null` in #(
2730 *posix*) :
2831 set -o posix ;; #(
3235 fi
3336
3437
38
39 # Reset variables that may have inherited troublesome values from
40 # the environment.
41
42 # IFS needs to be set, to space, tab, and newline, in precisely that order.
43 # (If _AS_PATH_WALK were called with IFS unset, it would have the
44 # side effect of setting IFS to empty, thus disabling word splitting.)
45 # Quoting is to prevent editors from complaining about space-tab.
3546 as_nl='
3647 '
3748 export as_nl
38 # Printing a long string crashes Solaris 7 /usr/bin/printf.
39 as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
40 as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
41 as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
42 # Prefer a ksh shell builtin over an external printf program on Solaris,
43 # but without wasting forks for bash or zsh.
44 if test -z "$BASH_VERSION$ZSH_VERSION" \
45 && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
46 as_echo='print -r --'
47 as_echo_n='print -rn --'
48 elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
49 as_echo='printf %s\n'
50 as_echo_n='printf %s'
51 else
52 if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
53 as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
54 as_echo_n='/usr/ucb/echo -n'
55 else
56 as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
57 as_echo_n_body='eval
58 arg=$1;
59 case $arg in #(
60 *"$as_nl"*)
61 expr "X$arg" : "X\\(.*\\)$as_nl";
62 arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
63 esac;
64 expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
65 '
66 export as_echo_n_body
67 as_echo_n='sh -c $as_echo_n_body as_echo'
68 fi
69 export as_echo_body
70 as_echo='sh -c $as_echo_body as_echo'
71 fi
49 IFS=" "" $as_nl"
50
51 PS1='$ '
52 PS2='> '
53 PS4='+ '
54
55 # Ensure predictable behavior from utilities with locale-dependent output.
56 LC_ALL=C
57 export LC_ALL
58 LANGUAGE=C
59 export LANGUAGE
60
61 # We cannot yet rely on "unset" to work, but we need these variables
62 # to be unset--not just set to an empty or harmless value--now, to
63 # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct
64 # also avoids known problems related to "unset" and subshell syntax
65 # in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
66 for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
67 do eval test \${$as_var+y} \
68 && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
69 done
70
71 # Ensure that fds 0, 1, and 2 are open.
72 if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
73 if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
74 if (exec 3>&2) ; then :; else exec 2>/dev/null; fi
7275
7376 # The user is always right.
74 if test "${PATH_SEPARATOR+set}" != set; then
77 if ${PATH_SEPARATOR+false} :; then
7578 PATH_SEPARATOR=:
7679 (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
7780 (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
7982 }
8083 fi
8184
82
83 # IFS
84 # We need space, tab and new line, in precisely that order. Quoting is
85 # there to prevent editors from complaining about space-tab.
86 # (If _AS_PATH_WALK were called with IFS unset, it would disable word
87 # splitting by setting IFS to empty value.)
88 IFS=" "" $as_nl"
8985
9086 # Find who we are. Look in the path if we contain no directory separator.
9187 as_myself=
9591 for as_dir in $PATH
9692 do
9793 IFS=$as_save_IFS
98 test -z "$as_dir" && as_dir=.
99 test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
94 case $as_dir in #(((
95 '') as_dir=./ ;;
96 */) ;;
97 *) as_dir=$as_dir/ ;;
98 esac
99 test -r "$as_dir$0" && as_myself=$as_dir$0 && break
100100 done
101101 IFS=$as_save_IFS
102102
108108 as_myself=$0
109109 fi
110110 if test ! -f "$as_myself"; then
111 $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
111 printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
112112 exit 1
113113 fi
114114
115 # Unset variables that we do not need and which cause bugs (e.g. in
116 # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
117 # suppresses any "Segmentation fault" message there. '((' could
118 # trigger a bug in pdksh 5.2.14.
119 for as_var in BASH_ENV ENV MAIL MAILPATH
120 do eval test x\${$as_var+set} = xset \
121 && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
122 done
123 PS1='$ '
124 PS2='> '
125 PS4='+ '
126
127 # NLS nuisances.
128 LC_ALL=C
129 export LC_ALL
130 LANGUAGE=C
131 export LANGUAGE
132
133 # CDPATH.
134 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
135115
136116 # Use a proper internal environment variable to ensure we don't fall
137117 # into an infinite loop, continuously re-executing ourselves.
153133 exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
154134 # Admittedly, this is quite paranoid, since all the known shells bail
155135 # out after a failed `exec'.
156 $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
157 as_fn_exit 255
136 printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
137 exit 255
158138 fi
159139 # We don't want this to propagate to other subprocesses.
160140 { _as_can_reexec=; unset _as_can_reexec;}
161141 if test "x$CONFIG_SHELL" = x; then
162 as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
142 as_bourne_compatible="as_nop=:
143 if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
144 then :
163145 emulate sh
164146 NULLCMD=:
165147 # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
166148 # is contrary to our usage. Disable this feature.
167149 alias -g '\${1+\"\$@\"}'='\"\$@\"'
168150 setopt NO_GLOB_SUBST
169 else
151 else \$as_nop
170152 case \`(set -o) 2>/dev/null\` in #(
171153 *posix*) :
172154 set -o posix ;; #(
186168 as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
187169 as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
188170 as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
189 if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
190
191 else
171 if ( set x; as_fn_ret_success y && test x = \"\$1\" )
172 then :
173
174 else \$as_nop
192175 exitcode=1; echo positional parameters were not saved.
193176 fi
194177 test x\$exitcode = x0 || exit 1
178 blah=\$(echo \$(echo blah))
179 test x\"\$blah\" = xblah || exit 1
195180 test -x / || exit 1"
196181 as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
197182 as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
198183 eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
199184 test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
200 test \$(( 1 + 1 )) = 2 || exit 1
201185
202186 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || (
203187 ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
205189 ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO
206190 PATH=/empty FPATH=/empty; export PATH FPATH
207191 test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\
208 || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1"
209 if (eval "$as_required") 2>/dev/null; then :
192 || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1
193 test \$(( 1 + 1 )) = 2 || exit 1"
194 if (eval "$as_required") 2>/dev/null
195 then :
210196 as_have_required=yes
211 else
197 else $as_nop
212198 as_have_required=no
213199 fi
214 if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
215
216 else
200 if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null
201 then :
202
203 else $as_nop
217204 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
218205 as_found=false
219206 for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
220207 do
221208 IFS=$as_save_IFS
222 test -z "$as_dir" && as_dir=.
209 case $as_dir in #(((
210 '') as_dir=./ ;;
211 */) ;;
212 *) as_dir=$as_dir/ ;;
213 esac
223214 as_found=:
224215 case $as_dir in #(
225216 /*)
226217 for as_base in sh bash ksh sh5; do
227218 # Try only shells that exist, to save several forks.
228 as_shell=$as_dir/$as_base
219 as_shell=$as_dir$as_base
229220 if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
230 { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
221 as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null
222 then :
231223 CONFIG_SHELL=$as_shell as_have_required=yes
232 if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
224 if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null
225 then :
233226 break 2
234227 fi
235228 fi
237230 esac
238231 as_found=false
239232 done
240 $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
241 { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
233 IFS=$as_save_IFS
234 if $as_found
235 then :
236
237 else $as_nop
238 if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
239 as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null
240 then :
242241 CONFIG_SHELL=$SHELL as_have_required=yes
243 fi; }
244 IFS=$as_save_IFS
245
246
247 if test "x$CONFIG_SHELL" != x; then :
242 fi
243 fi
244
245
246 if test "x$CONFIG_SHELL" != x
247 then :
248248 export CONFIG_SHELL
249249 # We cannot yet assume a decent shell, so we have to provide a
250250 # neutralization value for shells without unset; and this also
262262 exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
263263 # Admittedly, this is quite paranoid, since all the known shells bail
264264 # out after a failed `exec'.
265 $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
265 printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
266266 exit 255
267267 fi
268268
269 if test x$as_have_required = xno; then :
270 $as_echo "$0: This script requires a shell more modern than all"
271 $as_echo "$0: the shells that I found on your system."
272 if test x${ZSH_VERSION+set} = xset ; then
273 $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
274 $as_echo "$0: be upgraded to zsh 4.3.4 or later."
269 if test x$as_have_required = xno
270 then :
271 printf "%s\n" "$0: This script requires a shell more modern than all"
272 printf "%s\n" "$0: the shells that I found on your system."
273 if test ${ZSH_VERSION+y} ; then
274 printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should"
275 printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later."
275276 else
276 $as_echo "$0: Please tell bug-autoconf@gnu.org and
277 printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and
277278 $0: https://github.com/open-mpi/hwloc/issues about your
278279 $0: system, including any error possibly output before this
279280 $0: message. Then install a modern shell, or manually run
301302 }
302303 as_unset=as_fn_unset
303304
305
304306 # as_fn_set_status STATUS
305307 # -----------------------
306308 # Set $? to STATUS, without forking.
318320 as_fn_set_status $1
319321 exit $1
320322 } # as_fn_exit
323 # as_fn_nop
324 # ---------
325 # Do nothing but, unlike ":", preserve the value of $?.
326 as_fn_nop ()
327 {
328 return $?
329 }
330 as_nop=as_fn_nop
321331
322332 # as_fn_mkdir_p
323333 # -------------
332342 as_dirs=
333343 while :; do
334344 case $as_dir in #(
335 *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
345 *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
336346 *) as_qdir=$as_dir;;
337347 esac
338348 as_dirs="'$as_qdir' $as_dirs"
341351 X"$as_dir" : 'X\(//\)[^/]' \| \
342352 X"$as_dir" : 'X\(//\)$' \| \
343353 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
344 $as_echo X"$as_dir" |
354 printf "%s\n" X"$as_dir" |
345355 sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
346356 s//\1/
347357 q
380390 # advantage of any shell optimizations that allow amortized linear growth over
381391 # repeated appends, instead of the typical quadratic growth present in naive
382392 # implementations.
383 if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
393 if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
394 then :
384395 eval 'as_fn_append ()
385396 {
386397 eval $1+=\$2
387398 }'
388 else
399 else $as_nop
389400 as_fn_append ()
390401 {
391402 eval $1=\$$1\$2
397408 # Perform arithmetic evaluation on the ARGs, and store the result in the
398409 # global $as_val. Take advantage of shells that can avoid forks. The arguments
399410 # must be portable across $(()) and expr.
400 if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
411 if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
412 then :
401413 eval 'as_fn_arith ()
402414 {
403415 as_val=$(( $* ))
404416 }'
405 else
417 else $as_nop
406418 as_fn_arith ()
407419 {
408420 as_val=`expr "$@" || test $? -eq 1`
409421 }
410422 fi # as_fn_arith
411423
424 # as_fn_nop
425 # ---------
426 # Do nothing but, unlike ":", preserve the value of $?.
427 as_fn_nop ()
428 {
429 return $?
430 }
431 as_nop=as_fn_nop
412432
413433 # as_fn_error STATUS ERROR [LINENO LOG_FD]
414434 # ----------------------------------------
420440 as_status=$1; test $as_status -eq 0 && as_status=1
421441 if test "$4"; then
422442 as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
423 $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
443 printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
424444 fi
425 $as_echo "$as_me: error: $2" >&2
445 printf "%s\n" "$as_me: error: $2" >&2
426446 as_fn_exit $as_status
427447 } # as_fn_error
428448
449469 $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
450470 X"$0" : 'X\(//\)$' \| \
451471 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
452 $as_echo X/"$0" |
472 printf "%s\n" X/"$0" |
453473 sed '/^.*\/\([^/][^/]*\)\/*$/{
454474 s//\1/
455475 q
493513 s/-\n.*//
494514 ' >$as_me.lineno &&
495515 chmod +x "$as_me.lineno" ||
496 { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
516 { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
497517
498518 # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
499519 # already done that, so ensure we don't try to do so again and fall
507527 exit
508528 }
509529
530
531 # Determine whether it's possible to make 'echo' print without a newline.
532 # These variables are no longer used directly by Autoconf, but are AC_SUBSTed
533 # for compatibility with existing Makefiles.
510534 ECHO_C= ECHO_N= ECHO_T=
511535 case `echo -n x` in #(((((
512536 -n*)
519543 *)
520544 ECHO_N='-n';;
521545 esac
546
547 # For backward compatibility with old third-party macros, we provide
548 # the shell variables $as_echo and $as_echo_n. New code should use
549 # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
550 as_echo='printf %s\n'
551 as_echo_n='printf %s'
552
522553
523554 rm -f conf$$ conf$$.exe conf$$.file
524555 if test -d conf$$.dir; then
589620 # Identity of this package.
590621 PACKAGE_NAME='hwloc'
591622 PACKAGE_TARNAME='hwloc'
592 PACKAGE_VERSION='2.4.1'
593 PACKAGE_STRING='hwloc 2.4.1'
623 PACKAGE_VERSION='2.5.0rc1'
624 PACKAGE_STRING='hwloc 2.5.0rc1'
594625 PACKAGE_BUGREPORT='https://github.com/open-mpi/hwloc/issues'
595626 PACKAGE_URL=''
596627
597628 # Factoring default headers for most tests.
598629 ac_includes_default="\
599 #include <stdio.h>
600 #ifdef HAVE_SYS_TYPES_H
601 # include <sys/types.h>
630 #include <stddef.h>
631 #ifdef HAVE_STDIO_H
632 # include <stdio.h>
602633 #endif
603 #ifdef HAVE_SYS_STAT_H
604 # include <sys/stat.h>
605 #endif
606 #ifdef STDC_HEADERS
634 #ifdef HAVE_STDLIB_H
607635 # include <stdlib.h>
608 # include <stddef.h>
609 #else
610 # ifdef HAVE_STDLIB_H
611 # include <stdlib.h>
612 # endif
613636 #endif
614637 #ifdef HAVE_STRING_H
615 # if !defined STDC_HEADERS && defined HAVE_MEMORY_H
616 # include <memory.h>
617 # endif
618638 # include <string.h>
619 #endif
620 #ifdef HAVE_STRINGS_H
621 # include <strings.h>
622639 #endif
623640 #ifdef HAVE_INTTYPES_H
624641 # include <inttypes.h>
626643 #ifdef HAVE_STDINT_H
627644 # include <stdint.h>
628645 #endif
646 #ifdef HAVE_STRINGS_H
647 # include <strings.h>
648 #endif
649 #ifdef HAVE_SYS_TYPES_H
650 # include <sys/types.h>
651 #endif
652 #ifdef HAVE_SYS_STAT_H
653 # include <sys/stat.h>
654 #endif
629655 #ifdef HAVE_UNISTD_H
630656 # include <unistd.h>
631657 #endif"
632658
659 ac_header_c_list=
633660 ac_subst_vars='am__EXEEXT_FALSE
634661 am__EXEEXT_TRUE
635662 LTLIBOBJS
648675 HWLOC_XML_LIBXML_BUILD_STATIC_TRUE
649676 HWLOC_GL_BUILD_STATIC_FALSE
650677 HWLOC_GL_BUILD_STATIC_TRUE
678 HWLOC_LEVELZERO_BUILD_STATIC_FALSE
679 HWLOC_LEVELZERO_BUILD_STATIC_TRUE
651680 HWLOC_RSMI_BUILD_STATIC_FALSE
652681 HWLOC_RSMI_BUILD_STATIC_TRUE
653682 HWLOC_NVML_BUILD_STATIC_FALSE
702731 HWLOC_HAVE_USER32_TRUE
703732 HWLOC_HAVE_BUNZIPP_FALSE
704733 HWLOC_HAVE_BUNZIPP_TRUE
734 HWLOC_HAVE_LEVELZERO_FALSE
735 HWLOC_HAVE_LEVELZERO_TRUE
705736 HWLOC_HAVE_RSMI_FALSE
706737 HWLOC_HAVE_RSMI_TRUE
707738 HWLOC_HAVE_NVML_FALSE
738769 HWLOC_BUILD_STANDALONE_TRUE
739770 BUNZIPP
740771 XMLLINT
772 HWLOC_IBVERBS_LIBS
741773 HWLOC_NUMA_LIBS
742774 HWLOC_NUMA_CFLAGS
743775 HWLOC_PS_LIBS
797829 X_LIBS
798830 X_PRE_LIBS
799831 X_CFLAGS
832 CPP
800833 XMKMF
834 HWLOC_HAVE_LEVELZERO
835 HWLOC_LEVELZERO_LIBS
836 HWLOC_LEVELZERO_CFLAGS
801837 HWLOC_HAVE_RSMI
802838 HWLOC_RSMI_LIBS
803839 HWLOC_HAVE_NVML
840 HWLOC_NVML_CPPFLAGS
841 HWLOC_NVML_LDFLAGS
804842 HWLOC_NVML_LIBS
843 HWLOC_CUDART_LDFLAGS
844 HWLOC_CUDART_CPPFLAGS
845 HWLOC_CUDART_LIBS
846 HWLOC_CUDART_CFLAGS
847 HWLOC_CUDA_LDFLAGS
848 HWLOC_CUDA_CPPFLAGS
805849 HWLOC_CUDA_LIBS
850 HWLOC_CUDA_CFLAGS
806851 HWLOC_HAVE_OPENCL
807852 HWLOC_OPENCL_LDFLAGS
808853 HWLOC_OPENCL_LIBS
809 HWLOC_OPENCL_CFLAGS
854 HWLOC_OPENCL_CPPFLAGS
810855 HWLOC_PCIACCESS_LIBS
811856 HWLOC_PCIACCESS_CFLAGS
812857 PKG_CONFIG
813858 BASH
814 HWLOC_MS_LIB
815859 HWLOC_MS_LIB_ARCH
816860 HWLOC_RELEASE_DATE
817861 HWLOC_VERSION
818862 HWLOC_top_srcdir
819863 HWLOC_top_builddir
820864 libhwloc_so_version
865 CUDA_VERSION
866 HWLOC_MS_LIB
821867 CC_FOR_BUILD
822868 CXXCPP
823869 am__fastdepCXX_FALSE
840886 DUMPBIN
841887 LD
842888 FGREP
889 EGREP
890 GREP
843891 SED
844892 LIBTOOL
845893 OBJDUMP
847895 AS
848896 ac_ct_AR
849897 AR
850 EGREP
851 GREP
852 CPP
853898 am__fastdepCC_FALSE
854899 am__fastdepCC_TRUE
855900 CCDEPMODE
924969 docdir
925970 oldincludedir
926971 includedir
972 runstatedir
927973 localstatedir
928974 sharedstatedir
929975 sysconfdir
9711017 enable_opencl
9721018 enable_cuda
9731019 enable_nvml
1020 with_cuda_version
1021 with_cuda
9741022 enable_rsmi
1023 enable_levelzero
9751024 enable_gl
9761025 enable_libudev
9771026 enable_plugins
9901039 LDFLAGS
9911040 LIBS
9921041 CPPFLAGS
993 CPP
9941042 LT_SYS_LIBRARY_PATH
9951043 CXX
9961044 CXXFLAGS
9981046 CXXCPP
9991047 CC_FOR_BUILD
10001048 HWLOC_MS_LIB
1049 CUDA_VERSION
10011050 PKG_CONFIG
10021051 HWLOC_PCIACCESS_CFLAGS
10031052 HWLOC_PCIACCESS_LIBS
1053 HWLOC_CUDA_CFLAGS
1054 HWLOC_CUDA_LIBS
1055 HWLOC_CUDART_CFLAGS
1056 HWLOC_CUDART_LIBS
1057 HWLOC_LEVELZERO_CFLAGS
1058 HWLOC_LEVELZERO_LIBS
10041059 XMKMF
1060 CPP
10051061 HWLOC_LIBXML2_CFLAGS
10061062 HWLOC_LIBXML2_LIBS
10071063 DOXYGEN
10551111 sysconfdir='${prefix}/etc'
10561112 sharedstatedir='${prefix}/com'
10571113 localstatedir='${prefix}/var'
1114 runstatedir='${localstatedir}/run'
10581115 includedir='${prefix}/include'
10591116 oldincludedir='/usr/include'
10601117 docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
10841141 *) ac_optarg=yes ;;
10851142 esac
10861143
1087 # Accept the important Cygnus configure options, so we can diagnose typos.
1088
10891144 case $ac_dashdash$ac_option in
10901145 --)
10911146 ac_dashdash=yes ;;
11261181 ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
11271182 # Reject names that are not valid shell variable names.
11281183 expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
1129 as_fn_error $? "invalid feature name: $ac_useropt"
1184 as_fn_error $? "invalid feature name: \`$ac_useropt'"
11301185 ac_useropt_orig=$ac_useropt
1131 ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
1186 ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
11321187 case $ac_user_opts in
11331188 *"
11341189 "enable_$ac_useropt"
11521207 ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
11531208 # Reject names that are not valid shell variable names.
11541209 expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
1155 as_fn_error $? "invalid feature name: $ac_useropt"
1210 as_fn_error $? "invalid feature name: \`$ac_useropt'"
11561211 ac_useropt_orig=$ac_useropt
1157 ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
1212 ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
11581213 case $ac_user_opts in
11591214 *"
11601215 "enable_$ac_useropt"
13071362 | -silent | --silent | --silen | --sile | --sil)
13081363 silent=yes ;;
13091364
1365 -runstatedir | --runstatedir | --runstatedi | --runstated \
1366 | --runstate | --runstat | --runsta | --runst | --runs \
1367 | --run | --ru | --r)
1368 ac_prev=runstatedir ;;
1369 -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
1370 | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
1371 | --run=* | --ru=* | --r=*)
1372 runstatedir=$ac_optarg ;;
1373
13101374 -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
13111375 ac_prev=sbindir ;;
13121376 -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
13561420 ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
13571421 # Reject names that are not valid shell variable names.
13581422 expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
1359 as_fn_error $? "invalid package name: $ac_useropt"
1423 as_fn_error $? "invalid package name: \`$ac_useropt'"
13601424 ac_useropt_orig=$ac_useropt
1361 ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
1425 ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
13621426 case $ac_user_opts in
13631427 *"
13641428 "with_$ac_useropt"
13721436 ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
13731437 # Reject names that are not valid shell variable names.
13741438 expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
1375 as_fn_error $? "invalid package name: $ac_useropt"
1439 as_fn_error $? "invalid package name: \`$ac_useropt'"
13761440 ac_useropt_orig=$ac_useropt
1377 ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
1441 ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
13781442 case $ac_user_opts in
13791443 *"
13801444 "with_$ac_useropt"
14181482
14191483 *)
14201484 # FIXME: should be removed in autoconf 3.0.
1421 $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
1485 printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2
14221486 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
1423 $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
1487 printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2
14241488 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
14251489 ;;
14261490
14361500 case $enable_option_checking in
14371501 no) ;;
14381502 fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
1439 *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
1503 *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
14401504 esac
14411505 fi
14421506
14441508 for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
14451509 datadir sysconfdir sharedstatedir localstatedir includedir \
14461510 oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
1447 libdir localedir mandir
1511 libdir localedir mandir runstatedir
14481512 do
14491513 eval ac_val=\$$ac_var
14501514 # Remove trailing slashes.
15001564 X"$as_myself" : 'X\(//\)[^/]' \| \
15011565 X"$as_myself" : 'X\(//\)$' \| \
15021566 X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
1503 $as_echo X"$as_myself" |
1567 printf "%s\n" X"$as_myself" |
15041568 sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
15051569 s//\1/
15061570 q
15571621 # Omit some internal or obsolete options to make the list less imposing.
15581622 # This message is too long to be a string in the A/UX 3.1 sh.
15591623 cat <<_ACEOF
1560 \`configure' configures hwloc 2.4.1 to adapt to many kinds of systems.
1624 \`configure' configures hwloc 2.5.0rc1 to adapt to many kinds of systems.
15611625
15621626 Usage: $0 [OPTION]... [VAR=VALUE]...
15631627
15971661 --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
15981662 --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
15991663 --localstatedir=DIR modifiable single-machine data [PREFIX/var]
1664 --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run]
16001665 --libdir=DIR object code libraries [EPREFIX/lib]
16011666 --includedir=DIR C header files [PREFIX/include]
16021667 --oldincludedir=DIR C header files for non-gcc [/usr/include]
16321697
16331698 if test -n "$ac_init_help"; then
16341699 case $ac_init_help in
1635 short | recursive ) echo "Configuration of hwloc 2.4.1:";;
1700 short | recursive ) echo "Configuration of hwloc 2.5.0rc1:";;
16361701 esac
16371702 cat <<\_ACEOF
16381703
16721737 --disable-libxml2 Do not use libxml2 for XML support, use a custom
16731738 minimalistic support
16741739 --disable-io Disable I/O discovery build entirely (PCI, LinuxIO,
1675 CUDA, OpenCL, NVML, RSMI, GL) instead of only
1676 disabling it at runtime by default
1740 CUDA, OpenCL, NVML, RSMI, LevelZero, GL) instead of
1741 only disabling it at runtime by default
16771742 --disable-pci Disable the PCI device discovery build (instead of
16781743 only disabling PCI at runtime by default)
16791744 --enable-32bits-pci-domain
16881753 --disable-nvml Disable the NVML device discovery build (instead of
16891754 only disabling NVML at runtime by default)
16901755 --disable-rsmi Disable the ROCm SMI device discovery
1756 --disable-levelzero Disable the oneAPI Level Zero device discovery
16911757 --disable-gl Disable the GL display device discovery (instead of
16921758 only disabling GL at runtime by default)
16931759 --disable-libudev Disable the Linux libudev
17201786 STRING can be any valid C symbol name. It will be
17211787 prefixed to all public HWLOC symbols. Default:
17221788 "hwloc_"
1789 --with-cuda-version=<version>
1790 Specify the CUDA version (e.g. 11.2) for selecting
1791 the appropriate pkg-config file
1792 --with-cuda=<dir> Specify the CUDA installation directory, used for
1793 NVIDIA NVML and OpenCL too
17231794 --with-x use the X Window System
17241795 --with-hwloc-plugins-path=dir:...
17251796 Colon-separated list of plugin directories. Default:
17351806 LIBS libraries to pass to the linker, e.g. -l<library>
17361807 CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
17371808 you have headers in a nonstandard directory <include dir>
1738 CPP C preprocessor
17391809 LT_SYS_LIBRARY_PATH
17401810 User-defined run-time library search path.
17411811 CXX C++ compiler command
17451815 build system C compiler
17461816 HWLOC_MS_LIB
17471817 Path to Microsoft's Visual Studio `lib' tool
1818 CUDA_VERSION
1819 The CUDA version (e.g. 11.2) for selecting the appropriate
1820 pkg-config file
17481821 PKG_CONFIG path to pkg-config utility
17491822 HWLOC_PCIACCESS_CFLAGS
17501823 C compiler flags for PCIACCESS, overriding pkg-config
17511824 HWLOC_PCIACCESS_LIBS
17521825 linker flags for PCIACCESS, overriding pkg-config
1826 HWLOC_CUDA_CFLAGS
1827 C compiler flags for CUDA, overriding pkg-config
1828 HWLOC_CUDA_LIBS
1829 linker flags for CUDA, overriding pkg-config
1830 HWLOC_CUDART_CFLAGS
1831 C compiler flags for CUDART, overriding pkg-config
1832 HWLOC_CUDART_LIBS
1833 linker flags for CUDART, overriding pkg-config
1834 HWLOC_LEVELZERO_CFLAGS
1835 C compiler flags for LEVELZERO, overriding pkg-config
1836 HWLOC_LEVELZERO_LIBS
1837 linker flags for LEVELZERO, overriding pkg-config
17531838 XMKMF Path to xmkmf, Makefile generator for X Window System
1839 CPP C preprocessor
17541840 HWLOC_LIBXML2_CFLAGS
17551841 C compiler flags for LIBXML2, overriding pkg-config
17561842 HWLOC_LIBXML2_LIBS
18001886 case "$ac_dir" in
18011887 .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
18021888 *)
1803 ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
1889 ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
18041890 # A ".." for each directory in $ac_dir_suffix.
1805 ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
1891 ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
18061892 case $ac_top_builddir_sub in
18071893 "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
18081894 *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
18301916 ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
18311917
18321918 cd "$ac_dir" || { ac_status=$?; continue; }
1833 # Check for guested configure.
1919 # Check for configure.gnu first; this name is used for a wrapper for
1920 # Metaconfig's "Configure" on case-insensitive file systems.
18341921 if test -f "$ac_srcdir/configure.gnu"; then
18351922 echo &&
18361923 $SHELL "$ac_srcdir/configure.gnu" --help=recursive
18381925 echo &&
18391926 $SHELL "$ac_srcdir/configure" --help=recursive
18401927 else
1841 $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
1928 printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2
18421929 fi || ac_status=$?
18431930 cd "$ac_pwd" || { ac_status=$?; break; }
18441931 done
18471934 test -n "$ac_init_help" && exit $ac_status
18481935 if $ac_init_version; then
18491936 cat <<\_ACEOF
1850 hwloc configure 2.4.1
1851 generated by GNU Autoconf 2.69
1852
1853 Copyright (C) 2012 Free Software Foundation, Inc.
1937 hwloc configure 2.5.0rc1
1938 generated by GNU Autoconf 2.71
1939
1940 Copyright (C) 2021 Free Software Foundation, Inc.
18541941 This configure script is free software; the Free Software Foundation
18551942 gives unlimited permission to copy, distribute and modify it.
18561943 _ACEOF
18671954 ac_fn_c_try_compile ()
18681955 {
18691956 as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
1870 rm -f conftest.$ac_objext
1957 rm -f conftest.$ac_objext conftest.beam
18711958 if { { ac_try="$ac_compile"
18721959 case "(($ac_try" in
18731960 *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
18741961 *) ac_try_echo=$ac_try;;
18751962 esac
18761963 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
1877 $as_echo "$ac_try_echo"; } >&5
1964 printf "%s\n" "$ac_try_echo"; } >&5
18781965 (eval "$ac_compile") 2>conftest.err
18791966 ac_status=$?
18801967 if test -s conftest.err; then
18821969 cat conftest.er1 >&5
18831970 mv -f conftest.er1 conftest.err
18841971 fi
1885 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
1972 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
18861973 test $ac_status = 0; } && {
18871974 test -z "$ac_c_werror_flag" ||
18881975 test ! -s conftest.err
1889 } && test -s conftest.$ac_objext; then :
1976 } && test -s conftest.$ac_objext
1977 then :
18901978 ac_retval=0
1891 else
1892 $as_echo "$as_me: failed program was:" >&5
1979 else $as_nop
1980 printf "%s\n" "$as_me: failed program was:" >&5
18931981 sed 's/^/| /' conftest.$ac_ext >&5
18941982
18951983 ac_retval=1
18981986 as_fn_set_status $ac_retval
18991987
19001988 } # ac_fn_c_try_compile
1901
1902 # ac_fn_c_try_cpp LINENO
1903 # ----------------------
1904 # Try to preprocess conftest.$ac_ext, and return whether this succeeded.
1905 ac_fn_c_try_cpp ()
1906 {
1907 as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
1908 if { { ac_try="$ac_cpp conftest.$ac_ext"
1909 case "(($ac_try" in
1910 *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
1911 *) ac_try_echo=$ac_try;;
1912 esac
1913 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
1914 $as_echo "$ac_try_echo"; } >&5
1915 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
1916 ac_status=$?
1917 if test -s conftest.err; then
1918 grep -v '^ *+' conftest.err >conftest.er1
1919 cat conftest.er1 >&5
1920 mv -f conftest.er1 conftest.err
1921 fi
1922 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
1923 test $ac_status = 0; } > conftest.i && {
1924 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
1925 test ! -s conftest.err
1926 }; then :
1927 ac_retval=0
1928 else
1929 $as_echo "$as_me: failed program was:" >&5
1930 sed 's/^/| /' conftest.$ac_ext >&5
1931
1932 ac_retval=1
1933 fi
1934 eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
1935 as_fn_set_status $ac_retval
1936
1937 } # ac_fn_c_try_cpp
1938
1939 # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
1940 # -------------------------------------------------------
1941 # Tests whether HEADER exists, giving a warning if it cannot be compiled using
1942 # the include files in INCLUDES and setting the cache variable VAR
1943 # accordingly.
1944 ac_fn_c_check_header_mongrel ()
1945 {
1946 as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
1947 if eval \${$3+:} false; then :
1948 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
1949 $as_echo_n "checking for $2... " >&6; }
1950 if eval \${$3+:} false; then :
1951 $as_echo_n "(cached) " >&6
1952 fi
1953 eval ac_res=\$$3
1954 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
1955 $as_echo "$ac_res" >&6; }
1956 else
1957 # Is the header compilable?
1958 { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
1959 $as_echo_n "checking $2 usability... " >&6; }
1960 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1961 /* end confdefs.h. */
1962 $4
1963 #include <$2>
1964 _ACEOF
1965 if ac_fn_c_try_compile "$LINENO"; then :
1966 ac_header_compiler=yes
1967 else
1968 ac_header_compiler=no
1969 fi
1970 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
1971 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
1972 $as_echo "$ac_header_compiler" >&6; }
1973
1974 # Is the header present?
1975 { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
1976 $as_echo_n "checking $2 presence... " >&6; }
1977 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1978 /* end confdefs.h. */
1979 #include <$2>
1980 _ACEOF
1981 if ac_fn_c_try_cpp "$LINENO"; then :
1982 ac_header_preproc=yes
1983 else
1984 ac_header_preproc=no
1985 fi
1986 rm -f conftest.err conftest.i conftest.$ac_ext
1987 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
1988 $as_echo "$ac_header_preproc" >&6; }
1989
1990 # So? What about this header?
1991 case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
1992 yes:no: )
1993 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
1994 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
1995 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
1996 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
1997 ;;
1998 no:yes:* )
1999 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
2000 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
2001 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
2002 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
2003 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
2004 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
2005 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
2006 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
2007 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
2008 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
2009 ( $as_echo "## ------------------------------------------------------- ##
2010 ## Report this to https://github.com/open-mpi/hwloc/issues ##
2011 ## ------------------------------------------------------- ##"
2012 ) | sed "s/^/$as_me: WARNING: /" >&2
2013 ;;
2014 esac
2015 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
2016 $as_echo_n "checking for $2... " >&6; }
2017 if eval \${$3+:} false; then :
2018 $as_echo_n "(cached) " >&6
2019 else
2020 eval "$3=\$ac_header_compiler"
2021 fi
2022 eval ac_res=\$$3
2023 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
2024 $as_echo "$ac_res" >&6; }
2025 fi
2026 eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
2027
2028 } # ac_fn_c_check_header_mongrel
2029
2030 # ac_fn_c_try_run LINENO
2031 # ----------------------
2032 # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
2033 # that executables *can* be run.
2034 ac_fn_c_try_run ()
2035 {
2036 as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
2037 if { { ac_try="$ac_link"
2038 case "(($ac_try" in
2039 *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
2040 *) ac_try_echo=$ac_try;;
2041 esac
2042 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
2043 $as_echo "$ac_try_echo"; } >&5
2044 (eval "$ac_link") 2>&5
2045 ac_status=$?
2046 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
2047 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
2048 { { case "(($ac_try" in
2049 *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
2050 *) ac_try_echo=$ac_try;;
2051 esac
2052 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
2053 $as_echo "$ac_try_echo"; } >&5
2054 (eval "$ac_try") 2>&5
2055 ac_status=$?
2056 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
2057 test $ac_status = 0; }; }; then :
2058 ac_retval=0
2059 else
2060 $as_echo "$as_me: program exited with status $ac_status" >&5
2061 $as_echo "$as_me: failed program was:" >&5
2062 sed 's/^/| /' conftest.$ac_ext >&5
2063
2064 ac_retval=$ac_status
2065 fi
2066 rm -rf conftest.dSYM conftest_ipa8_conftest.oo
2067 eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
2068 as_fn_set_status $ac_retval
2069
2070 } # ac_fn_c_try_run
20711989
20721990 # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
20731991 # -------------------------------------------------------
20761994 ac_fn_c_check_header_compile ()
20771995 {
20781996 as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
2079 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
2080 $as_echo_n "checking for $2... " >&6; }
2081 if eval \${$3+:} false; then :
2082 $as_echo_n "(cached) " >&6
2083 else
1997 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
1998 printf %s "checking for $2... " >&6; }
1999 if eval test \${$3+y}
2000 then :
2001 printf %s "(cached) " >&6
2002 else $as_nop
20842003 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
20852004 /* end confdefs.h. */
20862005 $4
20872006 #include <$2>
20882007 _ACEOF
2089 if ac_fn_c_try_compile "$LINENO"; then :
2008 if ac_fn_c_try_compile "$LINENO"
2009 then :
20902010 eval "$3=yes"
2091 else
2011 else $as_nop
20922012 eval "$3=no"
20932013 fi
2094 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
2014 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
20952015 fi
20962016 eval ac_res=\$$3
2097 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
2098 $as_echo "$ac_res" >&6; }
2017 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
2018 printf "%s\n" "$ac_res" >&6; }
20992019 eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
21002020
21012021 } # ac_fn_c_check_header_compile
21062026 ac_fn_c_try_link ()
21072027 {
21082028 as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
2109 rm -f conftest.$ac_objext conftest$ac_exeext
2029 rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext
21102030 if { { ac_try="$ac_link"
21112031 case "(($ac_try" in
21122032 *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
21132033 *) ac_try_echo=$ac_try;;
21142034 esac
21152035 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
2116 $as_echo "$ac_try_echo"; } >&5
2036 printf "%s\n" "$ac_try_echo"; } >&5
21172037 (eval "$ac_link") 2>conftest.err
21182038 ac_status=$?
21192039 if test -s conftest.err; then
21212041 cat conftest.er1 >&5
21222042 mv -f conftest.er1 conftest.err
21232043 fi
2124 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
2044 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
21252045 test $ac_status = 0; } && {
21262046 test -z "$ac_c_werror_flag" ||
21272047 test ! -s conftest.err
21282048 } && test -s conftest$ac_exeext && {
21292049 test "$cross_compiling" = yes ||
21302050 test -x conftest$ac_exeext
2131 }; then :
2051 }
2052 then :
21322053 ac_retval=0
2133 else
2134 $as_echo "$as_me: failed program was:" >&5
2054 else $as_nop
2055 printf "%s\n" "$as_me: failed program was:" >&5
21352056 sed 's/^/| /' conftest.$ac_ext >&5
21362057
21372058 ac_retval=1
21522073 ac_fn_c_check_func ()
21532074 {
21542075 as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
2155 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
2156 $as_echo_n "checking for $2... " >&6; }
2157 if eval \${$3+:} false; then :
2158 $as_echo_n "(cached) " >&6
2159 else
2076 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
2077 printf %s "checking for $2... " >&6; }
2078 if eval test \${$3+y}
2079 then :
2080 printf %s "(cached) " >&6
2081 else $as_nop
21602082 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
21612083 /* end confdefs.h. */
21622084 /* Define $2 to an innocuous variant, in case <limits.h> declares $2.
21642086 #define $2 innocuous_$2
21652087
21662088 /* System header to define __stub macros and hopefully few prototypes,
2167 which can conflict with char $2 (); below.
2168 Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
2169 <limits.h> exists even on freestanding compilers. */
2170
2171 #ifdef __STDC__
2172 # include <limits.h>
2173 #else
2174 # include <assert.h>
2175 #endif
2176
2089 which can conflict with char $2 (); below. */
2090
2091 #include <limits.h>
21772092 #undef $2
21782093
21792094 /* Override any GCC internal prototype to avoid an error.
21912106 #endif
21922107
21932108 int
2194 main ()
2109 main (void)
21952110 {
21962111 return $2 ();
21972112 ;
21982113 return 0;
21992114 }
22002115 _ACEOF
2201 if ac_fn_c_try_link "$LINENO"; then :
2116 if ac_fn_c_try_link "$LINENO"
2117 then :
22022118 eval "$3=yes"
2203 else
2119 else $as_nop
22042120 eval "$3=no"
22052121 fi
2206 rm -f core conftest.err conftest.$ac_objext \
2122 rm -f core conftest.err conftest.$ac_objext conftest.beam \
22072123 conftest$ac_exeext conftest.$ac_ext
22082124 fi
22092125 eval ac_res=\$$3
2210 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
2211 $as_echo "$ac_res" >&6; }
2126 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
2127 printf "%s\n" "$ac_res" >&6; }
22122128 eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
22132129
22142130 } # ac_fn_c_check_func
22192135 ac_fn_cxx_try_compile ()
22202136 {
22212137 as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
2222 rm -f conftest.$ac_objext
2138 rm -f conftest.$ac_objext conftest.beam
22232139 if { { ac_try="$ac_compile"
22242140 case "(($ac_try" in
22252141 *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
22262142 *) ac_try_echo=$ac_try;;
22272143 esac
22282144 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
2229 $as_echo "$ac_try_echo"; } >&5
2145 printf "%s\n" "$ac_try_echo"; } >&5
22302146 (eval "$ac_compile") 2>conftest.err
22312147 ac_status=$?
22322148 if test -s conftest.err; then
22342150 cat conftest.er1 >&5
22352151 mv -f conftest.er1 conftest.err
22362152 fi
2237 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
2153 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
22382154 test $ac_status = 0; } && {
22392155 test -z "$ac_cxx_werror_flag" ||
22402156 test ! -s conftest.err
2241 } && test -s conftest.$ac_objext; then :
2157 } && test -s conftest.$ac_objext
2158 then :
22422159 ac_retval=0
2243 else
2244 $as_echo "$as_me: failed program was:" >&5
2160 else $as_nop
2161 printf "%s\n" "$as_me: failed program was:" >&5
22452162 sed 's/^/| /' conftest.$ac_ext >&5
22462163
22472164 ac_retval=1
22632180 *) ac_try_echo=$ac_try;;
22642181 esac
22652182 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
2266 $as_echo "$ac_try_echo"; } >&5
2183 printf "%s\n" "$ac_try_echo"; } >&5
22672184 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
22682185 ac_status=$?
22692186 if test -s conftest.err; then
22712188 cat conftest.er1 >&5
22722189 mv -f conftest.er1 conftest.err
22732190 fi
2274 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
2191 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
22752192 test $ac_status = 0; } > conftest.i && {
22762193 test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
22772194 test ! -s conftest.err
2278 }; then :
2195 }
2196 then :
22792197 ac_retval=0
2280 else
2281 $as_echo "$as_me: failed program was:" >&5
2198 else $as_nop
2199 printf "%s\n" "$as_me: failed program was:" >&5
22822200 sed 's/^/| /' conftest.$ac_ext >&5
22832201
22842202 ac_retval=1
22942212 ac_fn_cxx_try_link ()
22952213 {
22962214 as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
2297 rm -f conftest.$ac_objext conftest$ac_exeext
2215 rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext
22982216 if { { ac_try="$ac_link"
22992217 case "(($ac_try" in
23002218 *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
23012219 *) ac_try_echo=$ac_try;;
23022220 esac
23032221 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
2304 $as_echo "$ac_try_echo"; } >&5
2222 printf "%s\n" "$ac_try_echo"; } >&5
23052223 (eval "$ac_link") 2>conftest.err
23062224 ac_status=$?
23072225 if test -s conftest.err; then
23092227 cat conftest.er1 >&5
23102228 mv -f conftest.er1 conftest.err
23112229 fi
2312 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
2230 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
23132231 test $ac_status = 0; } && {
23142232 test -z "$ac_cxx_werror_flag" ||
23152233 test ! -s conftest.err
23162234 } && test -s conftest$ac_exeext && {
23172235 test "$cross_compiling" = yes ||
23182236 test -x conftest$ac_exeext
2319 }; then :
2237 }
2238 then :
23202239 ac_retval=0
2321 else
2322 $as_echo "$as_me: failed program was:" >&5
2240 else $as_nop
2241 printf "%s\n" "$as_me: failed program was:" >&5
23232242 sed 's/^/| /' conftest.$ac_ext >&5
23242243
23252244 ac_retval=1
23332252 as_fn_set_status $ac_retval
23342253
23352254 } # ac_fn_cxx_try_link
2255
2256 # ac_fn_c_try_run LINENO
2257 # ----------------------
2258 # Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that
2259 # executables *can* be run.
2260 ac_fn_c_try_run ()
2261 {
2262 as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
2263 if { { ac_try="$ac_link"
2264 case "(($ac_try" in
2265 *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
2266 *) ac_try_echo=$ac_try;;
2267 esac
2268 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
2269 printf "%s\n" "$ac_try_echo"; } >&5
2270 (eval "$ac_link") 2>&5
2271 ac_status=$?
2272 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
2273 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
2274 { { case "(($ac_try" in
2275 *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
2276 *) ac_try_echo=$ac_try;;
2277 esac
2278 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
2279 printf "%s\n" "$ac_try_echo"; } >&5
2280 (eval "$ac_try") 2>&5
2281 ac_status=$?
2282 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
2283 test $ac_status = 0; }; }
2284 then :
2285 ac_retval=0
2286 else $as_nop
2287 printf "%s\n" "$as_me: program exited with status $ac_status" >&5
2288 printf "%s\n" "$as_me: failed program was:" >&5
2289 sed 's/^/| /' conftest.$ac_ext >&5
2290
2291 ac_retval=$ac_status
2292 fi
2293 rm -rf conftest.dSYM conftest_ipa8_conftest.oo
2294 eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
2295 as_fn_set_status $ac_retval
2296
2297 } # ac_fn_c_try_run
23362298
23372299 # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
23382300 # --------------------------------------------
23482310 /* end confdefs.h. */
23492311 $4
23502312 int
2351 main ()
2313 main (void)
23522314 {
23532315 static int test_array [1 - 2 * !(($2) >= 0)];
23542316 test_array [0] = 0;
23582320 return 0;
23592321 }
23602322 _ACEOF
2361 if ac_fn_c_try_compile "$LINENO"; then :
2323 if ac_fn_c_try_compile "$LINENO"
2324 then :
23622325 ac_lo=0 ac_mid=0
23632326 while :; do
23642327 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
23652328 /* end confdefs.h. */
23662329 $4
23672330 int
2368 main ()
2331 main (void)
23692332 {
23702333 static int test_array [1 - 2 * !(($2) <= $ac_mid)];
23712334 test_array [0] = 0;
23752338 return 0;
23762339 }
23772340 _ACEOF
2378 if ac_fn_c_try_compile "$LINENO"; then :
2341 if ac_fn_c_try_compile "$LINENO"
2342 then :
23792343 ac_hi=$ac_mid; break
2380 else
2344 else $as_nop
23812345 as_fn_arith $ac_mid + 1 && ac_lo=$as_val
23822346 if test $ac_lo -le $ac_mid; then
23832347 ac_lo= ac_hi=
23852349 fi
23862350 as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
23872351 fi
2388 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
2352 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
23892353 done
2390 else
2354 else $as_nop
23912355 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
23922356 /* end confdefs.h. */
23932357 $4
23942358 int
2395 main ()
2359 main (void)
23962360 {
23972361 static int test_array [1 - 2 * !(($2) < 0)];
23982362 test_array [0] = 0;
24022366 return 0;
24032367 }
24042368 _ACEOF
2405 if ac_fn_c_try_compile "$LINENO"; then :
2369 if ac_fn_c_try_compile "$LINENO"
2370 then :
24062371 ac_hi=-1 ac_mid=-1
24072372 while :; do
24082373 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
24092374 /* end confdefs.h. */
24102375 $4
24112376 int
2412 main ()
2377 main (void)
24132378 {
24142379 static int test_array [1 - 2 * !(($2) >= $ac_mid)];
24152380 test_array [0] = 0;
24192384 return 0;
24202385 }
24212386 _ACEOF
2422 if ac_fn_c_try_compile "$LINENO"; then :
2387 if ac_fn_c_try_compile "$LINENO"
2388 then :
24232389 ac_lo=$ac_mid; break
2424 else
2390 else $as_nop
24252391 as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
24262392 if test $ac_mid -le $ac_hi; then
24272393 ac_lo= ac_hi=
24292395 fi
24302396 as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
24312397 fi
2432 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
2398 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
24332399 done
2434 else
2400 else $as_nop
24352401 ac_lo= ac_hi=
24362402 fi
2437 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
2438 fi
2439 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
2403 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2404 fi
2405 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
24402406 # Binary search between lo and hi bounds.
24412407 while test "x$ac_lo" != "x$ac_hi"; do
24422408 as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
24442410 /* end confdefs.h. */
24452411 $4
24462412 int
2447 main ()
2413 main (void)
24482414 {
24492415 static int test_array [1 - 2 * !(($2) <= $ac_mid)];
24502416 test_array [0] = 0;
24542420 return 0;
24552421 }
24562422 _ACEOF
2457 if ac_fn_c_try_compile "$LINENO"; then :
2423 if ac_fn_c_try_compile "$LINENO"
2424 then :
24582425 ac_hi=$ac_mid
2459 else
2426 else $as_nop
24602427 as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
24612428 fi
2462 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
2429 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
24632430 done
24642431 case $ac_lo in #((
24652432 ?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
24692436 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
24702437 /* end confdefs.h. */
24712438 $4
2472 static long int longval () { return $2; }
2473 static unsigned long int ulongval () { return $2; }
2439 static long int longval (void) { return $2; }
2440 static unsigned long int ulongval (void) { return $2; }
24742441 #include <stdio.h>
24752442 #include <stdlib.h>
24762443 int
2477 main ()
2444 main (void)
24782445 {
24792446
24802447 FILE *f = fopen ("conftest.val", "w");
25022469 return 0;
25032470 }
25042471 _ACEOF
2505 if ac_fn_c_try_run "$LINENO"; then :
2472 if ac_fn_c_try_run "$LINENO"
2473 then :
25062474 echo >>conftest.val; read $3 <conftest.val; ac_retval=0
2507 else
2475 else $as_nop
25082476 ac_retval=1
25092477 fi
25102478 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
25172485
25182486 } # ac_fn_c_compute_int
25192487
2520 # ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
2521 # ---------------------------------------------
2488 # ac_fn_check_decl LINENO SYMBOL VAR INCLUDES EXTRA-OPTIONS FLAG-VAR
2489 # ------------------------------------------------------------------
25222490 # Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
2523 # accordingly.
2524 ac_fn_c_check_decl ()
2491 # accordingly. Pass EXTRA-OPTIONS to the compiler, using FLAG-VAR.
2492 ac_fn_check_decl ()
25252493 {
25262494 as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
25272495 as_decl_name=`echo $2|sed 's/ *(.*//'`
2496 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
2497 printf %s "checking whether $as_decl_name is declared... " >&6; }
2498 if eval test \${$3+y}
2499 then :
2500 printf %s "(cached) " >&6
2501 else $as_nop
25282502 as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
2529 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
2530 $as_echo_n "checking whether $as_decl_name is declared... " >&6; }
2531 if eval \${$3+:} false; then :
2532 $as_echo_n "(cached) " >&6
2533 else
2503 eval ac_save_FLAGS=\$$6
2504 as_fn_append $6 " $5"
25342505 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
25352506 /* end confdefs.h. */
25362507 $4
25372508 int
2538 main ()
2509 main (void)
25392510 {
25402511 #ifndef $as_decl_name
25412512 #ifdef __cplusplus
25492520 return 0;
25502521 }
25512522 _ACEOF
2552 if ac_fn_c_try_compile "$LINENO"; then :
2523 if ac_fn_c_try_compile "$LINENO"
2524 then :
25532525 eval "$3=yes"
2554 else
2526 else $as_nop
25552527 eval "$3=no"
25562528 fi
2557 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
2529 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2530 eval $6=\$ac_save_FLAGS
2531
25582532 fi
25592533 eval ac_res=\$$3
2560 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
2561 $as_echo "$ac_res" >&6; }
2534 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
2535 printf "%s\n" "$ac_res" >&6; }
25622536 eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
25632537
2564 } # ac_fn_c_check_decl
2538 } # ac_fn_check_decl
25652539
25662540 # ac_fn_c_check_type LINENO TYPE VAR INCLUDES
25672541 # -------------------------------------------
25702544 ac_fn_c_check_type ()
25712545 {
25722546 as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
2573 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
2574 $as_echo_n "checking for $2... " >&6; }
2575 if eval \${$3+:} false; then :
2576 $as_echo_n "(cached) " >&6
2577 else
2547 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
2548 printf %s "checking for $2... " >&6; }
2549 if eval test \${$3+y}
2550 then :
2551 printf %s "(cached) " >&6
2552 else $as_nop
25782553 eval "$3=no"
25792554 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
25802555 /* end confdefs.h. */
25812556 $4
25822557 int
2583 main ()
2558 main (void)
25842559 {
25852560 if (sizeof ($2))
25862561 return 0;
25882563 return 0;
25892564 }
25902565 _ACEOF
2591 if ac_fn_c_try_compile "$LINENO"; then :
2566 if ac_fn_c_try_compile "$LINENO"
2567 then :
25922568 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
25932569 /* end confdefs.h. */
25942570 $4
25952571 int
2596 main ()
2572 main (void)
25972573 {
25982574 if (sizeof (($2)))
25992575 return 0;
26012577 return 0;
26022578 }
26032579 _ACEOF
2604 if ac_fn_c_try_compile "$LINENO"; then :
2605
2606 else
2580 if ac_fn_c_try_compile "$LINENO"
2581 then :
2582
2583 else $as_nop
26072584 eval "$3=yes"
26082585 fi
2609 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
2610 fi
2611 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
2586 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2587 fi
2588 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
26122589 fi
26132590 eval ac_res=\$$3
2614 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
2615 $as_echo "$ac_res" >&6; }
2591 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
2592 printf "%s\n" "$ac_res" >&6; }
26162593 eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
26172594
26182595 } # ac_fn_c_check_type
2596
2597 # ac_fn_c_try_cpp LINENO
2598 # ----------------------
2599 # Try to preprocess conftest.$ac_ext, and return whether this succeeded.
2600 ac_fn_c_try_cpp ()
2601 {
2602 as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
2603 if { { ac_try="$ac_cpp conftest.$ac_ext"
2604 case "(($ac_try" in
2605 *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
2606 *) ac_try_echo=$ac_try;;
2607 esac
2608 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
2609 printf "%s\n" "$ac_try_echo"; } >&5
2610 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
2611 ac_status=$?
2612 if test -s conftest.err; then
2613 grep -v '^ *+' conftest.err >conftest.er1
2614 cat conftest.er1 >&5
2615 mv -f conftest.er1 conftest.err
2616 fi
2617 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
2618 test $ac_status = 0; } > conftest.i && {
2619 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
2620 test ! -s conftest.err
2621 }
2622 then :
2623 ac_retval=0
2624 else $as_nop
2625 printf "%s\n" "$as_me: failed program was:" >&5
2626 sed 's/^/| /' conftest.$ac_ext >&5
2627
2628 ac_retval=1
2629 fi
2630 eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
2631 as_fn_set_status $ac_retval
2632
2633 } # ac_fn_c_try_cpp
2634 ac_configure_args_raw=
2635 for ac_arg
2636 do
2637 case $ac_arg in
2638 *\'*)
2639 ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
2640 esac
2641 as_fn_append ac_configure_args_raw " '$ac_arg'"
2642 done
2643
2644 case $ac_configure_args_raw in
2645 *$as_nl*)
2646 ac_safe_unquote= ;;
2647 *)
2648 ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab.
2649 ac_unsafe_a="$ac_unsafe_z#~"
2650 ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g"
2651 ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;;
2652 esac
2653
26192654 cat >config.log <<_ACEOF
26202655 This file contains any messages produced by compilers while
26212656 running configure, to aid debugging if configure makes a mistake.
26222657
2623 It was created by hwloc $as_me 2.4.1, which was
2624 generated by GNU Autoconf 2.69. Invocation command line was
2625
2626 $ $0 $@
2658 It was created by hwloc $as_me 2.5.0rc1, which was
2659 generated by GNU Autoconf 2.71. Invocation command line was
2660
2661 $ $0$ac_configure_args_raw
26272662
26282663 _ACEOF
26292664 exec 5>>config.log
26562691 for as_dir in $PATH
26572692 do
26582693 IFS=$as_save_IFS
2659 test -z "$as_dir" && as_dir=.
2660 $as_echo "PATH: $as_dir"
2694 case $as_dir in #(((
2695 '') as_dir=./ ;;
2696 */) ;;
2697 *) as_dir=$as_dir/ ;;
2698 esac
2699 printf "%s\n" "PATH: $as_dir"
26612700 done
26622701 IFS=$as_save_IFS
26632702
26922731 | -silent | --silent | --silen | --sile | --sil)
26932732 continue ;;
26942733 *\'*)
2695 ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
2734 ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
26962735 esac
26972736 case $ac_pass in
26982737 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
27272766 # WARNING: Use '\'' to represent an apostrophe within the trap.
27282767 # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
27292768 trap 'exit_status=$?
2769 # Sanitize IFS.
2770 IFS=" "" $as_nl"
27302771 # Save into config.log some information that might help in debugging.
27312772 {
27322773 echo
27332774
2734 $as_echo "## ---------------- ##
2775 printf "%s\n" "## ---------------- ##
27352776 ## Cache variables. ##
27362777 ## ---------------- ##"
27372778 echo
27422783 case $ac_val in #(
27432784 *${as_nl}*)
27442785 case $ac_var in #(
2745 *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
2746 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
2786 *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
2787 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
27472788 esac
27482789 case $ac_var in #(
27492790 _ | IFS | as_nl) ;; #(
27672808 )
27682809 echo
27692810
2770 $as_echo "## ----------------- ##
2811 printf "%s\n" "## ----------------- ##
27712812 ## Output variables. ##
27722813 ## ----------------- ##"
27732814 echo
27752816 do
27762817 eval ac_val=\$$ac_var
27772818 case $ac_val in
2778 *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
2819 *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
27792820 esac
2780 $as_echo "$ac_var='\''$ac_val'\''"
2821 printf "%s\n" "$ac_var='\''$ac_val'\''"
27812822 done | sort
27822823 echo
27832824
27842825 if test -n "$ac_subst_files"; then
2785 $as_echo "## ------------------- ##
2826 printf "%s\n" "## ------------------- ##
27862827 ## File substitutions. ##
27872828 ## ------------------- ##"
27882829 echo
27902831 do
27912832 eval ac_val=\$$ac_var
27922833 case $ac_val in
2793 *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
2834 *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
27942835 esac
2795 $as_echo "$ac_var='\''$ac_val'\''"
2836 printf "%s\n" "$ac_var='\''$ac_val'\''"
27962837 done | sort
27972838 echo
27982839 fi
27992840
28002841 if test -s confdefs.h; then
2801 $as_echo "## ----------- ##
2842 printf "%s\n" "## ----------- ##
28022843 ## confdefs.h. ##
28032844 ## ----------- ##"
28042845 echo
28062847 echo
28072848 fi
28082849 test "$ac_signal" != 0 &&
2809 $as_echo "$as_me: caught signal $ac_signal"
2810 $as_echo "$as_me: exit $exit_status"
2850 printf "%s\n" "$as_me: caught signal $ac_signal"
2851 printf "%s\n" "$as_me: exit $exit_status"
28112852 } >&5
28122853 rm -f core *.core core.conftest.* &&
28132854 rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
28212862 # confdefs.h avoids OS command line length limits that DEFS can exceed.
28222863 rm -f -r conftest* confdefs.h
28232864
2824 $as_echo "/* confdefs.h */" > confdefs.h
2865 printf "%s\n" "/* confdefs.h */" > confdefs.h
28252866
28262867 # Predefined preprocessor variables.
28272868
2828 cat >>confdefs.h <<_ACEOF
2829 #define PACKAGE_NAME "$PACKAGE_NAME"
2830 _ACEOF
2831
2832 cat >>confdefs.h <<_ACEOF
2833 #define PACKAGE_TARNAME "$PACKAGE_TARNAME"
2834 _ACEOF
2835
2836 cat >>confdefs.h <<_ACEOF
2837 #define PACKAGE_VERSION "$PACKAGE_VERSION"
2838 _ACEOF
2839
2840 cat >>confdefs.h <<_ACEOF
2841 #define PACKAGE_STRING "$PACKAGE_STRING"
2842 _ACEOF
2843
2844 cat >>confdefs.h <<_ACEOF
2845 #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
2846 _ACEOF
2847
2848 cat >>confdefs.h <<_ACEOF
2849 #define PACKAGE_URL "$PACKAGE_URL"
2850 _ACEOF
2869 printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h
2870
2871 printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h
2872
2873 printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h
2874
2875 printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h
2876
2877 printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h
2878
2879 printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h
28512880
28522881
28532882 # Let the site file select an alternate cache file if it wants to.
28542883 # Prefer an explicitly selected file to automatically selected ones.
2855 ac_site_file1=NONE
2856 ac_site_file2=NONE
28572884 if test -n "$CONFIG_SITE"; then
2858 # We do not want a PATH search for config.site.
2859 case $CONFIG_SITE in #((
2860 -*) ac_site_file1=./$CONFIG_SITE;;
2861 */*) ac_site_file1=$CONFIG_SITE;;
2862 *) ac_site_file1=./$CONFIG_SITE;;
2863 esac
2885 ac_site_files="$CONFIG_SITE"
28642886 elif test "x$prefix" != xNONE; then
2865 ac_site_file1=$prefix/share/config.site
2866 ac_site_file2=$prefix/etc/config.site
2887 ac_site_files="$prefix/share/config.site $prefix/etc/config.site"
28672888 else
2868 ac_site_file1=$ac_default_prefix/share/config.site
2869 ac_site_file2=$ac_default_prefix/etc/config.site
2870 fi
2871 for ac_site_file in "$ac_site_file1" "$ac_site_file2"
2889 ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
2890 fi
2891
2892 for ac_site_file in $ac_site_files
28722893 do
2873 test "x$ac_site_file" = xNONE && continue
2874 if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
2875 { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
2876 $as_echo "$as_me: loading site script $ac_site_file" >&6;}
2894 case $ac_site_file in #(
2895 */*) :
2896 ;; #(
2897 *) :
2898 ac_site_file=./$ac_site_file ;;
2899 esac
2900 if test -f "$ac_site_file" && test -r "$ac_site_file"; then
2901 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
2902 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;}
28772903 sed 's/^/| /' "$ac_site_file" >&5
28782904 . "$ac_site_file" \
2879 || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
2880 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
2905 || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
2906 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
28812907 as_fn_error $? "failed to load site script $ac_site_file
28822908 See \`config.log' for more details" "$LINENO" 5; }
28832909 fi
28872913 # Some versions of bash will fail to source /dev/null (special files
28882914 # actually), so we avoid doing that. DJGPP emulates it as a regular file.
28892915 if test /dev/null != "$cache_file" && test -f "$cache_file"; then
2890 { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
2891 $as_echo "$as_me: loading cache $cache_file" >&6;}
2916 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
2917 printf "%s\n" "$as_me: loading cache $cache_file" >&6;}
28922918 case $cache_file in
28932919 [\\/]* | ?:[\\/]* ) . "$cache_file";;
28942920 *) . "./$cache_file";;
28952921 esac
28962922 fi
28972923 else
2898 { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
2899 $as_echo "$as_me: creating cache $cache_file" >&6;}
2924 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
2925 printf "%s\n" "$as_me: creating cache $cache_file" >&6;}
29002926 >$cache_file
2927 fi
2928
2929 as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H"
2930 # Test code for whether the C compiler supports C89 (global declarations)
2931 ac_c_conftest_c89_globals='
2932 /* Does the compiler advertise C89 conformance?
2933 Do not test the value of __STDC__, because some compilers set it to 0
2934 while being otherwise adequately conformant. */
2935 #if !defined __STDC__
2936 # error "Compiler does not advertise C89 conformance"
2937 #endif
2938
2939 #include <stddef.h>
2940 #include <stdarg.h>
2941 struct stat;
2942 /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */
2943 struct buf { int x; };
2944 struct buf * (*rcsopen) (struct buf *, struct stat *, int);
2945 static char *e (p, i)
2946 char **p;
2947 int i;
2948 {
2949 return p[i];
2950 }
2951 static char *f (char * (*g) (char **, int), char **p, ...)
2952 {
2953 char *s;
2954 va_list v;
2955 va_start (v,p);
2956 s = g (p, va_arg (v,int));
2957 va_end (v);
2958 return s;
2959 }
2960
2961 /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
2962 function prototypes and stuff, but not \xHH hex character constants.
2963 These do not provoke an error unfortunately, instead are silently treated
2964 as an "x". The following induces an error, until -std is added to get
2965 proper ANSI mode. Curiously \x00 != x always comes out true, for an
2966 array size at least. It is necessary to write \x00 == 0 to get something
2967 that is true only with -std. */
2968 int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1];
2969
2970 /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
2971 inside strings and character constants. */
2972 #define FOO(x) '\''x'\''
2973 int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1];
2974
2975 int test (int i, double x);
2976 struct s1 {int (*f) (int a);};
2977 struct s2 {int (*f) (double a);};
2978 int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int),
2979 int, int);'
2980
2981 # Test code for whether the C compiler supports C89 (body of main).
2982 ac_c_conftest_c89_main='
2983 ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]);
2984 '
2985
2986 # Test code for whether the C compiler supports C99 (global declarations)
2987 ac_c_conftest_c99_globals='
2988 // Does the compiler advertise C99 conformance?
2989 #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L
2990 # error "Compiler does not advertise C99 conformance"
2991 #endif
2992
2993 #include <stdbool.h>
2994 extern int puts (const char *);
2995 extern int printf (const char *, ...);
2996 extern int dprintf (int, const char *, ...);
2997 extern void *malloc (size_t);
2998
2999 // Check varargs macros. These examples are taken from C99 6.10.3.5.
3000 // dprintf is used instead of fprintf to avoid needing to declare
3001 // FILE and stderr.
3002 #define debug(...) dprintf (2, __VA_ARGS__)
3003 #define showlist(...) puts (#__VA_ARGS__)
3004 #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
3005 static void
3006 test_varargs_macros (void)
3007 {
3008 int x = 1234;
3009 int y = 5678;
3010 debug ("Flag");
3011 debug ("X = %d\n", x);
3012 showlist (The first, second, and third items.);
3013 report (x>y, "x is %d but y is %d", x, y);
3014 }
3015
3016 // Check long long types.
3017 #define BIG64 18446744073709551615ull
3018 #define BIG32 4294967295ul
3019 #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
3020 #if !BIG_OK
3021 #error "your preprocessor is broken"
3022 #endif
3023 #if BIG_OK
3024 #else
3025 #error "your preprocessor is broken"
3026 #endif
3027 static long long int bignum = -9223372036854775807LL;
3028 static unsigned long long int ubignum = BIG64;
3029
3030 struct incomplete_array
3031 {
3032 int datasize;
3033 double data[];
3034 };
3035
3036 struct named_init {
3037 int number;
3038 const wchar_t *name;
3039 double average;
3040 };
3041
3042 typedef const char *ccp;
3043
3044 static inline int
3045 test_restrict (ccp restrict text)
3046 {
3047 // See if C++-style comments work.
3048 // Iterate through items via the restricted pointer.
3049 // Also check for declarations in for loops.
3050 for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i)
3051 continue;
3052 return 0;
3053 }
3054
3055 // Check varargs and va_copy.
3056 static bool
3057 test_varargs (const char *format, ...)
3058 {
3059 va_list args;
3060 va_start (args, format);
3061 va_list args_copy;
3062 va_copy (args_copy, args);
3063
3064 const char *str = "";
3065 int number = 0;
3066 float fnumber = 0;
3067
3068 while (*format)
3069 {
3070 switch (*format++)
3071 {
3072 case '\''s'\'': // string
3073 str = va_arg (args_copy, const char *);
3074 break;
3075 case '\''d'\'': // int
3076 number = va_arg (args_copy, int);
3077 break;
3078 case '\''f'\'': // float
3079 fnumber = va_arg (args_copy, double);
3080 break;
3081 default:
3082 break;
3083 }
3084 }
3085 va_end (args_copy);
3086 va_end (args);
3087
3088 return *str && number && fnumber;
3089 }
3090 '
3091
3092 # Test code for whether the C compiler supports C99 (body of main).
3093 ac_c_conftest_c99_main='
3094 // Check bool.
3095 _Bool success = false;
3096 success |= (argc != 0);
3097
3098 // Check restrict.
3099 if (test_restrict ("String literal") == 0)
3100 success = true;
3101 char *restrict newvar = "Another string";
3102
3103 // Check varargs.
3104 success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234);
3105 test_varargs_macros ();
3106
3107 // Check flexible array members.
3108 struct incomplete_array *ia =
3109 malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
3110 ia->datasize = 10;
3111 for (int i = 0; i < ia->datasize; ++i)
3112 ia->data[i] = i * 1.234;
3113
3114 // Check named initializers.
3115 struct named_init ni = {
3116 .number = 34,
3117 .name = L"Test wide string",
3118 .average = 543.34343,
3119 };
3120
3121 ni.number = 58;
3122
3123 int dynamic_array[ni.number];
3124 dynamic_array[0] = argv[0][0];
3125 dynamic_array[ni.number - 1] = 543;
3126
3127 // work around unused variable warnings
3128 ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\''
3129 || dynamic_array[ni.number - 1] != 543);
3130 '
3131
3132 # Test code for whether the C compiler supports C11 (global declarations)
3133 ac_c_conftest_c11_globals='
3134 // Does the compiler advertise C11 conformance?
3135 #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L
3136 # error "Compiler does not advertise C11 conformance"
3137 #endif
3138
3139 // Check _Alignas.
3140 char _Alignas (double) aligned_as_double;
3141 char _Alignas (0) no_special_alignment;
3142 extern char aligned_as_int;
3143 char _Alignas (0) _Alignas (int) aligned_as_int;
3144
3145 // Check _Alignof.
3146 enum
3147 {
3148 int_alignment = _Alignof (int),
3149 int_array_alignment = _Alignof (int[100]),
3150 char_alignment = _Alignof (char)
3151 };
3152 _Static_assert (0 < -_Alignof (int), "_Alignof is signed");
3153
3154 // Check _Noreturn.
3155 int _Noreturn does_not_return (void) { for (;;) continue; }
3156
3157 // Check _Static_assert.
3158 struct test_static_assert
3159 {
3160 int x;
3161 _Static_assert (sizeof (int) <= sizeof (long int),
3162 "_Static_assert does not work in struct");
3163 long int y;
3164 };
3165
3166 // Check UTF-8 literals.
3167 #define u8 syntax error!
3168 char const utf8_literal[] = u8"happens to be ASCII" "another string";
3169
3170 // Check duplicate typedefs.
3171 typedef long *long_ptr;
3172 typedef long int *long_ptr;
3173 typedef long_ptr long_ptr;
3174
3175 // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1.
3176 struct anonymous
3177 {
3178 union {
3179 struct { int i; int j; };
3180 struct { int k; long int l; } w;
3181 };
3182 int m;
3183 } v1;
3184 '
3185
3186 # Test code for whether the C compiler supports C11 (body of main).
3187 ac_c_conftest_c11_main='
3188 _Static_assert ((offsetof (struct anonymous, i)
3189 == offsetof (struct anonymous, w.k)),
3190 "Anonymous union alignment botch");
3191 v1.i = 2;
3192 v1.w.k = 5;
3193 ok |= v1.i != 5;
3194 '
3195
3196 # Test code for whether the C compiler supports C11 (complete).
3197 ac_c_conftest_c11_program="${ac_c_conftest_c89_globals}
3198 ${ac_c_conftest_c99_globals}
3199 ${ac_c_conftest_c11_globals}
3200
3201 int
3202 main (int argc, char **argv)
3203 {
3204 int ok = 0;
3205 ${ac_c_conftest_c89_main}
3206 ${ac_c_conftest_c99_main}
3207 ${ac_c_conftest_c11_main}
3208 return ok;
3209 }
3210 "
3211
3212 # Test code for whether the C compiler supports C99 (complete).
3213 ac_c_conftest_c99_program="${ac_c_conftest_c89_globals}
3214 ${ac_c_conftest_c99_globals}
3215
3216 int
3217 main (int argc, char **argv)
3218 {
3219 int ok = 0;
3220 ${ac_c_conftest_c89_main}
3221 ${ac_c_conftest_c99_main}
3222 return ok;
3223 }
3224 "
3225
3226 # Test code for whether the C compiler supports C89 (complete).
3227 ac_c_conftest_c89_program="${ac_c_conftest_c89_globals}
3228
3229 int
3230 main (int argc, char **argv)
3231 {
3232 int ok = 0;
3233 ${ac_c_conftest_c89_main}
3234 return ok;
3235 }
3236 "
3237
3238 as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H"
3239 as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H"
3240 as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H"
3241 as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H"
3242 as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H"
3243 as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H"
3244 as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H"
3245 as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H"
3246 as_fn_append ac_header_c_list " wchar.h wchar_h HAVE_WCHAR_H"
3247 as_fn_append ac_header_c_list " minix/config.h minix_config_h HAVE_MINIX_CONFIG_H"
3248 # Test code for whether the C++ compiler supports C++98 (global declarations)
3249 ac_cxx_conftest_cxx98_globals='
3250 // Does the compiler advertise C++98 conformance?
3251 #if !defined __cplusplus || __cplusplus < 199711L
3252 # error "Compiler does not advertise C++98 conformance"
3253 #endif
3254
3255 // These inclusions are to reject old compilers that
3256 // lack the unsuffixed header files.
3257 #include <cstdlib>
3258 #include <exception>
3259
3260 // <cassert> and <cstring> are *not* freestanding headers in C++98.
3261 extern void assert (int);
3262 namespace std {
3263 extern int strcmp (const char *, const char *);
3264 }
3265
3266 // Namespaces, exceptions, and templates were all added after "C++ 2.0".
3267 using std::exception;
3268 using std::strcmp;
3269
3270 namespace {
3271
3272 void test_exception_syntax()
3273 {
3274 try {
3275 throw "test";
3276 } catch (const char *s) {
3277 // Extra parentheses suppress a warning when building autoconf itself,
3278 // due to lint rules shared with more typical C programs.
3279 assert (!(strcmp) (s, "test"));
3280 }
3281 }
3282
3283 template <typename T> struct test_template
3284 {
3285 T const val;
3286 explicit test_template(T t) : val(t) {}
3287 template <typename U> T add(U u) { return static_cast<T>(u) + val; }
3288 };
3289
3290 } // anonymous namespace
3291 '
3292
3293 # Test code for whether the C++ compiler supports C++98 (body of main)
3294 ac_cxx_conftest_cxx98_main='
3295 assert (argc);
3296 assert (! argv[0]);
3297 {
3298 test_exception_syntax ();
3299 test_template<double> tt (2.0);
3300 assert (tt.add (4) == 6.0);
3301 assert (true && !false);
3302 }
3303 '
3304
3305 # Test code for whether the C++ compiler supports C++11 (global declarations)
3306 ac_cxx_conftest_cxx11_globals='
3307 // Does the compiler advertise C++ 2011 conformance?
3308 #if !defined __cplusplus || __cplusplus < 201103L
3309 # error "Compiler does not advertise C++11 conformance"
3310 #endif
3311
3312 namespace cxx11test
3313 {
3314 constexpr int get_val() { return 20; }
3315
3316 struct testinit
3317 {
3318 int i;
3319 double d;
3320 };
3321
3322 class delegate
3323 {
3324 public:
3325 delegate(int n) : n(n) {}
3326 delegate(): delegate(2354) {}
3327
3328 virtual int getval() { return this->n; };
3329 protected:
3330 int n;
3331 };
3332
3333 class overridden : public delegate
3334 {
3335 public:
3336 overridden(int n): delegate(n) {}
3337 virtual int getval() override final { return this->n * 2; }
3338 };
3339
3340 class nocopy
3341 {
3342 public:
3343 nocopy(int i): i(i) {}
3344 nocopy() = default;
3345 nocopy(const nocopy&) = delete;
3346 nocopy & operator=(const nocopy&) = delete;
3347 private:
3348 int i;
3349 };
3350
3351 // for testing lambda expressions
3352 template <typename Ret, typename Fn> Ret eval(Fn f, Ret v)
3353 {
3354 return f(v);
3355 }
3356
3357 // for testing variadic templates and trailing return types
3358 template <typename V> auto sum(V first) -> V
3359 {
3360 return first;
3361 }
3362 template <typename V, typename... Args> auto sum(V first, Args... rest) -> V
3363 {
3364 return first + sum(rest...);
3365 }
3366 }
3367 '
3368
3369 # Test code for whether the C++ compiler supports C++11 (body of main)
3370 ac_cxx_conftest_cxx11_main='
3371 {
3372 // Test auto and decltype
3373 auto a1 = 6538;
3374 auto a2 = 48573953.4;
3375 auto a3 = "String literal";
3376
3377 int total = 0;
3378 for (auto i = a3; *i; ++i) { total += *i; }
3379
3380 decltype(a2) a4 = 34895.034;
3381 }
3382 {
3383 // Test constexpr
3384 short sa[cxx11test::get_val()] = { 0 };
3385 }
3386 {
3387 // Test initializer lists
3388 cxx11test::testinit il = { 4323, 435234.23544 };
3389 }
3390 {
3391 // Test range-based for
3392 int array[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3,
3393 14, 19, 17, 8, 6, 20, 16, 2, 11, 1};
3394 for (auto &x : array) { x += 23; }
3395 }
3396 {
3397 // Test lambda expressions
3398 using cxx11test::eval;
3399 assert (eval ([](int x) { return x*2; }, 21) == 42);
3400 double d = 2.0;
3401 assert (eval ([&](double x) { return d += x; }, 3.0) == 5.0);
3402 assert (d == 5.0);
3403 assert (eval ([=](double x) mutable { return d += x; }, 4.0) == 9.0);
3404 assert (d == 5.0);
3405 }
3406 {
3407 // Test use of variadic templates
3408 using cxx11test::sum;
3409 auto a = sum(1);
3410 auto b = sum(1, 2);
3411 auto c = sum(1.0, 2.0, 3.0);
3412 }
3413 {
3414 // Test constructor delegation
3415 cxx11test::delegate d1;
3416 cxx11test::delegate d2();
3417 cxx11test::delegate d3(45);
3418 }
3419 {
3420 // Test override and final
3421 cxx11test::overridden o1(55464);
3422 }
3423 {
3424 // Test nullptr
3425 char *c = nullptr;
3426 }
3427 {
3428 // Test template brackets
3429 test_template<::test_template<int>> v(test_template<int>(12));
3430 }
3431 {
3432 // Unicode literals
3433 char const *utf8 = u8"UTF-8 string \u2500";
3434 char16_t const *utf16 = u"UTF-8 string \u2500";
3435 char32_t const *utf32 = U"UTF-32 string \u2500";
3436 }
3437 '
3438
3439 # Test code for whether the C compiler supports C++11 (complete).
3440 ac_cxx_conftest_cxx11_program="${ac_cxx_conftest_cxx98_globals}
3441 ${ac_cxx_conftest_cxx11_globals}
3442
3443 int
3444 main (int argc, char **argv)
3445 {
3446 int ok = 0;
3447 ${ac_cxx_conftest_cxx98_main}
3448 ${ac_cxx_conftest_cxx11_main}
3449 return ok;
3450 }
3451 "
3452
3453 # Test code for whether the C compiler supports C++98 (complete).
3454 ac_cxx_conftest_cxx98_program="${ac_cxx_conftest_cxx98_globals}
3455 int
3456 main (int argc, char **argv)
3457 {
3458 int ok = 0;
3459 ${ac_cxx_conftest_cxx98_main}
3460 return ok;
3461 }
3462 "
3463
3464
3465 # Auxiliary files required by this configure script.
3466 ac_aux_files="ltmain.sh ar-lib compile missing install-sh config.guess config.sub"
3467
3468 # Locations in which to look for auxiliary files.
3469 ac_aux_dir_candidates="${srcdir}/./config"
3470
3471 # Search for a directory containing all of the required auxiliary files,
3472 # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates.
3473 # If we don't find one directory that contains all the files we need,
3474 # we report the set of missing files from the *first* directory in
3475 # $ac_aux_dir_candidates and give up.
3476 ac_missing_aux_files=""
3477 ac_first_candidate=:
3478 printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5
3479 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
3480 as_found=false
3481 for as_dir in $ac_aux_dir_candidates
3482 do
3483 IFS=$as_save_IFS
3484 case $as_dir in #(((
3485 '') as_dir=./ ;;
3486 */) ;;
3487 *) as_dir=$as_dir/ ;;
3488 esac
3489 as_found=:
3490
3491 printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5
3492 ac_aux_dir_found=yes
3493 ac_install_sh=
3494 for ac_aux in $ac_aux_files
3495 do
3496 # As a special case, if "install-sh" is required, that requirement
3497 # can be satisfied by any of "install-sh", "install.sh", or "shtool",
3498 # and $ac_install_sh is set appropriately for whichever one is found.
3499 if test x"$ac_aux" = x"install-sh"
3500 then
3501 if test -f "${as_dir}install-sh"; then
3502 printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5
3503 ac_install_sh="${as_dir}install-sh -c"
3504 elif test -f "${as_dir}install.sh"; then
3505 printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5
3506 ac_install_sh="${as_dir}install.sh -c"
3507 elif test -f "${as_dir}shtool"; then
3508 printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5
3509 ac_install_sh="${as_dir}shtool install -c"
3510 else
3511 ac_aux_dir_found=no
3512 if $ac_first_candidate; then
3513 ac_missing_aux_files="${ac_missing_aux_files} install-sh"
3514 else
3515 break
3516 fi
3517 fi
3518 else
3519 if test -f "${as_dir}${ac_aux}"; then
3520 printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5
3521 else
3522 ac_aux_dir_found=no
3523 if $ac_first_candidate; then
3524 ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}"
3525 else
3526 break
3527 fi
3528 fi
3529 fi
3530 done
3531 if test "$ac_aux_dir_found" = yes; then
3532 ac_aux_dir="$as_dir"
3533 break
3534 fi
3535 ac_first_candidate=false
3536
3537 as_found=false
3538 done
3539 IFS=$as_save_IFS
3540 if $as_found
3541 then :
3542
3543 else $as_nop
3544 as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5
3545 fi
3546
3547
3548 # These three variables are undocumented and unsupported,
3549 # and are intended to be withdrawn in a future Autoconf release.
3550 # They can cause serious problems if a builder's source tree is in a directory
3551 # whose full name contains unusual characters.
3552 if test -f "${ac_aux_dir}config.guess"; then
3553 ac_config_guess="$SHELL ${ac_aux_dir}config.guess"
3554 fi
3555 if test -f "${ac_aux_dir}config.sub"; then
3556 ac_config_sub="$SHELL ${ac_aux_dir}config.sub"
3557 fi
3558 if test -f "$ac_aux_dir/configure"; then
3559 ac_configure="$SHELL ${ac_aux_dir}configure"
29013560 fi
29023561
29033562 # Check that the precious variables saved in the cache have kept the same
29103569 eval ac_new_val=\$ac_env_${ac_var}_value
29113570 case $ac_old_set,$ac_new_set in
29123571 set,)
2913 { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
2914 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
3572 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
3573 printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
29153574 ac_cache_corrupted=: ;;
29163575 ,set)
2917 { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
2918 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
3576 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
3577 printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
29193578 ac_cache_corrupted=: ;;
29203579 ,);;
29213580 *)
29243583 ac_old_val_w=`echo x $ac_old_val`
29253584 ac_new_val_w=`echo x $ac_new_val`
29263585 if test "$ac_old_val_w" != "$ac_new_val_w"; then
2927 { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
2928 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
3586 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
3587 printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
29293588 ac_cache_corrupted=:
29303589 else
2931 { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
2932 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
3590 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
3591 printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
29333592 eval $ac_var=\$ac_old_val
29343593 fi
2935 { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
2936 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
2937 { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
2938 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
3594 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
3595 printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;}
3596 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
3597 printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;}
29393598 fi;;
29403599 esac
29413600 # Pass precious variables to config.status.
29423601 if test "$ac_new_set" = set; then
29433602 case $ac_new_val in
2944 *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
3603 *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
29453604 *) ac_arg=$ac_var=$ac_new_val ;;
29463605 esac
29473606 case " $ac_configure_args " in
29513610 fi
29523611 done
29533612 if $ac_cache_corrupted; then
2954 { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
2955 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
2956 { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
2957 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
2958 as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
3613 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
3614 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
3615 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
3616 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;}
3617 as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file'
3618 and start over" "$LINENO" 5
29593619 fi
29603620 ## -------------------- ##
29613621 ## Main body of script. ##
29693629
29703630
29713631
2972 ac_aux_dir=
2973 for ac_dir in ./config "$srcdir"/./config; do
2974 if test -f "$ac_dir/install-sh"; then
2975 ac_aux_dir=$ac_dir
2976 ac_install_sh="$ac_aux_dir/install-sh -c"
2977 break
2978 elif test -f "$ac_dir/install.sh"; then
2979 ac_aux_dir=$ac_dir
2980 ac_install_sh="$ac_aux_dir/install.sh -c"
2981 break
2982 elif test -f "$ac_dir/shtool"; then
2983 ac_aux_dir=$ac_dir
2984 ac_install_sh="$ac_aux_dir/shtool install -c"
2985 break
2986 fi
2987 done
2988 if test -z "$ac_aux_dir"; then
2989 as_fn_error $? "cannot find install-sh, install.sh, or shtool in ./config \"$srcdir\"/./config" "$LINENO" 5
2990 fi
2991
2992 # These three variables are undocumented and unsupported,
2993 # and are intended to be withdrawn in a future Autoconf release.
2994 # They can cause serious problems if a builder's source tree is in a directory
2995 # whose full name contains unusual characters.
2996 ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
2997 ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
2998 ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
2999
30003632
30013633 # Note that this directory must *exactly* match what was specified via
30023634 # -I in ACLOCAL_AMFLAGS in the top-level Makefile.am.
30113643 EOF
30123644
30133645 # This must be before AM_INIT_AUTOMAKE
3014 # Make sure we can run config.sub.
3015 $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
3016 as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
3017
3018 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
3019 $as_echo_n "checking build system type... " >&6; }
3020 if ${ac_cv_build+:} false; then :
3021 $as_echo_n "(cached) " >&6
3022 else
3646
3647
3648
3649 # Make sure we can run config.sub.
3650 $SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 ||
3651 as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5
3652
3653 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
3654 printf %s "checking build system type... " >&6; }
3655 if test ${ac_cv_build+y}
3656 then :
3657 printf %s "(cached) " >&6
3658 else $as_nop
30233659 ac_build_alias=$build_alias
30243660 test "x$ac_build_alias" = x &&
3025 ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
3661 ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"`
30263662 test "x$ac_build_alias" = x &&
30273663 as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
3028 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
3029 as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
3030
3031 fi
3032 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
3033 $as_echo "$ac_cv_build" >&6; }
3664 ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` ||
3665 as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5
3666
3667 fi
3668 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
3669 printf "%s\n" "$ac_cv_build" >&6; }
30343670 case $ac_cv_build in
30353671 *-*-*) ;;
30363672 *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
30493685 case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
30503686
30513687
3052 { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
3053 $as_echo_n "checking host system type... " >&6; }
3054 if ${ac_cv_host+:} false; then :
3055 $as_echo_n "(cached) " >&6
3056 else
3688 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
3689 printf %s "checking host system type... " >&6; }
3690 if test ${ac_cv_host+y}
3691 then :
3692 printf %s "(cached) " >&6
3693 else $as_nop
30573694 if test "x$host_alias" = x; then
30583695 ac_cv_host=$ac_cv_build
30593696 else
3060 ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
3061 as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
3062 fi
3063
3064 fi
3065 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
3066 $as_echo "$ac_cv_host" >&6; }
3697 ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` ||
3698 as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5
3699 fi
3700
3701 fi
3702 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
3703 printf "%s\n" "$ac_cv_host" >&6; }
30673704 case $ac_cv_host in
30683705 *-*-*) ;;
30693706 *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
30823719 case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
30833720
30843721
3085 { $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
3086 $as_echo_n "checking target system type... " >&6; }
3087 if ${ac_cv_target+:} false; then :
3088 $as_echo_n "(cached) " >&6
3089 else
3722 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
3723 printf %s "checking target system type... " >&6; }
3724 if test ${ac_cv_target+y}
3725 then :
3726 printf %s "(cached) " >&6
3727 else $as_nop
30903728 if test "x$target_alias" = x; then
30913729 ac_cv_target=$ac_cv_host
30923730 else
3093 ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||
3094 as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5
3095 fi
3096
3097 fi
3098 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5
3099 $as_echo "$ac_cv_target" >&6; }
3731 ac_cv_target=`$SHELL "${ac_aux_dir}config.sub" $target_alias` ||
3732 as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $target_alias failed" "$LINENO" 5
3733 fi
3734
3735 fi
3736 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5
3737 printf "%s\n" "$ac_cv_target" >&6; }
31003738 case $ac_cv_target in
31013739 *-*-*) ;;
31023740 *) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;;
31253763 # Init automake
31263764 am__api_version='1.16'
31273765
3128 # Find a good install program. We prefer a C program (faster),
3766
3767 # Find a good install program. We prefer a C program (faster),
31293768 # so one script is as good as another. But avoid the broken or
31303769 # incompatible versions:
31313770 # SysV /etc/install, /usr/sbin/install
31393778 # OS/2's system install, which has a completely different semantic
31403779 # ./install, which can be erroneously created by make from ./install.sh.
31413780 # Reject install programs that cannot install multiple files.
3142 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
3143 $as_echo_n "checking for a BSD-compatible install... " >&6; }
3781 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
3782 printf %s "checking for a BSD-compatible install... " >&6; }
31443783 if test -z "$INSTALL"; then
3145 if ${ac_cv_path_install+:} false; then :
3146 $as_echo_n "(cached) " >&6
3147 else
3784 if test ${ac_cv_path_install+y}
3785 then :
3786 printf %s "(cached) " >&6
3787 else $as_nop
31483788 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
31493789 for as_dir in $PATH
31503790 do
31513791 IFS=$as_save_IFS
3152 test -z "$as_dir" && as_dir=.
3153 # Account for people who put trailing slashes in PATH elements.
3154 case $as_dir/ in #((
3155 ./ | .// | /[cC]/* | \
3792 case $as_dir in #(((
3793 '') as_dir=./ ;;
3794 */) ;;
3795 *) as_dir=$as_dir/ ;;
3796 esac
3797 # Account for fact that we put trailing slashes in our PATH walk.
3798 case $as_dir in #((
3799 ./ | /[cC]/* | \
31563800 /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
31573801 ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
31583802 /usr/ucb/* ) ;;
31623806 # by default.
31633807 for ac_prog in ginstall scoinst install; do
31643808 for ac_exec_ext in '' $ac_executable_extensions; do
3165 if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
3809 if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then
31663810 if test $ac_prog = install &&
3167 grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
3811 grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
31683812 # AIX install. It has an incompatible calling convention.
31693813 :
31703814 elif test $ac_prog = install &&
3171 grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
3815 grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
31723816 # program-specific install script used by HP pwplus--don't use.
31733817 :
31743818 else
31763820 echo one > conftest.one
31773821 echo two > conftest.two
31783822 mkdir conftest.dir
3179 if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
3823 if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" &&
31803824 test -s conftest.one && test -s conftest.two &&
31813825 test -s conftest.dir/conftest.one &&
31823826 test -s conftest.dir/conftest.two
31833827 then
3184 ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
3828 ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c"
31853829 break 3
31863830 fi
31873831 fi
31973841 rm -rf conftest.one conftest.two conftest.dir
31983842
31993843 fi
3200 if test "${ac_cv_path_install+set}" = set; then
3844 if test ${ac_cv_path_install+y}; then
32013845 INSTALL=$ac_cv_path_install
32023846 else
32033847 # As a last resort, use the slow shell script. Don't cache a
32073851 INSTALL=$ac_install_sh
32083852 fi
32093853 fi
3210 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
3211 $as_echo "$INSTALL" >&6; }
3854 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
3855 printf "%s\n" "$INSTALL" >&6; }
32123856
32133857 # Use test -z because SunOS4 sh mishandles braces in ${var-val}.
32143858 # It thinks the first close brace ends the variable substitution.
32183862
32193863 test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
32203864
3221 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
3222 $as_echo_n "checking whether build environment is sane... " >&6; }
3865 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
3866 printf %s "checking whether build environment is sane... " >&6; }
32233867 # Reject unsafe characters in $srcdir or the absolute working directory
32243868 # name. Accept space and tab only in the latter.
32253869 am_lf='
32733917 as_fn_error $? "newly created file is older than distributed files!
32743918 Check your system clock" "$LINENO" 5
32753919 fi
3276 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
3277 $as_echo "yes" >&6; }
3920 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
3921 printf "%s\n" "yes" >&6; }
32783922 # If we didn't sleep, we still need to ensure time stamps of config.status and
32793923 # generated files are strictly newer.
32803924 am_sleep_pid=
32933937 # Double any \ or $.
32943938 # By default was `s,x,x', remove it if useless.
32953939 ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
3296 program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
3940 program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"`
3941
32973942
32983943 # Expand $ac_aux_dir to an absolute path.
32993944 am_aux_dir=`cd "$ac_aux_dir" && pwd`
33003945
3301 if test x"${MISSING+set}" != xset; then
3946
3947 if test x"${MISSING+set}" != xset; then
33023948 MISSING="\${SHELL} '$am_aux_dir/missing'"
33033949 fi
33043950 # Use eval to expand $SHELL
33063952 am_missing_run="$MISSING "
33073953 else
33083954 am_missing_run=
3309 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
3310 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
3955 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
3956 printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
33113957 fi
33123958
33133959 if test x"${install_sh+set}" != xset; then
33273973 if test -n "$ac_tool_prefix"; then
33283974 # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
33293975 set dummy ${ac_tool_prefix}strip; ac_word=$2
3330 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
3331 $as_echo_n "checking for $ac_word... " >&6; }
3332 if ${ac_cv_prog_STRIP+:} false; then :
3333 $as_echo_n "(cached) " >&6
3334 else
3976 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
3977 printf %s "checking for $ac_word... " >&6; }
3978 if test ${ac_cv_prog_STRIP+y}
3979 then :
3980 printf %s "(cached) " >&6
3981 else $as_nop
33353982 if test -n "$STRIP"; then
33363983 ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
33373984 else
33393986 for as_dir in $PATH
33403987 do
33413988 IFS=$as_save_IFS
3342 test -z "$as_dir" && as_dir=.
3989 case $as_dir in #(((
3990 '') as_dir=./ ;;
3991 */) ;;
3992 *) as_dir=$as_dir/ ;;
3993 esac
33433994 for ac_exec_ext in '' $ac_executable_extensions; do
3344 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
3995 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
33453996 ac_cv_prog_STRIP="${ac_tool_prefix}strip"
3346 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
3997 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
33473998 break 2
33483999 fi
33494000 done
33544005 fi
33554006 STRIP=$ac_cv_prog_STRIP
33564007 if test -n "$STRIP"; then
3357 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
3358 $as_echo "$STRIP" >&6; }
4008 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
4009 printf "%s\n" "$STRIP" >&6; }
33594010 else
3360 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
3361 $as_echo "no" >&6; }
4011 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
4012 printf "%s\n" "no" >&6; }
33624013 fi
33634014
33644015
33674018 ac_ct_STRIP=$STRIP
33684019 # Extract the first word of "strip", so it can be a program name with args.
33694020 set dummy strip; ac_word=$2
3370 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
3371 $as_echo_n "checking for $ac_word... " >&6; }
3372 if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
3373 $as_echo_n "(cached) " >&6
3374 else
4021 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
4022 printf %s "checking for $ac_word... " >&6; }
4023 if test ${ac_cv_prog_ac_ct_STRIP+y}
4024 then :
4025 printf %s "(cached) " >&6
4026 else $as_nop
33754027 if test -n "$ac_ct_STRIP"; then
33764028 ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
33774029 else
33794031 for as_dir in $PATH
33804032 do
33814033 IFS=$as_save_IFS
3382 test -z "$as_dir" && as_dir=.
4034 case $as_dir in #(((
4035 '') as_dir=./ ;;
4036 */) ;;
4037 *) as_dir=$as_dir/ ;;
4038 esac
33834039 for ac_exec_ext in '' $ac_executable_extensions; do
3384 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
4040 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
33854041 ac_cv_prog_ac_ct_STRIP="strip"
3386 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
4042 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
33874043 break 2
33884044 fi
33894045 done
33944050 fi
33954051 ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
33964052 if test -n "$ac_ct_STRIP"; then
3397 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
3398 $as_echo "$ac_ct_STRIP" >&6; }
4053 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
4054 printf "%s\n" "$ac_ct_STRIP" >&6; }
33994055 else
3400 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
3401 $as_echo "no" >&6; }
4056 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
4057 printf "%s\n" "no" >&6; }
34024058 fi
34034059
34044060 if test "x$ac_ct_STRIP" = x; then
34064062 else
34074063 case $cross_compiling:$ac_tool_warned in
34084064 yes:)
3409 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
3410 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
4065 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
4066 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
34114067 ac_tool_warned=yes ;;
34124068 esac
34134069 STRIP=$ac_ct_STRIP
34194075 fi
34204076 INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
34214077
3422 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
3423 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
4078
4079 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5
4080 printf %s "checking for a race-free mkdir -p... " >&6; }
34244081 if test -z "$MKDIR_P"; then
3425 if ${ac_cv_path_mkdir+:} false; then :
3426 $as_echo_n "(cached) " >&6
3427 else
4082 if test ${ac_cv_path_mkdir+y}
4083 then :
4084 printf %s "(cached) " >&6
4085 else $as_nop
34284086 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
34294087 for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
34304088 do
34314089 IFS=$as_save_IFS
3432 test -z "$as_dir" && as_dir=.
4090 case $as_dir in #(((
4091 '') as_dir=./ ;;
4092 */) ;;
4093 *) as_dir=$as_dir/ ;;
4094 esac
34334095 for ac_prog in mkdir gmkdir; do
34344096 for ac_exec_ext in '' $ac_executable_extensions; do
3435 as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
3436 case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
3437 'mkdir (GNU coreutils) '* | \
3438 'mkdir (coreutils) '* | \
4097 as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue
4098 case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #(
4099 'mkdir ('*'coreutils) '* | \
4100 'BusyBox '* | \
34394101 'mkdir (fileutils) '4.1*)
3440 ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
4102 ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext
34414103 break 3;;
34424104 esac
34434105 done
34484110 fi
34494111
34504112 test -d ./--version && rmdir ./--version
3451 if test "${ac_cv_path_mkdir+set}" = set; then
4113 if test ${ac_cv_path_mkdir+y}; then
34524114 MKDIR_P="$ac_cv_path_mkdir -p"
34534115 else
34544116 # As a last resort, use the slow shell script. Don't cache a
34584120 MKDIR_P="$ac_install_sh -d"
34594121 fi
34604122 fi
3461 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
3462 $as_echo "$MKDIR_P" >&6; }
4123 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
4124 printf "%s\n" "$MKDIR_P" >&6; }
34634125
34644126 for ac_prog in gawk mawk nawk awk
34654127 do
34664128 # Extract the first word of "$ac_prog", so it can be a program name with args.
34674129 set dummy $ac_prog; ac_word=$2
3468 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
3469 $as_echo_n "checking for $ac_word... " >&6; }
3470 if ${ac_cv_prog_AWK+:} false; then :
3471 $as_echo_n "(cached) " >&6
3472 else
4130 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
4131 printf %s "checking for $ac_word... " >&6; }
4132 if test ${ac_cv_prog_AWK+y}
4133 then :
4134 printf %s "(cached) " >&6
4135 else $as_nop
34734136 if test -n "$AWK"; then
34744137 ac_cv_prog_AWK="$AWK" # Let the user override the test.
34754138 else
34774140 for as_dir in $PATH
34784141 do
34794142 IFS=$as_save_IFS
3480 test -z "$as_dir" && as_dir=.
4143 case $as_dir in #(((
4144 '') as_dir=./ ;;
4145 */) ;;
4146 *) as_dir=$as_dir/ ;;
4147 esac
34814148 for ac_exec_ext in '' $ac_executable_extensions; do
3482 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
4149 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
34834150 ac_cv_prog_AWK="$ac_prog"
3484 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
4151 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
34854152 break 2
34864153 fi
34874154 done
34924159 fi
34934160 AWK=$ac_cv_prog_AWK
34944161 if test -n "$AWK"; then
3495 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
3496 $as_echo "$AWK" >&6; }
4162 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
4163 printf "%s\n" "$AWK" >&6; }
34974164 else
3498 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
3499 $as_echo "no" >&6; }
4165 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
4166 printf "%s\n" "no" >&6; }
35004167 fi
35014168
35024169
35034170 test -n "$AWK" && break
35044171 done
35054172
3506 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
3507 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
4173 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
4174 printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
35084175 set x ${MAKE-make}
3509 ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
3510 if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
3511 $as_echo_n "(cached) " >&6
3512 else
4176 ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
4177 if eval test \${ac_cv_prog_make_${ac_make}_set+y}
4178 then :
4179 printf %s "(cached) " >&6
4180 else $as_nop
35134181 cat >conftest.make <<\_ACEOF
35144182 SHELL = /bin/sh
35154183 all:
35254193 rm -f conftest.make
35264194 fi
35274195 if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
3528 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
3529 $as_echo "yes" >&6; }
4196 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
4197 printf "%s\n" "yes" >&6; }
35304198 SET_MAKE=
35314199 else
3532 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
3533 $as_echo "no" >&6; }
4200 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
4201 printf "%s\n" "no" >&6; }
35344202 SET_MAKE="MAKE=${MAKE-make}"
35354203 fi
35364204
35444212 rmdir .tst 2>/dev/null
35454213
35464214 # Check whether --enable-silent-rules was given.
3547 if test "${enable_silent_rules+set}" = set; then :
4215 if test ${enable_silent_rules+y}
4216 then :
35484217 enableval=$enable_silent_rules;
35494218 fi
35504219
35544223 *) AM_DEFAULT_VERBOSITY=1;;
35554224 esac
35564225 am_make=${MAKE-make}
3557 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
3558 $as_echo_n "checking whether $am_make supports nested variables... " >&6; }
3559 if ${am_cv_make_support_nested_variables+:} false; then :
3560 $as_echo_n "(cached) " >&6
3561 else
3562 if $as_echo 'TRUE=$(BAR$(V))
4226 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
4227 printf %s "checking whether $am_make supports nested variables... " >&6; }
4228 if test ${am_cv_make_support_nested_variables+y}
4229 then :
4230 printf %s "(cached) " >&6
4231 else $as_nop
4232 if printf "%s\n" 'TRUE=$(BAR$(V))
35634233 BAR0=false
35644234 BAR1=true
35654235 V=1
35714241 am_cv_make_support_nested_variables=no
35724242 fi
35734243 fi
3574 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
3575 $as_echo "$am_cv_make_support_nested_variables" >&6; }
4244 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
4245 printf "%s\n" "$am_cv_make_support_nested_variables" >&6; }
35764246 if test $am_cv_make_support_nested_variables = yes; then
35774247 AM_V='$(V)'
35784248 AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
36044274
36054275 # Define the identity of the package.
36064276 PACKAGE='hwloc'
3607 VERSION='2.4.1'
3608
3609
3610 cat >>confdefs.h <<_ACEOF
3611 #define PACKAGE "$PACKAGE"
3612 _ACEOF
3613
3614
3615 cat >>confdefs.h <<_ACEOF
3616 #define VERSION "$VERSION"
3617 _ACEOF
4277 VERSION='2.5.0rc1'
4278
4279
4280 printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
4281
4282
4283 printf "%s\n" "#define VERSION \"$VERSION\"" >>confdefs.h
36184284
36194285 # Some tools Automake needs.
36204286
36604326 # (that is, avoid stderr redirection).
36614327 am_uid=`id -u || echo unknown`
36624328 am_gid=`id -g || echo unknown`
3663 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether UID '$am_uid' is supported by ustar format" >&5
3664 $as_echo_n "checking whether UID '$am_uid' is supported by ustar format... " >&6; }
4329 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether UID '$am_uid' is supported by ustar format" >&5
4330 printf %s "checking whether UID '$am_uid' is supported by ustar format... " >&6; }
36654331 if test $am_uid -le $am_max_uid; then
3666 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
3667 $as_echo "yes" >&6; }
4332 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
4333 printf "%s\n" "yes" >&6; }
36684334 else
3669 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
3670 $as_echo "no" >&6; }
4335 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
4336 printf "%s\n" "no" >&6; }
36714337 _am_tools=none
36724338 fi
3673 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether GID '$am_gid' is supported by ustar format" >&5
3674 $as_echo_n "checking whether GID '$am_gid' is supported by ustar format... " >&6; }
4339 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether GID '$am_gid' is supported by ustar format" >&5
4340 printf %s "checking whether GID '$am_gid' is supported by ustar format... " >&6; }
36754341 if test $am_gid -le $am_max_gid; then
3676 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
3677 $as_echo "yes" >&6; }
4342 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
4343 printf "%s\n" "yes" >&6; }
36784344 else
3679 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
3680 $as_echo "no" >&6; }
4345 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
4346 printf "%s\n" "no" >&6; }
36814347 _am_tools=none
36824348 fi
36834349
3684 { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to create a ustar tar archive" >&5
3685 $as_echo_n "checking how to create a ustar tar archive... " >&6; }
4350 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to create a ustar tar archive" >&5
4351 printf %s "checking how to create a ustar tar archive... " >&6; }
36864352
36874353 # Go ahead even if we have the value already cached. We do so because we
36884354 # need to set the values for the 'am__tar' and 'am__untar' variables.
37574423 done
37584424 rm -rf conftest.dir
37594425
3760 if ${am_cv_prog_tar_ustar+:} false; then :
3761 $as_echo_n "(cached) " >&6
3762 else
4426 if test ${am_cv_prog_tar_ustar+y}
4427 then :
4428 printf %s "(cached) " >&6
4429 else $as_nop
37634430 am_cv_prog_tar_ustar=$_am_tool
37644431 fi
37654432
3766 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_ustar" >&5
3767 $as_echo "$am_cv_prog_tar_ustar" >&6; }
4433 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_tar_ustar" >&5
4434 printf "%s\n" "$am_cv_prog_tar_ustar" >&6; }
37684435
37694436
37704437
38144481 fi
38154482
38164483 # Check whether --enable-silent-rules was given.
3817 if test "${enable_silent_rules+set}" = set; then :
4484 if test ${enable_silent_rules+y}
4485 then :
38184486 enableval=$enable_silent_rules;
38194487 fi
38204488
38244492 *) AM_DEFAULT_VERBOSITY=0;;
38254493 esac
38264494 am_make=${MAKE-make}
3827 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
3828 $as_echo_n "checking whether $am_make supports nested variables... " >&6; }
3829 if ${am_cv_make_support_nested_variables+:} false; then :
3830 $as_echo_n "(cached) " >&6
3831 else
3832 if $as_echo 'TRUE=$(BAR$(V))
4495 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
4496 printf %s "checking whether $am_make supports nested variables... " >&6; }
4497 if test ${am_cv_make_support_nested_variables+y}
4498 then :
4499 printf %s "(cached) " >&6
4500 else $as_nop
4501 if printf "%s\n" 'TRUE=$(BAR$(V))
38334502 BAR0=false
38344503 BAR1=true
38354504 V=1
38414510 am_cv_make_support_nested_variables=no
38424511 fi
38434512 fi
3844 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
3845 $as_echo "$am_cv_make_support_nested_variables" >&6; }
4513 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
4514 printf "%s\n" "$am_cv_make_support_nested_variables" >&6; }
38464515 if test $am_cv_make_support_nested_variables = yes; then
38474516 AM_V='$(V)'
38484517 AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
38594528 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
38604529 ac_compiler_gnu=$ac_cv_c_compiler_gnu
38614530
4531
4532
4533
4534
4535
4536
4537
4538
4539
38624540 DEPDIR="${am__leading_dot}deps"
38634541
38644542 ac_config_commands="$ac_config_commands depfiles"
38654543
3866 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5
3867 $as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; }
4544 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5
4545 printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; }
38684546 cat > confinc.mk << 'END'
38694547 am__doit:
38704548 @echo this is the am__doit target >confinc.out
39004578 fi
39014579 done
39024580 rm -f confinc.* confmf.*
3903 { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5
3904 $as_echo "${_am_result}" >&6; }
4581 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5
4582 printf "%s\n" "${_am_result}" >&6; }
39054583
39064584 # Check whether --enable-dependency-tracking was given.
3907 if test "${enable_dependency_tracking+set}" = set; then :
4585 if test ${enable_dependency_tracking+y}
4586 then :
39084587 enableval=$enable_dependency_tracking;
39094588 fi
39104589
39304609 if test -n "$ac_tool_prefix"; then
39314610 # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
39324611 set dummy ${ac_tool_prefix}gcc; ac_word=$2
3933 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
3934 $as_echo_n "checking for $ac_word... " >&6; }
3935 if ${ac_cv_prog_CC+:} false; then :
3936 $as_echo_n "(cached) " >&6
3937 else
4612 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
4613 printf %s "checking for $ac_word... " >&6; }
4614 if test ${ac_cv_prog_CC+y}
4615 then :
4616 printf %s "(cached) " >&6
4617 else $as_nop
39384618 if test -n "$CC"; then
39394619 ac_cv_prog_CC="$CC" # Let the user override the test.
39404620 else
39424622 for as_dir in $PATH
39434623 do
39444624 IFS=$as_save_IFS
3945 test -z "$as_dir" && as_dir=.
4625 case $as_dir in #(((
4626 '') as_dir=./ ;;
4627 */) ;;
4628 *) as_dir=$as_dir/ ;;
4629 esac
39464630 for ac_exec_ext in '' $ac_executable_extensions; do
3947 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
4631 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
39484632 ac_cv_prog_CC="${ac_tool_prefix}gcc"
3949 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
4633 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
39504634 break 2
39514635 fi
39524636 done
39574641 fi
39584642 CC=$ac_cv_prog_CC
39594643 if test -n "$CC"; then
3960 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
3961 $as_echo "$CC" >&6; }
4644 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
4645 printf "%s\n" "$CC" >&6; }
39624646 else
3963 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
3964 $as_echo "no" >&6; }
4647 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
4648 printf "%s\n" "no" >&6; }
39654649 fi
39664650
39674651
39704654 ac_ct_CC=$CC
39714655 # Extract the first word of "gcc", so it can be a program name with args.
39724656 set dummy gcc; ac_word=$2
3973 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
3974 $as_echo_n "checking for $ac_word... " >&6; }
3975 if ${ac_cv_prog_ac_ct_CC+:} false; then :
3976 $as_echo_n "(cached) " >&6
3977 else
4657 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
4658 printf %s "checking for $ac_word... " >&6; }
4659 if test ${ac_cv_prog_ac_ct_CC+y}
4660 then :
4661 printf %s "(cached) " >&6
4662 else $as_nop
39784663 if test -n "$ac_ct_CC"; then
39794664 ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
39804665 else
39824667 for as_dir in $PATH
39834668 do
39844669 IFS=$as_save_IFS
3985 test -z "$as_dir" && as_dir=.
4670 case $as_dir in #(((
4671 '') as_dir=./ ;;
4672 */) ;;
4673 *) as_dir=$as_dir/ ;;
4674 esac
39864675 for ac_exec_ext in '' $ac_executable_extensions; do
3987 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
4676 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
39884677 ac_cv_prog_ac_ct_CC="gcc"
3989 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
4678 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
39904679 break 2
39914680 fi
39924681 done
39974686 fi
39984687 ac_ct_CC=$ac_cv_prog_ac_ct_CC
39994688 if test -n "$ac_ct_CC"; then
4000 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
4001 $as_echo "$ac_ct_CC" >&6; }
4689 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
4690 printf "%s\n" "$ac_ct_CC" >&6; }
40024691 else
4003 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
4004 $as_echo "no" >&6; }
4692 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
4693 printf "%s\n" "no" >&6; }
40054694 fi
40064695
40074696 if test "x$ac_ct_CC" = x; then
40094698 else
40104699 case $cross_compiling:$ac_tool_warned in
40114700 yes:)
4012 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
4013 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
4701 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
4702 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
40144703 ac_tool_warned=yes ;;
40154704 esac
40164705 CC=$ac_ct_CC
40234712 if test -n "$ac_tool_prefix"; then
40244713 # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
40254714 set dummy ${ac_tool_prefix}cc; ac_word=$2
4026 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
4027 $as_echo_n "checking for $ac_word... " >&6; }
4028 if ${ac_cv_prog_CC+:} false; then :
4029 $as_echo_n "(cached) " >&6
4030 else
4715 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
4716 printf %s "checking for $ac_word... " >&6; }
4717 if test ${ac_cv_prog_CC+y}
4718 then :
4719 printf %s "(cached) " >&6
4720 else $as_nop
40314721 if test -n "$CC"; then
40324722 ac_cv_prog_CC="$CC" # Let the user override the test.
40334723 else
40354725 for as_dir in $PATH
40364726 do
40374727 IFS=$as_save_IFS
4038 test -z "$as_dir" && as_dir=.
4728 case $as_dir in #(((
4729 '') as_dir=./ ;;
4730 */) ;;
4731 *) as_dir=$as_dir/ ;;
4732 esac
40394733 for ac_exec_ext in '' $ac_executable_extensions; do
4040 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
4734 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
40414735 ac_cv_prog_CC="${ac_tool_prefix}cc"
4042 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
4736 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
40434737 break 2
40444738 fi
40454739 done
40504744 fi
40514745 CC=$ac_cv_prog_CC
40524746 if test -n "$CC"; then
4053 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
4054 $as_echo "$CC" >&6; }
4747 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
4748 printf "%s\n" "$CC" >&6; }
40554749 else
4056 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
4057 $as_echo "no" >&6; }
4750 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
4751 printf "%s\n" "no" >&6; }
40584752 fi
40594753
40604754
40634757 if test -z "$CC"; then
40644758 # Extract the first word of "cc", so it can be a program name with args.
40654759 set dummy cc; ac_word=$2
4066 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
4067 $as_echo_n "checking for $ac_word... " >&6; }
4068 if ${ac_cv_prog_CC+:} false; then :
4069 $as_echo_n "(cached) " >&6
4070 else
4760 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
4761 printf %s "checking for $ac_word... " >&6; }
4762 if test ${ac_cv_prog_CC+y}
4763 then :
4764 printf %s "(cached) " >&6
4765 else $as_nop
40714766 if test -n "$CC"; then
40724767 ac_cv_prog_CC="$CC" # Let the user override the test.
40734768 else
40764771 for as_dir in $PATH
40774772 do
40784773 IFS=$as_save_IFS
4079 test -z "$as_dir" && as_dir=.
4774 case $as_dir in #(((
4775 '') as_dir=./ ;;
4776 */) ;;
4777 *) as_dir=$as_dir/ ;;
4778 esac
40804779 for ac_exec_ext in '' $ac_executable_extensions; do
4081 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
4082 if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
4780 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
4781 if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
40834782 ac_prog_rejected=yes
40844783 continue
40854784 fi
40864785 ac_cv_prog_CC="cc"
4087 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
4786 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
40884787 break 2
40894788 fi
40904789 done
41004799 # However, it has the same basename, so the bogon will be chosen
41014800 # first if we set CC to just the basename; use the full file name.
41024801 shift
4103 ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
4802 ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@"
41044803 fi
41054804 fi
41064805 fi
41074806 fi
41084807 CC=$ac_cv_prog_CC
41094808 if test -n "$CC"; then
4110 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
4111 $as_echo "$CC" >&6; }
4809 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
4810 printf "%s\n" "$CC" >&6; }
41124811 else
4113 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
4114 $as_echo "no" >&6; }
4812 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
4813 printf "%s\n" "no" >&6; }
41154814 fi
41164815
41174816
41224821 do
41234822 # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
41244823 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
4125 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
4126 $as_echo_n "checking for $ac_word... " >&6; }
4127 if ${ac_cv_prog_CC+:} false; then :
4128 $as_echo_n "(cached) " >&6
4129 else
4824 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
4825 printf %s "checking for $ac_word... " >&6; }
4826 if test ${ac_cv_prog_CC+y}
4827 then :
4828 printf %s "(cached) " >&6
4829 else $as_nop
41304830 if test -n "$CC"; then
41314831 ac_cv_prog_CC="$CC" # Let the user override the test.
41324832 else
41344834 for as_dir in $PATH
41354835 do
41364836 IFS=$as_save_IFS
4137 test -z "$as_dir" && as_dir=.
4837 case $as_dir in #(((
4838 '') as_dir=./ ;;
4839 */) ;;
4840 *) as_dir=$as_dir/ ;;
4841 esac
41384842 for ac_exec_ext in '' $ac_executable_extensions; do
4139 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
4843 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
41404844 ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
4141 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
4845 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
41424846 break 2
41434847 fi
41444848 done
41494853 fi
41504854 CC=$ac_cv_prog_CC
41514855 if test -n "$CC"; then
4152 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
4153 $as_echo "$CC" >&6; }
4856 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
4857 printf "%s\n" "$CC" >&6; }
41544858 else
4155 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
4156 $as_echo "no" >&6; }
4859 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
4860 printf "%s\n" "no" >&6; }
41574861 fi
41584862
41594863
41664870 do
41674871 # Extract the first word of "$ac_prog", so it can be a program name with args.
41684872 set dummy $ac_prog; ac_word=$2
4169 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
4170 $as_echo_n "checking for $ac_word... " >&6; }
4171 if ${ac_cv_prog_ac_ct_CC+:} false; then :
4172 $as_echo_n "(cached) " >&6
4173 else
4873 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
4874 printf %s "checking for $ac_word... " >&6; }
4875 if test ${ac_cv_prog_ac_ct_CC+y}
4876 then :
4877 printf %s "(cached) " >&6
4878 else $as_nop
41744879 if test -n "$ac_ct_CC"; then
41754880 ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
41764881 else
41784883 for as_dir in $PATH
41794884 do
41804885 IFS=$as_save_IFS
4181 test -z "$as_dir" && as_dir=.
4886 case $as_dir in #(((
4887 '') as_dir=./ ;;
4888 */) ;;
4889 *) as_dir=$as_dir/ ;;
4890 esac
41824891 for ac_exec_ext in '' $ac_executable_extensions; do
4183 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
4892 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
41844893 ac_cv_prog_ac_ct_CC="$ac_prog"
4185 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
4894 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
41864895 break 2
41874896 fi
41884897 done
41934902 fi
41944903 ac_ct_CC=$ac_cv_prog_ac_ct_CC
41954904 if test -n "$ac_ct_CC"; then
4196 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
4197 $as_echo "$ac_ct_CC" >&6; }
4905 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
4906 printf "%s\n" "$ac_ct_CC" >&6; }
41984907 else
4199 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
4200 $as_echo "no" >&6; }
4908 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
4909 printf "%s\n" "no" >&6; }
42014910 fi
42024911
42034912
42094918 else
42104919 case $cross_compiling:$ac_tool_warned in
42114920 yes:)
4212 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
4213 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
4921 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
4922 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
42144923 ac_tool_warned=yes ;;
42154924 esac
42164925 CC=$ac_ct_CC
42184927 fi
42194928
42204929 fi
4221
4222
4223 test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
4224 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
4930 if test -z "$CC"; then
4931 if test -n "$ac_tool_prefix"; then
4932 # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args.
4933 set dummy ${ac_tool_prefix}clang; ac_word=$2
4934 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
4935 printf %s "checking for $ac_word... " >&6; }
4936 if test ${ac_cv_prog_CC+y}
4937 then :
4938 printf %s "(cached) " >&6
4939 else $as_nop
4940 if test -n "$CC"; then
4941 ac_cv_prog_CC="$CC" # Let the user override the test.
4942 else
4943 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
4944 for as_dir in $PATH
4945 do
4946 IFS=$as_save_IFS
4947 case $as_dir in #(((
4948 '') as_dir=./ ;;
4949 */) ;;
4950 *) as_dir=$as_dir/ ;;
4951 esac
4952 for ac_exec_ext in '' $ac_executable_extensions; do
4953 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
4954 ac_cv_prog_CC="${ac_tool_prefix}clang"
4955 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
4956 break 2
4957 fi
4958 done
4959 done
4960 IFS=$as_save_IFS
4961
4962 fi
4963 fi
4964 CC=$ac_cv_prog_CC
4965 if test -n "$CC"; then
4966 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
4967 printf "%s\n" "$CC" >&6; }
4968 else
4969 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
4970 printf "%s\n" "no" >&6; }
4971 fi
4972
4973
4974 fi
4975 if test -z "$ac_cv_prog_CC"; then
4976 ac_ct_CC=$CC
4977 # Extract the first word of "clang", so it can be a program name with args.
4978 set dummy clang; ac_word=$2
4979 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
4980 printf %s "checking for $ac_word... " >&6; }
4981 if test ${ac_cv_prog_ac_ct_CC+y}
4982 then :
4983 printf %s "(cached) " >&6
4984 else $as_nop
4985 if test -n "$ac_ct_CC"; then
4986 ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
4987 else
4988 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
4989 for as_dir in $PATH
4990 do
4991 IFS=$as_save_IFS
4992 case $as_dir in #(((
4993 '') as_dir=./ ;;
4994 */) ;;
4995 *) as_dir=$as_dir/ ;;
4996 esac
4997 for ac_exec_ext in '' $ac_executable_extensions; do
4998 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
4999 ac_cv_prog_ac_ct_CC="clang"
5000 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
5001 break 2
5002 fi
5003 done
5004 done
5005 IFS=$as_save_IFS
5006
5007 fi
5008 fi
5009 ac_ct_CC=$ac_cv_prog_ac_ct_CC
5010 if test -n "$ac_ct_CC"; then
5011 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
5012 printf "%s\n" "$ac_ct_CC" >&6; }
5013 else
5014 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
5015 printf "%s\n" "no" >&6; }
5016 fi
5017
5018 if test "x$ac_ct_CC" = x; then
5019 CC=""
5020 else
5021 case $cross_compiling:$ac_tool_warned in
5022 yes:)
5023 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
5024 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
5025 ac_tool_warned=yes ;;
5026 esac
5027 CC=$ac_ct_CC
5028 fi
5029 else
5030 CC="$ac_cv_prog_CC"
5031 fi
5032
5033 fi
5034
5035
5036 test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
5037 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
42255038 as_fn_error $? "no acceptable C compiler found in \$PATH
42265039 See \`config.log' for more details" "$LINENO" 5; }
42275040
42285041 # Provide some information about the compiler.
4229 $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
5042 printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
42305043 set X $ac_compile
42315044 ac_compiler=$2
4232 for ac_option in --version -v -V -qversion; do
5045 for ac_option in --version -v -V -qversion -version; do
42335046 { { ac_try="$ac_compiler $ac_option >&5"
42345047 case "(($ac_try" in
42355048 *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
42365049 *) ac_try_echo=$ac_try;;
42375050 esac
42385051 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
4239 $as_echo "$ac_try_echo"; } >&5
5052 printf "%s\n" "$ac_try_echo"; } >&5
42405053 (eval "$ac_compiler $ac_option >&5") 2>conftest.err
42415054 ac_status=$?
42425055 if test -s conftest.err; then
42465059 cat conftest.er1 >&5
42475060 fi
42485061 rm -f conftest.er1 conftest.err
4249 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
5062 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
42505063 test $ac_status = 0; }
42515064 done
42525065
42545067 /* end confdefs.h. */
42555068
42565069 int
4257 main ()
5070 main (void)
42585071 {
42595072
42605073 ;
42665079 # Try to create an executable without -o first, disregard a.out.
42675080 # It will help us diagnose broken compilers, and finding out an intuition
42685081 # of exeext.
4269 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
4270 $as_echo_n "checking whether the C compiler works... " >&6; }
4271 ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
5082 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
5083 printf %s "checking whether the C compiler works... " >&6; }
5084 ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
42725085
42735086 # The possible output files:
42745087 ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
42895102 *) ac_try_echo=$ac_try;;
42905103 esac
42915104 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
4292 $as_echo "$ac_try_echo"; } >&5
5105 printf "%s\n" "$ac_try_echo"; } >&5
42935106 (eval "$ac_link_default") 2>&5
42945107 ac_status=$?
4295 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
4296 test $ac_status = 0; }; then :
5108 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
5109 test $ac_status = 0; }
5110 then :
42975111 # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
42985112 # So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
42995113 # in a Makefile. We should not override ac_cv_exeext if it was cached,
43105124 # certainly right.
43115125 break;;
43125126 *.* )
4313 if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
5127 if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no;
43145128 then :; else
43155129 ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
43165130 fi
43265140 done
43275141 test "$ac_cv_exeext" = no && ac_cv_exeext=
43285142
4329 else
5143 else $as_nop
43305144 ac_file=''
43315145 fi
4332 if test -z "$ac_file"; then :
4333 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
4334 $as_echo "no" >&6; }
4335 $as_echo "$as_me: failed program was:" >&5
5146 if test -z "$ac_file"
5147 then :
5148 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
5149 printf "%s\n" "no" >&6; }
5150 printf "%s\n" "$as_me: failed program was:" >&5
43365151 sed 's/^/| /' conftest.$ac_ext >&5
43375152
4338 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
4339 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
5153 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
5154 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
43405155 as_fn_error 77 "C compiler cannot create executables
43415156 See \`config.log' for more details" "$LINENO" 5; }
4342 else
4343 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
4344 $as_echo "yes" >&6; }
4345 fi
4346 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
4347 $as_echo_n "checking for C compiler default output file name... " >&6; }
4348 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
4349 $as_echo "$ac_file" >&6; }
5157 else $as_nop
5158 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
5159 printf "%s\n" "yes" >&6; }
5160 fi
5161 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
5162 printf %s "checking for C compiler default output file name... " >&6; }
5163 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
5164 printf "%s\n" "$ac_file" >&6; }
43505165 ac_exeext=$ac_cv_exeext
43515166
43525167 rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
43535168 ac_clean_files=$ac_clean_files_save
4354 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
4355 $as_echo_n "checking for suffix of executables... " >&6; }
5169 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
5170 printf %s "checking for suffix of executables... " >&6; }
43565171 if { { ac_try="$ac_link"
43575172 case "(($ac_try" in
43585173 *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
43595174 *) ac_try_echo=$ac_try;;
43605175 esac
43615176 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
4362 $as_echo "$ac_try_echo"; } >&5
5177 printf "%s\n" "$ac_try_echo"; } >&5
43635178 (eval "$ac_link") 2>&5
43645179 ac_status=$?
4365 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
4366 test $ac_status = 0; }; then :
5180 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
5181 test $ac_status = 0; }
5182 then :
43675183 # If both `conftest.exe' and `conftest' are `present' (well, observable)
43685184 # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
43695185 # work properly (i.e., refer to `conftest.exe'), while it won't with
43775193 * ) break;;
43785194 esac
43795195 done
4380 else
4381 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
4382 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
5196 else $as_nop
5197 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
5198 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
43835199 as_fn_error $? "cannot compute suffix of executables: cannot compile and link
43845200 See \`config.log' for more details" "$LINENO" 5; }
43855201 fi
43865202 rm -f conftest conftest$ac_cv_exeext
4387 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
4388 $as_echo "$ac_cv_exeext" >&6; }
5203 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
5204 printf "%s\n" "$ac_cv_exeext" >&6; }
43895205
43905206 rm -f conftest.$ac_ext
43915207 EXEEXT=$ac_cv_exeext
43945210 /* end confdefs.h. */
43955211 #include <stdio.h>
43965212 int
4397 main ()
5213 main (void)
43985214 {
43995215 FILE *f = fopen ("conftest.out", "w");
44005216 return ferror (f) || fclose (f) != 0;
44065222 ac_clean_files="$ac_clean_files conftest.out"
44075223 # Check that the compiler produces executables we can run. If not, either
44085224 # the compiler is broken, or we cross compile.
4409 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
4410 $as_echo_n "checking whether we are cross compiling... " >&6; }
5225 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
5226 printf %s "checking whether we are cross compiling... " >&6; }
44115227 if test "$cross_compiling" != yes; then
44125228 { { ac_try="$ac_link"
44135229 case "(($ac_try" in
44155231 *) ac_try_echo=$ac_try;;
44165232 esac
44175233 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
4418 $as_echo "$ac_try_echo"; } >&5
5234 printf "%s\n" "$ac_try_echo"; } >&5
44195235 (eval "$ac_link") 2>&5
44205236 ac_status=$?
4421 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
5237 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
44225238 test $ac_status = 0; }
44235239 if { ac_try='./conftest$ac_cv_exeext'
44245240 { { case "(($ac_try" in
44265242 *) ac_try_echo=$ac_try;;
44275243 esac
44285244 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
4429 $as_echo "$ac_try_echo"; } >&5
5245 printf "%s\n" "$ac_try_echo"; } >&5
44305246 (eval "$ac_try") 2>&5
44315247 ac_status=$?
4432 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
5248 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
44335249 test $ac_status = 0; }; }; then
44345250 cross_compiling=no
44355251 else
44365252 if test "$cross_compiling" = maybe; then
44375253 cross_compiling=yes
44385254 else
4439 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
4440 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
4441 as_fn_error $? "cannot run C compiled programs.
5255 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
5256 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
5257 as_fn_error 77 "cannot run C compiled programs.
44425258 If you meant to cross compile, use \`--host'.
44435259 See \`config.log' for more details" "$LINENO" 5; }
44445260 fi
44455261 fi
44465262 fi
4447 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
4448 $as_echo "$cross_compiling" >&6; }
5263 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
5264 printf "%s\n" "$cross_compiling" >&6; }
44495265
44505266 rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
44515267 ac_clean_files=$ac_clean_files_save
4452 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
4453 $as_echo_n "checking for suffix of object files... " >&6; }
4454 if ${ac_cv_objext+:} false; then :
4455 $as_echo_n "(cached) " >&6
4456 else
5268 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
5269 printf %s "checking for suffix of object files... " >&6; }
5270 if test ${ac_cv_objext+y}
5271 then :
5272 printf %s "(cached) " >&6
5273 else $as_nop
44575274 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
44585275 /* end confdefs.h. */
44595276
44605277 int
4461 main ()
5278 main (void)
44625279 {
44635280
44645281 ;
44725289 *) ac_try_echo=$ac_try;;
44735290 esac
44745291 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
4475 $as_echo "$ac_try_echo"; } >&5
5292 printf "%s\n" "$ac_try_echo"; } >&5
44765293 (eval "$ac_compile") 2>&5
44775294 ac_status=$?
4478 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
4479 test $ac_status = 0; }; then :
5295 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
5296 test $ac_status = 0; }
5297 then :
44805298 for ac_file in conftest.o conftest.obj conftest.*; do
44815299 test -f "$ac_file" || continue;
44825300 case $ac_file in
44855303 break;;
44865304 esac
44875305 done
4488 else
4489 $as_echo "$as_me: failed program was:" >&5
5306 else $as_nop
5307 printf "%s\n" "$as_me: failed program was:" >&5
44905308 sed 's/^/| /' conftest.$ac_ext >&5
44915309
4492 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
4493 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
5310 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
5311 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
44945312 as_fn_error $? "cannot compute suffix of object files: cannot compile
44955313 See \`config.log' for more details" "$LINENO" 5; }
44965314 fi
44975315 rm -f conftest.$ac_cv_objext conftest.$ac_ext
44985316 fi
4499 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
4500 $as_echo "$ac_cv_objext" >&6; }
5317 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
5318 printf "%s\n" "$ac_cv_objext" >&6; }
45015319 OBJEXT=$ac_cv_objext
45025320 ac_objext=$OBJEXT
4503 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
4504 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
4505 if ${ac_cv_c_compiler_gnu+:} false; then :
4506 $as_echo_n "(cached) " >&6
4507 else
5321 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5
5322 printf %s "checking whether the compiler supports GNU C... " >&6; }
5323 if test ${ac_cv_c_compiler_gnu+y}
5324 then :
5325 printf %s "(cached) " >&6
5326 else $as_nop
45085327 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
45095328 /* end confdefs.h. */
45105329
45115330 int
4512 main ()
5331 main (void)
45135332 {
45145333 #ifndef __GNUC__
45155334 choke me
45195338 return 0;
45205339 }
45215340 _ACEOF
4522 if ac_fn_c_try_compile "$LINENO"; then :
5341 if ac_fn_c_try_compile "$LINENO"
5342 then :
45235343 ac_compiler_gnu=yes
4524 else
5344 else $as_nop
45255345 ac_compiler_gnu=no
45265346 fi
4527 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
5347 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
45285348 ac_cv_c_compiler_gnu=$ac_compiler_gnu
45295349
45305350 fi
4531 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
4532 $as_echo "$ac_cv_c_compiler_gnu" >&6; }
5351 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
5352 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; }
5353 ac_compiler_gnu=$ac_cv_c_compiler_gnu
5354
45335355 if test $ac_compiler_gnu = yes; then
45345356 GCC=yes
45355357 else
45365358 GCC=
45375359 fi
4538 ac_test_CFLAGS=${CFLAGS+set}
5360 ac_test_CFLAGS=${CFLAGS+y}
45395361 ac_save_CFLAGS=$CFLAGS
4540 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
4541 $as_echo_n "checking whether $CC accepts -g... " >&6; }
4542 if ${ac_cv_prog_cc_g+:} false; then :
4543 $as_echo_n "(cached) " >&6
4544 else
5362 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
5363 printf %s "checking whether $CC accepts -g... " >&6; }
5364 if test ${ac_cv_prog_cc_g+y}
5365 then :
5366 printf %s "(cached) " >&6
5367 else $as_nop
45455368 ac_save_c_werror_flag=$ac_c_werror_flag
45465369 ac_c_werror_flag=yes
45475370 ac_cv_prog_cc_g=no
45505373 /* end confdefs.h. */
45515374
45525375 int
4553 main ()
5376 main (void)
45545377 {
45555378
45565379 ;
45575380 return 0;
45585381 }
45595382 _ACEOF
4560 if ac_fn_c_try_compile "$LINENO"; then :
5383 if ac_fn_c_try_compile "$LINENO"
5384 then :
45615385 ac_cv_prog_cc_g=yes
4562 else
5386 else $as_nop
45635387 CFLAGS=""
45645388 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
45655389 /* end confdefs.h. */
45665390
45675391 int
4568 main ()
5392 main (void)
45695393 {
45705394
45715395 ;
45725396 return 0;
45735397 }
45745398 _ACEOF
4575 if ac_fn_c_try_compile "$LINENO"; then :
4576
4577 else
5399 if ac_fn_c_try_compile "$LINENO"
5400 then :
5401
5402 else $as_nop
45785403 ac_c_werror_flag=$ac_save_c_werror_flag
45795404 CFLAGS="-g"
45805405 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
45815406 /* end confdefs.h. */
45825407
45835408 int
4584 main ()
5409 main (void)
45855410 {
45865411
45875412 ;
45885413 return 0;
45895414 }
45905415 _ACEOF
4591 if ac_fn_c_try_compile "$LINENO"; then :
5416 if ac_fn_c_try_compile "$LINENO"
5417 then :
45925418 ac_cv_prog_cc_g=yes
45935419 fi
4594 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
4595 fi
4596 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
4597 fi
4598 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
5420 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
5421 fi
5422 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
5423 fi
5424 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
45995425 ac_c_werror_flag=$ac_save_c_werror_flag
46005426 fi
4601 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
4602 $as_echo "$ac_cv_prog_cc_g" >&6; }
4603 if test "$ac_test_CFLAGS" = set; then
5427 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
5428 printf "%s\n" "$ac_cv_prog_cc_g" >&6; }
5429 if test $ac_test_CFLAGS; then
46045430 CFLAGS=$ac_save_CFLAGS
46055431 elif test $ac_cv_prog_cc_g = yes; then
46065432 if test "$GCC" = yes; then
46155441 CFLAGS=
46165442 fi
46175443 fi
4618 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
4619 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
4620 if ${ac_cv_prog_cc_c89+:} false; then :
4621 $as_echo_n "(cached) " >&6
4622 else
5444 ac_prog_cc_stdc=no
5445 if test x$ac_prog_cc_stdc = xno
5446 then :
5447 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5
5448 printf %s "checking for $CC option to enable C11 features... " >&6; }
5449 if test ${ac_cv_prog_cc_c11+y}
5450 then :
5451 printf %s "(cached) " >&6
5452 else $as_nop
5453 ac_cv_prog_cc_c11=no
5454 ac_save_CC=$CC
5455 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
5456 /* end confdefs.h. */
5457 $ac_c_conftest_c11_program
5458 _ACEOF
5459 for ac_arg in '' -std=gnu11
5460 do
5461 CC="$ac_save_CC $ac_arg"
5462 if ac_fn_c_try_compile "$LINENO"
5463 then :
5464 ac_cv_prog_cc_c11=$ac_arg
5465 fi
5466 rm -f core conftest.err conftest.$ac_objext conftest.beam
5467 test "x$ac_cv_prog_cc_c11" != "xno" && break
5468 done
5469 rm -f conftest.$ac_ext
5470 CC=$ac_save_CC
5471 fi
5472
5473 if test "x$ac_cv_prog_cc_c11" = xno
5474 then :
5475 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
5476 printf "%s\n" "unsupported" >&6; }
5477 else $as_nop
5478 if test "x$ac_cv_prog_cc_c11" = x
5479 then :
5480 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
5481 printf "%s\n" "none needed" >&6; }
5482 else $as_nop
5483 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5
5484 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; }
5485 CC="$CC $ac_cv_prog_cc_c11"
5486 fi
5487 ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11
5488 ac_prog_cc_stdc=c11
5489 fi
5490 fi
5491 if test x$ac_prog_cc_stdc = xno
5492 then :
5493 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5
5494 printf %s "checking for $CC option to enable C99 features... " >&6; }
5495 if test ${ac_cv_prog_cc_c99+y}
5496 then :
5497 printf %s "(cached) " >&6
5498 else $as_nop
5499 ac_cv_prog_cc_c99=no
5500 ac_save_CC=$CC
5501 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
5502 /* end confdefs.h. */
5503 $ac_c_conftest_c99_program
5504 _ACEOF
5505 for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99=
5506 do
5507 CC="$ac_save_CC $ac_arg"
5508 if ac_fn_c_try_compile "$LINENO"
5509 then :
5510 ac_cv_prog_cc_c99=$ac_arg
5511 fi
5512 rm -f core conftest.err conftest.$ac_objext conftest.beam
5513 test "x$ac_cv_prog_cc_c99" != "xno" && break
5514 done
5515 rm -f conftest.$ac_ext
5516 CC=$ac_save_CC
5517 fi
5518
5519 if test "x$ac_cv_prog_cc_c99" = xno
5520 then :
5521 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
5522 printf "%s\n" "unsupported" >&6; }
5523 else $as_nop
5524 if test "x$ac_cv_prog_cc_c99" = x
5525 then :
5526 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
5527 printf "%s\n" "none needed" >&6; }
5528 else $as_nop
5529 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
5530 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; }
5531 CC="$CC $ac_cv_prog_cc_c99"
5532 fi
5533 ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99
5534 ac_prog_cc_stdc=c99
5535 fi
5536 fi
5537 if test x$ac_prog_cc_stdc = xno
5538 then :
5539 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5
5540 printf %s "checking for $CC option to enable C89 features... " >&6; }
5541 if test ${ac_cv_prog_cc_c89+y}
5542 then :
5543 printf %s "(cached) " >&6
5544 else $as_nop
46235545 ac_cv_prog_cc_c89=no
46245546 ac_save_CC=$CC
46255547 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
46265548 /* end confdefs.h. */
4627 #include <stdarg.h>
4628 #include <stdio.h>
4629 struct stat;
4630 /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
4631 struct buf { int x; };
4632 FILE * (*rcsopen) (struct buf *, struct stat *, int);
4633 static char *e (p, i)
4634 char **p;
4635 int i;
4636 {
4637 return p[i];
4638 }
4639 static char *f (char * (*g) (char **, int), char **p, ...)
4640 {
4641 char *s;
4642 va_list v;
4643 va_start (v,p);
4644 s = g (p, va_arg (v,int));
4645 va_end (v);
4646 return s;
4647 }
4648
4649 /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
4650 function prototypes and stuff, but not '\xHH' hex character constants.
4651 These don't provoke an error unfortunately, instead are silently treated
4652 as 'x'. The following induces an error, until -std is added to get
4653 proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
4654 array size at least. It's necessary to write '\x00'==0 to get something
4655 that's true only with -std. */
4656 int osf4_cc_array ['\x00' == 0 ? 1 : -1];
4657
4658 /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
4659 inside strings and character constants. */
4660 #define FOO(x) 'x'
4661 int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
4662
4663 int test (int i, double x);
4664 struct s1 {int (*f) (int a);};
4665 struct s2 {int (*f) (double a);};
4666 int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
4667 int argc;
4668 char **argv;
4669 int
4670 main ()
4671 {
4672 return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
4673 ;
4674 return 0;
4675 }
5549 $ac_c_conftest_c89_program
46765550 _ACEOF
4677 for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
4678 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
5551 for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
46795552 do
46805553 CC="$ac_save_CC $ac_arg"
4681 if ac_fn_c_try_compile "$LINENO"; then :
5554 if ac_fn_c_try_compile "$LINENO"
5555 then :
46825556 ac_cv_prog_cc_c89=$ac_arg
46835557 fi
4684 rm -f core conftest.err conftest.$ac_objext
5558 rm -f core conftest.err conftest.$ac_objext conftest.beam
46855559 test "x$ac_cv_prog_cc_c89" != "xno" && break
46865560 done
46875561 rm -f conftest.$ac_ext
46885562 CC=$ac_save_CC
4689
4690 fi
4691 # AC_CACHE_VAL
4692 case "x$ac_cv_prog_cc_c89" in
4693 x)
4694 { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
4695 $as_echo "none needed" >&6; } ;;
4696 xno)
4697 { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
4698 $as_echo "unsupported" >&6; } ;;
4699 *)
4700 CC="$CC $ac_cv_prog_cc_c89"
4701 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
4702 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
4703 esac
4704 if test "x$ac_cv_prog_cc_c89" != xno; then :
4705
5563 fi
5564
5565 if test "x$ac_cv_prog_cc_c89" = xno
5566 then :
5567 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
5568 printf "%s\n" "unsupported" >&6; }
5569 else $as_nop
5570 if test "x$ac_cv_prog_cc_c89" = x
5571 then :
5572 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
5573 printf "%s\n" "none needed" >&6; }
5574 else $as_nop
5575 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
5576 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; }
5577 CC="$CC $ac_cv_prog_cc_c89"
5578 fi
5579 ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89
5580 ac_prog_cc_stdc=c89
5581 fi
47065582 fi
47075583
47085584 ac_ext=c
47115587 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
47125588 ac_compiler_gnu=$ac_cv_c_compiler_gnu
47135589
4714 ac_ext=c
5590
5591 ac_ext=c
47155592 ac_cpp='$CPP $CPPFLAGS'
47165593 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
47175594 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
47185595 ac_compiler_gnu=$ac_cv_c_compiler_gnu
4719 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
4720 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
4721 if ${am_cv_prog_cc_c_o+:} false; then :
4722 $as_echo_n "(cached) " >&6
4723 else
5596 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
5597 printf %s "checking whether $CC understands -c and -o together... " >&6; }
5598 if test ${am_cv_prog_cc_c_o+y}
5599 then :
5600 printf %s "(cached) " >&6
5601 else $as_nop
47245602 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
47255603 /* end confdefs.h. */
47265604
47275605 int
4728 main ()
5606 main (void)
47295607 {
47305608
47315609 ;
47535631 rm -f core conftest*
47545632 unset am_i
47555633 fi
4756 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
4757 $as_echo "$am_cv_prog_cc_c_o" >&6; }
5634 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
5635 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; }
47585636 if test "$am_cv_prog_cc_c_o" != yes; then
47595637 # Losing compiler, so override with the script.
47605638 # FIXME: It is wrong to rewrite CC.
47725650
47735651 depcc="$CC" am_compiler_list=
47745652
4775 { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
4776 $as_echo_n "checking dependency style of $depcc... " >&6; }
4777 if ${am_cv_CC_dependencies_compiler_type+:} false; then :
4778 $as_echo_n "(cached) " >&6
4779 else
5653 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
5654 printf %s "checking dependency style of $depcc... " >&6; }
5655 if test ${am_cv_CC_dependencies_compiler_type+y}
5656 then :
5657 printf %s "(cached) " >&6
5658 else $as_nop
47805659 if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
47815660 # We make a subdir and do the tests there. Otherwise we can end up
47825661 # making bogus files that we don't know about and never remove. For
48835762 fi
48845763
48855764 fi
4886 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
4887 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
5765 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
5766 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; }
48885767 CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
48895768
48905769 if
48995778
49005779
49015780
4902 ac_ext=c
4903 ac_cpp='$CPP $CPPFLAGS'
4904 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
4905 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
4906 ac_compiler_gnu=$ac_cv_c_compiler_gnu
4907 { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
4908 $as_echo_n "checking how to run the C preprocessor... " >&6; }
4909 # On Suns, sometimes $CPP names a directory.
4910 if test -n "$CPP" && test -d "$CPP"; then
4911 CPP=
4912 fi
4913 if test -z "$CPP"; then
4914 if ${ac_cv_prog_CPP+:} false; then :
4915 $as_echo_n "(cached) " >&6
4916 else
4917 # Double quotes because CPP needs to be expanded
4918 for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
4919 do
4920 ac_preproc_ok=false
4921 for ac_c_preproc_warn_flag in '' yes
5781 ac_header= ac_cache=
5782 for ac_item in $ac_header_c_list
49225783 do
4923 # Use a header file that comes with gcc, so configuring glibc
4924 # with a fresh cross-compiler works.
4925 # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
4926 # <limits.h> exists even on freestanding compilers.
4927 # On the NeXT, cc -E runs the code through the compiler's parser,
4928 # not just through cpp. "Syntax error" is here to catch this case.
5784 if test $ac_cache; then
5785 ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default"
5786 if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then
5787 printf "%s\n" "#define $ac_item 1" >> confdefs.h
5788 fi
5789 ac_header= ac_cache=
5790 elif test $ac_header; then
5791 ac_cache=$ac_item
5792 else
5793 ac_header=$ac_item
5794 fi
5795 done
5796
5797
5798
5799
5800
5801
5802
5803
5804 if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes
5805 then :
5806
5807 printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h
5808
5809 fi
5810
5811
5812
5813
5814
5815
5816 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
5817 printf %s "checking whether it is safe to define __EXTENSIONS__... " >&6; }
5818 if test ${ac_cv_safe_to_define___extensions__+y}
5819 then :
5820 printf %s "(cached) " >&6
5821 else $as_nop
49295822 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
49305823 /* end confdefs.h. */
4931 #ifdef __STDC__
4932 # include <limits.h>
4933 #else
4934 # include <assert.h>
4935 #endif
4936 Syntax error
4937 _ACEOF
4938 if ac_fn_c_try_cpp "$LINENO"; then :
4939
4940 else
4941 # Broken: fails on valid input.
4942 continue
4943 fi
4944 rm -f conftest.err conftest.i conftest.$ac_ext
4945
4946 # OK, works on sane cases. Now check whether nonexistent headers
4947 # can be detected and how.
4948 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
4949 /* end confdefs.h. */
4950 #include <ac_nonexistent.h>
4951 _ACEOF
4952 if ac_fn_c_try_cpp "$LINENO"; then :
4953 # Broken: success on invalid input.
4954 continue
4955 else
4956 # Passes both tests.
4957 ac_preproc_ok=:
4958 break
4959 fi
4960 rm -f conftest.err conftest.i conftest.$ac_ext
4961
4962 done
4963 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
4964 rm -f conftest.i conftest.err conftest.$ac_ext
4965 if $ac_preproc_ok; then :
4966 break
4967 fi
4968
4969 done
4970 ac_cv_prog_CPP=$CPP
4971
4972 fi
4973 CPP=$ac_cv_prog_CPP
4974 else
4975 ac_cv_prog_CPP=$CPP
4976 fi
4977 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
4978 $as_echo "$CPP" >&6; }
4979 ac_preproc_ok=false
4980 for ac_c_preproc_warn_flag in '' yes
4981 do
4982 # Use a header file that comes with gcc, so configuring glibc
4983 # with a fresh cross-compiler works.
4984 # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
4985 # <limits.h> exists even on freestanding compilers.
4986 # On the NeXT, cc -E runs the code through the compiler's parser,
4987 # not just through cpp. "Syntax error" is here to catch this case.
4988 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
4989 /* end confdefs.h. */
4990 #ifdef __STDC__
4991 # include <limits.h>
4992 #else
4993 # include <assert.h>
4994 #endif
4995 Syntax error
4996 _ACEOF
4997 if ac_fn_c_try_cpp "$LINENO"; then :
4998
4999 else
5000 # Broken: fails on valid input.
5001 continue
5002 fi
5003 rm -f conftest.err conftest.i conftest.$ac_ext
5004
5005 # OK, works on sane cases. Now check whether nonexistent headers
5006 # can be detected and how.
5007 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
5008 /* end confdefs.h. */
5009 #include <ac_nonexistent.h>
5010 _ACEOF
5011 if ac_fn_c_try_cpp "$LINENO"; then :
5012 # Broken: success on invalid input.
5013 continue
5014 else
5015 # Passes both tests.
5016 ac_preproc_ok=:
5017 break
5018 fi
5019 rm -f conftest.err conftest.i conftest.$ac_ext
5020
5021 done
5022 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
5023 rm -f conftest.i conftest.err conftest.$ac_ext
5024 if $ac_preproc_ok; then :
5025
5026 else
5027 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
5028 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
5029 as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
5030 See \`config.log' for more details" "$LINENO" 5; }
5031 fi
5032
5033 ac_ext=c
5034 ac_cpp='$CPP $CPPFLAGS'
5035 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
5036 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
5037 ac_compiler_gnu=$ac_cv_c_compiler_gnu
5038
5039
5040 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
5041 $as_echo_n "checking for grep that handles long lines and -e... " >&6; }
5042 if ${ac_cv_path_GREP+:} false; then :
5043 $as_echo_n "(cached) " >&6
5044 else
5045 if test -z "$GREP"; then
5046 ac_path_GREP_found=false
5047 # Loop through the user's path and test for each of PROGNAME-LIST
5048 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
5049 for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
5050 do
5051 IFS=$as_save_IFS
5052 test -z "$as_dir" && as_dir=.
5053 for ac_prog in grep ggrep; do
5054 for ac_exec_ext in '' $ac_executable_extensions; do
5055 ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
5056 as_fn_executable_p "$ac_path_GREP" || continue
5057 # Check for GNU ac_path_GREP and select it if it is found.
5058 # Check for GNU $ac_path_GREP
5059 case `"$ac_path_GREP" --version 2>&1` in
5060 *GNU*)
5061 ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
5062 *)
5063 ac_count=0
5064 $as_echo_n 0123456789 >"conftest.in"
5065 while :
5066 do
5067 cat "conftest.in" "conftest.in" >"conftest.tmp"
5068 mv "conftest.tmp" "conftest.in"
5069 cp "conftest.in" "conftest.nl"
5070 $as_echo 'GREP' >> "conftest.nl"
5071 "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
5072 diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
5073 as_fn_arith $ac_count + 1 && ac_count=$as_val
5074 if test $ac_count -gt ${ac_path_GREP_max-0}; then
5075 # Best one so far, save it but keep looking for a better one
5076 ac_cv_path_GREP="$ac_path_GREP"
5077 ac_path_GREP_max=$ac_count
5078 fi
5079 # 10*(2^10) chars as input seems more than enough
5080 test $ac_count -gt 10 && break
5081 done
5082 rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
5083 esac
5084
5085 $ac_path_GREP_found && break 3
5086 done
5087 done
5088 done
5089 IFS=$as_save_IFS
5090 if test -z "$ac_cv_path_GREP"; then
5091 as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
5092 fi
5093 else
5094 ac_cv_path_GREP=$GREP
5095 fi
5096
5097 fi
5098 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
5099 $as_echo "$ac_cv_path_GREP" >&6; }
5100 GREP="$ac_cv_path_GREP"
5101
5102
5103 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
5104 $as_echo_n "checking for egrep... " >&6; }
5105 if ${ac_cv_path_EGREP+:} false; then :
5106 $as_echo_n "(cached) " >&6
5107 else
5108 if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
5109 then ac_cv_path_EGREP="$GREP -E"
5110 else
5111 if test -z "$EGREP"; then
5112 ac_path_EGREP_found=false
5113 # Loop through the user's path and test for each of PROGNAME-LIST
5114 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
5115 for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
5116 do
5117 IFS=$as_save_IFS
5118 test -z "$as_dir" && as_dir=.
5119 for ac_prog in egrep; do
5120 for ac_exec_ext in '' $ac_executable_extensions; do
5121 ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
5122 as_fn_executable_p "$ac_path_EGREP" || continue
5123 # Check for GNU ac_path_EGREP and select it if it is found.
5124 # Check for GNU $ac_path_EGREP
5125 case `"$ac_path_EGREP" --version 2>&1` in
5126 *GNU*)
5127 ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
5128 *)
5129 ac_count=0
5130 $as_echo_n 0123456789 >"conftest.in"
5131 while :
5132 do
5133 cat "conftest.in" "conftest.in" >"conftest.tmp"
5134 mv "conftest.tmp" "conftest.in"
5135 cp "conftest.in" "conftest.nl"
5136 $as_echo 'EGREP' >> "conftest.nl"
5137 "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
5138 diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
5139 as_fn_arith $ac_count + 1 && ac_count=$as_val
5140 if test $ac_count -gt ${ac_path_EGREP_max-0}; then
5141 # Best one so far, save it but keep looking for a better one
5142 ac_cv_path_EGREP="$ac_path_EGREP"
5143 ac_path_EGREP_max=$ac_count
5144 fi
5145 # 10*(2^10) chars as input seems more than enough
5146 test $ac_count -gt 10 && break
5147 done
5148 rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
5149 esac
5150
5151 $ac_path_EGREP_found && break 3
5152 done
5153 done
5154 done
5155 IFS=$as_save_IFS
5156 if test -z "$ac_cv_path_EGREP"; then
5157 as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
5158 fi
5159 else
5160 ac_cv_path_EGREP=$EGREP
5161 fi
5162
5163 fi
5164 fi
5165 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
5166 $as_echo "$ac_cv_path_EGREP" >&6; }
5167 EGREP="$ac_cv_path_EGREP"
5168
5169
5170 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
5171 $as_echo_n "checking for ANSI C header files... " >&6; }
5172 if ${ac_cv_header_stdc+:} false; then :
5173 $as_echo_n "(cached) " >&6
5174 else
5175 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
5176 /* end confdefs.h. */
5177 #include <stdlib.h>
5178 #include <stdarg.h>
5179 #include <string.h>
5180 #include <float.h>
5181
5824
5825 # define __EXTENSIONS__ 1
5826 $ac_includes_default
51825827 int
5183 main ()
5828 main (void)
51845829 {
51855830
51865831 ;
51875832 return 0;
51885833 }
51895834 _ACEOF
5190 if ac_fn_c_try_compile "$LINENO"; then :
5191 ac_cv_header_stdc=yes
5192 else
5193 ac_cv_header_stdc=no
5194 fi
5195 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
5196
5197 if test $ac_cv_header_stdc = yes; then
5198 # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
5835 if ac_fn_c_try_compile "$LINENO"
5836 then :
5837 ac_cv_safe_to_define___extensions__=yes
5838 else $as_nop
5839 ac_cv_safe_to_define___extensions__=no
5840 fi
5841 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
5842 fi
5843 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
5844 printf "%s\n" "$ac_cv_safe_to_define___extensions__" >&6; }
5845
5846 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5
5847 printf %s "checking whether _XOPEN_SOURCE should be defined... " >&6; }
5848 if test ${ac_cv_should_define__xopen_source+y}
5849 then :
5850 printf %s "(cached) " >&6
5851 else $as_nop
5852 ac_cv_should_define__xopen_source=no
5853 if test $ac_cv_header_wchar_h = yes
5854 then :
51995855 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
52005856 /* end confdefs.h. */
5201 #include <string.h>
5202
5203 _ACEOF
5204 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
5205 $EGREP "memchr" >/dev/null 2>&1; then :
5206
5207 else
5208 ac_cv_header_stdc=no
5209 fi
5210 rm -f conftest*
5211
5212 fi
5213
5214 if test $ac_cv_header_stdc = yes; then
5215 # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
5216 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
5217 /* end confdefs.h. */
5218 #include <stdlib.h>
5219
5220 _ACEOF
5221 if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
5222 $EGREP "free" >/dev/null 2>&1; then :
5223
5224 else
5225 ac_cv_header_stdc=no
5226 fi
5227 rm -f conftest*
5228
5229 fi
5230
5231 if test $ac_cv_header_stdc = yes; then
5232 # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
5233 if test "$cross_compiling" = yes; then :
5234 :
5235 else
5236 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
5237 /* end confdefs.h. */
5238 #include <ctype.h>
5239 #include <stdlib.h>
5240 #if ((' ' & 0x0FF) == 0x020)
5241 # define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
5242 # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
5243 #else
5244 # define ISLOWER(c) \
5245 (('a' <= (c) && (c) <= 'i') \
5246 || ('j' <= (c) && (c) <= 'r') \
5247 || ('s' <= (c) && (c) <= 'z'))
5248 # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
5249 #endif
5250
5251 #define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
5857
5858 #include <wchar.h>
5859 mbstate_t x;
52525860 int
5253 main ()
5254 {
5255 int i;
5256 for (i = 0; i < 256; i++)
5257 if (XOR (islower (i), ISLOWER (i))
5258 || toupper (i) != TOUPPER (i))
5259 return 2;
5260 return 0;
5261 }
5262 _ACEOF
5263 if ac_fn_c_try_run "$LINENO"; then :
5264
5265 else
5266 ac_cv_header_stdc=no
5267 fi
5268 rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
5269 conftest.$ac_objext conftest.beam conftest.$ac_ext
5270 fi
5271
5272 fi
5273 fi
5274 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
5275 $as_echo "$ac_cv_header_stdc" >&6; }
5276 if test $ac_cv_header_stdc = yes; then
5277
5278 $as_echo "#define STDC_HEADERS 1" >>confdefs.h
5279
5280 fi
5281
5282 # On IRIX 5.3, sys/types and inttypes.h are conflicting.
5283 for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
5284 inttypes.h stdint.h unistd.h
5285 do :
5286 as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
5287 ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
5288 "
5289 if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
5290 cat >>confdefs.h <<_ACEOF
5291 #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
5292 _ACEOF
5293
5294 fi
5295
5296 done
5297
5298
5299
5300 ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
5301 if test "x$ac_cv_header_minix_config_h" = xyes; then :
5302 MINIX=yes
5303 else
5304 MINIX=
5305 fi
5306
5307
5308 if test "$MINIX" = yes; then
5309
5310 $as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
5311
5312
5313 $as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
5314
5315
5316 $as_echo "#define _MINIX 1" >>confdefs.h
5317
5318 fi
5319
5320
5321 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
5322 $as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
5323 if ${ac_cv_safe_to_define___extensions__+:} false; then :
5324 $as_echo_n "(cached) " >&6
5325 else
5326 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
5327 /* end confdefs.h. */
5328
5329 # define __EXTENSIONS__ 1
5330 $ac_includes_default
5331 int
5332 main ()
5861 main (void)
53335862 {
53345863
53355864 ;
53365865 return 0;
53375866 }
53385867 _ACEOF
5339 if ac_fn_c_try_compile "$LINENO"; then :
5340 ac_cv_safe_to_define___extensions__=yes
5341 else
5342 ac_cv_safe_to_define___extensions__=no
5343 fi
5344 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
5345 fi
5346 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
5347 $as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
5348 test $ac_cv_safe_to_define___extensions__ = yes &&
5349 $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
5350
5351 $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
5352
5353 $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
5354
5355 $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
5356
5357 $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
5358
5868 if ac_fn_c_try_compile "$LINENO"
5869 then :
5870
5871 else $as_nop
5872 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
5873 /* end confdefs.h. */
5874
5875 #define _XOPEN_SOURCE 500
5876 #include <wchar.h>
5877 mbstate_t x;
5878 int
5879 main (void)
5880 {
5881
5882 ;
5883 return 0;
5884 }
5885 _ACEOF
5886 if ac_fn_c_try_compile "$LINENO"
5887 then :
5888 ac_cv_should_define__xopen_source=yes
5889 fi
5890 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
5891 fi
5892 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
5893 fi
5894 fi
5895 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5
5896 printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; }
5897
5898 printf "%s\n" "#define _ALL_SOURCE 1" >>confdefs.h
5899
5900 printf "%s\n" "#define _DARWIN_C_SOURCE 1" >>confdefs.h
5901
5902 printf "%s\n" "#define _GNU_SOURCE 1" >>confdefs.h
5903
5904 printf "%s\n" "#define _HPUX_ALT_XOPEN_SOCKET_API 1" >>confdefs.h
5905
5906 printf "%s\n" "#define _NETBSD_SOURCE 1" >>confdefs.h
5907
5908 printf "%s\n" "#define _OPENBSD_SOURCE 1" >>confdefs.h
5909
5910 printf "%s\n" "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
5911
5912 printf "%s\n" "#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1" >>confdefs.h
5913
5914 printf "%s\n" "#define __STDC_WANT_IEC_60559_BFP_EXT__ 1" >>confdefs.h
5915
5916 printf "%s\n" "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h
5917
5918 printf "%s\n" "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h
5919
5920 printf "%s\n" "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h
5921
5922 printf "%s\n" "#define __STDC_WANT_LIB_EXT2__ 1" >>confdefs.h
5923
5924 printf "%s\n" "#define __STDC_WANT_MATH_SPEC_FUNCS__ 1" >>confdefs.h
5925
5926 printf "%s\n" "#define _TANDEM_SOURCE 1" >>confdefs.h
5927
5928 if test $ac_cv_header_minix_config_h = yes
5929 then :
5930 MINIX=yes
5931 printf "%s\n" "#define _MINIX 1" >>confdefs.h
5932
5933 printf "%s\n" "#define _POSIX_SOURCE 1" >>confdefs.h
5934
5935 printf "%s\n" "#define _POSIX_1_SOURCE 2" >>confdefs.h
5936
5937 else $as_nop
5938 MINIX=
5939 fi
5940 if test $ac_cv_safe_to_define___extensions__ = yes
5941 then :
5942 printf "%s\n" "#define __EXTENSIONS__ 1" >>confdefs.h
5943
5944 fi
5945 if test $ac_cv_should_define__xopen_source = yes
5946 then :
5947 printf "%s\n" "#define _XOPEN_SOURCE 500" >>confdefs.h
5948
5949 fi
53595950
53605951
53615952 ####################################################################
53765967 # Setup libtool, but disable F77, Java and Windows Resource
53775968 # Compiler support -- we don't need that stuff.
53785969 # Check whether --enable-shared was given.
5379 if test "${enable_shared+set}" = set; then :
5970 if test ${enable_shared+y}
5971 then :
53805972 enableval=$enable_shared; p=${PACKAGE-default}
53815973 case $enableval in
53825974 yes) enable_shared=yes ;;
53945986 IFS=$lt_save_ifs
53955987 ;;
53965988 esac
5397 else
5989 else $as_nop
53985990 enable_shared=yes
53995991 fi
54005992
54075999
54086000
54096001 # Check whether --enable-static was given.
5410 if test "${enable_static+set}" = set; then :
6002 if test ${enable_static+y}
6003 then :
54116004 enableval=$enable_static; p=${PACKAGE-default}
54126005 case $enableval in
54136006 yes) enable_static=yes ;;
54256018 IFS=$lt_save_ifs
54266019 ;;
54276020 esac
5428 else
6021 else $as_nop
54296022 enable_static=no
54306023 fi
54316024
54406033
54416034 # This did not exist pre AM 1.11.x (where x is somewhere >0 and <3),
54426035 # but it is necessary in AM 1.12.x.
5443 if test -n "$ac_tool_prefix"; then
6036
6037 if test -n "$ac_tool_prefix"; then
54446038 for ac_prog in ar lib "link -lib"
54456039 do
54466040 # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
54476041 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
5448 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
5449 $as_echo_n "checking for $ac_word... " >&6; }
5450 if ${ac_cv_prog_AR+:} false; then :
5451 $as_echo_n "(cached) " >&6
5452 else
6042 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
6043 printf %s "checking for $ac_word... " >&6; }
6044 if test ${ac_cv_prog_AR+y}
6045 then :
6046 printf %s "(cached) " >&6
6047 else $as_nop
54536048 if test -n "$AR"; then
54546049 ac_cv_prog_AR="$AR" # Let the user override the test.
54556050 else
54576052 for as_dir in $PATH
54586053 do
54596054 IFS=$as_save_IFS
5460 test -z "$as_dir" && as_dir=.
6055 case $as_dir in #(((
6056 '') as_dir=./ ;;
6057 */) ;;
6058 *) as_dir=$as_dir/ ;;
6059 esac
54616060 for ac_exec_ext in '' $ac_executable_extensions; do
5462 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
6061 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
54636062 ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
5464 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
6063 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
54656064 break 2
54666065 fi
54676066 done
54726071 fi
54736072 AR=$ac_cv_prog_AR
54746073 if test -n "$AR"; then
5475 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
5476 $as_echo "$AR" >&6; }
6074 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
6075 printf "%s\n" "$AR" >&6; }
54776076 else
5478 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
5479 $as_echo "no" >&6; }
6077 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
6078 printf "%s\n" "no" >&6; }
54806079 fi
54816080
54826081
54896088 do
54906089 # Extract the first word of "$ac_prog", so it can be a program name with args.
54916090 set dummy $ac_prog; ac_word=$2
5492 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
5493 $as_echo_n "checking for $ac_word... " >&6; }
5494 if ${ac_cv_prog_ac_ct_AR+:} false; then :
5495 $as_echo_n "(cached) " >&6
5496 else
6091 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
6092 printf %s "checking for $ac_word... " >&6; }
6093 if test ${ac_cv_prog_ac_ct_AR+y}
6094 then :
6095 printf %s "(cached) " >&6
6096 else $as_nop
54976097 if test -n "$ac_ct_AR"; then
54986098 ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
54996099 else
55016101 for as_dir in $PATH
55026102 do
55036103 IFS=$as_save_IFS
5504 test -z "$as_dir" && as_dir=.
6104 case $as_dir in #(((
6105 '') as_dir=./ ;;
6106 */) ;;
6107 *) as_dir=$as_dir/ ;;
6108 esac
55056109 for ac_exec_ext in '' $ac_executable_extensions; do
5506 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
6110 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
55076111 ac_cv_prog_ac_ct_AR="$ac_prog"
5508 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
6112 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
55096113 break 2
55106114 fi
55116115 done
55166120 fi
55176121 ac_ct_AR=$ac_cv_prog_ac_ct_AR
55186122 if test -n "$ac_ct_AR"; then
5519 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
5520 $as_echo "$ac_ct_AR" >&6; }
6123 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
6124 printf "%s\n" "$ac_ct_AR" >&6; }
55216125 else
5522 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
5523 $as_echo "no" >&6; }
6126 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
6127 printf "%s\n" "no" >&6; }
55246128 fi
55256129
55266130
55326136 else
55336137 case $cross_compiling:$ac_tool_warned in
55346138 yes:)
5535 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
5536 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
6139 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
6140 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
55376141 ac_tool_warned=yes ;;
55386142 esac
55396143 AR=$ac_ct_AR
55426146
55436147 : ${AR=ar}
55446148
5545 { $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5
5546 $as_echo_n "checking the archiver ($AR) interface... " >&6; }
5547 if ${am_cv_ar_interface+:} false; then :
5548 $as_echo_n "(cached) " >&6
5549 else
6149 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5
6150 printf %s "checking the archiver ($AR) interface... " >&6; }
6151 if test ${am_cv_ar_interface+y}
6152 then :
6153 printf %s "(cached) " >&6
6154 else $as_nop
55506155 ac_ext=c
55516156 ac_cpp='$CPP $CPPFLAGS'
55526157 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
55586163 /* end confdefs.h. */
55596164 int some_variable = 0;
55606165 _ACEOF
5561 if ac_fn_c_try_compile "$LINENO"; then :
6166 if ac_fn_c_try_compile "$LINENO"
6167 then :
55626168 am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5'
55636169 { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5
55646170 (eval $am_ar_try) 2>&5
55656171 ac_status=$?
5566 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
6172 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
55676173 test $ac_status = 0; }
55686174 if test "$ac_status" -eq 0; then
55696175 am_cv_ar_interface=ar
55726178 { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5
55736179 (eval $am_ar_try) 2>&5
55746180 ac_status=$?
5575 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
6181 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
55766182 test $ac_status = 0; }
55776183 if test "$ac_status" -eq 0; then
55786184 am_cv_ar_interface=lib
55836189 rm -f conftest.lib libconftest.a
55846190
55856191 fi
5586 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
6192 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
55876193 ac_ext=c
55886194 ac_cpp='$CPP $CPPFLAGS'
55896195 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
55916197 ac_compiler_gnu=$ac_cv_c_compiler_gnu
55926198
55936199 fi
5594 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5
5595 $as_echo "$am_cv_ar_interface" >&6; }
6200 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5
6201 printf "%s\n" "$am_cv_ar_interface" >&6; }
55966202
55976203 case $am_cv_ar_interface in
55986204 ar)
56146220
56156221 case `pwd` in
56166222 *\ * | *\ *)
5617 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
5618 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
6223 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
6224 printf "%s\n" "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
56196225 esac
56206226
56216227
56226228
56236229 macro_version='2.4.6'
56246230 macro_revision='2.4.6'
6231
56256232
56266233
56276234
56586265 ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO
56596266 ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO
56606267
5661 { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
5662 $as_echo_n "checking how to print strings... " >&6; }
6268 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5
6269 printf %s "checking how to print strings... " >&6; }
56636270 # Test print first, because it will be a builtin if present.
56646271 if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \
56656272 test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then
56856292 }
56866293
56876294 case $ECHO in
5688 printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5
5689 $as_echo "printf" >&6; } ;;
5690 print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
5691 $as_echo "print -r" >&6; } ;;
5692 *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5
5693 $as_echo "cat" >&6; } ;;
6295 printf*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: printf" >&5
6296 printf "%s\n" "printf" >&6; } ;;
6297 print*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: print -r" >&5
6298 printf "%s\n" "print -r" >&6; } ;;
6299 *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cat" >&5
6300 printf "%s\n" "cat" >&6; } ;;
56946301 esac
56956302
56966303
57066313
57076314
57086315
5709 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
5710 $as_echo_n "checking for a sed that does not truncate output... " >&6; }
5711 if ${ac_cv_path_SED+:} false; then :
5712 $as_echo_n "(cached) " >&6
5713 else
6316 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
6317 printf %s "checking for a sed that does not truncate output... " >&6; }
6318 if test ${ac_cv_path_SED+y}
6319 then :
6320 printf %s "(cached) " >&6
6321 else $as_nop
57146322 ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
57156323 for ac_i in 1 2 3 4 5 6 7; do
57166324 ac_script="$ac_script$as_nl$ac_script"
57246332 for as_dir in $PATH
57256333 do
57266334 IFS=$as_save_IFS
5727 test -z "$as_dir" && as_dir=.
5728 for ac_prog in sed gsed; do
6335 case $as_dir in #(((
6336 '') as_dir=./ ;;
6337 */) ;;
6338 *) as_dir=$as_dir/ ;;
6339 esac
6340 for ac_prog in sed gsed
6341 do
57296342 for ac_exec_ext in '' $ac_executable_extensions; do
5730 ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
6343 ac_path_SED="$as_dir$ac_prog$ac_exec_ext"
57316344 as_fn_executable_p "$ac_path_SED" || continue
57326345 # Check for GNU ac_path_SED and select it if it is found.
57336346 # Check for GNU $ac_path_SED
57366349 ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
57376350 *)
57386351 ac_count=0
5739 $as_echo_n 0123456789 >"conftest.in"
6352 printf %s 0123456789 >"conftest.in"
57406353 while :
57416354 do
57426355 cat "conftest.in" "conftest.in" >"conftest.tmp"
57436356 mv "conftest.tmp" "conftest.in"
57446357 cp "conftest.in" "conftest.nl"
5745 $as_echo '' >> "conftest.nl"
6358 printf "%s\n" '' >> "conftest.nl"
57466359 "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
57476360 diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
57486361 as_fn_arith $ac_count + 1 && ac_count=$as_val
57706383 fi
57716384
57726385 fi
5773 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
5774 $as_echo "$ac_cv_path_SED" >&6; }
6386 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
6387 printf "%s\n" "$ac_cv_path_SED" >&6; }
57756388 SED="$ac_cv_path_SED"
57766389 rm -f conftest.sed
57776390
57886401
57896402
57906403
5791 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
5792 $as_echo_n "checking for fgrep... " >&6; }
5793 if ${ac_cv_path_FGREP+:} false; then :
5794 $as_echo_n "(cached) " >&6
6404 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
6405 printf %s "checking for grep that handles long lines and -e... " >&6; }
6406 if test ${ac_cv_path_GREP+y}
6407 then :
6408 printf %s "(cached) " >&6
6409 else $as_nop
6410 if test -z "$GREP"; then
6411 ac_path_GREP_found=false
6412 # Loop through the user's path and test for each of PROGNAME-LIST
6413 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
6414 for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
6415 do
6416 IFS=$as_save_IFS
6417 case $as_dir in #(((
6418 '') as_dir=./ ;;
6419 */) ;;
6420 *) as_dir=$as_dir/ ;;
6421 esac
6422 for ac_prog in grep ggrep
6423 do
6424 for ac_exec_ext in '' $ac_executable_extensions; do
6425 ac_path_GREP="$as_dir$ac_prog$ac_exec_ext"
6426 as_fn_executable_p "$ac_path_GREP" || continue
6427 # Check for GNU ac_path_GREP and select it if it is found.
6428 # Check for GNU $ac_path_GREP
6429 case `"$ac_path_GREP" --version 2>&1` in
6430 *GNU*)
6431 ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
6432 *)
6433 ac_count=0
6434 printf %s 0123456789 >"conftest.in"
6435 while :
6436 do
6437 cat "conftest.in" "conftest.in" >"conftest.tmp"
6438 mv "conftest.tmp" "conftest.in"
6439 cp "conftest.in" "conftest.nl"
6440 printf "%s\n" 'GREP' >> "conftest.nl"
6441 "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
6442 diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
6443 as_fn_arith $ac_count + 1 && ac_count=$as_val
6444 if test $ac_count -gt ${ac_path_GREP_max-0}; then
6445 # Best one so far, save it but keep looking for a better one
6446 ac_cv_path_GREP="$ac_path_GREP"
6447 ac_path_GREP_max=$ac_count
6448 fi
6449 # 10*(2^10) chars as input seems more than enough
6450 test $ac_count -gt 10 && break
6451 done
6452 rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
6453 esac
6454
6455 $ac_path_GREP_found && break 3
6456 done
6457 done
6458 done
6459 IFS=$as_save_IFS
6460 if test -z "$ac_cv_path_GREP"; then
6461 as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
6462 fi
57956463 else
6464 ac_cv_path_GREP=$GREP
6465 fi
6466
6467 fi
6468 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
6469 printf "%s\n" "$ac_cv_path_GREP" >&6; }
6470 GREP="$ac_cv_path_GREP"
6471
6472
6473 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
6474 printf %s "checking for egrep... " >&6; }
6475 if test ${ac_cv_path_EGREP+y}
6476 then :
6477 printf %s "(cached) " >&6
6478 else $as_nop
6479 if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
6480 then ac_cv_path_EGREP="$GREP -E"
6481 else
6482 if test -z "$EGREP"; then
6483 ac_path_EGREP_found=false
6484 # Loop through the user's path and test for each of PROGNAME-LIST
6485 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
6486 for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
6487 do
6488 IFS=$as_save_IFS
6489 case $as_dir in #(((
6490 '') as_dir=./ ;;
6491 */) ;;
6492 *) as_dir=$as_dir/ ;;
6493 esac
6494 for ac_prog in egrep
6495 do
6496 for ac_exec_ext in '' $ac_executable_extensions; do
6497 ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext"
6498 as_fn_executable_p "$ac_path_EGREP" || continue
6499 # Check for GNU ac_path_EGREP and select it if it is found.
6500 # Check for GNU $ac_path_EGREP
6501 case `"$ac_path_EGREP" --version 2>&1` in
6502 *GNU*)
6503 ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
6504 *)
6505 ac_count=0
6506 printf %s 0123456789 >"conftest.in"
6507 while :
6508 do
6509 cat "conftest.in" "conftest.in" >"conftest.tmp"
6510 mv "conftest.tmp" "conftest.in"
6511 cp "conftest.in" "conftest.nl"
6512 printf "%s\n" 'EGREP' >> "conftest.nl"
6513 "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
6514 diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
6515 as_fn_arith $ac_count + 1 && ac_count=$as_val
6516 if test $ac_count -gt ${ac_path_EGREP_max-0}; then
6517 # Best one so far, save it but keep looking for a better one
6518 ac_cv_path_EGREP="$ac_path_EGREP"
6519 ac_path_EGREP_max=$ac_count
6520 fi
6521 # 10*(2^10) chars as input seems more than enough
6522 test $ac_count -gt 10 && break
6523 done
6524 rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
6525 esac
6526
6527 $ac_path_EGREP_found && break 3
6528 done
6529 done
6530 done
6531 IFS=$as_save_IFS
6532 if test -z "$ac_cv_path_EGREP"; then
6533 as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
6534 fi
6535 else
6536 ac_cv_path_EGREP=$EGREP
6537 fi
6538
6539 fi
6540 fi
6541 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
6542 printf "%s\n" "$ac_cv_path_EGREP" >&6; }
6543 EGREP="$ac_cv_path_EGREP"
6544
6545
6546 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
6547 printf %s "checking for fgrep... " >&6; }
6548 if test ${ac_cv_path_FGREP+y}
6549 then :
6550 printf %s "(cached) " >&6
6551 else $as_nop
57966552 if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
57976553 then ac_cv_path_FGREP="$GREP -F"
57986554 else
58036559 for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
58046560 do
58056561 IFS=$as_save_IFS
5806 test -z "$as_dir" && as_dir=.
5807 for ac_prog in fgrep; do
6562 case $as_dir in #(((
6563 '') as_dir=./ ;;
6564 */) ;;
6565 *) as_dir=$as_dir/ ;;
6566 esac
6567 for ac_prog in fgrep
6568 do
58086569 for ac_exec_ext in '' $ac_executable_extensions; do
5809 ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
6570 ac_path_FGREP="$as_dir$ac_prog$ac_exec_ext"
58106571 as_fn_executable_p "$ac_path_FGREP" || continue
58116572 # Check for GNU ac_path_FGREP and select it if it is found.
58126573 # Check for GNU $ac_path_FGREP
58156576 ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
58166577 *)
58176578 ac_count=0
5818 $as_echo_n 0123456789 >"conftest.in"
6579 printf %s 0123456789 >"conftest.in"
58196580 while :
58206581 do
58216582 cat "conftest.in" "conftest.in" >"conftest.tmp"
58226583 mv "conftest.tmp" "conftest.in"
58236584 cp "conftest.in" "conftest.nl"
5824 $as_echo 'FGREP' >> "conftest.nl"
6585 printf "%s\n" 'FGREP' >> "conftest.nl"
58256586 "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
58266587 diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
58276588 as_fn_arith $ac_count + 1 && ac_count=$as_val
58506611
58516612 fi
58526613 fi
5853 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
5854 $as_echo "$ac_cv_path_FGREP" >&6; }
6614 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
6615 printf "%s\n" "$ac_cv_path_FGREP" >&6; }
58556616 FGREP="$ac_cv_path_FGREP"
58566617
58576618
58766637
58776638
58786639 # Check whether --with-gnu-ld was given.
5879 if test "${with_gnu_ld+set}" = set; then :
6640 if test ${with_gnu_ld+y}
6641 then :
58806642 withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes
5881 else
6643 else $as_nop
58826644 with_gnu_ld=no
58836645 fi
58846646
58856647 ac_prog=ld
58866648 if test yes = "$GCC"; then
58876649 # Check if gcc -print-prog-name=ld gives a path.
5888 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
5889 $as_echo_n "checking for ld used by $CC... " >&6; }
6650 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
6651 printf %s "checking for ld used by $CC... " >&6; }
58906652 case $host in
58916653 *-*-mingw*)
58926654 # gcc leaves a trailing carriage return, which upsets mingw
59156677 ;;
59166678 esac
59176679 elif test yes = "$with_gnu_ld"; then
5918 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
5919 $as_echo_n "checking for GNU ld... " >&6; }
6680 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
6681 printf %s "checking for GNU ld... " >&6; }
59206682 else
5921 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
5922 $as_echo_n "checking for non-GNU ld... " >&6; }
5923 fi
5924 if ${lt_cv_path_LD+:} false; then :
5925 $as_echo_n "(cached) " >&6
5926 else
6683 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
6684 printf %s "checking for non-GNU ld... " >&6; }
6685 fi
6686 if test ${lt_cv_path_LD+y}
6687 then :
6688 printf %s "(cached) " >&6
6689 else $as_nop
59276690 if test -z "$LD"; then
59286691 lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
59296692 for ac_dir in $PATH; do
59526715
59536716 LD=$lt_cv_path_LD
59546717 if test -n "$LD"; then
5955 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
5956 $as_echo "$LD" >&6; }
6718 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
6719 printf "%s\n" "$LD" >&6; }
59576720 else
5958 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
5959 $as_echo "no" >&6; }
6721 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
6722 printf "%s\n" "no" >&6; }
59606723 fi
59616724 test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
5962 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
5963 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
5964 if ${lt_cv_prog_gnu_ld+:} false; then :
5965 $as_echo_n "(cached) " >&6
5966 else
6725 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
6726 printf %s "checking if the linker ($LD) is GNU ld... " >&6; }
6727 if test ${lt_cv_prog_gnu_ld+y}
6728 then :
6729 printf %s "(cached) " >&6
6730 else $as_nop
59676731 # I'd rather use --version here, but apparently some GNU lds only accept -v.
59686732 case `$LD -v 2>&1 </dev/null` in
59696733 *GNU* | *'with BFD'*)
59746738 ;;
59756739 esac
59766740 fi
5977 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
5978 $as_echo "$lt_cv_prog_gnu_ld" >&6; }
6741 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
6742 printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; }
59796743 with_gnu_ld=$lt_cv_prog_gnu_ld
59806744
59816745
59866750
59876751
59886752
5989 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
5990 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
5991 if ${lt_cv_path_NM+:} false; then :
5992 $as_echo_n "(cached) " >&6
5993 else
6753 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
6754 printf %s "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
6755 if test ${lt_cv_path_NM+y}
6756 then :
6757 printf %s "(cached) " >&6
6758 else $as_nop
59946759 if test -n "$NM"; then
59956760 # Let the user override the test.
59966761 lt_cv_path_NM=$NM
60406805 : ${lt_cv_path_NM=no}
60416806 fi
60426807 fi
6043 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
6044 $as_echo "$lt_cv_path_NM" >&6; }
6808 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
6809 printf "%s\n" "$lt_cv_path_NM" >&6; }
60456810 if test no != "$lt_cv_path_NM"; then
60466811 NM=$lt_cv_path_NM
60476812 else
60546819 do
60556820 # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
60566821 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
6057 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
6058 $as_echo_n "checking for $ac_word... " >&6; }
6059 if ${ac_cv_prog_DUMPBIN+:} false; then :
6060 $as_echo_n "(cached) " >&6
6061 else
6822 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
6823 printf %s "checking for $ac_word... " >&6; }
6824 if test ${ac_cv_prog_DUMPBIN+y}
6825 then :
6826 printf %s "(cached) " >&6
6827 else $as_nop
60626828 if test -n "$DUMPBIN"; then
60636829 ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
60646830 else
60666832 for as_dir in $PATH
60676833 do
60686834 IFS=$as_save_IFS
6069 test -z "$as_dir" && as_dir=.
6835 case $as_dir in #(((
6836 '') as_dir=./ ;;
6837 */) ;;
6838 *) as_dir=$as_dir/ ;;
6839 esac
60706840 for ac_exec_ext in '' $ac_executable_extensions; do
6071 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
6841 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
60726842 ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
6073 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
6843 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
60746844 break 2
60756845 fi
60766846 done
60816851 fi
60826852 DUMPBIN=$ac_cv_prog_DUMPBIN
60836853 if test -n "$DUMPBIN"; then
6084 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
6085 $as_echo "$DUMPBIN" >&6; }
6854 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
6855 printf "%s\n" "$DUMPBIN" >&6; }
60866856 else
6087 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
6088 $as_echo "no" >&6; }
6857 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
6858 printf "%s\n" "no" >&6; }
60896859 fi
60906860
60916861
60986868 do
60996869 # Extract the first word of "$ac_prog", so it can be a program name with args.
61006870 set dummy $ac_prog; ac_word=$2
6101 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
6102 $as_echo_n "checking for $ac_word... " >&6; }
6103 if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then :
6104 $as_echo_n "(cached) " >&6
6105 else
6871 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
6872 printf %s "checking for $ac_word... " >&6; }
6873 if test ${ac_cv_prog_ac_ct_DUMPBIN+y}
6874 then :
6875 printf %s "(cached) " >&6
6876 else $as_nop
61066877 if test -n "$ac_ct_DUMPBIN"; then
61076878 ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
61086879 else
61106881 for as_dir in $PATH
61116882 do
61126883 IFS=$as_save_IFS
6113 test -z "$as_dir" && as_dir=.
6884 case $as_dir in #(((
6885 '') as_dir=./ ;;
6886 */) ;;
6887 *) as_dir=$as_dir/ ;;
6888 esac
61146889 for ac_exec_ext in '' $ac_executable_extensions; do
6115 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
6890 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
61166891 ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
6117 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
6892 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
61186893 break 2
61196894 fi
61206895 done
61256900 fi
61266901 ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
61276902 if test -n "$ac_ct_DUMPBIN"; then
6128 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
6129 $as_echo "$ac_ct_DUMPBIN" >&6; }
6903 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
6904 printf "%s\n" "$ac_ct_DUMPBIN" >&6; }
61306905 else
6131 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
6132 $as_echo "no" >&6; }
6906 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
6907 printf "%s\n" "no" >&6; }
61336908 fi
61346909
61356910
61416916 else
61426917 case $cross_compiling:$ac_tool_warned in
61436918 yes:)
6144 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
6145 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
6919 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
6920 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
61466921 ac_tool_warned=yes ;;
61476922 esac
61486923 DUMPBIN=$ac_ct_DUMPBIN
61706945
61716946
61726947
6173 { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
6174 $as_echo_n "checking the name lister ($NM) interface... " >&6; }
6175 if ${lt_cv_nm_interface+:} false; then :
6176 $as_echo_n "(cached) " >&6
6177 else
6948 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
6949 printf %s "checking the name lister ($NM) interface... " >&6; }
6950 if test ${lt_cv_nm_interface+y}
6951 then :
6952 printf %s "(cached) " >&6
6953 else $as_nop
61786954 lt_cv_nm_interface="BSD nm"
61796955 echo "int some_variable = 0;" > conftest.$ac_ext
61806956 (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5)
61906966 fi
61916967 rm -f conftest*
61926968 fi
6193 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
6194 $as_echo "$lt_cv_nm_interface" >&6; }
6195
6196 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
6197 $as_echo_n "checking whether ln -s works... " >&6; }
6969 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
6970 printf "%s\n" "$lt_cv_nm_interface" >&6; }
6971
6972 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
6973 printf %s "checking whether ln -s works... " >&6; }
61986974 LN_S=$as_ln_s
61996975 if test "$LN_S" = "ln -s"; then
6200 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
6201 $as_echo "yes" >&6; }
6976 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
6977 printf "%s\n" "yes" >&6; }
62026978 else
6203 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
6204 $as_echo "no, using $LN_S" >&6; }
6979 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
6980 printf "%s\n" "no, using $LN_S" >&6; }
62056981 fi
62066982
62076983 # find the maximum length of command line arguments
6208 { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
6209 $as_echo_n "checking the maximum length of command line arguments... " >&6; }
6210 if ${lt_cv_sys_max_cmd_len+:} false; then :
6211 $as_echo_n "(cached) " >&6
6212 else
6984 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
6985 printf %s "checking the maximum length of command line arguments... " >&6; }
6986 if test ${lt_cv_sys_max_cmd_len+y}
6987 then :
6988 printf %s "(cached) " >&6
6989 else $as_nop
62136990 i=0
62146991 teststring=ABCD
62156992
63367113 fi
63377114
63387115 if test -n "$lt_cv_sys_max_cmd_len"; then
6339 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
6340 $as_echo "$lt_cv_sys_max_cmd_len" >&6; }
7116 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
7117 printf "%s\n" "$lt_cv_sys_max_cmd_len" >&6; }
63417118 else
6342 { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
6343 $as_echo "none" >&6; }
7119 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5
7120 printf "%s\n" "none" >&6; }
63447121 fi
63457122 max_cmd_len=$lt_cv_sys_max_cmd_len
63467123
63847161
63857162
63867163
6387 { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
6388 $as_echo_n "checking how to convert $build file names to $host format... " >&6; }
6389 if ${lt_cv_to_host_file_cmd+:} false; then :
6390 $as_echo_n "(cached) " >&6
6391 else
7164 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5
7165 printf %s "checking how to convert $build file names to $host format... " >&6; }
7166 if test ${lt_cv_to_host_file_cmd+y}
7167 then :
7168 printf %s "(cached) " >&6
7169 else $as_nop
63927170 case $host in
63937171 *-*-mingw* )
63947172 case $build in
64247202 fi
64257203
64267204 to_host_file_cmd=$lt_cv_to_host_file_cmd
6427 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
6428 $as_echo "$lt_cv_to_host_file_cmd" >&6; }
6429
6430
6431
6432
6433
6434 { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
6435 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; }
6436 if ${lt_cv_to_tool_file_cmd+:} false; then :
6437 $as_echo_n "(cached) " >&6
6438 else
7205 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5
7206 printf "%s\n" "$lt_cv_to_host_file_cmd" >&6; }
7207
7208
7209
7210
7211
7212 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5
7213 printf %s "checking how to convert $build file names to toolchain format... " >&6; }
7214 if test ${lt_cv_to_tool_file_cmd+y}
7215 then :
7216 printf %s "(cached) " >&6
7217 else $as_nop
64397218 #assume ordinary cross tools, or native build.
64407219 lt_cv_to_tool_file_cmd=func_convert_file_noop
64417220 case $host in
64517230 fi
64527231
64537232 to_tool_file_cmd=$lt_cv_to_tool_file_cmd
6454 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
6455 $as_echo "$lt_cv_to_tool_file_cmd" >&6; }
6456
6457
6458
6459
6460
6461 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
6462 $as_echo_n "checking for $LD option to reload object files... " >&6; }
6463 if ${lt_cv_ld_reload_flag+:} false; then :
6464 $as_echo_n "(cached) " >&6
6465 else
7233 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5
7234 printf "%s\n" "$lt_cv_to_tool_file_cmd" >&6; }
7235
7236
7237
7238
7239
7240 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
7241 printf %s "checking for $LD option to reload object files... " >&6; }
7242 if test ${lt_cv_ld_reload_flag+y}
7243 then :
7244 printf %s "(cached) " >&6
7245 else $as_nop
64667246 lt_cv_ld_reload_flag='-r'
64677247 fi
6468 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
6469 $as_echo "$lt_cv_ld_reload_flag" >&6; }
7248 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
7249 printf "%s\n" "$lt_cv_ld_reload_flag" >&6; }
64707250 reload_flag=$lt_cv_ld_reload_flag
64717251 case $reload_flag in
64727252 "" | " "*) ;;
64997279 if test -n "$ac_tool_prefix"; then
65007280 # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
65017281 set dummy ${ac_tool_prefix}objdump; ac_word=$2
6502 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
6503 $as_echo_n "checking for $ac_word... " >&6; }
6504 if ${ac_cv_prog_OBJDUMP+:} false; then :
6505 $as_echo_n "(cached) " >&6
6506 else
7282 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
7283 printf %s "checking for $ac_word... " >&6; }
7284 if test ${ac_cv_prog_OBJDUMP+y}
7285 then :
7286 printf %s "(cached) " >&6
7287 else $as_nop
65077288 if test -n "$OBJDUMP"; then
65087289 ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
65097290 else
65117292 for as_dir in $PATH
65127293 do
65137294 IFS=$as_save_IFS
6514 test -z "$as_dir" && as_dir=.
7295 case $as_dir in #(((
7296 '') as_dir=./ ;;
7297 */) ;;
7298 *) as_dir=$as_dir/ ;;
7299 esac
65157300 for ac_exec_ext in '' $ac_executable_extensions; do
6516 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
7301 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
65177302 ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
6518 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
7303 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
65197304 break 2
65207305 fi
65217306 done
65267311 fi
65277312 OBJDUMP=$ac_cv_prog_OBJDUMP
65287313 if test -n "$OBJDUMP"; then
6529 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
6530 $as_echo "$OBJDUMP" >&6; }
7314 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
7315 printf "%s\n" "$OBJDUMP" >&6; }
65317316 else
6532 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
6533 $as_echo "no" >&6; }
7317 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
7318 printf "%s\n" "no" >&6; }
65347319 fi
65357320
65367321
65397324 ac_ct_OBJDUMP=$OBJDUMP
65407325 # Extract the first word of "objdump", so it can be a program name with args.
65417326 set dummy objdump; ac_word=$2
6542 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
6543 $as_echo_n "checking for $ac_word... " >&6; }
6544 if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
6545 $as_echo_n "(cached) " >&6
6546 else
7327 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
7328 printf %s "checking for $ac_word... " >&6; }
7329 if test ${ac_cv_prog_ac_ct_OBJDUMP+y}
7330 then :
7331 printf %s "(cached) " >&6
7332 else $as_nop
65477333 if test -n "$ac_ct_OBJDUMP"; then
65487334 ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
65497335 else
65517337 for as_dir in $PATH
65527338 do
65537339 IFS=$as_save_IFS
6554 test -z "$as_dir" && as_dir=.
7340 case $as_dir in #(((
7341 '') as_dir=./ ;;
7342 */) ;;
7343 *) as_dir=$as_dir/ ;;
7344 esac
65557345 for ac_exec_ext in '' $ac_executable_extensions; do
6556 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
7346 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
65577347 ac_cv_prog_ac_ct_OBJDUMP="objdump"
6558 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
7348 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
65597349 break 2
65607350 fi
65617351 done
65667356 fi
65677357 ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
65687358 if test -n "$ac_ct_OBJDUMP"; then
6569 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
6570 $as_echo "$ac_ct_OBJDUMP" >&6; }
7359 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
7360 printf "%s\n" "$ac_ct_OBJDUMP" >&6; }
65717361 else
6572 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
6573 $as_echo "no" >&6; }
7362 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
7363 printf "%s\n" "no" >&6; }
65747364 fi
65757365
65767366 if test "x$ac_ct_OBJDUMP" = x; then
65787368 else
65797369 case $cross_compiling:$ac_tool_warned in
65807370 yes:)
6581 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
6582 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
7371 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
7372 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
65837373 ac_tool_warned=yes ;;
65847374 esac
65857375 OBJDUMP=$ac_ct_OBJDUMP
65957385
65967386
65977387
6598 { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
6599 $as_echo_n "checking how to recognize dependent libraries... " >&6; }
6600 if ${lt_cv_deplibs_check_method+:} false; then :
6601 $as_echo_n "(cached) " >&6
6602 else
7388 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
7389 printf %s "checking how to recognize dependent libraries... " >&6; }
7390 if test ${lt_cv_deplibs_check_method+y}
7391 then :
7392 printf %s "(cached) " >&6
7393 else $as_nop
66037394 lt_cv_file_magic_cmd='$MAGIC_CMD'
66047395 lt_cv_file_magic_test_file=
66057396 lt_cv_deplibs_check_method='unknown'
67957586 esac
67967587
67977588 fi
6798 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
6799 $as_echo "$lt_cv_deplibs_check_method" >&6; }
7589 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
7590 printf "%s\n" "$lt_cv_deplibs_check_method" >&6; }
68007591
68017592 file_magic_glob=
68027593 want_nocaseglob=no
68407631 if test -n "$ac_tool_prefix"; then
68417632 # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
68427633 set dummy ${ac_tool_prefix}dlltool; ac_word=$2
6843 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
6844 $as_echo_n "checking for $ac_word... " >&6; }
6845 if ${ac_cv_prog_DLLTOOL+:} false; then :
6846 $as_echo_n "(cached) " >&6
6847 else
7634 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
7635 printf %s "checking for $ac_word... " >&6; }
7636 if test ${ac_cv_prog_DLLTOOL+y}
7637 then :
7638 printf %s "(cached) " >&6
7639 else $as_nop
68487640 if test -n "$DLLTOOL"; then
68497641 ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
68507642 else
68527644 for as_dir in $PATH
68537645 do
68547646 IFS=$as_save_IFS
6855 test -z "$as_dir" && as_dir=.
7647 case $as_dir in #(((
7648 '') as_dir=./ ;;
7649 */) ;;
7650 *) as_dir=$as_dir/ ;;
7651 esac
68567652 for ac_exec_ext in '' $ac_executable_extensions; do
6857 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
7653 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
68587654 ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
6859 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
7655 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
68607656 break 2
68617657 fi
68627658 done
68677663 fi
68687664 DLLTOOL=$ac_cv_prog_DLLTOOL
68697665 if test -n "$DLLTOOL"; then
6870 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
6871 $as_echo "$DLLTOOL" >&6; }
7666 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
7667 printf "%s\n" "$DLLTOOL" >&6; }
68727668 else
6873 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
6874 $as_echo "no" >&6; }
7669 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
7670 printf "%s\n" "no" >&6; }
68757671 fi
68767672
68777673
68807676 ac_ct_DLLTOOL=$DLLTOOL
68817677 # Extract the first word of "dlltool", so it can be a program name with args.
68827678 set dummy dlltool; ac_word=$2
6883 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
6884 $as_echo_n "checking for $ac_word... " >&6; }
6885 if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
6886 $as_echo_n "(cached) " >&6
6887 else
7679 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
7680 printf %s "checking for $ac_word... " >&6; }
7681 if test ${ac_cv_prog_ac_ct_DLLTOOL+y}
7682 then :
7683 printf %s "(cached) " >&6
7684 else $as_nop
68887685 if test -n "$ac_ct_DLLTOOL"; then
68897686 ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
68907687 else
68927689 for as_dir in $PATH
68937690 do
68947691 IFS=$as_save_IFS
6895 test -z "$as_dir" && as_dir=.
7692 case $as_dir in #(((
7693 '') as_dir=./ ;;
7694 */) ;;
7695 *) as_dir=$as_dir/ ;;
7696 esac
68967697 for ac_exec_ext in '' $ac_executable_extensions; do
6897 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
7698 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
68987699 ac_cv_prog_ac_ct_DLLTOOL="dlltool"
6899 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
7700 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
69007701 break 2
69017702 fi
69027703 done
69077708 fi
69087709 ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
69097710 if test -n "$ac_ct_DLLTOOL"; then
6910 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
6911 $as_echo "$ac_ct_DLLTOOL" >&6; }
7711 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
7712 printf "%s\n" "$ac_ct_DLLTOOL" >&6; }
69127713 else
6913 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
6914 $as_echo "no" >&6; }
7714 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
7715 printf "%s\n" "no" >&6; }
69157716 fi
69167717
69177718 if test "x$ac_ct_DLLTOOL" = x; then
69197720 else
69207721 case $cross_compiling:$ac_tool_warned in
69217722 yes:)
6922 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
6923 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
7723 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
7724 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
69247725 ac_tool_warned=yes ;;
69257726 esac
69267727 DLLTOOL=$ac_ct_DLLTOOL
69377738
69387739
69397740
6940 { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
6941 $as_echo_n "checking how to associate runtime and link libraries... " >&6; }
6942 if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then :
6943 $as_echo_n "(cached) " >&6
6944 else
7741 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5
7742 printf %s "checking how to associate runtime and link libraries... " >&6; }
7743 if test ${lt_cv_sharedlib_from_linklib_cmd+y}
7744 then :
7745 printf %s "(cached) " >&6
7746 else $as_nop
69457747 lt_cv_sharedlib_from_linklib_cmd='unknown'
69467748
69477749 case $host_os in
69647766 esac
69657767
69667768 fi
6967 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
6968 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
7769 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5
7770 printf "%s\n" "$lt_cv_sharedlib_from_linklib_cmd" >&6; }
69697771 sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd
69707772 test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO
69717773
69807782 do
69817783 # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
69827784 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
6983 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
6984 $as_echo_n "checking for $ac_word... " >&6; }
6985 if ${ac_cv_prog_AR+:} false; then :
6986 $as_echo_n "(cached) " >&6
6987 else
7785 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
7786 printf %s "checking for $ac_word... " >&6; }
7787 if test ${ac_cv_prog_AR+y}
7788 then :
7789 printf %s "(cached) " >&6
7790 else $as_nop
69887791 if test -n "$AR"; then
69897792 ac_cv_prog_AR="$AR" # Let the user override the test.
69907793 else
69927795 for as_dir in $PATH
69937796 do
69947797 IFS=$as_save_IFS
6995 test -z "$as_dir" && as_dir=.
7798 case $as_dir in #(((
7799 '') as_dir=./ ;;
7800 */) ;;
7801 *) as_dir=$as_dir/ ;;
7802 esac
69967803 for ac_exec_ext in '' $ac_executable_extensions; do
6997 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
7804 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
69987805 ac_cv_prog_AR="$ac_tool_prefix$ac_prog"
6999 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
7806 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
70007807 break 2
70017808 fi
70027809 done
70077814 fi
70087815 AR=$ac_cv_prog_AR
70097816 if test -n "$AR"; then
7010 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
7011 $as_echo "$AR" >&6; }
7817 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
7818 printf "%s\n" "$AR" >&6; }
70127819 else
7013 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
7014 $as_echo "no" >&6; }
7820 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
7821 printf "%s\n" "no" >&6; }
70157822 fi
70167823
70177824
70247831 do
70257832 # Extract the first word of "$ac_prog", so it can be a program name with args.
70267833 set dummy $ac_prog; ac_word=$2
7027 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
7028 $as_echo_n "checking for $ac_word... " >&6; }
7029 if ${ac_cv_prog_ac_ct_AR+:} false; then :
7030 $as_echo_n "(cached) " >&6
7031 else
7834 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
7835 printf %s "checking for $ac_word... " >&6; }
7836 if test ${ac_cv_prog_ac_ct_AR+y}
7837 then :
7838 printf %s "(cached) " >&6
7839 else $as_nop
70327840 if test -n "$ac_ct_AR"; then
70337841 ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
70347842 else
70367844 for as_dir in $PATH
70377845 do
70387846 IFS=$as_save_IFS
7039 test -z "$as_dir" && as_dir=.
7847 case $as_dir in #(((
7848 '') as_dir=./ ;;
7849 */) ;;
7850 *) as_dir=$as_dir/ ;;
7851 esac
70407852 for ac_exec_ext in '' $ac_executable_extensions; do
7041 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
7853 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
70427854 ac_cv_prog_ac_ct_AR="$ac_prog"
7043 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
7855 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
70447856 break 2
70457857 fi
70467858 done
70517863 fi
70527864 ac_ct_AR=$ac_cv_prog_ac_ct_AR
70537865 if test -n "$ac_ct_AR"; then
7054 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
7055 $as_echo "$ac_ct_AR" >&6; }
7866 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
7867 printf "%s\n" "$ac_ct_AR" >&6; }
70567868 else
7057 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
7058 $as_echo "no" >&6; }
7869 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
7870 printf "%s\n" "no" >&6; }
70597871 fi
70607872
70617873
70677879 else
70687880 case $cross_compiling:$ac_tool_warned in
70697881 yes:)
7070 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
7071 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
7882 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
7883 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
70727884 ac_tool_warned=yes ;;
70737885 esac
70747886 AR=$ac_ct_AR
70887900
70897901
70907902
7091 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
7092 $as_echo_n "checking for archiver @FILE support... " >&6; }
7093 if ${lt_cv_ar_at_file+:} false; then :
7094 $as_echo_n "(cached) " >&6
7095 else
7903 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5
7904 printf %s "checking for archiver @FILE support... " >&6; }
7905 if test ${lt_cv_ar_at_file+y}
7906 then :
7907 printf %s "(cached) " >&6
7908 else $as_nop
70967909 lt_cv_ar_at_file=no
70977910 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
70987911 /* end confdefs.h. */
70997912
71007913 int
7101 main ()
7914 main (void)
71027915 {
71037916
71047917 ;
71057918 return 0;
71067919 }
71077920 _ACEOF
7108 if ac_fn_c_try_compile "$LINENO"; then :
7921 if ac_fn_c_try_compile "$LINENO"
7922 then :
71097923 echo conftest.$ac_objext > conftest.lst
71107924 lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5'
71117925 { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
71127926 (eval $lt_ar_try) 2>&5
71137927 ac_status=$?
7114 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
7928 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
71157929 test $ac_status = 0; }
71167930 if test 0 -eq "$ac_status"; then
71177931 # Ensure the archiver fails upon bogus file names.
71197933 { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5
71207934 (eval $lt_ar_try) 2>&5
71217935 ac_status=$?
7122 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
7936 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
71237937 test $ac_status = 0; }
71247938 if test 0 -ne "$ac_status"; then
71257939 lt_cv_ar_at_file=@
71287942 rm -f conftest.* libconftest.a
71297943
71307944 fi
7131 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
7132
7133 fi
7134 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
7135 $as_echo "$lt_cv_ar_at_file" >&6; }
7945 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
7946
7947 fi
7948 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5
7949 printf "%s\n" "$lt_cv_ar_at_file" >&6; }
71367950
71377951 if test no = "$lt_cv_ar_at_file"; then
71387952 archiver_list_spec=
71497963 if test -n "$ac_tool_prefix"; then
71507964 # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
71517965 set dummy ${ac_tool_prefix}strip; ac_word=$2
7152 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
7153 $as_echo_n "checking for $ac_word... " >&6; }
7154 if ${ac_cv_prog_STRIP+:} false; then :
7155 $as_echo_n "(cached) " >&6
7156 else
7966 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
7967 printf %s "checking for $ac_word... " >&6; }
7968 if test ${ac_cv_prog_STRIP+y}
7969 then :
7970 printf %s "(cached) " >&6
7971 else $as_nop
71577972 if test -n "$STRIP"; then
71587973 ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
71597974 else
71617976 for as_dir in $PATH
71627977 do
71637978 IFS=$as_save_IFS
7164 test -z "$as_dir" && as_dir=.
7979 case $as_dir in #(((
7980 '') as_dir=./ ;;
7981 */) ;;
7982 *) as_dir=$as_dir/ ;;
7983 esac
71657984 for ac_exec_ext in '' $ac_executable_extensions; do
7166 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
7985 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
71677986 ac_cv_prog_STRIP="${ac_tool_prefix}strip"
7168 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
7987 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
71697988 break 2
71707989 fi
71717990 done
71767995 fi
71777996 STRIP=$ac_cv_prog_STRIP
71787997 if test -n "$STRIP"; then
7179 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
7180 $as_echo "$STRIP" >&6; }
7998 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
7999 printf "%s\n" "$STRIP" >&6; }
71818000 else
7182 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
7183 $as_echo "no" >&6; }
8001 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
8002 printf "%s\n" "no" >&6; }
71848003 fi
71858004
71868005
71898008 ac_ct_STRIP=$STRIP
71908009 # Extract the first word of "strip", so it can be a program name with args.
71918010 set dummy strip; ac_word=$2
7192 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
7193 $as_echo_n "checking for $ac_word... " >&6; }
7194 if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
7195 $as_echo_n "(cached) " >&6
7196 else
8011 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
8012 printf %s "checking for $ac_word... " >&6; }
8013 if test ${ac_cv_prog_ac_ct_STRIP+y}
8014 then :
8015 printf %s "(cached) " >&6
8016 else $as_nop
71978017 if test -n "$ac_ct_STRIP"; then
71988018 ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
71998019 else
72018021 for as_dir in $PATH
72028022 do
72038023 IFS=$as_save_IFS
7204 test -z "$as_dir" && as_dir=.
8024 case $as_dir in #(((
8025 '') as_dir=./ ;;
8026 */) ;;
8027 *) as_dir=$as_dir/ ;;
8028 esac
72058029 for ac_exec_ext in '' $ac_executable_extensions; do
7206 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
8030 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
72078031 ac_cv_prog_ac_ct_STRIP="strip"
7208 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
8032 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
72098033 break 2
72108034 fi
72118035 done
72168040 fi
72178041 ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
72188042 if test -n "$ac_ct_STRIP"; then
7219 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
7220 $as_echo "$ac_ct_STRIP" >&6; }
8043 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
8044 printf "%s\n" "$ac_ct_STRIP" >&6; }
72218045 else
7222 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
7223 $as_echo "no" >&6; }
8046 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
8047 printf "%s\n" "no" >&6; }
72248048 fi
72258049
72268050 if test "x$ac_ct_STRIP" = x; then
72288052 else
72298053 case $cross_compiling:$ac_tool_warned in
72308054 yes:)
7231 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
7232 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
8055 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
8056 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
72338057 ac_tool_warned=yes ;;
72348058 esac
72358059 STRIP=$ac_ct_STRIP
72488072 if test -n "$ac_tool_prefix"; then
72498073 # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
72508074 set dummy ${ac_tool_prefix}ranlib; ac_word=$2
7251 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
7252 $as_echo_n "checking for $ac_word... " >&6; }
7253 if ${ac_cv_prog_RANLIB+:} false; then :
7254 $as_echo_n "(cached) " >&6
7255 else
8075 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
8076 printf %s "checking for $ac_word... " >&6; }
8077 if test ${ac_cv_prog_RANLIB+y}
8078 then :
8079 printf %s "(cached) " >&6
8080 else $as_nop
72568081 if test -n "$RANLIB"; then
72578082 ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
72588083 else
72608085 for as_dir in $PATH
72618086 do
72628087 IFS=$as_save_IFS
7263 test -z "$as_dir" && as_dir=.
8088 case $as_dir in #(((
8089 '') as_dir=./ ;;
8090 */) ;;
8091 *) as_dir=$as_dir/ ;;
8092 esac
72648093 for ac_exec_ext in '' $ac_executable_extensions; do
7265 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
8094 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
72668095 ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
7267 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
8096 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
72688097 break 2
72698098 fi
72708099 done
72758104 fi
72768105 RANLIB=$ac_cv_prog_RANLIB
72778106 if test -n "$RANLIB"; then
7278 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
7279 $as_echo "$RANLIB" >&6; }
8107 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
8108 printf "%s\n" "$RANLIB" >&6; }
72808109 else
7281 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
7282 $as_echo "no" >&6; }
8110 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
8111 printf "%s\n" "no" >&6; }
72838112 fi
72848113
72858114
72888117 ac_ct_RANLIB=$RANLIB
72898118 # Extract the first word of "ranlib", so it can be a program name with args.
72908119 set dummy ranlib; ac_word=$2
7291 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
7292 $as_echo_n "checking for $ac_word... " >&6; }
7293 if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
7294 $as_echo_n "(cached) " >&6
7295 else
8120 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
8121 printf %s "checking for $ac_word... " >&6; }
8122 if test ${ac_cv_prog_ac_ct_RANLIB+y}
8123 then :
8124 printf %s "(cached) " >&6
8125 else $as_nop
72968126 if test -n "$ac_ct_RANLIB"; then
72978127 ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
72988128 else
73008130 for as_dir in $PATH
73018131 do
73028132 IFS=$as_save_IFS
7303 test -z "$as_dir" && as_dir=.
8133 case $as_dir in #(((
8134 '') as_dir=./ ;;
8135 */) ;;
8136 *) as_dir=$as_dir/ ;;
8137 esac
73048138 for ac_exec_ext in '' $ac_executable_extensions; do
7305 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
8139 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
73068140 ac_cv_prog_ac_ct_RANLIB="ranlib"
7307 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
8141 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
73088142 break 2
73098143 fi
73108144 done
73158149 fi
73168150 ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
73178151 if test -n "$ac_ct_RANLIB"; then
7318 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
7319 $as_echo "$ac_ct_RANLIB" >&6; }
8152 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
8153 printf "%s\n" "$ac_ct_RANLIB" >&6; }
73208154 else
7321 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
7322 $as_echo "no" >&6; }
8155 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
8156 printf "%s\n" "no" >&6; }
73238157 fi
73248158
73258159 if test "x$ac_ct_RANLIB" = x; then
73278161 else
73288162 case $cross_compiling:$ac_tool_warned in
73298163 yes:)
7330 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
7331 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
8164 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
8165 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
73328166 ac_tool_warned=yes ;;
73338167 esac
73348168 RANLIB=$ac_ct_RANLIB
74178251
74188252
74198253 # Check for command to grab the raw symbol name followed by C symbol from nm.
7420 { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
7421 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
7422 if ${lt_cv_sys_global_symbol_pipe+:} false; then :
7423 $as_echo_n "(cached) " >&6
7424 else
8254 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
8255 printf %s "checking command to parse $NM output from $compiler object... " >&6; }
8256 if test ${lt_cv_sys_global_symbol_pipe+y}
8257 then :
8258 printf %s "(cached) " >&6
8259 else $as_nop
74258260
74268261 # These are sane defaults that work on at least a few old systems.
74278262 # [They come from Ultrix. What could be older than Ultrix?!! ;)]
75738408 if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
75748409 (eval $ac_compile) 2>&5
75758410 ac_status=$?
7576 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
8411 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
75778412 test $ac_status = 0; }; then
75788413 # Now try to grab the symbols.
75798414 nlist=conftest.nm
75808415 if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5
75818416 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5
75828417 ac_status=$?
7583 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
8418 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
75848419 test $ac_status = 0; } && test -s "$nlist"; then
75858420 # Try sorting and uniquifying the output.
75868421 if sort "$nlist" | uniq > "$nlist"T; then
76498484 if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
76508485 (eval $ac_link) 2>&5
76518486 ac_status=$?
7652 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
8487 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
76538488 test $ac_status = 0; } && test -s conftest$ac_exeext; then
76548489 pipe_works=yes
76558490 fi
76848519 lt_cv_sys_global_symbol_to_cdecl=
76858520 fi
76868521 if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
7687 { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
7688 $as_echo "failed" >&6; }
8522 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: failed" >&5
8523 printf "%s\n" "failed" >&6; }
76898524 else
7690 { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
7691 $as_echo "ok" >&6; }
8525 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ok" >&5
8526 printf "%s\n" "ok" >&6; }
76928527 fi
76938528
76948529 # Response file support.
77348569
77358570
77368571
7737 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
7738 $as_echo_n "checking for sysroot... " >&6; }
8572 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5
8573 printf %s "checking for sysroot... " >&6; }
77398574
77408575 # Check whether --with-sysroot was given.
7741 if test "${with_sysroot+set}" = set; then :
8576 if test ${with_sysroot+y}
8577 then :
77428578 withval=$with_sysroot;
7743 else
8579 else $as_nop
77448580 with_sysroot=no
77458581 fi
77468582
77588594 no|'')
77598595 ;; #(
77608596 *)
7761 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5
7762 $as_echo "$with_sysroot" >&6; }
8597 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5
8598 printf "%s\n" "$with_sysroot" >&6; }
77638599 as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5
77648600 ;;
77658601 esac
77668602
7767 { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
7768 $as_echo "${lt_sysroot:-no}" >&6; }
7769
7770
7771
7772
7773
7774 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5
7775 $as_echo_n "checking for a working dd... " >&6; }
7776 if ${ac_cv_path_lt_DD+:} false; then :
7777 $as_echo_n "(cached) " >&6
7778 else
8603 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5
8604 printf "%s\n" "${lt_sysroot:-no}" >&6; }
8605
8606
8607
8608
8609
8610 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5
8611 printf %s "checking for a working dd... " >&6; }
8612 if test ${ac_cv_path_lt_DD+y}
8613 then :
8614 printf %s "(cached) " >&6
8615 else $as_nop
77798616 printf 0123456789abcdef0123456789abcdef >conftest.i
77808617 cat conftest.i conftest.i >conftest2.i
77818618 : ${lt_DD:=$DD}
77868623 for as_dir in $PATH
77878624 do
77888625 IFS=$as_save_IFS
7789 test -z "$as_dir" && as_dir=.
7790 for ac_prog in dd; do
8626 case $as_dir in #(((
8627 '') as_dir=./ ;;
8628 */) ;;
8629 *) as_dir=$as_dir/ ;;
8630 esac
8631 for ac_prog in dd
8632 do
77918633 for ac_exec_ext in '' $ac_executable_extensions; do
7792 ac_path_lt_DD="$as_dir/$ac_prog$ac_exec_ext"
8634 ac_path_lt_DD="$as_dir$ac_prog$ac_exec_ext"
77938635 as_fn_executable_p "$ac_path_lt_DD" || continue
77948636 if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then
77958637 cmp -s conftest.i conftest.out \
78098651
78108652 rm -f conftest.i conftest2.i conftest.out
78118653 fi
7812 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5
7813 $as_echo "$ac_cv_path_lt_DD" >&6; }
7814
7815
7816 { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5
7817 $as_echo_n "checking how to truncate binary pipes... " >&6; }
7818 if ${lt_cv_truncate_bin+:} false; then :
7819 $as_echo_n "(cached) " >&6
7820 else
8654 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5
8655 printf "%s\n" "$ac_cv_path_lt_DD" >&6; }
8656
8657
8658 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5
8659 printf %s "checking how to truncate binary pipes... " >&6; }
8660 if test ${lt_cv_truncate_bin+y}
8661 then :
8662 printf %s "(cached) " >&6
8663 else $as_nop
78218664 printf 0123456789abcdef0123456789abcdef >conftest.i
78228665 cat conftest.i conftest.i >conftest2.i
78238666 lt_cv_truncate_bin=
78288671 rm -f conftest.i conftest2.i conftest.out
78298672 test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"
78308673 fi
7831 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5
7832 $as_echo "$lt_cv_truncate_bin" >&6; }
8674 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5
8675 printf "%s\n" "$lt_cv_truncate_bin" >&6; }
78338676
78348677
78358678
78528695 }
78538696
78548697 # Check whether --enable-libtool-lock was given.
7855 if test "${enable_libtool_lock+set}" = set; then :
8698 if test ${enable_libtool_lock+y}
8699 then :
78568700 enableval=$enable_libtool_lock;
78578701 fi
78588702
78688712 if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
78698713 (eval $ac_compile) 2>&5
78708714 ac_status=$?
7871 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
8715 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
78728716 test $ac_status = 0; }; then
78738717 case `/usr/bin/file conftest.$ac_objext` in
78748718 *ELF-32*)
78888732 if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
78898733 (eval $ac_compile) 2>&5
78908734 ac_status=$?
7891 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
8735 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
78928736 test $ac_status = 0; }; then
78938737 if test yes = "$lt_cv_prog_gnu_ld"; then
78948738 case `/usr/bin/file conftest.$ac_objext` in
79268770 if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
79278771 (eval $ac_compile) 2>&5
79288772 ac_status=$?
7929 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
8773 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
79308774 test $ac_status = 0; }; then
79318775 emul=elf
79328776 case `/usr/bin/file conftest.$ac_objext` in
79678811 if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
79688812 (eval $ac_compile) 2>&5
79698813 ac_status=$?
7970 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
8814 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
79718815 test $ac_status = 0; }; then
79728816 case `/usr/bin/file conftest.o` in
79738817 *32-bit*)
80308874 # On SCO OpenServer 5, we need -belf to get full-featured binaries.
80318875 SAVE_CFLAGS=$CFLAGS
80328876 CFLAGS="$CFLAGS -belf"
8033 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
8034 $as_echo_n "checking whether the C compiler needs -belf... " >&6; }
8035 if ${lt_cv_cc_needs_belf+:} false; then :
8036 $as_echo_n "(cached) " >&6
8037 else
8877 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
8878 printf %s "checking whether the C compiler needs -belf... " >&6; }
8879 if test ${lt_cv_cc_needs_belf+y}
8880 then :
8881 printf %s "(cached) " >&6
8882 else $as_nop
80388883 ac_ext=c
80398884 ac_cpp='$CPP $CPPFLAGS'
80408885 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
80458890 /* end confdefs.h. */
80468891
80478892 int
8048 main ()
8893 main (void)
80498894 {
80508895
80518896 ;
80528897 return 0;
80538898 }
80548899 _ACEOF
8055 if ac_fn_c_try_link "$LINENO"; then :
8900 if ac_fn_c_try_link "$LINENO"
8901 then :
80568902 lt_cv_cc_needs_belf=yes
8057 else
8903 else $as_nop
80588904 lt_cv_cc_needs_belf=no
80598905 fi
8060 rm -f core conftest.err conftest.$ac_objext \
8906 rm -f core conftest.err conftest.$ac_objext conftest.beam \
80618907 conftest$ac_exeext conftest.$ac_ext
80628908 ac_ext=c
80638909 ac_cpp='$CPP $CPPFLAGS'
80668912 ac_compiler_gnu=$ac_cv_c_compiler_gnu
80678913
80688914 fi
8069 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
8070 $as_echo "$lt_cv_cc_needs_belf" >&6; }
8915 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
8916 printf "%s\n" "$lt_cv_cc_needs_belf" >&6; }
80718917 if test yes != "$lt_cv_cc_needs_belf"; then
80728918 # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
80738919 CFLAGS=$SAVE_CFLAGS
80808926 if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
80818927 (eval $ac_compile) 2>&5
80828928 ac_status=$?
8083 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
8929 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
80848930 test $ac_status = 0; }; then
80858931 case `/usr/bin/file conftest.o` in
80868932 *64-bit*)
81178963 if test -n "$ac_tool_prefix"; then
81188964 # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args.
81198965 set dummy ${ac_tool_prefix}mt; ac_word=$2
8120 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
8121 $as_echo_n "checking for $ac_word... " >&6; }
8122 if ${ac_cv_prog_MANIFEST_TOOL+:} false; then :
8123 $as_echo_n "(cached) " >&6
8124 else
8966 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
8967 printf %s "checking for $ac_word... " >&6; }
8968 if test ${ac_cv_prog_MANIFEST_TOOL+y}
8969 then :
8970 printf %s "(cached) " >&6
8971 else $as_nop
81258972 if test -n "$MANIFEST_TOOL"; then
81268973 ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test.
81278974 else
81298976 for as_dir in $PATH
81308977 do
81318978 IFS=$as_save_IFS
8132 test -z "$as_dir" && as_dir=.
8979 case $as_dir in #(((
8980 '') as_dir=./ ;;
8981 */) ;;
8982 *) as_dir=$as_dir/ ;;
8983 esac
81338984 for ac_exec_ext in '' $ac_executable_extensions; do
8134 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
8985 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
81358986 ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt"
8136 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
8987 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
81378988 break 2
81388989 fi
81398990 done
81448995 fi
81458996 MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL
81468997 if test -n "$MANIFEST_TOOL"; then
8147 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
8148 $as_echo "$MANIFEST_TOOL" >&6; }
8998 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5
8999 printf "%s\n" "$MANIFEST_TOOL" >&6; }
81499000 else
8150 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
8151 $as_echo "no" >&6; }
9001 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
9002 printf "%s\n" "no" >&6; }
81529003 fi
81539004
81549005
81579008 ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL
81589009 # Extract the first word of "mt", so it can be a program name with args.
81599010 set dummy mt; ac_word=$2
8160 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
8161 $as_echo_n "checking for $ac_word... " >&6; }
8162 if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then :
8163 $as_echo_n "(cached) " >&6
8164 else
9011 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
9012 printf %s "checking for $ac_word... " >&6; }
9013 if test ${ac_cv_prog_ac_ct_MANIFEST_TOOL+y}
9014 then :
9015 printf %s "(cached) " >&6
9016 else $as_nop
81659017 if test -n "$ac_ct_MANIFEST_TOOL"; then
81669018 ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test.
81679019 else
81699021 for as_dir in $PATH
81709022 do
81719023 IFS=$as_save_IFS
8172 test -z "$as_dir" && as_dir=.
9024 case $as_dir in #(((
9025 '') as_dir=./ ;;
9026 */) ;;
9027 *) as_dir=$as_dir/ ;;
9028 esac
81739029 for ac_exec_ext in '' $ac_executable_extensions; do
8174 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
9030 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
81759031 ac_cv_prog_ac_ct_MANIFEST_TOOL="mt"
8176 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
9032 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
81779033 break 2
81789034 fi
81799035 done
81849040 fi
81859041 ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL
81869042 if test -n "$ac_ct_MANIFEST_TOOL"; then
8187 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
8188 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; }
9043 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5
9044 printf "%s\n" "$ac_ct_MANIFEST_TOOL" >&6; }
81899045 else
8190 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
8191 $as_echo "no" >&6; }
9046 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
9047 printf "%s\n" "no" >&6; }
81929048 fi
81939049
81949050 if test "x$ac_ct_MANIFEST_TOOL" = x; then
81969052 else
81979053 case $cross_compiling:$ac_tool_warned in
81989054 yes:)
8199 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
8200 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
9055 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
9056 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
82019057 ac_tool_warned=yes ;;
82029058 esac
82039059 MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL
82079063 fi
82089064
82099065 test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt
8210 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
8211 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
8212 if ${lt_cv_path_mainfest_tool+:} false; then :
8213 $as_echo_n "(cached) " >&6
8214 else
9066 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5
9067 printf %s "checking if $MANIFEST_TOOL is a manifest tool... " >&6; }
9068 if test ${lt_cv_path_mainfest_tool+y}
9069 then :
9070 printf %s "(cached) " >&6
9071 else $as_nop
82159072 lt_cv_path_mainfest_tool=no
82169073 echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5
82179074 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out
82219078 fi
82229079 rm -f conftest*
82239080 fi
8224 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
8225 $as_echo "$lt_cv_path_mainfest_tool" >&6; }
9081 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5
9082 printf "%s\n" "$lt_cv_path_mainfest_tool" >&6; }
82269083 if test yes != "$lt_cv_path_mainfest_tool"; then
82279084 MANIFEST_TOOL=:
82289085 fi
82379094 if test -n "$ac_tool_prefix"; then
82389095 # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
82399096 set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
8240 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
8241 $as_echo_n "checking for $ac_word... " >&6; }
8242 if ${ac_cv_prog_DSYMUTIL+:} false; then :
8243 $as_echo_n "(cached) " >&6
8244 else
9097 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
9098 printf %s "checking for $ac_word... " >&6; }
9099 if test ${ac_cv_prog_DSYMUTIL+y}
9100 then :
9101 printf %s "(cached) " >&6
9102 else $as_nop
82459103 if test -n "$DSYMUTIL"; then
82469104 ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
82479105 else
82499107 for as_dir in $PATH
82509108 do
82519109 IFS=$as_save_IFS
8252 test -z "$as_dir" && as_dir=.
9110 case $as_dir in #(((
9111 '') as_dir=./ ;;
9112 */) ;;
9113 *) as_dir=$as_dir/ ;;
9114 esac
82539115 for ac_exec_ext in '' $ac_executable_extensions; do
8254 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
9116 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
82559117 ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
8256 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
9118 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
82579119 break 2
82589120 fi
82599121 done
82649126 fi
82659127 DSYMUTIL=$ac_cv_prog_DSYMUTIL
82669128 if test -n "$DSYMUTIL"; then
8267 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
8268 $as_echo "$DSYMUTIL" >&6; }
9129 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
9130 printf "%s\n" "$DSYMUTIL" >&6; }
82699131 else
8270 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
8271 $as_echo "no" >&6; }
9132 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
9133 printf "%s\n" "no" >&6; }
82729134 fi
82739135
82749136
82779139 ac_ct_DSYMUTIL=$DSYMUTIL
82789140 # Extract the first word of "dsymutil", so it can be a program name with args.
82799141 set dummy dsymutil; ac_word=$2
8280 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
8281 $as_echo_n "checking for $ac_word... " >&6; }
8282 if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then :
8283 $as_echo_n "(cached) " >&6
8284 else
9142 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
9143 printf %s "checking for $ac_word... " >&6; }
9144 if test ${ac_cv_prog_ac_ct_DSYMUTIL+y}
9145 then :
9146 printf %s "(cached) " >&6
9147 else $as_nop
82859148 if test -n "$ac_ct_DSYMUTIL"; then
82869149 ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
82879150 else
82899152 for as_dir in $PATH
82909153 do
82919154 IFS=$as_save_IFS
8292 test -z "$as_dir" && as_dir=.
9155 case $as_dir in #(((
9156 '') as_dir=./ ;;
9157 */) ;;
9158 *) as_dir=$as_dir/ ;;
9159 esac
82939160 for ac_exec_ext in '' $ac_executable_extensions; do
8294 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
9161 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
82959162 ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
8296 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
9163 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
82979164 break 2
82989165 fi
82999166 done
83049171 fi
83059172 ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
83069173 if test -n "$ac_ct_DSYMUTIL"; then
8307 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
8308 $as_echo "$ac_ct_DSYMUTIL" >&6; }
9174 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
9175 printf "%s\n" "$ac_ct_DSYMUTIL" >&6; }
83099176 else
8310 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
8311 $as_echo "no" >&6; }
9177 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
9178 printf "%s\n" "no" >&6; }
83129179 fi
83139180
83149181 if test "x$ac_ct_DSYMUTIL" = x; then
83169183 else
83179184 case $cross_compiling:$ac_tool_warned in
83189185 yes:)
8319 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
8320 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
9186 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
9187 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
83219188 ac_tool_warned=yes ;;
83229189 esac
83239190 DSYMUTIL=$ac_ct_DSYMUTIL
83299196 if test -n "$ac_tool_prefix"; then
83309197 # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
83319198 set dummy ${ac_tool_prefix}nmedit; ac_word=$2
8332 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
8333 $as_echo_n "checking for $ac_word... " >&6; }
8334 if ${ac_cv_prog_NMEDIT+:} false; then :
8335 $as_echo_n "(cached) " >&6
8336 else
9199 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
9200 printf %s "checking for $ac_word... " >&6; }
9201 if test ${ac_cv_prog_NMEDIT+y}
9202 then :
9203 printf %s "(cached) " >&6
9204 else $as_nop
83379205 if test -n "$NMEDIT"; then
83389206 ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
83399207 else
83419209 for as_dir in $PATH
83429210 do
83439211 IFS=$as_save_IFS
8344 test -z "$as_dir" && as_dir=.
9212 case $as_dir in #(((
9213 '') as_dir=./ ;;
9214 */) ;;
9215 *) as_dir=$as_dir/ ;;
9216 esac
83459217 for ac_exec_ext in '' $ac_executable_extensions; do
8346 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
9218 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
83479219 ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
8348 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
9220 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
83499221 break 2
83509222 fi
83519223 done
83569228 fi
83579229 NMEDIT=$ac_cv_prog_NMEDIT
83589230 if test -n "$NMEDIT"; then
8359 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
8360 $as_echo "$NMEDIT" >&6; }
9231 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
9232 printf "%s\n" "$NMEDIT" >&6; }
83619233 else
8362 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
8363 $as_echo "no" >&6; }
9234 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
9235 printf "%s\n" "no" >&6; }
83649236 fi
83659237
83669238
83699241 ac_ct_NMEDIT=$NMEDIT
83709242 # Extract the first word of "nmedit", so it can be a program name with args.
83719243 set dummy nmedit; ac_word=$2
8372 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
8373 $as_echo_n "checking for $ac_word... " >&6; }
8374 if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then :
8375 $as_echo_n "(cached) " >&6
8376 else
9244 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
9245 printf %s "checking for $ac_word... " >&6; }
9246 if test ${ac_cv_prog_ac_ct_NMEDIT+y}
9247 then :
9248 printf %s "(cached) " >&6
9249 else $as_nop
83779250 if test -n "$ac_ct_NMEDIT"; then
83789251 ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
83799252 else
83819254 for as_dir in $PATH
83829255 do
83839256 IFS=$as_save_IFS
8384 test -z "$as_dir" && as_dir=.
9257 case $as_dir in #(((
9258 '') as_dir=./ ;;
9259 */) ;;
9260 *) as_dir=$as_dir/ ;;
9261 esac
83859262 for ac_exec_ext in '' $ac_executable_extensions; do
8386 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
9263 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
83879264 ac_cv_prog_ac_ct_NMEDIT="nmedit"
8388 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
9265 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
83899266 break 2
83909267 fi
83919268 done
83969273 fi
83979274 ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
83989275 if test -n "$ac_ct_NMEDIT"; then
8399 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
8400 $as_echo "$ac_ct_NMEDIT" >&6; }
9276 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
9277 printf "%s\n" "$ac_ct_NMEDIT" >&6; }
84019278 else
8402 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
8403 $as_echo "no" >&6; }
9279 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
9280 printf "%s\n" "no" >&6; }
84049281 fi
84059282
84069283 if test "x$ac_ct_NMEDIT" = x; then
84089285 else
84099286 case $cross_compiling:$ac_tool_warned in
84109287 yes:)
8411 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
8412 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
9288 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
9289 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
84139290 ac_tool_warned=yes ;;
84149291 esac
84159292 NMEDIT=$ac_ct_NMEDIT
84219298 if test -n "$ac_tool_prefix"; then
84229299 # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
84239300 set dummy ${ac_tool_prefix}lipo; ac_word=$2
8424 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
8425 $as_echo_n "checking for $ac_word... " >&6; }
8426 if ${ac_cv_prog_LIPO+:} false; then :
8427 $as_echo_n "(cached) " >&6
8428 else
9301 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
9302 printf %s "checking for $ac_word... " >&6; }
9303 if test ${ac_cv_prog_LIPO+y}
9304 then :
9305 printf %s "(cached) " >&6
9306 else $as_nop
84299307 if test -n "$LIPO"; then
84309308 ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
84319309 else
84339311 for as_dir in $PATH
84349312 do
84359313 IFS=$as_save_IFS
8436 test -z "$as_dir" && as_dir=.
9314 case $as_dir in #(((
9315 '') as_dir=./ ;;
9316 */) ;;
9317 *) as_dir=$as_dir/ ;;
9318 esac
84379319 for ac_exec_ext in '' $ac_executable_extensions; do
8438 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
9320 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
84399321 ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
8440 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
9322 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
84419323 break 2
84429324 fi
84439325 done
84489330 fi
84499331 LIPO=$ac_cv_prog_LIPO
84509332 if test -n "$LIPO"; then
8451 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
8452 $as_echo "$LIPO" >&6; }
9333 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
9334 printf "%s\n" "$LIPO" >&6; }
84539335 else
8454 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
8455 $as_echo "no" >&6; }
9336 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
9337 printf "%s\n" "no" >&6; }
84569338 fi
84579339
84589340
84619343 ac_ct_LIPO=$LIPO
84629344 # Extract the first word of "lipo", so it can be a program name with args.
84639345 set dummy lipo; ac_word=$2
8464 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
8465 $as_echo_n "checking for $ac_word... " >&6; }
8466 if ${ac_cv_prog_ac_ct_LIPO+:} false; then :
8467 $as_echo_n "(cached) " >&6
8468 else
9346 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
9347 printf %s "checking for $ac_word... " >&6; }
9348 if test ${ac_cv_prog_ac_ct_LIPO+y}
9349 then :
9350 printf %s "(cached) " >&6
9351 else $as_nop
84699352 if test -n "$ac_ct_LIPO"; then
84709353 ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
84719354 else
84739356 for as_dir in $PATH
84749357 do
84759358 IFS=$as_save_IFS
8476 test -z "$as_dir" && as_dir=.
9359 case $as_dir in #(((
9360 '') as_dir=./ ;;
9361 */) ;;
9362 *) as_dir=$as_dir/ ;;
9363 esac
84779364 for ac_exec_ext in '' $ac_executable_extensions; do
8478 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
9365 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
84799366 ac_cv_prog_ac_ct_LIPO="lipo"
8480 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
9367 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
84819368 break 2
84829369 fi
84839370 done
84889375 fi
84899376 ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
84909377 if test -n "$ac_ct_LIPO"; then
8491 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
8492 $as_echo "$ac_ct_LIPO" >&6; }
9378 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
9379 printf "%s\n" "$ac_ct_LIPO" >&6; }
84939380 else
8494 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
8495 $as_echo "no" >&6; }
9381 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
9382 printf "%s\n" "no" >&6; }
84969383 fi
84979384
84989385 if test "x$ac_ct_LIPO" = x; then
85009387 else
85019388 case $cross_compiling:$ac_tool_warned in
85029389 yes:)
8503 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
8504 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
9390 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
9391 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
85059392 ac_tool_warned=yes ;;
85069393 esac
85079394 LIPO=$ac_ct_LIPO
85139400 if test -n "$ac_tool_prefix"; then
85149401 # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
85159402 set dummy ${ac_tool_prefix}otool; ac_word=$2
8516 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
8517 $as_echo_n "checking for $ac_word... " >&6; }
8518 if ${ac_cv_prog_OTOOL+:} false; then :
8519 $as_echo_n "(cached) " >&6
8520 else
9403 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
9404 printf %s "checking for $ac_word... " >&6; }
9405 if test ${ac_cv_prog_OTOOL+y}
9406 then :
9407 printf %s "(cached) " >&6
9408 else $as_nop
85219409 if test -n "$OTOOL"; then
85229410 ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
85239411 else
85259413 for as_dir in $PATH
85269414 do
85279415 IFS=$as_save_IFS
8528 test -z "$as_dir" && as_dir=.
9416 case $as_dir in #(((
9417 '') as_dir=./ ;;
9418 */) ;;
9419 *) as_dir=$as_dir/ ;;
9420 esac
85299421 for ac_exec_ext in '' $ac_executable_extensions; do
8530 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
9422 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
85319423 ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
8532 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
9424 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
85339425 break 2
85349426 fi
85359427 done
85409432 fi
85419433 OTOOL=$ac_cv_prog_OTOOL
85429434 if test -n "$OTOOL"; then
8543 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
8544 $as_echo "$OTOOL" >&6; }
9435 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
9436 printf "%s\n" "$OTOOL" >&6; }
85459437 else
8546 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
8547 $as_echo "no" >&6; }
9438 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
9439 printf "%s\n" "no" >&6; }
85489440 fi
85499441
85509442
85539445 ac_ct_OTOOL=$OTOOL
85549446 # Extract the first word of "otool", so it can be a program name with args.
85559447 set dummy otool; ac_word=$2
8556 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
8557 $as_echo_n "checking for $ac_word... " >&6; }
8558 if ${ac_cv_prog_ac_ct_OTOOL+:} false; then :
8559 $as_echo_n "(cached) " >&6
8560 else
9448 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
9449 printf %s "checking for $ac_word... " >&6; }
9450 if test ${ac_cv_prog_ac_ct_OTOOL+y}
9451 then :
9452 printf %s "(cached) " >&6
9453 else $as_nop
85619454 if test -n "$ac_ct_OTOOL"; then
85629455 ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
85639456 else
85659458 for as_dir in $PATH
85669459 do
85679460 IFS=$as_save_IFS
8568 test -z "$as_dir" && as_dir=.
9461 case $as_dir in #(((
9462 '') as_dir=./ ;;
9463 */) ;;
9464 *) as_dir=$as_dir/ ;;
9465 esac
85699466 for ac_exec_ext in '' $ac_executable_extensions; do
8570 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
9467 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
85719468 ac_cv_prog_ac_ct_OTOOL="otool"
8572 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
9469 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
85739470 break 2
85749471 fi
85759472 done
85809477 fi
85819478 ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
85829479 if test -n "$ac_ct_OTOOL"; then
8583 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
8584 $as_echo "$ac_ct_OTOOL" >&6; }
9480 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
9481 printf "%s\n" "$ac_ct_OTOOL" >&6; }
85859482 else
8586 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
8587 $as_echo "no" >&6; }
9483 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
9484 printf "%s\n" "no" >&6; }
85889485 fi
85899486
85909487 if test "x$ac_ct_OTOOL" = x; then
85929489 else
85939490 case $cross_compiling:$ac_tool_warned in
85949491 yes:)
8595 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
8596 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
9492 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
9493 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
85979494 ac_tool_warned=yes ;;
85989495 esac
85999496 OTOOL=$ac_ct_OTOOL
86059502 if test -n "$ac_tool_prefix"; then
86069503 # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
86079504 set dummy ${ac_tool_prefix}otool64; ac_word=$2
8608 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
8609 $as_echo_n "checking for $ac_word... " >&6; }
8610 if ${ac_cv_prog_OTOOL64+:} false; then :
8611 $as_echo_n "(cached) " >&6
8612 else
9505 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
9506 printf %s "checking for $ac_word... " >&6; }
9507 if test ${ac_cv_prog_OTOOL64+y}
9508 then :
9509 printf %s "(cached) " >&6
9510 else $as_nop
86139511 if test -n "$OTOOL64"; then
86149512 ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
86159513 else
86179515 for as_dir in $PATH
86189516 do
86199517 IFS=$as_save_IFS
8620 test -z "$as_dir" && as_dir=.
9518 case $as_dir in #(((
9519 '') as_dir=./ ;;
9520 */) ;;
9521 *) as_dir=$as_dir/ ;;
9522 esac
86219523 for ac_exec_ext in '' $ac_executable_extensions; do
8622 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
9524 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
86239525 ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
8624 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
9526 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
86259527 break 2
86269528 fi
86279529 done
86329534 fi
86339535 OTOOL64=$ac_cv_prog_OTOOL64
86349536 if test -n "$OTOOL64"; then
8635 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
8636 $as_echo "$OTOOL64" >&6; }
9537 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
9538 printf "%s\n" "$OTOOL64" >&6; }
86379539 else
8638 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
8639 $as_echo "no" >&6; }
9540 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
9541 printf "%s\n" "no" >&6; }
86409542 fi
86419543
86429544
86459547 ac_ct_OTOOL64=$OTOOL64
86469548 # Extract the first word of "otool64", so it can be a program name with args.
86479549 set dummy otool64; ac_word=$2
8648 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
8649 $as_echo_n "checking for $ac_word... " >&6; }
8650 if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then :
8651 $as_echo_n "(cached) " >&6
8652 else
9550 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
9551 printf %s "checking for $ac_word... " >&6; }
9552 if test ${ac_cv_prog_ac_ct_OTOOL64+y}
9553 then :
9554 printf %s "(cached) " >&6
9555 else $as_nop
86539556 if test -n "$ac_ct_OTOOL64"; then
86549557 ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
86559558 else
86579560 for as_dir in $PATH
86589561 do
86599562 IFS=$as_save_IFS
8660 test -z "$as_dir" && as_dir=.
9563 case $as_dir in #(((
9564 '') as_dir=./ ;;
9565 */) ;;
9566 *) as_dir=$as_dir/ ;;
9567 esac
86619568 for ac_exec_ext in '' $ac_executable_extensions; do
8662 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
9569 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
86639570 ac_cv_prog_ac_ct_OTOOL64="otool64"
8664 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
9571 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
86659572 break 2
86669573 fi
86679574 done
86729579 fi
86739580 ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
86749581 if test -n "$ac_ct_OTOOL64"; then
8675 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
8676 $as_echo "$ac_ct_OTOOL64" >&6; }
9582 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
9583 printf "%s\n" "$ac_ct_OTOOL64" >&6; }
86779584 else
8678 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
8679 $as_echo "no" >&6; }
9585 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
9586 printf "%s\n" "no" >&6; }
86809587 fi
86819588
86829589 if test "x$ac_ct_OTOOL64" = x; then
86849591 else
86859592 case $cross_compiling:$ac_tool_warned in
86869593 yes:)
8687 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
8688 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
9594 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
9595 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
86899596 ac_tool_warned=yes ;;
86909597 esac
86919598 OTOOL64=$ac_ct_OTOOL64
87209627
87219628
87229629
8723 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
8724 $as_echo_n "checking for -single_module linker flag... " >&6; }
8725 if ${lt_cv_apple_cc_single_mod+:} false; then :
8726 $as_echo_n "(cached) " >&6
8727 else
9630 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
9631 printf %s "checking for -single_module linker flag... " >&6; }
9632 if test ${lt_cv_apple_cc_single_mod+y}
9633 then :
9634 printf %s "(cached) " >&6
9635 else $as_nop
87289636 lt_cv_apple_cc_single_mod=no
87299637 if test -z "$LT_MULTI_MODULE"; then
87309638 # By default we will add the -single_module flag. You can override
87539661 rm -f conftest.*
87549662 fi
87559663 fi
8756 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
8757 $as_echo "$lt_cv_apple_cc_single_mod" >&6; }
8758
8759 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
8760 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
8761 if ${lt_cv_ld_exported_symbols_list+:} false; then :
8762 $as_echo_n "(cached) " >&6
8763 else
9664 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
9665 printf "%s\n" "$lt_cv_apple_cc_single_mod" >&6; }
9666
9667 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
9668 printf %s "checking for -exported_symbols_list linker flag... " >&6; }
9669 if test ${lt_cv_ld_exported_symbols_list+y}
9670 then :
9671 printf %s "(cached) " >&6
9672 else $as_nop
87649673 lt_cv_ld_exported_symbols_list=no
87659674 save_LDFLAGS=$LDFLAGS
87669675 echo "_main" > conftest.sym
87699678 /* end confdefs.h. */
87709679
87719680 int
8772 main ()
9681 main (void)
87739682 {
87749683
87759684 ;
87769685 return 0;
87779686 }
87789687 _ACEOF
8779 if ac_fn_c_try_link "$LINENO"; then :
9688 if ac_fn_c_try_link "$LINENO"
9689 then :
87809690 lt_cv_ld_exported_symbols_list=yes
8781 else
9691 else $as_nop
87829692 lt_cv_ld_exported_symbols_list=no
87839693 fi
8784 rm -f core conftest.err conftest.$ac_objext \
9694 rm -f core conftest.err conftest.$ac_objext conftest.beam \
87859695 conftest$ac_exeext conftest.$ac_ext
87869696 LDFLAGS=$save_LDFLAGS
87879697
87889698 fi
8789 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
8790 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
8791
8792 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
8793 $as_echo_n "checking for -force_load linker flag... " >&6; }
8794 if ${lt_cv_ld_force_load+:} false; then :
8795 $as_echo_n "(cached) " >&6
8796 else
9699 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
9700 printf "%s\n" "$lt_cv_ld_exported_symbols_list" >&6; }
9701
9702 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
9703 printf %s "checking for -force_load linker flag... " >&6; }
9704 if test ${lt_cv_ld_force_load+y}
9705 then :
9706 printf %s "(cached) " >&6
9707 else $as_nop
87979708 lt_cv_ld_force_load=no
87989709 cat > conftest.c << _LT_EOF
87999710 int forced_loaded() { return 2;}
88219732 rm -rf conftest.dSYM
88229733
88239734 fi
8824 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
8825 $as_echo "$lt_cv_ld_force_load" >&6; }
9735 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5
9736 printf "%s\n" "$lt_cv_ld_force_load" >&6; }
88269737 case $host_os in
88279738 rhapsody* | darwin1.[012])
88289739 _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
88909801 esac
88919802 }
88929803
8893 for ac_header in dlfcn.h
8894 do :
8895 ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
9804 ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
88969805 "
8897 if test "x$ac_cv_header_dlfcn_h" = xyes; then :
8898 cat >>confdefs.h <<_ACEOF
8899 #define HAVE_DLFCN_H 1
8900 _ACEOF
8901
8902 fi
8903
8904 done
9806 if test "x$ac_cv_header_dlfcn_h" = xyes
9807 then :
9808 printf "%s\n" "#define HAVE_DLFCN_H 1" >>confdefs.h
9809
9810 fi
89059811
89069812
89079813
89169822 if test -n "$ac_tool_prefix"; then
89179823 # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args.
89189824 set dummy ${ac_tool_prefix}as; ac_word=$2
8919 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
8920 $as_echo_n "checking for $ac_word... " >&6; }
8921 if ${ac_cv_prog_AS+:} false; then :
8922 $as_echo_n "(cached) " >&6
8923 else
9825 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
9826 printf %s "checking for $ac_word... " >&6; }
9827 if test ${ac_cv_prog_AS+y}
9828 then :
9829 printf %s "(cached) " >&6
9830 else $as_nop
89249831 if test -n "$AS"; then
89259832 ac_cv_prog_AS="$AS" # Let the user override the test.
89269833 else
89289835 for as_dir in $PATH
89299836 do
89309837 IFS=$as_save_IFS
8931 test -z "$as_dir" && as_dir=.
9838 case $as_dir in #(((
9839 '') as_dir=./ ;;
9840 */) ;;
9841 *) as_dir=$as_dir/ ;;
9842 esac
89329843 for ac_exec_ext in '' $ac_executable_extensions; do
8933 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
9844 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
89349845 ac_cv_prog_AS="${ac_tool_prefix}as"
8935 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
9846 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
89369847 break 2
89379848 fi
89389849 done
89439854 fi
89449855 AS=$ac_cv_prog_AS
89459856 if test -n "$AS"; then
8946 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5
8947 $as_echo "$AS" >&6; }
9857 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AS" >&5
9858 printf "%s\n" "$AS" >&6; }
89489859 else
8949 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
8950 $as_echo "no" >&6; }
9860 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
9861 printf "%s\n" "no" >&6; }
89519862 fi
89529863
89539864
89569867 ac_ct_AS=$AS
89579868 # Extract the first word of "as", so it can be a program name with args.
89589869 set dummy as; ac_word=$2
8959 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
8960 $as_echo_n "checking for $ac_word... " >&6; }
8961 if ${ac_cv_prog_ac_ct_AS+:} false; then :
8962 $as_echo_n "(cached) " >&6
8963 else
9870 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
9871 printf %s "checking for $ac_word... " >&6; }
9872 if test ${ac_cv_prog_ac_ct_AS+y}
9873 then :
9874 printf %s "(cached) " >&6
9875 else $as_nop
89649876 if test -n "$ac_ct_AS"; then
89659877 ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test.
89669878 else
89689880 for as_dir in $PATH
89699881 do
89709882 IFS=$as_save_IFS
8971 test -z "$as_dir" && as_dir=.
9883 case $as_dir in #(((
9884 '') as_dir=./ ;;
9885 */) ;;
9886 *) as_dir=$as_dir/ ;;
9887 esac
89729888 for ac_exec_ext in '' $ac_executable_extensions; do
8973 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
9889 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
89749890 ac_cv_prog_ac_ct_AS="as"
8975 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
9891 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
89769892 break 2
89779893 fi
89789894 done
89839899 fi
89849900 ac_ct_AS=$ac_cv_prog_ac_ct_AS
89859901 if test -n "$ac_ct_AS"; then
8986 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5
8987 $as_echo "$ac_ct_AS" >&6; }
9902 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5
9903 printf "%s\n" "$ac_ct_AS" >&6; }
89889904 else
8989 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
8990 $as_echo "no" >&6; }
9905 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
9906 printf "%s\n" "no" >&6; }
89919907 fi
89929908
89939909 if test "x$ac_ct_AS" = x; then
89959911 else
89969912 case $cross_compiling:$ac_tool_warned in
89979913 yes:)
8998 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
8999 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
9914 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
9915 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
90009916 ac_tool_warned=yes ;;
90019917 esac
90029918 AS=$ac_ct_AS
90089924 if test -n "$ac_tool_prefix"; then
90099925 # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args.
90109926 set dummy ${ac_tool_prefix}dlltool; ac_word=$2
9011 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
9012 $as_echo_n "checking for $ac_word... " >&6; }
9013 if ${ac_cv_prog_DLLTOOL+:} false; then :
9014 $as_echo_n "(cached) " >&6
9015 else
9927 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
9928 printf %s "checking for $ac_word... " >&6; }
9929 if test ${ac_cv_prog_DLLTOOL+y}
9930 then :
9931 printf %s "(cached) " >&6
9932 else $as_nop
90169933 if test -n "$DLLTOOL"; then
90179934 ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test.
90189935 else
90209937 for as_dir in $PATH
90219938 do
90229939 IFS=$as_save_IFS
9023 test -z "$as_dir" && as_dir=.
9940 case $as_dir in #(((
9941 '') as_dir=./ ;;
9942 */) ;;
9943 *) as_dir=$as_dir/ ;;
9944 esac
90249945 for ac_exec_ext in '' $ac_executable_extensions; do
9025 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
9946 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
90269947 ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool"
9027 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
9948 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
90289949 break 2
90299950 fi
90309951 done
90359956 fi
90369957 DLLTOOL=$ac_cv_prog_DLLTOOL
90379958 if test -n "$DLLTOOL"; then
9038 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
9039 $as_echo "$DLLTOOL" >&6; }
9959 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5
9960 printf "%s\n" "$DLLTOOL" >&6; }
90409961 else
9041 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
9042 $as_echo "no" >&6; }
9962 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
9963 printf "%s\n" "no" >&6; }
90439964 fi
90449965
90459966
90489969 ac_ct_DLLTOOL=$DLLTOOL
90499970 # Extract the first word of "dlltool", so it can be a program name with args.
90509971 set dummy dlltool; ac_word=$2
9051 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
9052 $as_echo_n "checking for $ac_word... " >&6; }
9053 if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then :
9054 $as_echo_n "(cached) " >&6
9055 else
9972 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
9973 printf %s "checking for $ac_word... " >&6; }
9974 if test ${ac_cv_prog_ac_ct_DLLTOOL+y}
9975 then :
9976 printf %s "(cached) " >&6
9977 else $as_nop
90569978 if test -n "$ac_ct_DLLTOOL"; then
90579979 ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test.
90589980 else
90609982 for as_dir in $PATH
90619983 do
90629984 IFS=$as_save_IFS
9063 test -z "$as_dir" && as_dir=.
9985 case $as_dir in #(((
9986 '') as_dir=./ ;;
9987 */) ;;
9988 *) as_dir=$as_dir/ ;;
9989 esac
90649990 for ac_exec_ext in '' $ac_executable_extensions; do
9065 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
9991 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
90669992 ac_cv_prog_ac_ct_DLLTOOL="dlltool"
9067 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
9993 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
90689994 break 2
90699995 fi
90709996 done
907510001 fi
907610002 ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL
907710003 if test -n "$ac_ct_DLLTOOL"; then
9078 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
9079 $as_echo "$ac_ct_DLLTOOL" >&6; }
10004 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5
10005 printf "%s\n" "$ac_ct_DLLTOOL" >&6; }
908010006 else
9081 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
9082 $as_echo "no" >&6; }
10007 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
10008 printf "%s\n" "no" >&6; }
908310009 fi
908410010
908510011 if test "x$ac_ct_DLLTOOL" = x; then
908710013 else
908810014 case $cross_compiling:$ac_tool_warned in
908910015 yes:)
9090 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
9091 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
10016 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
10017 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
909210018 ac_tool_warned=yes ;;
909310019 esac
909410020 DLLTOOL=$ac_ct_DLLTOOL
910010026 if test -n "$ac_tool_prefix"; then
910110027 # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
910210028 set dummy ${ac_tool_prefix}objdump; ac_word=$2
9103 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
9104 $as_echo_n "checking for $ac_word... " >&6; }
9105 if ${ac_cv_prog_OBJDUMP+:} false; then :
9106 $as_echo_n "(cached) " >&6
9107 else
10029 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
10030 printf %s "checking for $ac_word... " >&6; }
10031 if test ${ac_cv_prog_OBJDUMP+y}
10032 then :
10033 printf %s "(cached) " >&6
10034 else $as_nop
910810035 if test -n "$OBJDUMP"; then
910910036 ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
911010037 else
911210039 for as_dir in $PATH
911310040 do
911410041 IFS=$as_save_IFS
9115 test -z "$as_dir" && as_dir=.
10042 case $as_dir in #(((
10043 '') as_dir=./ ;;
10044 */) ;;
10045 *) as_dir=$as_dir/ ;;
10046 esac
911610047 for ac_exec_ext in '' $ac_executable_extensions; do
9117 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
10048 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
911810049 ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
9119 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
10050 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
912010051 break 2
912110052 fi
912210053 done
912710058 fi
912810059 OBJDUMP=$ac_cv_prog_OBJDUMP
912910060 if test -n "$OBJDUMP"; then
9130 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
9131 $as_echo "$OBJDUMP" >&6; }
10061 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
10062 printf "%s\n" "$OBJDUMP" >&6; }
913210063 else
9133 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
9134 $as_echo "no" >&6; }
10064 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
10065 printf "%s\n" "no" >&6; }
913510066 fi
913610067
913710068
914010071 ac_ct_OBJDUMP=$OBJDUMP
914110072 # Extract the first word of "objdump", so it can be a program name with args.
914210073 set dummy objdump; ac_word=$2
9143 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
9144 $as_echo_n "checking for $ac_word... " >&6; }
9145 if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
9146 $as_echo_n "(cached) " >&6
9147 else
10074 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
10075 printf %s "checking for $ac_word... " >&6; }
10076 if test ${ac_cv_prog_ac_ct_OBJDUMP+y}
10077 then :
10078 printf %s "(cached) " >&6
10079 else $as_nop
914810080 if test -n "$ac_ct_OBJDUMP"; then
914910081 ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
915010082 else
915210084 for as_dir in $PATH
915310085 do
915410086 IFS=$as_save_IFS
9155 test -z "$as_dir" && as_dir=.
10087 case $as_dir in #(((
10088 '') as_dir=./ ;;
10089 */) ;;
10090 *) as_dir=$as_dir/ ;;
10091 esac
915610092 for ac_exec_ext in '' $ac_executable_extensions; do
9157 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
10093 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
915810094 ac_cv_prog_ac_ct_OBJDUMP="objdump"
9159 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
10095 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
916010096 break 2
916110097 fi
916210098 done
916710103 fi
916810104 ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
916910105 if test -n "$ac_ct_OBJDUMP"; then
9170 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
9171 $as_echo "$ac_ct_OBJDUMP" >&6; }
10106 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
10107 printf "%s\n" "$ac_ct_OBJDUMP" >&6; }
917210108 else
9173 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
9174 $as_echo "no" >&6; }
10109 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
10110 printf "%s\n" "no" >&6; }
917510111 fi
917610112
917710113 if test "x$ac_ct_OBJDUMP" = x; then
917910115 else
918010116 case $cross_compiling:$ac_tool_warned in
918110117 yes:)
9182 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
9183 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
10118 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
10119 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
918410120 ac_tool_warned=yes ;;
918510121 esac
918610122 OBJDUMP=$ac_ct_OBJDUMP
921810154
921910155
922010156 # Check whether --with-pic was given.
9221 if test "${with_pic+set}" = set; then :
10157 if test ${with_pic+y}
10158 then :
922210159 withval=$with_pic; lt_p=${PACKAGE-default}
922310160 case $withval in
922410161 yes|no) pic_mode=$withval ;;
923510172 IFS=$lt_save_ifs
923610173 ;;
923710174 esac
9238 else
10175 else $as_nop
923910176 pic_mode=default
924010177 fi
924110178
924710184
924810185
924910186 # Check whether --enable-fast-install was given.
9250 if test "${enable_fast_install+set}" = set; then :
10187 if test ${enable_fast_install+y}
10188 then :
925110189 enableval=$enable_fast_install; p=${PACKAGE-default}
925210190 case $enableval in
925310191 yes) enable_fast_install=yes ;;
926510203 IFS=$lt_save_ifs
926610204 ;;
926710205 esac
9268 else
10206 else $as_nop
926910207 enable_fast_install=yes
927010208 fi
927110209
927910217 shared_archive_member_spec=
928010218 case $host,$enable_shared in
928110219 power*-*-aix[5-9]*,yes)
9282 { $as_echo "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5
9283 $as_echo_n "checking which variant of shared library versioning to provide... " >&6; }
10220 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5
10221 printf %s "checking which variant of shared library versioning to provide... " >&6; }
928410222
928510223 # Check whether --with-aix-soname was given.
9286 if test "${with_aix_soname+set}" = set; then :
10224 if test ${with_aix_soname+y}
10225 then :
928710226 withval=$with_aix_soname; case $withval in
928810227 aix|svr4|both)
928910228 ;;
929210231 ;;
929310232 esac
929410233 lt_cv_with_aix_soname=$with_aix_soname
9295 else
9296 if ${lt_cv_with_aix_soname+:} false; then :
9297 $as_echo_n "(cached) " >&6
9298 else
10234 else $as_nop
10235 if test ${lt_cv_with_aix_soname+y}
10236 then :
10237 printf %s "(cached) " >&6
10238 else $as_nop
929910239 lt_cv_with_aix_soname=aix
930010240 fi
930110241
930210242 with_aix_soname=$lt_cv_with_aix_soname
930310243 fi
930410244
9305 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5
9306 $as_echo "$with_aix_soname" >&6; }
10245 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5
10246 printf "%s\n" "$with_aix_soname" >&6; }
930710247 if test aix != "$with_aix_soname"; then
930810248 # For the AIX way of multilib, we name the shared archive member
930910249 # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o',
938510325 setopt NO_GLOB_SUBST
938610326 fi
938710327
9388 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
9389 $as_echo_n "checking for objdir... " >&6; }
9390 if ${lt_cv_objdir+:} false; then :
9391 $as_echo_n "(cached) " >&6
9392 else
10328 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
10329 printf %s "checking for objdir... " >&6; }
10330 if test ${lt_cv_objdir+y}
10331 then :
10332 printf %s "(cached) " >&6
10333 else $as_nop
939310334 rm -f .libs 2>/dev/null
939410335 mkdir .libs 2>/dev/null
939510336 if test -d .libs; then
940010341 fi
940110342 rmdir .libs 2>/dev/null
940210343 fi
9403 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
9404 $as_echo "$lt_cv_objdir" >&6; }
10344 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
10345 printf "%s\n" "$lt_cv_objdir" >&6; }
940510346 objdir=$lt_cv_objdir
940610347
940710348
940810349
940910350
941010351
9411 cat >>confdefs.h <<_ACEOF
9412 #define LT_OBJDIR "$lt_cv_objdir/"
9413 _ACEOF
10352 printf "%s\n" "#define LT_OBJDIR \"$lt_cv_objdir/\"" >>confdefs.h
941410353
941510354
941610355
945610395 case $deplibs_check_method in
945710396 file_magic*)
945810397 if test "$file_magic_cmd" = '$MAGIC_CMD'; then
9459 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
9460 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
9461 if ${lt_cv_path_MAGIC_CMD+:} false; then :
9462 $as_echo_n "(cached) " >&6
9463 else
10398 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
10399 printf %s "checking for ${ac_tool_prefix}file... " >&6; }
10400 if test ${lt_cv_path_MAGIC_CMD+y}
10401 then :
10402 printf %s "(cached) " >&6
10403 else $as_nop
946410404 case $MAGIC_CMD in
946510405 [\\/*] | ?:[\\/]*)
946610406 lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
950910449
951010450 MAGIC_CMD=$lt_cv_path_MAGIC_CMD
951110451 if test -n "$MAGIC_CMD"; then
9512 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
9513 $as_echo "$MAGIC_CMD" >&6; }
10452 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
10453 printf "%s\n" "$MAGIC_CMD" >&6; }
951410454 else
9515 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
9516 $as_echo "no" >&6; }
10455 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
10456 printf "%s\n" "no" >&6; }
951710457 fi
951810458
951910459
952210462
952310463 if test -z "$lt_cv_path_MAGIC_CMD"; then
952410464 if test -n "$ac_tool_prefix"; then
9525 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
9526 $as_echo_n "checking for file... " >&6; }
9527 if ${lt_cv_path_MAGIC_CMD+:} false; then :
9528 $as_echo_n "(cached) " >&6
9529 else
10465 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for file" >&5
10466 printf %s "checking for file... " >&6; }
10467 if test ${lt_cv_path_MAGIC_CMD+y}
10468 then :
10469 printf %s "(cached) " >&6
10470 else $as_nop
953010471 case $MAGIC_CMD in
953110472 [\\/*] | ?:[\\/]*)
953210473 lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path.
957510516
957610517 MAGIC_CMD=$lt_cv_path_MAGIC_CMD
957710518 if test -n "$MAGIC_CMD"; then
9578 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
9579 $as_echo "$MAGIC_CMD" >&6; }
10519 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
10520 printf "%s\n" "$MAGIC_CMD" >&6; }
958010521 else
9581 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
9582 $as_echo "no" >&6; }
10522 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
10523 printf "%s\n" "no" >&6; }
958310524 fi
958410525
958510526
966410605 lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;;
966510606 esac
966610607
9667 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
9668 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
9669 if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :
9670 $as_echo_n "(cached) " >&6
9671 else
10608 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
10609 printf %s "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
10610 if test ${lt_cv_prog_compiler_rtti_exceptions+y}
10611 then :
10612 printf %s "(cached) " >&6
10613 else $as_nop
967210614 lt_cv_prog_compiler_rtti_exceptions=no
967310615 ac_outfile=conftest.$ac_objext
967410616 echo "$lt_simple_compile_test_code" > conftest.$ac_ext
969910641 $RM conftest*
970010642
970110643 fi
9702 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
9703 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
10644 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
10645 printf "%s\n" "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
970410646
970510647 if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then
970610648 lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
1005710999 ;;
1005811000 esac
1005911001
10060 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
10061 $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
10062 if ${lt_cv_prog_compiler_pic+:} false; then :
10063 $as_echo_n "(cached) " >&6
10064 else
11002 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
11003 printf %s "checking for $compiler option to produce PIC... " >&6; }
11004 if test ${lt_cv_prog_compiler_pic+y}
11005 then :
11006 printf %s "(cached) " >&6
11007 else $as_nop
1006511008 lt_cv_prog_compiler_pic=$lt_prog_compiler_pic
1006611009 fi
10067 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
10068 $as_echo "$lt_cv_prog_compiler_pic" >&6; }
11010 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5
11011 printf "%s\n" "$lt_cv_prog_compiler_pic" >&6; }
1006911012 lt_prog_compiler_pic=$lt_cv_prog_compiler_pic
1007011013
1007111014 #
1007211015 # Check to make sure the PIC flag actually works.
1007311016 #
1007411017 if test -n "$lt_prog_compiler_pic"; then
10075 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
10076 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
10077 if ${lt_cv_prog_compiler_pic_works+:} false; then :
10078 $as_echo_n "(cached) " >&6
10079 else
11018 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
11019 printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
11020 if test ${lt_cv_prog_compiler_pic_works+y}
11021 then :
11022 printf %s "(cached) " >&6
11023 else $as_nop
1008011024 lt_cv_prog_compiler_pic_works=no
1008111025 ac_outfile=conftest.$ac_objext
1008211026 echo "$lt_simple_compile_test_code" > conftest.$ac_ext
1010711051 $RM conftest*
1010811052
1010911053 fi
10110 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
10111 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
11054 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
11055 printf "%s\n" "$lt_cv_prog_compiler_pic_works" >&6; }
1011211056
1011311057 if test yes = "$lt_cv_prog_compiler_pic_works"; then
1011411058 case $lt_prog_compiler_pic in
1013611080 # Check to make sure the static flag actually works.
1013711081 #
1013811082 wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
10139 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
10140 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
10141 if ${lt_cv_prog_compiler_static_works+:} false; then :
10142 $as_echo_n "(cached) " >&6
10143 else
11083 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
11084 printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
11085 if test ${lt_cv_prog_compiler_static_works+y}
11086 then :
11087 printf %s "(cached) " >&6
11088 else $as_nop
1014411089 lt_cv_prog_compiler_static_works=no
1014511090 save_LDFLAGS=$LDFLAGS
1014611091 LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
1016411109 LDFLAGS=$save_LDFLAGS
1016511110
1016611111 fi
10167 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
10168 $as_echo "$lt_cv_prog_compiler_static_works" >&6; }
11112 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
11113 printf "%s\n" "$lt_cv_prog_compiler_static_works" >&6; }
1016911114
1017011115 if test yes = "$lt_cv_prog_compiler_static_works"; then
1017111116 :
1017911124
1018011125
1018111126
10182 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
10183 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
10184 if ${lt_cv_prog_compiler_c_o+:} false; then :
10185 $as_echo_n "(cached) " >&6
10186 else
11127 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
11128 printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
11129 if test ${lt_cv_prog_compiler_c_o+y}
11130 then :
11131 printf %s "(cached) " >&6
11132 else $as_nop
1018711133 lt_cv_prog_compiler_c_o=no
1018811134 $RM -r conftest 2>/dev/null
1018911135 mkdir conftest
1022611172 $RM conftest*
1022711173
1022811174 fi
10229 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
10230 $as_echo "$lt_cv_prog_compiler_c_o" >&6; }
10231
10232
10233
10234
10235
10236
10237 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
10238 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
10239 if ${lt_cv_prog_compiler_c_o+:} false; then :
10240 $as_echo_n "(cached) " >&6
10241 else
11175 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
11176 printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; }
11177
11178
11179
11180
11181
11182
11183 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
11184 printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
11185 if test ${lt_cv_prog_compiler_c_o+y}
11186 then :
11187 printf %s "(cached) " >&6
11188 else $as_nop
1024211189 lt_cv_prog_compiler_c_o=no
1024311190 $RM -r conftest 2>/dev/null
1024411191 mkdir conftest
1028111228 $RM conftest*
1028211229
1028311230 fi
10284 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
10285 $as_echo "$lt_cv_prog_compiler_c_o" >&6; }
11231 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
11232 printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; }
1028611233
1028711234
1028811235
1029011237 hard_links=nottested
1029111238 if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then
1029211239 # do not overwrite the value of need_locks provided by the user
10293 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
10294 $as_echo_n "checking if we can lock with hard links... " >&6; }
11240 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
11241 printf %s "checking if we can lock with hard links... " >&6; }
1029511242 hard_links=yes
1029611243 $RM conftest*
1029711244 ln conftest.a conftest.b 2>/dev/null && hard_links=no
1029811245 touch conftest.a
1029911246 ln conftest.a conftest.b 2>&5 || hard_links=no
1030011247 ln conftest.a conftest.b 2>/dev/null && hard_links=no
10301 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
10302 $as_echo "$hard_links" >&6; }
11248 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
11249 printf "%s\n" "$hard_links" >&6; }
1030311250 if test no = "$hard_links"; then
10304 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5
10305 $as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;}
11251 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5
11252 printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;}
1030611253 need_locks=warn
1030711254 fi
1030811255 else
1031411261
1031511262
1031611263
10317 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
10318 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
11264 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
11265 printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
1031911266
1032011267 runpath_var=
1032111268 allow_undefined_flag=
1087011817 if test set = "${lt_cv_aix_libpath+set}"; then
1087111818 aix_libpath=$lt_cv_aix_libpath
1087211819 else
10873 if ${lt_cv_aix_libpath_+:} false; then :
10874 $as_echo_n "(cached) " >&6
10875 else
11820 if test ${lt_cv_aix_libpath_+y}
11821 then :
11822 printf %s "(cached) " >&6
11823 else $as_nop
1087611824 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1087711825 /* end confdefs.h. */
1087811826
1087911827 int
10880 main ()
11828 main (void)
1088111829 {
1088211830
1088311831 ;
1088411832 return 0;
1088511833 }
1088611834 _ACEOF
10887 if ac_fn_c_try_link "$LINENO"; then :
11835 if ac_fn_c_try_link "$LINENO"
11836 then :
1088811837
1088911838 lt_aix_libpath_sed='
1089011839 /Import File Strings/,/^$/ {
1089911848 lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
1090011849 fi
1090111850 fi
10902 rm -f core conftest.err conftest.$ac_objext \
11851 rm -f core conftest.err conftest.$ac_objext conftest.beam \
1090311852 conftest$ac_exeext conftest.$ac_ext
1090411853 if test -z "$lt_cv_aix_libpath_"; then
1090511854 lt_cv_aix_libpath_=/usr/lib:/lib
1092311872 if test set = "${lt_cv_aix_libpath+set}"; then
1092411873 aix_libpath=$lt_cv_aix_libpath
1092511874 else
10926 if ${lt_cv_aix_libpath_+:} false; then :
10927 $as_echo_n "(cached) " >&6
10928 else
11875 if test ${lt_cv_aix_libpath_+y}
11876 then :
11877 printf %s "(cached) " >&6
11878 else $as_nop
1092911879 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1093011880 /* end confdefs.h. */
1093111881
1093211882 int
10933 main ()
11883 main (void)
1093411884 {
1093511885
1093611886 ;
1093711887 return 0;
1093811888 }
1093911889 _ACEOF
10940 if ac_fn_c_try_link "$LINENO"; then :
11890 if ac_fn_c_try_link "$LINENO"
11891 then :
1094111892
1094211893 lt_aix_libpath_sed='
1094311894 /Import File Strings/,/^$/ {
1095211903 lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
1095311904 fi
1095411905 fi
10955 rm -f core conftest.err conftest.$ac_objext \
11906 rm -f core conftest.err conftest.$ac_objext conftest.beam \
1095611907 conftest$ac_exeext conftest.$ac_ext
1095711908 if test -z "$lt_cv_aix_libpath_"; then
1095811909 lt_cv_aix_libpath_=/usr/lib:/lib
1120312154
1120412155 # Older versions of the 11.00 compiler do not understand -b yet
1120512156 # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
11206 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
11207 $as_echo_n "checking if $CC understands -b... " >&6; }
11208 if ${lt_cv_prog_compiler__b+:} false; then :
11209 $as_echo_n "(cached) " >&6
11210 else
12157 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
12158 printf %s "checking if $CC understands -b... " >&6; }
12159 if test ${lt_cv_prog_compiler__b+y}
12160 then :
12161 printf %s "(cached) " >&6
12162 else $as_nop
1121112163 lt_cv_prog_compiler__b=no
1121212164 save_LDFLAGS=$LDFLAGS
1121312165 LDFLAGS="$LDFLAGS -b"
1123112183 LDFLAGS=$save_LDFLAGS
1123212184
1123312185 fi
11234 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
11235 $as_echo "$lt_cv_prog_compiler__b" >&6; }
12186 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5
12187 printf "%s\n" "$lt_cv_prog_compiler__b" >&6; }
1123612188
1123712189 if test yes = "$lt_cv_prog_compiler__b"; then
1123812190 archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
1127212224 # work, assume that -exports_file does not work either and
1127312225 # implicitly export all symbols.
1127412226 # This should be the same for all languages, so no per-tag cache variable.
11275 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
11276 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
11277 if ${lt_cv_irix_exported_symbol+:} false; then :
11278 $as_echo_n "(cached) " >&6
11279 else
12227 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5
12228 printf %s "checking whether the $host_os linker accepts -exported_symbol... " >&6; }
12229 if test ${lt_cv_irix_exported_symbol+y}
12230 then :
12231 printf %s "(cached) " >&6
12232 else $as_nop
1128012233 save_LDFLAGS=$LDFLAGS
1128112234 LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null"
1128212235 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1128312236 /* end confdefs.h. */
1128412237 int foo (void) { return 0; }
1128512238 _ACEOF
11286 if ac_fn_c_try_link "$LINENO"; then :
12239 if ac_fn_c_try_link "$LINENO"
12240 then :
1128712241 lt_cv_irix_exported_symbol=yes
11288 else
12242 else $as_nop
1128912243 lt_cv_irix_exported_symbol=no
1129012244 fi
11291 rm -f core conftest.err conftest.$ac_objext \
12245 rm -f core conftest.err conftest.$ac_objext conftest.beam \
1129212246 conftest$ac_exeext conftest.$ac_ext
1129312247 LDFLAGS=$save_LDFLAGS
1129412248 fi
11295 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
11296 $as_echo "$lt_cv_irix_exported_symbol" >&6; }
12249 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5
12250 printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; }
1129712251 if test yes = "$lt_cv_irix_exported_symbol"; then
1129812252 archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib'
1129912253 fi
1157312527 fi
1157412528 fi
1157512529
11576 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
11577 $as_echo "$ld_shlibs" >&6; }
12530 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
12531 printf "%s\n" "$ld_shlibs" >&6; }
1157812532 test no = "$ld_shlibs" && can_build_shared=no
1157912533
1158012534 with_gnu_ld=$with_gnu_ld
1161012564 # Test whether the compiler implicitly links with -lc since on some
1161112565 # systems, -lgcc has to come before -lc. If gcc already passes -lc
1161212566 # to ld, don't add -lc before -lgcc.
11613 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
11614 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
11615 if ${lt_cv_archive_cmds_need_lc+:} false; then :
11616 $as_echo_n "(cached) " >&6
11617 else
12567 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
12568 printf %s "checking whether -lc should be explicitly linked in... " >&6; }
12569 if test ${lt_cv_archive_cmds_need_lc+y}
12570 then :
12571 printf %s "(cached) " >&6
12572 else $as_nop
1161812573 $RM conftest*
1161912574 echo "$lt_simple_compile_test_code" > conftest.$ac_ext
1162012575
1162112576 if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
1162212577 (eval $ac_compile) 2>&5
1162312578 ac_status=$?
11624 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
12579 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
1162512580 test $ac_status = 0; } 2>conftest.err; then
1162612581 soname=conftest
1162712582 lib=conftest
1163912594 if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
1164012595 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
1164112596 ac_status=$?
11642 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
12597 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
1164312598 test $ac_status = 0; }
1164412599 then
1164512600 lt_cv_archive_cmds_need_lc=no
1165312608 $RM conftest*
1165412609
1165512610 fi
11656 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
11657 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; }
12611 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5
12612 printf "%s\n" "$lt_cv_archive_cmds_need_lc" >&6; }
1165812613 archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc
1165912614 ;;
1166012615 esac
1181312768
1181412769
1181512770
11816 { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
11817 $as_echo_n "checking dynamic linker characteristics... " >&6; }
12771 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
12772 printf %s "checking dynamic linker characteristics... " >&6; }
1181812773
1181912774 if test yes = "$GCC"; then
1182012775 case $host_os in
1237513330 shlibpath_overrides_runpath=no
1237613331
1237713332 # Some binutils ld are patched to set DT_RUNPATH
12378 if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
12379 $as_echo_n "(cached) " >&6
12380 else
13333 if test ${lt_cv_shlibpath_overrides_runpath+y}
13334 then :
13335 printf %s "(cached) " >&6
13336 else $as_nop
1238113337 lt_cv_shlibpath_overrides_runpath=no
1238213338 save_LDFLAGS=$LDFLAGS
1238313339 save_libdir=$libdir
1238713343 /* end confdefs.h. */
1238813344
1238913345 int
12390 main ()
13346 main (void)
1239113347 {
1239213348
1239313349 ;
1239413350 return 0;
1239513351 }
1239613352 _ACEOF
12397 if ac_fn_c_try_link "$LINENO"; then :
12398 if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
13353 if ac_fn_c_try_link "$LINENO"
13354 then :
13355 if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null
13356 then :
1239913357 lt_cv_shlibpath_overrides_runpath=yes
1240013358 fi
1240113359 fi
12402 rm -f core conftest.err conftest.$ac_objext \
13360 rm -f core conftest.err conftest.$ac_objext conftest.beam \
1240313361 conftest$ac_exeext conftest.$ac_ext
1240413362 LDFLAGS=$save_LDFLAGS
1240513363 libdir=$save_libdir
1263113589 dynamic_linker=no
1263213590 ;;
1263313591 esac
12634 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
12635 $as_echo "$dynamic_linker" >&6; }
13592 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
13593 printf "%s\n" "$dynamic_linker" >&6; }
1263613594 test no = "$dynamic_linker" && can_build_shared=no
1263713595
1263813596 variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
1275313711
1275413712
1275513713
12756 { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
12757 $as_echo_n "checking how to hardcode library paths into programs... " >&6; }
13714 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
13715 printf %s "checking how to hardcode library paths into programs... " >&6; }
1275813716 hardcode_action=
1275913717 if test -n "$hardcode_libdir_flag_spec" ||
1276013718 test -n "$runpath_var" ||
1277813736 # directories.
1277913737 hardcode_action=unsupported
1278013738 fi
12781 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
12782 $as_echo "$hardcode_action" >&6; }
13739 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
13740 printf "%s\n" "$hardcode_action" >&6; }
1278313741
1278413742 if test relink = "$hardcode_action" ||
1278513743 test yes = "$inherit_rpath"; then
1282313781
1282413782 darwin*)
1282513783 # if libdl is installed we need to link against it
12826 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
12827 $as_echo_n "checking for dlopen in -ldl... " >&6; }
12828 if ${ac_cv_lib_dl_dlopen+:} false; then :
12829 $as_echo_n "(cached) " >&6
12830 else
13784 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
13785 printf %s "checking for dlopen in -ldl... " >&6; }
13786 if test ${ac_cv_lib_dl_dlopen+y}
13787 then :
13788 printf %s "(cached) " >&6
13789 else $as_nop
1283113790 ac_check_lib_save_LIBS=$LIBS
1283213791 LIBS="-ldl $LIBS"
1283313792 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1283613795 /* Override any GCC internal prototype to avoid an error.
1283713796 Use char because int might match the return type of a GCC
1283813797 builtin and then its argument prototype would still apply. */
12839 #ifdef __cplusplus
12840 extern "C"
12841 #endif
1284213798 char dlopen ();
1284313799 int
12844 main ()
13800 main (void)
1284513801 {
1284613802 return dlopen ();
1284713803 ;
1284813804 return 0;
1284913805 }
1285013806 _ACEOF
12851 if ac_fn_c_try_link "$LINENO"; then :
13807 if ac_fn_c_try_link "$LINENO"
13808 then :
1285213809 ac_cv_lib_dl_dlopen=yes
12853 else
13810 else $as_nop
1285413811 ac_cv_lib_dl_dlopen=no
1285513812 fi
12856 rm -f core conftest.err conftest.$ac_objext \
13813 rm -f core conftest.err conftest.$ac_objext conftest.beam \
1285713814 conftest$ac_exeext conftest.$ac_ext
1285813815 LIBS=$ac_check_lib_save_LIBS
1285913816 fi
12860 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
12861 $as_echo "$ac_cv_lib_dl_dlopen" >&6; }
12862 if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
13817 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
13818 printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; }
13819 if test "x$ac_cv_lib_dl_dlopen" = xyes
13820 then :
1286313821 lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
12864 else
13822 else $as_nop
1286513823
1286613824 lt_cv_dlopen=dyld
1286713825 lt_cv_dlopen_libs=
1288113839
1288213840 *)
1288313841 ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
12884 if test "x$ac_cv_func_shl_load" = xyes; then :
13842 if test "x$ac_cv_func_shl_load" = xyes
13843 then :
1288513844 lt_cv_dlopen=shl_load
12886 else
12887 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
12888 $as_echo_n "checking for shl_load in -ldld... " >&6; }
12889 if ${ac_cv_lib_dld_shl_load+:} false; then :
12890 $as_echo_n "(cached) " >&6
12891 else
13845 else $as_nop
13846 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
13847 printf %s "checking for shl_load in -ldld... " >&6; }
13848 if test ${ac_cv_lib_dld_shl_load+y}
13849 then :
13850 printf %s "(cached) " >&6
13851 else $as_nop
1289213852 ac_check_lib_save_LIBS=$LIBS
1289313853 LIBS="-ldld $LIBS"
1289413854 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1289713857 /* Override any GCC internal prototype to avoid an error.
1289813858 Use char because int might match the return type of a GCC
1289913859 builtin and then its argument prototype would still apply. */
12900 #ifdef __cplusplus
12901 extern "C"
12902 #endif
1290313860 char shl_load ();
1290413861 int
12905 main ()
13862 main (void)
1290613863 {
1290713864 return shl_load ();
1290813865 ;
1290913866 return 0;
1291013867 }
1291113868 _ACEOF
12912 if ac_fn_c_try_link "$LINENO"; then :
13869 if ac_fn_c_try_link "$LINENO"
13870 then :
1291313871 ac_cv_lib_dld_shl_load=yes
12914 else
13872 else $as_nop
1291513873 ac_cv_lib_dld_shl_load=no
1291613874 fi
12917 rm -f core conftest.err conftest.$ac_objext \
13875 rm -f core conftest.err conftest.$ac_objext conftest.beam \
1291813876 conftest$ac_exeext conftest.$ac_ext
1291913877 LIBS=$ac_check_lib_save_LIBS
1292013878 fi
12921 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
12922 $as_echo "$ac_cv_lib_dld_shl_load" >&6; }
12923 if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
13879 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
13880 printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; }
13881 if test "x$ac_cv_lib_dld_shl_load" = xyes
13882 then :
1292413883 lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld
12925 else
13884 else $as_nop
1292613885 ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
12927 if test "x$ac_cv_func_dlopen" = xyes; then :
13886 if test "x$ac_cv_func_dlopen" = xyes
13887 then :
1292813888 lt_cv_dlopen=dlopen
12929 else
12930 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
12931 $as_echo_n "checking for dlopen in -ldl... " >&6; }
12932 if ${ac_cv_lib_dl_dlopen+:} false; then :
12933 $as_echo_n "(cached) " >&6
12934 else
13889 else $as_nop
13890 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
13891 printf %s "checking for dlopen in -ldl... " >&6; }
13892 if test ${ac_cv_lib_dl_dlopen+y}
13893 then :
13894 printf %s "(cached) " >&6
13895 else $as_nop
1293513896 ac_check_lib_save_LIBS=$LIBS
1293613897 LIBS="-ldl $LIBS"
1293713898 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1294013901 /* Override any GCC internal prototype to avoid an error.
1294113902 Use char because int might match the return type of a GCC
1294213903 builtin and then its argument prototype would still apply. */
12943 #ifdef __cplusplus
12944 extern "C"
12945 #endif
1294613904 char dlopen ();
1294713905 int
12948 main ()
13906 main (void)
1294913907 {
1295013908 return dlopen ();
1295113909 ;
1295213910 return 0;
1295313911 }
1295413912 _ACEOF
12955 if ac_fn_c_try_link "$LINENO"; then :
13913 if ac_fn_c_try_link "$LINENO"
13914 then :
1295613915 ac_cv_lib_dl_dlopen=yes
12957 else
13916 else $as_nop
1295813917 ac_cv_lib_dl_dlopen=no
1295913918 fi
12960 rm -f core conftest.err conftest.$ac_objext \
13919 rm -f core conftest.err conftest.$ac_objext conftest.beam \
1296113920 conftest$ac_exeext conftest.$ac_ext
1296213921 LIBS=$ac_check_lib_save_LIBS
1296313922 fi
12964 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
12965 $as_echo "$ac_cv_lib_dl_dlopen" >&6; }
12966 if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
13923 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
13924 printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; }
13925 if test "x$ac_cv_lib_dl_dlopen" = xyes
13926 then :
1296713927 lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl
12968 else
12969 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
12970 $as_echo_n "checking for dlopen in -lsvld... " >&6; }
12971 if ${ac_cv_lib_svld_dlopen+:} false; then :
12972 $as_echo_n "(cached) " >&6
12973 else
13928 else $as_nop
13929 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
13930 printf %s "checking for dlopen in -lsvld... " >&6; }
13931 if test ${ac_cv_lib_svld_dlopen+y}
13932 then :
13933 printf %s "(cached) " >&6
13934 else $as_nop
1297413935 ac_check_lib_save_LIBS=$LIBS
1297513936 LIBS="-lsvld $LIBS"
1297613937 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1297913940 /* Override any GCC internal prototype to avoid an error.
1298013941 Use char because int might match the return type of a GCC
1298113942 builtin and then its argument prototype would still apply. */
12982 #ifdef __cplusplus
12983 extern "C"
12984 #endif
1298513943 char dlopen ();
1298613944 int
12987 main ()
13945 main (void)
1298813946 {
1298913947 return dlopen ();
1299013948 ;
1299113949 return 0;
1299213950 }
1299313951 _ACEOF
12994 if ac_fn_c_try_link "$LINENO"; then :
13952 if ac_fn_c_try_link "$LINENO"
13953 then :
1299513954 ac_cv_lib_svld_dlopen=yes
12996 else
13955 else $as_nop
1299713956 ac_cv_lib_svld_dlopen=no
1299813957 fi
12999 rm -f core conftest.err conftest.$ac_objext \
13958 rm -f core conftest.err conftest.$ac_objext conftest.beam \
1300013959 conftest$ac_exeext conftest.$ac_ext
1300113960 LIBS=$ac_check_lib_save_LIBS
1300213961 fi
13003 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
13004 $as_echo "$ac_cv_lib_svld_dlopen" >&6; }
13005 if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
13962 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
13963 printf "%s\n" "$ac_cv_lib_svld_dlopen" >&6; }
13964 if test "x$ac_cv_lib_svld_dlopen" = xyes
13965 then :
1300613966 lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld
13007 else
13008 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
13009 $as_echo_n "checking for dld_link in -ldld... " >&6; }
13010 if ${ac_cv_lib_dld_dld_link+:} false; then :
13011 $as_echo_n "(cached) " >&6
13012 else
13967 else $as_nop
13968 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
13969 printf %s "checking for dld_link in -ldld... " >&6; }
13970 if test ${ac_cv_lib_dld_dld_link+y}
13971 then :
13972 printf %s "(cached) " >&6
13973 else $as_nop
1301313974 ac_check_lib_save_LIBS=$LIBS
1301413975 LIBS="-ldld $LIBS"
1301513976 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1301813979 /* Override any GCC internal prototype to avoid an error.
1301913980 Use char because int might match the return type of a GCC
1302013981 builtin and then its argument prototype would still apply. */
13021 #ifdef __cplusplus
13022 extern "C"
13023 #endif
1302413982 char dld_link ();
1302513983 int
13026 main ()
13984 main (void)
1302713985 {
1302813986 return dld_link ();
1302913987 ;
1303013988 return 0;
1303113989 }
1303213990 _ACEOF
13033 if ac_fn_c_try_link "$LINENO"; then :
13991 if ac_fn_c_try_link "$LINENO"
13992 then :
1303413993 ac_cv_lib_dld_dld_link=yes
13035 else
13994 else $as_nop
1303613995 ac_cv_lib_dld_dld_link=no
1303713996 fi
13038 rm -f core conftest.err conftest.$ac_objext \
13997 rm -f core conftest.err conftest.$ac_objext conftest.beam \
1303913998 conftest$ac_exeext conftest.$ac_ext
1304013999 LIBS=$ac_check_lib_save_LIBS
1304114000 fi
13042 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
13043 $as_echo "$ac_cv_lib_dld_dld_link" >&6; }
13044 if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
14001 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
14002 printf "%s\n" "$ac_cv_lib_dld_dld_link" >&6; }
14003 if test "x$ac_cv_lib_dld_dld_link" = xyes
14004 then :
1304514005 lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld
1304614006 fi
1304714007
1308014040 save_LIBS=$LIBS
1308114041 LIBS="$lt_cv_dlopen_libs $LIBS"
1308214042
13083 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
13084 $as_echo_n "checking whether a program can dlopen itself... " >&6; }
13085 if ${lt_cv_dlopen_self+:} false; then :
13086 $as_echo_n "(cached) " >&6
13087 else
14043 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
14044 printf %s "checking whether a program can dlopen itself... " >&6; }
14045 if test ${lt_cv_dlopen_self+y}
14046 then :
14047 printf %s "(cached) " >&6
14048 else $as_nop
1308814049 if test yes = "$cross_compiling"; then :
1308914050 lt_cv_dlopen_self=cross
1309014051 else
1316314124 if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
1316414125 (eval $ac_link) 2>&5
1316514126 ac_status=$?
13166 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
14127 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
1316714128 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then
1316814129 (./conftest; exit; ) >&5 2>/dev/null
1316914130 lt_status=$?
1318114142
1318214143
1318314144 fi
13184 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
13185 $as_echo "$lt_cv_dlopen_self" >&6; }
14145 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
14146 printf "%s\n" "$lt_cv_dlopen_self" >&6; }
1318614147
1318714148 if test yes = "$lt_cv_dlopen_self"; then
1318814149 wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
13189 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
13190 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
13191 if ${lt_cv_dlopen_self_static+:} false; then :
13192 $as_echo_n "(cached) " >&6
13193 else
14150 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
14151 printf %s "checking whether a statically linked program can dlopen itself... " >&6; }
14152 if test ${lt_cv_dlopen_self_static+y}
14153 then :
14154 printf %s "(cached) " >&6
14155 else $as_nop
1319414156 if test yes = "$cross_compiling"; then :
1319514157 lt_cv_dlopen_self_static=cross
1319614158 else
1326914231 if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
1327014232 (eval $ac_link) 2>&5
1327114233 ac_status=$?
13272 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
14234 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
1327314235 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then
1327414236 (./conftest; exit; ) >&5 2>/dev/null
1327514237 lt_status=$?
1328714249
1328814250
1328914251 fi
13290 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
13291 $as_echo "$lt_cv_dlopen_self_static" >&6; }
14252 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
14253 printf "%s\n" "$lt_cv_dlopen_self_static" >&6; }
1329214254 fi
1329314255
1329414256 CPPFLAGS=$save_CPPFLAGS
1332614288
1332714289 striplib=
1332814290 old_striplib=
13329 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
13330 $as_echo_n "checking whether stripping libraries is possible... " >&6; }
14291 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
14292 printf %s "checking whether stripping libraries is possible... " >&6; }
1333114293 if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
1333214294 test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
1333314295 test -z "$striplib" && striplib="$STRIP --strip-unneeded"
13334 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
13335 $as_echo "yes" >&6; }
14296 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
14297 printf "%s\n" "yes" >&6; }
1333614298 else
1333714299 # FIXME - insert some real tests, host_os isn't really good enough
1333814300 case $host_os in
1334014302 if test -n "$STRIP"; then
1334114303 striplib="$STRIP -x"
1334214304 old_striplib="$STRIP -S"
13343 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
13344 $as_echo "yes" >&6; }
14305 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
14306 printf "%s\n" "yes" >&6; }
1334514307 else
13346 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
13347 $as_echo "no" >&6; }
14308 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
14309 printf "%s\n" "no" >&6; }
1334814310 fi
1334914311 ;;
1335014312 *)
13351 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
13352 $as_echo "no" >&6; }
14313 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
14314 printf "%s\n" "no" >&6; }
1335314315 ;;
1335414316 esac
1335514317 fi
1336614328
1336714329
1336814330 # Report what library types will actually be built
13369 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
13370 $as_echo_n "checking if libtool supports shared libraries... " >&6; }
13371 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
13372 $as_echo "$can_build_shared" >&6; }
13373
13374 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
13375 $as_echo_n "checking whether to build shared libraries... " >&6; }
14331 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
14332 printf %s "checking if libtool supports shared libraries... " >&6; }
14333 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
14334 printf "%s\n" "$can_build_shared" >&6; }
14335
14336 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
14337 printf %s "checking whether to build shared libraries... " >&6; }
1337614338 test no = "$can_build_shared" && enable_shared=no
1337714339
1337814340 # On AIX, shared libraries and static libraries use the same namespace, and
1339614358 fi
1339714359 ;;
1339814360 esac
13399 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
13400 $as_echo "$enable_shared" >&6; }
13401
13402 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
13403 $as_echo_n "checking whether to build static libraries... " >&6; }
14361 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
14362 printf "%s\n" "$enable_shared" >&6; }
14363
14364 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
14365 printf %s "checking whether to build static libraries... " >&6; }
1340414366 # Make sure either enable_shared or enable_static is yes.
1340514367 test yes = "$enable_shared" || enable_static=yes
13406 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
13407 $as_echo "$enable_static" >&6; }
14368 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
14369 printf "%s\n" "$enable_static" >&6; }
1340814370
1340914371
1341014372
1343814400
1343914401
1344014402 # Only expand once:
14403
14404
14405
14406
14407
14408
1344114409
1344214410
1344314411
1345114419 CXX=$CCC
1345214420 else
1345314421 if test -n "$ac_tool_prefix"; then
13454 for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
14422 for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++
1345514423 do
1345614424 # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
1345714425 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
13458 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
13459 $as_echo_n "checking for $ac_word... " >&6; }
13460 if ${ac_cv_prog_CXX+:} false; then :
13461 $as_echo_n "(cached) " >&6
13462 else
14426 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
14427 printf %s "checking for $ac_word... " >&6; }
14428 if test ${ac_cv_prog_CXX+y}
14429 then :
14430 printf %s "(cached) " >&6
14431 else $as_nop
1346314432 if test -n "$CXX"; then
1346414433 ac_cv_prog_CXX="$CXX" # Let the user override the test.
1346514434 else
1346714436 for as_dir in $PATH
1346814437 do
1346914438 IFS=$as_save_IFS
13470 test -z "$as_dir" && as_dir=.
14439 case $as_dir in #(((
14440 '') as_dir=./ ;;
14441 */) ;;
14442 *) as_dir=$as_dir/ ;;
14443 esac
1347114444 for ac_exec_ext in '' $ac_executable_extensions; do
13472 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
14445 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
1347314446 ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
13474 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
14447 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
1347514448 break 2
1347614449 fi
1347714450 done
1348214455 fi
1348314456 CXX=$ac_cv_prog_CXX
1348414457 if test -n "$CXX"; then
13485 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
13486 $as_echo "$CXX" >&6; }
14458 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5
14459 printf "%s\n" "$CXX" >&6; }
1348714460 else
13488 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
13489 $as_echo "no" >&6; }
14461 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
14462 printf "%s\n" "no" >&6; }
1349014463 fi
1349114464
1349214465
1349514468 fi
1349614469 if test -z "$CXX"; then
1349714470 ac_ct_CXX=$CXX
13498 for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC
14471 for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++
1349914472 do
1350014473 # Extract the first word of "$ac_prog", so it can be a program name with args.
1350114474 set dummy $ac_prog; ac_word=$2
13502 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
13503 $as_echo_n "checking for $ac_word... " >&6; }
13504 if ${ac_cv_prog_ac_ct_CXX+:} false; then :
13505 $as_echo_n "(cached) " >&6
13506 else
14475 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
14476 printf %s "checking for $ac_word... " >&6; }
14477 if test ${ac_cv_prog_ac_ct_CXX+y}
14478 then :
14479 printf %s "(cached) " >&6
14480 else $as_nop
1350714481 if test -n "$ac_ct_CXX"; then
1350814482 ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
1350914483 else
1351114485 for as_dir in $PATH
1351214486 do
1351314487 IFS=$as_save_IFS
13514 test -z "$as_dir" && as_dir=.
14488 case $as_dir in #(((
14489 '') as_dir=./ ;;
14490 */) ;;
14491 *) as_dir=$as_dir/ ;;
14492 esac
1351514493 for ac_exec_ext in '' $ac_executable_extensions; do
13516 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
14494 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
1351714495 ac_cv_prog_ac_ct_CXX="$ac_prog"
13518 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
14496 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
1351914497 break 2
1352014498 fi
1352114499 done
1352614504 fi
1352714505 ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
1352814506 if test -n "$ac_ct_CXX"; then
13529 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
13530 $as_echo "$ac_ct_CXX" >&6; }
14507 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5
14508 printf "%s\n" "$ac_ct_CXX" >&6; }
1353114509 else
13532 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
13533 $as_echo "no" >&6; }
14510 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
14511 printf "%s\n" "no" >&6; }
1353414512 fi
1353514513
1353614514
1354214520 else
1354314521 case $cross_compiling:$ac_tool_warned in
1354414522 yes:)
13545 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
13546 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
14523 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
14524 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
1354714525 ac_tool_warned=yes ;;
1354814526 esac
1354914527 CXX=$ac_ct_CXX
1355314531 fi
1355414532 fi
1355514533 # Provide some information about the compiler.
13556 $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
14534 printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5
1355714535 set X $ac_compile
1355814536 ac_compiler=$2
1355914537 for ac_option in --version -v -V -qversion; do
1356314541 *) ac_try_echo=$ac_try;;
1356414542 esac
1356514543 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
13566 $as_echo "$ac_try_echo"; } >&5
14544 printf "%s\n" "$ac_try_echo"; } >&5
1356714545 (eval "$ac_compiler $ac_option >&5") 2>conftest.err
1356814546 ac_status=$?
1356914547 if test -s conftest.err; then
1357314551 cat conftest.er1 >&5
1357414552 fi
1357514553 rm -f conftest.er1 conftest.err
13576 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
14554 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
1357714555 test $ac_status = 0; }
1357814556 done
1357914557
13580 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5
13581 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; }
13582 if ${ac_cv_cxx_compiler_gnu+:} false; then :
13583 $as_echo_n "(cached) " >&6
13584 else
14558 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C++" >&5
14559 printf %s "checking whether the compiler supports GNU C++... " >&6; }
14560 if test ${ac_cv_cxx_compiler_gnu+y}
14561 then :
14562 printf %s "(cached) " >&6
14563 else $as_nop
1358514564 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1358614565 /* end confdefs.h. */
1358714566
1358814567 int
13589 main ()
14568 main (void)
1359014569 {
1359114570 #ifndef __GNUC__
1359214571 choke me
1359614575 return 0;
1359714576 }
1359814577 _ACEOF
13599 if ac_fn_cxx_try_compile "$LINENO"; then :
14578 if ac_fn_cxx_try_compile "$LINENO"
14579 then :
1360014580 ac_compiler_gnu=yes
13601 else
14581 else $as_nop
1360214582 ac_compiler_gnu=no
1360314583 fi
13604 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
14584 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
1360514585 ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
1360614586
1360714587 fi
13608 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
13609 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; }
14588 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5
14589 printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; }
14590 ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
14591
1361014592 if test $ac_compiler_gnu = yes; then
1361114593 GXX=yes
1361214594 else
1361314595 GXX=
1361414596 fi
13615 ac_test_CXXFLAGS=${CXXFLAGS+set}
14597 ac_test_CXXFLAGS=${CXXFLAGS+y}
1361614598 ac_save_CXXFLAGS=$CXXFLAGS
13617 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
13618 $as_echo_n "checking whether $CXX accepts -g... " >&6; }
13619 if ${ac_cv_prog_cxx_g+:} false; then :
13620 $as_echo_n "(cached) " >&6
13621 else
14599 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5
14600 printf %s "checking whether $CXX accepts -g... " >&6; }
14601 if test ${ac_cv_prog_cxx_g+y}
14602 then :
14603 printf %s "(cached) " >&6
14604 else $as_nop
1362214605 ac_save_cxx_werror_flag=$ac_cxx_werror_flag
1362314606 ac_cxx_werror_flag=yes
1362414607 ac_cv_prog_cxx_g=no
1362714610 /* end confdefs.h. */
1362814611
1362914612 int
13630 main ()
14613 main (void)
1363114614 {
1363214615
1363314616 ;
1363414617 return 0;
1363514618 }
1363614619 _ACEOF
13637 if ac_fn_cxx_try_compile "$LINENO"; then :
14620 if ac_fn_cxx_try_compile "$LINENO"
14621 then :
1363814622 ac_cv_prog_cxx_g=yes
13639 else
14623 else $as_nop
1364014624 CXXFLAGS=""
1364114625 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1364214626 /* end confdefs.h. */
1364314627
1364414628 int
13645 main ()
14629 main (void)
1364614630 {
1364714631
1364814632 ;
1364914633 return 0;
1365014634 }
1365114635 _ACEOF
13652 if ac_fn_cxx_try_compile "$LINENO"; then :
13653
13654 else
14636 if ac_fn_cxx_try_compile "$LINENO"
14637 then :
14638
14639 else $as_nop
1365514640 ac_cxx_werror_flag=$ac_save_cxx_werror_flag
1365614641 CXXFLAGS="-g"
1365714642 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1365814643 /* end confdefs.h. */
1365914644
1366014645 int
13661 main ()
14646 main (void)
1366214647 {
1366314648
1366414649 ;
1366514650 return 0;
1366614651 }
1366714652 _ACEOF
13668 if ac_fn_cxx_try_compile "$LINENO"; then :
14653 if ac_fn_cxx_try_compile "$LINENO"
14654 then :
1366914655 ac_cv_prog_cxx_g=yes
1367014656 fi
13671 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
13672 fi
13673 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
13674 fi
13675 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
14657 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
14658 fi
14659 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
14660 fi
14661 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
1367614662 ac_cxx_werror_flag=$ac_save_cxx_werror_flag
1367714663 fi
13678 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
13679 $as_echo "$ac_cv_prog_cxx_g" >&6; }
13680 if test "$ac_test_CXXFLAGS" = set; then
14664 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5
14665 printf "%s\n" "$ac_cv_prog_cxx_g" >&6; }
14666 if test $ac_test_CXXFLAGS; then
1368114667 CXXFLAGS=$ac_save_CXXFLAGS
1368214668 elif test $ac_cv_prog_cxx_g = yes; then
1368314669 if test "$GXX" = yes; then
1369214678 CXXFLAGS=
1369314679 fi
1369414680 fi
14681 ac_prog_cxx_stdcxx=no
14682 if test x$ac_prog_cxx_stdcxx = xno
14683 then :
14684 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5
14685 printf %s "checking for $CXX option to enable C++11 features... " >&6; }
14686 if test ${ac_cv_prog_cxx_11+y}
14687 then :
14688 printf %s "(cached) " >&6
14689 else $as_nop
14690 ac_cv_prog_cxx_11=no
14691 ac_save_CXX=$CXX
14692 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
14693 /* end confdefs.h. */
14694 $ac_cxx_conftest_cxx11_program
14695 _ACEOF
14696 for ac_arg in '' -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x -qlanglvl=extended0x -AA
14697 do
14698 CXX="$ac_save_CXX $ac_arg"
14699 if ac_fn_cxx_try_compile "$LINENO"
14700 then :
14701 ac_cv_prog_cxx_cxx11=$ac_arg
14702 fi
14703 rm -f core conftest.err conftest.$ac_objext conftest.beam
14704 test "x$ac_cv_prog_cxx_cxx11" != "xno" && break
14705 done
14706 rm -f conftest.$ac_ext
14707 CXX=$ac_save_CXX
14708 fi
14709
14710 if test "x$ac_cv_prog_cxx_cxx11" = xno
14711 then :
14712 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
14713 printf "%s\n" "unsupported" >&6; }
14714 else $as_nop
14715 if test "x$ac_cv_prog_cxx_cxx11" = x
14716 then :
14717 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
14718 printf "%s\n" "none needed" >&6; }
14719 else $as_nop
14720 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5
14721 printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; }
14722 CXX="$CXX $ac_cv_prog_cxx_cxx11"
14723 fi
14724 ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11
14725 ac_prog_cxx_stdcxx=cxx11
14726 fi
14727 fi
14728 if test x$ac_prog_cxx_stdcxx = xno
14729 then :
14730 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5
14731 printf %s "checking for $CXX option to enable C++98 features... " >&6; }
14732 if test ${ac_cv_prog_cxx_98+y}
14733 then :
14734 printf %s "(cached) " >&6
14735 else $as_nop
14736 ac_cv_prog_cxx_98=no
14737 ac_save_CXX=$CXX
14738 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
14739 /* end confdefs.h. */
14740 $ac_cxx_conftest_cxx98_program
14741 _ACEOF
14742 for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA
14743 do
14744 CXX="$ac_save_CXX $ac_arg"
14745 if ac_fn_cxx_try_compile "$LINENO"
14746 then :
14747 ac_cv_prog_cxx_cxx98=$ac_arg
14748 fi
14749 rm -f core conftest.err conftest.$ac_objext conftest.beam
14750 test "x$ac_cv_prog_cxx_cxx98" != "xno" && break
14751 done
14752 rm -f conftest.$ac_ext
14753 CXX=$ac_save_CXX
14754 fi
14755
14756 if test "x$ac_cv_prog_cxx_cxx98" = xno
14757 then :
14758 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
14759 printf "%s\n" "unsupported" >&6; }
14760 else $as_nop
14761 if test "x$ac_cv_prog_cxx_cxx98" = x
14762 then :
14763 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
14764 printf "%s\n" "none needed" >&6; }
14765 else $as_nop
14766 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5
14767 printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; }
14768 CXX="$CXX $ac_cv_prog_cxx_cxx98"
14769 fi
14770 ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98
14771 ac_prog_cxx_stdcxx=cxx98
14772 fi
14773 fi
14774
1369514775 ac_ext=c
1369614776 ac_cpp='$CPP $CPPFLAGS'
1369714777 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
1370014780
1370114781 depcc="$CXX" am_compiler_list=
1370214782
13703 { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
13704 $as_echo_n "checking dependency style of $depcc... " >&6; }
13705 if ${am_cv_CXX_dependencies_compiler_type+:} false; then :
13706 $as_echo_n "(cached) " >&6
13707 else
14783 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
14784 printf %s "checking dependency style of $depcc... " >&6; }
14785 if test ${am_cv_CXX_dependencies_compiler_type+y}
14786 then :
14787 printf %s "(cached) " >&6
14788 else $as_nop
1370814789 if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
1370914790 # We make a subdir and do the tests there. Otherwise we can end up
1371014791 # making bogus files that we don't know about and never remove. For
1381114892 fi
1381214893
1381314894 fi
13814 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
13815 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
14895 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
14896 printf "%s\n" "$am_cv_CXX_dependencies_compiler_type" >&6; }
1381614897 CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
1381714898
1381814899 if
1384514926 ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
1384614927 ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
1384714928 ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
13848 { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5
13849 $as_echo_n "checking how to run the C++ preprocessor... " >&6; }
14929 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5
14930 printf %s "checking how to run the C++ preprocessor... " >&6; }
1385014931 if test -z "$CXXCPP"; then
13851 if ${ac_cv_prog_CXXCPP+:} false; then :
13852 $as_echo_n "(cached) " >&6
13853 else
13854 # Double quotes because CXXCPP needs to be expanded
13855 for CXXCPP in "$CXX -E" "/lib/cpp"
14932 if test ${ac_cv_prog_CXXCPP+y}
14933 then :
14934 printf %s "(cached) " >&6
14935 else $as_nop
14936 # Double quotes because $CXX needs to be expanded
14937 for CXXCPP in "$CXX -E" cpp /lib/cpp
1385614938 do
1385714939 ac_preproc_ok=false
1385814940 for ac_cxx_preproc_warn_flag in '' yes
1385914941 do
1386014942 # Use a header file that comes with gcc, so configuring glibc
1386114943 # with a fresh cross-compiler works.
13862 # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
13863 # <limits.h> exists even on freestanding compilers.
1386414944 # On the NeXT, cc -E runs the code through the compiler's parser,
1386514945 # not just through cpp. "Syntax error" is here to catch this case.
1386614946 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1386714947 /* end confdefs.h. */
13868 #ifdef __STDC__
13869 # include <limits.h>
13870 #else
13871 # include <assert.h>
13872 #endif
14948 #include <limits.h>
1387314949 Syntax error
1387414950 _ACEOF
13875 if ac_fn_cxx_try_cpp "$LINENO"; then :
13876
13877 else
14951 if ac_fn_cxx_try_cpp "$LINENO"
14952 then :
14953
14954 else $as_nop
1387814955 # Broken: fails on valid input.
1387914956 continue
1388014957 fi
1388614963 /* end confdefs.h. */
1388714964 #include <ac_nonexistent.h>
1388814965 _ACEOF
13889 if ac_fn_cxx_try_cpp "$LINENO"; then :
14966 if ac_fn_cxx_try_cpp "$LINENO"
14967 then :
1389014968 # Broken: success on invalid input.
1389114969 continue
13892 else
14970 else $as_nop
1389314971 # Passes both tests.
1389414972 ac_preproc_ok=:
1389514973 break
1389914977 done
1390014978 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
1390114979 rm -f conftest.i conftest.err conftest.$ac_ext
13902 if $ac_preproc_ok; then :
14980 if $ac_preproc_ok
14981 then :
1390314982 break
1390414983 fi
1390514984
1391114990 else
1391214991 ac_cv_prog_CXXCPP=$CXXCPP
1391314992 fi
13914 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5
13915 $as_echo "$CXXCPP" >&6; }
14993 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5
14994 printf "%s\n" "$CXXCPP" >&6; }
1391614995 ac_preproc_ok=false
1391714996 for ac_cxx_preproc_warn_flag in '' yes
1391814997 do
1391914998 # Use a header file that comes with gcc, so configuring glibc
1392014999 # with a fresh cross-compiler works.
13921 # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
13922 # <limits.h> exists even on freestanding compilers.
1392315000 # On the NeXT, cc -E runs the code through the compiler's parser,
1392415001 # not just through cpp. "Syntax error" is here to catch this case.
1392515002 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1392615003 /* end confdefs.h. */
13927 #ifdef __STDC__
13928 # include <limits.h>
13929 #else
13930 # include <assert.h>
13931 #endif
15004 #include <limits.h>
1393215005 Syntax error
1393315006 _ACEOF
13934 if ac_fn_cxx_try_cpp "$LINENO"; then :
13935
13936 else
15007 if ac_fn_cxx_try_cpp "$LINENO"
15008 then :
15009
15010 else $as_nop
1393715011 # Broken: fails on valid input.
1393815012 continue
1393915013 fi
1394515019 /* end confdefs.h. */
1394615020 #include <ac_nonexistent.h>
1394715021 _ACEOF
13948 if ac_fn_cxx_try_cpp "$LINENO"; then :
15022 if ac_fn_cxx_try_cpp "$LINENO"
15023 then :
1394915024 # Broken: success on invalid input.
1395015025 continue
13951 else
15026 else $as_nop
1395215027 # Passes both tests.
1395315028 ac_preproc_ok=:
1395415029 break
1395815033 done
1395915034 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
1396015035 rm -f conftest.i conftest.err conftest.$ac_ext
13961 if $ac_preproc_ok; then :
13962
13963 else
13964 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
13965 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
15036 if $ac_preproc_ok
15037 then :
15038
15039 else $as_nop
15040 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
15041 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
1396615042 as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check
1396715043 See \`config.log' for more details" "$LINENO" 5; }
1396815044 fi
1409815174
1409915175
1410015176 # Check whether --with-gnu-ld was given.
14101 if test "${with_gnu_ld+set}" = set; then :
15177 if test ${with_gnu_ld+y}
15178 then :
1410215179 withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes
14103 else
15180 else $as_nop
1410415181 with_gnu_ld=no
1410515182 fi
1410615183
1410715184 ac_prog=ld
1410815185 if test yes = "$GCC"; then
1410915186 # Check if gcc -print-prog-name=ld gives a path.
14110 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
14111 $as_echo_n "checking for ld used by $CC... " >&6; }
15187 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
15188 printf %s "checking for ld used by $CC... " >&6; }
1411215189 case $host in
1411315190 *-*-mingw*)
1411415191 # gcc leaves a trailing carriage return, which upsets mingw
1413715214 ;;
1413815215 esac
1413915216 elif test yes = "$with_gnu_ld"; then
14140 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
14141 $as_echo_n "checking for GNU ld... " >&6; }
15217 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
15218 printf %s "checking for GNU ld... " >&6; }
1414215219 else
14143 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
14144 $as_echo_n "checking for non-GNU ld... " >&6; }
14145 fi
14146 if ${lt_cv_path_LD+:} false; then :
14147 $as_echo_n "(cached) " >&6
14148 else
15220 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
15221 printf %s "checking for non-GNU ld... " >&6; }
15222 fi
15223 if test ${lt_cv_path_LD+y}
15224 then :
15225 printf %s "(cached) " >&6
15226 else $as_nop
1414915227 if test -z "$LD"; then
1415015228 lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR
1415115229 for ac_dir in $PATH; do
1417415252
1417515253 LD=$lt_cv_path_LD
1417615254 if test -n "$LD"; then
14177 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
14178 $as_echo "$LD" >&6; }
15255 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
15256 printf "%s\n" "$LD" >&6; }
1417915257 else
14180 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
14181 $as_echo "no" >&6; }
15258 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
15259 printf "%s\n" "no" >&6; }
1418215260 fi
1418315261 test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
14184 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
14185 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
14186 if ${lt_cv_prog_gnu_ld+:} false; then :
14187 $as_echo_n "(cached) " >&6
14188 else
15262 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
15263 printf %s "checking if the linker ($LD) is GNU ld... " >&6; }
15264 if test ${lt_cv_prog_gnu_ld+y}
15265 then :
15266 printf %s "(cached) " >&6
15267 else $as_nop
1418915268 # I'd rather use --version here, but apparently some GNU lds only accept -v.
1419015269 case `$LD -v 2>&1 </dev/null` in
1419115270 *GNU* | *'with BFD'*)
1419615275 ;;
1419715276 esac
1419815277 fi
14199 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
14200 $as_echo "$lt_cv_prog_gnu_ld" >&6; }
15278 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
15279 printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; }
1420115280 with_gnu_ld=$lt_cv_prog_gnu_ld
1420215281
1420315282
1425115330 fi
1425215331
1425315332 # PORTME: fill in a description of your system's C++ link characteristics
14254 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
14255 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
15333 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
15334 printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
1425615335 ld_shlibs_CXX=yes
1425715336 case $host_os in
1425815337 aix3*)
1439015469 if test set = "${lt_cv_aix_libpath+set}"; then
1439115470 aix_libpath=$lt_cv_aix_libpath
1439215471 else
14393 if ${lt_cv_aix_libpath__CXX+:} false; then :
14394 $as_echo_n "(cached) " >&6
14395 else
15472 if test ${lt_cv_aix_libpath__CXX+y}
15473 then :
15474 printf %s "(cached) " >&6
15475 else $as_nop
1439615476 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1439715477 /* end confdefs.h. */
1439815478
1439915479 int
14400 main ()
15480 main (void)
1440115481 {
1440215482
1440315483 ;
1440415484 return 0;
1440515485 }
1440615486 _ACEOF
14407 if ac_fn_cxx_try_link "$LINENO"; then :
15487 if ac_fn_cxx_try_link "$LINENO"
15488 then :
1440815489
1440915490 lt_aix_libpath_sed='
1441015491 /Import File Strings/,/^$/ {
1441915500 lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
1442015501 fi
1442115502 fi
14422 rm -f core conftest.err conftest.$ac_objext \
15503 rm -f core conftest.err conftest.$ac_objext conftest.beam \
1442315504 conftest$ac_exeext conftest.$ac_ext
1442415505 if test -z "$lt_cv_aix_libpath__CXX"; then
1442515506 lt_cv_aix_libpath__CXX=/usr/lib:/lib
1444415525 if test set = "${lt_cv_aix_libpath+set}"; then
1444515526 aix_libpath=$lt_cv_aix_libpath
1444615527 else
14447 if ${lt_cv_aix_libpath__CXX+:} false; then :
14448 $as_echo_n "(cached) " >&6
14449 else
15528 if test ${lt_cv_aix_libpath__CXX+y}
15529 then :
15530 printf %s "(cached) " >&6
15531 else $as_nop
1445015532 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1445115533 /* end confdefs.h. */
1445215534
1445315535 int
14454 main ()
15536 main (void)
1445515537 {
1445615538
1445715539 ;
1445815540 return 0;
1445915541 }
1446015542 _ACEOF
14461 if ac_fn_cxx_try_link "$LINENO"; then :
15543 if ac_fn_cxx_try_link "$LINENO"
15544 then :
1446215545
1446315546 lt_aix_libpath_sed='
1446415547 /Import File Strings/,/^$/ {
1447315556 lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
1447415557 fi
1447515558 fi
14476 rm -f core conftest.err conftest.$ac_objext \
15559 rm -f core conftest.err conftest.$ac_objext conftest.beam \
1447715560 conftest$ac_exeext conftest.$ac_ext
1447815561 if test -z "$lt_cv_aix_libpath__CXX"; then
1447915562 lt_cv_aix_libpath__CXX=/usr/lib:/lib
1532416407 ;;
1532516408 esac
1532616409
15327 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
15328 $as_echo "$ld_shlibs_CXX" >&6; }
16410 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
16411 printf "%s\n" "$ld_shlibs_CXX" >&6; }
1532916412 test no = "$ld_shlibs_CXX" && can_build_shared=no
1533016413
1533116414 GCC_CXX=$GXX
1536316446 if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
1536416447 (eval $ac_compile) 2>&5
1536516448 ac_status=$?
15366 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
16449 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
1536716450 test $ac_status = 0; }; then
1536816451 # Parse the compiler output and extract the necessary
1536916452 # objects, libraries and library flags.
1584416927 ;;
1584516928 esac
1584616929
15847 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
15848 $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
15849 if ${lt_cv_prog_compiler_pic_CXX+:} false; then :
15850 $as_echo_n "(cached) " >&6
15851 else
16930 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
16931 printf %s "checking for $compiler option to produce PIC... " >&6; }
16932 if test ${lt_cv_prog_compiler_pic_CXX+y}
16933 then :
16934 printf %s "(cached) " >&6
16935 else $as_nop
1585216936 lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX
1585316937 fi
15854 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5
15855 $as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; }
16938 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5
16939 printf "%s\n" "$lt_cv_prog_compiler_pic_CXX" >&6; }
1585616940 lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX
1585716941
1585816942 #
1585916943 # Check to make sure the PIC flag actually works.
1586016944 #
1586116945 if test -n "$lt_prog_compiler_pic_CXX"; then
15862 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
15863 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; }
15864 if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then :
15865 $as_echo_n "(cached) " >&6
15866 else
16946 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
16947 printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; }
16948 if test ${lt_cv_prog_compiler_pic_works_CXX+y}
16949 then :
16950 printf %s "(cached) " >&6
16951 else $as_nop
1586716952 lt_cv_prog_compiler_pic_works_CXX=no
1586816953 ac_outfile=conftest.$ac_objext
1586916954 echo "$lt_simple_compile_test_code" > conftest.$ac_ext
1589416979 $RM conftest*
1589516980
1589616981 fi
15897 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5
15898 $as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; }
16982 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5
16983 printf "%s\n" "$lt_cv_prog_compiler_pic_works_CXX" >&6; }
1589916984
1590016985 if test yes = "$lt_cv_prog_compiler_pic_works_CXX"; then
1590116986 case $lt_prog_compiler_pic_CXX in
1591717002 # Check to make sure the static flag actually works.
1591817003 #
1591917004 wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\"
15920 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
15921 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
15922 if ${lt_cv_prog_compiler_static_works_CXX+:} false; then :
15923 $as_echo_n "(cached) " >&6
15924 else
17005 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
17006 printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
17007 if test ${lt_cv_prog_compiler_static_works_CXX+y}
17008 then :
17009 printf %s "(cached) " >&6
17010 else $as_nop
1592517011 lt_cv_prog_compiler_static_works_CXX=no
1592617012 save_LDFLAGS=$LDFLAGS
1592717013 LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
1594517031 LDFLAGS=$save_LDFLAGS
1594617032
1594717033 fi
15948 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5
15949 $as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; }
17034 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5
17035 printf "%s\n" "$lt_cv_prog_compiler_static_works_CXX" >&6; }
1595017036
1595117037 if test yes = "$lt_cv_prog_compiler_static_works_CXX"; then
1595217038 :
1595717043
1595817044
1595917045
15960 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
15961 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
15962 if ${lt_cv_prog_compiler_c_o_CXX+:} false; then :
15963 $as_echo_n "(cached) " >&6
15964 else
17046 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
17047 printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
17048 if test ${lt_cv_prog_compiler_c_o_CXX+y}
17049 then :
17050 printf %s "(cached) " >&6
17051 else $as_nop
1596517052 lt_cv_prog_compiler_c_o_CXX=no
1596617053 $RM -r conftest 2>/dev/null
1596717054 mkdir conftest
1600417091 $RM conftest*
1600517092
1600617093 fi
16007 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
16008 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
16009
16010
16011
16012 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
16013 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
16014 if ${lt_cv_prog_compiler_c_o_CXX+:} false; then :
16015 $as_echo_n "(cached) " >&6
16016 else
17094 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
17095 printf "%s\n" "$lt_cv_prog_compiler_c_o_CXX" >&6; }
17096
17097
17098
17099 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
17100 printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
17101 if test ${lt_cv_prog_compiler_c_o_CXX+y}
17102 then :
17103 printf %s "(cached) " >&6
17104 else $as_nop
1601717105 lt_cv_prog_compiler_c_o_CXX=no
1601817106 $RM -r conftest 2>/dev/null
1601917107 mkdir conftest
1605617144 $RM conftest*
1605717145
1605817146 fi
16059 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
16060 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; }
17147 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5
17148 printf "%s\n" "$lt_cv_prog_compiler_c_o_CXX" >&6; }
1606117149
1606217150
1606317151
1606517153 hard_links=nottested
1606617154 if test no = "$lt_cv_prog_compiler_c_o_CXX" && test no != "$need_locks"; then
1606717155 # do not overwrite the value of need_locks provided by the user
16068 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
16069 $as_echo_n "checking if we can lock with hard links... " >&6; }
17156 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
17157 printf %s "checking if we can lock with hard links... " >&6; }
1607017158 hard_links=yes
1607117159 $RM conftest*
1607217160 ln conftest.a conftest.b 2>/dev/null && hard_links=no
1607317161 touch conftest.a
1607417162 ln conftest.a conftest.b 2>&5 || hard_links=no
1607517163 ln conftest.a conftest.b 2>/dev/null && hard_links=no
16076 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
16077 $as_echo "$hard_links" >&6; }
17164 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
17165 printf "%s\n" "$hard_links" >&6; }
1607817166 if test no = "$hard_links"; then
16079 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5
16080 $as_echo "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;}
17167 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5
17168 printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;}
1608117169 need_locks=warn
1608217170 fi
1608317171 else
1608617174
1608717175
1608817176
16089 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
16090 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
17177 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
17178 printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
1609117179
1609217180 export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
1609317181 exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
1612617214 ;;
1612717215 esac
1612817216
16129 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
16130 $as_echo "$ld_shlibs_CXX" >&6; }
17217 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5
17218 printf "%s\n" "$ld_shlibs_CXX" >&6; }
1613117219 test no = "$ld_shlibs_CXX" && can_build_shared=no
1613217220
1613317221 with_gnu_ld_CXX=$with_gnu_ld
1615417242 # Test whether the compiler implicitly links with -lc since on some
1615517243 # systems, -lgcc has to come before -lc. If gcc already passes -lc
1615617244 # to ld, don't add -lc before -lgcc.
16157 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
16158 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
16159 if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then :
16160 $as_echo_n "(cached) " >&6
16161 else
17245 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
17246 printf %s "checking whether -lc should be explicitly linked in... " >&6; }
17247 if test ${lt_cv_archive_cmds_need_lc_CXX+y}
17248 then :
17249 printf %s "(cached) " >&6
17250 else $as_nop
1616217251 $RM conftest*
1616317252 echo "$lt_simple_compile_test_code" > conftest.$ac_ext
1616417253
1616517254 if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
1616617255 (eval $ac_compile) 2>&5
1616717256 ac_status=$?
16168 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
17257 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
1616917258 test $ac_status = 0; } 2>conftest.err; then
1617017259 soname=conftest
1617117260 lib=conftest
1618317272 if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
1618417273 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
1618517274 ac_status=$?
16186 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
17275 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
1618717276 test $ac_status = 0; }
1618817277 then
1618917278 lt_cv_archive_cmds_need_lc_CXX=no
1619717286 $RM conftest*
1619817287
1619917288 fi
16200 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5
16201 $as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; }
17289 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5
17290 printf "%s\n" "$lt_cv_archive_cmds_need_lc_CXX" >&6; }
1620217291 archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX
1620317292 ;;
1620417293 esac
1626717356
1626817357
1626917358
16270 { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
16271 $as_echo_n "checking dynamic linker characteristics... " >&6; }
17359 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
17360 printf %s "checking dynamic linker characteristics... " >&6; }
1627217361
1627317362 library_names_spec=
1627417363 libname_spec='lib$name'
1675617845 shlibpath_overrides_runpath=no
1675717846
1675817847 # Some binutils ld are patched to set DT_RUNPATH
16759 if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
16760 $as_echo_n "(cached) " >&6
16761 else
17848 if test ${lt_cv_shlibpath_overrides_runpath+y}
17849 then :
17850 printf %s "(cached) " >&6
17851 else $as_nop
1676217852 lt_cv_shlibpath_overrides_runpath=no
1676317853 save_LDFLAGS=$LDFLAGS
1676417854 save_libdir=$libdir
1676817858 /* end confdefs.h. */
1676917859
1677017860 int
16771 main ()
17861 main (void)
1677217862 {
1677317863
1677417864 ;
1677517865 return 0;
1677617866 }
1677717867 _ACEOF
16778 if ac_fn_cxx_try_link "$LINENO"; then :
16779 if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
17868 if ac_fn_cxx_try_link "$LINENO"
17869 then :
17870 if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null
17871 then :
1678017872 lt_cv_shlibpath_overrides_runpath=yes
1678117873 fi
1678217874 fi
16783 rm -f core conftest.err conftest.$ac_objext \
17875 rm -f core conftest.err conftest.$ac_objext conftest.beam \
1678417876 conftest$ac_exeext conftest.$ac_ext
1678517877 LDFLAGS=$save_LDFLAGS
1678617878 libdir=$save_libdir
1701218104 dynamic_linker=no
1701318105 ;;
1701418106 esac
17015 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
17016 $as_echo "$dynamic_linker" >&6; }
18107 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
18108 printf "%s\n" "$dynamic_linker" >&6; }
1701718109 test no = "$dynamic_linker" && can_build_shared=no
1701818110
1701918111 variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
1707718169
1707818170
1707918171
17080 { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
17081 $as_echo_n "checking how to hardcode library paths into programs... " >&6; }
18172 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
18173 printf %s "checking how to hardcode library paths into programs... " >&6; }
1708218174 hardcode_action_CXX=
1708318175 if test -n "$hardcode_libdir_flag_spec_CXX" ||
1708418176 test -n "$runpath_var_CXX" ||
1710218194 # directories.
1710318195 hardcode_action_CXX=unsupported
1710418196 fi
17105 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5
17106 $as_echo "$hardcode_action_CXX" >&6; }
18197 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5
18198 printf "%s\n" "$hardcode_action_CXX" >&6; }
1710718199
1710818200 if test relink = "$hardcode_action_CXX" ||
1710918201 test yes = "$inherit_rpath_CXX"; then
1715618248 if test -n "$ac_tool_prefix"; then
1715718249 # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
1715818250 set dummy ${ac_tool_prefix}gcc; ac_word=$2
17159 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
17160 $as_echo_n "checking for $ac_word... " >&6; }
17161 if ${ac_cv_prog_CC+:} false; then :
17162 $as_echo_n "(cached) " >&6
17163 else
18251 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
18252 printf %s "checking for $ac_word... " >&6; }
18253 if test ${ac_cv_prog_CC+y}
18254 then :
18255 printf %s "(cached) " >&6
18256 else $as_nop
1716418257 if test -n "$CC"; then
1716518258 ac_cv_prog_CC="$CC" # Let the user override the test.
1716618259 else
1716818261 for as_dir in $PATH
1716918262 do
1717018263 IFS=$as_save_IFS
17171 test -z "$as_dir" && as_dir=.
18264 case $as_dir in #(((
18265 '') as_dir=./ ;;
18266 */) ;;
18267 *) as_dir=$as_dir/ ;;
18268 esac
1717218269 for ac_exec_ext in '' $ac_executable_extensions; do
17173 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
18270 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
1717418271 ac_cv_prog_CC="${ac_tool_prefix}gcc"
17175 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
18272 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
1717618273 break 2
1717718274 fi
1717818275 done
1718318280 fi
1718418281 CC=$ac_cv_prog_CC
1718518282 if test -n "$CC"; then
17186 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
17187 $as_echo "$CC" >&6; }
18283 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
18284 printf "%s\n" "$CC" >&6; }
1718818285 else
17189 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
17190 $as_echo "no" >&6; }
18286 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
18287 printf "%s\n" "no" >&6; }
1719118288 fi
1719218289
1719318290
1719618293 ac_ct_CC=$CC
1719718294 # Extract the first word of "gcc", so it can be a program name with args.
1719818295 set dummy gcc; ac_word=$2
17199 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
17200 $as_echo_n "checking for $ac_word... " >&6; }
17201 if ${ac_cv_prog_ac_ct_CC+:} false; then :
17202 $as_echo_n "(cached) " >&6
17203 else
18296 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
18297 printf %s "checking for $ac_word... " >&6; }
18298 if test ${ac_cv_prog_ac_ct_CC+y}
18299 then :
18300 printf %s "(cached) " >&6
18301 else $as_nop
1720418302 if test -n "$ac_ct_CC"; then
1720518303 ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
1720618304 else
1720818306 for as_dir in $PATH
1720918307 do
1721018308 IFS=$as_save_IFS
17211 test -z "$as_dir" && as_dir=.
18309 case $as_dir in #(((
18310 '') as_dir=./ ;;
18311 */) ;;
18312 *) as_dir=$as_dir/ ;;
18313 esac
1721218314 for ac_exec_ext in '' $ac_executable_extensions; do
17213 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
18315 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
1721418316 ac_cv_prog_ac_ct_CC="gcc"
17215 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
18317 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
1721618318 break 2
1721718319 fi
1721818320 done
1722318325 fi
1722418326 ac_ct_CC=$ac_cv_prog_ac_ct_CC
1722518327 if test -n "$ac_ct_CC"; then
17226 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
17227 $as_echo "$ac_ct_CC" >&6; }
18328 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
18329 printf "%s\n" "$ac_ct_CC" >&6; }
1722818330 else
17229 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
17230 $as_echo "no" >&6; }
18331 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
18332 printf "%s\n" "no" >&6; }
1723118333 fi
1723218334
1723318335 if test "x$ac_ct_CC" = x; then
1723518337 else
1723618338 case $cross_compiling:$ac_tool_warned in
1723718339 yes:)
17238 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
17239 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
18340 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
18341 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
1724018342 ac_tool_warned=yes ;;
1724118343 esac
1724218344 CC=$ac_ct_CC
1724918351 if test -n "$ac_tool_prefix"; then
1725018352 # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
1725118353 set dummy ${ac_tool_prefix}cc; ac_word=$2
17252 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
17253 $as_echo_n "checking for $ac_word... " >&6; }
17254 if ${ac_cv_prog_CC+:} false; then :
17255 $as_echo_n "(cached) " >&6
17256 else
18354 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
18355 printf %s "checking for $ac_word... " >&6; }
18356 if test ${ac_cv_prog_CC+y}
18357 then :
18358 printf %s "(cached) " >&6
18359 else $as_nop
1725718360 if test -n "$CC"; then
1725818361 ac_cv_prog_CC="$CC" # Let the user override the test.
1725918362 else
1726118364 for as_dir in $PATH
1726218365 do
1726318366 IFS=$as_save_IFS
17264 test -z "$as_dir" && as_dir=.
18367 case $as_dir in #(((
18368 '') as_dir=./ ;;
18369 */) ;;
18370 *) as_dir=$as_dir/ ;;
18371 esac
1726518372 for ac_exec_ext in '' $ac_executable_extensions; do
17266 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
18373 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
1726718374 ac_cv_prog_CC="${ac_tool_prefix}cc"
17268 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
18375 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
1726918376 break 2
1727018377 fi
1727118378 done
1727618383 fi
1727718384 CC=$ac_cv_prog_CC
1727818385 if test -n "$CC"; then
17279 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
17280 $as_echo "$CC" >&6; }
18386 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
18387 printf "%s\n" "$CC" >&6; }
1728118388 else
17282 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
17283 $as_echo "no" >&6; }
18389 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
18390 printf "%s\n" "no" >&6; }
1728418391 fi
1728518392
1728618393
1728918396 if test -z "$CC"; then
1729018397 # Extract the first word of "cc", so it can be a program name with args.
1729118398 set dummy cc; ac_word=$2
17292 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
17293 $as_echo_n "checking for $ac_word... " >&6; }
17294 if ${ac_cv_prog_CC+:} false; then :
17295 $as_echo_n "(cached) " >&6
17296 else
18399 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
18400 printf %s "checking for $ac_word... " >&6; }
18401 if test ${ac_cv_prog_CC+y}
18402 then :
18403 printf %s "(cached) " >&6
18404 else $as_nop
1729718405 if test -n "$CC"; then
1729818406 ac_cv_prog_CC="$CC" # Let the user override the test.
1729918407 else
1730218410 for as_dir in $PATH
1730318411 do
1730418412 IFS=$as_save_IFS
17305 test -z "$as_dir" && as_dir=.
18413 case $as_dir in #(((
18414 '') as_dir=./ ;;
18415 */) ;;
18416 *) as_dir=$as_dir/ ;;
18417 esac
1730618418 for ac_exec_ext in '' $ac_executable_extensions; do
17307 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
17308 if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
18419 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
18420 if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
1730918421 ac_prog_rejected=yes
1731018422 continue
1731118423 fi
1731218424 ac_cv_prog_CC="cc"
17313 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
18425 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
1731418426 break 2
1731518427 fi
1731618428 done
1732618438 # However, it has the same basename, so the bogon will be chosen
1732718439 # first if we set CC to just the basename; use the full file name.
1732818440 shift
17329 ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
18441 ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@"
1733018442 fi
1733118443 fi
1733218444 fi
1733318445 fi
1733418446 CC=$ac_cv_prog_CC
1733518447 if test -n "$CC"; then
17336 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
17337 $as_echo "$CC" >&6; }
18448 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
18449 printf "%s\n" "$CC" >&6; }
1733818450 else
17339 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
17340 $as_echo "no" >&6; }
18451 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
18452 printf "%s\n" "no" >&6; }
1734118453 fi
1734218454
1734318455
1734818460 do
1734918461 # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
1735018462 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
17351 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
17352 $as_echo_n "checking for $ac_word... " >&6; }
17353 if ${ac_cv_prog_CC+:} false; then :
17354 $as_echo_n "(cached) " >&6
17355 else
18463 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
18464 printf %s "checking for $ac_word... " >&6; }
18465 if test ${ac_cv_prog_CC+y}
18466 then :
18467 printf %s "(cached) " >&6
18468 else $as_nop
1735618469 if test -n "$CC"; then
1735718470 ac_cv_prog_CC="$CC" # Let the user override the test.
1735818471 else
1736018473 for as_dir in $PATH
1736118474 do
1736218475 IFS=$as_save_IFS
17363 test -z "$as_dir" && as_dir=.
18476 case $as_dir in #(((
18477 '') as_dir=./ ;;
18478 */) ;;
18479 *) as_dir=$as_dir/ ;;
18480 esac
1736418481 for ac_exec_ext in '' $ac_executable_extensions; do
17365 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
18482 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
1736618483 ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
17367 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
18484 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
1736818485 break 2
1736918486 fi
1737018487 done
1737518492 fi
1737618493 CC=$ac_cv_prog_CC
1737718494 if test -n "$CC"; then
17378 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
17379 $as_echo "$CC" >&6; }
18495 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
18496 printf "%s\n" "$CC" >&6; }
1738018497 else
17381 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
17382 $as_echo "no" >&6; }
18498 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
18499 printf "%s\n" "no" >&6; }
1738318500 fi
1738418501
1738518502
1739218509 do
1739318510 # Extract the first word of "$ac_prog", so it can be a program name with args.
1739418511 set dummy $ac_prog; ac_word=$2
17395 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
17396 $as_echo_n "checking for $ac_word... " >&6; }
17397 if ${ac_cv_prog_ac_ct_CC+:} false; then :
17398 $as_echo_n "(cached) " >&6
17399 else
18512 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
18513 printf %s "checking for $ac_word... " >&6; }
18514 if test ${ac_cv_prog_ac_ct_CC+y}
18515 then :
18516 printf %s "(cached) " >&6
18517 else $as_nop
1740018518 if test -n "$ac_ct_CC"; then
1740118519 ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
1740218520 else
1740418522 for as_dir in $PATH
1740518523 do
1740618524 IFS=$as_save_IFS
17407 test -z "$as_dir" && as_dir=.
18525 case $as_dir in #(((
18526 '') as_dir=./ ;;
18527 */) ;;
18528 *) as_dir=$as_dir/ ;;
18529 esac
1740818530 for ac_exec_ext in '' $ac_executable_extensions; do
17409 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
18531 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
1741018532 ac_cv_prog_ac_ct_CC="$ac_prog"
17411 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
18533 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
1741218534 break 2
1741318535 fi
1741418536 done
1741918541 fi
1742018542 ac_ct_CC=$ac_cv_prog_ac_ct_CC
1742118543 if test -n "$ac_ct_CC"; then
17422 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
17423 $as_echo "$ac_ct_CC" >&6; }
18544 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
18545 printf "%s\n" "$ac_ct_CC" >&6; }
1742418546 else
17425 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
17426 $as_echo "no" >&6; }
18547 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
18548 printf "%s\n" "no" >&6; }
1742718549 fi
1742818550
1742918551
1743518557 else
1743618558 case $cross_compiling:$ac_tool_warned in
1743718559 yes:)
17438 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
17439 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
18560 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
18561 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
1744018562 ac_tool_warned=yes ;;
1744118563 esac
1744218564 CC=$ac_ct_CC
1744418566 fi
1744518567
1744618568 fi
17447
17448
17449 test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
17450 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
18569 if test -z "$CC"; then
18570 if test -n "$ac_tool_prefix"; then
18571 # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args.
18572 set dummy ${ac_tool_prefix}clang; ac_word=$2
18573 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
18574 printf %s "checking for $ac_word... " >&6; }
18575 if test ${ac_cv_prog_CC+y}
18576 then :
18577 printf %s "(cached) " >&6
18578 else $as_nop
18579 if test -n "$CC"; then
18580 ac_cv_prog_CC="$CC" # Let the user override the test.
18581 else
18582 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
18583 for as_dir in $PATH
18584 do
18585 IFS=$as_save_IFS
18586 case $as_dir in #(((
18587 '') as_dir=./ ;;
18588 */) ;;
18589 *) as_dir=$as_dir/ ;;
18590 esac
18591 for ac_exec_ext in '' $ac_executable_extensions; do
18592 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
18593 ac_cv_prog_CC="${ac_tool_prefix}clang"
18594 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
18595 break 2
18596 fi
18597 done
18598 done
18599 IFS=$as_save_IFS
18600
18601 fi
18602 fi
18603 CC=$ac_cv_prog_CC
18604 if test -n "$CC"; then
18605 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
18606 printf "%s\n" "$CC" >&6; }
18607 else
18608 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
18609 printf "%s\n" "no" >&6; }
18610 fi
18611
18612
18613 fi
18614 if test -z "$ac_cv_prog_CC"; then
18615 ac_ct_CC=$CC
18616 # Extract the first word of "clang", so it can be a program name with args.
18617 set dummy clang; ac_word=$2
18618 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
18619 printf %s "checking for $ac_word... " >&6; }
18620 if test ${ac_cv_prog_ac_ct_CC+y}
18621 then :
18622 printf %s "(cached) " >&6
18623 else $as_nop
18624 if test -n "$ac_ct_CC"; then
18625 ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
18626 else
18627 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
18628 for as_dir in $PATH
18629 do
18630 IFS=$as_save_IFS
18631 case $as_dir in #(((
18632 '') as_dir=./ ;;
18633 */) ;;
18634 *) as_dir=$as_dir/ ;;
18635 esac
18636 for ac_exec_ext in '' $ac_executable_extensions; do
18637 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
18638 ac_cv_prog_ac_ct_CC="clang"
18639 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
18640 break 2
18641 fi
18642 done
18643 done
18644 IFS=$as_save_IFS
18645
18646 fi
18647 fi
18648 ac_ct_CC=$ac_cv_prog_ac_ct_CC
18649 if test -n "$ac_ct_CC"; then
18650 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
18651 printf "%s\n" "$ac_ct_CC" >&6; }
18652 else
18653 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
18654 printf "%s\n" "no" >&6; }
18655 fi
18656
18657 if test "x$ac_ct_CC" = x; then
18658 CC=""
18659 else
18660 case $cross_compiling:$ac_tool_warned in
18661 yes:)
18662 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
18663 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
18664 ac_tool_warned=yes ;;
18665 esac
18666 CC=$ac_ct_CC
18667 fi
18668 else
18669 CC="$ac_cv_prog_CC"
18670 fi
18671
18672 fi
18673
18674
18675 test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
18676 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
1745118677 as_fn_error $? "no acceptable C compiler found in \$PATH
1745218678 See \`config.log' for more details" "$LINENO" 5; }
1745318679
1745418680 # Provide some information about the compiler.
17455 $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
18681 printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
1745618682 set X $ac_compile
1745718683 ac_compiler=$2
17458 for ac_option in --version -v -V -qversion; do
18684 for ac_option in --version -v -V -qversion -version; do
1745918685 { { ac_try="$ac_compiler $ac_option >&5"
1746018686 case "(($ac_try" in
1746118687 *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
1746218688 *) ac_try_echo=$ac_try;;
1746318689 esac
1746418690 eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
17465 $as_echo "$ac_try_echo"; } >&5
18691 printf "%s\n" "$ac_try_echo"; } >&5
1746618692 (eval "$ac_compiler $ac_option >&5") 2>conftest.err
1746718693 ac_status=$?
1746818694 if test -s conftest.err; then
1747218698 cat conftest.er1 >&5
1747318699 fi
1747418700 rm -f conftest.er1 conftest.err
17475 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
18701 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
1747618702 test $ac_status = 0; }
1747718703 done
1747818704
17479 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
17480 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
17481 if ${ac_cv_c_compiler_gnu+:} false; then :
17482 $as_echo_n "(cached) " >&6
17483 else
18705 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5
18706 printf %s "checking whether the compiler supports GNU C... " >&6; }
18707 if test ${ac_cv_c_compiler_gnu+y}
18708 then :
18709 printf %s "(cached) " >&6
18710 else $as_nop
1748418711 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1748518712 /* end confdefs.h. */
1748618713
1748718714 int
17488 main ()
18715 main (void)
1748918716 {
1749018717 #ifndef __GNUC__
1749118718 choke me
1749518722 return 0;
1749618723 }
1749718724 _ACEOF
17498 if ac_fn_c_try_compile "$LINENO"; then :
18725 if ac_fn_c_try_compile "$LINENO"
18726 then :
1749918727 ac_compiler_gnu=yes
17500 else
18728 else $as_nop
1750118729 ac_compiler_gnu=no
1750218730 fi
17503 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
18731 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
1750418732 ac_cv_c_compiler_gnu=$ac_compiler_gnu
1750518733
1750618734 fi
17507 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
17508 $as_echo "$ac_cv_c_compiler_gnu" >&6; }
18735 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
18736 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; }
18737 ac_compiler_gnu=$ac_cv_c_compiler_gnu
18738
1750918739 if test $ac_compiler_gnu = yes; then
1751018740 GCC=yes
1751118741 else
1751218742 GCC=
1751318743 fi
17514 ac_test_CFLAGS=${CFLAGS+set}
18744 ac_test_CFLAGS=${CFLAGS+y}
1751518745 ac_save_CFLAGS=$CFLAGS
17516 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
17517 $as_echo_n "checking whether $CC accepts -g... " >&6; }
17518 if ${ac_cv_prog_cc_g+:} false; then :
17519 $as_echo_n "(cached) " >&6
17520 else
18746 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
18747 printf %s "checking whether $CC accepts -g... " >&6; }
18748 if test ${ac_cv_prog_cc_g+y}
18749 then :
18750 printf %s "(cached) " >&6
18751 else $as_nop
1752118752 ac_save_c_werror_flag=$ac_c_werror_flag
1752218753 ac_c_werror_flag=yes
1752318754 ac_cv_prog_cc_g=no
1752618757 /* end confdefs.h. */
1752718758
1752818759 int
17529 main ()
18760 main (void)
1753018761 {
1753118762
1753218763 ;
1753318764 return 0;
1753418765 }
1753518766 _ACEOF
17536 if ac_fn_c_try_compile "$LINENO"; then :
18767 if ac_fn_c_try_compile "$LINENO"
18768 then :
1753718769 ac_cv_prog_cc_g=yes
17538 else
18770 else $as_nop
1753918771 CFLAGS=""
1754018772 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1754118773 /* end confdefs.h. */
1754218774
1754318775 int
17544 main ()
18776 main (void)
1754518777 {
1754618778
1754718779 ;
1754818780 return 0;
1754918781 }
1755018782 _ACEOF
17551 if ac_fn_c_try_compile "$LINENO"; then :
17552
17553 else
18783 if ac_fn_c_try_compile "$LINENO"
18784 then :
18785
18786 else $as_nop
1755418787 ac_c_werror_flag=$ac_save_c_werror_flag
1755518788 CFLAGS="-g"
1755618789 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1755718790 /* end confdefs.h. */
1755818791
1755918792 int
17560 main ()
18793 main (void)
1756118794 {
1756218795
1756318796 ;
1756418797 return 0;
1756518798 }
1756618799 _ACEOF
17567 if ac_fn_c_try_compile "$LINENO"; then :
18800 if ac_fn_c_try_compile "$LINENO"
18801 then :
1756818802 ac_cv_prog_cc_g=yes
1756918803 fi
17570 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
17571 fi
17572 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
17573 fi
17574 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
18804 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
18805 fi
18806 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
18807 fi
18808 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
1757518809 ac_c_werror_flag=$ac_save_c_werror_flag
1757618810 fi
17577 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
17578 $as_echo "$ac_cv_prog_cc_g" >&6; }
17579 if test "$ac_test_CFLAGS" = set; then
18811 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
18812 printf "%s\n" "$ac_cv_prog_cc_g" >&6; }
18813 if test $ac_test_CFLAGS; then
1758018814 CFLAGS=$ac_save_CFLAGS
1758118815 elif test $ac_cv_prog_cc_g = yes; then
1758218816 if test "$GCC" = yes; then
1759118825 CFLAGS=
1759218826 fi
1759318827 fi
17594 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
17595 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
17596 if ${ac_cv_prog_cc_c89+:} false; then :
17597 $as_echo_n "(cached) " >&6
17598 else
18828 ac_prog_cc_stdc=no
18829 if test x$ac_prog_cc_stdc = xno
18830 then :
18831 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5
18832 printf %s "checking for $CC option to enable C11 features... " >&6; }
18833 if test ${ac_cv_prog_cc_c11+y}
18834 then :
18835 printf %s "(cached) " >&6
18836 else $as_nop
18837 ac_cv_prog_cc_c11=no
18838 ac_save_CC=$CC
18839 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
18840 /* end confdefs.h. */
18841 $ac_c_conftest_c11_program
18842 _ACEOF
18843 for ac_arg in '' -std=gnu11
18844 do
18845 CC="$ac_save_CC $ac_arg"
18846 if ac_fn_c_try_compile "$LINENO"
18847 then :
18848 ac_cv_prog_cc_c11=$ac_arg
18849 fi
18850 rm -f core conftest.err conftest.$ac_objext conftest.beam
18851 test "x$ac_cv_prog_cc_c11" != "xno" && break
18852 done
18853 rm -f conftest.$ac_ext
18854 CC=$ac_save_CC
18855 fi
18856
18857 if test "x$ac_cv_prog_cc_c11" = xno
18858 then :
18859 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
18860 printf "%s\n" "unsupported" >&6; }
18861 else $as_nop
18862 if test "x$ac_cv_prog_cc_c11" = x
18863 then :
18864 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
18865 printf "%s\n" "none needed" >&6; }
18866 else $as_nop
18867 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5
18868 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; }
18869 CC="$CC $ac_cv_prog_cc_c11"
18870 fi
18871 ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11
18872 ac_prog_cc_stdc=c11
18873 fi
18874 fi
18875 if test x$ac_prog_cc_stdc = xno
18876 then :
18877 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5
18878 printf %s "checking for $CC option to enable C99 features... " >&6; }
18879 if test ${ac_cv_prog_cc_c99+y}
18880 then :
18881 printf %s "(cached) " >&6
18882 else $as_nop
18883 ac_cv_prog_cc_c99=no
18884 ac_save_CC=$CC
18885 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
18886 /* end confdefs.h. */
18887 $ac_c_conftest_c99_program
18888 _ACEOF
18889 for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99=
18890 do
18891 CC="$ac_save_CC $ac_arg"
18892 if ac_fn_c_try_compile "$LINENO"
18893 then :
18894 ac_cv_prog_cc_c99=$ac_arg
18895 fi
18896 rm -f core conftest.err conftest.$ac_objext conftest.beam
18897 test "x$ac_cv_prog_cc_c99" != "xno" && break
18898 done
18899 rm -f conftest.$ac_ext
18900 CC=$ac_save_CC
18901 fi
18902
18903 if test "x$ac_cv_prog_cc_c99" = xno
18904 then :
18905 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
18906 printf "%s\n" "unsupported" >&6; }
18907 else $as_nop
18908 if test "x$ac_cv_prog_cc_c99" = x
18909 then :
18910 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
18911 printf "%s\n" "none needed" >&6; }
18912 else $as_nop
18913 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
18914 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; }
18915 CC="$CC $ac_cv_prog_cc_c99"
18916 fi
18917 ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99
18918 ac_prog_cc_stdc=c99
18919 fi
18920 fi
18921 if test x$ac_prog_cc_stdc = xno
18922 then :
18923 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5
18924 printf %s "checking for $CC option to enable C89 features... " >&6; }
18925 if test ${ac_cv_prog_cc_c89+y}
18926 then :
18927 printf %s "(cached) " >&6
18928 else $as_nop
1759918929 ac_cv_prog_cc_c89=no
1760018930 ac_save_CC=$CC
1760118931 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1760218932 /* end confdefs.h. */
17603 #include <stdarg.h>
17604 #include <stdio.h>
17605 struct stat;
17606 /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
17607 struct buf { int x; };
17608 FILE * (*rcsopen) (struct buf *, struct stat *, int);
17609 static char *e (p, i)
17610 char **p;
17611 int i;
17612 {
17613 return p[i];
17614 }
17615 static char *f (char * (*g) (char **, int), char **p, ...)
17616 {
17617 char *s;
17618 va_list v;
17619 va_start (v,p);
17620 s = g (p, va_arg (v,int));
17621 va_end (v);
17622 return s;
17623 }
17624
17625 /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
17626 function prototypes and stuff, but not '\xHH' hex character constants.
17627 These don't provoke an error unfortunately, instead are silently treated
17628 as 'x'. The following induces an error, until -std is added to get
17629 proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
17630 array size at least. It's necessary to write '\x00'==0 to get something
17631 that's true only with -std. */
17632 int osf4_cc_array ['\x00' == 0 ? 1 : -1];
17633
17634 /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
17635 inside strings and character constants. */
17636 #define FOO(x) 'x'
17637 int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
17638
17639 int test (int i, double x);
17640 struct s1 {int (*f) (int a);};
17641 struct s2 {int (*f) (double a);};
17642 int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
17643 int argc;
17644 char **argv;
17645 int
17646 main ()
17647 {
17648 return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
17649 ;
17650 return 0;
17651 }
18933 $ac_c_conftest_c89_program
1765218934 _ACEOF
17653 for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
17654 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
18935 for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
1765518936 do
1765618937 CC="$ac_save_CC $ac_arg"
17657 if ac_fn_c_try_compile "$LINENO"; then :
18938 if ac_fn_c_try_compile "$LINENO"
18939 then :
1765818940 ac_cv_prog_cc_c89=$ac_arg
1765918941 fi
17660 rm -f core conftest.err conftest.$ac_objext
18942 rm -f core conftest.err conftest.$ac_objext conftest.beam
1766118943 test "x$ac_cv_prog_cc_c89" != "xno" && break
1766218944 done
1766318945 rm -f conftest.$ac_ext
1766418946 CC=$ac_save_CC
17665
17666 fi
17667 # AC_CACHE_VAL
17668 case "x$ac_cv_prog_cc_c89" in
17669 x)
17670 { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
17671 $as_echo "none needed" >&6; } ;;
17672 xno)
17673 { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
17674 $as_echo "unsupported" >&6; } ;;
17675 *)
17676 CC="$CC $ac_cv_prog_cc_c89"
17677 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
17678 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
17679 esac
17680 if test "x$ac_cv_prog_cc_c89" != xno; then :
17681
18947 fi
18948
18949 if test "x$ac_cv_prog_cc_c89" = xno
18950 then :
18951 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
18952 printf "%s\n" "unsupported" >&6; }
18953 else $as_nop
18954 if test "x$ac_cv_prog_cc_c89" = x
18955 then :
18956 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
18957 printf "%s\n" "none needed" >&6; }
18958 else $as_nop
18959 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
18960 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; }
18961 CC="$CC $ac_cv_prog_cc_c89"
18962 fi
18963 ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89
18964 ac_prog_cc_stdc=c89
18965 fi
1768218966 fi
1768318967
1768418968 ac_ext=c
1768718971 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
1768818972 ac_compiler_gnu=$ac_cv_c_compiler_gnu
1768918973
17690 ac_ext=c
18974
18975 ac_ext=c
1769118976 ac_cpp='$CPP $CPPFLAGS'
1769218977 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
1769318978 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
1769418979 ac_compiler_gnu=$ac_cv_c_compiler_gnu
17695 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
17696 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
17697 if ${am_cv_prog_cc_c_o+:} false; then :
17698 $as_echo_n "(cached) " >&6
17699 else
18980 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
18981 printf %s "checking whether $CC understands -c and -o together... " >&6; }
18982 if test ${am_cv_prog_cc_c_o+y}
18983 then :
18984 printf %s "(cached) " >&6
18985 else $as_nop
1770018986 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1770118987 /* end confdefs.h. */
1770218988
1770318989 int
17704 main ()
18990 main (void)
1770518991 {
1770618992
1770718993 ;
1772919015 rm -f core conftest*
1773019016 unset am_i
1773119017 fi
17732 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
17733 $as_echo "$am_cv_prog_cc_c_o" >&6; }
19018 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
19019 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; }
1773419020 if test "$am_cv_prog_cc_c_o" != yes; then
1773519021 # Losing compiler, so override with the script.
1773619022 # FIXME: It is wrong to rewrite CC.
1774819034
1774919035 depcc="$CC" am_compiler_list=
1775019036
17751 { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
17752 $as_echo_n "checking dependency style of $depcc... " >&6; }
17753 if ${am_cv_CC_dependencies_compiler_type+:} false; then :
17754 $as_echo_n "(cached) " >&6
17755 else
19037 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
19038 printf %s "checking dependency style of $depcc... " >&6; }
19039 if test ${am_cv_CC_dependencies_compiler_type+y}
19040 then :
19041 printf %s "(cached) " >&6
19042 else $as_nop
1775619043 if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
1775719044 # We make a subdir and do the tests there. Otherwise we can end up
1775819045 # making bogus files that we don't know about and never remove. For
1785919146 fi
1786019147
1786119148 fi
17862 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
17863 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
19149 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
19150 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; }
1786419151 CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
1786519152
1786619153 if
1787519162
1787619163
1787719164
17878 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5
17879 $as_echo_n "checking for $CC option to accept ISO C99... " >&6; }
17880 if ${ac_cv_prog_cc_c99+:} false; then :
17881 $as_echo_n "(cached) " >&6
17882 else
17883 ac_cv_prog_cc_c99=no
17884 ac_save_CC=$CC
17885 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
19165 # AC_PROG_CC_C99 obsolete, detected inside AC_PROG_CC, since autoconf 2.70
19166
19167 CFLAGS=$CFLAGS_save
19168
19169
19170 if test -z "$CC_FOR_BUILD"
19171 then :
19172
19173 CC_FOR_BUILD=$CC
19174
19175
19176 fi
19177
19178 ####################################################################
19179 # CLI arguments
19180 ####################################################################
19181
19182 # Define hwloc's configure arguments
19183
19184 # Embedded mode, or standalone?
19185 # Check whether --enable-embedded-mode was given.
19186 if test ${enable_embedded_mode+y}
19187 then :
19188 enableval=$enable_embedded_mode;
19189 fi
19190
19191
19192 # Change the symbol prefix?
19193
19194 # Check whether --with-hwloc-symbol-prefix was given.
19195 if test ${with_hwloc_symbol_prefix+y}
19196 then :
19197 withval=$with_hwloc_symbol_prefix;
19198 fi
19199
19200
19201 # For the windows build
19202
19203
19204 # Debug mode?
19205 # Check whether --enable-debug was given.
19206 if test ${enable_debug+y}
19207 then :
19208 enableval=$enable_debug;
19209 fi
19210
19211
19212 # Doxygen?
19213 # Check whether --enable-doxygen was given.
19214 if test ${enable_doxygen+y}
19215 then :
19216 enableval=$enable_doxygen;
19217 fi
19218
19219
19220 # Picky?
19221 # Check whether --enable-picky was given.
19222 if test ${enable_picky+y}
19223 then :
19224 enableval=$enable_picky;
19225 fi
19226
19227
19228 # Cairo?
19229 # Check whether --enable-cairo was given.
19230 if test ${enable_cairo+y}
19231 then :
19232 enableval=$enable_cairo;
19233 fi
19234
19235
19236 # CPUID
19237 # Check whether --enable-cpuid was given.
19238 if test ${enable_cpuid+y}
19239 then :
19240 enableval=$enable_cpuid;
19241 fi
19242
19243
19244 # XML using libxml2?
19245 # Check whether --enable-libxml2 was given.
19246 if test ${enable_libxml2+y}
19247 then :
19248 enableval=$enable_libxml2;
19249 fi
19250
19251
19252 # I/O?
19253 # Check whether --enable-io was given.
19254 if test ${enable_io+y}
19255 then :
19256 enableval=$enable_io;
19257 fi
19258
19259
19260 # PCI?
19261 # Check whether --enable-pci was given.
19262 if test ${enable_pci+y}
19263 then :
19264 enableval=$enable_pci;
19265 fi
19266
19267 # 32bits_pci_domain?
19268 # Check whether --enable-32bits-pci-domain was given.
19269 if test ${enable_32bits_pci_domain+y}
19270 then :
19271 enableval=$enable_32bits_pci_domain;
19272 fi
19273
19274
19275 # OpenCL?
19276 # Check whether --enable-opencl was given.
19277 if test ${enable_opencl+y}
19278 then :
19279 enableval=$enable_opencl;
19280 fi
19281
19282
19283 # CUDA?
19284 # Check whether --enable-cuda was given.
19285 if test ${enable_cuda+y}
19286 then :
19287 enableval=$enable_cuda;
19288 fi
19289
19290
19291 # NVML?
19292 # Check whether --enable-nvml was given.
19293 if test ${enable_nvml+y}
19294 then :
19295 enableval=$enable_nvml;
19296 fi
19297
19298
19299 # CUDA version (for using its pkg-config cuda-x.y.pc)
19300
19301 # Check whether --with-cuda-version was given.
19302 if test ${with_cuda_version+y}
19303 then :
19304 withval=$with_cuda_version;
19305 fi
19306
19307
19308 # CUDA install path (and NVML and OpenCL)
19309
19310 # Check whether --with-cuda was given.
19311 if test ${with_cuda+y}
19312 then :
19313 withval=$with_cuda;
19314 fi
19315
19316
19317 # RSMI?
19318 # Check whether --enable-rsmi was given.
19319 if test ${enable_rsmi+y}
19320 then :
19321 enableval=$enable_rsmi;
19322 fi
19323
19324
19325 # LevelZero
19326 # Check whether --enable-levelzero was given.
19327 if test ${enable_levelzero+y}
19328 then :
19329 enableval=$enable_levelzero;
19330 fi
19331
19332
19333 # GL/Display
19334 # Check whether --enable-gl was given.
19335 if test ${enable_gl+y}
19336 then :
19337 enableval=$enable_gl;
19338 fi
19339
19340
19341 # LibUdev
19342 # Check whether --enable-libudev was given.
19343 if test ${enable_libudev+y}
19344 then :
19345 enableval=$enable_libudev;
19346 fi
19347
19348
19349 # Plugins
19350 # Check whether --enable-plugins was given.
19351 if test ${enable_plugins+y}
19352 then :
19353 enableval=$enable_plugins;
19354 fi
19355
19356
19357 # Look for dlopen
19358 # Not --disable-dlopen because $enable_dlopen is already used/set
19359 # Check whether --enable-plugin-dlopen was given.
19360 if test ${enable_plugin_dlopen+y}
19361 then :
19362 enableval=$enable_plugin_dlopen;
19363 fi
19364
19365 # Look for ltdl
19366 # Not --disable-ltdl for consistency wrt dlopen above
19367 # Check whether --enable-plugin-ltdl was given.
19368 if test ${enable_plugin_ltdl+y}
19369 then :
19370 enableval=$enable_plugin_ltdl;
19371 fi
19372
19373
19374
19375
19376 # If debug mode, add -g
19377 if test "$hwloc_debug" = "1"
19378 then :
19379 CFLAGS="$CFLAGS -g"
19380 fi
19381
19382 # If the user didn't specifically ask for embedding mode, default to
19383 # standalone mode
19384 if test "$enable_embedded_mode" != "yes"
19385 then :
19386 if test ! -d "$srcdir/doc"
19387 then :
19388 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: The hwloc source tree looks incomplete for a standalone" >&5
19389 printf "%s\n" "$as_me: WARNING: The hwloc source tree looks incomplete for a standalone" >&2;}
19390 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: build. Perhaps this hwloc tree is intended for an embedded" >&5
19391 printf "%s\n" "$as_me: WARNING: build. Perhaps this hwloc tree is intended for an embedded" >&2;}
19392 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: build? Try using the --enable-embedded-mode switch." >&5
19393 printf "%s\n" "$as_me: WARNING: build? Try using the --enable-embedded-mode switch." >&2;}
19394 as_fn_error $? "Cannot build standalone hwloc" "$LINENO" 5
19395 else $as_nop
19396
19397 hwloc_mode=standalone
19398
19399 fi
19400 fi
19401
19402 ####################################################################
19403 # Setup for the hwloc API
19404 ####################################################################
19405
19406
19407
19408 # Setup the hwloc core
19409 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5
19410 printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; }
19411 if test ${ac_cv_c_undeclared_builtin_options+y}
19412 then :
19413 printf %s "(cached) " >&6
19414 else $as_nop
19415 ac_save_CFLAGS=$CFLAGS
19416 ac_cv_c_undeclared_builtin_options='cannot detect'
19417 for ac_arg in '' -fno-builtin; do
19418 CFLAGS="$ac_save_CFLAGS $ac_arg"
19419 # This test program should *not* compile successfully.
19420 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1788619421 /* end confdefs.h. */
17887 #include <stdarg.h>
17888 #include <stdbool.h>
17889 #include <stdlib.h>
17890 #include <wchar.h>
17891 #include <stdio.h>
17892
17893 // Check varargs macros. These examples are taken from C99 6.10.3.5.
17894 #define debug(...) fprintf (stderr, __VA_ARGS__)
17895 #define showlist(...) puts (#__VA_ARGS__)
17896 #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
17897 static void
17898 test_varargs_macros (void)
19422
19423 int
19424 main (void)
1789919425 {
17900 int x = 1234;
17901 int y = 5678;
17902 debug ("Flag");
17903 debug ("X = %d\n", x);
17904 showlist (The first, second, and third items.);
17905 report (x>y, "x is %d but y is %d", x, y);
17906 }
17907
17908 // Check long long types.
17909 #define BIG64 18446744073709551615ull
17910 #define BIG32 4294967295ul
17911 #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
17912 #if !BIG_OK
17913 your preprocessor is broken;
17914 #endif
17915 #if BIG_OK
17916 #else
17917 your preprocessor is broken;
17918 #endif
17919 static long long int bignum = -9223372036854775807LL;
17920 static unsigned long long int ubignum = BIG64;
17921
17922 struct incomplete_array
17923 {
17924 int datasize;
17925 double data[];
17926 };
17927
17928 struct named_init {
17929 int number;
17930 const wchar_t *name;
17931 double average;
17932 };
17933
17934 typedef const char *ccp;
17935
17936 static inline int
17937 test_restrict (ccp restrict text)
17938 {
17939 // See if C++-style comments work.
17940 // Iterate through items via the restricted pointer.
17941 // Also check for declarations in for loops.
17942 for (unsigned int i = 0; *(text+i) != '\0'; ++i)
17943 continue;
17944 return 0;
17945 }
17946
17947 // Check varargs and va_copy.
17948 static void
17949 test_varargs (const char *format, ...)
17950 {
17951 va_list args;
17952 va_start (args, format);
17953 va_list args_copy;
17954 va_copy (args_copy, args);
17955
17956 const char *str;
17957 int number;
17958 float fnumber;
17959
17960 while (*format)
17961 {
17962 switch (*format++)
17963 {
17964 case 's': // string
17965 str = va_arg (args_copy, const char *);
17966 break;
17967 case 'd': // int
17968 number = va_arg (args_copy, int);
17969 break;
17970 case 'f': // float
17971 fnumber = va_arg (args_copy, double);
17972 break;
17973 default:
17974 break;
17975 }
17976 }
17977 va_end (args_copy);
17978 va_end (args);
17979 }
17980
17981 int
17982 main ()
17983 {
17984
17985 // Check bool.
17986 _Bool success = false;
17987
17988 // Check restrict.
17989 if (test_restrict ("String literal") == 0)
17990 success = true;
17991 char *restrict newvar = "Another string";
17992
17993 // Check varargs.
17994 test_varargs ("s, d' f .", "string", 65, 34.234);
17995 test_varargs_macros ();
17996
17997 // Check flexible array members.
17998 struct incomplete_array *ia =
17999 malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
18000 ia->datasize = 10;
18001 for (int i = 0; i < ia->datasize; ++i)
18002 ia->data[i] = i * 1.234;
18003
18004 // Check named initializers.
18005 struct named_init ni = {
18006 .number = 34,
18007 .name = L"Test wide string",
18008 .average = 543.34343,
18009 };
18010
18011 ni.number = 58;
18012
18013 int dynamic_array[ni.number];
18014 dynamic_array[ni.number - 1] = 543;
18015
18016 // work around unused variable warnings
18017 return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x'
18018 || dynamic_array[ni.number - 1] != 543);
18019
19426 (void) strchr;
1802019427 ;
1802119428 return 0;
1802219429 }
1802319430 _ACEOF
18024 for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99
18025 do
18026 CC="$ac_save_CC $ac_arg"
18027 if ac_fn_c_try_compile "$LINENO"; then :
18028 ac_cv_prog_cc_c99=$ac_arg
18029 fi
18030 rm -f core conftest.err conftest.$ac_objext
18031 test "x$ac_cv_prog_cc_c99" != "xno" && break
18032 done
18033 rm -f conftest.$ac_ext
18034 CC=$ac_save_CC
18035
18036 fi
18037 # AC_CACHE_VAL
18038 case "x$ac_cv_prog_cc_c99" in
18039 x)
18040 { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
18041 $as_echo "none needed" >&6; } ;;
18042 xno)
18043 { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
18044 $as_echo "unsupported" >&6; } ;;
18045 *)
18046 CC="$CC $ac_cv_prog_cc_c99"
18047 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
18048 $as_echo "$ac_cv_prog_cc_c99" >&6; } ;;
19431 if ac_fn_c_try_compile "$LINENO"
19432 then :
19433
19434 else $as_nop
19435 # This test program should compile successfully.
19436 # No library function is consistently available on
19437 # freestanding implementations, so test against a dummy
19438 # declaration. Include always-available headers on the
19439 # off chance that they somehow elicit warnings.
19440 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
19441 /* end confdefs.h. */
19442 #include <float.h>
19443 #include <limits.h>
19444 #include <stdarg.h>
19445 #include <stddef.h>
19446 extern void ac_decl (int, char *);
19447
19448 int
19449 main (void)
19450 {
19451 (void) ac_decl (0, (char *) 0);
19452 (void) ac_decl;
19453
19454 ;
19455 return 0;
19456 }
19457 _ACEOF
19458 if ac_fn_c_try_compile "$LINENO"
19459 then :
19460 if test x"$ac_arg" = x
19461 then :
19462 ac_cv_c_undeclared_builtin_options='none needed'
19463 else $as_nop
19464 ac_cv_c_undeclared_builtin_options=$ac_arg
19465 fi
19466 break
19467 fi
19468 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
19469 fi
19470 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
19471 done
19472 CFLAGS=$ac_save_CFLAGS
19473
19474 fi
19475 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_undeclared_builtin_options" >&5
19476 printf "%s\n" "$ac_cv_c_undeclared_builtin_options" >&6; }
19477 case $ac_cv_c_undeclared_builtin_options in #(
19478 'cannot detect') :
19479 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
19480 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
19481 as_fn_error $? "cannot make $CC report undeclared builtins
19482 See \`config.log' for more details" "$LINENO" 5; } ;; #(
19483 'none needed') :
19484 ac_c_undeclared_builtin_options='' ;; #(
19485 *) :
19486 ac_c_undeclared_builtin_options=$ac_cv_c_undeclared_builtin_options ;;
1804919487 esac
18050 if test "x$ac_cv_prog_cc_c99" != xno; then :
18051
18052 fi
18053
18054
18055 CFLAGS=$CFLAGS_save
18056
18057
18058 if test -z "$CC_FOR_BUILD"; then :
18059
18060 CC_FOR_BUILD=$CC
18061
18062
18063 fi
18064
18065 ####################################################################
18066 # CLI arguments
18067 ####################################################################
18068
18069 # Define hwloc's configure arguments
18070
18071 # Embedded mode, or standalone?
18072 # Check whether --enable-embedded-mode was given.
18073 if test "${enable_embedded_mode+set}" = set; then :
18074 enableval=$enable_embedded_mode;
18075 fi
18076
18077
18078 # Change the symbol prefix?
18079
18080 # Check whether --with-hwloc-symbol-prefix was given.
18081 if test "${with_hwloc_symbol_prefix+set}" = set; then :
18082 withval=$with_hwloc_symbol_prefix;
18083 fi
18084
18085
18086 # Debug mode?
18087 # Check whether --enable-debug was given.
18088 if test "${enable_debug+set}" = set; then :
18089 enableval=$enable_debug;
18090 fi
18091
18092
18093 # Doxygen?
18094 # Check whether --enable-doxygen was given.
18095 if test "${enable_doxygen+set}" = set; then :
18096 enableval=$enable_doxygen;
18097 fi
18098
18099
18100 # Picky?
18101 # Check whether --enable-picky was given.
18102 if test "${enable_picky+set}" = set; then :
18103 enableval=$enable_picky;
18104 fi
18105
18106
18107 # Cairo?
18108 # Check whether --enable-cairo was given.
18109 if test "${enable_cairo+set}" = set; then :
18110 enableval=$enable_cairo;
18111 fi
18112
18113
18114 # CPUID
18115 # Check whether --enable-cpuid was given.
18116 if test "${enable_cpuid+set}" = set; then :
18117 enableval=$enable_cpuid;
18118 fi
18119
18120
18121 # XML using libxml2?
18122 # Check whether --enable-libxml2 was given.
18123 if test "${enable_libxml2+set}" = set; then :
18124 enableval=$enable_libxml2;
18125 fi
18126
18127
18128 # I/O?
18129 # Check whether --enable-io was given.
18130 if test "${enable_io+set}" = set; then :
18131 enableval=$enable_io;
18132 fi
18133
18134
18135 # PCI?
18136 # Check whether --enable-pci was given.
18137 if test "${enable_pci+set}" = set; then :
18138 enableval=$enable_pci;
18139 fi
18140
18141 # 32bits_pci_domain?
18142 # Check whether --enable-32bits-pci-domain was given.
18143 if test "${enable_32bits_pci_domain+set}" = set; then :
18144 enableval=$enable_32bits_pci_domain;
18145 fi
18146
18147
18148 # OpenCL?
18149 # Check whether --enable-opencl was given.
18150 if test "${enable_opencl+set}" = set; then :
18151 enableval=$enable_opencl;
18152 fi
18153
18154
18155 # CUDA?
18156 # Check whether --enable-cuda was given.
18157 if test "${enable_cuda+set}" = set; then :
18158 enableval=$enable_cuda;
18159 fi
18160
18161
18162 # NVML?
18163 # Check whether --enable-nvml was given.
18164 if test "${enable_nvml+set}" = set; then :
18165 enableval=$enable_nvml;
18166 fi
18167
18168
18169 # RSMI?
18170 # Check whether --enable-rsmi was given.
18171 if test "${enable_rsmi+set}" = set; then :
18172 enableval=$enable_rsmi;
18173 fi
18174
18175
18176 # GL/Display
18177 # Check whether --enable-gl was given.
18178 if test "${enable_gl+set}" = set; then :
18179 enableval=$enable_gl;
18180 fi
18181
18182
18183 # LibUdev
18184 # Check whether --enable-libudev was given.
18185 if test "${enable_libudev+set}" = set; then :
18186 enableval=$enable_libudev;
18187 fi
18188
18189
18190 # Plugins
18191 # Check whether --enable-plugins was given.
18192 if test "${enable_plugins+set}" = set; then :
18193 enableval=$enable_plugins;
18194 fi
18195
18196
18197 # Look for dlopen
18198 # Not --disable-dlopen because $enable_dlopen is already used/set
18199 # Check whether --enable-plugin-dlopen was given.
18200 if test "${enable_plugin_dlopen+set}" = set; then :
18201 enableval=$enable_plugin_dlopen;
18202 fi
18203
18204 # Look for ltdl
18205 # Not --disable-ltdl for consistency wrt dlopen above
18206 # Check whether --enable-plugin-ltdl was given.
18207 if test "${enable_plugin_ltdl+set}" = set; then :
18208 enableval=$enable_plugin_ltdl;
18209 fi
18210
18211
18212
18213
18214 # If debug mode, add -g
18215 if test "$hwloc_debug" = "1"; then :
18216 CFLAGS="$CFLAGS -g"
18217 fi
18218
18219 # If the user didn't specifically ask for embedding mode, default to
18220 # standalone mode
18221 if test "$enable_embedded_mode" != "yes"; then :
18222 if test ! -d "$srcdir/doc"; then :
18223 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The hwloc source tree looks incomplete for a standalone" >&5
18224 $as_echo "$as_me: WARNING: The hwloc source tree looks incomplete for a standalone" >&2;}
18225 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: build. Perhaps this hwloc tree is intended for an embedded" >&5
18226 $as_echo "$as_me: WARNING: build. Perhaps this hwloc tree is intended for an embedded" >&2;}
18227 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: build? Try using the --enable-embedded-mode switch." >&5
18228 $as_echo "$as_me: WARNING: build? Try using the --enable-embedded-mode switch." >&2;}
18229 as_fn_error $? "Cannot build standalone hwloc" "$LINENO" 5
18230 else
18231
18232 hwloc_mode=standalone
18233
18234 fi
18235 fi
18236
18237 ####################################################################
18238 # Setup for the hwloc API
18239 ####################################################################
18240
18241
18242
18243 # Setup the hwloc core
19488
1824419489
1824519490
1824619491
1824819493 if test -n "$ac_tool_prefix"; then
1824919494 # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
1825019495 set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
18251 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
18252 $as_echo_n "checking for $ac_word... " >&6; }
18253 if ${ac_cv_path_PKG_CONFIG+:} false; then :
18254 $as_echo_n "(cached) " >&6
18255 else
19496 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
19497 printf %s "checking for $ac_word... " >&6; }
19498 if test ${ac_cv_path_PKG_CONFIG+y}
19499 then :
19500 printf %s "(cached) " >&6
19501 else $as_nop
1825619502 case $PKG_CONFIG in
1825719503 [\\/]* | ?:[\\/]*)
1825819504 ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
1826219508 for as_dir in $PATH
1826319509 do
1826419510 IFS=$as_save_IFS
18265 test -z "$as_dir" && as_dir=.
19511 case $as_dir in #(((
19512 '') as_dir=./ ;;
19513 */) ;;
19514 *) as_dir=$as_dir/ ;;
19515 esac
1826619516 for ac_exec_ext in '' $ac_executable_extensions; do
18267 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
18268 ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
18269 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
19517 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
19518 ac_cv_path_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext"
19519 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
1827019520 break 2
1827119521 fi
1827219522 done
1827819528 fi
1827919529 PKG_CONFIG=$ac_cv_path_PKG_CONFIG
1828019530 if test -n "$PKG_CONFIG"; then
18281 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
18282 $as_echo "$PKG_CONFIG" >&6; }
19531 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
19532 printf "%s\n" "$PKG_CONFIG" >&6; }
1828319533 else
18284 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
18285 $as_echo "no" >&6; }
19534 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
19535 printf "%s\n" "no" >&6; }
1828619536 fi
1828719537
1828819538
1829119541 ac_pt_PKG_CONFIG=$PKG_CONFIG
1829219542 # Extract the first word of "pkg-config", so it can be a program name with args.
1829319543 set dummy pkg-config; ac_word=$2
18294 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
18295 $as_echo_n "checking for $ac_word... " >&6; }
18296 if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
18297 $as_echo_n "(cached) " >&6
18298 else
19544 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
19545 printf %s "checking for $ac_word... " >&6; }
19546 if test ${ac_cv_path_ac_pt_PKG_CONFIG+y}
19547 then :
19548 printf %s "(cached) " >&6
19549 else $as_nop
1829919550 case $ac_pt_PKG_CONFIG in
1830019551 [\\/]* | ?:[\\/]*)
1830119552 ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
1830519556 for as_dir in $PATH
1830619557 do
1830719558 IFS=$as_save_IFS
18308 test -z "$as_dir" && as_dir=.
19559 case $as_dir in #(((
19560 '') as_dir=./ ;;
19561 */) ;;
19562 *) as_dir=$as_dir/ ;;
19563 esac
1830919564 for ac_exec_ext in '' $ac_executable_extensions; do
18310 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
18311 ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
18312 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
19565 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
19566 ac_cv_path_ac_pt_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext"
19567 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
1831319568 break 2
1831419569 fi
1831519570 done
1832119576 fi
1832219577 ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
1832319578 if test -n "$ac_pt_PKG_CONFIG"; then
18324 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
18325 $as_echo "$ac_pt_PKG_CONFIG" >&6; }
19579 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
19580 printf "%s\n" "$ac_pt_PKG_CONFIG" >&6; }
1832619581 else
18327 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
18328 $as_echo "no" >&6; }
19582 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
19583 printf "%s\n" "no" >&6; }
1832919584 fi
1833019585
1833119586 if test "x$ac_pt_PKG_CONFIG" = x; then
1833319588 else
1833419589 case $cross_compiling:$ac_tool_warned in
1833519590 yes:)
18336 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
18337 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
19591 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
19592 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
1833819593 ac_tool_warned=yes ;;
1833919594 esac
1834019595 PKG_CONFIG=$ac_pt_PKG_CONFIG
1834619601 fi
1834719602 if test -n "$PKG_CONFIG"; then
1834819603 HWLOC_pkg_min_version=0.9.0
18349 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $HWLOC_pkg_min_version" >&5
18350 $as_echo_n "checking pkg-config is at least version $HWLOC_pkg_min_version... " >&6; }
19604 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $HWLOC_pkg_min_version" >&5
19605 printf %s "checking pkg-config is at least version $HWLOC_pkg_min_version... " >&6; }
1835119606 if $PKG_CONFIG --atleast-pkgconfig-version $HWLOC_pkg_min_version; then
18352 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
18353 $as_echo "yes" >&6; }
19607 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
19608 printf "%s\n" "yes" >&6; }
1835419609 else
18355 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
18356 $as_echo "no" >&6; }
19610 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
19611 printf "%s\n" "no" >&6; }
1835719612 PKG_CONFIG=""
1835819613 fi
1835919614
1836019615 fi
18361 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5
18362 $as_echo_n "checking for X... " >&6; }
19616 ac_ext=c
19617 ac_cpp='$CPP $CPPFLAGS'
19618 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
19619 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
19620 ac_compiler_gnu=$ac_cv_c_compiler_gnu
19621 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
19622 printf %s "checking how to run the C preprocessor... " >&6; }
19623 # On Suns, sometimes $CPP names a directory.
19624 if test -n "$CPP" && test -d "$CPP"; then
19625 CPP=
19626 fi
19627 if test -z "$CPP"; then
19628 if test ${ac_cv_prog_CPP+y}
19629 then :
19630 printf %s "(cached) " >&6
19631 else $as_nop
19632 # Double quotes because $CC needs to be expanded
19633 for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp
19634 do
19635 ac_preproc_ok=false
19636 for ac_c_preproc_warn_flag in '' yes
19637 do
19638 # Use a header file that comes with gcc, so configuring glibc
19639 # with a fresh cross-compiler works.
19640 # On the NeXT, cc -E runs the code through the compiler's parser,
19641 # not just through cpp. "Syntax error" is here to catch this case.
19642 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
19643 /* end confdefs.h. */
19644 #include <limits.h>
19645 Syntax error
19646 _ACEOF
19647 if ac_fn_c_try_cpp "$LINENO"
19648 then :
19649
19650 else $as_nop
19651 # Broken: fails on valid input.
19652 continue
19653 fi
19654 rm -f conftest.err conftest.i conftest.$ac_ext
19655
19656 # OK, works on sane cases. Now check whether nonexistent headers
19657 # can be detected and how.
19658 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
19659 /* end confdefs.h. */
19660 #include <ac_nonexistent.h>
19661 _ACEOF
19662 if ac_fn_c_try_cpp "$LINENO"
19663 then :
19664 # Broken: success on invalid input.
19665 continue
19666 else $as_nop
19667 # Passes both tests.
19668 ac_preproc_ok=:
19669 break
19670 fi
19671 rm -f conftest.err conftest.i conftest.$ac_ext
19672
19673 done
19674 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
19675 rm -f conftest.i conftest.err conftest.$ac_ext
19676 if $ac_preproc_ok
19677 then :
19678 break
19679 fi
19680
19681 done
19682 ac_cv_prog_CPP=$CPP
19683
19684 fi
19685 CPP=$ac_cv_prog_CPP
19686 else
19687 ac_cv_prog_CPP=$CPP
19688 fi
19689 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
19690 printf "%s\n" "$CPP" >&6; }
19691 ac_preproc_ok=false
19692 for ac_c_preproc_warn_flag in '' yes
19693 do
19694 # Use a header file that comes with gcc, so configuring glibc
19695 # with a fresh cross-compiler works.
19696 # On the NeXT, cc -E runs the code through the compiler's parser,
19697 # not just through cpp. "Syntax error" is here to catch this case.
19698 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
19699 /* end confdefs.h. */
19700 #include <limits.h>
19701 Syntax error
19702 _ACEOF
19703 if ac_fn_c_try_cpp "$LINENO"
19704 then :
19705
19706 else $as_nop
19707 # Broken: fails on valid input.
19708 continue
19709 fi
19710 rm -f conftest.err conftest.i conftest.$ac_ext
19711
19712 # OK, works on sane cases. Now check whether nonexistent headers
19713 # can be detected and how.
19714 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
19715 /* end confdefs.h. */
19716 #include <ac_nonexistent.h>
19717 _ACEOF
19718 if ac_fn_c_try_cpp "$LINENO"
19719 then :
19720 # Broken: success on invalid input.
19721 continue
19722 else $as_nop
19723 # Passes both tests.
19724 ac_preproc_ok=:
19725 break
19726 fi
19727 rm -f conftest.err conftest.i conftest.$ac_ext
19728
19729 done
19730 # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
19731 rm -f conftest.i conftest.err conftest.$ac_ext
19732 if $ac_preproc_ok
19733 then :
19734
19735 else $as_nop
19736 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
19737 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
19738 as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
19739 See \`config.log' for more details" "$LINENO" 5; }
19740 fi
19741
19742 ac_ext=c
19743 ac_cpp='$CPP $CPPFLAGS'
19744 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
19745 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
19746 ac_compiler_gnu=$ac_cv_c_compiler_gnu
19747
19748
19749 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for X" >&5
19750 printf %s "checking for X... " >&6; }
1836319751
1836419752
1836519753 # Check whether --with-x was given.
18366 if test "${with_x+set}" = set; then :
19754 if test ${with_x+y}
19755 then :
1836719756 withval=$with_x;
1836819757 fi
1836919758
1837419763 else
1837519764 case $x_includes,$x_libraries in #(
1837619765 *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5;; #(
18377 *,NONE | NONE,*) if ${ac_cv_have_x+:} false; then :
18378 $as_echo_n "(cached) " >&6
18379 else
19766 *,NONE | NONE,*) if test ${ac_cv_have_x+y}
19767 then :
19768 printf %s "(cached) " >&6
19769 else $as_nop
1838019770 # One or both of the vars are not set, and there is no cached value.
18381 ac_x_includes=no ac_x_libraries=no
18382 rm -f -r conftest.dir
19771 ac_x_includes=no
19772 ac_x_libraries=no
19773 # Do we need to do anything special at all?
19774 ac_save_LIBS=$LIBS
19775 LIBS="-lX11 $LIBS"
19776 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
19777 /* end confdefs.h. */
19778 #include <X11/Xlib.h>
19779 int
19780 main (void)
19781 {
19782 XrmInitialize ()
19783 ;
19784 return 0;
19785 }
19786 _ACEOF
19787 if ac_fn_c_try_link "$LINENO"
19788 then :
19789 # We can compile and link X programs with no special options.
19790 ac_x_includes=
19791 ac_x_libraries=
19792 fi
19793 rm -f core conftest.err conftest.$ac_objext conftest.beam \
19794 conftest$ac_exeext conftest.$ac_ext
19795 LIBS="$ac_save_LIBS"
19796 # If that didn't work, only try xmkmf and file system searches
19797 # for native compilation.
19798 if test x"$ac_x_includes" = xno && test "$cross_compiling" = no
19799 then :
19800 rm -f -r conftest.dir
1838319801 if mkdir conftest.dir; then
1838419802 cd conftest.dir
1838519803 cat >Imakefile <<'_ACEOF'
1841819836 rm -f -r conftest.dir
1841919837 fi
1842019838
18421 # Standard set of common directories for X headers.
19839 # Standard set of common directories for X headers.
1842219840 # Check X11 before X11Rn because it is often a symlink to the current release.
1842319841 ac_x_header_dirs='
1842419842 /usr/X11/include
1844519863 /usr/local/include/X11R5
1844619864 /usr/local/include/X11R4
1844719865
19866 /opt/X11/include
19867
1844819868 /usr/X386/include
1844919869 /usr/x386/include
1845019870 /usr/XFree86/include/X11
1846619886 /* end confdefs.h. */
1846719887 #include <X11/Xlib.h>
1846819888 _ACEOF
18469 if ac_fn_c_try_cpp "$LINENO"; then :
19889 if ac_fn_c_try_cpp "$LINENO"
19890 then :
1847019891 # We can compile using X headers with no special include directory.
1847119892 ac_x_includes=
18472 else
19893 else $as_nop
1847319894 for ac_dir in $ac_x_header_dirs; do
1847419895 if test -r "$ac_dir/X11/Xlib.h"; then
1847519896 ac_x_includes=$ac_dir
1849019911 /* end confdefs.h. */
1849119912 #include <X11/Xlib.h>
1849219913 int
18493 main ()
19914 main (void)
1849419915 {
1849519916 XrmInitialize ()
1849619917 ;
1849719918 return 0;
1849819919 }
1849919920 _ACEOF
18500 if ac_fn_c_try_link "$LINENO"; then :
19921 if ac_fn_c_try_link "$LINENO"
19922 then :
1850119923 LIBS=$ac_save_LIBS
1850219924 # We can link X programs with no special library path.
1850319925 ac_x_libraries=
18504 else
19926 else $as_nop
1850519927 LIBS=$ac_save_LIBS
18506 for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g`
19928 for ac_dir in `printf "%s\n" "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g`
1850719929 do
1850819930 # Don't even attempt the hair of trying to link an X program!
1850919931 for ac_extension in a so sl dylib la dll; do
1851419936 done
1851519937 done
1851619938 fi
18517 rm -f core conftest.err conftest.$ac_objext \
19939 rm -f core conftest.err conftest.$ac_objext conftest.beam \
1851819940 conftest$ac_exeext conftest.$ac_ext
1851919941 fi # $ac_x_libraries = no
1852019942
19943 fi
19944 # Record the results.
1852119945 case $ac_x_includes,$ac_x_libraries in #(
18522 no,* | *,no | *\'*)
19946 no,* | *,no | *\'*) :
1852319947 # Didn't find X, or a directory has "'" in its name.
18524 ac_cv_have_x="have_x=no";; #(
18525 *)
19948 ac_cv_have_x="have_x=no" ;; #(
19949 *) :
1852619950 # Record where we found X for the cache.
1852719951 ac_cv_have_x="have_x=yes\
1852819952 ac_x_includes='$ac_x_includes'\
18529 ac_x_libraries='$ac_x_libraries'"
19953 ac_x_libraries='$ac_x_libraries'" ;;
1853019954 esac
1853119955 fi
1853219956 ;; #(
1853619960 fi # $with_x != no
1853719961
1853819962 if test "$have_x" != yes; then
18539 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5
18540 $as_echo "$have_x" >&6; }
19963 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5
19964 printf "%s\n" "$have_x" >&6; }
1854119965 no_x=yes
1854219966 else
1854319967 # If each of the values was on the command line, it overrides each guess.
1854719971 ac_cv_have_x="have_x=yes\
1854819972 ac_x_includes='$x_includes'\
1854919973 ac_x_libraries='$x_libraries'"
18550 { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5
18551 $as_echo "libraries $x_libraries, headers $x_includes" >&6; }
18552 fi
18553
18554
18555
18556
18557
18558
18559 if test "x1" != "x"; then :
19974 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5
19975 printf "%s\n" "libraries $x_libraries, headers $x_includes" >&6; }
19976 fi
19977
19978
19979
19980
19981
19982
19983 if test "x1" != "x"
19984 then :
1856019985 cat <<EOF
1856119986
1856219987 ###
1857019995
1857119996 # Unless previously set to "standalone" mode, default to embedded
1857219997 # mode
18573 if test "$hwloc_mode" = ""; then :
19998 if test "$hwloc_mode" = ""
19999 then :
1857420000 hwloc_mode=embedded
1857520001 fi
18576 { $as_echo "$as_me:${as_lineno-$LINENO}: checking hwloc building mode" >&5
18577 $as_echo_n "checking hwloc building mode... " >&6; }
18578 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hwloc_mode" >&5
18579 $as_echo "$hwloc_mode" >&6; }
20002 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking hwloc building mode" >&5
20003 printf %s "checking hwloc building mode... " >&6; }
20004 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hwloc_mode" >&5
20005 printf "%s\n" "$hwloc_mode" >&6; }
1858020006
1858120007 # Get hwloc's absolute top builddir (which may not be the same as
1858220008 # the real $top_builddir, because we may be building in embedded
1860420030 # Go back to where we started
1860520031 cd "$HWLOC_startdir"
1860620032
18607 { $as_echo "$as_me:${as_lineno-$LINENO}: hwloc builddir: $HWLOC_top_builddir" >&5
18608 $as_echo "$as_me: hwloc builddir: $HWLOC_top_builddir" >&6;}
18609 { $as_echo "$as_me:${as_lineno-$LINENO}: hwloc srcdir: $HWLOC_top_srcdir" >&5
18610 $as_echo "$as_me: hwloc srcdir: $HWLOC_top_srcdir" >&6;}
20033 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: hwloc builddir: $HWLOC_top_builddir" >&5
20034 printf "%s\n" "$as_me: hwloc builddir: $HWLOC_top_builddir" >&6;}
20035 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: hwloc srcdir: $HWLOC_top_srcdir" >&5
20036 printf "%s\n" "$as_me: hwloc srcdir: $HWLOC_top_srcdir" >&6;}
1861120037 if test "$HWLOC_top_builddir" != "$HWLOC_top_srcdir"; then
18612 { $as_echo "$as_me:${as_lineno-$LINENO}: Detected VPATH build" >&5
18613 $as_echo "$as_me: Detected VPATH build" >&6;}
20038 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: Detected VPATH build" >&5
20039 printf "%s\n" "$as_me: Detected VPATH build" >&6;}
1861420040 fi
1861520041
1861620042 # Get the version of hwloc that we are installing
18617 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for hwloc version" >&5
18618 $as_echo_n "checking for hwloc version... " >&6; }
20043 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for hwloc version" >&5
20044 printf %s "checking for hwloc version... " >&6; }
1861920045 HWLOC_VERSION=`sh "$HWLOC_top_srcdir/config/hwloc_get_version.sh" "$HWLOC_top_srcdir/VERSION"`
1862020046 if test "$?" != "0"; then
1862120047 as_fn_error $? "Cannot continue" "$LINENO" 5
1862220048 fi
18623 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HWLOC_VERSION" >&5
18624 $as_echo "$HWLOC_VERSION" >&6; }
18625
18626
18627 cat >>confdefs.h <<_ACEOF
18628 #define HWLOC_VERSION "$HWLOC_VERSION"
18629 _ACEOF
20049 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $HWLOC_VERSION" >&5
20050 printf "%s\n" "$HWLOC_VERSION" >&6; }
20051
20052
20053 printf "%s\n" "#define HWLOC_VERSION \"$HWLOC_VERSION\"" >>confdefs.h
1863020054
1863120055
1863220056 HWLOC_VERSION_MAJOR=`sh "$HWLOC_top_srcdir/config/hwloc_get_version.sh" "$HWLOC_top_srcdir/VERSION" --major`
1863320057
18634 cat >>confdefs.h <<_ACEOF
18635 #define HWLOC_VERSION_MAJOR $HWLOC_VERSION_MAJOR
18636 _ACEOF
20058 printf "%s\n" "#define HWLOC_VERSION_MAJOR $HWLOC_VERSION_MAJOR" >>confdefs.h
1863720059
1863820060 HWLOC_VERSION_MINOR=`sh "$HWLOC_top_srcdir/config/hwloc_get_version.sh" "$HWLOC_top_srcdir/VERSION" --minor`
1863920061
18640 cat >>confdefs.h <<_ACEOF
18641 #define HWLOC_VERSION_MINOR $HWLOC_VERSION_MINOR
18642 _ACEOF
20062 printf "%s\n" "#define HWLOC_VERSION_MINOR $HWLOC_VERSION_MINOR" >>confdefs.h
1864320063
1864420064 HWLOC_VERSION_RELEASE=`sh "$HWLOC_top_srcdir/config/hwloc_get_version.sh" "$HWLOC_top_srcdir/VERSION" --release`
1864520065
18646 cat >>confdefs.h <<_ACEOF
18647 #define HWLOC_VERSION_RELEASE $HWLOC_VERSION_RELEASE
18648 _ACEOF
20066 printf "%s\n" "#define HWLOC_VERSION_RELEASE $HWLOC_VERSION_RELEASE" >>confdefs.h
1864920067
1865020068 HWLOC_VERSION_GREEK=`sh "$HWLOC_top_srcdir/config/hwloc_get_version.sh" "$HWLOC_top_srcdir/VERSION" --greek`
1865120069
18652 cat >>confdefs.h <<_ACEOF
18653 #define HWLOC_VERSION_GREEK "$HWLOC_VERSION_GREEK"
18654 _ACEOF
20070 printf "%s\n" "#define HWLOC_VERSION_GREEK \"$HWLOC_VERSION_GREEK\"" >>confdefs.h
1865520071
1865620072
1865720073 HWLOC_RELEASE_DATE=`sh "$HWLOC_top_srcdir/config/hwloc_get_version.sh" "$HWLOC_top_srcdir/VERSION" --release-date`
1865820074
1865920075
1866020076 # Debug mode?
18661 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if want hwloc maintainer support" >&5
18662 $as_echo_n "checking if want hwloc maintainer support... " >&6; }
20077 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if want hwloc maintainer support" >&5
20078 printf %s "checking if want hwloc maintainer support... " >&6; }
1866320079 hwloc_debug=
1866420080
1866520081 # Unconditionally disable debug mode in embedded mode; if someone
1866820084 # option when configuring in embedded mode, and we wouldn't want
1866920085 # to hijack the enclosing application's --enable-debug configure
1867020086 # switch.
18671 if test "$hwloc_mode" = "embedded"; then :
20087 if test "$hwloc_mode" = "embedded"
20088 then :
1867220089 hwloc_debug=0
1867320090 hwloc_debug_msg="disabled (embedded mode)"
1867420091 fi
18675 if test "$hwloc_debug" = "" -a "$enable_debug" = "yes"; then :
20092 if test "$hwloc_debug" = "" -a "$enable_debug" = "yes"
20093 then :
1867620094 hwloc_debug=1
1867720095 hwloc_debug_msg="enabled"
1867820096 fi
18679 if test "$hwloc_debug" = ""; then :
20097 if test "$hwloc_debug" = ""
20098 then :
1868020099 hwloc_debug=0
1868120100 hwloc_debug_msg="disabled"
1868220101 fi
1868320102 # Grr; we use #ifndef for HWLOC_DEBUG! :-(
1868420103
18685 if test "$hwloc_debug" = "1"; then :
18686 $as_echo "#define HWLOC_DEBUG 1" >>confdefs.h
18687
18688 fi
18689 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hwloc_debug_msg" >&5
18690 $as_echo "$hwloc_debug_msg" >&6; }
20104 if test "$hwloc_debug" = "1"
20105 then :
20106 printf "%s\n" "#define HWLOC_DEBUG 1" >>confdefs.h
20107
20108 fi
20109 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hwloc_debug_msg" >&5
20110 printf "%s\n" "$hwloc_debug_msg" >&6; }
1869120111
1869220112 # We need to set a path for header, etc files depending on whether
1869320113 # we're standalone or embedded. this is taken care of by HWLOC_EMBEDDED.
1869420114
18695 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for hwloc directory prefix" >&5
18696 $as_echo_n "checking for hwloc directory prefix... " >&6; }
18697 { $as_echo "$as_me:${as_lineno-$LINENO}: result: (none)" >&5
18698 $as_echo "(none)" >&6; }
20115 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for hwloc directory prefix" >&5
20116 printf %s "checking for hwloc directory prefix... " >&6; }
20117 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: (none)" >&5
20118 printf "%s\n" "(none)" >&6; }
1869920119
1870020120 # Note that private/config.h *MUST* be listed first so that it
1870120121 # becomes the "main" config header file. Any AC-CONFIG-HEADERS
1870720127
1870820128
1870920129 # What prefix are we using?
18710 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for hwloc symbol prefix" >&5
18711 $as_echo_n "checking for hwloc symbol prefix... " >&6; }
18712 if test "$hwloc_symbol_prefix_value" = ""; then :
18713 if test "$with_hwloc_symbol_prefix" = ""; then :
20130 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for hwloc symbol prefix" >&5
20131 printf %s "checking for hwloc symbol prefix... " >&6; }
20132 if test "$hwloc_symbol_prefix_value" = ""
20133 then :
20134 if test "$with_hwloc_symbol_prefix" = ""
20135 then :
1871420136 hwloc_symbol_prefix_value=hwloc_
18715 else
20137 else $as_nop
1871620138 hwloc_symbol_prefix_value=$with_hwloc_symbol_prefix
1871720139 fi
1871820140 fi
1871920141
18720 cat >>confdefs.h <<_ACEOF
18721 #define HWLOC_SYM_PREFIX $hwloc_symbol_prefix_value
18722 _ACEOF
20142 printf "%s\n" "#define HWLOC_SYM_PREFIX $hwloc_symbol_prefix_value" >>confdefs.h
1872320143
1872420144 # Ensure to [] escape the whole next line so that we can get the
1872520145 # proper tr tokens
1872620146 hwloc_symbol_prefix_value_caps="`echo $hwloc_symbol_prefix_value | tr '[:lower:]' '[:upper:]'`"
1872720147
18728 cat >>confdefs.h <<_ACEOF
18729 #define HWLOC_SYM_PREFIX_CAPS $hwloc_symbol_prefix_value_caps
18730 _ACEOF
18731
18732 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hwloc_symbol_prefix_value" >&5
18733 $as_echo "$hwloc_symbol_prefix_value" >&6; }
20148 printf "%s\n" "#define HWLOC_SYM_PREFIX_CAPS $hwloc_symbol_prefix_value_caps" >>confdefs.h
20149
20150 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hwloc_symbol_prefix_value" >&5
20151 printf "%s\n" "$hwloc_symbol_prefix_value" >&6; }
1873420152
1873520153 # Give an easy #define to know if we need to transform all the
1873620154 # hwloc names
1873720155
18738 if test "$hwloc_symbol_prefix_value" = "hwloc_"; then :
18739 $as_echo "#define HWLOC_SYM_TRANSFORM 0" >>confdefs.h
18740
18741 else
18742 $as_echo "#define HWLOC_SYM_TRANSFORM 1" >>confdefs.h
20156 if test "$hwloc_symbol_prefix_value" = "hwloc_"
20157 then :
20158 printf "%s\n" "#define HWLOC_SYM_TRANSFORM 0" >>confdefs.h
20159
20160 else $as_nop
20161 printf "%s\n" "#define HWLOC_SYM_TRANSFORM 1" >>confdefs.h
1874320162
1874420163 fi
1874520164
1874620165 # hwloc 2.0+ requires a C99 compliant compiler
18747 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5
18748 $as_echo_n "checking for $CC option to accept ISO C99... " >&6; }
18749 if ${ac_cv_prog_cc_c99+:} false; then :
18750 $as_echo_n "(cached) " >&6
18751 else
18752 ac_cv_prog_cc_c99=no
18753 ac_save_CC=$CC
18754 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
18755 /* end confdefs.h. */
18756 #include <stdarg.h>
18757 #include <stdbool.h>
18758 #include <stdlib.h>
18759 #include <wchar.h>
18760 #include <stdio.h>
18761
18762 // Check varargs macros. These examples are taken from C99 6.10.3.5.
18763 #define debug(...) fprintf (stderr, __VA_ARGS__)
18764 #define showlist(...) puts (#__VA_ARGS__)
18765 #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__))
18766 static void
18767 test_varargs_macros (void)
18768 {
18769 int x = 1234;
18770 int y = 5678;
18771 debug ("Flag");
18772 debug ("X = %d\n", x);
18773 showlist (The first, second, and third items.);
18774 report (x>y, "x is %d but y is %d", x, y);
18775 }
18776
18777 // Check long long types.
18778 #define BIG64 18446744073709551615ull
18779 #define BIG32 4294967295ul
18780 #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0)
18781 #if !BIG_OK
18782 your preprocessor is broken;
18783 #endif
18784 #if BIG_OK
18785 #else
18786 your preprocessor is broken;
18787 #endif
18788 static long long int bignum = -9223372036854775807LL;
18789 static unsigned long long int ubignum = BIG64;
18790
18791 struct incomplete_array
18792 {
18793 int datasize;
18794 double data[];
18795 };
18796
18797 struct named_init {
18798 int number;
18799 const wchar_t *name;
18800 double average;
18801 };
18802
18803 typedef const char *ccp;
18804
18805 static inline int
18806 test_restrict (ccp restrict text)
18807 {
18808 // See if C++-style comments work.
18809 // Iterate through items via the restricted pointer.
18810 // Also check for declarations in for loops.
18811 for (unsigned int i = 0; *(text+i) != '\0'; ++i)
18812 continue;
18813 return 0;
18814 }
18815
18816 // Check varargs and va_copy.
18817 static void
18818 test_varargs (const char *format, ...)
18819 {
18820 va_list args;
18821 va_start (args, format);
18822 va_list args_copy;
18823 va_copy (args_copy, args);
18824
18825 const char *str;
18826 int number;
18827 float fnumber;
18828
18829 while (*format)
18830 {
18831 switch (*format++)
18832 {
18833 case 's': // string
18834 str = va_arg (args_copy, const char *);
18835 break;
18836 case 'd': // int
18837 number = va_arg (args_copy, int);
18838 break;
18839 case 'f': // float
18840 fnumber = va_arg (args_copy, double);
18841 break;
18842 default:
18843 break;
18844 }
18845 }
18846 va_end (args_copy);
18847 va_end (args);
18848 }
18849
18850 int
18851 main ()
18852 {
18853
18854 // Check bool.
18855 _Bool success = false;
18856
18857 // Check restrict.
18858 if (test_restrict ("String literal") == 0)
18859 success = true;
18860 char *restrict newvar = "Another string";
18861
18862 // Check varargs.
18863 test_varargs ("s, d' f .", "string", 65, 34.234);
18864 test_varargs_macros ();
18865
18866 // Check flexible array members.
18867 struct incomplete_array *ia =
18868 malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10));
18869 ia->datasize = 10;
18870 for (int i = 0; i < ia->datasize; ++i)
18871 ia->data[i] = i * 1.234;
18872
18873 // Check named initializers.
18874 struct named_init ni = {
18875 .number = 34,
18876 .name = L"Test wide string",
18877 .average = 543.34343,
18878 };
18879
18880 ni.number = 58;
18881
18882 int dynamic_array[ni.number];
18883 dynamic_array[ni.number - 1] = 543;
18884
18885 // work around unused variable warnings
18886 return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x'
18887 || dynamic_array[ni.number - 1] != 543);
18888
18889 ;
18890 return 0;
18891 }
18892 _ACEOF
18893 for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99
18894 do
18895 CC="$ac_save_CC $ac_arg"
18896 if ac_fn_c_try_compile "$LINENO"; then :
18897 ac_cv_prog_cc_c99=$ac_arg
18898 fi
18899 rm -f core conftest.err conftest.$ac_objext
18900 test "x$ac_cv_prog_cc_c99" != "xno" && break
18901 done
18902 rm -f conftest.$ac_ext
18903 CC=$ac_save_CC
18904
18905 fi
18906 # AC_CACHE_VAL
18907 case "x$ac_cv_prog_cc_c99" in
18908 x)
18909 { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
18910 $as_echo "none needed" >&6; } ;;
18911 xno)
18912 { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
18913 $as_echo "unsupported" >&6; } ;;
18914 *)
18915 CC="$CC $ac_cv_prog_cc_c99"
18916 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5
18917 $as_echo "$ac_cv_prog_cc_c99" >&6; } ;;
18918 esac
18919 if test "x$ac_cv_prog_cc_c99" != xno; then :
18920
18921 fi
18922
18923
18924 # The result of AC_PROG_CC_C99 is stored in ac_cv_prog_cc_c99
20166 # AC_PROG_CC_C99 obsolete, detected inside AC_PROG_CC, since autoconf 2.70
20167
20168 # The C99 result of AC_PROG_CC>=2.70 or AC_PROG_CC_C99 is stored in ac_cv_prog_cc_c99
1892520169 if test "x$ac_cv_prog_cc_c99" = xno ; then
18926 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: hwloc requires a C99 compiler" >&5
18927 $as_echo "$as_me: WARNING: hwloc requires a C99 compiler" >&2;}
20170 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: hwloc requires a C99 compiler" >&5
20171 printf "%s\n" "$as_me: WARNING: hwloc requires a C99 compiler" >&2;}
1892820172 as_fn_error $? "Aborting." "$LINENO" 5
1892920173 fi
1893020174
1893220176
1893320177
1893420178
18935 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the C compiler vendor" >&5
18936 $as_echo_n "checking for the C compiler vendor... " >&6; }
18937 if ${hwloc_cv_c_compiler_vendor+:} false; then :
18938 $as_echo_n "(cached) " >&6
18939 else
20179 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the C compiler vendor" >&5
20180 printf %s "checking for the C compiler vendor... " >&6; }
20181 if test ${hwloc_cv_c_compiler_vendor+y}
20182 then :
20183 printf %s "(cached) " >&6
20184 else $as_nop
1894020185 ac_ext=c
1894120186 ac_cpp='$CPP $CPPFLAGS'
1894220187 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
1895120196 # check Intel and Android before checking for GNU.
1895220197
1895320198 # Android
18954 if test "$hwloc_check_compiler_vendor_result" = "unknown"; then :
20199 if test "$hwloc_check_compiler_vendor_result" = "unknown"
20200 then :
1895520201
1895620202 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1895720203 /* end confdefs.h. */
1896120207 choke me
1896220208 #endif
1896320209 _ACEOF
18964 if ac_fn_c_try_compile "$LINENO"; then :
20210 if ac_fn_c_try_compile "$LINENO"
20211 then :
1896520212 hwloc_check_compiler_vendor_result="android"
1896620213 fi
18967 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
20214 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
1896820215 fi
1896920216
1897020217 # Intel
18971 if test "$hwloc_check_compiler_vendor_result" = "unknown"; then :
20218 if test "$hwloc_check_compiler_vendor_result" = "unknown"
20219 then :
1897220220
1897320221 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1897420222 /* end confdefs.h. */
1897820226 choke me
1897920227 #endif
1898020228 _ACEOF
18981 if ac_fn_c_try_compile "$LINENO"; then :
20229 if ac_fn_c_try_compile "$LINENO"
20230 then :
1898220231 hwloc_check_compiler_vendor_result="intel"
1898320232 fi
18984 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
20233 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
1898520234 fi
1898620235
1898720236 # Portland Group
18988 if test "$hwloc_check_compiler_vendor_result" = "unknown"; then :
20237 if test "$hwloc_check_compiler_vendor_result" = "unknown"
20238 then :
1898920239
1899020240 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1899120241 /* end confdefs.h. */
1899520245 choke me
1899620246 #endif
1899720247 _ACEOF
18998 if ac_fn_c_try_compile "$LINENO"; then :
20248 if ac_fn_c_try_compile "$LINENO"
20249 then :
1899920250 hwloc_check_compiler_vendor_result="portland group"
1900020251 fi
19001 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
20252 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
1900220253 fi
1900320254
1900420255 # Borland Turbo C
19005 if test "$hwloc_check_compiler_vendor_result" = "unknown"; then :
20256 if test "$hwloc_check_compiler_vendor_result" = "unknown"
20257 then :
1900620258
1900720259 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1900820260 /* end confdefs.h. */
1901220264 choke me
1901320265 #endif
1901420266 _ACEOF
19015 if ac_fn_c_try_compile "$LINENO"; then :
20267 if ac_fn_c_try_compile "$LINENO"
20268 then :
1901620269 hwloc_check_compiler_vendor_result="borland"
1901720270 fi
19018 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
20271 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
1901920272 fi
1902020273
1902120274 # Borland C++
19022 if test "$hwloc_check_compiler_vendor_result" = "unknown"; then :
20275 if test "$hwloc_check_compiler_vendor_result" = "unknown"
20276 then :
1902320277
1902420278 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1902520279 /* end confdefs.h. */
1902920283 choke me
1903020284 #endif
1903120285 _ACEOF
19032 if ac_fn_c_try_compile "$LINENO"; then :
20286 if ac_fn_c_try_compile "$LINENO"
20287 then :
1903320288 hwloc_check_compiler_vendor_result="borland"
1903420289 fi
19035 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
20290 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
1903620291 fi
1903720292
1903820293 # Comeau C++
19039 if test "$hwloc_check_compiler_vendor_result" = "unknown"; then :
20294 if test "$hwloc_check_compiler_vendor_result" = "unknown"
20295 then :
1904020296
1904120297 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1904220298 /* end confdefs.h. */
1904620302 choke me
1904720303 #endif
1904820304 _ACEOF
19049 if ac_fn_c_try_compile "$LINENO"; then :
20305 if ac_fn_c_try_compile "$LINENO"
20306 then :
1905020307 hwloc_check_compiler_vendor_result="comeau"
1905120308 fi
19052 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
20309 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
1905320310 fi
1905420311
1905520312 # Compaq C/C++
1905620313 # OSF part actually not needed anymore but doesn't hurt
19057 if test "$hwloc_check_compiler_vendor_result" = "unknown"; then :
20314 if test "$hwloc_check_compiler_vendor_result" = "unknown"
20315 then :
1905820316
1905920317 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1906020318 /* end confdefs.h. */
1906420322 choke me
1906520323 #endif
1906620324 _ACEOF
19067 if ac_fn_c_try_compile "$LINENO"; then :
20325 if ac_fn_c_try_compile "$LINENO"
20326 then :
1906820327 hwloc_check_compiler_vendor_result="compaq"
19069 else
20328 else $as_nop
1907020329
1907120330 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1907220331 /* end confdefs.h. */
1907620335 choke me
1907720336 #endif
1907820337 _ACEOF
19079 if ac_fn_c_try_compile "$LINENO"; then :
20338 if ac_fn_c_try_compile "$LINENO"
20339 then :
1908020340 hwloc_check_compiler_vendor_result="compaq"
19081 else
20341 else $as_nop
1908220342
1908320343 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1908420344 /* end confdefs.h. */
1908820348 choke me
1908920349 #endif
1909020350 _ACEOF
19091 if ac_fn_c_try_compile "$LINENO"; then :
20351 if ac_fn_c_try_compile "$LINENO"
20352 then :
1909220353 hwloc_check_compiler_vendor_result="compaq"
1909320354 fi
19094 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
19095 fi
19096 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
19097 fi
19098 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
20355 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
20356 fi
20357 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
20358 fi
20359 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
1909920360 fi
1910020361
1910120362 # Cray C/C++
19102 if test "$hwloc_check_compiler_vendor_result" = "unknown"; then :
20363 if test "$hwloc_check_compiler_vendor_result" = "unknown"
20364 then :
1910320365
1910420366 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1910520367 /* end confdefs.h. */
1910920371 choke me
1911020372 #endif
1911120373 _ACEOF
19112 if ac_fn_c_try_compile "$LINENO"; then :
20374 if ac_fn_c_try_compile "$LINENO"
20375 then :
1911320376 hwloc_check_compiler_vendor_result="cray"
1911420377 fi
19115 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
20378 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
1911620379 fi
1911720380
1911820381 # Diab C/C++
19119 if test "$hwloc_check_compiler_vendor_result" = "unknown"; then :
20382 if test "$hwloc_check_compiler_vendor_result" = "unknown"
20383 then :
1912020384
1912120385 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1912220386 /* end confdefs.h. */
1912620390 choke me
1912720391 #endif
1912820392 _ACEOF
19129 if ac_fn_c_try_compile "$LINENO"; then :
20393 if ac_fn_c_try_compile "$LINENO"
20394 then :
1913020395 hwloc_check_compiler_vendor_result="diab"
1913120396 fi
19132 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
20397 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
1913320398 fi
1913420399
1913520400 # Digital Mars
19136 if test "$hwloc_check_compiler_vendor_result" = "unknown"; then :
20401 if test "$hwloc_check_compiler_vendor_result" = "unknown"
20402 then :
1913720403
1913820404 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1913920405 /* end confdefs.h. */
1914320409 choke me
1914420410 #endif
1914520411 _ACEOF
19146 if ac_fn_c_try_compile "$LINENO"; then :
20412 if ac_fn_c_try_compile "$LINENO"
20413 then :
1914720414 hwloc_check_compiler_vendor_result="digital mars"
1914820415 fi
19149 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
20416 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
1915020417 fi
1915120418
1915220419 # HP ANSI C / aC++
19153 if test "$hwloc_check_compiler_vendor_result" = "unknown"; then :
20420 if test "$hwloc_check_compiler_vendor_result" = "unknown"
20421 then :
1915420422
1915520423 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1915620424 /* end confdefs.h. */
1916020428 choke me
1916120429 #endif
1916220430 _ACEOF
19163 if ac_fn_c_try_compile "$LINENO"; then :
20431 if ac_fn_c_try_compile "$LINENO"
20432 then :
1916420433 hwloc_check_compiler_vendor_result="hp"
1916520434 fi
19166 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
20435 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
1916720436 fi
1916820437
1916920438 # IBM XL C/C++
19170 if test "$hwloc_check_compiler_vendor_result" = "unknown"; then :
20439 if test "$hwloc_check_compiler_vendor_result" = "unknown"
20440 then :
1917120441
1917220442 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1917320443 /* end confdefs.h. */
1917720447 choke me
1917820448 #endif
1917920449 _ACEOF
19180 if ac_fn_c_try_compile "$LINENO"; then :
20450 if ac_fn_c_try_compile "$LINENO"
20451 then :
1918120452 hwloc_check_compiler_vendor_result="ibm"
19182 else
20453 else $as_nop
1918320454
1918420455 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1918520456 /* end confdefs.h. */
1918920460 choke me
1919020461 #endif
1919120462 _ACEOF
19192 if ac_fn_c_try_compile "$LINENO"; then :
20463 if ac_fn_c_try_compile "$LINENO"
20464 then :
1919320465 hwloc_check_compiler_vendor_result="ibm"
1919420466 fi
19195 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
19196 fi
19197 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
20467 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
20468 fi
20469 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
1919820470 fi
1919920471
1920020472 # KAI C++ (rest in peace)
19201 if test "$hwloc_check_compiler_vendor_result" = "unknown"; then :
20473 if test "$hwloc_check_compiler_vendor_result" = "unknown"
20474 then :
1920220475
1920320476 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1920420477 /* end confdefs.h. */
1920820481 choke me
1920920482 #endif
1921020483 _ACEOF
19211 if ac_fn_c_try_compile "$LINENO"; then :
20484 if ac_fn_c_try_compile "$LINENO"
20485 then :
1921220486 hwloc_check_compiler_vendor_result="kai"
1921320487 fi
19214 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
20488 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
1921520489 fi
1921620490
1921720491 # LCC
19218 if test "$hwloc_check_compiler_vendor_result" = "unknown"; then :
20492 if test "$hwloc_check_compiler_vendor_result" = "unknown"
20493 then :
1921920494
1922020495 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1922120496 /* end confdefs.h. */
1922520500 choke me
1922620501 #endif
1922720502 _ACEOF
19228 if ac_fn_c_try_compile "$LINENO"; then :
20503 if ac_fn_c_try_compile "$LINENO"
20504 then :
1922920505 hwloc_check_compiler_vendor_result="lcc"
1923020506 fi
19231 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
20507 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
1923220508 fi
1923320509
1923420510 # MetaWare High C/C++
19235 if test "$hwloc_check_compiler_vendor_result" = "unknown"; then :
20511 if test "$hwloc_check_compiler_vendor_result" = "unknown"
20512 then :
1923620513
1923720514 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1923820515 /* end confdefs.h. */
1924220519 choke me
1924320520 #endif
1924420521 _ACEOF
19245 if ac_fn_c_try_compile "$LINENO"; then :
20522 if ac_fn_c_try_compile "$LINENO"
20523 then :
1924620524 hwloc_check_compiler_vendor_result="metaware high"
1924720525 fi
19248 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
20526 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
1924920527 fi
1925020528
1925120529 # Metrowerks Codewarrior
19252 if test "$hwloc_check_compiler_vendor_result" = "unknown"; then :
20530 if test "$hwloc_check_compiler_vendor_result" = "unknown"
20531 then :
1925320532
1925420533 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1925520534 /* end confdefs.h. */
1925920538 choke me
1926020539 #endif
1926120540 _ACEOF
19262 if ac_fn_c_try_compile "$LINENO"; then :
20541 if ac_fn_c_try_compile "$LINENO"
20542 then :
1926320543 hwloc_check_compiler_vendor_result="metrowerks"
1926420544 fi
19265 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
20545 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
1926620546 fi
1926720547
1926820548 # MIPSpro (SGI)
19269 if test "$hwloc_check_compiler_vendor_result" = "unknown"; then :
20549 if test "$hwloc_check_compiler_vendor_result" = "unknown"
20550 then :
1927020551
1927120552 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1927220553 /* end confdefs.h. */
1927620557 choke me
1927720558 #endif
1927820559 _ACEOF
19279 if ac_fn_c_try_compile "$LINENO"; then :
20560 if ac_fn_c_try_compile "$LINENO"
20561 then :
1928020562 hwloc_check_compiler_vendor_result="sgi"
1928120563 fi
19282 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
20564 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
1928320565 fi
1928420566
1928520567 # MPW C++
19286 if test "$hwloc_check_compiler_vendor_result" = "unknown"; then :
20568 if test "$hwloc_check_compiler_vendor_result" = "unknown"
20569 then :
1928720570
1928820571 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1928920572 /* end confdefs.h. */
1929320576 choke me
1929420577 #endif
1929520578 _ACEOF
19296 if ac_fn_c_try_compile "$LINENO"; then :
20579 if ac_fn_c_try_compile "$LINENO"
20580 then :
1929720581 hwloc_check_compiler_vendor_result="mpw"
1929820582 fi
19299 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
20583 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
1930020584 fi
1930120585
1930220586 # Microsoft
19303 if test "$hwloc_check_compiler_vendor_result" = "unknown"; then :
20587 if test "$hwloc_check_compiler_vendor_result" = "unknown"
20588 then :
1930420589 # Always use C compiler when checking for Microsoft, as
1930520590 # Visual C++ doesn't recognize .cc as a C++ file.
1930620591 ac_ext=c
1931820603 choke me
1931920604 #endif
1932020605 _ACEOF
19321 if ac_fn_c_try_compile "$LINENO"; then :
20606 if ac_fn_c_try_compile "$LINENO"
20607 then :
1932220608 hwloc_check_compiler_vendor_result="microsoft"
1932320609 fi
19324 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
20610 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
1932520611 ac_ext=c
1932620612 ac_cpp='$CPP $CPPFLAGS'
1932720613 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
1933120617 fi
1933220618
1933320619 # Norcroft C
19334 if test "$hwloc_check_compiler_vendor_result" = "unknown"; then :
20620 if test "$hwloc_check_compiler_vendor_result" = "unknown"
20621 then :
1933520622
1933620623 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1933720624 /* end confdefs.h. */
1934120628 choke me
1934220629 #endif
1934320630 _ACEOF
19344 if ac_fn_c_try_compile "$LINENO"; then :
20631 if ac_fn_c_try_compile "$LINENO"
20632 then :
1934520633 hwloc_check_compiler_vendor_result="norcroft"
1934620634 fi
19347 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
20635 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
1934820636 fi
1934920637
1935020638 # Pelles C
19351 if test "$hwloc_check_compiler_vendor_result" = "unknown"; then :
20639 if test "$hwloc_check_compiler_vendor_result" = "unknown"
20640 then :
1935220641
1935320642 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1935420643 /* end confdefs.h. */
1935820647 choke me
1935920648 #endif
1936020649 _ACEOF
19361 if ac_fn_c_try_compile "$LINENO"; then :
20650 if ac_fn_c_try_compile "$LINENO"
20651 then :
1936220652 hwloc_check_compiler_vendor_result="pelles"
1936320653 fi
19364 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
20654 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
1936520655 fi
1936620656
1936720657 # SAS/C
19368 if test "$hwloc_check_compiler_vendor_result" = "unknown"; then :
20658 if test "$hwloc_check_compiler_vendor_result" = "unknown"
20659 then :
1936920660
1937020661 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1937120662 /* end confdefs.h. */
1937520666 choke me
1937620667 #endif
1937720668 _ACEOF
19378 if ac_fn_c_try_compile "$LINENO"; then :
20669 if ac_fn_c_try_compile "$LINENO"
20670 then :
1937920671 hwloc_check_compiler_vendor_result="sas"
1938020672 fi
19381 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
20673 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
1938220674 fi
1938320675
1938420676 # Sun Workshop C/C++
19385 if test "$hwloc_check_compiler_vendor_result" = "unknown"; then :
20677 if test "$hwloc_check_compiler_vendor_result" = "unknown"
20678 then :
1938620679
1938720680 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1938820681 /* end confdefs.h. */
1939220685 choke me
1939320686 #endif
1939420687 _ACEOF
19395 if ac_fn_c_try_compile "$LINENO"; then :
20688 if ac_fn_c_try_compile "$LINENO"
20689 then :
1939620690 hwloc_check_compiler_vendor_result="sun"
1939720691 fi
19398 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
20692 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
1939920693 fi
1940020694
1940120695 # TenDRA C/C++
19402 if test "$hwloc_check_compiler_vendor_result" = "unknown"; then :
20696 if test "$hwloc_check_compiler_vendor_result" = "unknown"
20697 then :
1940320698
1940420699 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1940520700 /* end confdefs.h. */
1940920704 choke me
1941020705 #endif
1941120706 _ACEOF
19412 if ac_fn_c_try_compile "$LINENO"; then :
20707 if ac_fn_c_try_compile "$LINENO"
20708 then :
1941320709 hwloc_check_compiler_vendor_result="tendra"
1941420710 fi
19415 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
20711 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
1941620712 fi
1941720713
1941820714 # Tiny C
19419 if test "$hwloc_check_compiler_vendor_result" = "unknown"; then :
20715 if test "$hwloc_check_compiler_vendor_result" = "unknown"
20716 then :
1942020717
1942120718 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1942220719 /* end confdefs.h. */
1942620723 choke me
1942720724 #endif
1942820725 _ACEOF
19429 if ac_fn_c_try_compile "$LINENO"; then :
20726 if ac_fn_c_try_compile "$LINENO"
20727 then :
1943020728 hwloc_check_compiler_vendor_result="tiny"
1943120729 fi
19432 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
20730 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
1943320731 fi
1943420732
1943520733 # USL C
19436 if test "$hwloc_check_compiler_vendor_result" = "unknown"; then :
20734 if test "$hwloc_check_compiler_vendor_result" = "unknown"
20735 then :
1943720736
1943820737 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1943920738 /* end confdefs.h. */
1944320742 choke me
1944420743 #endif
1944520744 _ACEOF
19446 if ac_fn_c_try_compile "$LINENO"; then :
20745 if ac_fn_c_try_compile "$LINENO"
20746 then :
1944720747 hwloc_check_compiler_vendor_result="usl"
1944820748 fi
19449 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
20749 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
1945020750 fi
1945120751
1945220752 # Watcom C++
19453 if test "$hwloc_check_compiler_vendor_result" = "unknown"; then :
20753 if test "$hwloc_check_compiler_vendor_result" = "unknown"
20754 then :
1945420755
1945520756 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1945620757 /* end confdefs.h. */
1946020761 choke me
1946120762 #endif
1946220763 _ACEOF
19463 if ac_fn_c_try_compile "$LINENO"; then :
20764 if ac_fn_c_try_compile "$LINENO"
20765 then :
1946420766 hwloc_check_compiler_vendor_result="watcom"
1946520767 fi
19466 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
20768 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
1946720769 fi
1946820770
1946920771 # GNU
19470 if test "$hwloc_check_compiler_vendor_result" = "unknown"; then :
20772 if test "$hwloc_check_compiler_vendor_result" = "unknown"
20773 then :
1947120774
1947220775 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1947320776 /* end confdefs.h. */
1947720780 choke me
1947820781 #endif
1947920782 _ACEOF
19480 if ac_fn_c_try_compile "$LINENO"; then :
20783 if ac_fn_c_try_compile "$LINENO"
20784 then :
1948120785 hwloc_check_compiler_vendor_result="gnu"
1948220786 fi
19483 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
20787 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
1948420788 fi
1948520789
1948620790 hwloc_cv_c_compiler_vendor="$hwloc_check_compiler_vendor_result"
1949320797 ac_compiler_gnu=$ac_cv_c_compiler_gnu
1949420798
1949520799 fi
19496 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hwloc_cv_c_compiler_vendor" >&5
19497 $as_echo "$hwloc_cv_c_compiler_vendor" >&6; }
20800 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hwloc_cv_c_compiler_vendor" >&5
20801 printf "%s\n" "$hwloc_cv_c_compiler_vendor" >&6; }
1949820802
1949920803 hwloc_c_vendor="$hwloc_cv_c_compiler_vendor"
1950020804
1950620810 # Enample system extensions for O_DIRECTORY, fdopen, fssl, etc.
1950720811
1950820812
19509 $as_echo "#define _HPUX_SOURCE 1" >>confdefs.h
20813 printf "%s\n" "#define _HPUX_SOURCE 1" >>confdefs.h
1951020814
1951120815
1951220816 ac_ext=c
1952620830 # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
1952720831 # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
1952820832 # This bug is HP SR number 8606223364.
19529 { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
19530 $as_echo_n "checking size of void *... " >&6; }
19531 if ${ac_cv_sizeof_void_p+:} false; then :
19532 $as_echo_n "(cached) " >&6
19533 else
19534 if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"; then :
19535
19536 else
20833 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5
20834 printf %s "checking size of void *... " >&6; }
20835 if test ${ac_cv_sizeof_void_p+y}
20836 then :
20837 printf %s "(cached) " >&6
20838 else $as_nop
20839 if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"
20840 then :
20841
20842 else $as_nop
1953720843 if test "$ac_cv_type_void_p" = yes; then
19538 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
19539 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
20844 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
20845 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
1954020846 as_fn_error 77 "cannot compute sizeof (void *)
1954120847 See \`config.log' for more details" "$LINENO" 5; }
1954220848 else
1954520851 fi
1954620852
1954720853 fi
19548 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
19549 $as_echo "$ac_cv_sizeof_void_p" >&6; }
19550
19551
19552
19553 cat >>confdefs.h <<_ACEOF
19554 #define SIZEOF_VOID_P $ac_cv_sizeof_void_p
19555 _ACEOF
20854 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5
20855 printf "%s\n" "$ac_cv_sizeof_void_p" >&6; }
20856
20857
20858
20859 printf "%s\n" "#define SIZEOF_VOID_P $ac_cv_sizeof_void_p" >>confdefs.h
1955620860
1955720861
1955820862
1956520869 #
1956620870 # Check OS support
1956720871 #
19568 { $as_echo "$as_me:${as_lineno-$LINENO}: checking which OS support to include" >&5
19569 $as_echo_n "checking which OS support to include... " >&6; }
20872 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which OS support to include" >&5
20873 printf %s "checking which OS support to include... " >&6; }
1957020874 case ${target} in
1957120875 powerpc64-bgq-linux*) # must be before Linux
1957220876
19573 $as_echo "#define HWLOC_BGQ_SYS 1" >>confdefs.h
20877 printf "%s\n" "#define HWLOC_BGQ_SYS 1" >>confdefs.h
1957420878
1957520879 hwloc_bgq=yes
19576 { $as_echo "$as_me:${as_lineno-$LINENO}: result: bgq" >&5
19577 $as_echo "bgq" >&6; }
20880 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: bgq" >&5
20881 printf "%s\n" "bgq" >&6; }
1957820882 hwloc_components="$hwloc_components bgq"
1957920883 ;;
1958020884 *-*-linux*)
1958120885
19582 $as_echo "#define HWLOC_LINUX_SYS 1" >>confdefs.h
20886 printf "%s\n" "#define HWLOC_LINUX_SYS 1" >>confdefs.h
1958320887
1958420888 hwloc_linux=yes
19585 { $as_echo "$as_me:${as_lineno-$LINENO}: result: Linux" >&5
19586 $as_echo "Linux" >&6; }
20889 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Linux" >&5
20890 printf "%s\n" "Linux" >&6; }
1958720891 hwloc_components="$hwloc_components linux"
1958820892 if test "x$enable_io" != xno; then
1958920893
19590 $as_echo "#define HWLOC_HAVE_LINUXIO 1" >>confdefs.h
20894 printf "%s\n" "#define HWLOC_HAVE_LINUXIO 1" >>confdefs.h
1959120895
1959220896 hwloc_linuxio_happy=yes
1959320897 if test x$enable_pci != xno; then
1959420898
19595 $as_echo "#define HWLOC_HAVE_LINUXPCI 1" >>confdefs.h
20899 printf "%s\n" "#define HWLOC_HAVE_LINUXPCI 1" >>confdefs.h
1959620900
1959720901 hwloc_linuxpci_happy=yes
1959820902 fi
1960020904 ;;
1960120905 *-*-irix*)
1960220906
19603 $as_echo "#define HWLOC_IRIX_SYS 1" >>confdefs.h
20907 printf "%s\n" "#define HWLOC_IRIX_SYS 1" >>confdefs.h
1960420908
1960520909 hwloc_irix=yes
19606 { $as_echo "$as_me:${as_lineno-$LINENO}: result: IRIX" >&5
19607 $as_echo "IRIX" >&6; }
20910 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: IRIX" >&5
20911 printf "%s\n" "IRIX" >&6; }
1960820912 # no irix component yet
1960920913 ;;
1961020914 *-*-darwin*)
1961120915
19612 $as_echo "#define HWLOC_DARWIN_SYS 1" >>confdefs.h
20916 printf "%s\n" "#define HWLOC_DARWIN_SYS 1" >>confdefs.h
1961320917
1961420918 hwloc_darwin=yes
19615 { $as_echo "$as_me:${as_lineno-$LINENO}: result: Darwin" >&5
19616 $as_echo "Darwin" >&6; }
20919 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Darwin" >&5
20920 printf "%s\n" "Darwin" >&6; }
1961720921 hwloc_components="$hwloc_components darwin"
1961820922 ;;
1961920923 *-*-solaris*)
1962020924
19621 $as_echo "#define HWLOC_SOLARIS_SYS 1" >>confdefs.h
20925 printf "%s\n" "#define HWLOC_SOLARIS_SYS 1" >>confdefs.h
1962220926
1962320927 hwloc_solaris=yes
19624 { $as_echo "$as_me:${as_lineno-$LINENO}: result: Solaris" >&5
19625 $as_echo "Solaris" >&6; }
20928 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Solaris" >&5
20929 printf "%s\n" "Solaris" >&6; }
1962620930 hwloc_components="$hwloc_components solaris"
1962720931 ;;
1962820932 *-*-aix*)
1962920933
19630 $as_echo "#define HWLOC_AIX_SYS 1" >>confdefs.h
20934 printf "%s\n" "#define HWLOC_AIX_SYS 1" >>confdefs.h
1963120935
1963220936 hwloc_aix=yes
19633 { $as_echo "$as_me:${as_lineno-$LINENO}: result: AIX" >&5
19634 $as_echo "AIX" >&6; }
20937 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: AIX" >&5
20938 printf "%s\n" "AIX" >&6; }
1963520939 hwloc_components="$hwloc_components aix"
1963620940 ;;
1963720941 *-*-hpux*)
1963820942
19639 $as_echo "#define HWLOC_HPUX_SYS 1" >>confdefs.h
20943 printf "%s\n" "#define HWLOC_HPUX_SYS 1" >>confdefs.h
1964020944
1964120945 hwloc_hpux=yes
19642 { $as_echo "$as_me:${as_lineno-$LINENO}: result: HP-UX" >&5
19643 $as_echo "HP-UX" >&6; }
20946 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: HP-UX" >&5
20947 printf "%s\n" "HP-UX" >&6; }
1964420948 hwloc_components="$hwloc_components hpux"
1964520949 ;;
1964620950 *-*-mingw*|*-*-cygwin*)
1964720951
19648 $as_echo "#define HWLOC_WIN_SYS 1" >>confdefs.h
20952 printf "%s\n" "#define HWLOC_WIN_SYS 1" >>confdefs.h
1964920953
1965020954 hwloc_windows=yes
19651 { $as_echo "$as_me:${as_lineno-$LINENO}: result: Windows" >&5
19652 $as_echo "Windows" >&6; }
20955 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Windows" >&5
20956 printf "%s\n" "Windows" >&6; }
1965320957 hwloc_components="$hwloc_components windows"
1965420958 ;;
1965520959 *-*-*freebsd*)
1965620960
19657 $as_echo "#define HWLOC_FREEBSD_SYS 1" >>confdefs.h
20961 printf "%s\n" "#define HWLOC_FREEBSD_SYS 1" >>confdefs.h
1965820962
1965920963 hwloc_freebsd=yes
19660 { $as_echo "$as_me:${as_lineno-$LINENO}: result: FreeBSD" >&5
19661 $as_echo "FreeBSD" >&6; }
20964 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: FreeBSD" >&5
20965 printf "%s\n" "FreeBSD" >&6; }
1966220966 hwloc_components="$hwloc_components freebsd"
1966320967 ;;
1966420968 *-*-*netbsd*)
1966520969
19666 $as_echo "#define HWLOC_NETBSD_SYS 1" >>confdefs.h
20970 printf "%s\n" "#define HWLOC_NETBSD_SYS 1" >>confdefs.h
1966720971
1966820972 hwloc_netbsd=yes
19669 { $as_echo "$as_me:${as_lineno-$LINENO}: result: NetBSD" >&5
19670 $as_echo "NetBSD" >&6; }
20973 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: NetBSD" >&5
20974 printf "%s\n" "NetBSD" >&6; }
1967120975 hwloc_components="$hwloc_components netbsd"
1967220976 ;;
1967320977 *)
19674 { $as_echo "$as_me:${as_lineno-$LINENO}: result: Unsupported! ($target)" >&5
19675 $as_echo "Unsupported! ($target)" >&6; }
19676
19677 $as_echo "#define HWLOC_UNSUPPORTED_SYS 1" >>confdefs.h
19678
19679 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ***********************************************************" >&5
19680 $as_echo "$as_me: WARNING: ***********************************************************" >&2;}
19681 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** hwloc does not support this system." >&5
19682 $as_echo "$as_me: WARNING: *** hwloc does not support this system." >&2;}
19683 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** hwloc will *attempt* to build (but it may not work)." >&5
19684 $as_echo "$as_me: WARNING: *** hwloc will *attempt* to build (but it may not work)." >&2;}
19685 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** hwloc run-time results may be reduced to showing just one processor," >&5
19686 $as_echo "$as_me: WARNING: *** hwloc run-time results may be reduced to showing just one processor," >&2;}
19687 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** and binding will not be supported." >&5
19688 $as_echo "$as_me: WARNING: *** and binding will not be supported." >&2;}
19689 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** You have been warned." >&5
19690 $as_echo "$as_me: WARNING: *** You have been warned." >&2;}
19691 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** Pausing to give you time to read this message..." >&5
19692 $as_echo "$as_me: WARNING: *** Pausing to give you time to read this message..." >&2;}
19693 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ***********************************************************" >&5
19694 $as_echo "$as_me: WARNING: ***********************************************************" >&2;}
20978 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Unsupported! ($target)" >&5
20979 printf "%s\n" "Unsupported! ($target)" >&6; }
20980
20981 printf "%s\n" "#define HWLOC_UNSUPPORTED_SYS 1" >>confdefs.h
20982
20983 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: ***********************************************************" >&5
20984 printf "%s\n" "$as_me: WARNING: ***********************************************************" >&2;}
20985 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: *** hwloc does not support this system." >&5
20986 printf "%s\n" "$as_me: WARNING: *** hwloc does not support this system." >&2;}
20987 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: *** hwloc will *attempt* to build (but it may not work)." >&5
20988 printf "%s\n" "$as_me: WARNING: *** hwloc will *attempt* to build (but it may not work)." >&2;}
20989 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: *** hwloc run-time results may be reduced to showing just one processor," >&5
20990 printf "%s\n" "$as_me: WARNING: *** hwloc run-time results may be reduced to showing just one processor," >&2;}
20991 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: *** and binding will not be supported." >&5
20992 printf "%s\n" "$as_me: WARNING: *** and binding will not be supported." >&2;}
20993 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: *** You have been warned." >&5
20994 printf "%s\n" "$as_me: WARNING: *** You have been warned." >&2;}
20995 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: *** Pausing to give you time to read this message..." >&5
20996 printf "%s\n" "$as_me: WARNING: *** Pausing to give you time to read this message..." >&2;}
20997 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: ***********************************************************" >&5
20998 printf "%s\n" "$as_me: WARNING: ***********************************************************" >&2;}
1969520999 sleep 10
1969621000 ;;
1969721001 esac
1969921003 #
1970021004 # Check CPU support
1970121005 #
19702 { $as_echo "$as_me:${as_lineno-$LINENO}: checking which CPU support to include" >&5
19703 $as_echo_n "checking which CPU support to include... " >&6; }
21006 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which CPU support to include" >&5
21007 printf %s "checking which CPU support to include... " >&6; }
1970421008 case ${target} in
1970521009 i*86-*-*|x86_64-*-*|amd64-*-*)
1970621010 case ${ac_cv_sizeof_void_p} in
1970721011 4)
1970821012
19709 $as_echo "#define HWLOC_X86_32_ARCH 1" >>confdefs.h
21013 printf "%s\n" "#define HWLOC_X86_32_ARCH 1" >>confdefs.h
1971021014
1971121015 hwloc_x86_32=yes
1971221016 HWLOC_MS_LIB_ARCH=X86
19713 { $as_echo "$as_me:${as_lineno-$LINENO}: result: x86_32" >&5
19714 $as_echo "x86_32" >&6; }
21017 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: x86_32" >&5
21018 printf "%s\n" "x86_32" >&6; }
1971521019 ;;
1971621020 8)
1971721021
19718 $as_echo "#define HWLOC_X86_64_ARCH 1" >>confdefs.h
21022 printf "%s\n" "#define HWLOC_X86_64_ARCH 1" >>confdefs.h
1971921023
1972021024 hwloc_x86_64=yes
1972121025 HWLOC_MS_LIB_ARCH=X64
19722 { $as_echo "$as_me:${as_lineno-$LINENO}: result: x86_64" >&5
19723 $as_echo "x86_64" >&6; }
21026 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: x86_64" >&5
21027 printf "%s\n" "x86_64" >&6; }
1972421028 ;;
1972521029 *)
1972621030
19727 $as_echo "#define HWLOC_X86_64_ARCH 1" >>confdefs.h
21031 printf "%s\n" "#define HWLOC_X86_64_ARCH 1" >>confdefs.h
1972821032
1972921033 hwloc_x86_64=yes
1973021034 HWLOC_MS_LIB_ARCH=X64
19731 { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown -- assuming x86_64" >&5
19732 $as_echo "unknown -- assuming x86_64" >&6; }
21035 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unknown -- assuming x86_64" >&5
21036 printf "%s\n" "unknown -- assuming x86_64" >&6; }
1973321037 ;;
1973421038 esac
1973521039 ;;
1973621040 *)
19737 { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown" >&5
19738 $as_echo "unknown" >&6; }
21041 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unknown" >&5
21042 printf "%s\n" "unknown" >&6; }
1973921043 ;;
1974021044 esac
1974121045
1974421048 # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
1974521049 # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
1974621050 # This bug is HP SR number 8606223364.
19747 { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned long" >&5
19748 $as_echo_n "checking size of unsigned long... " >&6; }
19749 if ${ac_cv_sizeof_unsigned_long+:} false; then :
19750 $as_echo_n "(cached) " >&6
19751 else
19752 if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long))" "ac_cv_sizeof_unsigned_long" "$ac_includes_default"; then :
19753
19754 else
21051 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of unsigned long" >&5
21052 printf %s "checking size of unsigned long... " >&6; }
21053 if test ${ac_cv_sizeof_unsigned_long+y}
21054 then :
21055 printf %s "(cached) " >&6
21056 else $as_nop
21057 if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long))" "ac_cv_sizeof_unsigned_long" "$ac_includes_default"
21058 then :
21059
21060 else $as_nop
1975521061 if test "$ac_cv_type_unsigned_long" = yes; then
19756 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
19757 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
21062 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
21063 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
1975821064 as_fn_error 77 "cannot compute sizeof (unsigned long)
1975921065 See \`config.log' for more details" "$LINENO" 5; }
1976021066 else
1976321069 fi
1976421070
1976521071 fi
19766 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_long" >&5
19767 $as_echo "$ac_cv_sizeof_unsigned_long" >&6; }
19768
19769
19770
19771 cat >>confdefs.h <<_ACEOF
19772 #define SIZEOF_UNSIGNED_LONG $ac_cv_sizeof_unsigned_long
19773 _ACEOF
19774
19775
19776
19777 cat >>confdefs.h <<_ACEOF
19778 #define HWLOC_SIZEOF_UNSIGNED_LONG $ac_cv_sizeof_unsigned_long
19779 _ACEOF
21072 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_long" >&5
21073 printf "%s\n" "$ac_cv_sizeof_unsigned_long" >&6; }
21074
21075
21076
21077 printf "%s\n" "#define SIZEOF_UNSIGNED_LONG $ac_cv_sizeof_unsigned_long" >>confdefs.h
21078
21079
21080
21081 printf "%s\n" "#define HWLOC_SIZEOF_UNSIGNED_LONG $ac_cv_sizeof_unsigned_long" >>confdefs.h
1978021082
1978121083 # The cast to long int works around a bug in the HP C Compiler
1978221084 # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
1978321085 # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
1978421086 # This bug is HP SR number 8606223364.
19785 { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned int" >&5
19786 $as_echo_n "checking size of unsigned int... " >&6; }
19787 if ${ac_cv_sizeof_unsigned_int+:} false; then :
19788 $as_echo_n "(cached) " >&6
19789 else
19790 if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned int))" "ac_cv_sizeof_unsigned_int" "$ac_includes_default"; then :
19791
19792 else
21087 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of unsigned int" >&5
21088 printf %s "checking size of unsigned int... " >&6; }
21089 if test ${ac_cv_sizeof_unsigned_int+y}
21090 then :
21091 printf %s "(cached) " >&6
21092 else $as_nop
21093 if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned int))" "ac_cv_sizeof_unsigned_int" "$ac_includes_default"
21094 then :
21095
21096 else $as_nop
1979321097 if test "$ac_cv_type_unsigned_int" = yes; then
19794 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
19795 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
21098 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
21099 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
1979621100 as_fn_error 77 "cannot compute sizeof (unsigned int)
1979721101 See \`config.log' for more details" "$LINENO" 5; }
1979821102 else
1980121105 fi
1980221106
1980321107 fi
19804 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_int" >&5
19805 $as_echo "$ac_cv_sizeof_unsigned_int" >&6; }
19806
19807
19808
19809 cat >>confdefs.h <<_ACEOF
19810 #define SIZEOF_UNSIGNED_INT $ac_cv_sizeof_unsigned_int
19811 _ACEOF
19812
19813
19814
19815 cat >>confdefs.h <<_ACEOF
19816 #define HWLOC_SIZEOF_UNSIGNED_INT $ac_cv_sizeof_unsigned_int
19817 _ACEOF
21108 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_int" >&5
21109 printf "%s\n" "$ac_cv_sizeof_unsigned_int" >&6; }
21110
21111
21112
21113 printf "%s\n" "#define SIZEOF_UNSIGNED_INT $ac_cv_sizeof_unsigned_int" >>confdefs.h
21114
21115
21116
21117 printf "%s\n" "#define HWLOC_SIZEOF_UNSIGNED_INT $ac_cv_sizeof_unsigned_int" >>confdefs.h
1981821118
1981921119
1982021120 #
1982121121 # Check for compiler attributes and visibility
1982221122 #
1982321123
19824 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__" >&5
19825 $as_echo_n "checking for __attribute__... " >&6; }
19826
19827 if ${hwloc_cv___attribute__+:} false; then :
19828 $as_echo_n "(cached) " >&6
19829 else
21124 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __attribute__" >&5
21125 printf %s "checking for __attribute__... " >&6; }
21126
21127 if test ${hwloc_cv___attribute__+y}
21128 then :
21129 printf %s "(cached) " >&6
21130 else $as_nop
1983021131
1983121132 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1983221133 /* end confdefs.h. */
19833 #include <stdlib.h>
19834 /* Check for the longest available __attribute__ (since gcc-2.3) */
19835 struct foo {
21134
21135 #include <stdlib.h>
21136
21137 int
21138 main (void)
21139 {
21140
21141 /* Check for the longest available __attribute__ (since gcc-2.3) */
21142 struct foo {
1983621143 char a;
19837 int x[2] __attribute__ ((__packed__));
19838 };
19839
19840 int
19841 main ()
19842 {
21144 int x2 __attribute__ ((__packed__));
21145 };
1984321146
1984421147 ;
1984521148 return 0;
1984621149 }
1984721150 _ACEOF
19848 if ac_fn_c_try_compile "$LINENO"; then :
21151 if ac_fn_c_try_compile "$LINENO"
21152 then :
21153
21154 else $as_nop
1984921155 hwloc_cv___attribute__=1
19850 else
19851 hwloc_cv___attribute__=0
19852 fi
19853 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
21156 fi
21157 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
1985421158
1985521159 if test "$hwloc_cv___attribute__" = "1" ; then
1985621160 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1985721161 /* end confdefs.h. */
19858 #include <stdlib.h>
19859 /* Check for the longest available __attribute__ (since gcc-2.3) */
19860 struct foo {
21162
21163 #include <stdlib.h>
21164
21165 int
21166 main (void)
21167 {
21168
21169 /* Check for the longest available __attribute__ (since gcc-2.3) */
21170 struct foo {
1986121171 char a;
19862 int x[2] __attribute__ ((__packed__));
19863 };
19864
19865 int
19866 main ()
19867 {
21172 int x2 __attribute__ ((__packed__));
21173 };
1986821174
1986921175 ;
1987021176 return 0;
1987121177 }
1987221178 _ACEOF
19873 if ac_fn_c_try_compile "$LINENO"; then :
21179 if ac_fn_c_try_compile "$LINENO"
21180 then :
21181
21182 else $as_nop
1987421183 hwloc_cv___attribute__=1
19875 else
19876 hwloc_cv___attribute__=0
19877 fi
19878 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
21184 fi
21185 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
1987921186 fi
1988021187
1988121188 fi
1988221189
1988321190
19884 cat >>confdefs.h <<_ACEOF
19885 #define HWLOC_HAVE_ATTRIBUTE $hwloc_cv___attribute__
19886 _ACEOF
21191 printf "%s\n" "#define HWLOC_HAVE_ATTRIBUTE $hwloc_cv___attribute__" >>confdefs.h
1988721192
1988821193
1988921194 #
1989121196 # attributed are supported.
1989221197 #
1989321198 if test "$hwloc_cv___attribute__" = "0" ; then
19894 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
19895 $as_echo "no" >&6; }
21199 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
21200 printf "%s\n" "no" >&6; }
1989621201 hwloc_cv___attribute__aligned=0
1989721202 hwloc_cv___attribute__always_inline=0
1989821203 hwloc_cv___attribute__cold=0
1989921204 hwloc_cv___attribute__const=0
1990021205 hwloc_cv___attribute__deprecated=0
21206 hwloc_cv___attribute__constructor=0
1990121207 hwloc_cv___attribute__format=0
1990221208 hwloc_cv___attribute__hot=0
1990321209 hwloc_cv___attribute__malloc=0
1991221218 hwloc_cv___attribute__warn_unused_result=0
1991321219 hwloc_cv___attribute__weak_alias=0
1991421220 else
19915 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
19916 $as_echo "yes" >&6; }
19917
19918
19919 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__(aligned)" >&5
19920 $as_echo_n "checking for __attribute__(aligned)... " >&6; }
19921 if ${hwloc_cv___attribute__aligned+:} false; then :
19922 $as_echo_n "(cached) " >&6
19923 else
21221 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
21222 printf "%s\n" "yes" >&6; }
21223
21224
21225 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __attribute__(aligned)" >&5
21226 printf %s "checking for __attribute__(aligned)... " >&6; }
21227 if test ${hwloc_cv___attribute__aligned+y}
21228 then :
21229 printf %s "(cached) " >&6
21230 else $as_nop
1992421231
1992521232 #
1992621233 # Try to compile using the C compiler
1992721234 #
1992821235 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
1992921236 /* end confdefs.h. */
19930 struct foo { char text[4]; } __attribute__ ((__aligned__(8)));
21237 struct foo { char text4; } __attribute__ ((__aligned__(8)));
1993121238 int
19932 main ()
21239 main (void)
1993321240 {
1993421241
1993521242 ;
1993621243 return 0;
1993721244 }
1993821245 _ACEOF
19939 if ac_fn_c_try_compile "$LINENO"; then :
21246 if ac_fn_c_try_compile "$LINENO"
21247 then :
1994021248
1994121249 #
1994221250 # In case we did succeed: Fine, but was this due to the
1995921267 fi
1996021268
1996121269
19962 else
21270 else $as_nop
1996321271 hwloc_cv___attribute__aligned=0
1996421272 fi
19965 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
21273 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
1996621274
1996721275 #
1996821276 # If the attribute is supported by both compilers,
1997821286 /* end confdefs.h. */
1997921287
1998021288 int
19981 main ()
21289 main (void)
1998221290 {
1998321291
19984 int i=4711;
19985 i=usage(&i);
21292 int i=4711;
21293 i=usage(&i);
1998621294
1998721295 ;
1998821296 return 0;
1998921297 }
21298
1999021299 _ACEOF
19991 if ac_fn_c_try_compile "$LINENO"; then :
21300 if ac_fn_c_try_compile "$LINENO"
21301 then :
1999221302 hwloc_cv___attribute__aligned=0
19993 else
21303 else $as_nop
1999421304
1999521305 #
1999621306 # In case we did NOT succeed: Fine, but was this due to the
2001421324
2001521325
2001621326 fi
20017 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
21327 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2001821328
2001921329 ac_c_werror_flag=$ac_c_werror_flag_safe
2002021330 CFLAGS=$CFLAGS_safe
2002421334
2002521335
2002621336 if test "$hwloc_cv___attribute__aligned" = "1" ; then
20027 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
20028 $as_echo "yes" >&6; }
21337 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
21338 printf "%s\n" "yes" >&6; }
2002921339 else
20030 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
20031 $as_echo "no" >&6; }
21340 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
21341 printf "%s\n" "no" >&6; }
2003221342 fi
2003321343
2003421344
2003621346 # Ignored by PGI-6.2.5; -- recognized by output-parser
2003721347 #
2003821348
20039 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__(always_inline)" >&5
20040 $as_echo_n "checking for __attribute__(always_inline)... " >&6; }
20041 if ${hwloc_cv___attribute__always_inline+:} false; then :
20042 $as_echo_n "(cached) " >&6
20043 else
21349 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __attribute__(always_inline)" >&5
21350 printf %s "checking for __attribute__(always_inline)... " >&6; }
21351 if test ${hwloc_cv___attribute__always_inline+y}
21352 then :
21353 printf %s "(cached) " >&6
21354 else $as_nop
2004421355
2004521356 #
2004621357 # Try to compile using the C compiler
2004921360 /* end confdefs.h. */
2005021361 int foo (int arg) __attribute__ ((__always_inline__));
2005121362 int
20052 main ()
21363 main (void)
2005321364 {
2005421365
2005521366 ;
2005621367 return 0;
2005721368 }
2005821369 _ACEOF
20059 if ac_fn_c_try_compile "$LINENO"; then :
21370 if ac_fn_c_try_compile "$LINENO"
21371 then :
2006021372
2006121373 #
2006221374 # In case we did succeed: Fine, but was this due to the
2007921391 fi
2008021392
2008121393
20082 else
21394 else $as_nop
2008321395 hwloc_cv___attribute__always_inline=0
2008421396 fi
20085 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
21397 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2008621398
2008721399 #
2008821400 # If the attribute is supported by both compilers,
2009821410 /* end confdefs.h. */
2009921411
2010021412 int
20101 main ()
21413 main (void)
2010221414 {
2010321415
20104 int i=4711;
20105 i=usage(&i);
21416 int i=4711;
21417 i=usage(&i);
2010621418
2010721419 ;
2010821420 return 0;
2010921421 }
21422
2011021423 _ACEOF
20111 if ac_fn_c_try_compile "$LINENO"; then :
21424 if ac_fn_c_try_compile "$LINENO"
21425 then :
2011221426 hwloc_cv___attribute__always_inline=0
20113 else
21427 else $as_nop
2011421428
2011521429 #
2011621430 # In case we did NOT succeed: Fine, but was this due to the
2013421448
2013521449
2013621450 fi
20137 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
21451 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2013821452
2013921453 ac_c_werror_flag=$ac_c_werror_flag_safe
2014021454 CFLAGS=$CFLAGS_safe
2014421458
2014521459
2014621460 if test "$hwloc_cv___attribute__always_inline" = "1" ; then
20147 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
20148 $as_echo "yes" >&6; }
21461 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
21462 printf "%s\n" "yes" >&6; }
2014921463 else
20150 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
20151 $as_echo "no" >&6; }
21464 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
21465 printf "%s\n" "no" >&6; }
2015221466 fi
2015321467
2015421468
2015521469
20156 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__(cold)" >&5
20157 $as_echo_n "checking for __attribute__(cold)... " >&6; }
20158 if ${hwloc_cv___attribute__cold+:} false; then :
20159 $as_echo_n "(cached) " >&6
20160 else
21470 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __attribute__(cold)" >&5
21471 printf %s "checking for __attribute__(cold)... " >&6; }
21472 if test ${hwloc_cv___attribute__cold+y}
21473 then :
21474 printf %s "(cached) " >&6
21475 else $as_nop
2016121476
2016221477 #
2016321478 # Try to compile using the C compiler
2016921484 int foo(int arg1, int arg2) { return arg1 * arg2 + arg1; }
2017021485
2017121486 int
20172 main ()
21487 main (void)
2017321488 {
2017421489
2017521490 ;
2017621491 return 0;
2017721492 }
2017821493 _ACEOF
20179 if ac_fn_c_try_compile "$LINENO"; then :
21494 if ac_fn_c_try_compile "$LINENO"
21495 then :
2018021496
2018121497 #
2018221498 # In case we did succeed: Fine, but was this due to the
2019921515 fi
2020021516
2020121517
20202 else
21518 else $as_nop
2020321519 hwloc_cv___attribute__cold=0
2020421520 fi
20205 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
21521 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2020621522
2020721523 #
2020821524 # If the attribute is supported by both compilers,
2021821534 /* end confdefs.h. */
2021921535
2022021536 int
20221 main ()
21537 main (void)
2022221538 {
2022321539
20224 int i=4711;
20225 i=usage(&i);
21540 int i=4711;
21541 i=usage(&i);
2022621542
2022721543 ;
2022821544 return 0;
2022921545 }
21546
2023021547 _ACEOF
20231 if ac_fn_c_try_compile "$LINENO"; then :
21548 if ac_fn_c_try_compile "$LINENO"
21549 then :
2023221550 hwloc_cv___attribute__cold=0
20233 else
21551 else $as_nop
2023421552
2023521553 #
2023621554 # In case we did NOT succeed: Fine, but was this due to the
2025421572
2025521573
2025621574 fi
20257 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
21575 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2025821576
2025921577 ac_c_werror_flag=$ac_c_werror_flag_safe
2026021578 CFLAGS=$CFLAGS_safe
2026421582
2026521583
2026621584 if test "$hwloc_cv___attribute__cold" = "1" ; then
20267 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
20268 $as_echo "yes" >&6; }
21585 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
21586 printf "%s\n" "yes" >&6; }
2026921587 else
20270 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
20271 $as_echo "no" >&6; }
21588 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
21589 printf "%s\n" "no" >&6; }
2027221590 fi
2027321591
2027421592
2027521593
20276 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__(const)" >&5
20277 $as_echo_n "checking for __attribute__(const)... " >&6; }
20278 if ${hwloc_cv___attribute__const+:} false; then :
20279 $as_echo_n "(cached) " >&6
20280 else
21594 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __attribute__(const)" >&5
21595 printf %s "checking for __attribute__(const)... " >&6; }
21596 if test ${hwloc_cv___attribute__const+y}
21597 then :
21598 printf %s "(cached) " >&6
21599 else $as_nop
2028121600
2028221601 #
2028321602 # Try to compile using the C compiler
2028921608 int foo(int arg1, int arg2) { return arg1 * arg2 + arg1; }
2029021609
2029121610 int
20292 main ()
21611 main (void)
2029321612 {
2029421613
2029521614 ;
2029621615 return 0;
2029721616 }
2029821617 _ACEOF
20299 if ac_fn_c_try_compile "$LINENO"; then :
21618 if ac_fn_c_try_compile "$LINENO"
21619 then :
2030021620
2030121621 #
2030221622 # In case we did succeed: Fine, but was this due to the
2031921639 fi
2032021640
2032121641
20322 else
21642 else $as_nop
2032321643 hwloc_cv___attribute__const=0
2032421644 fi
20325 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
21645 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2032621646
2032721647 #
2032821648 # If the attribute is supported by both compilers,
2033821658 /* end confdefs.h. */
2033921659
2034021660 int
20341 main ()
21661 main (void)
2034221662 {
2034321663
20344 int i=4711;
20345 i=usage(&i);
21664 int i=4711;
21665 i=usage(&i);
2034621666
2034721667 ;
2034821668 return 0;
2034921669 }
21670
2035021671 _ACEOF
20351 if ac_fn_c_try_compile "$LINENO"; then :
21672 if ac_fn_c_try_compile "$LINENO"
21673 then :
2035221674 hwloc_cv___attribute__const=0
20353 else
21675 else $as_nop
2035421676
2035521677 #
2035621678 # In case we did NOT succeed: Fine, but was this due to the
2037421696
2037521697
2037621698 fi
20377 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
21699 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2037821700
2037921701 ac_c_werror_flag=$ac_c_werror_flag_safe
2038021702 CFLAGS=$CFLAGS_safe
2038421706
2038521707
2038621708 if test "$hwloc_cv___attribute__const" = "1" ; then
20387 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
20388 $as_echo "yes" >&6; }
21709 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
21710 printf "%s\n" "yes" >&6; }
2038921711 else
20390 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
20391 $as_echo "no" >&6; }
21712 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
21713 printf "%s\n" "no" >&6; }
2039221714 fi
2039321715
2039421716
2039521717
2039621718
20397 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__(deprecated)" >&5
20398 $as_echo_n "checking for __attribute__(deprecated)... " >&6; }
20399 if ${hwloc_cv___attribute__deprecated+:} false; then :
20400 $as_echo_n "(cached) " >&6
20401 else
21719 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __attribute__(deprecated)" >&5
21720 printf %s "checking for __attribute__(deprecated)... " >&6; }
21721 if test ${hwloc_cv___attribute__deprecated+y}
21722 then :
21723 printf %s "(cached) " >&6
21724 else $as_nop
2040221725
2040321726 #
2040421727 # Try to compile using the C compiler
2041021733 int foo(int arg1, int arg2) { return arg1 * arg2 + arg1; }
2041121734
2041221735 int
20413 main ()
21736 main (void)
2041421737 {
2041521738
2041621739 ;
2041721740 return 0;
2041821741 }
2041921742 _ACEOF
20420 if ac_fn_c_try_compile "$LINENO"; then :
21743 if ac_fn_c_try_compile "$LINENO"
21744 then :
2042121745
2042221746 #
2042321747 # In case we did succeed: Fine, but was this due to the
2044021764 fi
2044121765
2044221766
20443 else
21767 else $as_nop
2044421768 hwloc_cv___attribute__deprecated=0
2044521769 fi
20446 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
21770 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2044721771
2044821772 #
2044921773 # If the attribute is supported by both compilers,
2045921783 /* end confdefs.h. */
2046021784
2046121785 int
20462 main ()
21786 main (void)
2046321787 {
2046421788
20465 int i=4711;
20466 i=usage(&i);
21789 int i=4711;
21790 i=usage(&i);
2046721791
2046821792 ;
2046921793 return 0;
2047021794 }
21795
2047121796 _ACEOF
20472 if ac_fn_c_try_compile "$LINENO"; then :
21797 if ac_fn_c_try_compile "$LINENO"
21798 then :
2047321799 hwloc_cv___attribute__deprecated=0
20474 else
21800 else $as_nop
2047521801
2047621802 #
2047721803 # In case we did NOT succeed: Fine, but was this due to the
2049521821
2049621822
2049721823 fi
20498 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
21824 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2049921825
2050021826 ac_c_werror_flag=$ac_c_werror_flag_safe
2050121827 CFLAGS=$CFLAGS_safe
2050521831
2050621832
2050721833 if test "$hwloc_cv___attribute__deprecated" = "1" ; then
20508 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
20509 $as_echo "yes" >&6; }
21834 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
21835 printf "%s\n" "yes" >&6; }
2051021836 else
20511 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
20512 $as_echo "no" >&6; }
21837 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
21838 printf "%s\n" "no" >&6; }
21839 fi
21840
21841
21842
21843 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __attribute__(constructor)" >&5
21844 printf %s "checking for __attribute__(constructor)... " >&6; }
21845 if test ${hwloc_cv___attribute__constructor+y}
21846 then :
21847 printf %s "(cached) " >&6
21848 else $as_nop
21849
21850 #
21851 # Try to compile using the C compiler
21852 #
21853 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
21854 /* end confdefs.h. */
21855
21856 void foo(void) __attribute__ ((__constructor__));
21857 void foo(void) { return; }
21858
21859 int
21860 main (void)
21861 {
21862
21863 ;
21864 return 0;
21865 }
21866 _ACEOF
21867 if ac_fn_c_try_compile "$LINENO"
21868 then :
21869
21870 #
21871 # In case we did succeed: Fine, but was this due to the
21872 # attribute being ignored/skipped? Grep for IgNoRe/skip in conftest.err
21873 # and if found, reset the hwloc_cv__attribute__var=0
21874 #
21875 hwloc_cv___attribute__constructor=1
21876
21877 # Be safe for systems that have ancient Autoconf's (e.g., RHEL5)
21878
21879
21880 if test -s conftest.err ; then
21881 for i in ignore skip ; do
21882 $GREP -iq $i conftest.err
21883 if test "$?" = "0" ; then
21884 hwloc_cv___attribute__constructor=0
21885 break;
21886 fi
21887 done
21888 fi
21889
21890
21891 else $as_nop
21892 hwloc_cv___attribute__constructor=0
21893 fi
21894 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
21895
21896 #
21897 # If the attribute is supported by both compilers,
21898 # try to recompile a *cross-check*, IFF defined.
21899 #
21900 if test '(' "$hwloc_cv___attribute__constructor" = "1" -a "" != "" ')' ; then
21901 ac_c_werror_flag_safe=$ac_c_werror_flag
21902 ac_c_werror_flag="yes"
21903 CFLAGS_safe=$CFLAGS
21904 CFLAGS="$CFLAGS "
21905
21906 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
21907 /* end confdefs.h. */
21908
21909 int
21910 main (void)
21911 {
21912
21913 int i=4711;
21914 i=usage(&i);
21915
21916 ;
21917 return 0;
21918 }
21919
21920 _ACEOF
21921 if ac_fn_c_try_compile "$LINENO"
21922 then :
21923 hwloc_cv___attribute__constructor=0
21924 else $as_nop
21925
21926 #
21927 # In case we did NOT succeed: Fine, but was this due to the
21928 # attribute being ignored? Grep for IgNoRe in conftest.err
21929 # and if found, reset the hwloc_cv__attribute__var=0
21930 #
21931 hwloc_cv___attribute__constructor=1
21932
21933 # Be safe for systems that have ancient Autoconf's (e.g., RHEL5)
21934
21935
21936 if test -s conftest.err ; then
21937 for i in ignore skip ; do
21938 $GREP -iq $i conftest.err
21939 if test "$?" = "0" ; then
21940 hwloc_cv___attribute__constructor=0
21941 break;
21942 fi
21943 done
21944 fi
21945
21946
21947 fi
21948 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
21949
21950 ac_c_werror_flag=$ac_c_werror_flag_safe
21951 CFLAGS=$CFLAGS_safe
21952 fi
21953
21954 fi
21955
21956
21957 if test "$hwloc_cv___attribute__constructor" = "1" ; then
21958 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
21959 printf "%s\n" "yes" >&6; }
21960 else
21961 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
21962 printf "%s\n" "no" >&6; }
2051321963 fi
2051421964
2051521965
2052521975 ;;
2052621976 esac
2052721977
20528 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__(format)" >&5
20529 $as_echo_n "checking for __attribute__(format)... " >&6; }
20530 if ${hwloc_cv___attribute__format+:} false; then :
20531 $as_echo_n "(cached) " >&6
20532 else
21978 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __attribute__(format)" >&5
21979 printf %s "checking for __attribute__(format)... " >&6; }
21980 if test ${hwloc_cv___attribute__format+y}
21981 then :
21982 printf %s "(cached) " >&6
21983 else $as_nop
2053321984
2053421985 #
2053521986 # Try to compile using the C compiler
2054021991 int this_printf (void *my_object, const char *my_format, ...) __attribute__ ((__format__ (__printf__, 2, 3)));
2054121992
2054221993 int
20543 main ()
21994 main (void)
2054421995 {
2054521996
2054621997 ;
2054721998 return 0;
2054821999 }
2054922000 _ACEOF
20550 if ac_fn_c_try_compile "$LINENO"; then :
22001 if ac_fn_c_try_compile "$LINENO"
22002 then :
2055122003
2055222004 #
2055322005 # In case we did succeed: Fine, but was this due to the
2057022022 fi
2057122023
2057222024
20573 else
22025 else $as_nop
2057422026 hwloc_cv___attribute__format=0
2057522027 fi
20576 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
22028 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2057722029
2057822030 #
2057922031 # If the attribute is supported by both compilers,
2060722059 int main(void);
2060822060
2060922061 int
20610 main ()
22062 main (void)
2061122063 {
2061222064
20613 int i=4711;
20614 i=usage(&i);
22065 int i=4711;
22066 i=usage(&i);
2061522067
2061622068 ;
2061722069 return 0;
2061822070 }
22071
2061922072 _ACEOF
20620 if ac_fn_c_try_compile "$LINENO"; then :
22073 if ac_fn_c_try_compile "$LINENO"
22074 then :
2062122075 hwloc_cv___attribute__format=0
20622 else
22076 else $as_nop
2062322077
2062422078 #
2062522079 # In case we did NOT succeed: Fine, but was this due to the
2064322097
2064422098
2064522099 fi
20646 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
22100 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2064722101
2064822102 ac_c_werror_flag=$ac_c_werror_flag_safe
2064922103 CFLAGS=$CFLAGS_safe
2065322107
2065422108
2065522109 if test "$hwloc_cv___attribute__format" = "1" ; then
20656 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
20657 $as_echo "yes" >&6; }
22110 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
22111 printf "%s\n" "yes" >&6; }
2065822112 else
20659 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
20660 $as_echo "no" >&6; }
22113 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
22114 printf "%s\n" "no" >&6; }
2066122115 fi
2066222116
2066322117
2066422118
20665 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__(hot)" >&5
20666 $as_echo_n "checking for __attribute__(hot)... " >&6; }
20667 if ${hwloc_cv___attribute__hot+:} false; then :
20668 $as_echo_n "(cached) " >&6
20669 else
22119 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __attribute__(hot)" >&5
22120 printf %s "checking for __attribute__(hot)... " >&6; }
22121 if test ${hwloc_cv___attribute__hot+y}
22122 then :
22123 printf %s "(cached) " >&6
22124 else $as_nop
2067022125
2067122126 #
2067222127 # Try to compile using the C compiler
2067822133 int foo(int arg1, int arg2) { return arg1 * arg2 + arg1; }
2067922134
2068022135 int
20681 main ()
22136 main (void)
2068222137 {
2068322138
2068422139 ;
2068522140 return 0;
2068622141 }
2068722142 _ACEOF
20688 if ac_fn_c_try_compile "$LINENO"; then :
22143 if ac_fn_c_try_compile "$LINENO"
22144 then :
2068922145
2069022146 #
2069122147 # In case we did succeed: Fine, but was this due to the
2070822164 fi
2070922165
2071022166
20711 else
22167 else $as_nop
2071222168 hwloc_cv___attribute__hot=0
2071322169 fi
20714 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
22170 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2071522171
2071622172 #
2071722173 # If the attribute is supported by both compilers,
2072722183 /* end confdefs.h. */
2072822184
2072922185 int
20730 main ()
22186 main (void)
2073122187 {
2073222188
20733 int i=4711;
20734 i=usage(&i);
22189 int i=4711;
22190 i=usage(&i);
2073522191
2073622192 ;
2073722193 return 0;
2073822194 }
22195
2073922196 _ACEOF
20740 if ac_fn_c_try_compile "$LINENO"; then :
22197 if ac_fn_c_try_compile "$LINENO"
22198 then :
2074122199 hwloc_cv___attribute__hot=0
20742 else
22200 else $as_nop
2074322201
2074422202 #
2074522203 # In case we did NOT succeed: Fine, but was this due to the
2076322221
2076422222
2076522223 fi
20766 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
22224 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2076722225
2076822226 ac_c_werror_flag=$ac_c_werror_flag_safe
2076922227 CFLAGS=$CFLAGS_safe
2077322231
2077422232
2077522233 if test "$hwloc_cv___attribute__hot" = "1" ; then
20776 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
20777 $as_echo "yes" >&6; }
22234 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
22235 printf "%s\n" "yes" >&6; }
2077822236 else
20779 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
20780 $as_echo "no" >&6; }
22237 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
22238 printf "%s\n" "no" >&6; }
2078122239 fi
2078222240
2078322241
2078422242
20785 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__(malloc)" >&5
20786 $as_echo_n "checking for __attribute__(malloc)... " >&6; }
20787 if ${hwloc_cv___attribute__malloc+:} false; then :
20788 $as_echo_n "(cached) " >&6
20789 else
22243 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __attribute__(malloc)" >&5
22244 printf %s "checking for __attribute__(malloc)... " >&6; }
22245 if test ${hwloc_cv___attribute__malloc+y}
22246 then :
22247 printf %s "(cached) " >&6
22248 else $as_nop
2079022249
2079122250 #
2079222251 # Try to compile using the C compiler
2080122260 int * foo(int arg1) { return (int*) malloc(arg1); }
2080222261
2080322262 int
20804 main ()
22263 main (void)
2080522264 {
2080622265
2080722266 ;
2080822267 return 0;
2080922268 }
2081022269 _ACEOF
20811 if ac_fn_c_try_compile "$LINENO"; then :
22270 if ac_fn_c_try_compile "$LINENO"
22271 then :
2081222272
2081322273 #
2081422274 # In case we did succeed: Fine, but was this due to the
2083122291 fi
2083222292
2083322293
20834 else
22294 else $as_nop
2083522295 hwloc_cv___attribute__malloc=0
2083622296 fi
20837 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
22297 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2083822298
2083922299 #
2084022300 # If the attribute is supported by both compilers,
2085022310 /* end confdefs.h. */
2085122311
2085222312 int
20853 main ()
22313 main (void)
2085422314 {
2085522315
20856 int i=4711;
20857 i=usage(&i);
22316 int i=4711;
22317 i=usage(&i);
2085822318
2085922319 ;
2086022320 return 0;
2086122321 }
22322
2086222323 _ACEOF
20863 if ac_fn_c_try_compile "$LINENO"; then :
22324 if ac_fn_c_try_compile "$LINENO"
22325 then :
2086422326 hwloc_cv___attribute__malloc=0
20865 else
22327 else $as_nop
2086622328
2086722329 #
2086822330 # In case we did NOT succeed: Fine, but was this due to the
2088622348
2088722349
2088822350 fi
20889 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
22351 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2089022352
2089122353 ac_c_werror_flag=$ac_c_werror_flag_safe
2089222354 CFLAGS=$CFLAGS_safe
2089622358
2089722359
2089822360 if test "$hwloc_cv___attribute__malloc" = "1" ; then
20899 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
20900 $as_echo "yes" >&6; }
22361 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
22362 printf "%s\n" "yes" >&6; }
2090122363 else
20902 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
20903 $as_echo "no" >&6; }
22364 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
22365 printf "%s\n" "no" >&6; }
2090422366 fi
2090522367
2090622368
2091222374 # The test case is chosen to match our only use in topology-xml-*.c, and reproduces an xlc-13.1.0 bug.
2091322375 #
2091422376
20915 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__(may_alias)" >&5
20916 $as_echo_n "checking for __attribute__(may_alias)... " >&6; }
20917 if ${hwloc_cv___attribute__may_alias+:} false; then :
20918 $as_echo_n "(cached) " >&6
20919 else
22377 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __attribute__(may_alias)" >&5
22378 printf %s "checking for __attribute__(may_alias)... " >&6; }
22379 if test ${hwloc_cv___attribute__may_alias+y}
22380 then :
22381 printf %s "(cached) " >&6
22382 else $as_nop
2092022383
2092122384 #
2092222385 # Try to compile using the C compiler
2092522388 /* end confdefs.h. */
2092622389 struct { int i; } __attribute__ ((__may_alias__)) * p_value;
2092722390 int
20928 main ()
22391 main (void)
2092922392 {
2093022393
2093122394 ;
2093222395 return 0;
2093322396 }
2093422397 _ACEOF
20935 if ac_fn_c_try_compile "$LINENO"; then :
22398 if ac_fn_c_try_compile "$LINENO"
22399 then :
2093622400
2093722401 #
2093822402 # In case we did succeed: Fine, but was this due to the
2095522419 fi
2095622420
2095722421
20958 else
22422 else $as_nop
2095922423 hwloc_cv___attribute__may_alias=0
2096022424 fi
20961 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
22425 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2096222426
2096322427 #
2096422428 # If the attribute is supported by both compilers,
2097422438 /* end confdefs.h. */
2097522439
2097622440 int
20977 main ()
22441 main (void)
2097822442 {
2097922443
20980 int i=4711;
20981 i=usage(&i);
22444 int i=4711;
22445 i=usage(&i);
2098222446
2098322447 ;
2098422448 return 0;
2098522449 }
22450
2098622451 _ACEOF
20987 if ac_fn_c_try_compile "$LINENO"; then :
22452 if ac_fn_c_try_compile "$LINENO"
22453 then :
2098822454 hwloc_cv___attribute__may_alias=0
20989 else
22455 else $as_nop
2099022456
2099122457 #
2099222458 # In case we did NOT succeed: Fine, but was this due to the
2101022476
2101122477
2101222478 fi
21013 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
22479 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2101422480
2101522481 ac_c_werror_flag=$ac_c_werror_flag_safe
2101622482 CFLAGS=$CFLAGS_safe
2102022486
2102122487
2102222488 if test "$hwloc_cv___attribute__may_alias" = "1" ; then
21023 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
21024 $as_echo "yes" >&6; }
22489 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
22490 printf "%s\n" "yes" >&6; }
2102522491 else
21026 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
21027 $as_echo "no" >&6; }
22492 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
22493 printf "%s\n" "no" >&6; }
2102822494 fi
2102922495
2103022496
2103122497
2103222498
21033 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__(no_instrument_function)" >&5
21034 $as_echo_n "checking for __attribute__(no_instrument_function)... " >&6; }
21035 if ${hwloc_cv___attribute__no_instrument_function+:} false; then :
21036 $as_echo_n "(cached) " >&6
21037 else
22499 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __attribute__(no_instrument_function)" >&5
22500 printf %s "checking for __attribute__(no_instrument_function)... " >&6; }
22501 if test ${hwloc_cv___attribute__no_instrument_function+y}
22502 then :
22503 printf %s "(cached) " >&6
22504 else $as_nop
2103822505
2103922506 #
2104022507 # Try to compile using the C compiler
2104322510 /* end confdefs.h. */
2104422511 int * foo(int arg1) __attribute__ ((__no_instrument_function__));
2104522512 int
21046 main ()
22513 main (void)
2104722514 {
2104822515
2104922516 ;
2105022517 return 0;
2105122518 }
2105222519 _ACEOF
21053 if ac_fn_c_try_compile "$LINENO"; then :
22520 if ac_fn_c_try_compile "$LINENO"
22521 then :
2105422522
2105522523 #
2105622524 # In case we did succeed: Fine, but was this due to the
2107322541 fi
2107422542
2107522543
21076 else
22544 else $as_nop
2107722545 hwloc_cv___attribute__no_instrument_function=0
2107822546 fi
21079 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
22547 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2108022548
2108122549 #
2108222550 # If the attribute is supported by both compilers,
2109222560 /* end confdefs.h. */
2109322561
2109422562 int
21095 main ()
22563 main (void)
2109622564 {
2109722565
21098 int i=4711;
21099 i=usage(&i);
22566 int i=4711;
22567 i=usage(&i);
2110022568
2110122569 ;
2110222570 return 0;
2110322571 }
22572
2110422573 _ACEOF
21105 if ac_fn_c_try_compile "$LINENO"; then :
22574 if ac_fn_c_try_compile "$LINENO"
22575 then :
2110622576 hwloc_cv___attribute__no_instrument_function=0
21107 else
22577 else $as_nop
2110822578
2110922579 #
2111022580 # In case we did NOT succeed: Fine, but was this due to the
2112822598
2112922599
2113022600 fi
21131 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
22601 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2113222602
2113322603 ac_c_werror_flag=$ac_c_werror_flag_safe
2113422604 CFLAGS=$CFLAGS_safe
2113822608
2113922609
2114022610 if test "$hwloc_cv___attribute__no_instrument_function" = "1" ; then
21141 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
21142 $as_echo "yes" >&6; }
22611 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
22612 printf "%s\n" "yes" >&6; }
2114322613 else
21144 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
21145 $as_echo "no" >&6; }
22614 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
22615 printf "%s\n" "no" >&6; }
2114622616 fi
2114722617
2114822618
2116322633 ;;
2116422634 esac
2116522635
21166 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__(nonnull)" >&5
21167 $as_echo_n "checking for __attribute__(nonnull)... " >&6; }
21168 if ${hwloc_cv___attribute__nonnull+:} false; then :
21169 $as_echo_n "(cached) " >&6
21170 else
22636 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __attribute__(nonnull)" >&5
22637 printf %s "checking for __attribute__(nonnull)... " >&6; }
22638 if test ${hwloc_cv___attribute__nonnull+y}
22639 then :
22640 printf %s "(cached) " >&6
22641 else $as_nop
2117122642
2117222643 #
2117322644 # Try to compile using the C compiler
2117922650 int square(int *arg) { return *arg; }
2118022651
2118122652 int
21182 main ()
22653 main (void)
2118322654 {
2118422655
2118522656 ;
2118622657 return 0;
2118722658 }
2118822659 _ACEOF
21189 if ac_fn_c_try_compile "$LINENO"; then :
22660 if ac_fn_c_try_compile "$LINENO"
22661 then :
2119022662
2119122663 #
2119222664 # In case we did succeed: Fine, but was this due to the
2120922681 fi
2121022682
2121122683
21212 else
22684 else $as_nop
2121322685 hwloc_cv___attribute__nonnull=0
2121422686 fi
21215 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
22687 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2121622688
2121722689 #
2121822690 # If the attribute is supported by both compilers,
2124822720 int main(void);
2124922721
2125022722 int
21251 main ()
22723 main (void)
2125222724 {
2125322725
21254 int i=4711;
21255 i=usage(&i);
22726 int i=4711;
22727 i=usage(&i);
2125622728
2125722729 ;
2125822730 return 0;
2125922731 }
22732
2126022733 _ACEOF
21261 if ac_fn_c_try_compile "$LINENO"; then :
22734 if ac_fn_c_try_compile "$LINENO"
22735 then :
2126222736 hwloc_cv___attribute__nonnull=0
21263 else
22737 else $as_nop
2126422738
2126522739 #
2126622740 # In case we did NOT succeed: Fine, but was this due to the
2128422758
2128522759
2128622760 fi
21287 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
22761 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2128822762
2128922763 ac_c_werror_flag=$ac_c_werror_flag_safe
2129022764 CFLAGS=$CFLAGS_safe
2129422768
2129522769
2129622770 if test "$hwloc_cv___attribute__nonnull" = "1" ; then
21297 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
21298 $as_echo "yes" >&6; }
22771 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
22772 printf "%s\n" "yes" >&6; }
2129922773 else
21300 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
21301 $as_echo "no" >&6; }
22774 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
22775 printf "%s\n" "no" >&6; }
2130222776 fi
2130322777
2130422778
2130522779
2130622780
21307 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__(noreturn)" >&5
21308 $as_echo_n "checking for __attribute__(noreturn)... " >&6; }
21309 if ${hwloc_cv___attribute__noreturn+:} false; then :
21310 $as_echo_n "(cached) " >&6
21311 else
22781 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __attribute__(noreturn)" >&5
22782 printf %s "checking for __attribute__(noreturn)... " >&6; }
22783 if test ${hwloc_cv___attribute__noreturn+y}
22784 then :
22785 printf %s "(cached) " >&6
22786 else $as_nop
2131222787
2131322788 #
2131422789 # Try to compile using the C compiler
2132622801 void fatal(int arg1) { exit(arg1); }
2132722802
2132822803 int
21329 main ()
22804 main (void)
2133022805 {
2133122806
2133222807 ;
2133322808 return 0;
2133422809 }
2133522810 _ACEOF
21336 if ac_fn_c_try_compile "$LINENO"; then :
22811 if ac_fn_c_try_compile "$LINENO"
22812 then :
2133722813
2133822814 #
2133922815 # In case we did succeed: Fine, but was this due to the
2135622832 fi
2135722833
2135822834
21359 else
22835 else $as_nop
2136022836 hwloc_cv___attribute__noreturn=0
2136122837 fi
21362 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
22838 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2136322839
2136422840 #
2136522841 # If the attribute is supported by both compilers,
2137522851 /* end confdefs.h. */
2137622852
2137722853 int
21378 main ()
22854 main (void)
2137922855 {
2138022856
21381 int i=4711;
21382 i=usage(&i);
22857 int i=4711;
22858 i=usage(&i);
2138322859
2138422860 ;
2138522861 return 0;
2138622862 }
22863
2138722864 _ACEOF
21388 if ac_fn_c_try_compile "$LINENO"; then :
22865 if ac_fn_c_try_compile "$LINENO"
22866 then :
2138922867 hwloc_cv___attribute__noreturn=0
21390 else
22868 else $as_nop
2139122869
2139222870 #
2139322871 # In case we did NOT succeed: Fine, but was this due to the
2141122889
2141222890
2141322891 fi
21414 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
22892 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2141522893
2141622894 ac_c_werror_flag=$ac_c_werror_flag_safe
2141722895 CFLAGS=$CFLAGS_safe
2142122899
2142222900
2142322901 if test "$hwloc_cv___attribute__noreturn" = "1" ; then
21424 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
21425 $as_echo "yes" >&6; }
22902 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
22903 printf "%s\n" "yes" >&6; }
2142622904 else
21427 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
21428 $as_echo "no" >&6; }
22905 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
22906 printf "%s\n" "no" >&6; }
2142922907 fi
2143022908
2143122909
2143222910
21433 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__(packed)" >&5
21434 $as_echo_n "checking for __attribute__(packed)... " >&6; }
21435 if ${hwloc_cv___attribute__packed+:} false; then :
21436 $as_echo_n "(cached) " >&6
21437 else
22911 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __attribute__(packed)" >&5
22912 printf %s "checking for __attribute__(packed)... " >&6; }
22913 if test ${hwloc_cv___attribute__packed+y}
22914 then :
22915 printf %s "(cached) " >&6
22916 else $as_nop
2143822917
2143922918 #
2144022919 # Try to compile using the C compiler
2144422923
2144522924 struct foo {
2144622925 char a;
21447 int x[2] __attribute__ ((__packed__));
22926 int x2 __attribute__ ((__packed__));
2144822927 };
2144922928
2145022929 int
21451 main ()
22930 main (void)
2145222931 {
2145322932
2145422933 ;
2145522934 return 0;
2145622935 }
2145722936 _ACEOF
21458 if ac_fn_c_try_compile "$LINENO"; then :
22937 if ac_fn_c_try_compile "$LINENO"
22938 then :
2145922939
2146022940 #
2146122941 # In case we did succeed: Fine, but was this due to the
2147822958 fi
2147922959
2148022960
21481 else
22961 else $as_nop
2148222962 hwloc_cv___attribute__packed=0
2148322963 fi
21484 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
22964 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2148522965
2148622966 #
2148722967 # If the attribute is supported by both compilers,
2149722977 /* end confdefs.h. */
2149822978
2149922979 int
21500 main ()
22980 main (void)
2150122981 {
2150222982
21503 int i=4711;
21504 i=usage(&i);
22983 int i=4711;
22984 i=usage(&i);
2150522985
2150622986 ;
2150722987 return 0;
2150822988 }
22989
2150922990 _ACEOF
21510 if ac_fn_c_try_compile "$LINENO"; then :
22991 if ac_fn_c_try_compile "$LINENO"
22992 then :
2151122993 hwloc_cv___attribute__packed=0
21512 else
22994 else $as_nop
2151322995
2151422996 #
2151522997 # In case we did NOT succeed: Fine, but was this due to the
2153323015
2153423016
2153523017 fi
21536 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
23018 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2153723019
2153823020 ac_c_werror_flag=$ac_c_werror_flag_safe
2153923021 CFLAGS=$CFLAGS_safe
2154323025
2154423026
2154523027 if test "$hwloc_cv___attribute__packed" = "1" ; then
21546 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
21547 $as_echo "yes" >&6; }
23028 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
23029 printf "%s\n" "yes" >&6; }
2154823030 else
21549 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
21550 $as_echo "no" >&6; }
23031 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
23032 printf "%s\n" "no" >&6; }
2155123033 fi
2155223034
2155323035
2155423036
21555 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__(pure)" >&5
21556 $as_echo_n "checking for __attribute__(pure)... " >&6; }
21557 if ${hwloc_cv___attribute__pure+:} false; then :
21558 $as_echo_n "(cached) " >&6
21559 else
23037 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __attribute__(pure)" >&5
23038 printf %s "checking for __attribute__(pure)... " >&6; }
23039 if test ${hwloc_cv___attribute__pure+y}
23040 then :
23041 printf %s "(cached) " >&6
23042 else $as_nop
2156023043
2156123044 #
2156223045 # Try to compile using the C compiler
2156823051 int square(int arg) { return arg * arg; }
2156923052
2157023053 int
21571 main ()
23054 main (void)
2157223055 {
2157323056
2157423057 ;
2157523058 return 0;
2157623059 }
2157723060 _ACEOF
21578 if ac_fn_c_try_compile "$LINENO"; then :
23061 if ac_fn_c_try_compile "$LINENO"
23062 then :
2157923063
2158023064 #
2158123065 # In case we did succeed: Fine, but was this due to the
2159823082 fi
2159923083
2160023084
21601 else
23085 else $as_nop
2160223086 hwloc_cv___attribute__pure=0
2160323087 fi
21604 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
23088 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2160523089
2160623090 #
2160723091 # If the attribute is supported by both compilers,
2161723101 /* end confdefs.h. */
2161823102
2161923103 int
21620 main ()
23104 main (void)
2162123105 {
2162223106
21623 int i=4711;
21624 i=usage(&i);
23107 int i=4711;
23108 i=usage(&i);
2162523109
2162623110 ;
2162723111 return 0;
2162823112 }
23113
2162923114 _ACEOF
21630 if ac_fn_c_try_compile "$LINENO"; then :
23115 if ac_fn_c_try_compile "$LINENO"
23116 then :
2163123117 hwloc_cv___attribute__pure=0
21632 else
23118 else $as_nop
2163323119
2163423120 #
2163523121 # In case we did NOT succeed: Fine, but was this due to the
2165323139
2165423140
2165523141 fi
21656 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
23142 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2165723143
2165823144 ac_c_werror_flag=$ac_c_werror_flag_safe
2165923145 CFLAGS=$CFLAGS_safe
2166323149
2166423150
2166523151 if test "$hwloc_cv___attribute__pure" = "1" ; then
21666 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
21667 $as_echo "yes" >&6; }
23152 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
23153 printf "%s\n" "yes" >&6; }
2166823154 else
21669 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
21670 $as_echo "no" >&6; }
23155 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
23156 printf "%s\n" "no" >&6; }
2167123157 fi
2167223158
2167323159
2168923175 ;;
2169023176 esac
2169123177
21692 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__(sentinel)" >&5
21693 $as_echo_n "checking for __attribute__(sentinel)... " >&6; }
21694 if ${hwloc_cv___attribute__sentinel+:} false; then :
21695 $as_echo_n "(cached) " >&6
21696 else
23178 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __attribute__(sentinel)" >&5
23179 printf %s "checking for __attribute__(sentinel)... " >&6; }
23180 if test ${hwloc_cv___attribute__sentinel+y}
23181 then :
23182 printf %s "(cached) " >&6
23183 else $as_nop
2169723184
2169823185 #
2169923186 # Try to compile using the C compiler
2170423191 int my_execlp(const char * file, const char *arg, ...) __attribute__ ((__sentinel__));
2170523192
2170623193 int
21707 main ()
23194 main (void)
2170823195 {
2170923196
2171023197 ;
2171123198 return 0;
2171223199 }
2171323200 _ACEOF
21714 if ac_fn_c_try_compile "$LINENO"; then :
23201 if ac_fn_c_try_compile "$LINENO"
23202 then :
2171523203
2171623204 #
2171723205 # In case we did succeed: Fine, but was this due to the
2173423222 fi
2173523223
2173623224
21737 else
23225 else $as_nop
2173823226 hwloc_cv___attribute__sentinel=0
2173923227 fi
21740 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
23228 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2174123229
2174223230 #
2174323231 # If the attribute is supported by both compilers,
2177323261 int main(void);
2177423262
2177523263 int
21776 main ()
23264 main (void)
2177723265 {
2177823266
21779 int i=4711;
21780 i=usage(&i);
23267 int i=4711;
23268 i=usage(&i);
2178123269
2178223270 ;
2178323271 return 0;
2178423272 }
23273
2178523274 _ACEOF
21786 if ac_fn_c_try_compile "$LINENO"; then :
23275 if ac_fn_c_try_compile "$LINENO"
23276 then :
2178723277 hwloc_cv___attribute__sentinel=0
21788 else
23278 else $as_nop
2178923279
2179023280 #
2179123281 # In case we did NOT succeed: Fine, but was this due to the
2180923299
2181023300
2181123301 fi
21812 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
23302 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2181323303
2181423304 ac_c_werror_flag=$ac_c_werror_flag_safe
2181523305 CFLAGS=$CFLAGS_safe
2181923309
2182023310
2182123311 if test "$hwloc_cv___attribute__sentinel" = "1" ; then
21822 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
21823 $as_echo "yes" >&6; }
23312 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
23313 printf "%s\n" "yes" >&6; }
2182423314 else
21825 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
21826 $as_echo "no" >&6; }
23315 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
23316 printf "%s\n" "no" >&6; }
2182723317 fi
2182823318
2182923319
2183023320
21831 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__(unused)" >&5
21832 $as_echo_n "checking for __attribute__(unused)... " >&6; }
21833 if ${hwloc_cv___attribute__unused+:} false; then :
21834 $as_echo_n "(cached) " >&6
21835 else
23321 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __attribute__(unused)" >&5
23322 printf %s "checking for __attribute__(unused)... " >&6; }
23323 if test ${hwloc_cv___attribute__unused+y}
23324 then :
23325 printf %s "(cached) " >&6
23326 else $as_nop
2183623327
2183723328 #
2183823329 # Try to compile using the C compiler
2184423335 int square(int arg1, int arg2) { return arg2; }
2184523336
2184623337 int
21847 main ()
23338 main (void)
2184823339 {
2184923340
2185023341 ;
2185123342 return 0;
2185223343 }
2185323344 _ACEOF
21854 if ac_fn_c_try_compile "$LINENO"; then :
23345 if ac_fn_c_try_compile "$LINENO"
23346 then :
2185523347
2185623348 #
2185723349 # In case we did succeed: Fine, but was this due to the
2187423366 fi
2187523367
2187623368
21877 else
23369 else $as_nop
2187823370 hwloc_cv___attribute__unused=0
2187923371 fi
21880 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
23372 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2188123373
2188223374 #
2188323375 # If the attribute is supported by both compilers,
2189323385 /* end confdefs.h. */
2189423386
2189523387 int
21896 main ()
23388 main (void)
2189723389 {
2189823390
21899 int i=4711;
21900 i=usage(&i);
23391 int i=4711;
23392 i=usage(&i);
2190123393
2190223394 ;
2190323395 return 0;
2190423396 }
23397
2190523398 _ACEOF
21906 if ac_fn_c_try_compile "$LINENO"; then :
23399 if ac_fn_c_try_compile "$LINENO"
23400 then :
2190723401 hwloc_cv___attribute__unused=0
21908 else
23402 else $as_nop
2190923403
2191023404 #
2191123405 # In case we did NOT succeed: Fine, but was this due to the
2192923423
2193023424
2193123425 fi
21932 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
23426 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2193323427
2193423428 ac_c_werror_flag=$ac_c_werror_flag_safe
2193523429 CFLAGS=$CFLAGS_safe
2193923433
2194023434
2194123435 if test "$hwloc_cv___attribute__unused" = "1" ; then
21942 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
21943 $as_echo "yes" >&6; }
23436 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
23437 printf "%s\n" "yes" >&6; }
2194423438 else
21945 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
21946 $as_echo "no" >&6; }
23439 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
23440 printf "%s\n" "no" >&6; }
2194723441 fi
2194823442
2194923443
2196423458 ;;
2196523459 esac
2196623460
21967 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__(warn_unused_result)" >&5
21968 $as_echo_n "checking for __attribute__(warn_unused_result)... " >&6; }
21969 if ${hwloc_cv___attribute__warn_unused_result+:} false; then :
21970 $as_echo_n "(cached) " >&6
21971 else
23461 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __attribute__(warn_unused_result)" >&5
23462 printf %s "checking for __attribute__(warn_unused_result)... " >&6; }
23463 if test ${hwloc_cv___attribute__warn_unused_result+y}
23464 then :
23465 printf %s "(cached) " >&6
23466 else $as_nop
2197223467
2197323468 #
2197423469 # Try to compile using the C compiler
2198023475 int foo(int arg) { return arg + 3; }
2198123476
2198223477 int
21983 main ()
23478 main (void)
2198423479 {
2198523480
2198623481 ;
2198723482 return 0;
2198823483 }
2198923484 _ACEOF
21990 if ac_fn_c_try_compile "$LINENO"; then :
23485 if ac_fn_c_try_compile "$LINENO"
23486 then :
2199123487
2199223488 #
2199323489 # In case we did succeed: Fine, but was this due to the
2201023506 fi
2201123507
2201223508
22013 else
23509 else $as_nop
2201423510 hwloc_cv___attribute__warn_unused_result=0
2201523511 fi
22016 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
23512 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2201723513
2201823514 #
2201923515 # If the attribute is supported by both compilers,
2205323549 int main(void);
2205423550
2205523551 int
22056 main ()
23552 main (void)
2205723553 {
2205823554
22059 int i=4711;
22060 i=usage(&i);
23555 int i=4711;
23556 i=usage(&i);
2206123557
2206223558 ;
2206323559 return 0;
2206423560 }
23561
2206523562 _ACEOF
22066 if ac_fn_c_try_compile "$LINENO"; then :
23563 if ac_fn_c_try_compile "$LINENO"
23564 then :
2206723565 hwloc_cv___attribute__warn_unused_result=0
22068 else
23566 else $as_nop
2206923567
2207023568 #
2207123569 # In case we did NOT succeed: Fine, but was this due to the
2208923587
2209023588
2209123589 fi
22092 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
23590 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2209323591
2209423592 ac_c_werror_flag=$ac_c_werror_flag_safe
2209523593 CFLAGS=$CFLAGS_safe
2209923597
2210023598
2210123599 if test "$hwloc_cv___attribute__warn_unused_result" = "1" ; then
22102 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
22103 $as_echo "yes" >&6; }
23600 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
23601 printf "%s\n" "yes" >&6; }
2210423602 else
22105 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
22106 $as_echo "no" >&6; }
23603 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
23604 printf "%s\n" "no" >&6; }
2210723605 fi
2210823606
2210923607
2211023608
2211123609
22112 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __attribute__(weak_alias)" >&5
22113 $as_echo_n "checking for __attribute__(weak_alias)... " >&6; }
22114 if ${hwloc_cv___attribute__weak_alias+:} false; then :
22115 $as_echo_n "(cached) " >&6
22116 else
23610 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __attribute__(weak_alias)" >&5
23611 printf %s "checking for __attribute__(weak_alias)... " >&6; }
23612 if test ${hwloc_cv___attribute__weak_alias+y}
23613 then :
23614 printf %s "(cached) " >&6
23615 else $as_nop
2211723616
2211823617 #
2211923618 # Try to compile using the C compiler
2212623625 int foo2(int arg) __attribute__ ((__weak__, __alias__("foo")));
2212723626
2212823627 int
22129 main ()
23628 main (void)
2213023629 {
2213123630
2213223631 ;
2213323632 return 0;
2213423633 }
2213523634 _ACEOF
22136 if ac_fn_c_try_compile "$LINENO"; then :
23635 if ac_fn_c_try_compile "$LINENO"
23636 then :
2213723637
2213823638 #
2213923639 # In case we did succeed: Fine, but was this due to the
2215623656 fi
2215723657
2215823658
22159 else
23659 else $as_nop
2216023660 hwloc_cv___attribute__weak_alias=0
2216123661 fi
22162 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
23662 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2216323663
2216423664 #
2216523665 # If the attribute is supported by both compilers,
2217523675 /* end confdefs.h. */
2217623676
2217723677 int
22178 main ()
23678 main (void)
2217923679 {
2218023680
22181 int i=4711;
22182 i=usage(&i);
23681 int i=4711;
23682 i=usage(&i);
2218323683
2218423684 ;
2218523685 return 0;
2218623686 }
23687
2218723688 _ACEOF
22188 if ac_fn_c_try_compile "$LINENO"; then :
23689 if ac_fn_c_try_compile "$LINENO"
23690 then :
2218923691 hwloc_cv___attribute__weak_alias=0
22190 else
23692 else $as_nop
2219123693
2219223694 #
2219323695 # In case we did NOT succeed: Fine, but was this due to the
2221123713
2221223714
2221323715 fi
22214 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
23716 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2221523717
2221623718 ac_c_werror_flag=$ac_c_werror_flag_safe
2221723719 CFLAGS=$CFLAGS_safe
2222123723
2222223724
2222323725 if test "$hwloc_cv___attribute__weak_alias" = "1" ; then
22224 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
22225 $as_echo "yes" >&6; }
23726 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
23727 printf "%s\n" "yes" >&6; }
2222623728 else
22227 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
22228 $as_echo "no" >&6; }
23729 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
23730 printf "%s\n" "no" >&6; }
2222923731 fi
2223023732
2223123733
2223423736 # Now that all the values are set, define them
2223523737
2223623738
22237 cat >>confdefs.h <<_ACEOF
22238 #define HWLOC_HAVE_ATTRIBUTE_ALIGNED $hwloc_cv___attribute__aligned
22239 _ACEOF
22240
22241
22242 cat >>confdefs.h <<_ACEOF
22243 #define HWLOC_HAVE_ATTRIBUTE_ALWAYS_INLINE $hwloc_cv___attribute__always_inline
22244 _ACEOF
22245
22246
22247 cat >>confdefs.h <<_ACEOF
22248 #define HWLOC_HAVE_ATTRIBUTE_COLD $hwloc_cv___attribute__cold
22249 _ACEOF
22250
22251
22252 cat >>confdefs.h <<_ACEOF
22253 #define HWLOC_HAVE_ATTRIBUTE_CONST $hwloc_cv___attribute__const
22254 _ACEOF
22255
22256
22257 cat >>confdefs.h <<_ACEOF
22258 #define HWLOC_HAVE_ATTRIBUTE_DEPRECATED $hwloc_cv___attribute__deprecated
22259 _ACEOF
22260
22261
22262 cat >>confdefs.h <<_ACEOF
22263 #define HWLOC_HAVE_ATTRIBUTE_FORMAT $hwloc_cv___attribute__format
22264 _ACEOF
22265
22266
22267 cat >>confdefs.h <<_ACEOF
22268 #define HWLOC_HAVE_ATTRIBUTE_HOT $hwloc_cv___attribute__hot
22269 _ACEOF
22270
22271
22272 cat >>confdefs.h <<_ACEOF
22273 #define HWLOC_HAVE_ATTRIBUTE_MALLOC $hwloc_cv___attribute__malloc
22274 _ACEOF
22275
22276
22277 cat >>confdefs.h <<_ACEOF
22278 #define HWLOC_HAVE_ATTRIBUTE_MAY_ALIAS $hwloc_cv___attribute__may_alias
22279 _ACEOF
22280
22281
22282 cat >>confdefs.h <<_ACEOF
22283 #define HWLOC_HAVE_ATTRIBUTE_NO_INSTRUMENT_FUNCTION $hwloc_cv___attribute__no_instrument_function
22284 _ACEOF
22285
22286
22287 cat >>confdefs.h <<_ACEOF
22288 #define HWLOC_HAVE_ATTRIBUTE_NONNULL $hwloc_cv___attribute__nonnull
22289 _ACEOF
22290
22291
22292 cat >>confdefs.h <<_ACEOF
22293 #define HWLOC_HAVE_ATTRIBUTE_NORETURN $hwloc_cv___attribute__noreturn
22294 _ACEOF
22295
22296
22297 cat >>confdefs.h <<_ACEOF
22298 #define HWLOC_HAVE_ATTRIBUTE_PACKED $hwloc_cv___attribute__packed
22299 _ACEOF
22300
22301
22302 cat >>confdefs.h <<_ACEOF
22303 #define HWLOC_HAVE_ATTRIBUTE_PURE $hwloc_cv___attribute__pure
22304 _ACEOF
22305
22306
22307 cat >>confdefs.h <<_ACEOF
22308 #define HWLOC_HAVE_ATTRIBUTE_SENTINEL $hwloc_cv___attribute__sentinel
22309 _ACEOF
22310
22311
22312 cat >>confdefs.h <<_ACEOF
22313 #define HWLOC_HAVE_ATTRIBUTE_UNUSED $hwloc_cv___attribute__unused
22314 _ACEOF
22315
22316
22317 cat >>confdefs.h <<_ACEOF
22318 #define HWLOC_HAVE_ATTRIBUTE_WARN_UNUSED_RESULT $hwloc_cv___attribute__warn_unused_result
22319 _ACEOF
22320
22321
22322 cat >>confdefs.h <<_ACEOF
22323 #define HWLOC_HAVE_ATTRIBUTE_WEAK_ALIAS $hwloc_cv___attribute__weak_alias
22324 _ACEOF
23739 printf "%s\n" "#define HWLOC_HAVE_ATTRIBUTE_ALIGNED $hwloc_cv___attribute__aligned" >>confdefs.h
23740
23741
23742 printf "%s\n" "#define HWLOC_HAVE_ATTRIBUTE_ALWAYS_INLINE $hwloc_cv___attribute__always_inline" >>confdefs.h
23743
23744
23745 printf "%s\n" "#define HWLOC_HAVE_ATTRIBUTE_COLD $hwloc_cv___attribute__cold" >>confdefs.h
23746
23747
23748 printf "%s\n" "#define HWLOC_HAVE_ATTRIBUTE_CONST $hwloc_cv___attribute__const" >>confdefs.h
23749
23750
23751 printf "%s\n" "#define HWLOC_HAVE_ATTRIBUTE_DEPRECATED $hwloc_cv___attribute__deprecated" >>confdefs.h
23752
23753
23754 printf "%s\n" "#define HWLOC_HAVE_ATTRIBUTE_CONSTRUCTOR $hwloc_cv___attribute__constructor" >>confdefs.h
23755
23756
23757 printf "%s\n" "#define HWLOC_HAVE_ATTRIBUTE_FORMAT $hwloc_cv___attribute__format" >>confdefs.h
23758
23759
23760 printf "%s\n" "#define HWLOC_HAVE_ATTRIBUTE_HOT $hwloc_cv___attribute__hot" >>confdefs.h
23761
23762
23763 printf "%s\n" "#define HWLOC_HAVE_ATTRIBUTE_MALLOC $hwloc_cv___attribute__malloc" >>confdefs.h
23764
23765
23766 printf "%s\n" "#define HWLOC_HAVE_ATTRIBUTE_MAY_ALIAS $hwloc_cv___attribute__may_alias" >>confdefs.h
23767
23768
23769 printf "%s\n" "#define HWLOC_HAVE_ATTRIBUTE_NO_INSTRUMENT_FUNCTION $hwloc_cv___attribute__no_instrument_function" >>confdefs.h
23770
23771
23772 printf "%s\n" "#define HWLOC_HAVE_ATTRIBUTE_NONNULL $hwloc_cv___attribute__nonnull" >>confdefs.h
23773
23774
23775 printf "%s\n" "#define HWLOC_HAVE_ATTRIBUTE_NORETURN $hwloc_cv___attribute__noreturn" >>confdefs.h
23776
23777
23778 printf "%s\n" "#define HWLOC_HAVE_ATTRIBUTE_PACKED $hwloc_cv___attribute__packed" >>confdefs.h
23779
23780
23781 printf "%s\n" "#define HWLOC_HAVE_ATTRIBUTE_PURE $hwloc_cv___attribute__pure" >>confdefs.h
23782
23783
23784 printf "%s\n" "#define HWLOC_HAVE_ATTRIBUTE_SENTINEL $hwloc_cv___attribute__sentinel" >>confdefs.h
23785
23786
23787 printf "%s\n" "#define HWLOC_HAVE_ATTRIBUTE_UNUSED $hwloc_cv___attribute__unused" >>confdefs.h
23788
23789
23790 printf "%s\n" "#define HWLOC_HAVE_ATTRIBUTE_WARN_UNUSED_RESULT $hwloc_cv___attribute__warn_unused_result" >>confdefs.h
23791
23792
23793 printf "%s\n" "#define HWLOC_HAVE_ATTRIBUTE_WEAK_ALIAS $hwloc_cv___attribute__weak_alias" >>confdefs.h
2232523794
2232623795
2232723796
2233123800 # Check if the compiler has support for visibility, like some
2233223801 # versions of gcc, icc, Sun Studio cc.
2233323802 # Check whether --enable-visibility was given.
22334 if test "${enable_visibility+set}" = set; then :
23803 if test ${enable_visibility+y}
23804 then :
2233523805 enableval=$enable_visibility;
2233623806 fi
2233723807
2234523815 hwloc_visibility_define=0
2234623816 hwloc_msg="whether to enable symbol visibility"
2234723817 if test "$enable_visibility" = "no"; then
22348 { $as_echo "$as_me:${as_lineno-$LINENO}: checking $hwloc_msg" >&5
22349 $as_echo_n "checking $hwloc_msg... " >&6; }
22350 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (disabled)" >&5
22351 $as_echo "no (disabled)" >&6; }
23818 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking $hwloc_msg" >&5
23819 printf %s "checking $hwloc_msg... " >&6; }
23820 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no (disabled)" >&5
23821 printf "%s\n" "no (disabled)" >&6; }
2235223822 else
2235323823 CFLAGS_orig=$CFLAGS
2235423824
2236723837 ;;
2236823838 esac
2236923839
22370 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports $hwloc_add" >&5
22371 $as_echo_n "checking if $CC supports $hwloc_add... " >&6; }
23840 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $CC supports $hwloc_add" >&5
23841 printf %s "checking if $CC supports $hwloc_add... " >&6; }
2237223842 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2237323843 /* end confdefs.h. */
2237423844
2237623846 __attribute__((visibility("default"))) int foo;
2237723847
2237823848 int
22379 main ()
23849 main (void)
2238023850 {
2238123851 fprintf(stderr, "Hello, world\n");
2238223852 ;
2238323853 return 0;
2238423854 }
2238523855 _ACEOF
22386 if ac_fn_c_try_link "$LINENO"; then :
22387 if test -s conftest.err; then :
23856 if ac_fn_c_try_link "$LINENO"
23857 then :
23858 if test -s conftest.err
23859 then :
2238823860 $GREP -iq visibility conftest.err
2238923861 # If we find "visibility" in the stderr, then
2239023862 # assume it doesn't work
22391 if test "$?" = "0"; then :
23863 if test "$?" = "0"
23864 then :
2239223865 hwloc_add=
2239323866 fi
2239423867 fi
2239523868
22396 else
23869 else $as_nop
2239723870 hwloc_add=
2239823871 fi
22399 rm -f core conftest.err conftest.$ac_objext \
23872 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2240023873 conftest$ac_exeext conftest.$ac_ext
22401 if test "$hwloc_add" = ""; then :
22402 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
22403 $as_echo "no" >&6; }
22404 else
22405 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
22406 $as_echo "yes" >&6; }
23874 if test "$hwloc_add" = ""
23875 then :
23876 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
23877 printf "%s\n" "no" >&6; }
23878 else $as_nop
23879 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
23880 printf "%s\n" "yes" >&6; }
2240723881 fi
2240823882
2240923883 CFLAGS=$CFLAGS_orig
2241123885
2241223886 if test "$hwloc_add" != "" ; then
2241323887 hwloc_visibility_define=1
22414 { $as_echo "$as_me:${as_lineno-$LINENO}: checking $hwloc_msg" >&5
22415 $as_echo_n "checking $hwloc_msg... " >&6; }
22416 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (via $hwloc_add)" >&5
22417 $as_echo "yes (via $hwloc_add)" >&6; }
23888 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking $hwloc_msg" >&5
23889 printf %s "checking $hwloc_msg... " >&6; }
23890 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes (via $hwloc_add)" >&5
23891 printf "%s\n" "yes (via $hwloc_add)" >&6; }
2241823892 elif test "$enable_visibility" = "yes"; then
2241923893 as_fn_error $? "Symbol visibility support requested but compiler does not seem to support it. Aborting" "$LINENO" 5
2242023894 else
22421 { $as_echo "$as_me:${as_lineno-$LINENO}: checking $hwloc_msg" >&5
22422 $as_echo_n "checking $hwloc_msg... " >&6; }
22423 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (unsupported)" >&5
22424 $as_echo "no (unsupported)" >&6; }
23895 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking $hwloc_msg" >&5
23896 printf %s "checking $hwloc_msg... " >&6; }
23897 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no (unsupported)" >&5
23898 printf "%s\n" "no (unsupported)" >&6; }
2242523899 fi
2242623900 unset hwloc_add
2242723901 fi
2242823902
2242923903
22430 cat >>confdefs.h <<_ACEOF
22431 #define HWLOC_C_HAVE_VISIBILITY $hwloc_visibility_define
22432 _ACEOF
23904 printf "%s\n" "#define HWLOC_C_HAVE_VISIBILITY $hwloc_visibility_define" >>confdefs.h
2243323905
2243423906
2243523907 HWLOC_CFLAGS="$HWLOC_FLAGS $HWLOC_VISIBILITY_CFLAGS"
22436 if test "$HWLOC_VISIBILITY_CFLAGS" != ""; then :
22437 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"$HWLOC_VISIBILITY_CFLAGS\" has been added to the hwloc CFLAGS" >&5
22438 $as_echo "$as_me: WARNING: \"$HWLOC_VISIBILITY_CFLAGS\" has been added to the hwloc CFLAGS" >&2;}
23908 if test "$HWLOC_VISIBILITY_CFLAGS" != ""
23909 then :
23910 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: \"$HWLOC_VISIBILITY_CFLAGS\" has been added to the hwloc CFLAGS" >&5
23911 printf "%s\n" "$as_me: WARNING: \"$HWLOC_VISIBILITY_CFLAGS\" has been added to the hwloc CFLAGS" >&2;}
2243923912 fi
2244023913
2244123914 # Make sure the compiler returns an error code when function arg
2244223915 # count is wrong, otherwise sched_setaffinity checks may fail.
2244323916 HWLOC_STRICT_ARGS_CFLAGS=
2244423917 hwloc_args_check=0
22445 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler rejects function calls with too many arguments" >&5
22446 $as_echo_n "checking whether the C compiler rejects function calls with too many arguments... " >&6; }
23918 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler rejects function calls with too many arguments" >&5
23919 printf %s "checking whether the C compiler rejects function calls with too many arguments... " >&6; }
2244723920 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2244823921 /* end confdefs.h. */
2244923922
2245123924 int foo(void) { return one_arg(1, 2); }
2245223925
2245323926 int
22454 main ()
23927 main (void)
2245523928 {
2245623929
2245723930 ;
2245823931 return 0;
2245923932 }
2246023933 _ACEOF
22461 if ac_fn_c_try_compile "$LINENO"; then :
22462 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
22463 $as_echo "no" >&6; }
22464 else
23934 if ac_fn_c_try_compile "$LINENO"
23935 then :
23936 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
23937 printf "%s\n" "no" >&6; }
23938 else $as_nop
2246523939 hwloc_args_check=1
22466 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
22467 $as_echo "yes" >&6; }
22468 fi
22469 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
22470 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler rejects function calls with too few arguments" >&5
22471 $as_echo_n "checking whether the C compiler rejects function calls with too few arguments... " >&6; }
23940 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
23941 printf "%s\n" "yes" >&6; }
23942 fi
23943 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
23944 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler rejects function calls with too few arguments" >&5
23945 printf %s "checking whether the C compiler rejects function calls with too few arguments... " >&6; }
2247223946 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2247323947 /* end confdefs.h. */
2247423948
2247623950 int foo(void) { return two_arg(3); }
2247723951
2247823952 int
22479 main ()
23953 main (void)
2248023954 {
2248123955
2248223956 ;
2248323957 return 0;
2248423958 }
2248523959 _ACEOF
22486 if ac_fn_c_try_compile "$LINENO"; then :
22487 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
22488 $as_echo "no" >&6; }
22489 else
23960 if ac_fn_c_try_compile "$LINENO"
23961 then :
23962 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
23963 printf "%s\n" "no" >&6; }
23964 else $as_nop
2249023965 hwloc_args_check=`expr $hwloc_args_check + 1`
22491 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
22492 $as_echo "yes" >&6; }
22493 fi
22494 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
22495 if test "$hwloc_args_check" != "2"; then :
22496
22497 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Your C compiler does not consider incorrect argument counts to be a fatal error." >&5
22498 $as_echo "$as_me: WARNING: Your C compiler does not consider incorrect argument counts to be a fatal error." >&2;}
23966 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
23967 printf "%s\n" "yes" >&6; }
23968 fi
23969 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
23970 if test "$hwloc_args_check" != "2"
23971 then :
23972
23973 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Your C compiler does not consider incorrect argument counts to be a fatal error." >&5
23974 printf "%s\n" "$as_me: WARNING: Your C compiler does not consider incorrect argument counts to be a fatal error." >&2;}
2249923975 case "$hwloc_c_vendor" in
2250023976 ibm)
2250123977 HWLOC_STRICT_ARGS_CFLAGS="-qhalt=e"
2250523981 ;;
2250623982 *)
2250723983 HWLOC_STRICT_ARGS_CFLAGS=FAIL
22508 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Please report this warning and configure using a different C compiler if possible." >&5
22509 $as_echo "$as_me: WARNING: Please report this warning and configure using a different C compiler if possible." >&2;}
23984 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Please report this warning and configure using a different C compiler if possible." >&5
23985 printf "%s\n" "$as_me: WARNING: Please report this warning and configure using a different C compiler if possible." >&2;}
2251023986 ;;
2251123987 esac
22512 if test "$HWLOC_STRICT_ARGS_CFLAGS" != "FAIL"; then :
22513
22514 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Configure will append '$HWLOC_STRICT_ARGS_CFLAGS' to the value of CFLAGS when needed." >&5
22515 $as_echo "$as_me: WARNING: Configure will append '$HWLOC_STRICT_ARGS_CFLAGS' to the value of CFLAGS when needed." >&2;}
22516 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Alternatively you may configure with a different compiler." >&5
22517 $as_echo "$as_me: WARNING: Alternatively you may configure with a different compiler." >&2;}
22518
22519 fi
22520
22521 fi
22522
22523 if test "$hwloc_mode" = "standalone"; then :
23988 if test "$HWLOC_STRICT_ARGS_CFLAGS" != "FAIL"
23989 then :
23990
23991 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Configure will append '$HWLOC_STRICT_ARGS_CFLAGS' to the value of CFLAGS when needed." >&5
23992 printf "%s\n" "$as_me: WARNING: Configure will append '$HWLOC_STRICT_ARGS_CFLAGS' to the value of CFLAGS when needed." >&2;}
23993 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Alternatively you may configure with a different compiler." >&5
23994 printf "%s\n" "$as_me: WARNING: Alternatively you may configure with a different compiler." >&2;}
23995
23996 fi
23997
23998 fi
23999
24000 if test "$hwloc_mode" = "standalone"
24001 then :
2252424002
2252524003 # For the common developer case, if we're in a developer checkout and
2252624004 # using the GNU compilers, turn on maximum warnings unless
2252724005 # specifically disabled by the user.
22528 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable \"picky\" compiler mode" >&5
22529 $as_echo_n "checking whether to enable \"picky\" compiler mode... " >&6; }
24006 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable \"picky\" compiler mode" >&5
24007 printf %s "checking whether to enable \"picky\" compiler mode... " >&6; }
2253024008 hwloc_want_picky=0
22531 if test "$hwloc_c_vendor" = "gnu"; then :
22532 if test -e "$srcdir/.git"; then :
24009 if test "$hwloc_c_vendor" = "gnu"
24010 then :
24011 if test -e "$srcdir/.git"
24012 then :
2253324013 hwloc_want_picky=1
2253424014 fi
2253524015 fi
2253624016 if test "$enable_picky" = "yes"; then
2253724017 if test "$hwloc_c_vendor" = "gnu"; then
22538 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
22539 $as_echo "yes" >&6; }
24018 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
24019 printf "%s\n" "yes" >&6; }
2254024020 hwloc_want_picky=1
2254124021 else
22542 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
22543 $as_echo "no" >&6; }
22544 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Warning: --enable-picky used, but is currently only defined for the GCC compiler set -- automatically disabled" >&5
22545 $as_echo "$as_me: WARNING: Warning: --enable-picky used, but is currently only defined for the GCC compiler set -- automatically disabled" >&2;}
24022 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
24023 printf "%s\n" "no" >&6; }
24024 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Warning: --enable-picky used, but is currently only defined for the GCC compiler set -- automatically disabled" >&5
24025 printf "%s\n" "$as_me: WARNING: Warning: --enable-picky used, but is currently only defined for the GCC compiler set -- automatically disabled" >&2;}
2254624026 hwloc_want_picky=0
2254724027 fi
2254824028 elif test "$enable_picky" = "no"; then
22549 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
22550 $as_echo "no" >&6; }
24029 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
24030 printf "%s\n" "no" >&6; }
2255124031 hwloc_want_picky=0
2255224032 else
2255324033 if test "$hwloc_want_picky" = 1; then
22554 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes (default)" >&5
22555 $as_echo "yes (default)" >&6; }
24034 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes (default)" >&5
24035 printf "%s\n" "yes (default)" >&6; }
2255624036 else
22557 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (default)" >&5
22558 $as_echo "no (default)" >&6; }
24037 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no (default)" >&5
24038 printf "%s\n" "no (default)" >&6; }
2255924039 fi
2256024040 fi
2256124041 if test "$hwloc_want_picky" = 1; then
2256824048
2256924049 tmp_save_CFLAGS="$CFLAGS"
2257024050 CFLAGS="-Wdiscarded-qualifiers -Werror"
22571 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gcc supports -Wdiscarded-qualifiers" >&5
22572 $as_echo_n "checking if gcc supports -Wdiscarded-qualifiers... " >&6; }
24051 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if gcc supports -Wdiscarded-qualifiers" >&5
24052 printf %s "checking if gcc supports -Wdiscarded-qualifiers... " >&6; }
2257324053 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2257424054 /* end confdefs.h. */
2257524055 int i;
2257624056 int
22577 main ()
24057 main (void)
2257824058 {
2257924059
2258024060 ;
2258124061 return 0;
2258224062 }
2258324063 _ACEOF
22584 if ac_fn_c_try_compile "$LINENO"; then :
22585 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
22586 $as_echo "yes" >&6; }
24064 if ac_fn_c_try_compile "$LINENO"
24065 then :
24066 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
24067 printf "%s\n" "yes" >&6; }
2258724068 add="$add -Wdiscarded-qualifiers"
2258824069
22589 else
22590 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
22591 $as_echo "no" >&6; }
22592 fi
22593 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
24070 else $as_nop
24071 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
24072 printf "%s\n" "no" >&6; }
24073 fi
24074 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2259424075 CFLAGS="$tmp_save_CFLAGS"
2259524076
2259624077
2259724078 tmp_save_CFLAGS="$CFLAGS"
2259824079 CFLAGS="-Wvariadic-macros -Werror"
22599 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gcc supports -Wvariadic-macros" >&5
22600 $as_echo_n "checking if gcc supports -Wvariadic-macros... " >&6; }
24080 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if gcc supports -Wvariadic-macros" >&5
24081 printf %s "checking if gcc supports -Wvariadic-macros... " >&6; }
2260124082 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2260224083 /* end confdefs.h. */
2260324084 int i;
2260424085 int
22605 main ()
24086 main (void)
2260624087 {
2260724088
2260824089 ;
2260924090 return 0;
2261024091 }
2261124092 _ACEOF
22612 if ac_fn_c_try_compile "$LINENO"; then :
22613 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
22614 $as_echo "yes" >&6; }
24093 if ac_fn_c_try_compile "$LINENO"
24094 then :
24095 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
24096 printf "%s\n" "yes" >&6; }
2261524097 add="$add -Wvariadic-macros"
2261624098
22617 else
22618 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
22619 $as_echo "no" >&6; }
22620 fi
22621 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
24099 else $as_nop
24100 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
24101 printf "%s\n" "no" >&6; }
24102 fi
24103 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2262224104 CFLAGS="$tmp_save_CFLAGS"
2262324105
2262424106
2262524107 tmp_save_CFLAGS="$CFLAGS"
2262624108 CFLAGS="-Wtype-limits -Werror"
22627 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gcc supports -Wtype-limits" >&5
22628 $as_echo_n "checking if gcc supports -Wtype-limits... " >&6; }
24109 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if gcc supports -Wtype-limits" >&5
24110 printf %s "checking if gcc supports -Wtype-limits... " >&6; }
2262924111 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2263024112 /* end confdefs.h. */
2263124113 int i;
2263224114 int
22633 main ()
24115 main (void)
2263424116 {
2263524117
2263624118 ;
2263724119 return 0;
2263824120 }
2263924121 _ACEOF
22640 if ac_fn_c_try_compile "$LINENO"; then :
22641 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
22642 $as_echo "yes" >&6; }
24122 if ac_fn_c_try_compile "$LINENO"
24123 then :
24124 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
24125 printf "%s\n" "yes" >&6; }
2264324126 add="$add -Wtype-limits"
2264424127
22645 else
22646 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
22647 $as_echo "no" >&6; }
22648 fi
22649 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
24128 else $as_nop
24129 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
24130 printf "%s\n" "no" >&6; }
24131 fi
24132 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2265024133 CFLAGS="$tmp_save_CFLAGS"
2265124134
2265224135
2265324136 tmp_save_CFLAGS="$CFLAGS"
2265424137 CFLAGS="-Wstack-usage=262144 -Werror"
22655 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gcc supports -Wstack-usage=262144" >&5
22656 $as_echo_n "checking if gcc supports -Wstack-usage=262144... " >&6; }
24138 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if gcc supports -Wstack-usage=262144" >&5
24139 printf %s "checking if gcc supports -Wstack-usage=262144... " >&6; }
2265724140 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2265824141 /* end confdefs.h. */
2265924142 int i;
2266024143 int
22661 main ()
24144 main (void)
2266224145 {
2266324146
2266424147 ;
2266524148 return 0;
2266624149 }
2266724150 _ACEOF
22668 if ac_fn_c_try_compile "$LINENO"; then :
22669 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
22670 $as_echo "yes" >&6; }
24151 if ac_fn_c_try_compile "$LINENO"
24152 then :
24153 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
24154 printf "%s\n" "yes" >&6; }
2267124155 add="$add -Wstack-usage=262144"
2267224156
22673 else
22674 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
22675 $as_echo "no" >&6; }
22676 fi
22677 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
24157 else $as_nop
24158 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
24159 printf "%s\n" "no" >&6; }
24160 fi
24161 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2267824162 CFLAGS="$tmp_save_CFLAGS"
2267924163
2268024164
2268224166
2268324167 tmp_save_CFLAGS="$CFLAGS"
2268424168 CFLAGS="-Wmissing-field-initializers -Werror"
22685 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gcc supports -Wmissing-field-initializers" >&5
22686 $as_echo_n "checking if gcc supports -Wmissing-field-initializers... " >&6; }
24169 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if gcc supports -Wmissing-field-initializers" >&5
24170 printf %s "checking if gcc supports -Wmissing-field-initializers... " >&6; }
2268724171 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2268824172 /* end confdefs.h. */
2268924173 int i;
2269024174 int
22691 main ()
24175 main (void)
2269224176 {
2269324177
2269424178 ;
2269524179 return 0;
2269624180 }
2269724181 _ACEOF
22698 if ac_fn_c_try_compile "$LINENO"; then :
22699 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
22700 $as_echo "yes" >&6; }
24182 if ac_fn_c_try_compile "$LINENO"
24183 then :
24184 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
24185 printf "%s\n" "yes" >&6; }
2270124186 add="$add -Wmissing-field-initializers"
2270224187
22703 $as_echo "#define HWLOC_HAVE_GCC_W_MISSING_FIELD_INITIALIZERS 1" >>confdefs.h
22704
22705 else
22706 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
22707 $as_echo "no" >&6; }
22708 fi
22709 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
24188 printf "%s\n" "#define HWLOC_HAVE_GCC_W_MISSING_FIELD_INITIALIZERS 1" >>confdefs.h
24189
24190 else $as_nop
24191 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
24192 printf "%s\n" "no" >&6; }
24193 fi
24194 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2271024195 CFLAGS="$tmp_save_CFLAGS"
2271124196
2271224197
2271324198 tmp_save_CFLAGS="$CFLAGS"
2271424199 CFLAGS="-Wcast-function-type -Werror"
22715 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gcc supports -Wcast-function-type" >&5
22716 $as_echo_n "checking if gcc supports -Wcast-function-type... " >&6; }
24200 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if gcc supports -Wcast-function-type" >&5
24201 printf %s "checking if gcc supports -Wcast-function-type... " >&6; }
2271724202 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2271824203 /* end confdefs.h. */
2271924204 int i;
2272024205 int
22721 main ()
24206 main (void)
2272224207 {
2272324208
2272424209 ;
2272524210 return 0;
2272624211 }
2272724212 _ACEOF
22728 if ac_fn_c_try_compile "$LINENO"; then :
22729 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
22730 $as_echo "yes" >&6; }
24213 if ac_fn_c_try_compile "$LINENO"
24214 then :
24215 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
24216 printf "%s\n" "yes" >&6; }
2273124217 add="$add -Wcast-function-type"
2273224218
22733 $as_echo "#define HWLOC_HAVE_GCC_W_CAST_FUNCTION_TYPE 1" >>confdefs.h
22734
22735 else
22736 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
22737 $as_echo "no" >&6; }
22738 fi
22739 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
24219 printf "%s\n" "#define HWLOC_HAVE_GCC_W_CAST_FUNCTION_TYPE 1" >>confdefs.h
24220
24221 else $as_nop
24222 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
24223 printf "%s\n" "no" >&6; }
24224 fi
24225 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2274024226 CFLAGS="$tmp_save_CFLAGS"
2274124227
2274224228
2274924235 # Now detect support
2275024236 #
2275124237
22752 for ac_header in unistd.h
22753 do :
22754 ac_fn_c_check_header_mongrel "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default"
22755 if test "x$ac_cv_header_unistd_h" = xyes; then :
22756 cat >>confdefs.h <<_ACEOF
22757 #define HAVE_UNISTD_H 1
22758 _ACEOF
22759
22760 fi
22761
22762 done
22763
22764 for ac_header in dirent.h
22765 do :
22766 ac_fn_c_check_header_mongrel "$LINENO" "dirent.h" "ac_cv_header_dirent_h" "$ac_includes_default"
22767 if test "x$ac_cv_header_dirent_h" = xyes; then :
22768 cat >>confdefs.h <<_ACEOF
22769 #define HAVE_DIRENT_H 1
22770 _ACEOF
22771
22772 fi
22773
22774 done
22775
22776 for ac_header in strings.h
22777 do :
22778 ac_fn_c_check_header_mongrel "$LINENO" "strings.h" "ac_cv_header_strings_h" "$ac_includes_default"
22779 if test "x$ac_cv_header_strings_h" = xyes; then :
22780 cat >>confdefs.h <<_ACEOF
22781 #define HAVE_STRINGS_H 1
22782 _ACEOF
22783
22784 fi
22785
22786 done
22787
22788 for ac_header in ctype.h
22789 do :
22790 ac_fn_c_check_header_mongrel "$LINENO" "ctype.h" "ac_cv_header_ctype_h" "$ac_includes_default"
22791 if test "x$ac_cv_header_ctype_h" = xyes; then :
22792 cat >>confdefs.h <<_ACEOF
22793 #define HAVE_CTYPE_H 1
22794 _ACEOF
22795
22796 fi
22797
22798 done
22799
22800
22801 for ac_func in strcasecmp
24238 ac_fn_c_check_header_compile "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default"
24239 if test "x$ac_cv_header_unistd_h" = xyes
24240 then :
24241 printf "%s\n" "#define HAVE_UNISTD_H 1" >>confdefs.h
24242
24243 fi
24244
24245 ac_fn_c_check_header_compile "$LINENO" "dirent.h" "ac_cv_header_dirent_h" "$ac_includes_default"
24246 if test "x$ac_cv_header_dirent_h" = xyes
24247 then :
24248 printf "%s\n" "#define HAVE_DIRENT_H 1" >>confdefs.h
24249
24250 fi
24251
24252 ac_fn_c_check_header_compile "$LINENO" "strings.h" "ac_cv_header_strings_h" "$ac_includes_default"
24253 if test "x$ac_cv_header_strings_h" = xyes
24254 then :
24255 printf "%s\n" "#define HAVE_STRINGS_H 1" >>confdefs.h
24256
24257 fi
24258
24259 ac_fn_c_check_header_compile "$LINENO" "ctype.h" "ac_cv_header_ctype_h" "$ac_includes_default"
24260 if test "x$ac_cv_header_ctype_h" = xyes
24261 then :
24262 printf "%s\n" "#define HAVE_CTYPE_H 1" >>confdefs.h
24263
24264 fi
24265
24266
24267
24268 for ac_func in strcasecmp
2280224269 do :
2280324270 ac_fn_c_check_func "$LINENO" "strcasecmp" "ac_cv_func_strcasecmp"
22804 if test "x$ac_cv_func_strcasecmp" = xyes; then :
22805 cat >>confdefs.h <<_ACEOF
22806 #define HAVE_STRCASECMP 1
22807 _ACEOF
22808
22809
22810 ac_fn_c_check_decl "$LINENO" "strcasecmp" "ac_cv_have_decl_strcasecmp" "$ac_includes_default"
22811 if test "x$ac_cv_have_decl_strcasecmp" = xyes; then :
22812
22813 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function strcasecmp has a complete prototype" >&5
22814 $as_echo_n "checking whether function strcasecmp has a complete prototype... " >&6; }
24271 if test "x$ac_cv_func_strcasecmp" = xyes
24272 then :
24273 printf "%s\n" "#define HAVE_STRCASECMP 1" >>confdefs.h
24274
24275
24276 ac_fn_check_decl "$LINENO" "strcasecmp" "ac_cv_have_decl_strcasecmp" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
24277 if test "x$ac_cv_have_decl_strcasecmp" = xyes
24278 then :
24279
24280 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether function strcasecmp has a complete prototype" >&5
24281 printf %s "checking whether function strcasecmp has a complete prototype... " >&6; }
2281524282
2281624283 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2281724284 /* end confdefs.h. */
2281824285 $ac_includes_default
2281924286 int
22820 main ()
24287 main (void)
2282124288 {
2282224289 strcasecmp(1,2,3,4,5,6,7,8,9,10);
2282324290
2282524292 return 0;
2282624293 }
2282724294 _ACEOF
22828 if ac_fn_c_try_compile "$LINENO"; then :
22829 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
22830 $as_echo "no" >&6; }
22831
22832 else
22833 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
22834 $as_echo "yes" >&6; }
22835
22836
22837 $as_echo "#define HWLOC_HAVE_DECL_STRCASECMP 1" >>confdefs.h
22838
22839
22840
22841 fi
22842 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
22843 fi
22844
22845
22846
22847 fi
24295 if ac_fn_c_try_compile "$LINENO"
24296 then :
24297 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
24298 printf "%s\n" "no" >&6; }
24299
24300 else $as_nop
24301 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
24302 printf "%s\n" "yes" >&6; }
24303
24304
24305 printf "%s\n" "#define HWLOC_HAVE_DECL_STRCASECMP 1" >>confdefs.h
24306
24307
24308
24309 fi
24310 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
24311 fi
24312
24313
24314 fi
24315
2284824316 done
2284924317
22850 for ac_func in strncasecmp
24318 for ac_func in strncasecmp
2285124319 do :
2285224320 ac_fn_c_check_func "$LINENO" "strncasecmp" "ac_cv_func_strncasecmp"
22853 if test "x$ac_cv_func_strncasecmp" = xyes; then :
22854 cat >>confdefs.h <<_ACEOF
22855 #define HAVE_STRNCASECMP 1
22856 _ACEOF
22857
22858
22859 ac_fn_c_check_decl "$LINENO" "strncasecmp" "ac_cv_have_decl_strncasecmp" "$ac_includes_default"
22860 if test "x$ac_cv_have_decl_strncasecmp" = xyes; then :
22861
22862 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function strncasecmp has a complete prototype" >&5
22863 $as_echo_n "checking whether function strncasecmp has a complete prototype... " >&6; }
24321 if test "x$ac_cv_func_strncasecmp" = xyes
24322 then :
24323 printf "%s\n" "#define HAVE_STRNCASECMP 1" >>confdefs.h
24324
24325
24326 ac_fn_check_decl "$LINENO" "strncasecmp" "ac_cv_have_decl_strncasecmp" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
24327 if test "x$ac_cv_have_decl_strncasecmp" = xyes
24328 then :
24329
24330 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether function strncasecmp has a complete prototype" >&5
24331 printf %s "checking whether function strncasecmp has a complete prototype... " >&6; }
2286424332
2286524333 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2286624334 /* end confdefs.h. */
2286724335 $ac_includes_default
2286824336 int
22869 main ()
24337 main (void)
2287024338 {
2287124339 strncasecmp(1,2,3,4,5,6,7,8,9,10);
2287224340
2287424342 return 0;
2287524343 }
2287624344 _ACEOF
22877 if ac_fn_c_try_compile "$LINENO"; then :
22878 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
22879 $as_echo "no" >&6; }
22880
22881 else
22882 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
22883 $as_echo "yes" >&6; }
22884
22885
22886 $as_echo "#define HWLOC_HAVE_DECL_STRNCASECMP 1" >>confdefs.h
22887
22888
22889
22890 fi
22891 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
22892 fi
22893
22894
22895
22896 fi
24345 if ac_fn_c_try_compile "$LINENO"
24346 then :
24347 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
24348 printf "%s\n" "no" >&6; }
24349
24350 else $as_nop
24351 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
24352 printf "%s\n" "yes" >&6; }
24353
24354
24355 printf "%s\n" "#define HWLOC_HAVE_DECL_STRNCASECMP 1" >>confdefs.h
24356
24357
24358
24359 fi
24360 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
24361 fi
24362
24363
24364 fi
24365
2289724366 done
2289824367
22899
22900 for ac_func in strftime
22901 do :
22902 ac_fn_c_check_func "$LINENO" "strftime" "ac_cv_func_strftime"
22903 if test "x$ac_cv_func_strftime" = xyes; then :
22904 cat >>confdefs.h <<_ACEOF
22905 #define HAVE_STRFTIME 1
22906 _ACEOF
22907
22908 fi
22909 done
22910
22911 for ac_func in setlocale
22912 do :
22913 ac_fn_c_check_func "$LINENO" "setlocale" "ac_cv_func_setlocale"
22914 if test "x$ac_cv_func_setlocale" = xyes; then :
22915 cat >>confdefs.h <<_ACEOF
22916 #define HAVE_SETLOCALE 1
22917 _ACEOF
22918
22919 fi
22920 done
22921
22922
22923 ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default"
22924 if test "x$ac_cv_header_stdint_h" = xyes; then :
22925
22926
22927 $as_echo "#define HWLOC_HAVE_STDINT_H 1" >>confdefs.h
22928
22929
22930 fi
22931
22932
22933 for ac_header in sys/mman.h
22934 do :
22935 ac_fn_c_check_header_mongrel "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default"
22936 if test "x$ac_cv_header_sys_mman_h" = xyes; then :
22937 cat >>confdefs.h <<_ACEOF
22938 #define HAVE_SYS_MMAN_H 1
22939 _ACEOF
22940
22941 fi
22942
22943 done
24368 ac_fn_c_check_func "$LINENO" "strftime" "ac_cv_func_strftime"
24369 if test "x$ac_cv_func_strftime" = xyes
24370 then :
24371 printf "%s\n" "#define HAVE_STRFTIME 1" >>confdefs.h
24372
24373 fi
24374
24375 ac_fn_c_check_func "$LINENO" "setlocale" "ac_cv_func_setlocale"
24376 if test "x$ac_cv_func_setlocale" = xyes
24377 then :
24378 printf "%s\n" "#define HAVE_SETLOCALE 1" >>confdefs.h
24379
24380 fi
24381
24382
24383 ac_fn_c_check_header_compile "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default"
24384 if test "x$ac_cv_header_stdint_h" = xyes
24385 then :
24386
24387
24388 printf "%s\n" "#define HWLOC_HAVE_STDINT_H 1" >>confdefs.h
24389
24390
24391 fi
24392
24393 ac_fn_c_check_header_compile "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default"
24394 if test "x$ac_cv_header_sys_mman_h" = xyes
24395 then :
24396 printf "%s\n" "#define HAVE_SYS_MMAN_H 1" >>confdefs.h
24397
24398 fi
2294424399
2294524400
2294624401 if test x$hwloc_freebsd = xyes; then
2294724402 echo
2294824403 echo "**** FreeBSD-specific checks"
2294924404
22950 for ac_header in sys/domainset.h
22951 do :
22952 ac_fn_c_check_header_mongrel "$LINENO" "sys/domainset.h" "ac_cv_header_sys_domainset_h" "$ac_includes_default"
22953 if test "x$ac_cv_header_sys_domainset_h" = xyes; then :
22954 cat >>confdefs.h <<_ACEOF
22955 #define HAVE_SYS_DOMAINSET_H 1
22956 _ACEOF
22957
22958 fi
22959
22960 done
22961
22962 for ac_header in sys/thr.h
22963 do :
22964 ac_fn_c_check_header_mongrel "$LINENO" "sys/thr.h" "ac_cv_header_sys_thr_h" "$ac_includes_default"
22965 if test "x$ac_cv_header_sys_thr_h" = xyes; then :
22966 cat >>confdefs.h <<_ACEOF
22967 #define HAVE_SYS_THR_H 1
22968 _ACEOF
22969
22970 fi
22971
22972 done
22973
22974 for ac_header in pthread_np.h
22975 do :
22976 ac_fn_c_check_header_mongrel "$LINENO" "pthread_np.h" "ac_cv_header_pthread_np_h" "$ac_includes_default"
22977 if test "x$ac_cv_header_pthread_np_h" = xyes; then :
22978 cat >>confdefs.h <<_ACEOF
22979 #define HAVE_PTHREAD_NP_H 1
22980 _ACEOF
22981
22982 fi
22983
22984 done
22985
22986 for ac_header in sys/cpuset.h
22987 do :
22988 ac_fn_c_check_header_compile "$LINENO" "sys/cpuset.h" "ac_cv_header_sys_cpuset_h" "#include <sys/param.h>
24405 ac_fn_c_check_header_compile "$LINENO" "sys/domainset.h" "ac_cv_header_sys_domainset_h" "$ac_includes_default"
24406 if test "x$ac_cv_header_sys_domainset_h" = xyes
24407 then :
24408 printf "%s\n" "#define HAVE_SYS_DOMAINSET_H 1" >>confdefs.h
24409
24410 fi
24411
24412 ac_fn_c_check_header_compile "$LINENO" "sys/thr.h" "ac_cv_header_sys_thr_h" "$ac_includes_default"
24413 if test "x$ac_cv_header_sys_thr_h" = xyes
24414 then :
24415 printf "%s\n" "#define HAVE_SYS_THR_H 1" >>confdefs.h
24416
24417 fi
24418
24419 ac_fn_c_check_header_compile "$LINENO" "pthread_np.h" "ac_cv_header_pthread_np_h" "$ac_includes_default"
24420 if test "x$ac_cv_header_pthread_np_h" = xyes
24421 then :
24422 printf "%s\n" "#define HAVE_PTHREAD_NP_H 1" >>confdefs.h
24423
24424 fi
24425
24426 ac_fn_c_check_header_compile "$LINENO" "sys/cpuset.h" "ac_cv_header_sys_cpuset_h" "#include <sys/param.h>
2298924427 "
22990 if test "x$ac_cv_header_sys_cpuset_h" = xyes; then :
22991 cat >>confdefs.h <<_ACEOF
22992 #define HAVE_SYS_CPUSET_H 1
22993 _ACEOF
22994
22995 fi
22996
22997 done
22998
22999 for ac_func in cpuset_setaffinity
23000 do :
23001 ac_fn_c_check_func "$LINENO" "cpuset_setaffinity" "ac_cv_func_cpuset_setaffinity"
23002 if test "x$ac_cv_func_cpuset_setaffinity" = xyes; then :
23003 cat >>confdefs.h <<_ACEOF
23004 #define HAVE_CPUSET_SETAFFINITY 1
23005 _ACEOF
23006
23007 fi
23008 done
23009
23010 for ac_func in cpuset_setid
23011 do :
23012 ac_fn_c_check_func "$LINENO" "cpuset_setid" "ac_cv_func_cpuset_setid"
23013 if test "x$ac_cv_func_cpuset_setid" = xyes; then :
23014 cat >>confdefs.h <<_ACEOF
23015 #define HAVE_CPUSET_SETID 1
23016 _ACEOF
23017
23018 fi
23019 done
24428 if test "x$ac_cv_header_sys_cpuset_h" = xyes
24429 then :
24430 printf "%s\n" "#define HAVE_SYS_CPUSET_H 1" >>confdefs.h
24431
24432 fi
24433
24434 ac_fn_c_check_func "$LINENO" "cpuset_setaffinity" "ac_cv_func_cpuset_setaffinity"
24435 if test "x$ac_cv_func_cpuset_setaffinity" = xyes
24436 then :
24437 printf "%s\n" "#define HAVE_CPUSET_SETAFFINITY 1" >>confdefs.h
24438
24439 fi
24440
24441 ac_fn_c_check_func "$LINENO" "cpuset_setid" "ac_cv_func_cpuset_setid"
24442 if test "x$ac_cv_func_cpuset_setid" = xyes
24443 then :
24444 printf "%s\n" "#define HAVE_CPUSET_SETID 1" >>confdefs.h
24445
24446 fi
2302024447
2302124448
2302224449 echo "**** end of FreeBSD-specific checks"
2302724454 echo
2302824455 echo "**** Windows-specific checks"
2302924456
23030 ac_fn_c_check_header_mongrel "$LINENO" "windows.h" "ac_cv_header_windows_h" "$ac_includes_default"
23031 if test "x$ac_cv_header_windows_h" = xyes; then :
23032
23033
23034 $as_echo "#define HWLOC_HAVE_WINDOWS_H 1" >>confdefs.h
23035
23036
23037 fi
23038
24457 ac_fn_c_check_header_compile "$LINENO" "windows.h" "ac_cv_header_windows_h" "$ac_includes_default"
24458 if test "x$ac_cv_header_windows_h" = xyes
24459 then :
24460
24461
24462 printf "%s\n" "#define HWLOC_HAVE_WINDOWS_H 1" >>confdefs.h
24463
24464
24465 fi
2303924466
2304024467
2304124468 old_CPPFLAGS="$CPPFLAGS"
2304224469 CPPFLAGS="$CPPFLAGS -D_WIN32_WINNT=0x0601"
2304324470 ac_fn_c_check_type "$LINENO" "KAFFINITY" "ac_cv_type_KAFFINITY" "#include <windows.h>
2304424471 "
23045 if test "x$ac_cv_type_KAFFINITY" = xyes; then :
23046
23047 cat >>confdefs.h <<_ACEOF
23048 #define HAVE_KAFFINITY 1
23049 _ACEOF
24472 if test "x$ac_cv_type_KAFFINITY" = xyes
24473 then :
24474
24475 printf "%s\n" "#define HAVE_KAFFINITY 1" >>confdefs.h
2305024476
2305124477
2305224478 fi
2305324479 ac_fn_c_check_type "$LINENO" "PROCESSOR_CACHE_TYPE" "ac_cv_type_PROCESSOR_CACHE_TYPE" "#include <windows.h>
2305424480 "
23055 if test "x$ac_cv_type_PROCESSOR_CACHE_TYPE" = xyes; then :
23056
23057 cat >>confdefs.h <<_ACEOF
23058 #define HAVE_PROCESSOR_CACHE_TYPE 1
23059 _ACEOF
24481 if test "x$ac_cv_type_PROCESSOR_CACHE_TYPE" = xyes
24482 then :
24483
24484 printf "%s\n" "#define HAVE_PROCESSOR_CACHE_TYPE 1" >>confdefs.h
2306024485
2306124486
2306224487 fi
2306324488 ac_fn_c_check_type "$LINENO" "CACHE_DESCRIPTOR" "ac_cv_type_CACHE_DESCRIPTOR" "#include <windows.h>
2306424489 "
23065 if test "x$ac_cv_type_CACHE_DESCRIPTOR" = xyes; then :
23066
23067 cat >>confdefs.h <<_ACEOF
23068 #define HAVE_CACHE_DESCRIPTOR 1
23069 _ACEOF
24490 if test "x$ac_cv_type_CACHE_DESCRIPTOR" = xyes
24491 then :
24492
24493 printf "%s\n" "#define HAVE_CACHE_DESCRIPTOR 1" >>confdefs.h
2307024494
2307124495
2307224496 fi
2307324497 ac_fn_c_check_type "$LINENO" "LOGICAL_PROCESSOR_RELATIONSHIP" "ac_cv_type_LOGICAL_PROCESSOR_RELATIONSHIP" "#include <windows.h>
2307424498 "
23075 if test "x$ac_cv_type_LOGICAL_PROCESSOR_RELATIONSHIP" = xyes; then :
23076
23077 cat >>confdefs.h <<_ACEOF
23078 #define HAVE_LOGICAL_PROCESSOR_RELATIONSHIP 1
23079 _ACEOF
24499 if test "x$ac_cv_type_LOGICAL_PROCESSOR_RELATIONSHIP" = xyes
24500 then :
24501
24502 printf "%s\n" "#define HAVE_LOGICAL_PROCESSOR_RELATIONSHIP 1" >>confdefs.h
2308024503
2308124504
2308224505 fi
2308324506 ac_fn_c_check_type "$LINENO" "RelationProcessorPackage" "ac_cv_type_RelationProcessorPackage" "#include <windows.h>
2308424507 "
23085 if test "x$ac_cv_type_RelationProcessorPackage" = xyes; then :
23086
23087 cat >>confdefs.h <<_ACEOF
23088 #define HAVE_RELATIONPROCESSORPACKAGE 1
23089 _ACEOF
24508 if test "x$ac_cv_type_RelationProcessorPackage" = xyes
24509 then :
24510
24511 printf "%s\n" "#define HAVE_RELATIONPROCESSORPACKAGE 1" >>confdefs.h
2309024512
2309124513
2309224514 fi
2309324515 ac_fn_c_check_type "$LINENO" "SYSTEM_LOGICAL_PROCESSOR_INFORMATION" "ac_cv_type_SYSTEM_LOGICAL_PROCESSOR_INFORMATION" "#include <windows.h>
2309424516 "
23095 if test "x$ac_cv_type_SYSTEM_LOGICAL_PROCESSOR_INFORMATION" = xyes; then :
23096
23097 cat >>confdefs.h <<_ACEOF
23098 #define HAVE_SYSTEM_LOGICAL_PROCESSOR_INFORMATION 1
23099 _ACEOF
24517 if test "x$ac_cv_type_SYSTEM_LOGICAL_PROCESSOR_INFORMATION" = xyes
24518 then :
24519
24520 printf "%s\n" "#define HAVE_SYSTEM_LOGICAL_PROCESSOR_INFORMATION 1" >>confdefs.h
2310024521
2310124522
2310224523 fi
2310324524 ac_fn_c_check_type "$LINENO" "GROUP_AFFINITY" "ac_cv_type_GROUP_AFFINITY" "#include <windows.h>
2310424525 "
23105 if test "x$ac_cv_type_GROUP_AFFINITY" = xyes; then :
23106
23107 cat >>confdefs.h <<_ACEOF
23108 #define HAVE_GROUP_AFFINITY 1
23109 _ACEOF
24526 if test "x$ac_cv_type_GROUP_AFFINITY" = xyes
24527 then :
24528
24529 printf "%s\n" "#define HAVE_GROUP_AFFINITY 1" >>confdefs.h
2311024530
2311124531
2311224532 fi
2311324533 ac_fn_c_check_type "$LINENO" "PROCESSOR_RELATIONSHIP" "ac_cv_type_PROCESSOR_RELATIONSHIP" "#include <windows.h>
2311424534 "
23115 if test "x$ac_cv_type_PROCESSOR_RELATIONSHIP" = xyes; then :
23116
23117 cat >>confdefs.h <<_ACEOF
23118 #define HAVE_PROCESSOR_RELATIONSHIP 1
23119 _ACEOF
24535 if test "x$ac_cv_type_PROCESSOR_RELATIONSHIP" = xyes
24536 then :
24537
24538 printf "%s\n" "#define HAVE_PROCESSOR_RELATIONSHIP 1" >>confdefs.h
2312024539
2312124540
2312224541 fi
2312324542 ac_fn_c_check_type "$LINENO" "NUMA_NODE_RELATIONSHIP" "ac_cv_type_NUMA_NODE_RELATIONSHIP" "#include <windows.h>
2312424543 "
23125 if test "x$ac_cv_type_NUMA_NODE_RELATIONSHIP" = xyes; then :
23126
23127 cat >>confdefs.h <<_ACEOF
23128 #define HAVE_NUMA_NODE_RELATIONSHIP 1
23129 _ACEOF
24544 if test "x$ac_cv_type_NUMA_NODE_RELATIONSHIP" = xyes
24545 then :
24546
24547 printf "%s\n" "#define HAVE_NUMA_NODE_RELATIONSHIP 1" >>confdefs.h
2313024548
2313124549
2313224550 fi
2313324551 ac_fn_c_check_type "$LINENO" "CACHE_RELATIONSHIP" "ac_cv_type_CACHE_RELATIONSHIP" "#include <windows.h>
2313424552 "
23135 if test "x$ac_cv_type_CACHE_RELATIONSHIP" = xyes; then :
23136
23137 cat >>confdefs.h <<_ACEOF
23138 #define HAVE_CACHE_RELATIONSHIP 1
23139 _ACEOF
24553 if test "x$ac_cv_type_CACHE_RELATIONSHIP" = xyes
24554 then :
24555
24556 printf "%s\n" "#define HAVE_CACHE_RELATIONSHIP 1" >>confdefs.h
2314024557
2314124558
2314224559 fi
2314324560 ac_fn_c_check_type "$LINENO" "PROCESSOR_GROUP_INFO" "ac_cv_type_PROCESSOR_GROUP_INFO" "#include <windows.h>
2314424561 "
23145 if test "x$ac_cv_type_PROCESSOR_GROUP_INFO" = xyes; then :
23146
23147 cat >>confdefs.h <<_ACEOF
23148 #define HAVE_PROCESSOR_GROUP_INFO 1
23149 _ACEOF
24562 if test "x$ac_cv_type_PROCESSOR_GROUP_INFO" = xyes
24563 then :
24564
24565 printf "%s\n" "#define HAVE_PROCESSOR_GROUP_INFO 1" >>confdefs.h
2315024566
2315124567
2315224568 fi
2315324569 ac_fn_c_check_type "$LINENO" "GROUP_RELATIONSHIP" "ac_cv_type_GROUP_RELATIONSHIP" "#include <windows.h>
2315424570 "
23155 if test "x$ac_cv_type_GROUP_RELATIONSHIP" = xyes; then :
23156
23157 cat >>confdefs.h <<_ACEOF
23158 #define HAVE_GROUP_RELATIONSHIP 1
23159 _ACEOF
24571 if test "x$ac_cv_type_GROUP_RELATIONSHIP" = xyes
24572 then :
24573
24574 printf "%s\n" "#define HAVE_GROUP_RELATIONSHIP 1" >>confdefs.h
2316024575
2316124576
2316224577 fi
2316324578 ac_fn_c_check_type "$LINENO" "SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX" "ac_cv_type_SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX" "#include <windows.h>
2316424579 "
23165 if test "x$ac_cv_type_SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX" = xyes; then :
23166
23167 cat >>confdefs.h <<_ACEOF
23168 #define HAVE_SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX 1
23169 _ACEOF
24580 if test "x$ac_cv_type_SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX" = xyes
24581 then :
24582
24583 printf "%s\n" "#define HAVE_SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX 1" >>confdefs.h
2317024584
2317124585
2317224586 fi
2317324587 ac_fn_c_check_type "$LINENO" "PSAPI_WORKING_SET_EX_BLOCK" "ac_cv_type_PSAPI_WORKING_SET_EX_BLOCK" "#include <windows.h>
2317424588 "
23175 if test "x$ac_cv_type_PSAPI_WORKING_SET_EX_BLOCK" = xyes; then :
23176
23177 cat >>confdefs.h <<_ACEOF
23178 #define HAVE_PSAPI_WORKING_SET_EX_BLOCK 1
23179 _ACEOF
24589 if test "x$ac_cv_type_PSAPI_WORKING_SET_EX_BLOCK" = xyes
24590 then :
24591
24592 printf "%s\n" "#define HAVE_PSAPI_WORKING_SET_EX_BLOCK 1" >>confdefs.h
2318024593
2318124594
2318224595 fi
2318324596 ac_fn_c_check_type "$LINENO" "PSAPI_WORKING_SET_EX_INFORMATION" "ac_cv_type_PSAPI_WORKING_SET_EX_INFORMATION" "#include <windows.h>
2318424597 "
23185 if test "x$ac_cv_type_PSAPI_WORKING_SET_EX_INFORMATION" = xyes; then :
23186
23187 cat >>confdefs.h <<_ACEOF
23188 #define HAVE_PSAPI_WORKING_SET_EX_INFORMATION 1
23189 _ACEOF
24598 if test "x$ac_cv_type_PSAPI_WORKING_SET_EX_INFORMATION" = xyes
24599 then :
24600
24601 printf "%s\n" "#define HAVE_PSAPI_WORKING_SET_EX_INFORMATION 1" >>confdefs.h
2319024602
2319124603
2319224604 fi
2319324605 ac_fn_c_check_type "$LINENO" "PROCESSOR_NUMBER" "ac_cv_type_PROCESSOR_NUMBER" "#include <windows.h>
2319424606 "
23195 if test "x$ac_cv_type_PROCESSOR_NUMBER" = xyes; then :
23196
23197 cat >>confdefs.h <<_ACEOF
23198 #define HAVE_PROCESSOR_NUMBER 1
23199 _ACEOF
24607 if test "x$ac_cv_type_PROCESSOR_NUMBER" = xyes
24608 then :
24609
24610 printf "%s\n" "#define HAVE_PROCESSOR_NUMBER 1" >>confdefs.h
2320024611
2320124612
2320224613 fi
2320324614
2320424615 CPPFLAGS="$old_CPPFLAGS"
2320524616
23206 ac_fn_c_check_decl "$LINENO" "GetModuleFileName" "ac_cv_have_decl_GetModuleFileName" "#include <windows.h>
23207 "
23208 if test "x$ac_cv_have_decl_GetModuleFileName" = xyes; then :
24617 ac_fn_check_decl "$LINENO" "GetModuleFileName" "ac_cv_have_decl_GetModuleFileName" "#include <windows.h>
24618 " "$ac_c_undeclared_builtin_options" "CFLAGS"
24619 if test "x$ac_cv_have_decl_GetModuleFileName" = xyes
24620 then :
2320924621 ac_have_decl=1
23210 else
24622 else $as_nop
2321124623 ac_have_decl=0
2321224624 fi
23213
23214 cat >>confdefs.h <<_ACEOF
23215 #define HAVE_DECL_GETMODULEFILENAME $ac_have_decl
23216 _ACEOF
23217
23218
23219 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lgdi32" >&5
23220 $as_echo_n "checking for main in -lgdi32... " >&6; }
23221 if ${ac_cv_lib_gdi32_main+:} false; then :
23222 $as_echo_n "(cached) " >&6
23223 else
24625 printf "%s\n" "#define HAVE_DECL_GETMODULEFILENAME $ac_have_decl" >>confdefs.h
24626
24627
24628 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for main in -lgdi32" >&5
24629 printf %s "checking for main in -lgdi32... " >&6; }
24630 if test ${ac_cv_lib_gdi32_main+y}
24631 then :
24632 printf %s "(cached) " >&6
24633 else $as_nop
2322424634 ac_check_lib_save_LIBS=$LIBS
2322524635 LIBS="-lgdi32 $LIBS"
2322624636 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2322824638
2322924639
2323024640 int
23231 main ()
24641 main (void)
2323224642 {
2323324643 return main ();
2323424644 ;
2323524645 return 0;
2323624646 }
2323724647 _ACEOF
23238 if ac_fn_c_try_link "$LINENO"; then :
24648 if ac_fn_c_try_link "$LINENO"
24649 then :
2323924650 ac_cv_lib_gdi32_main=yes
23240 else
24651 else $as_nop
2324124652 ac_cv_lib_gdi32_main=no
2324224653 fi
23243 rm -f core conftest.err conftest.$ac_objext \
24654 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2324424655 conftest$ac_exeext conftest.$ac_ext
2324524656 LIBS=$ac_check_lib_save_LIBS
2324624657 fi
23247 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gdi32_main" >&5
23248 $as_echo "$ac_cv_lib_gdi32_main" >&6; }
23249 if test "x$ac_cv_lib_gdi32_main" = xyes; then :
24658 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gdi32_main" >&5
24659 printf "%s\n" "$ac_cv_lib_gdi32_main" >&6; }
24660 if test "x$ac_cv_lib_gdi32_main" = xyes
24661 then :
2325024662 HWLOC_LIBS="-lgdi32 $HWLOC_LIBS"
2325124663
23252 $as_echo "#define HAVE_LIBGDI32 1" >>confdefs.h
23253
23254 fi
23255
23256 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PostQuitMessage in -luser32" >&5
23257 $as_echo_n "checking for PostQuitMessage in -luser32... " >&6; }
23258 if ${ac_cv_lib_user32_PostQuitMessage+:} false; then :
23259 $as_echo_n "(cached) " >&6
23260 else
24664 printf "%s\n" "#define HAVE_LIBGDI32 1" >>confdefs.h
24665
24666 fi
24667
24668 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PostQuitMessage in -luser32" >&5
24669 printf %s "checking for PostQuitMessage in -luser32... " >&6; }
24670 if test ${ac_cv_lib_user32_PostQuitMessage+y}
24671 then :
24672 printf %s "(cached) " >&6
24673 else $as_nop
2326124674 ac_check_lib_save_LIBS=$LIBS
2326224675 LIBS="-luser32 $LIBS"
2326324676 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2326624679 /* Override any GCC internal prototype to avoid an error.
2326724680 Use char because int might match the return type of a GCC
2326824681 builtin and then its argument prototype would still apply. */
23269 #ifdef __cplusplus
23270 extern "C"
23271 #endif
2327224682 char PostQuitMessage ();
2327324683 int
23274 main ()
24684 main (void)
2327524685 {
2327624686 return PostQuitMessage ();
2327724687 ;
2327824688 return 0;
2327924689 }
2328024690 _ACEOF
23281 if ac_fn_c_try_link "$LINENO"; then :
24691 if ac_fn_c_try_link "$LINENO"
24692 then :
2328224693 ac_cv_lib_user32_PostQuitMessage=yes
23283 else
24694 else $as_nop
2328424695 ac_cv_lib_user32_PostQuitMessage=no
2328524696 fi
23286 rm -f core conftest.err conftest.$ac_objext \
24697 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2328724698 conftest$ac_exeext conftest.$ac_ext
2328824699 LIBS=$ac_check_lib_save_LIBS
2328924700 fi
23290 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_user32_PostQuitMessage" >&5
23291 $as_echo "$ac_cv_lib_user32_PostQuitMessage" >&6; }
23292 if test "x$ac_cv_lib_user32_PostQuitMessage" = xyes; then :
24701 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_user32_PostQuitMessage" >&5
24702 printf "%s\n" "$ac_cv_lib_user32_PostQuitMessage" >&6; }
24703 if test "x$ac_cv_lib_user32_PostQuitMessage" = xyes
24704 then :
2329324705 hwloc_have_user32="yes"
2329424706 fi
2329524707
2329824710 do
2329924711 # Extract the first word of "$ac_prog", so it can be a program name with args.
2330024712 set dummy $ac_prog; ac_word=$2
23301 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
23302 $as_echo_n "checking for $ac_word... " >&6; }
23303 if ${ac_cv_path_HWLOC_MS_LIB+:} false; then :
23304 $as_echo_n "(cached) " >&6
23305 else
24713 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
24714 printf %s "checking for $ac_word... " >&6; }
24715 if test ${ac_cv_path_HWLOC_MS_LIB+y}
24716 then :
24717 printf %s "(cached) " >&6
24718 else $as_nop
2330624719 case $HWLOC_MS_LIB in
2330724720 [\\/]* | ?:[\\/]*)
2330824721 ac_cv_path_HWLOC_MS_LIB="$HWLOC_MS_LIB" # Let the user override the test with a path.
2331224725 for as_dir in $PATH
2331324726 do
2331424727 IFS=$as_save_IFS
23315 test -z "$as_dir" && as_dir=.
24728 case $as_dir in #(((
24729 '') as_dir=./ ;;
24730 */) ;;
24731 *) as_dir=$as_dir/ ;;
24732 esac
2331624733 for ac_exec_ext in '' $ac_executable_extensions; do
23317 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
23318 ac_cv_path_HWLOC_MS_LIB="$as_dir/$ac_word$ac_exec_ext"
23319 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
24734 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
24735 ac_cv_path_HWLOC_MS_LIB="$as_dir$ac_word$ac_exec_ext"
24736 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
2332024737 break 2
2332124738 fi
2332224739 done
2332824745 fi
2332924746 HWLOC_MS_LIB=$ac_cv_path_HWLOC_MS_LIB
2333024747 if test -n "$HWLOC_MS_LIB"; then
23331 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HWLOC_MS_LIB" >&5
23332 $as_echo "$HWLOC_MS_LIB" >&6; }
24748 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $HWLOC_MS_LIB" >&5
24749 printf "%s\n" "$HWLOC_MS_LIB" >&6; }
2333324750 else
23334 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
23335 $as_echo "no" >&6; }
24751 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
24752 printf "%s\n" "no" >&6; }
2333624753 fi
2333724754
2333824755
2333924756 test -n "$HWLOC_MS_LIB" && break
2334024757 done
23341
2334224758
2334324759
2334424760 echo "**** end of Windows-specific checks"
2334924765 echo
2335024766 echo "**** Solaris-specific checks"
2335124767
23352 for ac_header in sys/lgrp_user.h
24768 for ac_header in sys/lgrp_user.h
2335324769 do :
23354 ac_fn_c_check_header_mongrel "$LINENO" "sys/lgrp_user.h" "ac_cv_header_sys_lgrp_user_h" "$ac_includes_default"
23355 if test "x$ac_cv_header_sys_lgrp_user_h" = xyes; then :
23356 cat >>confdefs.h <<_ACEOF
23357 #define HAVE_SYS_LGRP_USER_H 1
23358 _ACEOF
23359
23360 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lgrp_init in -llgrp" >&5
23361 $as_echo_n "checking for lgrp_init in -llgrp... " >&6; }
23362 if ${ac_cv_lib_lgrp_lgrp_init+:} false; then :
23363 $as_echo_n "(cached) " >&6
23364 else
24770 ac_fn_c_check_header_compile "$LINENO" "sys/lgrp_user.h" "ac_cv_header_sys_lgrp_user_h" "$ac_includes_default"
24771 if test "x$ac_cv_header_sys_lgrp_user_h" = xyes
24772 then :
24773 printf "%s\n" "#define HAVE_SYS_LGRP_USER_H 1" >>confdefs.h
24774
24775 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lgrp_init in -llgrp" >&5
24776 printf %s "checking for lgrp_init in -llgrp... " >&6; }
24777 if test ${ac_cv_lib_lgrp_lgrp_init+y}
24778 then :
24779 printf %s "(cached) " >&6
24780 else $as_nop
2336524781 ac_check_lib_save_LIBS=$LIBS
2336624782 LIBS="-llgrp $LIBS"
2336724783 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2337024786 /* Override any GCC internal prototype to avoid an error.
2337124787 Use char because int might match the return type of a GCC
2337224788 builtin and then its argument prototype would still apply. */
23373 #ifdef __cplusplus
23374 extern "C"
23375 #endif
2337624789 char lgrp_init ();
2337724790 int
23378 main ()
24791 main (void)
2337924792 {
2338024793 return lgrp_init ();
2338124794 ;
2338224795 return 0;
2338324796 }
2338424797 _ACEOF
23385 if ac_fn_c_try_link "$LINENO"; then :
24798 if ac_fn_c_try_link "$LINENO"
24799 then :
2338624800 ac_cv_lib_lgrp_lgrp_init=yes
23387 else
24801 else $as_nop
2338824802 ac_cv_lib_lgrp_lgrp_init=no
2338924803 fi
23390 rm -f core conftest.err conftest.$ac_objext \
24804 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2339124805 conftest$ac_exeext conftest.$ac_ext
2339224806 LIBS=$ac_check_lib_save_LIBS
2339324807 fi
23394 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lgrp_lgrp_init" >&5
23395 $as_echo "$ac_cv_lib_lgrp_lgrp_init" >&6; }
23396 if test "x$ac_cv_lib_lgrp_lgrp_init" = xyes; then :
24808 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_lgrp_lgrp_init" >&5
24809 printf "%s\n" "$ac_cv_lib_lgrp_lgrp_init" >&6; }
24810 if test "x$ac_cv_lib_lgrp_lgrp_init" = xyes
24811 then :
2339724812 HWLOC_LIBS="-llgrp $HWLOC_LIBS"
2339824813
23399 $as_echo "#define HAVE_LIBLGRP 1" >>confdefs.h
23400
23401 ac_fn_c_check_decl "$LINENO" "lgrp_latency_cookie" "ac_cv_have_decl_lgrp_latency_cookie" "#include <sys/lgrp_user.h>
23402 "
23403 if test "x$ac_cv_have_decl_lgrp_latency_cookie" = xyes; then :
24814 printf "%s\n" "#define HAVE_LIBLGRP 1" >>confdefs.h
24815
24816 ac_fn_check_decl "$LINENO" "lgrp_latency_cookie" "ac_cv_have_decl_lgrp_latency_cookie" "#include <sys/lgrp_user.h>
24817 " "$ac_c_undeclared_builtin_options" "CFLAGS"
24818 if test "x$ac_cv_have_decl_lgrp_latency_cookie" = xyes
24819 then :
2340424820 ac_have_decl=1
23405 else
24821 else $as_nop
2340624822 ac_have_decl=0
2340724823 fi
23408
23409 cat >>confdefs.h <<_ACEOF
23410 #define HAVE_DECL_LGRP_LATENCY_COOKIE $ac_have_decl
23411 _ACEOF
24824 printf "%s\n" "#define HAVE_DECL_LGRP_LATENCY_COOKIE $ac_have_decl" >>confdefs.h
2341224825
2341324826
2341424827 fi
2341724830 fi
2341824831
2341924832 done
23420
23421 for ac_header in kstat.h
24833 for ac_header in kstat.h
2342224834 do :
23423 ac_fn_c_check_header_mongrel "$LINENO" "kstat.h" "ac_cv_header_kstat_h" "$ac_includes_default"
23424 if test "x$ac_cv_header_kstat_h" = xyes; then :
23425 cat >>confdefs.h <<_ACEOF
23426 #define HAVE_KSTAT_H 1
23427 _ACEOF
23428
23429 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lkstat" >&5
23430 $as_echo_n "checking for main in -lkstat... " >&6; }
23431 if ${ac_cv_lib_kstat_main+:} false; then :
23432 $as_echo_n "(cached) " >&6
23433 else
24835 ac_fn_c_check_header_compile "$LINENO" "kstat.h" "ac_cv_header_kstat_h" "$ac_includes_default"
24836 if test "x$ac_cv_header_kstat_h" = xyes
24837 then :
24838 printf "%s\n" "#define HAVE_KSTAT_H 1" >>confdefs.h
24839
24840 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for main in -lkstat" >&5
24841 printf %s "checking for main in -lkstat... " >&6; }
24842 if test ${ac_cv_lib_kstat_main+y}
24843 then :
24844 printf %s "(cached) " >&6
24845 else $as_nop
2343424846 ac_check_lib_save_LIBS=$LIBS
2343524847 LIBS="-lkstat $LIBS"
2343624848 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2343824850
2343924851
2344024852 int
23441 main ()
24853 main (void)
2344224854 {
2344324855 return main ();
2344424856 ;
2344524857 return 0;
2344624858 }
2344724859 _ACEOF
23448 if ac_fn_c_try_link "$LINENO"; then :
24860 if ac_fn_c_try_link "$LINENO"
24861 then :
2344924862 ac_cv_lib_kstat_main=yes
23450 else
24863 else $as_nop
2345124864 ac_cv_lib_kstat_main=no
2345224865 fi
23453 rm -f core conftest.err conftest.$ac_objext \
24866 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2345424867 conftest$ac_exeext conftest.$ac_ext
2345524868 LIBS=$ac_check_lib_save_LIBS
2345624869 fi
23457 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_kstat_main" >&5
23458 $as_echo "$ac_cv_lib_kstat_main" >&6; }
23459 if test "x$ac_cv_lib_kstat_main" = xyes; then :
24870 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_kstat_main" >&5
24871 printf "%s\n" "$ac_cv_lib_kstat_main" >&6; }
24872 if test "x$ac_cv_lib_kstat_main" = xyes
24873 then :
2346024874 HWLOC_LIBS="-lkstat $HWLOC_LIBS"
2346124875
23462 $as_echo "#define HAVE_LIBKSTAT 1" >>confdefs.h
24876 printf "%s\n" "#define HAVE_LIBKSTAT 1" >>confdefs.h
2346324877
2346424878 fi
2346524879
2346824882
2346924883 done
2347024884
23471
23472 for ac_header in picl.h
24885 for ac_header in picl.h
2347324886 do :
23474 ac_fn_c_check_header_mongrel "$LINENO" "picl.h" "ac_cv_header_picl_h" "$ac_includes_default"
23475 if test "x$ac_cv_header_picl_h" = xyes; then :
23476 cat >>confdefs.h <<_ACEOF
23477 #define HAVE_PICL_H 1
23478 _ACEOF
23479
23480 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for picl_initialize in -lpicl" >&5
23481 $as_echo_n "checking for picl_initialize in -lpicl... " >&6; }
23482 if ${ac_cv_lib_picl_picl_initialize+:} false; then :
23483 $as_echo_n "(cached) " >&6
23484 else
24887 ac_fn_c_check_header_compile "$LINENO" "picl.h" "ac_cv_header_picl_h" "$ac_includes_default"
24888 if test "x$ac_cv_header_picl_h" = xyes
24889 then :
24890 printf "%s\n" "#define HAVE_PICL_H 1" >>confdefs.h
24891
24892 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for picl_initialize in -lpicl" >&5
24893 printf %s "checking for picl_initialize in -lpicl... " >&6; }
24894 if test ${ac_cv_lib_picl_picl_initialize+y}
24895 then :
24896 printf %s "(cached) " >&6
24897 else $as_nop
2348524898 ac_check_lib_save_LIBS=$LIBS
2348624899 LIBS="-lpicl $LIBS"
2348724900 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2349024903 /* Override any GCC internal prototype to avoid an error.
2349124904 Use char because int might match the return type of a GCC
2349224905 builtin and then its argument prototype would still apply. */
23493 #ifdef __cplusplus
23494 extern "C"
23495 #endif
2349624906 char picl_initialize ();
2349724907 int
23498 main ()
24908 main (void)
2349924909 {
2350024910 return picl_initialize ();
2350124911 ;
2350224912 return 0;
2350324913 }
2350424914 _ACEOF
23505 if ac_fn_c_try_link "$LINENO"; then :
24915 if ac_fn_c_try_link "$LINENO"
24916 then :
2350624917 ac_cv_lib_picl_picl_initialize=yes
23507 else
24918 else $as_nop
2350824919 ac_cv_lib_picl_picl_initialize=no
2350924920 fi
23510 rm -f core conftest.err conftest.$ac_objext \
24921 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2351124922 conftest$ac_exeext conftest.$ac_ext
2351224923 LIBS=$ac_check_lib_save_LIBS
2351324924 fi
23514 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_picl_picl_initialize" >&5
23515 $as_echo "$ac_cv_lib_picl_picl_initialize" >&6; }
23516 if test "x$ac_cv_lib_picl_picl_initialize" = xyes; then :
24925 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_picl_picl_initialize" >&5
24926 printf "%s\n" "$ac_cv_lib_picl_picl_initialize" >&6; }
24927 if test "x$ac_cv_lib_picl_picl_initialize" = xyes
24928 then :
2351724929 HWLOC_LIBS="-lpicl $HWLOC_LIBS"
2351824930 fi
2351924931
2352024932 fi
2352124933
2352224934 done
23523
2352424935
2352524936 echo "**** end of Solaris-specific checks"
2352624937 echo
2353024941 echo
2353124942 echo "**** AIX-specific checks"
2353224943
23533 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing pthread_getthrds_np" >&5
23534 $as_echo_n "checking for library containing pthread_getthrds_np... " >&6; }
23535 if ${ac_cv_search_pthread_getthrds_np+:} false; then :
23536 $as_echo_n "(cached) " >&6
23537 else
24944 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing pthread_getthrds_np" >&5
24945 printf %s "checking for library containing pthread_getthrds_np... " >&6; }
24946 if test ${ac_cv_search_pthread_getthrds_np+y}
24947 then :
24948 printf %s "(cached) " >&6
24949 else $as_nop
2353824950 ac_func_search_save_LIBS=$LIBS
2353924951 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2354024952 /* end confdefs.h. */
2354224954 /* Override any GCC internal prototype to avoid an error.
2354324955 Use char because int might match the return type of a GCC
2354424956 builtin and then its argument prototype would still apply. */
23545 #ifdef __cplusplus
23546 extern "C"
23547 #endif
2354824957 char pthread_getthrds_np ();
2354924958 int
23550 main ()
24959 main (void)
2355124960 {
2355224961 return pthread_getthrds_np ();
2355324962 ;
2355424963 return 0;
2355524964 }
2355624965 _ACEOF
23557 for ac_lib in '' pthread; do
24966 for ac_lib in '' pthread
24967 do
2355824968 if test -z "$ac_lib"; then
2355924969 ac_res="none required"
2356024970 else
2356124971 ac_res=-l$ac_lib
2356224972 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
2356324973 fi
23564 if ac_fn_c_try_link "$LINENO"; then :
24974 if ac_fn_c_try_link "$LINENO"
24975 then :
2356524976 ac_cv_search_pthread_getthrds_np=$ac_res
2356624977 fi
23567 rm -f core conftest.err conftest.$ac_objext \
24978 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2356824979 conftest$ac_exeext
23569 if ${ac_cv_search_pthread_getthrds_np+:} false; then :
24980 if test ${ac_cv_search_pthread_getthrds_np+y}
24981 then :
2357024982 break
2357124983 fi
2357224984 done
23573 if ${ac_cv_search_pthread_getthrds_np+:} false; then :
23574
23575 else
24985 if test ${ac_cv_search_pthread_getthrds_np+y}
24986 then :
24987
24988 else $as_nop
2357624989 ac_cv_search_pthread_getthrds_np=no
2357724990 fi
2357824991 rm conftest.$ac_ext
2357924992 LIBS=$ac_func_search_save_LIBS
2358024993 fi
23581 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_pthread_getthrds_np" >&5
23582 $as_echo "$ac_cv_search_pthread_getthrds_np" >&6; }
24994 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_pthread_getthrds_np" >&5
24995 printf "%s\n" "$ac_cv_search_pthread_getthrds_np" >&6; }
2358324996 ac_res=$ac_cv_search_pthread_getthrds_np
23584 if test "$ac_res" != no; then :
24997 if test "$ac_res" != no
24998 then :
2358524999 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
2358625000
2358725001
23588 $as_echo "#define HWLOC_HAVE_PTHREAD_GETTHRDS_NP 1" >>confdefs.h
25002 printf "%s\n" "#define HWLOC_HAVE_PTHREAD_GETTHRDS_NP 1" >>confdefs.h
2358925003
2359025004
2359125005 fi
2359925013 echo
2360025014 echo "**** Linux-specific checks"
2360125015
23602 ac_fn_c_check_decl "$LINENO" "sched_getcpu" "ac_cv_have_decl_sched_getcpu" "
25016 ac_fn_check_decl "$LINENO" "sched_getcpu" "ac_cv_have_decl_sched_getcpu" "
2360325017 #ifndef _GNU_SOURCE
2360425018 # define _GNU_SOURCE
2360525019 #endif
2360625020 #include <sched.h>
2360725021
23608 "
23609 if test "x$ac_cv_have_decl_sched_getcpu" = xyes; then :
25022 " "$ac_c_undeclared_builtin_options" "CFLAGS"
25023 if test "x$ac_cv_have_decl_sched_getcpu" = xyes
25024 then :
2361025025 ac_have_decl=1
23611 else
25026 else $as_nop
2361225027 ac_have_decl=0
2361325028 fi
23614
23615 cat >>confdefs.h <<_ACEOF
23616 #define HAVE_DECL_SCHED_GETCPU $ac_have_decl
23617 _ACEOF
23618 if test $ac_have_decl = 1; then :
23619
23620 else
25029 printf "%s\n" "#define HAVE_DECL_SCHED_GETCPU $ac_have_decl" >>confdefs.h
25030 if test $ac_have_decl = 1
25031 then :
25032
25033 else $as_nop
2362125034 :
2362225035 fi
2362325036
2362425037
2362525038
23626 ac_fn_c_check_decl "$LINENO" "sched_setaffinity" "ac_cv_have_decl_sched_setaffinity" "
25039 ac_fn_check_decl "$LINENO" "sched_setaffinity" "ac_cv_have_decl_sched_setaffinity" "
2362725040 #ifndef _GNU_SOURCE
2362825041 # define _GNU_SOURCE
2362925042 #endif
2363025043 #include <sched.h>
2363125044
2363225045
23633 "
23634 if test "x$ac_cv_have_decl_sched_setaffinity" = xyes; then :
23635
23636 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function sched_setaffinity has a complete prototype" >&5
23637 $as_echo_n "checking whether function sched_setaffinity has a complete prototype... " >&6; }
25046 " "$ac_c_undeclared_builtin_options" "CFLAGS"
25047 if test "x$ac_cv_have_decl_sched_setaffinity" = xyes
25048 then :
25049
25050 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether function sched_setaffinity has a complete prototype" >&5
25051 printf %s "checking whether function sched_setaffinity has a complete prototype... " >&6; }
2363825052
2363925053 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2364025054 /* end confdefs.h. */
2364625060
2364725061
2364825062 int
23649 main ()
25063 main (void)
2365025064 {
2365125065 sched_setaffinity(1,2,3,4,5,6,7,8,9,10);
2365225066
2365425068 return 0;
2365525069 }
2365625070 _ACEOF
23657 if ac_fn_c_try_compile "$LINENO"; then :
23658 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
23659 $as_echo "no" >&6; }
23660
23661 else
23662 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
23663 $as_echo "yes" >&6; }
25071 if ac_fn_c_try_compile "$LINENO"
25072 then :
25073 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
25074 printf "%s\n" "no" >&6; }
25075
25076 else $as_nop
25077 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
25078 printf "%s\n" "yes" >&6; }
2366425079
2366525080 hwloc_have_sched_setaffinity=yes
2366625081
23667 $as_echo "#define HWLOC_HAVE_SCHED_SETAFFINITY 1" >>confdefs.h
23668
23669 if test "$HWLOC_STRICT_ARGS_CFLAGS" = "FAIL"; then :
23670
23671 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Support for sched_setaffinity() requires a C compiler which" >&5
23672 $as_echo "$as_me: WARNING: Support for sched_setaffinity() requires a C compiler which" >&2;}
23673 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: considers incorrect argument counts to be a fatal error." >&5
23674 $as_echo "$as_me: WARNING: considers incorrect argument counts to be a fatal error." >&2;}
25082 printf "%s\n" "#define HWLOC_HAVE_SCHED_SETAFFINITY 1" >>confdefs.h
25083
25084 if test "$HWLOC_STRICT_ARGS_CFLAGS" = "FAIL"
25085 then :
25086
25087 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Support for sched_setaffinity() requires a C compiler which" >&5
25088 printf "%s\n" "$as_me: WARNING: Support for sched_setaffinity() requires a C compiler which" >&2;}
25089 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: considers incorrect argument counts to be a fatal error." >&5
25090 printf "%s\n" "$as_me: WARNING: considers incorrect argument counts to be a fatal error." >&2;}
2367525091 as_fn_error $? "Cannot continue." "$LINENO" 5
2367625092
2367725093 fi
23678 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for old prototype of sched_setaffinity" >&5
23679 $as_echo_n "checking for old prototype of sched_setaffinity... " >&6; }
25094 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for old prototype of sched_setaffinity" >&5
25095 printf %s "checking for old prototype of sched_setaffinity... " >&6; }
2368025096 hwloc_save_CFLAGS=$CFLAGS
2368125097 CFLAGS="$CFLAGS $HWLOC_STRICT_ARGS_CFLAGS"
2368225098 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2369025106 static unsigned long mask;
2369125107
2369225108 int
23693 main ()
25109 main (void)
2369425110 {
2369525111 sched_setaffinity(0, (void*) &mask);
2369625112 ;
2369725113 return 0;
2369825114 }
2369925115 _ACEOF
23700 if ac_fn_c_try_compile "$LINENO"; then :
23701
23702 $as_echo "#define HWLOC_HAVE_OLD_SCHED_SETAFFINITY 1" >>confdefs.h
23703
23704 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
23705 $as_echo "yes" >&6; }
23706 else
23707 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
23708 $as_echo "no" >&6; }
23709 fi
23710 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
25116 if ac_fn_c_try_compile "$LINENO"
25117 then :
25118
25119 printf "%s\n" "#define HWLOC_HAVE_OLD_SCHED_SETAFFINITY 1" >>confdefs.h
25120
25121 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
25122 printf "%s\n" "yes" >&6; }
25123 else $as_nop
25124 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
25125 printf "%s\n" "no" >&6; }
25126 fi
25127 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2371125128 CFLAGS=$hwloc_save_CFLAGS
2371225129
2371325130
2371425131 fi
23715 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
23716 fi
23717
23718
23719
23720 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working CPU_SET" >&5
23721 $as_echo_n "checking for working CPU_SET... " >&6; }
25132 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
25133 fi
25134
25135
25136 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working CPU_SET" >&5
25137 printf %s "checking for working CPU_SET... " >&6; }
2372225138 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2372325139 /* end confdefs.h. */
2372425140
2372725143 cpu_set_t set;
2372825144
2372925145 int
23730 main ()
25146 main (void)
2373125147 {
2373225148 CPU_ZERO(&set); CPU_SET(0, &set);
2373325149 ;
2373425150 return 0;
2373525151 }
2373625152 _ACEOF
23737 if ac_fn_c_try_link "$LINENO"; then :
23738
23739 $as_echo "#define HWLOC_HAVE_CPU_SET 1" >>confdefs.h
23740
23741 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
23742 $as_echo "yes" >&6; }
23743 else
23744 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
23745 $as_echo "no" >&6; }
23746 fi
23747 rm -f core conftest.err conftest.$ac_objext \
25153 if ac_fn_c_try_link "$LINENO"
25154 then :
25155
25156 printf "%s\n" "#define HWLOC_HAVE_CPU_SET 1" >>confdefs.h
25157
25158 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
25159 printf "%s\n" "yes" >&6; }
25160 else $as_nop
25161 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
25162 printf "%s\n" "no" >&6; }
25163 fi
25164 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2374825165 conftest$ac_exeext conftest.$ac_ext
2374925166
23750 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working CPU_SET_S" >&5
23751 $as_echo_n "checking for working CPU_SET_S... " >&6; }
25167 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working CPU_SET_S" >&5
25168 printf %s "checking for working CPU_SET_S... " >&6; }
2375225169 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2375325170 /* end confdefs.h. */
2375425171
2375725174 cpu_set_t *set;
2375825175
2375925176 int
23760 main ()
25177 main (void)
2376125178 {
2376225179
2376325180 set = CPU_ALLOC(1024);
2376925186 return 0;
2377025187 }
2377125188 _ACEOF
23772 if ac_fn_c_try_link "$LINENO"; then :
23773
23774 $as_echo "#define HWLOC_HAVE_CPU_SET_S 1" >>confdefs.h
23775
23776 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
23777 $as_echo "yes" >&6; }
23778 else
23779 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
23780 $as_echo "no" >&6; }
23781 fi
23782 rm -f core conftest.err conftest.$ac_objext \
25189 if ac_fn_c_try_link "$LINENO"
25190 then :
25191
25192 printf "%s\n" "#define HWLOC_HAVE_CPU_SET_S 1" >>confdefs.h
25193
25194 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
25195 printf "%s\n" "yes" >&6; }
25196 else $as_nop
25197 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
25198 printf "%s\n" "no" >&6; }
25199 fi
25200 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2378325201 conftest$ac_exeext conftest.$ac_ext
2378425202
23785 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working syscall with 6 parameters" >&5
23786 $as_echo_n "checking for working syscall with 6 parameters... " >&6; }
25203 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working syscall with 6 parameters" >&5
25204 printf %s "checking for working syscall with 6 parameters... " >&6; }
2378725205 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2378825206 /* end confdefs.h. */
2378925207
2379225210 #include <sys/syscall.h>
2379325211
2379425212 int
23795 main ()
25213 main (void)
2379625214 {
2379725215 syscall(0, 1, 2, 3, 4, 5, 6);
2379825216 ;
2379925217 return 0;
2380025218 }
2380125219 _ACEOF
23802 if ac_fn_c_try_link "$LINENO"; then :
23803
23804 $as_echo "#define HWLOC_HAVE_SYSCALL 1" >>confdefs.h
23805
23806 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
23807 $as_echo "yes" >&6; }
23808 else
23809 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
23810 $as_echo "no" >&6; }
23811 fi
23812 rm -f core conftest.err conftest.$ac_objext \
25220 if ac_fn_c_try_link "$LINENO"
25221 then :
25222
25223 printf "%s\n" "#define HWLOC_HAVE_SYSCALL 1" >>confdefs.h
25224
25225 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
25226 printf "%s\n" "yes" >&6; }
25227 else $as_nop
25228 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
25229 printf "%s\n" "no" >&6; }
25230 fi
25231 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2381325232 conftest$ac_exeext conftest.$ac_ext
2381425233
2381525234 # Linux libudev support
2381625235 if test "x$enable_libudev" != xno; then
23817 for ac_header in libudev.h
25236 for ac_header in libudev.h
2381825237 do :
23819 ac_fn_c_check_header_mongrel "$LINENO" "libudev.h" "ac_cv_header_libudev_h" "$ac_includes_default"
23820 if test "x$ac_cv_header_libudev_h" = xyes; then :
23821 cat >>confdefs.h <<_ACEOF
23822 #define HAVE_LIBUDEV_H 1
23823 _ACEOF
23824
23825 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for udev_device_new_from_subsystem_sysname in -ludev" >&5
23826 $as_echo_n "checking for udev_device_new_from_subsystem_sysname in -ludev... " >&6; }
23827 if ${ac_cv_lib_udev_udev_device_new_from_subsystem_sysname+:} false; then :
23828 $as_echo_n "(cached) " >&6
23829 else
25238 ac_fn_c_check_header_compile "$LINENO" "libudev.h" "ac_cv_header_libudev_h" "$ac_includes_default"
25239 if test "x$ac_cv_header_libudev_h" = xyes
25240 then :
25241 printf "%s\n" "#define HAVE_LIBUDEV_H 1" >>confdefs.h
25242
25243 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for udev_device_new_from_subsystem_sysname in -ludev" >&5
25244 printf %s "checking for udev_device_new_from_subsystem_sysname in -ludev... " >&6; }
25245 if test ${ac_cv_lib_udev_udev_device_new_from_subsystem_sysname+y}
25246 then :
25247 printf %s "(cached) " >&6
25248 else $as_nop
2383025249 ac_check_lib_save_LIBS=$LIBS
2383125250 LIBS="-ludev $LIBS"
2383225251 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2383525254 /* Override any GCC internal prototype to avoid an error.
2383625255 Use char because int might match the return type of a GCC
2383725256 builtin and then its argument prototype would still apply. */
23838 #ifdef __cplusplus
23839 extern "C"
23840 #endif
2384125257 char udev_device_new_from_subsystem_sysname ();
2384225258 int
23843 main ()
25259 main (void)
2384425260 {
2384525261 return udev_device_new_from_subsystem_sysname ();
2384625262 ;
2384725263 return 0;
2384825264 }
2384925265 _ACEOF
23850 if ac_fn_c_try_link "$LINENO"; then :
25266 if ac_fn_c_try_link "$LINENO"
25267 then :
2385125268 ac_cv_lib_udev_udev_device_new_from_subsystem_sysname=yes
23852 else
25269 else $as_nop
2385325270 ac_cv_lib_udev_udev_device_new_from_subsystem_sysname=no
2385425271 fi
23855 rm -f core conftest.err conftest.$ac_objext \
25272 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2385625273 conftest$ac_exeext conftest.$ac_ext
2385725274 LIBS=$ac_check_lib_save_LIBS
2385825275 fi
23859 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_udev_udev_device_new_from_subsystem_sysname" >&5
23860 $as_echo "$ac_cv_lib_udev_udev_device_new_from_subsystem_sysname" >&6; }
23861 if test "x$ac_cv_lib_udev_udev_device_new_from_subsystem_sysname" = xyes; then :
25276 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_udev_udev_device_new_from_subsystem_sysname" >&5
25277 printf "%s\n" "$ac_cv_lib_udev_udev_device_new_from_subsystem_sysname" >&6; }
25278 if test "x$ac_cv_lib_udev_udev_device_new_from_subsystem_sysname" = xyes
25279 then :
2386225280
2386325281 HWLOC_LIBS="$HWLOC_LIBS -ludev"
2386425282
23865 $as_echo "#define HWLOC_HAVE_LIBUDEV 1" >>confdefs.h
25283 printf "%s\n" "#define HWLOC_HAVE_LIBUDEV 1" >>confdefs.h
2386625284
2386725285
2386825286 fi
2387125289 fi
2387225290
2387325291 done
23874
2387525292 fi
2387625293
2387725294 echo "**** end of Linux-specific checks"
2388125298 if test "x$hwloc_linux" != "xyes" ; then
2388225299 # Don't look for sys/sysctl.h on Linux because it's deprecated and
2388325300 # generates a warning in GCC10. Also it's unneeded.
23884 for ac_header in sys/param.h
23885 do :
23886 ac_fn_c_check_header_mongrel "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default"
23887 if test "x$ac_cv_header_sys_param_h" = xyes; then :
23888 cat >>confdefs.h <<_ACEOF
23889 #define HAVE_SYS_PARAM_H 1
23890 _ACEOF
23891
23892 fi
23893
23894 done
23895
23896 for ac_header in sys/sysctl.h
25301 ac_fn_c_check_header_compile "$LINENO" "sys/param.h" "ac_cv_header_sys_param_h" "$ac_includes_default"
25302 if test "x$ac_cv_header_sys_param_h" = xyes
25303 then :
25304 printf "%s\n" "#define HAVE_SYS_PARAM_H 1" >>confdefs.h
25305
25306 fi
25307
25308 for ac_header in sys/sysctl.h
2389725309 do :
2389825310 ac_fn_c_check_header_compile "$LINENO" "sys/sysctl.h" "ac_cv_header_sys_sysctl_h" "
2389925311 $ac_includes_default
2390225314 #endif
2390325315
2390425316 "
23905 if test "x$ac_cv_header_sys_sysctl_h" = xyes; then :
23906 cat >>confdefs.h <<_ACEOF
23907 #define HAVE_SYS_SYSCTL_H 1
23908 _ACEOF
23909
23910 ac_fn_c_check_decl "$LINENO" "CTL_HW" "ac_cv_have_decl_CTL_HW" "
25317 if test "x$ac_cv_header_sys_sysctl_h" = xyes
25318 then :
25319 printf "%s\n" "#define HAVE_SYS_SYSCTL_H 1" >>confdefs.h
25320
25321 ac_fn_check_decl "$LINENO" "CTL_HW" "ac_cv_have_decl_CTL_HW" "
2391125322 #if HAVE_SYS_PARAM_H
2391225323 #include <sys/param.h>
2391325324 #endif
2391425325 #include <sys/sysctl.h>
2391525326
23916 "
23917 if test "x$ac_cv_have_decl_CTL_HW" = xyes; then :
25327 " "$ac_c_undeclared_builtin_options" "CFLAGS"
25328 if test "x$ac_cv_have_decl_CTL_HW" = xyes
25329 then :
2391825330 ac_have_decl=1
23919 else
25331 else $as_nop
2392025332 ac_have_decl=0
2392125333 fi
23922
23923 cat >>confdefs.h <<_ACEOF
23924 #define HAVE_DECL_CTL_HW $ac_have_decl
23925 _ACEOF
23926 ac_fn_c_check_decl "$LINENO" "HW_NCPU" "ac_cv_have_decl_HW_NCPU" "
25334 printf "%s\n" "#define HAVE_DECL_CTL_HW $ac_have_decl" >>confdefs.h
25335 ac_fn_check_decl "$LINENO" "HW_NCPU" "ac_cv_have_decl_HW_NCPU" "
2392725336 #if HAVE_SYS_PARAM_H
2392825337 #include <sys/param.h>
2392925338 #endif
2393025339 #include <sys/sysctl.h>
2393125340
23932 "
23933 if test "x$ac_cv_have_decl_HW_NCPU" = xyes; then :
25341 " "$ac_c_undeclared_builtin_options" "CFLAGS"
25342 if test "x$ac_cv_have_decl_HW_NCPU" = xyes
25343 then :
2393425344 ac_have_decl=1
23935 else
25345 else $as_nop
2393625346 ac_have_decl=0
2393725347 fi
23938
23939 cat >>confdefs.h <<_ACEOF
23940 #define HAVE_DECL_HW_NCPU $ac_have_decl
23941 _ACEOF
23942 ac_fn_c_check_decl "$LINENO" "HW_REALMEM64" "ac_cv_have_decl_HW_REALMEM64" "
25348 printf "%s\n" "#define HAVE_DECL_HW_NCPU $ac_have_decl" >>confdefs.h
25349 ac_fn_check_decl "$LINENO" "HW_REALMEM64" "ac_cv_have_decl_HW_REALMEM64" "
2394325350 #if HAVE_SYS_PARAM_H
2394425351 #include <sys/param.h>
2394525352 #endif
2394625353 #include <sys/sysctl.h>
2394725354
23948 "
23949 if test "x$ac_cv_have_decl_HW_REALMEM64" = xyes; then :
25355 " "$ac_c_undeclared_builtin_options" "CFLAGS"
25356 if test "x$ac_cv_have_decl_HW_REALMEM64" = xyes
25357 then :
2395025358 ac_have_decl=1
23951 else
25359 else $as_nop
2395225360 ac_have_decl=0
2395325361 fi
23954
23955 cat >>confdefs.h <<_ACEOF
23956 #define HAVE_DECL_HW_REALMEM64 $ac_have_decl
23957 _ACEOF
23958 ac_fn_c_check_decl "$LINENO" "HW_MEMSIZE64" "ac_cv_have_decl_HW_MEMSIZE64" "
25362 printf "%s\n" "#define HAVE_DECL_HW_REALMEM64 $ac_have_decl" >>confdefs.h
25363 ac_fn_check_decl "$LINENO" "HW_MEMSIZE64" "ac_cv_have_decl_HW_MEMSIZE64" "
2395925364 #if HAVE_SYS_PARAM_H
2396025365 #include <sys/param.h>
2396125366 #endif
2396225367 #include <sys/sysctl.h>
2396325368
23964 "
23965 if test "x$ac_cv_have_decl_HW_MEMSIZE64" = xyes; then :
25369 " "$ac_c_undeclared_builtin_options" "CFLAGS"
25370 if test "x$ac_cv_have_decl_HW_MEMSIZE64" = xyes
25371 then :
2396625372 ac_have_decl=1
23967 else
25373 else $as_nop
2396825374 ac_have_decl=0
2396925375 fi
23970
23971 cat >>confdefs.h <<_ACEOF
23972 #define HAVE_DECL_HW_MEMSIZE64 $ac_have_decl
23973 _ACEOF
23974 ac_fn_c_check_decl "$LINENO" "HW_PHYSMEM64" "ac_cv_have_decl_HW_PHYSMEM64" "
25376 printf "%s\n" "#define HAVE_DECL_HW_MEMSIZE64 $ac_have_decl" >>confdefs.h
25377 ac_fn_check_decl "$LINENO" "HW_PHYSMEM64" "ac_cv_have_decl_HW_PHYSMEM64" "
2397525378 #if HAVE_SYS_PARAM_H
2397625379 #include <sys/param.h>
2397725380 #endif
2397825381 #include <sys/sysctl.h>
2397925382
23980 "
23981 if test "x$ac_cv_have_decl_HW_PHYSMEM64" = xyes; then :
25383 " "$ac_c_undeclared_builtin_options" "CFLAGS"
25384 if test "x$ac_cv_have_decl_HW_PHYSMEM64" = xyes
25385 then :
2398225386 ac_have_decl=1
23983 else
25387 else $as_nop
2398425388 ac_have_decl=0
2398525389 fi
23986
23987 cat >>confdefs.h <<_ACEOF
23988 #define HAVE_DECL_HW_PHYSMEM64 $ac_have_decl
23989 _ACEOF
23990 ac_fn_c_check_decl "$LINENO" "HW_USERMEM64" "ac_cv_have_decl_HW_USERMEM64" "
25390 printf "%s\n" "#define HAVE_DECL_HW_PHYSMEM64 $ac_have_decl" >>confdefs.h
25391 ac_fn_check_decl "$LINENO" "HW_USERMEM64" "ac_cv_have_decl_HW_USERMEM64" "
2399125392 #if HAVE_SYS_PARAM_H
2399225393 #include <sys/param.h>
2399325394 #endif
2399425395 #include <sys/sysctl.h>
2399525396
23996 "
23997 if test "x$ac_cv_have_decl_HW_USERMEM64" = xyes; then :
25397 " "$ac_c_undeclared_builtin_options" "CFLAGS"
25398 if test "x$ac_cv_have_decl_HW_USERMEM64" = xyes
25399 then :
2399825400 ac_have_decl=1
23999 else
25401 else $as_nop
2400025402 ac_have_decl=0
2400125403 fi
24002
24003 cat >>confdefs.h <<_ACEOF
24004 #define HAVE_DECL_HW_USERMEM64 $ac_have_decl
24005 _ACEOF
24006 ac_fn_c_check_decl "$LINENO" "HW_REALMEM" "ac_cv_have_decl_HW_REALMEM" "
25404 printf "%s\n" "#define HAVE_DECL_HW_USERMEM64 $ac_have_decl" >>confdefs.h
25405 ac_fn_check_decl "$LINENO" "HW_REALMEM" "ac_cv_have_decl_HW_REALMEM" "
2400725406 #if HAVE_SYS_PARAM_H
2400825407 #include <sys/param.h>
2400925408 #endif
2401025409 #include <sys/sysctl.h>
2401125410
24012 "
24013 if test "x$ac_cv_have_decl_HW_REALMEM" = xyes; then :
25411 " "$ac_c_undeclared_builtin_options" "CFLAGS"
25412 if test "x$ac_cv_have_decl_HW_REALMEM" = xyes
25413 then :
2401425414 ac_have_decl=1
24015 else
25415 else $as_nop
2401625416 ac_have_decl=0
2401725417 fi
24018
24019 cat >>confdefs.h <<_ACEOF
24020 #define HAVE_DECL_HW_REALMEM $ac_have_decl
24021 _ACEOF
24022 ac_fn_c_check_decl "$LINENO" "HW_MEMSIZE" "ac_cv_have_decl_HW_MEMSIZE" "
25418 printf "%s\n" "#define HAVE_DECL_HW_REALMEM $ac_have_decl" >>confdefs.h
25419 ac_fn_check_decl "$LINENO" "HW_MEMSIZE" "ac_cv_have_decl_HW_MEMSIZE" "
2402325420 #if HAVE_SYS_PARAM_H
2402425421 #include <sys/param.h>
2402525422 #endif
2402625423 #include <sys/sysctl.h>
2402725424
24028 "
24029 if test "x$ac_cv_have_decl_HW_MEMSIZE" = xyes; then :
25425 " "$ac_c_undeclared_builtin_options" "CFLAGS"
25426 if test "x$ac_cv_have_decl_HW_MEMSIZE" = xyes
25427 then :
2403025428 ac_have_decl=1
24031 else
25429 else $as_nop
2403225430 ac_have_decl=0
2403325431 fi
24034
24035 cat >>confdefs.h <<_ACEOF
24036 #define HAVE_DECL_HW_MEMSIZE $ac_have_decl
24037 _ACEOF
24038 ac_fn_c_check_decl "$LINENO" "HW_PHYSMEM" "ac_cv_have_decl_HW_PHYSMEM" "
25432 printf "%s\n" "#define HAVE_DECL_HW_MEMSIZE $ac_have_decl" >>confdefs.h
25433 ac_fn_check_decl "$LINENO" "HW_PHYSMEM" "ac_cv_have_decl_HW_PHYSMEM" "
2403925434 #if HAVE_SYS_PARAM_H
2404025435 #include <sys/param.h>
2404125436 #endif
2404225437 #include <sys/sysctl.h>
2404325438
24044 "
24045 if test "x$ac_cv_have_decl_HW_PHYSMEM" = xyes; then :
25439 " "$ac_c_undeclared_builtin_options" "CFLAGS"
25440 if test "x$ac_cv_have_decl_HW_PHYSMEM" = xyes
25441 then :
2404625442 ac_have_decl=1
24047 else
25443 else $as_nop
2404825444 ac_have_decl=0
2404925445 fi
24050
24051 cat >>confdefs.h <<_ACEOF
24052 #define HAVE_DECL_HW_PHYSMEM $ac_have_decl
24053 _ACEOF
24054 ac_fn_c_check_decl "$LINENO" "HW_USERMEM" "ac_cv_have_decl_HW_USERMEM" "
25446 printf "%s\n" "#define HAVE_DECL_HW_PHYSMEM $ac_have_decl" >>confdefs.h
25447 ac_fn_check_decl "$LINENO" "HW_USERMEM" "ac_cv_have_decl_HW_USERMEM" "
2405525448 #if HAVE_SYS_PARAM_H
2405625449 #include <sys/param.h>
2405725450 #endif
2405825451 #include <sys/sysctl.h>
2405925452
24060 "
24061 if test "x$ac_cv_have_decl_HW_USERMEM" = xyes; then :
25453 " "$ac_c_undeclared_builtin_options" "CFLAGS"
25454 if test "x$ac_cv_have_decl_HW_USERMEM" = xyes
25455 then :
2406225456 ac_have_decl=1
24063 else
25457 else $as_nop
2406425458 ac_have_decl=0
2406525459 fi
24066
24067 cat >>confdefs.h <<_ACEOF
24068 #define HAVE_DECL_HW_USERMEM $ac_have_decl
24069 _ACEOF
25460 printf "%s\n" "#define HAVE_DECL_HW_USERMEM $ac_have_decl" >>confdefs.h
2407025461
2407125462
2407225463 fi
2407325464
2407425465 done
24075
2407625466
2407725467 # Don't detect sysctl* on Linux because its sysctl() syscall is
2407825468 # long deprecated and unneeded. Some libc still expose the symbol
2408525475 # or other similar definitions. So while the symbols "sysctl" and
2408625476 # "sysctlbyname" might still be available in libc (which autoconf
2408725477 # checks for), they might not be actually usable.
24088 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysctl" >&5
24089 $as_echo_n "checking for sysctl... " >&6; }
25478 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sysctl" >&5
25479 printf %s "checking for sysctl... " >&6; }
2409025480 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2409125481 /* end confdefs.h. */
2409225482
24093 #include <stdio.h>
24094 #include <sys/types.h>
24095 #include <sys/sysctl.h>
25483
25484 #include <stdio.h>
25485 #include <sys/types.h>
25486 #include <sys/sysctl.h>
2409625487
2409725488 int
24098 main ()
25489 main (void)
2409925490 {
24100 return sysctl(NULL,0,NULL,NULL,NULL,0);
25491
25492 return sysctl(NULL,0,NULL,NULL,NULL,0);
25493
2410125494 ;
2410225495 return 0;
2410325496 }
2410425497 _ACEOF
24105 if ac_fn_c_try_link "$LINENO"; then :
24106
24107 $as_echo "#define HAVE_SYSCTL 1" >>confdefs.h
24108
24109 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
24110 $as_echo "yes" >&6; }
24111 else
24112 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
24113 $as_echo "no" >&6; }
24114 fi
24115 rm -f core conftest.err conftest.$ac_objext \
25498 if ac_fn_c_try_link "$LINENO"
25499 then :
25500
25501 printf "%s\n" "#define HAVE_SYSCTL 1" >>confdefs.h
25502
25503 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
25504 printf "%s\n" "yes" >&6; }
25505 else $as_nop
25506 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
25507 printf "%s\n" "no" >&6; }
25508 fi
25509 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2411625510 conftest$ac_exeext conftest.$ac_ext
24117 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysctlbyname" >&5
24118 $as_echo_n "checking for sysctlbyname... " >&6; }
25511 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sysctlbyname" >&5
25512 printf %s "checking for sysctlbyname... " >&6; }
2411925513 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2412025514 /* end confdefs.h. */
2412125515
24122 #include <stdio.h>
24123 #include <sys/types.h>
24124 #include <sys/sysctl.h>
25516
25517 #include <stdio.h>
25518 #include <sys/types.h>
25519 #include <sys/sysctl.h>
2412525520
2412625521 int
24127 main ()
25522 main (void)
2412825523 {
24129 return sysctlbyname(NULL,NULL,NULL,NULL,0);
25524
25525 return sysctlbyname(NULL,NULL,NULL,NULL,0);
25526
2413025527 ;
2413125528 return 0;
2413225529 }
2413325530 _ACEOF
24134 if ac_fn_c_try_link "$LINENO"; then :
24135
24136 $as_echo "#define HAVE_SYSCTLBYNAME 1" >>confdefs.h
24137
24138 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
24139 $as_echo "yes" >&6; }
24140 else
24141 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
24142 $as_echo "no" >&6; }
24143 fi
24144 rm -f core conftest.err conftest.$ac_objext \
25531 if ac_fn_c_try_link "$LINENO"
25532 then :
25533
25534 printf "%s\n" "#define HAVE_SYSCTLBYNAME 1" >>confdefs.h
25535
25536 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
25537 printf "%s\n" "yes" >&6; }
25538 else $as_nop
25539 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
25540 printf "%s\n" "no" >&6; }
25541 fi
25542 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2414525543 conftest$ac_exeext conftest.$ac_ext
2414625544 fi
2414725545
24148 ac_fn_c_check_decl "$LINENO" "pthread_setaffinity_np" "ac_cv_have_decl_pthread_setaffinity_np" "
25546 ac_fn_check_decl "$LINENO" "pthread_setaffinity_np" "ac_cv_have_decl_pthread_setaffinity_np" "
2414925547 #include <pthread.h>
2415025548 #ifdef HAVE_PTHREAD_NP_H
2415125549 # include <pthread_np.h>
2415225550 #endif
2415325551
24154 "
24155 if test "x$ac_cv_have_decl_pthread_setaffinity_np" = xyes; then :
25552 " "$ac_c_undeclared_builtin_options" "CFLAGS"
25553 if test "x$ac_cv_have_decl_pthread_setaffinity_np" = xyes
25554 then :
2415625555 ac_have_decl=1
24157 else
25556 else $as_nop
2415825557 ac_have_decl=0
2415925558 fi
24160
24161 cat >>confdefs.h <<_ACEOF
24162 #define HAVE_DECL_PTHREAD_SETAFFINITY_NP $ac_have_decl
24163 _ACEOF
24164 if test $ac_have_decl = 1; then :
24165
24166 else
25559 printf "%s\n" "#define HAVE_DECL_PTHREAD_SETAFFINITY_NP $ac_have_decl" >>confdefs.h
25560 if test $ac_have_decl = 1
25561 then :
25562
25563 else $as_nop
2416725564 :
2416825565 fi
2416925566
24170 ac_fn_c_check_decl "$LINENO" "pthread_getaffinity_np" "ac_cv_have_decl_pthread_getaffinity_np" "
25567 ac_fn_check_decl "$LINENO" "pthread_getaffinity_np" "ac_cv_have_decl_pthread_getaffinity_np" "
2417125568 #include <pthread.h>
2417225569 #ifdef HAVE_PTHREAD_NP_H
2417325570 # include <pthread_np.h>
2417425571 #endif
2417525572
24176 "
24177 if test "x$ac_cv_have_decl_pthread_getaffinity_np" = xyes; then :
25573 " "$ac_c_undeclared_builtin_options" "CFLAGS"
25574 if test "x$ac_cv_have_decl_pthread_getaffinity_np" = xyes
25575 then :
2417825576 ac_have_decl=1
24179 else
25577 else $as_nop
2418025578 ac_have_decl=0
2418125579 fi
24182
24183 cat >>confdefs.h <<_ACEOF
24184 #define HAVE_DECL_PTHREAD_GETAFFINITY_NP $ac_have_decl
24185 _ACEOF
24186 if test $ac_have_decl = 1; then :
24187
24188 else
25580 printf "%s\n" "#define HAVE_DECL_PTHREAD_GETAFFINITY_NP $ac_have_decl" >>confdefs.h
25581 if test $ac_have_decl = 1
25582 then :
25583
25584 else $as_nop
2418925585 :
2419025586 fi
2419125587
2419225588
24193 ac_fn_c_check_decl "$LINENO" "fabsf" "ac_cv_have_decl_fabsf" "#include <math.h>
24194 "
24195 if test "x$ac_cv_have_decl_fabsf" = xyes; then :
25589 ac_fn_check_decl "$LINENO" "fabsf" "ac_cv_have_decl_fabsf" "#include <math.h>
25590 " "$ac_c_undeclared_builtin_options" "CFLAGS"
25591 if test "x$ac_cv_have_decl_fabsf" = xyes
25592 then :
2419625593 ac_have_decl=1
24197 else
25594 else $as_nop
2419825595 ac_have_decl=0
2419925596 fi
24200
24201 cat >>confdefs.h <<_ACEOF
24202 #define HAVE_DECL_FABSF $ac_have_decl
24203 _ACEOF
24204 if test $ac_have_decl = 1; then :
24205
24206 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fabsf in -lm" >&5
24207 $as_echo_n "checking for fabsf in -lm... " >&6; }
24208 if ${ac_cv_lib_m_fabsf+:} false; then :
24209 $as_echo_n "(cached) " >&6
24210 else
25597 printf "%s\n" "#define HAVE_DECL_FABSF $ac_have_decl" >>confdefs.h
25598 if test $ac_have_decl = 1
25599 then :
25600
25601 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fabsf in -lm" >&5
25602 printf %s "checking for fabsf in -lm... " >&6; }
25603 if test ${ac_cv_lib_m_fabsf+y}
25604 then :
25605 printf %s "(cached) " >&6
25606 else $as_nop
2421125607 ac_check_lib_save_LIBS=$LIBS
2421225608 LIBS="-lm $LIBS"
2421325609 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2421625612 /* Override any GCC internal prototype to avoid an error.
2421725613 Use char because int might match the return type of a GCC
2421825614 builtin and then its argument prototype would still apply. */
24219 #ifdef __cplusplus
24220 extern "C"
24221 #endif
2422225615 char fabsf ();
2422325616 int
24224 main ()
25617 main (void)
2422525618 {
2422625619 return fabsf ();
2422725620 ;
2422825621 return 0;
2422925622 }
2423025623 _ACEOF
24231 if ac_fn_c_try_link "$LINENO"; then :
25624 if ac_fn_c_try_link "$LINENO"
25625 then :
2423225626 ac_cv_lib_m_fabsf=yes
24233 else
25627 else $as_nop
2423425628 ac_cv_lib_m_fabsf=no
2423525629 fi
24236 rm -f core conftest.err conftest.$ac_objext \
25630 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2423725631 conftest$ac_exeext conftest.$ac_ext
2423825632 LIBS=$ac_check_lib_save_LIBS
2423925633 fi
24240 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_fabsf" >&5
24241 $as_echo "$ac_cv_lib_m_fabsf" >&6; }
24242 if test "x$ac_cv_lib_m_fabsf" = xyes; then :
25634 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_fabsf" >&5
25635 printf "%s\n" "$ac_cv_lib_m_fabsf" >&6; }
25636 if test "x$ac_cv_lib_m_fabsf" = xyes
25637 then :
2424325638 need_libm=yes
2424425639 fi
2424525640
2424625641
2424725642 fi
2424825643
24249 ac_fn_c_check_decl "$LINENO" "modff" "ac_cv_have_decl_modff" "#include <math.h>
24250 "
24251 if test "x$ac_cv_have_decl_modff" = xyes; then :
25644 ac_fn_check_decl "$LINENO" "modff" "ac_cv_have_decl_modff" "#include <math.h>
25645 " "$ac_c_undeclared_builtin_options" "CFLAGS"
25646 if test "x$ac_cv_have_decl_modff" = xyes
25647 then :
2425225648 ac_have_decl=1
24253 else
25649 else $as_nop
2425425650 ac_have_decl=0
2425525651 fi
24256
24257 cat >>confdefs.h <<_ACEOF
24258 #define HAVE_DECL_MODFF $ac_have_decl
24259 _ACEOF
24260 if test $ac_have_decl = 1; then :
24261
24262 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for modff in -lm" >&5
24263 $as_echo_n "checking for modff in -lm... " >&6; }
24264 if ${ac_cv_lib_m_modff+:} false; then :
24265 $as_echo_n "(cached) " >&6
24266 else
25652 printf "%s\n" "#define HAVE_DECL_MODFF $ac_have_decl" >>confdefs.h
25653 if test $ac_have_decl = 1
25654 then :
25655
25656 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for modff in -lm" >&5
25657 printf %s "checking for modff in -lm... " >&6; }
25658 if test ${ac_cv_lib_m_modff+y}
25659 then :
25660 printf %s "(cached) " >&6
25661 else $as_nop
2426725662 ac_check_lib_save_LIBS=$LIBS
2426825663 LIBS="-lm $LIBS"
2426925664 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2427225667 /* Override any GCC internal prototype to avoid an error.
2427325668 Use char because int might match the return type of a GCC
2427425669 builtin and then its argument prototype would still apply. */
24275 #ifdef __cplusplus
24276 extern "C"
24277 #endif
2427825670 char modff ();
2427925671 int
24280 main ()
25672 main (void)
2428125673 {
2428225674 return modff ();
2428325675 ;
2428425676 return 0;
2428525677 }
2428625678 _ACEOF
24287 if ac_fn_c_try_link "$LINENO"; then :
25679 if ac_fn_c_try_link "$LINENO"
25680 then :
2428825681 ac_cv_lib_m_modff=yes
24289 else
25682 else $as_nop
2429025683 ac_cv_lib_m_modff=no
2429125684 fi
24292 rm -f core conftest.err conftest.$ac_objext \
25685 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2429325686 conftest$ac_exeext conftest.$ac_ext
2429425687 LIBS=$ac_check_lib_save_LIBS
2429525688 fi
24296 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_modff" >&5
24297 $as_echo "$ac_cv_lib_m_modff" >&6; }
24298 if test "x$ac_cv_lib_m_modff" = xyes; then :
25689 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_modff" >&5
25690 printf "%s\n" "$ac_cv_lib_m_modff" >&6; }
25691 if test "x$ac_cv_lib_m_modff" = xyes
25692 then :
2429925693 need_libm=yes
2430025694 fi
2430125695
2430625700 HWLOC_LIBS="-lm $HWLOC_LIBS"
2430725701 fi
2430825702
24309 ac_fn_c_check_decl "$LINENO" "_SC_NPROCESSORS_ONLN" "ac_cv_have_decl__SC_NPROCESSORS_ONLN" "#include <unistd.h>
24310 "
24311 if test "x$ac_cv_have_decl__SC_NPROCESSORS_ONLN" = xyes; then :
25703 ac_fn_check_decl "$LINENO" "_SC_NPROCESSORS_ONLN" "ac_cv_have_decl__SC_NPROCESSORS_ONLN" "#include <unistd.h>
25704 " "$ac_c_undeclared_builtin_options" "CFLAGS"
25705 if test "x$ac_cv_have_decl__SC_NPROCESSORS_ONLN" = xyes
25706 then :
2431225707 ac_have_decl=1
24313 else
25708 else $as_nop
2431425709 ac_have_decl=0
2431525710 fi
24316
24317 cat >>confdefs.h <<_ACEOF
24318 #define HAVE_DECL__SC_NPROCESSORS_ONLN $ac_have_decl
24319 _ACEOF
24320 if test $ac_have_decl = 1; then :
24321
24322 else
25711 printf "%s\n" "#define HAVE_DECL__SC_NPROCESSORS_ONLN $ac_have_decl" >>confdefs.h
25712 if test $ac_have_decl = 1
25713 then :
25714
25715 else $as_nop
2432325716 :
2432425717 fi
24325 ac_fn_c_check_decl "$LINENO" "_SC_NPROCESSORS_CONF" "ac_cv_have_decl__SC_NPROCESSORS_CONF" "#include <unistd.h>
24326 "
24327 if test "x$ac_cv_have_decl__SC_NPROCESSORS_CONF" = xyes; then :
25718 ac_fn_check_decl "$LINENO" "_SC_NPROCESSORS_CONF" "ac_cv_have_decl__SC_NPROCESSORS_CONF" "#include <unistd.h>
25719 " "$ac_c_undeclared_builtin_options" "CFLAGS"
25720 if test "x$ac_cv_have_decl__SC_NPROCESSORS_CONF" = xyes
25721 then :
2432825722 ac_have_decl=1
24329 else
25723 else $as_nop
2433025724 ac_have_decl=0
2433125725 fi
24332
24333 cat >>confdefs.h <<_ACEOF
24334 #define HAVE_DECL__SC_NPROCESSORS_CONF $ac_have_decl
24335 _ACEOF
24336 if test $ac_have_decl = 1; then :
24337
24338 else
25726 printf "%s\n" "#define HAVE_DECL__SC_NPROCESSORS_CONF $ac_have_decl" >>confdefs.h
25727 if test $ac_have_decl = 1
25728 then :
25729
25730 else $as_nop
2433925731 :
2434025732 fi
24341 ac_fn_c_check_decl "$LINENO" "_SC_NPROC_ONLN" "ac_cv_have_decl__SC_NPROC_ONLN" "#include <unistd.h>
24342 "
24343 if test "x$ac_cv_have_decl__SC_NPROC_ONLN" = xyes; then :
25733 ac_fn_check_decl "$LINENO" "_SC_NPROC_ONLN" "ac_cv_have_decl__SC_NPROC_ONLN" "#include <unistd.h>
25734 " "$ac_c_undeclared_builtin_options" "CFLAGS"
25735 if test "x$ac_cv_have_decl__SC_NPROC_ONLN" = xyes
25736 then :
2434425737 ac_have_decl=1
24345 else
25738 else $as_nop
2434625739 ac_have_decl=0
2434725740 fi
24348
24349 cat >>confdefs.h <<_ACEOF
24350 #define HAVE_DECL__SC_NPROC_ONLN $ac_have_decl
24351 _ACEOF
24352 if test $ac_have_decl = 1; then :
24353
24354 else
25741 printf "%s\n" "#define HAVE_DECL__SC_NPROC_ONLN $ac_have_decl" >>confdefs.h
25742 if test $ac_have_decl = 1
25743 then :
25744
25745 else $as_nop
2435525746 :
2435625747 fi
24357 ac_fn_c_check_decl "$LINENO" "_SC_NPROC_CONF" "ac_cv_have_decl__SC_NPROC_CONF" "#include <unistd.h>
24358 "
24359 if test "x$ac_cv_have_decl__SC_NPROC_CONF" = xyes; then :
25748 ac_fn_check_decl "$LINENO" "_SC_NPROC_CONF" "ac_cv_have_decl__SC_NPROC_CONF" "#include <unistd.h>
25749 " "$ac_c_undeclared_builtin_options" "CFLAGS"
25750 if test "x$ac_cv_have_decl__SC_NPROC_CONF" = xyes
25751 then :
2436025752 ac_have_decl=1
24361 else
25753 else $as_nop
2436225754 ac_have_decl=0
2436325755 fi
24364
24365 cat >>confdefs.h <<_ACEOF
24366 #define HAVE_DECL__SC_NPROC_CONF $ac_have_decl
24367 _ACEOF
24368 if test $ac_have_decl = 1; then :
24369
24370 else
25756 printf "%s\n" "#define HAVE_DECL__SC_NPROC_CONF $ac_have_decl" >>confdefs.h
25757 if test $ac_have_decl = 1
25758 then :
25759
25760 else $as_nop
2437125761 :
2437225762 fi
24373 ac_fn_c_check_decl "$LINENO" "_SC_PAGESIZE" "ac_cv_have_decl__SC_PAGESIZE" "#include <unistd.h>
24374 "
24375 if test "x$ac_cv_have_decl__SC_PAGESIZE" = xyes; then :
25763 ac_fn_check_decl "$LINENO" "_SC_PAGESIZE" "ac_cv_have_decl__SC_PAGESIZE" "#include <unistd.h>
25764 " "$ac_c_undeclared_builtin_options" "CFLAGS"
25765 if test "x$ac_cv_have_decl__SC_PAGESIZE" = xyes
25766 then :
2437625767 ac_have_decl=1
24377 else
25768 else $as_nop
2437825769 ac_have_decl=0
2437925770 fi
24380
24381 cat >>confdefs.h <<_ACEOF
24382 #define HAVE_DECL__SC_PAGESIZE $ac_have_decl
24383 _ACEOF
24384 if test $ac_have_decl = 1; then :
24385
24386 else
25771 printf "%s\n" "#define HAVE_DECL__SC_PAGESIZE $ac_have_decl" >>confdefs.h
25772 if test $ac_have_decl = 1
25773 then :
25774
25775 else $as_nop
2438725776 :
2438825777 fi
24389 ac_fn_c_check_decl "$LINENO" "_SC_PAGE_SIZE" "ac_cv_have_decl__SC_PAGE_SIZE" "#include <unistd.h>
24390 "
24391 if test "x$ac_cv_have_decl__SC_PAGE_SIZE" = xyes; then :
25778 ac_fn_check_decl "$LINENO" "_SC_PAGE_SIZE" "ac_cv_have_decl__SC_PAGE_SIZE" "#include <unistd.h>
25779 " "$ac_c_undeclared_builtin_options" "CFLAGS"
25780 if test "x$ac_cv_have_decl__SC_PAGE_SIZE" = xyes
25781 then :
2439225782 ac_have_decl=1
24393 else
25783 else $as_nop
2439425784 ac_have_decl=0
2439525785 fi
24396
24397 cat >>confdefs.h <<_ACEOF
24398 #define HAVE_DECL__SC_PAGE_SIZE $ac_have_decl
24399 _ACEOF
24400 if test $ac_have_decl = 1; then :
24401
24402 else
25786 printf "%s\n" "#define HAVE_DECL__SC_PAGE_SIZE $ac_have_decl" >>confdefs.h
25787 if test $ac_have_decl = 1
25788 then :
25789
25790 else $as_nop
2440325791 :
2440425792 fi
24405 ac_fn_c_check_decl "$LINENO" "_SC_LARGE_PAGESIZE" "ac_cv_have_decl__SC_LARGE_PAGESIZE" "#include <unistd.h>
24406 "
24407 if test "x$ac_cv_have_decl__SC_LARGE_PAGESIZE" = xyes; then :
25793 ac_fn_check_decl "$LINENO" "_SC_LARGE_PAGESIZE" "ac_cv_have_decl__SC_LARGE_PAGESIZE" "#include <unistd.h>
25794 " "$ac_c_undeclared_builtin_options" "CFLAGS"
25795 if test "x$ac_cv_have_decl__SC_LARGE_PAGESIZE" = xyes
25796 then :
2440825797 ac_have_decl=1
24409 else
25798 else $as_nop
2441025799 ac_have_decl=0
2441125800 fi
24412
24413 cat >>confdefs.h <<_ACEOF
24414 #define HAVE_DECL__SC_LARGE_PAGESIZE $ac_have_decl
24415 _ACEOF
24416 if test $ac_have_decl = 1; then :
24417
24418 else
25801 printf "%s\n" "#define HAVE_DECL__SC_LARGE_PAGESIZE $ac_have_decl" >>confdefs.h
25802 if test $ac_have_decl = 1
25803 then :
25804
25805 else $as_nop
2441925806 :
2442025807 fi
2442125808
2442225809
24423 for ac_header in mach/mach_init.h
25810 ac_fn_c_check_header_compile "$LINENO" "mach/mach_init.h" "ac_cv_header_mach_mach_init_h" "$ac_includes_default"
25811 if test "x$ac_cv_header_mach_mach_init_h" = xyes
25812 then :
25813 printf "%s\n" "#define HAVE_MACH_MACH_INIT_H 1" >>confdefs.h
25814
25815 fi
25816
25817 ac_fn_c_check_header_compile "$LINENO" "mach_init.h" "ac_cv_header_mach_init_h" "$ac_includes_default"
25818 if test "x$ac_cv_header_mach_init_h" = xyes
25819 then :
25820 printf "%s\n" "#define HAVE_MACH_INIT_H 1" >>confdefs.h
25821
25822 fi
25823
25824 for ac_header in mach/mach_host.h
2442425825 do :
24425 ac_fn_c_check_header_mongrel "$LINENO" "mach/mach_init.h" "ac_cv_header_mach_mach_init_h" "$ac_includes_default"
24426 if test "x$ac_cv_header_mach_mach_init_h" = xyes; then :
24427 cat >>confdefs.h <<_ACEOF
24428 #define HAVE_MACH_MACH_INIT_H 1
24429 _ACEOF
25826 ac_fn_c_check_header_compile "$LINENO" "mach/mach_host.h" "ac_cv_header_mach_mach_host_h" "$ac_includes_default"
25827 if test "x$ac_cv_header_mach_mach_host_h" = xyes
25828 then :
25829 printf "%s\n" "#define HAVE_MACH_MACH_HOST_H 1" >>confdefs.h
25830
25831 ac_fn_c_check_func "$LINENO" "host_info" "ac_cv_func_host_info"
25832 if test "x$ac_cv_func_host_info" = xyes
25833 then :
25834 printf "%s\n" "#define HAVE_HOST_INFO 1" >>confdefs.h
25835
25836 fi
25837
2443025838
2443125839 fi
2443225840
2443325841 done
2443425842
24435 for ac_header in mach_init.h
24436 do :
24437 ac_fn_c_check_header_mongrel "$LINENO" "mach_init.h" "ac_cv_header_mach_init_h" "$ac_includes_default"
24438 if test "x$ac_cv_header_mach_init_h" = xyes; then :
24439 cat >>confdefs.h <<_ACEOF
24440 #define HAVE_MACH_INIT_H 1
24441 _ACEOF
24442
24443 fi
24444
24445 done
24446
24447 for ac_header in mach/mach_host.h
24448 do :
24449 ac_fn_c_check_header_mongrel "$LINENO" "mach/mach_host.h" "ac_cv_header_mach_mach_host_h" "$ac_includes_default"
24450 if test "x$ac_cv_header_mach_mach_host_h" = xyes; then :
24451 cat >>confdefs.h <<_ACEOF
24452 #define HAVE_MACH_MACH_HOST_H 1
24453 _ACEOF
24454
24455 for ac_func in host_info
24456 do :
24457 ac_fn_c_check_func "$LINENO" "host_info" "ac_cv_func_host_info"
24458 if test "x$ac_cv_func_host_info" = xyes; then :
24459 cat >>confdefs.h <<_ACEOF
24460 #define HAVE_HOST_INFO 1
24461 _ACEOF
24462
24463 fi
24464 done
24465
24466
24467 fi
24468
24469 done
24470
24471
24472 ac_fn_c_check_decl "$LINENO" "strtoull" "ac_cv_have_decl_strtoull" "$ac_includes_default
24473 "
24474 if test "x$ac_cv_have_decl_strtoull" = xyes; then :
25843 ac_fn_check_decl "$LINENO" "strtoull" "ac_cv_have_decl_strtoull" "$ac_includes_default
25844 " "$ac_c_undeclared_builtin_options" "CFLAGS"
25845 if test "x$ac_cv_have_decl_strtoull" = xyes
25846 then :
2447525847 ac_have_decl=1
24476 else
25848 else $as_nop
2447725849 ac_have_decl=0
2447825850 fi
24479
24480 cat >>confdefs.h <<_ACEOF
24481 #define HAVE_DECL_STRTOULL $ac_have_decl
24482 _ACEOF
24483 if test $ac_have_decl = 1; then :
24484
24485 else
24486 for ac_func in strtoull
24487 do :
25851 printf "%s\n" "#define HAVE_DECL_STRTOULL $ac_have_decl" >>confdefs.h
25852 if test $ac_have_decl = 1
25853 then :
25854
25855 else $as_nop
2448825856 ac_fn_c_check_func "$LINENO" "strtoull" "ac_cv_func_strtoull"
24489 if test "x$ac_cv_func_strtoull" = xyes; then :
24490 cat >>confdefs.h <<_ACEOF
24491 #define HAVE_STRTOULL 1
24492 _ACEOF
24493
24494 fi
24495 done
25857 if test "x$ac_cv_func_strtoull" = xyes
25858 then :
25859 printf "%s\n" "#define HAVE_STRTOULL 1" >>confdefs.h
25860
25861 fi
2449625862
2449725863 fi
2449825864
2449925865
2450025866 # Needed for Windows in private/misc.h
2450125867 ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default"
24502 if test "x$ac_cv_type_ssize_t" = xyes; then :
24503
24504 cat >>confdefs.h <<_ACEOF
24505 #define HAVE_SSIZE_T 1
24506 _ACEOF
24507
24508
24509 fi
24510
24511 ac_fn_c_check_decl "$LINENO" "snprintf" "ac_cv_have_decl_snprintf" "$ac_includes_default
24512 "
24513 if test "x$ac_cv_have_decl_snprintf" = xyes; then :
25868 if test "x$ac_cv_type_ssize_t" = xyes
25869 then :
25870
25871 printf "%s\n" "#define HAVE_SSIZE_T 1" >>confdefs.h
25872
25873
25874 fi
25875
25876 ac_fn_check_decl "$LINENO" "snprintf" "ac_cv_have_decl_snprintf" "$ac_includes_default
25877 " "$ac_c_undeclared_builtin_options" "CFLAGS"
25878 if test "x$ac_cv_have_decl_snprintf" = xyes
25879 then :
2451425880 ac_have_decl=1
24515 else
25881 else $as_nop
2451625882 ac_have_decl=0
2451725883 fi
24518
24519 cat >>confdefs.h <<_ACEOF
24520 #define HAVE_DECL_SNPRINTF $ac_have_decl
24521 _ACEOF
25884 printf "%s\n" "#define HAVE_DECL_SNPRINTF $ac_have_decl" >>confdefs.h
2452225885
2452325886 # strdup and putenv are declared in windows headers but marked deprecated
24524 ac_fn_c_check_decl "$LINENO" "_strdup" "ac_cv_have_decl__strdup" "$ac_includes_default
24525 "
24526 if test "x$ac_cv_have_decl__strdup" = xyes; then :
25887 ac_fn_check_decl "$LINENO" "_strdup" "ac_cv_have_decl__strdup" "$ac_includes_default
25888 " "$ac_c_undeclared_builtin_options" "CFLAGS"
25889 if test "x$ac_cv_have_decl__strdup" = xyes
25890 then :
2452725891 ac_have_decl=1
24528 else
25892 else $as_nop
2452925893 ac_have_decl=0
2453025894 fi
24531
24532 cat >>confdefs.h <<_ACEOF
24533 #define HAVE_DECL__STRDUP $ac_have_decl
24534 _ACEOF
24535
24536 ac_fn_c_check_decl "$LINENO" "_putenv" "ac_cv_have_decl__putenv" "$ac_includes_default
24537 "
24538 if test "x$ac_cv_have_decl__putenv" = xyes; then :
25895 printf "%s\n" "#define HAVE_DECL__STRDUP $ac_have_decl" >>confdefs.h
25896
25897 ac_fn_check_decl "$LINENO" "_putenv" "ac_cv_have_decl__putenv" "$ac_includes_default
25898 " "$ac_c_undeclared_builtin_options" "CFLAGS"
25899 if test "x$ac_cv_have_decl__putenv" = xyes
25900 then :
2453925901 ac_have_decl=1
24540 else
25902 else $as_nop
2454125903 ac_have_decl=0
2454225904 fi
24543
24544 cat >>confdefs.h <<_ACEOF
24545 #define HAVE_DECL__PUTENV $ac_have_decl
24546 _ACEOF
25905 printf "%s\n" "#define HAVE_DECL__PUTENV $ac_have_decl" >>confdefs.h
2454725906
2454825907 # Could add mkdir and access for hwloc-gather-cpuid.c on Windows
2454925908
2455025909 broken_snprintf=no
24551 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf is correct" >&5
24552 $as_echo_n "checking whether snprintf is correct... " >&6; }
24553 if test "$cross_compiling" = yes; then :
24554
24555 { $as_echo "$as_me:${as_lineno-$LINENO}: result: don't know (cross-compiling)" >&5
24556 $as_echo "don't know (cross-compiling)" >&6; }
25910 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether snprintf is correct" >&5
25911 printf %s "checking whether snprintf is correct... " >&6; }
25912 if test "$cross_compiling" = yes
25913 then :
25914
25915 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: don't know (cross-compiling)" >&5
25916 printf "%s\n" "don't know (cross-compiling)" >&6; }
2455725917 broken_snprintf=maybe
2455825918
24559 else
25919 else $as_nop
2456025920 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2456125921 /* end confdefs.h. */
2456225922
2456625926 #include <assert.h>
2456725927
2456825928 int
24569 main ()
25929 main (void)
2457025930 {
2457125931
2457225932 char buf[7];
2458125941 return 0;
2458225942 }
2458325943 _ACEOF
24584 if ac_fn_c_try_run "$LINENO"; then :
24585 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
24586 $as_echo "yes" >&6; }
24587 else
24588
24589 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
24590 $as_echo "no" >&6; }
25944 if ac_fn_c_try_run "$LINENO"
25945 then :
25946 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
25947 printf "%s\n" "yes" >&6; }
25948 else $as_nop
25949
25950 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
25951 printf "%s\n" "no" >&6; }
2459125952 broken_snprintf=yes
2459225953
2459325954 fi
2459825959
2459925960 if test x$broken_snprintf = xno; then
2460025961
24601 $as_echo "#define HWLOC_HAVE_CORRECT_SNPRINTF 1" >>confdefs.h
25962 printf "%s\n" "#define HWLOC_HAVE_CORRECT_SNPRINTF 1" >>confdefs.h
2460225963
2460325964 fi
2460425965
24605 ac_fn_c_check_decl "$LINENO" "getprogname" "ac_cv_have_decl_getprogname" "$ac_includes_default
24606 "
24607 if test "x$ac_cv_have_decl_getprogname" = xyes; then :
25966 ac_fn_check_decl "$LINENO" "getprogname" "ac_cv_have_decl_getprogname" "$ac_includes_default
25967 " "$ac_c_undeclared_builtin_options" "CFLAGS"
25968 if test "x$ac_cv_have_decl_getprogname" = xyes
25969 then :
2460825970 ac_have_decl=1
24609 else
25971 else $as_nop
2461025972 ac_have_decl=0
2461125973 fi
24612
24613 cat >>confdefs.h <<_ACEOF
24614 #define HAVE_DECL_GETPROGNAME $ac_have_decl
24615 _ACEOF
24616
24617 ac_fn_c_check_decl "$LINENO" "getexecname" "ac_cv_have_decl_getexecname" "$ac_includes_default
24618 "
24619 if test "x$ac_cv_have_decl_getexecname" = xyes; then :
25974 printf "%s\n" "#define HAVE_DECL_GETPROGNAME $ac_have_decl" >>confdefs.h
25975
25976 ac_fn_check_decl "$LINENO" "getexecname" "ac_cv_have_decl_getexecname" "$ac_includes_default
25977 " "$ac_c_undeclared_builtin_options" "CFLAGS"
25978 if test "x$ac_cv_have_decl_getexecname" = xyes
25979 then :
2462025980 ac_have_decl=1
24621 else
25981 else $as_nop
2462225982 ac_have_decl=0
2462325983 fi
24624
24625 cat >>confdefs.h <<_ACEOF
24626 #define HAVE_DECL_GETEXECNAME $ac_have_decl
24627 _ACEOF
25984 printf "%s\n" "#define HAVE_DECL_GETEXECNAME $ac_have_decl" >>confdefs.h
2462825985
2462925986 # program_invocation_name and __progname may be available but not exported in headers
24630 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for program_invocation_name" >&5
24631 $as_echo_n "checking for program_invocation_name... " >&6; }
25987 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for program_invocation_name" >&5
25988 printf %s "checking for program_invocation_name... " >&6; }
2463225989 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2463325990 /* end confdefs.h. */
2463425991
24635 #ifndef _GNU_SOURCE
24636 # define _GNU_SOURCE
24637 #endif
24638 #include <errno.h>
24639 #include <stdio.h>
24640 extern char *program_invocation_name;
25992
25993 #ifndef _GNU_SOURCE
25994 # define _GNU_SOURCE
25995 #endif
25996 #include <errno.h>
25997 #include <stdio.h>
25998 extern char *program_invocation_name;
2464125999
2464226000 int
24643 main ()
26001 main (void)
2464426002 {
2464526003
24646 return printf("%s\n", program_invocation_name);
26004 return printf("%s\n", program_invocation_name);
2464726005
2464826006 ;
2464926007 return 0;
2465026008 }
2465126009 _ACEOF
24652 if ac_fn_c_try_link "$LINENO"; then :
24653
24654 $as_echo "#define HAVE_PROGRAM_INVOCATION_NAME 1" >>confdefs.h
24655
24656 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
24657 $as_echo "yes" >&6; }
24658
24659 else
24660 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
24661 $as_echo "no" >&6; }
24662 fi
24663 rm -f core conftest.err conftest.$ac_objext \
26010 if ac_fn_c_try_link "$LINENO"
26011 then :
26012
26013 printf "%s\n" "#define HAVE_PROGRAM_INVOCATION_NAME 1" >>confdefs.h
26014
26015 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
26016 printf "%s\n" "yes" >&6; }
26017
26018 else $as_nop
26019 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
26020 printf "%s\n" "no" >&6; }
26021 fi
26022 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2466426023 conftest$ac_exeext conftest.$ac_ext
24665 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for __progname" >&5
24666 $as_echo_n "checking for __progname... " >&6; }
26024 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __progname" >&5
26025 printf %s "checking for __progname... " >&6; }
2466726026 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2466826027 /* end confdefs.h. */
2466926028
24670 #include <stdio.h>
24671 extern char *__progname;
26029
26030 #include <stdio.h>
26031 extern char *__progname;
2467226032
2467326033 int
24674 main ()
26034 main (void)
2467526035 {
2467626036
24677 return printf("%s\n", __progname);
26037 return printf("%s\n", __progname);
2467826038
2467926039 ;
2468026040 return 0;
2468126041 }
2468226042 _ACEOF
24683 if ac_fn_c_try_link "$LINENO"; then :
24684
24685 $as_echo "#define HAVE___PROGNAME 1" >>confdefs.h
24686
24687 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
24688 $as_echo "yes" >&6; }
24689
24690 else
24691 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
24692 $as_echo "no" >&6; }
24693 fi
24694 rm -f core conftest.err conftest.$ac_objext \
26043 if ac_fn_c_try_link "$LINENO"
26044 then :
26045
26046 printf "%s\n" "#define HAVE___PROGNAME 1" >>confdefs.h
26047
26048 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
26049 printf "%s\n" "yes" >&6; }
26050
26051 else $as_nop
26052 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
26053 printf "%s\n" "no" >&6; }
26054 fi
26055 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2469526056 conftest$ac_exeext conftest.$ac_ext
2469626057
2469726058 case ${target} in
2470326064 hwloc_pid_t=pid_t
2470426065 ac_fn_c_check_type "$LINENO" "pthread_t" "ac_cv_type_pthread_t" "#include <pthread.h>
2470526066 "
24706 if test "x$ac_cv_type_pthread_t" = xyes; then :
24707
24708 cat >>confdefs.h <<_ACEOF
24709 #define HAVE_PTHREAD_T 1
24710 _ACEOF
26067 if test "x$ac_cv_type_pthread_t" = xyes
26068 then :
26069
26070 printf "%s\n" "#define HAVE_PTHREAD_T 1" >>confdefs.h
2471126071
2471226072 hwloc_thread_t=pthread_t
24713 else
26073 else $as_nop
2471426074 :
2471526075 fi
2471626076
2471726077 ;;
2471826078 esac
2471926079
24720 cat >>confdefs.h <<_ACEOF
24721 #define hwloc_pid_t $hwloc_pid_t
24722 _ACEOF
26080 printf "%s\n" "#define hwloc_pid_t $hwloc_pid_t" >>confdefs.h
2472326081
2472426082 if test "x$hwloc_thread_t" != "x" ; then
2472526083
24726 cat >>confdefs.h <<_ACEOF
24727 #define hwloc_thread_t $hwloc_thread_t
24728 _ACEOF
26084 printf "%s\n" "#define hwloc_thread_t $hwloc_thread_t" >>confdefs.h
2472926085
2473026086 fi
2473126087
2473226088 # Extract the first word of "bash", so it can be a program name with args.
2473326089 set dummy bash; ac_word=$2
24734 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
24735 $as_echo_n "checking for $ac_word... " >&6; }
24736 if ${ac_cv_path_BASH+:} false; then :
24737 $as_echo_n "(cached) " >&6
24738 else
26090 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
26091 printf %s "checking for $ac_word... " >&6; }
26092 if test ${ac_cv_path_BASH+y}
26093 then :
26094 printf %s "(cached) " >&6
26095 else $as_nop
2473926096 case $BASH in
2474026097 [\\/]* | ?:[\\/]*)
2474126098 ac_cv_path_BASH="$BASH" # Let the user override the test with a path.
2474526102 for as_dir in $PATH
2474626103 do
2474726104 IFS=$as_save_IFS
24748 test -z "$as_dir" && as_dir=.
26105 case $as_dir in #(((
26106 '') as_dir=./ ;;
26107 */) ;;
26108 *) as_dir=$as_dir/ ;;
26109 esac
2474926110 for ac_exec_ext in '' $ac_executable_extensions; do
24750 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
24751 ac_cv_path_BASH="$as_dir/$ac_word$ac_exec_ext"
24752 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
26111 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
26112 ac_cv_path_BASH="$as_dir$ac_word$ac_exec_ext"
26113 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
2475326114 break 2
2475426115 fi
2475526116 done
2476126122 fi
2476226123 BASH=$ac_cv_path_BASH
2476326124 if test -n "$BASH"; then
24764 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BASH" >&5
24765 $as_echo "$BASH" >&6; }
26125 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $BASH" >&5
26126 printf "%s\n" "$BASH" >&6; }
2476626127 else
24767 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
24768 $as_echo "no" >&6; }
24769 fi
24770
24771
24772
24773 for ac_func in ffs
26128 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
26129 printf "%s\n" "no" >&6; }
26130 fi
26131
26132
26133
26134
26135 for ac_func in ffs
2477426136 do :
2477526137 ac_fn_c_check_func "$LINENO" "ffs" "ac_cv_func_ffs"
24776 if test "x$ac_cv_func_ffs" = xyes; then :
24777 cat >>confdefs.h <<_ACEOF
24778 #define HAVE_FFS 1
24779 _ACEOF
24780
24781
24782 ac_fn_c_check_decl "$LINENO" "ffs" "ac_cv_have_decl_ffs" "$ac_includes_default"
24783 if test "x$ac_cv_have_decl_ffs" = xyes; then :
24784
24785 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function ffs has a complete prototype" >&5
24786 $as_echo_n "checking whether function ffs has a complete prototype... " >&6; }
26138 if test "x$ac_cv_func_ffs" = xyes
26139 then :
26140 printf "%s\n" "#define HAVE_FFS 1" >>confdefs.h
26141
26142
26143 ac_fn_check_decl "$LINENO" "ffs" "ac_cv_have_decl_ffs" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
26144 if test "x$ac_cv_have_decl_ffs" = xyes
26145 then :
26146
26147 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether function ffs has a complete prototype" >&5
26148 printf %s "checking whether function ffs has a complete prototype... " >&6; }
2478726149
2478826150 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2478926151 /* end confdefs.h. */
2479026152 $ac_includes_default
2479126153 int
24792 main ()
26154 main (void)
2479326155 {
2479426156 ffs(1,2,3,4,5,6,7,8,9,10);
2479526157
2479726159 return 0;
2479826160 }
2479926161 _ACEOF
24800 if ac_fn_c_try_compile "$LINENO"; then :
24801 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
24802 $as_echo "no" >&6; }
24803
24804 else
24805 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
24806 $as_echo "yes" >&6; }
24807
24808
24809 $as_echo "#define HWLOC_HAVE_DECL_FFS 1" >>confdefs.h
24810
24811
24812
24813 fi
24814 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
24815 fi
24816
24817
24818
24819 $as_echo "#define HWLOC_HAVE_FFS 1" >>confdefs.h
26162 if ac_fn_c_try_compile "$LINENO"
26163 then :
26164 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
26165 printf "%s\n" "no" >&6; }
26166
26167 else $as_nop
26168 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
26169 printf "%s\n" "yes" >&6; }
26170
26171
26172 printf "%s\n" "#define HWLOC_HAVE_DECL_FFS 1" >>confdefs.h
26173
26174
26175
26176 fi
26177 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
26178 fi
26179
26180
26181 printf "%s\n" "#define HWLOC_HAVE_FFS 1" >>confdefs.h
2482026182
2482126183 if ( $CC --version | grep gccfss ) >/dev/null 2>&1 ; then
2482226184
24823 $as_echo "#define HWLOC_HAVE_BROKEN_FFS 1" >>confdefs.h
26185 printf "%s\n" "#define HWLOC_HAVE_BROKEN_FFS 1" >>confdefs.h
2482426186
2482526187 fi
2482626188
2482726189 fi
26190
2482826191 done
2482926192
24830 for ac_func in ffsl
26193 for ac_func in ffsl
2483126194 do :
2483226195 ac_fn_c_check_func "$LINENO" "ffsl" "ac_cv_func_ffsl"
24833 if test "x$ac_cv_func_ffsl" = xyes; then :
24834 cat >>confdefs.h <<_ACEOF
24835 #define HAVE_FFSL 1
24836 _ACEOF
24837
24838
24839 ac_fn_c_check_decl "$LINENO" "ffsl" "ac_cv_have_decl_ffsl" "$ac_includes_default"
24840 if test "x$ac_cv_have_decl_ffsl" = xyes; then :
24841
24842 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function ffsl has a complete prototype" >&5
24843 $as_echo_n "checking whether function ffsl has a complete prototype... " >&6; }
26196 if test "x$ac_cv_func_ffsl" = xyes
26197 then :
26198 printf "%s\n" "#define HAVE_FFSL 1" >>confdefs.h
26199
26200
26201 ac_fn_check_decl "$LINENO" "ffsl" "ac_cv_have_decl_ffsl" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
26202 if test "x$ac_cv_have_decl_ffsl" = xyes
26203 then :
26204
26205 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether function ffsl has a complete prototype" >&5
26206 printf %s "checking whether function ffsl has a complete prototype... " >&6; }
2484426207
2484526208 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2484626209 /* end confdefs.h. */
2484726210 $ac_includes_default
2484826211 int
24849 main ()
26212 main (void)
2485026213 {
2485126214 ffsl(1,2,3,4,5,6,7,8,9,10);
2485226215
2485426217 return 0;
2485526218 }
2485626219 _ACEOF
24857 if ac_fn_c_try_compile "$LINENO"; then :
24858 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
24859 $as_echo "no" >&6; }
24860
24861 else
24862 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
24863 $as_echo "yes" >&6; }
24864
24865
24866 $as_echo "#define HWLOC_HAVE_DECL_FFSL 1" >>confdefs.h
24867
24868
24869
24870 fi
24871 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
24872 fi
24873
24874
24875
24876 $as_echo "#define HWLOC_HAVE_FFSL 1" >>confdefs.h
24877
24878
24879 fi
26220 if ac_fn_c_try_compile "$LINENO"
26221 then :
26222 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
26223 printf "%s\n" "no" >&6; }
26224
26225 else $as_nop
26226 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
26227 printf "%s\n" "yes" >&6; }
26228
26229
26230 printf "%s\n" "#define HWLOC_HAVE_DECL_FFSL 1" >>confdefs.h
26231
26232
26233
26234 fi
26235 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
26236 fi
26237
26238
26239 printf "%s\n" "#define HWLOC_HAVE_FFSL 1" >>confdefs.h
26240
26241
26242 fi
26243
2488026244 done
2488126245
2488226246
24883 for ac_func in fls
26247 for ac_func in fls
2488426248 do :
2488526249 ac_fn_c_check_func "$LINENO" "fls" "ac_cv_func_fls"
24886 if test "x$ac_cv_func_fls" = xyes; then :
24887 cat >>confdefs.h <<_ACEOF
24888 #define HAVE_FLS 1
24889 _ACEOF
24890
24891
24892 ac_fn_c_check_decl "$LINENO" "fls" "ac_cv_have_decl_fls" "$ac_includes_default"
24893 if test "x$ac_cv_have_decl_fls" = xyes; then :
24894
24895 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function fls has a complete prototype" >&5
24896 $as_echo_n "checking whether function fls has a complete prototype... " >&6; }
26250 if test "x$ac_cv_func_fls" = xyes
26251 then :
26252 printf "%s\n" "#define HAVE_FLS 1" >>confdefs.h
26253
26254
26255 ac_fn_check_decl "$LINENO" "fls" "ac_cv_have_decl_fls" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
26256 if test "x$ac_cv_have_decl_fls" = xyes
26257 then :
26258
26259 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether function fls has a complete prototype" >&5
26260 printf %s "checking whether function fls has a complete prototype... " >&6; }
2489726261
2489826262 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2489926263 /* end confdefs.h. */
2490026264 $ac_includes_default
2490126265 int
24902 main ()
26266 main (void)
2490326267 {
2490426268 fls(1,2,3,4,5,6,7,8,9,10);
2490526269
2490726271 return 0;
2490826272 }
2490926273 _ACEOF
24910 if ac_fn_c_try_compile "$LINENO"; then :
24911 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
24912 $as_echo "no" >&6; }
24913
24914 else
24915 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
24916 $as_echo "yes" >&6; }
24917
24918
24919 $as_echo "#define HWLOC_HAVE_DECL_FLS 1" >>confdefs.h
24920
24921
24922
24923 fi
24924 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
24925 fi
24926
24927
24928
24929 $as_echo "#define HWLOC_HAVE_FLS 1" >>confdefs.h
24930
24931
24932 fi
26274 if ac_fn_c_try_compile "$LINENO"
26275 then :
26276 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
26277 printf "%s\n" "no" >&6; }
26278
26279 else $as_nop
26280 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
26281 printf "%s\n" "yes" >&6; }
26282
26283
26284 printf "%s\n" "#define HWLOC_HAVE_DECL_FLS 1" >>confdefs.h
26285
26286
26287
26288 fi
26289 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
26290 fi
26291
26292
26293 printf "%s\n" "#define HWLOC_HAVE_FLS 1" >>confdefs.h
26294
26295
26296 fi
26297
2493326298 done
2493426299
24935 for ac_func in flsl
26300 for ac_func in flsl
2493626301 do :
2493726302 ac_fn_c_check_func "$LINENO" "flsl" "ac_cv_func_flsl"
24938 if test "x$ac_cv_func_flsl" = xyes; then :
24939 cat >>confdefs.h <<_ACEOF
24940 #define HAVE_FLSL 1
24941 _ACEOF
24942
24943
24944 ac_fn_c_check_decl "$LINENO" "flsl" "ac_cv_have_decl_flsl" "$ac_includes_default"
24945 if test "x$ac_cv_have_decl_flsl" = xyes; then :
24946
24947 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function flsl has a complete prototype" >&5
24948 $as_echo_n "checking whether function flsl has a complete prototype... " >&6; }
26303 if test "x$ac_cv_func_flsl" = xyes
26304 then :
26305 printf "%s\n" "#define HAVE_FLSL 1" >>confdefs.h
26306
26307
26308 ac_fn_check_decl "$LINENO" "flsl" "ac_cv_have_decl_flsl" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
26309 if test "x$ac_cv_have_decl_flsl" = xyes
26310 then :
26311
26312 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether function flsl has a complete prototype" >&5
26313 printf %s "checking whether function flsl has a complete prototype... " >&6; }
2494926314
2495026315 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2495126316 /* end confdefs.h. */
2495226317 $ac_includes_default
2495326318 int
24954 main ()
26319 main (void)
2495526320 {
2495626321 flsl(1,2,3,4,5,6,7,8,9,10);
2495726322
2495926324 return 0;
2496026325 }
2496126326 _ACEOF
24962 if ac_fn_c_try_compile "$LINENO"; then :
24963 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
24964 $as_echo "no" >&6; }
24965
24966 else
24967 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
24968 $as_echo "yes" >&6; }
24969
24970
24971 $as_echo "#define HWLOC_HAVE_DECL_FLSL 1" >>confdefs.h
24972
24973
24974
24975 fi
24976 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
24977 fi
24978
24979
24980
24981 $as_echo "#define HWLOC_HAVE_FLSL 1" >>confdefs.h
24982
24983
24984 fi
26327 if ac_fn_c_try_compile "$LINENO"
26328 then :
26329 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
26330 printf "%s\n" "no" >&6; }
26331
26332 else $as_nop
26333 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
26334 printf "%s\n" "yes" >&6; }
26335
26336
26337 printf "%s\n" "#define HWLOC_HAVE_DECL_FLSL 1" >>confdefs.h
26338
26339
26340
26341 fi
26342 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
26343 fi
26344
26345
26346 printf "%s\n" "#define HWLOC_HAVE_FLSL 1" >>confdefs.h
26347
26348
26349 fi
26350
2498526351 done
2498626352
2498726353
24988 for ac_func in clz
26354 for ac_func in clz
2498926355 do :
2499026356 ac_fn_c_check_func "$LINENO" "clz" "ac_cv_func_clz"
24991 if test "x$ac_cv_func_clz" = xyes; then :
24992 cat >>confdefs.h <<_ACEOF
24993 #define HAVE_CLZ 1
24994 _ACEOF
24995
24996
24997 ac_fn_c_check_decl "$LINENO" "clz" "ac_cv_have_decl_clz" "$ac_includes_default"
24998 if test "x$ac_cv_have_decl_clz" = xyes; then :
24999
25000 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function clz has a complete prototype" >&5
25001 $as_echo_n "checking whether function clz has a complete prototype... " >&6; }
26357 if test "x$ac_cv_func_clz" = xyes
26358 then :
26359 printf "%s\n" "#define HAVE_CLZ 1" >>confdefs.h
26360
26361
26362 ac_fn_check_decl "$LINENO" "clz" "ac_cv_have_decl_clz" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
26363 if test "x$ac_cv_have_decl_clz" = xyes
26364 then :
26365
26366 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether function clz has a complete prototype" >&5
26367 printf %s "checking whether function clz has a complete prototype... " >&6; }
2500226368
2500326369 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2500426370 /* end confdefs.h. */
2500526371 $ac_includes_default
2500626372 int
25007 main ()
26373 main (void)
2500826374 {
2500926375 clz(1,2,3,4,5,6,7,8,9,10);
2501026376
2501226378 return 0;
2501326379 }
2501426380 _ACEOF
25015 if ac_fn_c_try_compile "$LINENO"; then :
25016 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
25017 $as_echo "no" >&6; }
25018
25019 else
25020 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
25021 $as_echo "yes" >&6; }
25022
25023
25024 $as_echo "#define HWLOC_HAVE_DECL_CLZ 1" >>confdefs.h
25025
25026
25027
25028 fi
25029 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
25030 fi
25031
25032
25033
25034 $as_echo "#define HWLOC_HAVE_CLZ 1" >>confdefs.h
25035
25036
25037 fi
26381 if ac_fn_c_try_compile "$LINENO"
26382 then :
26383 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
26384 printf "%s\n" "no" >&6; }
26385
26386 else $as_nop
26387 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
26388 printf "%s\n" "yes" >&6; }
26389
26390
26391 printf "%s\n" "#define HWLOC_HAVE_DECL_CLZ 1" >>confdefs.h
26392
26393
26394
26395 fi
26396 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
26397 fi
26398
26399
26400 printf "%s\n" "#define HWLOC_HAVE_CLZ 1" >>confdefs.h
26401
26402
26403 fi
26404
2503826405 done
2503926406
25040 for ac_func in clzl
26407 for ac_func in clzl
2504126408 do :
2504226409 ac_fn_c_check_func "$LINENO" "clzl" "ac_cv_func_clzl"
25043 if test "x$ac_cv_func_clzl" = xyes; then :
25044 cat >>confdefs.h <<_ACEOF
25045 #define HAVE_CLZL 1
25046 _ACEOF
25047
25048
25049 ac_fn_c_check_decl "$LINENO" "clzl" "ac_cv_have_decl_clzl" "$ac_includes_default"
25050 if test "x$ac_cv_have_decl_clzl" = xyes; then :
25051
25052 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether function clzl has a complete prototype" >&5
25053 $as_echo_n "checking whether function clzl has a complete prototype... " >&6; }
26410 if test "x$ac_cv_func_clzl" = xyes
26411 then :
26412 printf "%s\n" "#define HAVE_CLZL 1" >>confdefs.h
26413
26414
26415 ac_fn_check_decl "$LINENO" "clzl" "ac_cv_have_decl_clzl" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS"
26416 if test "x$ac_cv_have_decl_clzl" = xyes
26417 then :
26418
26419 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether function clzl has a complete prototype" >&5
26420 printf %s "checking whether function clzl has a complete prototype... " >&6; }
2505426421
2505526422 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2505626423 /* end confdefs.h. */
2505726424 $ac_includes_default
2505826425 int
25059 main ()
26426 main (void)
2506026427 {
2506126428 clzl(1,2,3,4,5,6,7,8,9,10);
2506226429
2506426431 return 0;
2506526432 }
2506626433 _ACEOF
25067 if ac_fn_c_try_compile "$LINENO"; then :
25068 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
25069 $as_echo "no" >&6; }
25070
25071 else
25072 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
25073 $as_echo "yes" >&6; }
25074
25075
25076 $as_echo "#define HWLOC_HAVE_DECL_CLZL 1" >>confdefs.h
25077
25078
25079
25080 fi
25081 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
25082 fi
25083
25084
25085
25086 $as_echo "#define HWLOC_HAVE_CLZL 1" >>confdefs.h
25087
25088
25089 fi
26434 if ac_fn_c_try_compile "$LINENO"
26435 then :
26436 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
26437 printf "%s\n" "no" >&6; }
26438
26439 else $as_nop
26440 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
26441 printf "%s\n" "yes" >&6; }
26442
26443
26444 printf "%s\n" "#define HWLOC_HAVE_DECL_CLZL 1" >>confdefs.h
26445
26446
26447
26448 fi
26449 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
26450 fi
26451
26452
26453 printf "%s\n" "#define HWLOC_HAVE_CLZL 1" >>confdefs.h
26454
26455
26456 fi
26457
2509026458 done
2509126459
25092
25093 if test "$hwloc_c_vendor" != "android"; then :
26460 if test "$hwloc_c_vendor" != "android"
26461 then :
26462
2509426463 for ac_func in openat
2509526464 do :
2509626465 ac_fn_c_check_func "$LINENO" "openat" "ac_cv_func_openat"
25097 if test "x$ac_cv_func_openat" = xyes; then :
25098 cat >>confdefs.h <<_ACEOF
25099 #define HAVE_OPENAT 1
25100 _ACEOF
26466 if test "x$ac_cv_func_openat" = xyes
26467 then :
26468 printf "%s\n" "#define HAVE_OPENAT 1" >>confdefs.h
2510126469 hwloc_have_openat=yes
2510226470 fi
26471
2510326472 done
25104
25105 fi
25106
25107 for ac_header in malloc.h
25108 do :
25109 ac_fn_c_check_header_mongrel "$LINENO" "malloc.h" "ac_cv_header_malloc_h" "$ac_includes_default"
25110 if test "x$ac_cv_header_malloc_h" = xyes; then :
25111 cat >>confdefs.h <<_ACEOF
25112 #define HAVE_MALLOC_H 1
25113 _ACEOF
25114
25115 fi
25116
25117 done
25118
25119 for ac_func in getpagesize memalign posix_memalign
25120 do :
25121 as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
25122 ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
25123 if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
25124 cat >>confdefs.h <<_ACEOF
25125 #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
25126 _ACEOF
25127
25128 fi
25129 done
25130
25131
25132 for ac_header in sys/utsname.h
25133 do :
25134 ac_fn_c_check_header_mongrel "$LINENO" "sys/utsname.h" "ac_cv_header_sys_utsname_h" "$ac_includes_default"
25135 if test "x$ac_cv_header_sys_utsname_h" = xyes; then :
25136 cat >>confdefs.h <<_ACEOF
25137 #define HAVE_SYS_UTSNAME_H 1
25138 _ACEOF
25139
25140 fi
25141
25142 done
25143
25144 for ac_func in uname
25145 do :
25146 ac_fn_c_check_func "$LINENO" "uname" "ac_cv_func_uname"
25147 if test "x$ac_cv_func_uname" = xyes; then :
25148 cat >>confdefs.h <<_ACEOF
25149 #define HAVE_UNAME 1
25150 _ACEOF
25151
25152 fi
25153 done
25154
25155
25156 if test "$hwloc_mode" != "embedded"; then :
25157 for ac_header in valgrind/valgrind.h
25158 do :
25159 ac_fn_c_check_header_mongrel "$LINENO" "valgrind/valgrind.h" "ac_cv_header_valgrind_valgrind_h" "$ac_includes_default"
25160 if test "x$ac_cv_header_valgrind_valgrind_h" = xyes; then :
25161 cat >>confdefs.h <<_ACEOF
25162 #define HAVE_VALGRIND_VALGRIND_H 1
25163 _ACEOF
25164
25165 fi
25166
25167 done
25168
25169 ac_fn_c_check_decl "$LINENO" "RUNNING_ON_VALGRIND" "ac_cv_have_decl_RUNNING_ON_VALGRIND" "#include <valgrind/valgrind.h>
25170 "
25171 if test "x$ac_cv_have_decl_RUNNING_ON_VALGRIND" = xyes; then :
26473 fi
26474
26475 ac_fn_c_check_header_compile "$LINENO" "malloc.h" "ac_cv_header_malloc_h" "$ac_includes_default"
26476 if test "x$ac_cv_header_malloc_h" = xyes
26477 then :
26478 printf "%s\n" "#define HAVE_MALLOC_H 1" >>confdefs.h
26479
26480 fi
26481
26482 ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize"
26483 if test "x$ac_cv_func_getpagesize" = xyes
26484 then :
26485 printf "%s\n" "#define HAVE_GETPAGESIZE 1" >>confdefs.h
26486
26487 fi
26488 ac_fn_c_check_func "$LINENO" "memalign" "ac_cv_func_memalign"
26489 if test "x$ac_cv_func_memalign" = xyes
26490 then :
26491 printf "%s\n" "#define HAVE_MEMALIGN 1" >>confdefs.h
26492
26493 fi
26494 ac_fn_c_check_func "$LINENO" "posix_memalign" "ac_cv_func_posix_memalign"
26495 if test "x$ac_cv_func_posix_memalign" = xyes
26496 then :
26497 printf "%s\n" "#define HAVE_POSIX_MEMALIGN 1" >>confdefs.h
26498
26499 fi
26500
26501
26502 ac_fn_c_check_header_compile "$LINENO" "sys/utsname.h" "ac_cv_header_sys_utsname_h" "$ac_includes_default"
26503 if test "x$ac_cv_header_sys_utsname_h" = xyes
26504 then :
26505 printf "%s\n" "#define HAVE_SYS_UTSNAME_H 1" >>confdefs.h
26506
26507 fi
26508
26509 ac_fn_c_check_func "$LINENO" "uname" "ac_cv_func_uname"
26510 if test "x$ac_cv_func_uname" = xyes
26511 then :
26512 printf "%s\n" "#define HAVE_UNAME 1" >>confdefs.h
26513
26514 fi
26515
26516
26517 if test "$hwloc_mode" != "embedded"
26518 then :
26519 ac_fn_c_check_header_compile "$LINENO" "valgrind/valgrind.h" "ac_cv_header_valgrind_valgrind_h" "$ac_includes_default"
26520 if test "x$ac_cv_header_valgrind_valgrind_h" = xyes
26521 then :
26522 printf "%s\n" "#define HAVE_VALGRIND_VALGRIND_H 1" >>confdefs.h
26523
26524 fi
26525
26526 ac_fn_check_decl "$LINENO" "RUNNING_ON_VALGRIND" "ac_cv_have_decl_RUNNING_ON_VALGRIND" "#include <valgrind/valgrind.h>
26527 " "$ac_c_undeclared_builtin_options" "CFLAGS"
26528 if test "x$ac_cv_have_decl_RUNNING_ON_VALGRIND" = xyes
26529 then :
2517226530 ac_have_decl=1
25173 else
26531 else $as_nop
2517426532 ac_have_decl=0
2517526533 fi
25176
25177 cat >>confdefs.h <<_ACEOF
25178 #define HAVE_DECL_RUNNING_ON_VALGRIND $ac_have_decl
25179 _ACEOF
25180 if test $ac_have_decl = 1; then :
25181
25182 else
26534 printf "%s\n" "#define HAVE_DECL_RUNNING_ON_VALGRIND $ac_have_decl" >>confdefs.h
26535 if test $ac_have_decl = 1
26536 then :
26537
26538 else $as_nop
2518326539 :
2518426540 fi
2518526541
2518626542
25187 else
25188
25189
25190 $as_echo "#define HAVE_DECL_RUNNING_ON_VALGRIND 0" >>confdefs.h
25191
25192
25193 fi
25194
25195 if test "x$enable_32bits_pci_domain" = "xyes"; then :
25196
25197
25198 $as_echo "#define HWLOC_HAVE_32BITS_PCI_DOMAIN 1" >>confdefs.h
26543 else $as_nop
26544
26545
26546 printf "%s\n" "#define HAVE_DECL_RUNNING_ON_VALGRIND 0" >>confdefs.h
26547
26548
26549 fi
26550
26551 if test "x$enable_32bits_pci_domain" = "xyes"
26552 then :
26553
26554
26555 printf "%s\n" "#define HWLOC_HAVE_32BITS_PCI_DOMAIN 1" >>confdefs.h
2519926556
2520026557
2520126558 fi
2520926566
2521026567
2521126568 HWLOC_pkg_failed=no
25212 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for PCIACCESS" >&5
25213 $as_echo_n "checking for PCIACCESS... " >&6; }
26569 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PCIACCESS" >&5
26570 printf %s "checking for PCIACCESS... " >&6; }
2521426571
2521526572 if test -n "$PKG_CONFIG"; then
2521626573 if test -n "$HWLOC_PCIACCESS_CFLAGS"; then
2521726574 HWLOC_pkg_cv_HWLOC_PCIACCESS_CFLAGS="$HWLOC_PCIACCESS_CFLAGS"
2521826575 else
2521926576 if test -n "$PKG_CONFIG" && \
25220 { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --silence-errors \"pciaccess\""; } >&5
26577 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --silence-errors \"pciaccess\""; } >&5
2522126578 ($PKG_CONFIG --exists --silence-errors "pciaccess") 2>&5
2522226579 ac_status=$?
25223 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
26580 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
2522426581 test $ac_status = 0; }; then
2522526582 HWLOC_pkg_cv_HWLOC_PCIACCESS_CFLAGS=`$PKG_CONFIG --cflags "pciaccess" 2>/dev/null`
2522626583 else
2523626593 HWLOC_pkg_cv_HWLOC_PCIACCESS_LIBS="$HWLOC_PCIACCESS_LIBS"
2523726594 else
2523826595 if test -n "$PKG_CONFIG" && \
25239 { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --silence-errors \"pciaccess\""; } >&5
26596 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --silence-errors \"pciaccess\""; } >&5
2524026597 ($PKG_CONFIG --exists --silence-errors "pciaccess") 2>&5
2524126598 ac_status=$?
25242 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
26599 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
2524326600 test $ac_status = 0; }; then
2524426601 HWLOC_pkg_cv_HWLOC_PCIACCESS_LIBS=`$PKG_CONFIG --libs "pciaccess" 2>/dev/null`
2524526602 else
2526926626 # Put the nasty error message in config.log where it belongs
2527026627 echo "$HWLOC_PCIACCESS_PKG_ERRORS" >&5
2527126628
25272 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
25273 $as_echo "no" >&6; }
26629 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
26630 printf "%s\n" "no" >&6; }
2527426631 hwloc_pciaccess_happy=no
2527526632 elif test $HWLOC_pkg_failed = untried; then
25276 { $as_echo "$as_me:${as_lineno-$LINENO}: result: cannot check without pkg-config" >&5
25277 $as_echo "cannot check without pkg-config" >&6; }
26633 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cannot check without pkg-config" >&5
26634 printf "%s\n" "cannot check without pkg-config" >&6; }
2527826635 hwloc_pciaccess_happy=no
2527926636 else
25280 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
25281 $as_echo "yes" >&6; }
26637 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
26638 printf "%s\n" "yes" >&6; }
2528226639
2528326640 # If we got good results from pkg-config, check that they
2528426641 # actually work (i.e., that we can link against the resulting
2529726654 CFLAGS="$CFLAGS $HWLOC_pkg_cv_HWLOC_PCIACCESS_CFLAGS"
2529826655 CPPFLAGS="$CPPFLAGS $HWLOC_pkg_cv_HWLOC_PCIACCESS_CFLAGS"
2529926656 LIBS="$LIBS $HWLOC_pkg_cv_HWLOC_PCIACCESS_LIBS"
25300 ac_fn_c_check_header_mongrel "$LINENO" "pciaccess.h" "ac_cv_header_pciaccess_h" "$ac_includes_default"
25301 if test "x$ac_cv_header_pciaccess_h" = xyes; then :
26657 ac_fn_c_check_header_compile "$LINENO" "pciaccess.h" "ac_cv_header_pciaccess_h" "$ac_includes_default"
26658 if test "x$ac_cv_header_pciaccess_h" = xyes
26659 then :
2530226660
2530326661 ac_fn_c_check_func "$LINENO" "pci_slot_match_iterator_create" "ac_cv_func_pci_slot_match_iterator_create"
25304 if test "x$ac_cv_func_pci_slot_match_iterator_create" = xyes; then :
26662 if test "x$ac_cv_func_pci_slot_match_iterator_create" = xyes
26663 then :
2530526664 hwloc_result=yes
25306 else
26665 else $as_nop
2530726666 hwloc_result=no
2530826667 fi
2530926668
2531026669
25311 else
26670 else $as_nop
2531226671 hwloc_result=no
2531326672 fi
25314
2531526673
2531626674 CFLAGS=$hwloc_cflags_save
2531726675 CPPFLAGS=$hwloc_cppflags_save
2531826676 LIBS=$hwloc_libs_save
2531926677
25320 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for final PCIACCESS support" >&5
25321 $as_echo_n "checking for final PCIACCESS support... " >&6; }
25322 if test "$hwloc_result" = "yes"; then :
26678 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for final PCIACCESS support" >&5
26679 printf %s "checking for final PCIACCESS support... " >&6; }
26680 if test "$hwloc_result" = "yes"
26681 then :
2532326682 HWLOC_PCIACCESS_CFLAGS=$HWLOC_pkg_cv_HWLOC_PCIACCESS_CFLAGS
2532426683 HWLOC_PCIACCESS_LIBS=$HWLOC_pkg_cv_HWLOC_PCIACCESS_LIBS
25325 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
25326 $as_echo "yes" >&6; }
26684 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
26685 printf "%s\n" "yes" >&6; }
2532726686 :
25328 else
25329 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
25330 $as_echo "no" >&6; }
26687 else $as_nop
26688 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
26689 printf "%s\n" "no" >&6; }
2533126690 hwloc_pciaccess_happy=no
2533226691 fi
2533326692 fi
2533426693
2533526694 # Only add the REQUIRES if we got pciaccess through pkg-config.
2533626695 # Otherwise we don't know if pciaccess.pc is installed
25337 if test "$hwloc_pciaccess_happy" = "yes"; then :
26696 if test "$hwloc_pciaccess_happy" = "yes"
26697 then :
2533826698 HWLOC_PCIACCESS_REQUIRES=pciaccess
2533926699 fi
2534026700
2534126701 # Just for giggles, if we didn't find a pciaccess pkg-config,
2534226702 # just try looking for its header file and library.
25343 if test "$hwloc_pciaccess_happy" != "yes"; then :
25344 ac_fn_c_check_header_mongrel "$LINENO" "pciaccess.h" "ac_cv_header_pciaccess_h" "$ac_includes_default"
25345 if test "x$ac_cv_header_pciaccess_h" = xyes; then :
25346 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pci_slot_match_iterator_create in -lpciaccess" >&5
25347 $as_echo_n "checking for pci_slot_match_iterator_create in -lpciaccess... " >&6; }
25348 if ${ac_cv_lib_pciaccess_pci_slot_match_iterator_create+:} false; then :
25349 $as_echo_n "(cached) " >&6
25350 else
26703 if test "$hwloc_pciaccess_happy" != "yes"
26704 then :
26705 ac_fn_c_check_header_compile "$LINENO" "pciaccess.h" "ac_cv_header_pciaccess_h" "$ac_includes_default"
26706 if test "x$ac_cv_header_pciaccess_h" = xyes
26707 then :
26708 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pci_slot_match_iterator_create in -lpciaccess" >&5
26709 printf %s "checking for pci_slot_match_iterator_create in -lpciaccess... " >&6; }
26710 if test ${ac_cv_lib_pciaccess_pci_slot_match_iterator_create+y}
26711 then :
26712 printf %s "(cached) " >&6
26713 else $as_nop
2535126714 ac_check_lib_save_LIBS=$LIBS
2535226715 LIBS="-lpciaccess $LIBS"
2535326716 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2535626719 /* Override any GCC internal prototype to avoid an error.
2535726720 Use char because int might match the return type of a GCC
2535826721 builtin and then its argument prototype would still apply. */
25359 #ifdef __cplusplus
25360 extern "C"
25361 #endif
2536226722 char pci_slot_match_iterator_create ();
2536326723 int
25364 main ()
26724 main (void)
2536526725 {
2536626726 return pci_slot_match_iterator_create ();
2536726727 ;
2536826728 return 0;
2536926729 }
2537026730 _ACEOF
25371 if ac_fn_c_try_link "$LINENO"; then :
26731 if ac_fn_c_try_link "$LINENO"
26732 then :
2537226733 ac_cv_lib_pciaccess_pci_slot_match_iterator_create=yes
25373 else
26734 else $as_nop
2537426735 ac_cv_lib_pciaccess_pci_slot_match_iterator_create=no
2537526736 fi
25376 rm -f core conftest.err conftest.$ac_objext \
26737 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2537726738 conftest$ac_exeext conftest.$ac_ext
2537826739 LIBS=$ac_check_lib_save_LIBS
2537926740 fi
25380 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pciaccess_pci_slot_match_iterator_create" >&5
25381 $as_echo "$ac_cv_lib_pciaccess_pci_slot_match_iterator_create" >&6; }
25382 if test "x$ac_cv_lib_pciaccess_pci_slot_match_iterator_create" = xyes; then :
26741 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pciaccess_pci_slot_match_iterator_create" >&5
26742 printf "%s\n" "$ac_cv_lib_pciaccess_pci_slot_match_iterator_create" >&6; }
26743 if test "x$ac_cv_lib_pciaccess_pci_slot_match_iterator_create" = xyes
26744 then :
2538326745 hwloc_pciaccess_happy=yes
2538426746 HWLOC_PCIACCESS_LIBS="-lpciaccess"
25385 fi
25386
25387
25388 fi
25389
25390
25391
25392 fi
25393
25394 if test "$hwloc_pciaccess_happy" = "yes"; then :
26747
26748
26749 fi
26750
26751
26752 fi
26753
26754
26755 fi
26756
26757 if test "$hwloc_pciaccess_happy" = "yes"
26758 then :
2539526759 hwloc_components="$hwloc_components pci"
2539626760 hwloc_pci_component_maybeplugin=1
2539726761 fi
2539826762 fi
2539926763 # If we asked for pci support but couldn't deliver, fail
25400 if test "$enable_pci" = "yes" -a "$hwloc_pciaccess_happy" = "no"; then :
25401 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Specified --enable-pci switch, but could not" >&5
25402 $as_echo "$as_me: WARNING: Specified --enable-pci switch, but could not" >&2;}
25403 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: find appropriate support" >&5
25404 $as_echo "$as_me: WARNING: find appropriate support" >&2;}
26764 if test "$enable_pci" = "yes" -a "$hwloc_pciaccess_happy" = "no"
26765 then :
26766 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Specified --enable-pci switch, but could not" >&5
26767 printf "%s\n" "$as_me: WARNING: Specified --enable-pci switch, but could not" >&2;}
26768 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: find appropriate support" >&5
26769 printf "%s\n" "$as_me: WARNING: find appropriate support" >&2;}
2540526770 as_fn_error $? "Cannot continue" "$LINENO" 5
2540626771 fi
2540726772 # don't add LIBS/CFLAGS/REQUIRES yet, depends on plugins
26773
26774 if test "x$enable_io" != xno && test "x$enable_opencl" != xno -o "x$enable_cuda" != xno -o "x$enable_nvml" != xno; then
26775 # Try to find CUDA pkg-config using a specific CUDA version
26776 # Use --with-cuda-version first, or $CUDA_VERSION
26777 cuda_version=$CUDA_VERSION
26778 if test "x$with_cuda_version" != xno -a "x$with_cuda_version" != x; then
26779 cuda_version=$with_cuda_version
26780 fi
26781 if test x$cuda_version != x; then
26782 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if cuda-$cuda_version.pc exists" >&5
26783 printf %s "checking if cuda-$cuda_version.pc exists... " >&6; }
26784 if test -n "$PKG_CONFIG" && \
26785 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --silence-errors \"cuda-\$cuda_version\""; } >&5
26786 ($PKG_CONFIG --exists --silence-errors "cuda-$cuda_version") 2>&5
26787 ac_status=$?
26788 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
26789 test $ac_status = 0; }; then
26790
26791 cudapc=cuda-$cuda_version
26792 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
26793 printf "%s\n" "yes" >&6; }
26794 if test -n "$PKG_CONFIG"; then
26795 if test -n "$cuda_includedir"; then
26796 HWLOC_pkg_cv_cuda_includedir="$cuda_includedir"
26797 else
26798 if test -n "$PKG_CONFIG" && \
26799 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --silence-errors \"\$cudapc\""; } >&5
26800 ($PKG_CONFIG --exists --silence-errors "$cudapc") 2>&5
26801 ac_status=$?
26802 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
26803 test $ac_status = 0; }; then
26804 HWLOC_pkg_cv_cuda_includedir=`$PKG_CONFIG --variable=includedir "$cudapc" 2>/dev/null`
26805 else
26806 HWLOC_pkg_failed=yes
26807 fi
26808 fi
26809 else
26810 HWLOC_pkg_failed=untried
26811 fi
26812
26813 if test -n "$PKG_CONFIG"; then
26814 if test -n "$cuda_libdir"; then
26815 HWLOC_pkg_cv_cuda_libdir="$cuda_libdir"
26816 else
26817 if test -n "$PKG_CONFIG" && \
26818 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --silence-errors \"\$cudapc\""; } >&5
26819 ($PKG_CONFIG --exists --silence-errors "$cudapc") 2>&5
26820 ac_status=$?
26821 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
26822 test $ac_status = 0; }; then
26823 HWLOC_pkg_cv_cuda_libdir=`$PKG_CONFIG --variable=libdir "$cudapc" 2>/dev/null`
26824 else
26825 HWLOC_pkg_failed=yes
26826 fi
26827 fi
26828 else
26829 HWLOC_pkg_failed=untried
26830 fi
26831
26832
26833 else
26834 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
26835 printf "%s\n" "no" >&6; }
26836 fi
26837 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if cudart-$cuda_version.pc exists" >&5
26838 printf %s "checking if cudart-$cuda_version.pc exists... " >&6; }
26839 if test -n "$PKG_CONFIG" && \
26840 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --silence-errors \"cudart-\$cuda_version\""; } >&5
26841 ($PKG_CONFIG --exists --silence-errors "cudart-$cuda_version") 2>&5
26842 ac_status=$?
26843 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
26844 test $ac_status = 0; }; then
26845
26846 cudartpc=cudart-$cuda_version
26847 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
26848 printf "%s\n" "yes" >&6; }
26849
26850 else
26851 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
26852 printf "%s\n" "no" >&6; }
26853 fi
26854 fi
26855
26856 # OpenCL/NVML/CUDA may use CUDA directories, define common directories
26857 # libnvidia-ml.so (and libcuda.so for tests) is under stubs
26858 # when the driver isn't installed on the build machine.
26859 # hwloc programs will fail to link if libnvidia-ml.so.1 is not available there too.
26860 if test "x$with_cuda" != xno -a "x$with_cuda" != x; then
26861 if test "x${ac_cv_sizeof_void_p}" = x4; then
26862 HWLOC_CUDA_COMMON_LDFLAGS="-L$with_cuda/lib/ -L$with_cuda/lib/stubs/"
26863 else
26864 HWLOC_CUDA_COMMON_LDFLAGS="-L$with_cuda/lib64/ -L$with_cuda/lib64/stubs/"
26865 fi
26866 HWLOC_CUDA_COMMON_CPPFLAGS="-I$with_cuda/include/"
26867 else
26868 # or use cuda libdir/includedir from cuda.pc above
26869 if test x$HWLOC_pkg_cv_cuda_includedir != x -a x$HWLOC_pkg_cv_cuda_libdir != x; then
26870 HWLOC_CUDA_COMMON_LDFLAGS="-L$HWLOC_pkg_cv_cuda_libdir -L$HWLOC_pkg_cv_cuda_libdir/stubs/"
26871 HWLOC_CUDA_COMMON_CPPFLAGS="-I$HWLOC_pkg_cv_cuda_includedir"
26872 fi
26873 fi
26874 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: common CUDA/OpenCL/NVML CPPFLAGS: $HWLOC_CUDA_COMMON_CPPFLAGS" >&5
26875 printf "%s\n" "$as_me: common CUDA/OpenCL/NVML CPPFLAGS: $HWLOC_CUDA_COMMON_CPPFLAGS" >&6;}
26876 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: common CUDA/OpenCL/NVML LDFLAGS: $HWLOC_CUDA_COMMON_LDFLAGS" >&5
26877 printf "%s\n" "$as_me: common CUDA/OpenCL/NVML LDFLAGS: $HWLOC_CUDA_COMMON_LDFLAGS" >&6;}
26878 fi
2540826879
2540926880 # OpenCL support
2541026881 hwloc_opencl_happy=no
2541326884 case ${target} in
2541426885 *-*-darwin*)
2541526886 # On Darwin, only use the OpenCL framework
25416 for ac_header in OpenCL/cl_ext.h
26887 for ac_header in OpenCL/cl_ext.h
2541726888 do :
25418 ac_fn_c_check_header_mongrel "$LINENO" "OpenCL/cl_ext.h" "ac_cv_header_OpenCL_cl_ext_h" "$ac_includes_default"
25419 if test "x$ac_cv_header_OpenCL_cl_ext_h" = xyes; then :
25420 cat >>confdefs.h <<_ACEOF
25421 #define HAVE_OPENCL_CL_EXT_H 1
25422 _ACEOF
25423
25424 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the OpenCL framework" >&5
25425 $as_echo_n "checking for the OpenCL framework... " >&6; }
26889 ac_fn_c_check_header_compile "$LINENO" "OpenCL/cl_ext.h" "ac_cv_header_OpenCL_cl_ext_h" "$ac_includes_default"
26890 if test "x$ac_cv_header_OpenCL_cl_ext_h" = xyes
26891 then :
26892 printf "%s\n" "#define HAVE_OPENCL_CL_EXT_H 1" >>confdefs.h
26893
26894 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the OpenCL framework" >&5
26895 printf %s "checking for the OpenCL framework... " >&6; }
2542626896 tmp_save_LDFLAGS="$LDFLAGS"
2542726897 LDFLAGS="$LDFLAGS -framework OpenCL"
2542826898 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2543226902 #include <OpenCL/opencl.h>
2543326903
2543426904 int
25435 main ()
26905 main (void)
2543626906 {
2543726907
2543826908 return clGetDeviceIDs(0, 0, 0, NULL, NULL);
2544126911 return 0;
2544226912 }
2544326913 _ACEOF
25444 if ac_fn_c_try_link "$LINENO"; then :
25445 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
25446 $as_echo "yes" >&6; }
26914 if ac_fn_c_try_link "$LINENO"
26915 then :
26916 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
26917 printf "%s\n" "yes" >&6; }
2544726918 HWLOC_OPENCL_LDFLAGS="-framework OpenCL"
25448 else
25449 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
25450 $as_echo "no" >&6; }
26919 else $as_nop
26920 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
26921 printf "%s\n" "no" >&6; }
2545126922 hwloc_opencl_happy=no
2545226923 fi
25453 rm -f core conftest.err conftest.$ac_objext \
26924 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2545426925 conftest$ac_exeext conftest.$ac_ext
2545526926 LDFLAGS="$tmp_save_LDFLAGS"
2545626927
25457 else
26928 else $as_nop
2545826929 hwloc_opencl_happy=no
2545926930 fi
2546026931
2546126932 done
25462
2546326933 ;;
2546426934 *)
2546526935 # On Others, look for OpenCL at normal locations
25466 for ac_header in CL/cl_ext.h
26936 HWLOC_OPENCL_CPPFLAGS="$HWLOC_CUDA_COMMON_CPPFLAGS"
26937 HWLOC_OPENCL_LDFLAGS="$HWLOC_CUDA_COMMON_LDFLAGS"
26938 tmp_save_CPPFLAGS="$CPPFLAGS"
26939 CPPFLAGS="$CPPFLAGS $HWLOC_OPENCL_CPPFLAGS"
26940 tmp_save_LDFLAGS="$LDFLAGS"
26941 LDFLAGS="$LDFLAGS $HWLOC_OPENCL_LDFLAGS"
26942 for ac_header in CL/cl_ext.h
2546726943 do :
25468 ac_fn_c_check_header_mongrel "$LINENO" "CL/cl_ext.h" "ac_cv_header_CL_cl_ext_h" "$ac_includes_default"
25469 if test "x$ac_cv_header_CL_cl_ext_h" = xyes; then :
25470 cat >>confdefs.h <<_ACEOF
25471 #define HAVE_CL_CL_EXT_H 1
25472 _ACEOF
25473
25474 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clGetDeviceIDs in -lOpenCL" >&5
25475 $as_echo_n "checking for clGetDeviceIDs in -lOpenCL... " >&6; }
25476 if ${ac_cv_lib_OpenCL_clGetDeviceIDs+:} false; then :
25477 $as_echo_n "(cached) " >&6
25478 else
26944 ac_fn_c_check_header_compile "$LINENO" "CL/cl_ext.h" "ac_cv_header_CL_cl_ext_h" "$ac_includes_default"
26945 if test "x$ac_cv_header_CL_cl_ext_h" = xyes
26946 then :
26947 printf "%s\n" "#define HAVE_CL_CL_EXT_H 1" >>confdefs.h
26948
26949 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for clGetDeviceIDs in -lOpenCL" >&5
26950 printf %s "checking for clGetDeviceIDs in -lOpenCL... " >&6; }
26951 if test ${ac_cv_lib_OpenCL_clGetDeviceIDs+y}
26952 then :
26953 printf %s "(cached) " >&6
26954 else $as_nop
2547926955 ac_check_lib_save_LIBS=$LIBS
2548026956 LIBS="-lOpenCL $LIBS"
2548126957 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2548426960 /* Override any GCC internal prototype to avoid an error.
2548526961 Use char because int might match the return type of a GCC
2548626962 builtin and then its argument prototype would still apply. */
25487 #ifdef __cplusplus
25488 extern "C"
25489 #endif
2549026963 char clGetDeviceIDs ();
2549126964 int
25492 main ()
26965 main (void)
2549326966 {
2549426967 return clGetDeviceIDs ();
2549526968 ;
2549626969 return 0;
2549726970 }
2549826971 _ACEOF
25499 if ac_fn_c_try_link "$LINENO"; then :
26972 if ac_fn_c_try_link "$LINENO"
26973 then :
2550026974 ac_cv_lib_OpenCL_clGetDeviceIDs=yes
25501 else
26975 else $as_nop
2550226976 ac_cv_lib_OpenCL_clGetDeviceIDs=no
2550326977 fi
25504 rm -f core conftest.err conftest.$ac_objext \
26978 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2550526979 conftest$ac_exeext conftest.$ac_ext
2550626980 LIBS=$ac_check_lib_save_LIBS
2550726981 fi
25508 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_OpenCL_clGetDeviceIDs" >&5
25509 $as_echo "$ac_cv_lib_OpenCL_clGetDeviceIDs" >&6; }
25510 if test "x$ac_cv_lib_OpenCL_clGetDeviceIDs" = xyes; then :
26982 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_OpenCL_clGetDeviceIDs" >&5
26983 printf "%s\n" "$ac_cv_lib_OpenCL_clGetDeviceIDs" >&6; }
26984 if test "x$ac_cv_lib_OpenCL_clGetDeviceIDs" = xyes
26985 then :
2551126986 HWLOC_OPENCL_LIBS="-lOpenCL"
25512 else
26987 else $as_nop
2551326988 hwloc_opencl_happy=no
2551426989 fi
2551526990
2551626991
25517 else
26992 else $as_nop
2551826993 hwloc_opencl_happy=no
2551926994 fi
2552026995
2552126996 done
25522
26997 CPPFLAGS="$tmp_save_CPPFLAGS"
26998 LDFLAGS="$tmp_save_LDFLAGS"
2552326999 ;;
2552427000 esac
2552527001 fi
2552727003
2552827004
2552927005 # If we asked for opencl support but couldn't deliver, fail
25530 if test "$enable_opencl" = "yes" -a "$hwloc_opencl_happy" = "no"; then :
25531 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Specified --enable-opencl switch, but could not" >&5
25532 $as_echo "$as_me: WARNING: Specified --enable-opencl switch, but could not" >&2;}
25533 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: find appropriate support" >&5
25534 $as_echo "$as_me: WARNING: find appropriate support" >&2;}
27006 if test "$enable_opencl" = "yes" -a "$hwloc_opencl_happy" = "no"
27007 then :
27008 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Specified --enable-opencl switch, but could not" >&5
27009 printf "%s\n" "$as_me: WARNING: Specified --enable-opencl switch, but could not" >&2;}
27010 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: find appropriate support" >&5
27011 printf "%s\n" "$as_me: WARNING: find appropriate support" >&2;}
2553527012 as_fn_error $? "Cannot continue" "$LINENO" 5
2553627013 fi
2553727014 if test "x$hwloc_opencl_happy" = "xyes"; then
2553827015
25539 $as_echo "#define HWLOC_HAVE_OPENCL 1" >>confdefs.h
27016 printf "%s\n" "#define HWLOC_HAVE_OPENCL 1" >>confdefs.h
2554027017
2554127018 HWLOC_HAVE_OPENCL=1
2554227019
2555227029 hwloc_have_cuda=no
2555327030 hwloc_have_cudart=no
2555427031 if test "x$enable_io" != xno && test "x$enable_cuda" != "xno"; then
25555 for ac_header in cuda.h
27032 # Look for CUDA first, for our test only
27033 if test "x$cudapc" != x; then
27034
27035
27036 HWLOC_pkg_failed=no
27037 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CUDA" >&5
27038 printf %s "checking for CUDA... " >&6; }
27039
27040 if test -n "$PKG_CONFIG"; then
27041 if test -n "$HWLOC_CUDA_CFLAGS"; then
27042 HWLOC_pkg_cv_HWLOC_CUDA_CFLAGS="$HWLOC_CUDA_CFLAGS"
27043 else
27044 if test -n "$PKG_CONFIG" && \
27045 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --silence-errors \"\$cudapc\""; } >&5
27046 ($PKG_CONFIG --exists --silence-errors "$cudapc") 2>&5
27047 ac_status=$?
27048 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
27049 test $ac_status = 0; }; then
27050 HWLOC_pkg_cv_HWLOC_CUDA_CFLAGS=`$PKG_CONFIG --cflags "$cudapc" 2>/dev/null`
27051 else
27052 HWLOC_pkg_failed=yes
27053 fi
27054 fi
27055 else
27056 HWLOC_pkg_failed=untried
27057 fi
27058
27059 if test -n "$PKG_CONFIG"; then
27060 if test -n "$HWLOC_CUDA_LIBS"; then
27061 HWLOC_pkg_cv_HWLOC_CUDA_LIBS="$HWLOC_CUDA_LIBS"
27062 else
27063 if test -n "$PKG_CONFIG" && \
27064 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --silence-errors \"\$cudapc\""; } >&5
27065 ($PKG_CONFIG --exists --silence-errors "$cudapc") 2>&5
27066 ac_status=$?
27067 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
27068 test $ac_status = 0; }; then
27069 HWLOC_pkg_cv_HWLOC_CUDA_LIBS=`$PKG_CONFIG --libs "$cudapc" 2>/dev/null`
27070 else
27071 HWLOC_pkg_failed=yes
27072 fi
27073 fi
27074 else
27075 HWLOC_pkg_failed=untried
27076 fi
27077
27078
27079
27080
27081 # Check for failure of pkg-config
27082 if test $HWLOC_pkg_failed = yes; then
27083
27084 if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
27085 HWLOC_pkg_short_errors_supported=yes
27086 else
27087 HWLOC_pkg_short_errors_supported=no
27088 fi
27089 if test $HWLOC_pkg_short_errors_supported = yes; then
27090 HWLOC_CUDA_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$cudapc" 2>&1`
27091 else
27092 HWLOC_CUDA_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$cudapc" 2>&1`
27093 fi
27094 # Put the nasty error message in config.log where it belongs
27095 echo "$HWLOC_CUDA_PKG_ERRORS" >&5
27096
27097 as_fn_error $? "Package requirements ($cudapc) were not met:
27098
27099 $HWLOC_CUDA_PKG_ERRORS
27100
27101 Consider adjusting the PKG_CONFIG_PATH environment variable if you
27102 installed software in a non-standard prefix.
27103
27104 Alternatively, you may set the environment variables HWLOC_CUDA_CFLAGS
27105 and HWLOC_CUDA_LIBS to avoid the need to call pkg-config.
27106 See the pkg-config man page for more details.
27107 " "$LINENO" 5
27108 elif test $HWLOC_pkg_failed = untried; then
27109 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
27110 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
27111 as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it
27112 is in your PATH or set the PKG_CONFIG environment variable to the full
27113 path to pkg-config.
27114
27115 Alternatively, you may set the environment variables HWLOC_CUDA_CFLAGS
27116 and HWLOC_CUDA_LIBS to avoid the need to call pkg-config.
27117 See the pkg-config man page for more details.
27118
27119 To get pkg-config, see <http://pkg-config.freedesktop.org/>.
27120 See \`config.log' for more details" "$LINENO" 5; }
27121 else
27122 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
27123 printf "%s\n" "yes" >&6; }
27124
27125 # If we got good results from pkg-config, check that they
27126 # actually work (i.e., that we can link against the resulting
27127 # $LIBS). The canonical example why we do this is if
27128 # pkg-config returns 64 bit libraries but ./configure was run
27129 # with CFLAGS=-m32 LDFLAGS=-m32. pkg-config gave us valid
27130 # results, but we'll fail if we try to link. So detect that
27131 # failure now.
27132 # There are also cases on Mac where pkg-config returns paths
27133 # that do not actually exists until some magic is applied.
27134 # https://www.open-mpi.org/community/lists/hwloc-devel/2015/03/4402.php
27135 # So check whether we find the header as well.
27136 hwloc_cflags_save=$CFLAGS
27137 hwloc_cppflags_save=$CPPFLAGS
27138 hwloc_libs_save=$LIBS
27139 CFLAGS="$CFLAGS $HWLOC_pkg_cv_HWLOC_CUDA_CFLAGS"
27140 CPPFLAGS="$CPPFLAGS $HWLOC_pkg_cv_HWLOC_CUDA_CFLAGS"
27141 LIBS="$LIBS $HWLOC_pkg_cv_HWLOC_CUDA_LIBS"
27142 ac_fn_c_check_header_compile "$LINENO" "cuda.h" "ac_cv_header_cuda_h" "$ac_includes_default"
27143 if test "x$ac_cv_header_cuda_h" = xyes
27144 then :
27145
27146 ac_fn_c_check_func "$LINENO" "cuInit" "ac_cv_func_cuInit"
27147 if test "x$ac_cv_func_cuInit" = xyes
27148 then :
27149 hwloc_result=yes
27150 else $as_nop
27151 hwloc_result=no
27152 fi
27153
27154
27155 else $as_nop
27156 hwloc_result=no
27157 fi
27158
27159 CFLAGS=$hwloc_cflags_save
27160 CPPFLAGS=$hwloc_cppflags_save
27161 LIBS=$hwloc_libs_save
27162
27163 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for final CUDA support" >&5
27164 printf %s "checking for final CUDA support... " >&6; }
27165 if test "$hwloc_result" = "yes"
27166 then :
27167 HWLOC_CUDA_CFLAGS=$HWLOC_pkg_cv_HWLOC_CUDA_CFLAGS
27168 HWLOC_CUDA_LIBS=$HWLOC_pkg_cv_HWLOC_CUDA_LIBS
27169 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
27170 printf "%s\n" "yes" >&6; }
27171 hwloc_have_cuda=yes
27172 else $as_nop
27173 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
27174 printf "%s\n" "no" >&6; }
27175 :
27176 fi
27177 fi
27178 else
27179 HWLOC_CUDA_CPPFLAGS="$HWLOC_CUDA_COMMON_CPPFLAGS"
27180 HWLOC_CUDA_LDFLAGS="$HWLOC_CUDA_COMMON_LDFLAGS"
27181 tmp_save_CPPFLAGS="$CPPFLAGS"
27182 CPPFLAGS="$CPPFLAGS $HWLOC_CUDA_CPPFLAGS"
27183 tmp_save_LDFLAGS="$LDFLAGS"
27184 LDFLAGS="$LDFLAGS $HWLOC_CUDA_LDFLAGS"
27185 for ac_header in cuda.h
2555627186 do :
25557 ac_fn_c_check_header_mongrel "$LINENO" "cuda.h" "ac_cv_header_cuda_h" "$ac_includes_default"
25558 if test "x$ac_cv_header_cuda_h" = xyes; then :
25559 cat >>confdefs.h <<_ACEOF
25560 #define HAVE_CUDA_H 1
25561 _ACEOF
25562
25563 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if CUDA_VERSION >= 3020" >&5
25564 $as_echo_n "checking if CUDA_VERSION >= 3020... " >&6; }
25565 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
27187 ac_fn_c_check_header_compile "$LINENO" "cuda.h" "ac_cv_header_cuda_h" "$ac_includes_default"
27188 if test "x$ac_cv_header_cuda_h" = xyes
27189 then :
27190 printf "%s\n" "#define HAVE_CUDA_H 1" >>confdefs.h
27191
27192 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if CUDA_VERSION >= 3020" >&5
27193 printf %s "checking if CUDA_VERSION >= 3020... " >&6; }
27194 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2556627195 /* end confdefs.h. */
2556727196
2556827197 #include <cuda.h>
2557227201 #error CUDA_VERSION too old
2557327202 #endif
2557427203 int
25575 main ()
27204 main (void)
2557627205 {
2557727206 int i = 3;
2557827207 ;
2557927208 return 0;
2558027209 }
2558127210 _ACEOF
25582 if ac_fn_c_try_compile "$LINENO"; then :
25583 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
25584 $as_echo "yes" >&6; }
25585 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cuInit in -lcuda" >&5
25586 $as_echo_n "checking for cuInit in -lcuda... " >&6; }
25587 if ${ac_cv_lib_cuda_cuInit+:} false; then :
25588 $as_echo_n "(cached) " >&6
25589 else
27211 if ac_fn_c_try_compile "$LINENO"
27212 then :
27213 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
27214 printf "%s\n" "yes" >&6; }
27215 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for cuInit in -lcuda" >&5
27216 printf %s "checking for cuInit in -lcuda... " >&6; }
27217 if test ${ac_cv_lib_cuda_cuInit+y}
27218 then :
27219 printf %s "(cached) " >&6
27220 else $as_nop
2559027221 ac_check_lib_save_LIBS=$LIBS
2559127222 LIBS="-lcuda $LIBS"
2559227223 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2559527226 /* Override any GCC internal prototype to avoid an error.
2559627227 Use char because int might match the return type of a GCC
2559727228 builtin and then its argument prototype would still apply. */
25598 #ifdef __cplusplus
25599 extern "C"
25600 #endif
2560127229 char cuInit ();
2560227230 int
25603 main ()
27231 main (void)
2560427232 {
2560527233 return cuInit ();
2560627234 ;
2560727235 return 0;
2560827236 }
2560927237 _ACEOF
25610 if ac_fn_c_try_link "$LINENO"; then :
27238 if ac_fn_c_try_link "$LINENO"
27239 then :
2561127240 ac_cv_lib_cuda_cuInit=yes
25612 else
27241 else $as_nop
2561327242 ac_cv_lib_cuda_cuInit=no
2561427243 fi
25615 rm -f core conftest.err conftest.$ac_objext \
27244 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2561627245 conftest$ac_exeext conftest.$ac_ext
2561727246 LIBS=$ac_check_lib_save_LIBS
2561827247 fi
25619 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cuda_cuInit" >&5
25620 $as_echo "$ac_cv_lib_cuda_cuInit" >&6; }
25621 if test "x$ac_cv_lib_cuda_cuInit" = xyes; then :
25622
25623 $as_echo "#define HAVE_CUDA 1" >>confdefs.h
25624
25625 hwloc_have_cuda=yes
25626 fi
25627
27248 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cuda_cuInit" >&5
27249 printf "%s\n" "$ac_cv_lib_cuda_cuInit" >&6; }
27250 if test "x$ac_cv_lib_cuda_cuInit" = xyes
27251 then :
27252
27253 HWLOC_CUDA_LIBS="-lcuda"
27254 hwloc_have_cuda=yes
27255
27256 fi
27257
27258
27259 else $as_nop
27260 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
27261 printf "%s\n" "no" >&6; }
27262 fi
27263 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
27264 fi
27265
27266 done
27267 CPPFLAGS="$tmp_save_CPPFLAGS"
27268 LDFLAGS="$tmp_save_LDFLAGS"
27269 fi
27270 if test x$hwloc_have_cuda = xyes; then
27271
27272
27273
27274
27275
27276 printf "%s\n" "#define HAVE_CUDA 1" >>confdefs.h
27277
27278 fi
27279
27280 # Look for CUDART now, for library and tests
27281 if test "x$cudartpc" != x; then
27282
27283
27284 HWLOC_pkg_failed=no
27285 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CUDART" >&5
27286 printf %s "checking for CUDART... " >&6; }
27287
27288 if test -n "$PKG_CONFIG"; then
27289 if test -n "$HWLOC_CUDART_CFLAGS"; then
27290 HWLOC_pkg_cv_HWLOC_CUDART_CFLAGS="$HWLOC_CUDART_CFLAGS"
27291 else
27292 if test -n "$PKG_CONFIG" && \
27293 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --silence-errors \"\$cudartpc\""; } >&5
27294 ($PKG_CONFIG --exists --silence-errors "$cudartpc") 2>&5
27295 ac_status=$?
27296 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
27297 test $ac_status = 0; }; then
27298 HWLOC_pkg_cv_HWLOC_CUDART_CFLAGS=`$PKG_CONFIG --cflags "$cudartpc" 2>/dev/null`
27299 else
27300 HWLOC_pkg_failed=yes
27301 fi
27302 fi
2562827303 else
25629 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
25630 $as_echo "no" >&6; }
25631 fi
25632 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
25633 fi
25634
25635 done
25636
25637
25638 for ac_header in cuda_runtime_api.h
27304 HWLOC_pkg_failed=untried
27305 fi
27306
27307 if test -n "$PKG_CONFIG"; then
27308 if test -n "$HWLOC_CUDART_LIBS"; then
27309 HWLOC_pkg_cv_HWLOC_CUDART_LIBS="$HWLOC_CUDART_LIBS"
27310 else
27311 if test -n "$PKG_CONFIG" && \
27312 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --silence-errors \"\$cudartpc\""; } >&5
27313 ($PKG_CONFIG --exists --silence-errors "$cudartpc") 2>&5
27314 ac_status=$?
27315 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
27316 test $ac_status = 0; }; then
27317 HWLOC_pkg_cv_HWLOC_CUDART_LIBS=`$PKG_CONFIG --libs "$cudartpc" 2>/dev/null`
27318 else
27319 HWLOC_pkg_failed=yes
27320 fi
27321 fi
27322 else
27323 HWLOC_pkg_failed=untried
27324 fi
27325
27326
27327
27328
27329 # Check for failure of pkg-config
27330 if test $HWLOC_pkg_failed = yes; then
27331
27332 if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
27333 HWLOC_pkg_short_errors_supported=yes
27334 else
27335 HWLOC_pkg_short_errors_supported=no
27336 fi
27337 if test $HWLOC_pkg_short_errors_supported = yes; then
27338 HWLOC_CUDART_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$cudartpc" 2>&1`
27339 else
27340 HWLOC_CUDART_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$cudartpc" 2>&1`
27341 fi
27342 # Put the nasty error message in config.log where it belongs
27343 echo "$HWLOC_CUDART_PKG_ERRORS" >&5
27344
27345 as_fn_error $? "Package requirements ($cudartpc) were not met:
27346
27347 $HWLOC_CUDART_PKG_ERRORS
27348
27349 Consider adjusting the PKG_CONFIG_PATH environment variable if you
27350 installed software in a non-standard prefix.
27351
27352 Alternatively, you may set the environment variables HWLOC_CUDART_CFLAGS
27353 and HWLOC_CUDART_LIBS to avoid the need to call pkg-config.
27354 See the pkg-config man page for more details.
27355 " "$LINENO" 5
27356 elif test $HWLOC_pkg_failed = untried; then
27357 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
27358 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
27359 as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it
27360 is in your PATH or set the PKG_CONFIG environment variable to the full
27361 path to pkg-config.
27362
27363 Alternatively, you may set the environment variables HWLOC_CUDART_CFLAGS
27364 and HWLOC_CUDART_LIBS to avoid the need to call pkg-config.
27365 See the pkg-config man page for more details.
27366
27367 To get pkg-config, see <http://pkg-config.freedesktop.org/>.
27368 See \`config.log' for more details" "$LINENO" 5; }
27369 else
27370 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
27371 printf "%s\n" "yes" >&6; }
27372
27373 # If we got good results from pkg-config, check that they
27374 # actually work (i.e., that we can link against the resulting
27375 # $LIBS). The canonical example why we do this is if
27376 # pkg-config returns 64 bit libraries but ./configure was run
27377 # with CFLAGS=-m32 LDFLAGS=-m32. pkg-config gave us valid
27378 # results, but we'll fail if we try to link. So detect that
27379 # failure now.
27380 # There are also cases on Mac where pkg-config returns paths
27381 # that do not actually exists until some magic is applied.
27382 # https://www.open-mpi.org/community/lists/hwloc-devel/2015/03/4402.php
27383 # So check whether we find the header as well.
27384 hwloc_cflags_save=$CFLAGS
27385 hwloc_cppflags_save=$CPPFLAGS
27386 hwloc_libs_save=$LIBS
27387 CFLAGS="$CFLAGS $HWLOC_pkg_cv_HWLOC_CUDART_CFLAGS"
27388 CPPFLAGS="$CPPFLAGS $HWLOC_pkg_cv_HWLOC_CUDART_CFLAGS"
27389 LIBS="$LIBS $HWLOC_pkg_cv_HWLOC_CUDART_LIBS"
27390 ac_fn_c_check_header_compile "$LINENO" "cuda_runtime_api.h" "ac_cv_header_cuda_runtime_api_h" "$ac_includes_default"
27391 if test "x$ac_cv_header_cuda_runtime_api_h" = xyes
27392 then :
27393
27394 ac_fn_c_check_func "$LINENO" "cudaGetDeviceProperties" "ac_cv_func_cudaGetDeviceProperties"
27395 if test "x$ac_cv_func_cudaGetDeviceProperties" = xyes
27396 then :
27397 hwloc_result=yes
27398 else $as_nop
27399 hwloc_result=no
27400 fi
27401
27402
27403 else $as_nop
27404 hwloc_result=no
27405 fi
27406
27407 CFLAGS=$hwloc_cflags_save
27408 CPPFLAGS=$hwloc_cppflags_save
27409 LIBS=$hwloc_libs_save
27410
27411 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for final CUDART support" >&5
27412 printf %s "checking for final CUDART support... " >&6; }
27413 if test "$hwloc_result" = "yes"
27414 then :
27415 HWLOC_CUDART_CFLAGS=$HWLOC_pkg_cv_HWLOC_CUDART_CFLAGS
27416 HWLOC_CUDART_LIBS=$HWLOC_pkg_cv_HWLOC_CUDART_LIBS
27417 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
27418 printf "%s\n" "yes" >&6; }
27419
27420 hwloc_have_cudart=yes
27421 HWLOC_CUDART_REQUIRES=$cudartpc
27422
27423 else $as_nop
27424 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
27425 printf "%s\n" "no" >&6; }
27426 :
27427 fi
27428 fi
27429 else
27430 HWLOC_CUDART_CPPFLAGS="$HWLOC_CUDA_COMMON_CPPFLAGS"
27431 HWLOC_CUDART_LDFLAGS="$HWLOC_CUDA_COMMON_LDFLAGS"
27432 tmp_save_CPPFLAGS="$CPPFLAGS"
27433 CPPFLAGS="$CPPFLAGS $HWLOC_CUDART_CPPFLAGS"
27434 tmp_save_LDFLAGS="$LDFLAGS"
27435 LDFLAGS="$LDFLAGS $HWLOC_CUDART_LDFLAGS"
27436 for ac_header in cuda_runtime_api.h
2563927437 do :
25640 ac_fn_c_check_header_mongrel "$LINENO" "cuda_runtime_api.h" "ac_cv_header_cuda_runtime_api_h" "$ac_includes_default"
25641 if test "x$ac_cv_header_cuda_runtime_api_h" = xyes; then :
25642 cat >>confdefs.h <<_ACEOF
25643 #define HAVE_CUDA_RUNTIME_API_H 1
25644 _ACEOF
25645
25646 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if CUDART_VERSION >= 3020" >&5
25647 $as_echo_n "checking if CUDART_VERSION >= 3020... " >&6; }
25648 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
27438 ac_fn_c_check_header_compile "$LINENO" "cuda_runtime_api.h" "ac_cv_header_cuda_runtime_api_h" "$ac_includes_default"
27439 if test "x$ac_cv_header_cuda_runtime_api_h" = xyes
27440 then :
27441 printf "%s\n" "#define HAVE_CUDA_RUNTIME_API_H 1" >>confdefs.h
27442
27443 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if CUDART_VERSION >= 3020" >&5
27444 printf %s "checking if CUDART_VERSION >= 3020... " >&6; }
27445 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2564927446 /* end confdefs.h. */
2565027447
2565127448 #include <cuda_runtime_api.h>
2565527452 #error CUDART_VERSION too old
2565627453 #endif
2565727454 int
25658 main ()
27455 main (void)
2565927456 {
2566027457 int i = 3;
2566127458 ;
2566227459 return 0;
2566327460 }
2566427461 _ACEOF
25665 if ac_fn_c_try_compile "$LINENO"; then :
25666 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
25667 $as_echo "yes" >&6; }
25668 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cudaGetDeviceProperties in -lcudart" >&5
25669 $as_echo_n "checking for cudaGetDeviceProperties in -lcudart... " >&6; }
25670 if ${ac_cv_lib_cudart_cudaGetDeviceProperties+:} false; then :
25671 $as_echo_n "(cached) " >&6
25672 else
27462 if ac_fn_c_try_compile "$LINENO"
27463 then :
27464 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
27465 printf "%s\n" "yes" >&6; }
27466 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for cudaGetDeviceProperties in -lcudart" >&5
27467 printf %s "checking for cudaGetDeviceProperties in -lcudart... " >&6; }
27468 if test ${ac_cv_lib_cudart_cudaGetDeviceProperties+y}
27469 then :
27470 printf %s "(cached) " >&6
27471 else $as_nop
2567327472 ac_check_lib_save_LIBS=$LIBS
2567427473 LIBS="-lcudart $LIBS"
2567527474 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2567827477 /* Override any GCC internal prototype to avoid an error.
2567927478 Use char because int might match the return type of a GCC
2568027479 builtin and then its argument prototype would still apply. */
25681 #ifdef __cplusplus
25682 extern "C"
25683 #endif
2568427480 char cudaGetDeviceProperties ();
2568527481 int
25686 main ()
27482 main (void)
2568727483 {
2568827484 return cudaGetDeviceProperties ();
2568927485 ;
2569027486 return 0;
2569127487 }
2569227488 _ACEOF
25693 if ac_fn_c_try_link "$LINENO"; then :
27489 if ac_fn_c_try_link "$LINENO"
27490 then :
2569427491 ac_cv_lib_cudart_cudaGetDeviceProperties=yes
25695 else
27492 else $as_nop
2569627493 ac_cv_lib_cudart_cudaGetDeviceProperties=no
2569727494 fi
25698 rm -f core conftest.err conftest.$ac_objext \
27495 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2569927496 conftest$ac_exeext conftest.$ac_ext
2570027497 LIBS=$ac_check_lib_save_LIBS
2570127498 fi
25702 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cudart_cudaGetDeviceProperties" >&5
25703 $as_echo "$ac_cv_lib_cudart_cudaGetDeviceProperties" >&6; }
25704 if test "x$ac_cv_lib_cudart_cudaGetDeviceProperties" = xyes; then :
25705
25706 HWLOC_CUDA_LIBS="-lcudart"
25707
25708 hwloc_have_cudart=yes
25709
25710 $as_echo "#define HWLOC_HAVE_CUDART 1" >>confdefs.h
25711
25712
25713 fi
25714
25715
25716 fi
25717 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
27499 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cudart_cudaGetDeviceProperties" >&5
27500 printf "%s\n" "$ac_cv_lib_cudart_cudaGetDeviceProperties" >&6; }
27501 if test "x$ac_cv_lib_cudart_cudaGetDeviceProperties" = xyes
27502 then :
27503
27504 HWLOC_CUDART_LIBS="-lcudart"
27505 hwloc_have_cudart=yes
27506
27507 fi
27508
27509
27510 fi
27511 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
2571827512
2571927513 fi
2572027514
2572127515 done
25722
25723
25724 if test "$enable_cuda" = "yes" -a "$hwloc_have_cudart" = "no"; then :
25725 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Specified --enable-cuda switch, but could not" >&5
25726 $as_echo "$as_me: WARNING: Specified --enable-cuda switch, but could not" >&2;}
25727 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: find appropriate support" >&5
25728 $as_echo "$as_me: WARNING: find appropriate support" >&2;}
27516 CPPFLAGS="$tmp_save_CPPFLAGS"
27517 LDFLAGS="$tmp_save_LDFLAGS"
27518 fi
27519 if test x$hwloc_have_cudart = xyes; then
27520
27521
27522
27523
27524
27525 printf "%s\n" "#define HWLOC_HAVE_CUDART 1" >>confdefs.h
27526
27527 fi
27528
27529 if test "$enable_cuda" = "yes" -a "$hwloc_have_cudart" = "no"
27530 then :
27531 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Specified --enable-cuda switch, but could not" >&5
27532 printf "%s\n" "$as_me: WARNING: Specified --enable-cuda switch, but could not" >&2;}
27533 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: find appropriate support" >&5
27534 printf "%s\n" "$as_me: WARNING: find appropriate support" >&2;}
27535 as_fn_error $? "Cannot continue" "$LINENO" 5
27536 fi
27537 if test "x$with_cuda_version" != x -a "$hwloc_have_cudart" = "no"
27538 then :
27539 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Specified --with-cuda-version switch, but could not" >&5
27540 printf "%s\n" "$as_me: WARNING: Specified --with-cuda-version switch, but could not" >&2;}
27541 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: find appropriate support" >&5
27542 printf "%s\n" "$as_me: WARNING: find appropriate support" >&2;}
2572927543 as_fn_error $? "Cannot continue" "$LINENO" 5
2573027544 fi
2573127545
2573927553 # NVML support
2574027554 hwloc_nvml_happy=no
2574127555 if test "x$enable_io" != xno && test "x$enable_nvml" != "xno"; then
25742 hwloc_nvml_happy=yes
25743 for ac_header in nvml.h
27556 hwloc_nvml_happy=yes
27557 HWLOC_NVML_CPPFLAGS="$HWLOC_CUDA_COMMON_CPPFLAGS"
27558 HWLOC_NVML_LDFLAGS="$HWLOC_CUDA_COMMON_LDFLAGS"
27559 tmp_save_CPPFLAGS="$CPPFLAGS"
27560 CPPFLAGS="$CPPFLAGS $HWLOC_NVML_CPPFLAGS"
27561 tmp_save_LDFLAGS="$LDFLAGS"
27562 LDFLAGS="$LDFLAGS $HWLOC_NVML_LDFLAGS"
27563 for ac_header in nvml.h
2574427564 do :
25745 ac_fn_c_check_header_mongrel "$LINENO" "nvml.h" "ac_cv_header_nvml_h" "$ac_includes_default"
25746 if test "x$ac_cv_header_nvml_h" = xyes; then :
25747 cat >>confdefs.h <<_ACEOF
25748 #define HAVE_NVML_H 1
25749 _ACEOF
25750
25751 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nvmlInit in -lnvidia-ml" >&5
25752 $as_echo_n "checking for nvmlInit in -lnvidia-ml... " >&6; }
25753 if ${ac_cv_lib_nvidia_ml_nvmlInit+:} false; then :
25754 $as_echo_n "(cached) " >&6
25755 else
27565 ac_fn_c_check_header_compile "$LINENO" "nvml.h" "ac_cv_header_nvml_h" "$ac_includes_default"
27566 if test "x$ac_cv_header_nvml_h" = xyes
27567 then :
27568 printf "%s\n" "#define HAVE_NVML_H 1" >>confdefs.h
27569
27570 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nvmlInit in -lnvidia-ml" >&5
27571 printf %s "checking for nvmlInit in -lnvidia-ml... " >&6; }
27572 if test ${ac_cv_lib_nvidia_ml_nvmlInit+y}
27573 then :
27574 printf %s "(cached) " >&6
27575 else $as_nop
2575627576 ac_check_lib_save_LIBS=$LIBS
2575727577 LIBS="-lnvidia-ml $LIBS"
2575827578 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2576127581 /* Override any GCC internal prototype to avoid an error.
2576227582 Use char because int might match the return type of a GCC
2576327583 builtin and then its argument prototype would still apply. */
25764 #ifdef __cplusplus
25765 extern "C"
25766 #endif
2576727584 char nvmlInit ();
2576827585 int
25769 main ()
27586 main (void)
2577027587 {
2577127588 return nvmlInit ();
2577227589 ;
2577327590 return 0;
2577427591 }
2577527592 _ACEOF
25776 if ac_fn_c_try_link "$LINENO"; then :
27593 if ac_fn_c_try_link "$LINENO"
27594 then :
2577727595 ac_cv_lib_nvidia_ml_nvmlInit=yes
25778 else
27596 else $as_nop
2577927597 ac_cv_lib_nvidia_ml_nvmlInit=no
2578027598 fi
25781 rm -f core conftest.err conftest.$ac_objext \
27599 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2578227600 conftest$ac_exeext conftest.$ac_ext
2578327601 LIBS=$ac_check_lib_save_LIBS
2578427602 fi
25785 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nvidia_ml_nvmlInit" >&5
25786 $as_echo "$ac_cv_lib_nvidia_ml_nvmlInit" >&6; }
25787 if test "x$ac_cv_lib_nvidia_ml_nvmlInit" = xyes; then :
27603 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nvidia_ml_nvmlInit" >&5
27604 printf "%s\n" "$ac_cv_lib_nvidia_ml_nvmlInit" >&6; }
27605 if test "x$ac_cv_lib_nvidia_ml_nvmlInit" = xyes
27606 then :
2578827607 HWLOC_NVML_LIBS="-lnvidia-ml"
25789 else
27608 else $as_nop
2579027609 hwloc_nvml_happy=no
2579127610 fi
2579227611
2579327612
25794 else
27613 else $as_nop
2579527614 hwloc_nvml_happy=no
2579627615 fi
2579727616
2579827617 done
25799
27618 CPPFLAGS="$tmp_save_CPPFLAGS"
27619 LDFLAGS="$tmp_save_LDFLAGS"
2580027620 fi
2580127621 if test "x$hwloc_nvml_happy" = "xyes"; then
25802 tmp_save_CFLAGS="$CFLAGS"
25803 CFLAGS="$CFLAGS $HWLOC_NVML_CFLAGS"
25804 tmp_save_LIBS="$LIBS"
25805 LIBS="$LIBS $HWLOC_NVML_LIBS"
25806 ac_fn_c_check_decl "$LINENO" "nvmlDeviceGetMaxPcieLinkGeneration" "ac_cv_have_decl_nvmlDeviceGetMaxPcieLinkGeneration" "#include <nvml.h>
25807 "
25808 if test "x$ac_cv_have_decl_nvmlDeviceGetMaxPcieLinkGeneration" = xyes; then :
27622 tmp_save_CPPFLAGS="$CPPFLAGS"
27623 CPPFLAGS="$CPPFLAGS $HWLOC_NVML_CPPFLAGS"
27624 ac_fn_check_decl "$LINENO" "nvmlDeviceGetMaxPcieLinkGeneration" "ac_cv_have_decl_nvmlDeviceGetMaxPcieLinkGeneration" "#include <nvml.h>
27625 " "$ac_c_undeclared_builtin_options" "CFLAGS"
27626 if test "x$ac_cv_have_decl_nvmlDeviceGetMaxPcieLinkGeneration" = xyes
27627 then :
2580927628 ac_have_decl=1
25810 else
27629 else $as_nop
2581127630 ac_have_decl=0
2581227631 fi
25813
25814 cat >>confdefs.h <<_ACEOF
25815 #define HAVE_DECL_NVMLDEVICEGETMAXPCIELINKGENERATION $ac_have_decl
25816 _ACEOF
25817 if test $ac_have_decl = 1; then :
25818
25819 else
27632 printf "%s\n" "#define HAVE_DECL_NVMLDEVICEGETMAXPCIELINKGENERATION $ac_have_decl" >>confdefs.h
27633 if test $ac_have_decl = 1
27634 then :
27635
27636 else $as_nop
2582027637 :
2582127638 fi
2582227639
25823 CFLAGS="$tmp_save_CFLAGS"
25824 LIBS="$tmp_save_LIBS"
27640 CPPFLAGS="$tmp_save_CPPFLAGS"
2582527641 fi
2582627642
27643
27644
2582727645 # If we asked for nvml support but couldn't deliver, fail
25828 if test "$enable_nvml" = "yes" -a "$hwloc_nvml_happy" = "no"; then :
25829 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Specified --enable-nvml switch, but could not" >&5
25830 $as_echo "$as_me: WARNING: Specified --enable-nvml switch, but could not" >&2;}
25831 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: find appropriate support" >&5
25832 $as_echo "$as_me: WARNING: find appropriate support" >&2;}
27646 if test "$enable_nvml" = "yes" -a "$hwloc_nvml_happy" = "no"
27647 then :
27648 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Specified --enable-nvml switch, but could not" >&5
27649 printf "%s\n" "$as_me: WARNING: Specified --enable-nvml switch, but could not" >&2;}
27650 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: find appropriate support" >&5
27651 printf "%s\n" "$as_me: WARNING: find appropriate support" >&2;}
2583327652 as_fn_error $? "Cannot continue" "$LINENO" 5
2583427653 fi
2583527654 if test "x$hwloc_nvml_happy" = "xyes"; then
2583627655
25837 $as_echo "#define HWLOC_HAVE_NVML 1" >>confdefs.h
27656 printf "%s\n" "#define HWLOC_HAVE_NVML 1" >>confdefs.h
2583827657
2583927658 HWLOC_HAVE_NVML=1
2584027659
2585027669 hwloc_rsmi_happy=no
2585127670 if test "x$enable_io" != xno && test "x$enable_rsmi" != "xno"; then
2585227671 hwloc_rsmi_happy=yes
25853 for ac_header in rocm_smi/rocm_smi.h
27672 for ac_header in rocm_smi/rocm_smi.h
2585427673 do :
25855 ac_fn_c_check_header_mongrel "$LINENO" "rocm_smi/rocm_smi.h" "ac_cv_header_rocm_smi_rocm_smi_h" "$ac_includes_default"
25856 if test "x$ac_cv_header_rocm_smi_rocm_smi_h" = xyes; then :
25857 cat >>confdefs.h <<_ACEOF
25858 #define HAVE_ROCM_SMI_ROCM_SMI_H 1
25859 _ACEOF
25860
25861 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for rsmi_init in -lrocm_smi64" >&5
25862 $as_echo_n "checking for rsmi_init in -lrocm_smi64... " >&6; }
25863 if ${ac_cv_lib_rocm_smi64_rsmi_init+:} false; then :
25864 $as_echo_n "(cached) " >&6
25865 else
27674 ac_fn_c_check_header_compile "$LINENO" "rocm_smi/rocm_smi.h" "ac_cv_header_rocm_smi_rocm_smi_h" "$ac_includes_default"
27675 if test "x$ac_cv_header_rocm_smi_rocm_smi_h" = xyes
27676 then :
27677 printf "%s\n" "#define HAVE_ROCM_SMI_ROCM_SMI_H 1" >>confdefs.h
27678
27679 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for rsmi_init in -lrocm_smi64" >&5
27680 printf %s "checking for rsmi_init in -lrocm_smi64... " >&6; }
27681 if test ${ac_cv_lib_rocm_smi64_rsmi_init+y}
27682 then :
27683 printf %s "(cached) " >&6
27684 else $as_nop
2586627685 ac_check_lib_save_LIBS=$LIBS
2586727686 LIBS="-lrocm_smi64 $LIBS"
2586827687 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2587127690 /* Override any GCC internal prototype to avoid an error.
2587227691 Use char because int might match the return type of a GCC
2587327692 builtin and then its argument prototype would still apply. */
25874 #ifdef __cplusplus
25875 extern "C"
25876 #endif
2587727693 char rsmi_init ();
2587827694 int
25879 main ()
27695 main (void)
2588027696 {
2588127697 return rsmi_init ();
2588227698 ;
2588327699 return 0;
2588427700 }
2588527701 _ACEOF
25886 if ac_fn_c_try_link "$LINENO"; then :
27702 if ac_fn_c_try_link "$LINENO"
27703 then :
2588727704 ac_cv_lib_rocm_smi64_rsmi_init=yes
25888 else
27705 else $as_nop
2588927706 ac_cv_lib_rocm_smi64_rsmi_init=no
2589027707 fi
25891 rm -f core conftest.err conftest.$ac_objext \
27708 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2589227709 conftest$ac_exeext conftest.$ac_ext
2589327710 LIBS=$ac_check_lib_save_LIBS
2589427711 fi
25895 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rocm_smi64_rsmi_init" >&5
25896 $as_echo "$ac_cv_lib_rocm_smi64_rsmi_init" >&6; }
25897 if test "x$ac_cv_lib_rocm_smi64_rsmi_init" = xyes; then :
27712 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rocm_smi64_rsmi_init" >&5
27713 printf "%s\n" "$ac_cv_lib_rocm_smi64_rsmi_init" >&6; }
27714 if test "x$ac_cv_lib_rocm_smi64_rsmi_init" = xyes
27715 then :
2589827716 HWLOC_RSMI_LIBS="-lrocm_smi64"
25899 else
27717 else $as_nop
2590027718 hwloc_rsmi_happy=no
2590127719 fi
2590227720
2590327721
25904 else
27722 else $as_nop
2590527723 hwloc_rsmi_happy=no
2590627724 fi
2590727725
2590827726 done
25909
2591027727 fi
2591127728
2591227729 # If we asked for rsmi support but couldn't deliver, fail
25913 if test "$enable_rsmi" = "yes" -a "$hwloc_rsmi_happy" = "no"; then :
25914 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Specified --enable-rsmi switch, but could not" >&5
25915 $as_echo "$as_me: WARNING: Specified --enable-rsmi switch, but could not" >&2;}
25916 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: find appropriate support" >&5
25917 $as_echo "$as_me: WARNING: find appropriate support" >&2;}
27730 if test "$enable_rsmi" = "yes" -a "$hwloc_rsmi_happy" = "no"
27731 then :
27732 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Specified --enable-rsmi switch, but could not" >&5
27733 printf "%s\n" "$as_me: WARNING: Specified --enable-rsmi switch, but could not" >&2;}
27734 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: find appropriate support" >&5
27735 printf "%s\n" "$as_me: WARNING: find appropriate support" >&2;}
2591827736 as_fn_error $? "Cannot continue" "$LINENO" 5
2591927737 fi
2592027738 if test "x$hwloc_rsmi_happy" = "xyes"; then
2592127739
25922 $as_echo "#define HWLOC_HAVE_RSMI 1" >>confdefs.h
27740 printf "%s\n" "#define HWLOC_HAVE_RSMI 1" >>confdefs.h
2592327741
2592427742 HWLOC_HAVE_RSMI=1
2592527743
2593127749 fi
2593227750 # don't add LIBS/CFLAGS/REQUIRES yet, depends on plugins
2593327751
27752 # LevelZero support
27753 hwloc_levelzero_happy=no
27754 if test "x$enable_io" != xno && test "x$enable_levelzero" != "xno"; then
27755
27756
27757 HWLOC_pkg_failed=no
27758 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for LEVELZERO" >&5
27759 printf %s "checking for LEVELZERO... " >&6; }
27760
27761 if test -n "$PKG_CONFIG"; then
27762 if test -n "$HWLOC_LEVELZERO_CFLAGS"; then
27763 HWLOC_pkg_cv_HWLOC_LEVELZERO_CFLAGS="$HWLOC_LEVELZERO_CFLAGS"
27764 else
27765 if test -n "$PKG_CONFIG" && \
27766 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --silence-errors \"libze_loader\""; } >&5
27767 ($PKG_CONFIG --exists --silence-errors "libze_loader") 2>&5
27768 ac_status=$?
27769 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
27770 test $ac_status = 0; }; then
27771 HWLOC_pkg_cv_HWLOC_LEVELZERO_CFLAGS=`$PKG_CONFIG --cflags "libze_loader" 2>/dev/null`
27772 else
27773 HWLOC_pkg_failed=yes
27774 fi
27775 fi
27776 else
27777 HWLOC_pkg_failed=untried
27778 fi
27779
27780 if test -n "$PKG_CONFIG"; then
27781 if test -n "$HWLOC_LEVELZERO_LIBS"; then
27782 HWLOC_pkg_cv_HWLOC_LEVELZERO_LIBS="$HWLOC_LEVELZERO_LIBS"
27783 else
27784 if test -n "$PKG_CONFIG" && \
27785 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --silence-errors \"libze_loader\""; } >&5
27786 ($PKG_CONFIG --exists --silence-errors "libze_loader") 2>&5
27787 ac_status=$?
27788 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
27789 test $ac_status = 0; }; then
27790 HWLOC_pkg_cv_HWLOC_LEVELZERO_LIBS=`$PKG_CONFIG --libs "libze_loader" 2>/dev/null`
27791 else
27792 HWLOC_pkg_failed=yes
27793 fi
27794 fi
27795 else
27796 HWLOC_pkg_failed=untried
27797 fi
27798
27799
27800
27801
27802 # Check for failure of pkg-config
27803 if test $HWLOC_pkg_failed = yes; then
27804
27805 if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
27806 HWLOC_pkg_short_errors_supported=yes
27807 else
27808 HWLOC_pkg_short_errors_supported=no
27809 fi
27810 if test $HWLOC_pkg_short_errors_supported = yes; then
27811 HWLOC_LEVELZERO_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libze_loader" 2>&1`
27812 else
27813 HWLOC_LEVELZERO_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libze_loader" 2>&1`
27814 fi
27815 # Put the nasty error message in config.log where it belongs
27816 echo "$HWLOC_LEVELZERO_PKG_ERRORS" >&5
27817
27818 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
27819 printf "%s\n" "no" >&6; }
27820 hwloc_levelzero_happy=no
27821 elif test $HWLOC_pkg_failed = untried; then
27822 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cannot check without pkg-config" >&5
27823 printf "%s\n" "cannot check without pkg-config" >&6; }
27824 hwloc_levelzero_happy=no
27825 else
27826 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
27827 printf "%s\n" "yes" >&6; }
27828
27829 # If we got good results from pkg-config, check that they
27830 # actually work (i.e., that we can link against the resulting
27831 # $LIBS). The canonical example why we do this is if
27832 # pkg-config returns 64 bit libraries but ./configure was run
27833 # with CFLAGS=-m32 LDFLAGS=-m32. pkg-config gave us valid
27834 # results, but we'll fail if we try to link. So detect that
27835 # failure now.
27836 # There are also cases on Mac where pkg-config returns paths
27837 # that do not actually exists until some magic is applied.
27838 # https://www.open-mpi.org/community/lists/hwloc-devel/2015/03/4402.php
27839 # So check whether we find the header as well.
27840 hwloc_cflags_save=$CFLAGS
27841 hwloc_cppflags_save=$CPPFLAGS
27842 hwloc_libs_save=$LIBS
27843 CFLAGS="$CFLAGS $HWLOC_pkg_cv_HWLOC_LEVELZERO_CFLAGS"
27844 CPPFLAGS="$CPPFLAGS $HWLOC_pkg_cv_HWLOC_LEVELZERO_CFLAGS"
27845 LIBS="$LIBS $HWLOC_pkg_cv_HWLOC_LEVELZERO_LIBS"
27846 ac_fn_c_check_header_compile "$LINENO" "level_zero/zes_api.h" "ac_cv_header_level_zero_zes_api_h" "$ac_includes_default"
27847 if test "x$ac_cv_header_level_zero_zes_api_h" = xyes
27848 then :
27849
27850 ac_fn_c_check_func "$LINENO" "zesDevicePciGetProperties" "ac_cv_func_zesDevicePciGetProperties"
27851 if test "x$ac_cv_func_zesDevicePciGetProperties" = xyes
27852 then :
27853 hwloc_result=yes
27854 else $as_nop
27855 hwloc_result=no
27856 fi
27857
27858
27859 else $as_nop
27860 hwloc_result=no
27861 fi
27862
27863 CFLAGS=$hwloc_cflags_save
27864 CPPFLAGS=$hwloc_cppflags_save
27865 LIBS=$hwloc_libs_save
27866
27867 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for final LEVELZERO support" >&5
27868 printf %s "checking for final LEVELZERO support... " >&6; }
27869 if test "$hwloc_result" = "yes"
27870 then :
27871 HWLOC_LEVELZERO_CFLAGS=$HWLOC_pkg_cv_HWLOC_LEVELZERO_CFLAGS
27872 HWLOC_LEVELZERO_LIBS=$HWLOC_pkg_cv_HWLOC_LEVELZERO_LIBS
27873 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
27874 printf "%s\n" "yes" >&6; }
27875 hwloc_levelzero_happy=yes
27876 HWLOC_LEVELZERO_REQUIRES=libze_loader
27877
27878 else $as_nop
27879 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
27880 printf "%s\n" "no" >&6; }
27881 hwloc_levelzero_happy=no
27882 fi
27883 fi
27884 if test x$hwloc_levelzero_happy = xno; then
27885 hwloc_levelzero_happy=yes
27886 for ac_header in level_zero/ze_api.h
27887 do :
27888 ac_fn_c_check_header_compile "$LINENO" "level_zero/ze_api.h" "ac_cv_header_level_zero_ze_api_h" "$ac_includes_default"
27889 if test "x$ac_cv_header_level_zero_ze_api_h" = xyes
27890 then :
27891 printf "%s\n" "#define HAVE_LEVEL_ZERO_ZE_API_H 1" >>confdefs.h
27892
27893 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for zeInit in -lze_loader" >&5
27894 printf %s "checking for zeInit in -lze_loader... " >&6; }
27895 if test ${ac_cv_lib_ze_loader_zeInit+y}
27896 then :
27897 printf %s "(cached) " >&6
27898 else $as_nop
27899 ac_check_lib_save_LIBS=$LIBS
27900 LIBS="-lze_loader $LIBS"
27901 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
27902 /* end confdefs.h. */
27903
27904 /* Override any GCC internal prototype to avoid an error.
27905 Use char because int might match the return type of a GCC
27906 builtin and then its argument prototype would still apply. */
27907 char zeInit ();
27908 int
27909 main (void)
27910 {
27911 return zeInit ();
27912 ;
27913 return 0;
27914 }
27915 _ACEOF
27916 if ac_fn_c_try_link "$LINENO"
27917 then :
27918 ac_cv_lib_ze_loader_zeInit=yes
27919 else $as_nop
27920 ac_cv_lib_ze_loader_zeInit=no
27921 fi
27922 rm -f core conftest.err conftest.$ac_objext conftest.beam \
27923 conftest$ac_exeext conftest.$ac_ext
27924 LIBS=$ac_check_lib_save_LIBS
27925 fi
27926 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ze_loader_zeInit" >&5
27927 printf "%s\n" "$ac_cv_lib_ze_loader_zeInit" >&6; }
27928 if test "x$ac_cv_lib_ze_loader_zeInit" = xyes
27929 then :
27930
27931 for ac_header in level_zero/zes_api.h
27932 do :
27933 ac_fn_c_check_header_compile "$LINENO" "level_zero/zes_api.h" "ac_cv_header_level_zero_zes_api_h" "$ac_includes_default"
27934 if test "x$ac_cv_header_level_zero_zes_api_h" = xyes
27935 then :
27936 printf "%s\n" "#define HAVE_LEVEL_ZERO_ZES_API_H 1" >>confdefs.h
27937
27938 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for zesDevicePciGetProperties in -lze_loader" >&5
27939 printf %s "checking for zesDevicePciGetProperties in -lze_loader... " >&6; }
27940 if test ${ac_cv_lib_ze_loader_zesDevicePciGetProperties+y}
27941 then :
27942 printf %s "(cached) " >&6
27943 else $as_nop
27944 ac_check_lib_save_LIBS=$LIBS
27945 LIBS="-lze_loader $LIBS"
27946 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
27947 /* end confdefs.h. */
27948
27949 /* Override any GCC internal prototype to avoid an error.
27950 Use char because int might match the return type of a GCC
27951 builtin and then its argument prototype would still apply. */
27952 char zesDevicePciGetProperties ();
27953 int
27954 main (void)
27955 {
27956 return zesDevicePciGetProperties ();
27957 ;
27958 return 0;
27959 }
27960 _ACEOF
27961 if ac_fn_c_try_link "$LINENO"
27962 then :
27963 ac_cv_lib_ze_loader_zesDevicePciGetProperties=yes
27964 else $as_nop
27965 ac_cv_lib_ze_loader_zesDevicePciGetProperties=no
27966 fi
27967 rm -f core conftest.err conftest.$ac_objext conftest.beam \
27968 conftest$ac_exeext conftest.$ac_ext
27969 LIBS=$ac_check_lib_save_LIBS
27970 fi
27971 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ze_loader_zesDevicePciGetProperties" >&5
27972 printf "%s\n" "$ac_cv_lib_ze_loader_zesDevicePciGetProperties" >&6; }
27973 if test "x$ac_cv_lib_ze_loader_zesDevicePciGetProperties" = xyes
27974 then :
27975 HWLOC_LEVELZERO_LIBS="-lze_loader"
27976 else $as_nop
27977 hwloc_levelzero_happy=no
27978 fi
27979
27980
27981 else $as_nop
27982 hwloc_levelzero_happy=no
27983 fi
27984
27985 done
27986
27987 else $as_nop
27988 hwloc_levelzero_happy=no
27989 fi
27990
27991
27992 else $as_nop
27993 hwloc_levelzero_happy=no
27994 fi
27995
27996 done
27997 fi
27998 fi
27999
28000 # If we asked for LevelZero support but couldn't deliver, fail
28001 if test "$enable_levelzero" = "yes" -a "$hwloc_levelzero_happy" = "no"
28002 then :
28003 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Specified --enable-levelzero switch, but could not" >&5
28004 printf "%s\n" "$as_me: WARNING: Specified --enable-levelzero switch, but could not" >&2;}
28005 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: find appropriate support" >&5
28006 printf "%s\n" "$as_me: WARNING: find appropriate support" >&2;}
28007 as_fn_error $? "Cannot continue" "$LINENO" 5
28008 fi
28009 if test "x$hwloc_levelzero_happy" = "xyes"; then
28010
28011 printf "%s\n" "#define HWLOC_HAVE_LEVELZERO 1" >>confdefs.h
28012
28013 HWLOC_HAVE_LEVELZERO=1
28014
28015 hwloc_components="$hwloc_components levelzero"
28016 hwloc_levelzero_component_maybeplugin=1
28017 else
28018 HWLOC_HAVE_LEVELZERO=0
28019
28020 fi
28021 # don't add LIBS/CFLAGS/REQUIRES yet, depends on plugins
28022
2593428023 # GL Support
2593528024 hwloc_gl_happy=no
2593628025 if test "x$enable_io" != xno && test "x$enable_gl" != "xno"; then
2594028029 if test "$no_x" = yes; then
2594128030 # Not all programs may use this symbol, but it does not hurt to define it.
2594228031
25943 $as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h
28032 printf "%s\n" "#define X_DISPLAY_MISSING 1" >>confdefs.h
2594428033
2594528034 X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS=
2594628035 else
2595328042 X_LIBS="$X_LIBS -L$x_libraries"
2595428043 # For Solaris; some versions of Sun CC require a space after -R and
2595528044 # others require no space. Words are not sufficient . . . .
25956 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5
25957 $as_echo_n "checking whether -R must be followed by a space... " >&6; }
28045 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5
28046 printf %s "checking whether -R must be followed by a space... " >&6; }
2595828047 ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries"
2595928048 ac_xsave_c_werror_flag=$ac_c_werror_flag
2596028049 ac_c_werror_flag=yes
2596228051 /* end confdefs.h. */
2596328052
2596428053 int
25965 main ()
28054 main (void)
2596628055 {
2596728056
2596828057 ;
2596928058 return 0;
2597028059 }
2597128060 _ACEOF
25972 if ac_fn_c_try_link "$LINENO"; then :
25973 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
25974 $as_echo "no" >&6; }
28061 if ac_fn_c_try_link "$LINENO"
28062 then :
28063 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
28064 printf "%s\n" "no" >&6; }
2597528065 X_LIBS="$X_LIBS -R$x_libraries"
25976 else
28066 else $as_nop
2597728067 LIBS="$ac_xsave_LIBS -R $x_libraries"
2597828068 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2597928069 /* end confdefs.h. */
2598028070
2598128071 int
25982 main ()
28072 main (void)
2598328073 {
2598428074
2598528075 ;
2598628076 return 0;
2598728077 }
2598828078 _ACEOF
25989 if ac_fn_c_try_link "$LINENO"; then :
25990 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
25991 $as_echo "yes" >&6; }
28079 if ac_fn_c_try_link "$LINENO"
28080 then :
28081 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
28082 printf "%s\n" "yes" >&6; }
2599228083 X_LIBS="$X_LIBS -R $x_libraries"
25993 else
25994 { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5
25995 $as_echo "neither works" >&6; }
25996 fi
25997 rm -f core conftest.err conftest.$ac_objext \
28084 else $as_nop
28085 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: neither works" >&5
28086 printf "%s\n" "neither works" >&6; }
28087 fi
28088 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2599828089 conftest$ac_exeext conftest.$ac_ext
2599928090 fi
26000 rm -f core conftest.err conftest.$ac_objext \
28091 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2600128092 conftest$ac_exeext conftest.$ac_ext
2600228093 ac_c_werror_flag=$ac_xsave_c_werror_flag
2600328094 LIBS=$ac_xsave_LIBS
2602028111 /* Override any GCC internal prototype to avoid an error.
2602128112 Use char because int might match the return type of a GCC
2602228113 builtin and then its argument prototype would still apply. */
26023 #ifdef __cplusplus
26024 extern "C"
26025 #endif
2602628114 char XOpenDisplay ();
2602728115 int
26028 main ()
28116 main (void)
2602928117 {
2603028118 return XOpenDisplay ();
2603128119 ;
2603228120 return 0;
2603328121 }
2603428122 _ACEOF
26035 if ac_fn_c_try_link "$LINENO"; then :
26036
26037 else
26038 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5
26039 $as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; }
26040 if ${ac_cv_lib_dnet_dnet_ntoa+:} false; then :
26041 $as_echo_n "(cached) " >&6
26042 else
28123 if ac_fn_c_try_link "$LINENO"
28124 then :
28125
28126 else $as_nop
28127 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5
28128 printf %s "checking for dnet_ntoa in -ldnet... " >&6; }
28129 if test ${ac_cv_lib_dnet_dnet_ntoa+y}
28130 then :
28131 printf %s "(cached) " >&6
28132 else $as_nop
2604328133 ac_check_lib_save_LIBS=$LIBS
2604428134 LIBS="-ldnet $LIBS"
2604528135 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2604828138 /* Override any GCC internal prototype to avoid an error.
2604928139 Use char because int might match the return type of a GCC
2605028140 builtin and then its argument prototype would still apply. */
26051 #ifdef __cplusplus
26052 extern "C"
26053 #endif
2605428141 char dnet_ntoa ();
2605528142 int
26056 main ()
28143 main (void)
2605728144 {
2605828145 return dnet_ntoa ();
2605928146 ;
2606028147 return 0;
2606128148 }
2606228149 _ACEOF
26063 if ac_fn_c_try_link "$LINENO"; then :
28150 if ac_fn_c_try_link "$LINENO"
28151 then :
2606428152 ac_cv_lib_dnet_dnet_ntoa=yes
26065 else
28153 else $as_nop
2606628154 ac_cv_lib_dnet_dnet_ntoa=no
2606728155 fi
26068 rm -f core conftest.err conftest.$ac_objext \
28156 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2606928157 conftest$ac_exeext conftest.$ac_ext
2607028158 LIBS=$ac_check_lib_save_LIBS
2607128159 fi
26072 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5
26073 $as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; }
26074 if test "x$ac_cv_lib_dnet_dnet_ntoa" = xyes; then :
28160 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5
28161 printf "%s\n" "$ac_cv_lib_dnet_dnet_ntoa" >&6; }
28162 if test "x$ac_cv_lib_dnet_dnet_ntoa" = xyes
28163 then :
2607528164 X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
2607628165 fi
2607728166
2607828167 if test $ac_cv_lib_dnet_dnet_ntoa = no; then
26079 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5
26080 $as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; }
26081 if ${ac_cv_lib_dnet_stub_dnet_ntoa+:} false; then :
26082 $as_echo_n "(cached) " >&6
26083 else
28168 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5
28169 printf %s "checking for dnet_ntoa in -ldnet_stub... " >&6; }
28170 if test ${ac_cv_lib_dnet_stub_dnet_ntoa+y}
28171 then :
28172 printf %s "(cached) " >&6
28173 else $as_nop
2608428174 ac_check_lib_save_LIBS=$LIBS
2608528175 LIBS="-ldnet_stub $LIBS"
2608628176 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2608928179 /* Override any GCC internal prototype to avoid an error.
2609028180 Use char because int might match the return type of a GCC
2609128181 builtin and then its argument prototype would still apply. */
26092 #ifdef __cplusplus
26093 extern "C"
26094 #endif
2609528182 char dnet_ntoa ();
2609628183 int
26097 main ()
28184 main (void)
2609828185 {
2609928186 return dnet_ntoa ();
2610028187 ;
2610128188 return 0;
2610228189 }
2610328190 _ACEOF
26104 if ac_fn_c_try_link "$LINENO"; then :
28191 if ac_fn_c_try_link "$LINENO"
28192 then :
2610528193 ac_cv_lib_dnet_stub_dnet_ntoa=yes
26106 else
28194 else $as_nop
2610728195 ac_cv_lib_dnet_stub_dnet_ntoa=no
2610828196 fi
26109 rm -f core conftest.err conftest.$ac_objext \
28197 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2611028198 conftest$ac_exeext conftest.$ac_ext
2611128199 LIBS=$ac_check_lib_save_LIBS
2611228200 fi
26113 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5
26114 $as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; }
26115 if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = xyes; then :
28201 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5
28202 printf "%s\n" "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; }
28203 if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = xyes
28204 then :
2611628205 X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
2611728206 fi
2611828207
2611928208 fi
2612028209 fi
26121 rm -f core conftest.err conftest.$ac_objext \
28210 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2612228211 conftest$ac_exeext conftest.$ac_ext
2612328212 LIBS="$ac_xsave_LIBS"
2612428213
2613128220 # The functions gethostbyname, getservbyname, and inet_addr are
2613228221 # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking.
2613328222 ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname"
26134 if test "x$ac_cv_func_gethostbyname" = xyes; then :
28223 if test "x$ac_cv_func_gethostbyname" = xyes
28224 then :
2613528225
2613628226 fi
2613728227
2613828228 if test $ac_cv_func_gethostbyname = no; then
26139 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5
26140 $as_echo_n "checking for gethostbyname in -lnsl... " >&6; }
26141 if ${ac_cv_lib_nsl_gethostbyname+:} false; then :
26142 $as_echo_n "(cached) " >&6
26143 else
28229 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5
28230 printf %s "checking for gethostbyname in -lnsl... " >&6; }
28231 if test ${ac_cv_lib_nsl_gethostbyname+y}
28232 then :
28233 printf %s "(cached) " >&6
28234 else $as_nop
2614428235 ac_check_lib_save_LIBS=$LIBS
2614528236 LIBS="-lnsl $LIBS"
2614628237 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2614928240 /* Override any GCC internal prototype to avoid an error.
2615028241 Use char because int might match the return type of a GCC
2615128242 builtin and then its argument prototype would still apply. */
26152 #ifdef __cplusplus
26153 extern "C"
26154 #endif
2615528243 char gethostbyname ();
2615628244 int
26157 main ()
28245 main (void)
2615828246 {
2615928247 return gethostbyname ();
2616028248 ;
2616128249 return 0;
2616228250 }
2616328251 _ACEOF
26164 if ac_fn_c_try_link "$LINENO"; then :
28252 if ac_fn_c_try_link "$LINENO"
28253 then :
2616528254 ac_cv_lib_nsl_gethostbyname=yes
26166 else
28255 else $as_nop
2616728256 ac_cv_lib_nsl_gethostbyname=no
2616828257 fi
26169 rm -f core conftest.err conftest.$ac_objext \
28258 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2617028259 conftest$ac_exeext conftest.$ac_ext
2617128260 LIBS=$ac_check_lib_save_LIBS
2617228261 fi
26173 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5
26174 $as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; }
26175 if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then :
28262 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5
28263 printf "%s\n" "$ac_cv_lib_nsl_gethostbyname" >&6; }
28264 if test "x$ac_cv_lib_nsl_gethostbyname" = xyes
28265 then :
2617628266 X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
2617728267 fi
2617828268
2617928269 if test $ac_cv_lib_nsl_gethostbyname = no; then
26180 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5
26181 $as_echo_n "checking for gethostbyname in -lbsd... " >&6; }
26182 if ${ac_cv_lib_bsd_gethostbyname+:} false; then :
26183 $as_echo_n "(cached) " >&6
26184 else
28270 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5
28271 printf %s "checking for gethostbyname in -lbsd... " >&6; }
28272 if test ${ac_cv_lib_bsd_gethostbyname+y}
28273 then :
28274 printf %s "(cached) " >&6
28275 else $as_nop
2618528276 ac_check_lib_save_LIBS=$LIBS
2618628277 LIBS="-lbsd $LIBS"
2618728278 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2619028281 /* Override any GCC internal prototype to avoid an error.
2619128282 Use char because int might match the return type of a GCC
2619228283 builtin and then its argument prototype would still apply. */
26193 #ifdef __cplusplus
26194 extern "C"
26195 #endif
2619628284 char gethostbyname ();
2619728285 int
26198 main ()
28286 main (void)
2619928287 {
2620028288 return gethostbyname ();
2620128289 ;
2620228290 return 0;
2620328291 }
2620428292 _ACEOF
26205 if ac_fn_c_try_link "$LINENO"; then :
28293 if ac_fn_c_try_link "$LINENO"
28294 then :
2620628295 ac_cv_lib_bsd_gethostbyname=yes
26207 else
28296 else $as_nop
2620828297 ac_cv_lib_bsd_gethostbyname=no
2620928298 fi
26210 rm -f core conftest.err conftest.$ac_objext \
28299 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2621128300 conftest$ac_exeext conftest.$ac_ext
2621228301 LIBS=$ac_check_lib_save_LIBS
2621328302 fi
26214 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5
26215 $as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; }
26216 if test "x$ac_cv_lib_bsd_gethostbyname" = xyes; then :
28303 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5
28304 printf "%s\n" "$ac_cv_lib_bsd_gethostbyname" >&6; }
28305 if test "x$ac_cv_lib_bsd_gethostbyname" = xyes
28306 then :
2621728307 X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd"
2621828308 fi
2621928309
2622828318 # must be given before -lnsl if both are needed. We assume that
2622928319 # if connect needs -lnsl, so does gethostbyname.
2623028320 ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect"
26231 if test "x$ac_cv_func_connect" = xyes; then :
28321 if test "x$ac_cv_func_connect" = xyes
28322 then :
2623228323
2623328324 fi
2623428325
2623528326 if test $ac_cv_func_connect = no; then
26236 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5
26237 $as_echo_n "checking for connect in -lsocket... " >&6; }
26238 if ${ac_cv_lib_socket_connect+:} false; then :
26239 $as_echo_n "(cached) " >&6
26240 else
28327 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5
28328 printf %s "checking for connect in -lsocket... " >&6; }
28329 if test ${ac_cv_lib_socket_connect+y}
28330 then :
28331 printf %s "(cached) " >&6
28332 else $as_nop
2624128333 ac_check_lib_save_LIBS=$LIBS
2624228334 LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
2624328335 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2624628338 /* Override any GCC internal prototype to avoid an error.
2624728339 Use char because int might match the return type of a GCC
2624828340 builtin and then its argument prototype would still apply. */
26249 #ifdef __cplusplus
26250 extern "C"
26251 #endif
2625228341 char connect ();
2625328342 int
26254 main ()
28343 main (void)
2625528344 {
2625628345 return connect ();
2625728346 ;
2625828347 return 0;
2625928348 }
2626028349 _ACEOF
26261 if ac_fn_c_try_link "$LINENO"; then :
28350 if ac_fn_c_try_link "$LINENO"
28351 then :
2626228352 ac_cv_lib_socket_connect=yes
26263 else
28353 else $as_nop
2626428354 ac_cv_lib_socket_connect=no
2626528355 fi
26266 rm -f core conftest.err conftest.$ac_objext \
28356 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2626728357 conftest$ac_exeext conftest.$ac_ext
2626828358 LIBS=$ac_check_lib_save_LIBS
2626928359 fi
26270 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5
26271 $as_echo "$ac_cv_lib_socket_connect" >&6; }
26272 if test "x$ac_cv_lib_socket_connect" = xyes; then :
28360 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5
28361 printf "%s\n" "$ac_cv_lib_socket_connect" >&6; }
28362 if test "x$ac_cv_lib_socket_connect" = xyes
28363 then :
2627328364 X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
2627428365 fi
2627528366
2627728368
2627828369 # Guillermo Gomez says -lposix is necessary on A/UX.
2627928370 ac_fn_c_check_func "$LINENO" "remove" "ac_cv_func_remove"
26280 if test "x$ac_cv_func_remove" = xyes; then :
28371 if test "x$ac_cv_func_remove" = xyes
28372 then :
2628128373
2628228374 fi
2628328375
2628428376 if test $ac_cv_func_remove = no; then
26285 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5
26286 $as_echo_n "checking for remove in -lposix... " >&6; }
26287 if ${ac_cv_lib_posix_remove+:} false; then :
26288 $as_echo_n "(cached) " >&6
26289 else
28377 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5
28378 printf %s "checking for remove in -lposix... " >&6; }
28379 if test ${ac_cv_lib_posix_remove+y}
28380 then :
28381 printf %s "(cached) " >&6
28382 else $as_nop
2629028383 ac_check_lib_save_LIBS=$LIBS
2629128384 LIBS="-lposix $LIBS"
2629228385 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2629528388 /* Override any GCC internal prototype to avoid an error.
2629628389 Use char because int might match the return type of a GCC
2629728390 builtin and then its argument prototype would still apply. */
26298 #ifdef __cplusplus
26299 extern "C"
26300 #endif
2630128391 char remove ();
2630228392 int
26303 main ()
28393 main (void)
2630428394 {
2630528395 return remove ();
2630628396 ;
2630728397 return 0;
2630828398 }
2630928399 _ACEOF
26310 if ac_fn_c_try_link "$LINENO"; then :
28400 if ac_fn_c_try_link "$LINENO"
28401 then :
2631128402 ac_cv_lib_posix_remove=yes
26312 else
28403 else $as_nop
2631328404 ac_cv_lib_posix_remove=no
2631428405 fi
26315 rm -f core conftest.err conftest.$ac_objext \
28406 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2631628407 conftest$ac_exeext conftest.$ac_ext
2631728408 LIBS=$ac_check_lib_save_LIBS
2631828409 fi
26319 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5
26320 $as_echo "$ac_cv_lib_posix_remove" >&6; }
26321 if test "x$ac_cv_lib_posix_remove" = xyes; then :
28410 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5
28411 printf "%s\n" "$ac_cv_lib_posix_remove" >&6; }
28412 if test "x$ac_cv_lib_posix_remove" = xyes
28413 then :
2632228414 X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
2632328415 fi
2632428416
2632628418
2632728419 # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
2632828420 ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat"
26329 if test "x$ac_cv_func_shmat" = xyes; then :
28421 if test "x$ac_cv_func_shmat" = xyes
28422 then :
2633028423
2633128424 fi
2633228425
2633328426 if test $ac_cv_func_shmat = no; then
26334 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5
26335 $as_echo_n "checking for shmat in -lipc... " >&6; }
26336 if ${ac_cv_lib_ipc_shmat+:} false; then :
26337 $as_echo_n "(cached) " >&6
26338 else
28427 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5
28428 printf %s "checking for shmat in -lipc... " >&6; }
28429 if test ${ac_cv_lib_ipc_shmat+y}
28430 then :
28431 printf %s "(cached) " >&6
28432 else $as_nop
2633928433 ac_check_lib_save_LIBS=$LIBS
2634028434 LIBS="-lipc $LIBS"
2634128435 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2634428438 /* Override any GCC internal prototype to avoid an error.
2634528439 Use char because int might match the return type of a GCC
2634628440 builtin and then its argument prototype would still apply. */
26347 #ifdef __cplusplus
26348 extern "C"
26349 #endif
2635028441 char shmat ();
2635128442 int
26352 main ()
28443 main (void)
2635328444 {
2635428445 return shmat ();
2635528446 ;
2635628447 return 0;
2635728448 }
2635828449 _ACEOF
26359 if ac_fn_c_try_link "$LINENO"; then :
28450 if ac_fn_c_try_link "$LINENO"
28451 then :
2636028452 ac_cv_lib_ipc_shmat=yes
26361 else
28453 else $as_nop
2636228454 ac_cv_lib_ipc_shmat=no
2636328455 fi
26364 rm -f core conftest.err conftest.$ac_objext \
28456 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2636528457 conftest$ac_exeext conftest.$ac_ext
2636628458 LIBS=$ac_check_lib_save_LIBS
2636728459 fi
26368 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5
26369 $as_echo "$ac_cv_lib_ipc_shmat" >&6; }
26370 if test "x$ac_cv_lib_ipc_shmat" = xyes; then :
28460 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5
28461 printf "%s\n" "$ac_cv_lib_ipc_shmat" >&6; }
28462 if test "x$ac_cv_lib_ipc_shmat" = xyes
28463 then :
2637128464 X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
2637228465 fi
2637328466
2638328476 # These have to be linked with before -lX11, unlike the other
2638428477 # libraries we check for below, so use a different variable.
2638528478 # John Interrante, Karl Berry
26386 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5
26387 $as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; }
26388 if ${ac_cv_lib_ICE_IceConnectionNumber+:} false; then :
26389 $as_echo_n "(cached) " >&6
26390 else
28479 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5
28480 printf %s "checking for IceConnectionNumber in -lICE... " >&6; }
28481 if test ${ac_cv_lib_ICE_IceConnectionNumber+y}
28482 then :
28483 printf %s "(cached) " >&6
28484 else $as_nop
2639128485 ac_check_lib_save_LIBS=$LIBS
2639228486 LIBS="-lICE $X_EXTRA_LIBS $LIBS"
2639328487 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2639628490 /* Override any GCC internal prototype to avoid an error.
2639728491 Use char because int might match the return type of a GCC
2639828492 builtin and then its argument prototype would still apply. */
26399 #ifdef __cplusplus
26400 extern "C"
26401 #endif
2640228493 char IceConnectionNumber ();
2640328494 int
26404 main ()
28495 main (void)
2640528496 {
2640628497 return IceConnectionNumber ();
2640728498 ;
2640828499 return 0;
2640928500 }
2641028501 _ACEOF
26411 if ac_fn_c_try_link "$LINENO"; then :
28502 if ac_fn_c_try_link "$LINENO"
28503 then :
2641228504 ac_cv_lib_ICE_IceConnectionNumber=yes
26413 else
28505 else $as_nop
2641428506 ac_cv_lib_ICE_IceConnectionNumber=no
2641528507 fi
26416 rm -f core conftest.err conftest.$ac_objext \
28508 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2641728509 conftest$ac_exeext conftest.$ac_ext
2641828510 LIBS=$ac_check_lib_save_LIBS
2641928511 fi
26420 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5
26421 $as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; }
26422 if test "x$ac_cv_lib_ICE_IceConnectionNumber" = xyes; then :
28512 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5
28513 printf "%s\n" "$ac_cv_lib_ICE_IceConnectionNumber" >&6; }
28514 if test "x$ac_cv_lib_ICE_IceConnectionNumber" = xyes
28515 then :
2642328516 X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
2642428517 fi
2642528518
2643328526
2643428527 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
2643528528 LIBS="$LIBS $X_PRE_LIBS $X_LIBS $X_EXTRA_LIBS"
26436 for ac_header in X11/Xlib.h
28529 for ac_header in X11/Xlib.h
2643728530 do :
26438 ac_fn_c_check_header_mongrel "$LINENO" "X11/Xlib.h" "ac_cv_header_X11_Xlib_h" "$ac_includes_default"
26439 if test "x$ac_cv_header_X11_Xlib_h" = xyes; then :
26440 cat >>confdefs.h <<_ACEOF
26441 #define HAVE_X11_XLIB_H 1
26442 _ACEOF
26443 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XOpenDisplay in -lX11" >&5
26444 $as_echo_n "checking for XOpenDisplay in -lX11... " >&6; }
26445 if ${ac_cv_lib_X11_XOpenDisplay+:} false; then :
26446 $as_echo_n "(cached) " >&6
26447 else
28531 ac_fn_c_check_header_compile "$LINENO" "X11/Xlib.h" "ac_cv_header_X11_Xlib_h" "$ac_includes_default"
28532 if test "x$ac_cv_header_X11_Xlib_h" = xyes
28533 then :
28534 printf "%s\n" "#define HAVE_X11_XLIB_H 1" >>confdefs.h
28535 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XOpenDisplay in -lX11" >&5
28536 printf %s "checking for XOpenDisplay in -lX11... " >&6; }
28537 if test ${ac_cv_lib_X11_XOpenDisplay+y}
28538 then :
28539 printf %s "(cached) " >&6
28540 else $as_nop
2644828541 ac_check_lib_save_LIBS=$LIBS
2644928542 LIBS="-lX11 $LIBS"
2645028543 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2645328546 /* Override any GCC internal prototype to avoid an error.
2645428547 Use char because int might match the return type of a GCC
2645528548 builtin and then its argument prototype would still apply. */
26456 #ifdef __cplusplus
26457 extern "C"
26458 #endif
2645928549 char XOpenDisplay ();
2646028550 int
26461 main ()
28551 main (void)
2646228552 {
2646328553 return XOpenDisplay ();
2646428554 ;
2646528555 return 0;
2646628556 }
2646728557 _ACEOF
26468 if ac_fn_c_try_link "$LINENO"; then :
28558 if ac_fn_c_try_link "$LINENO"
28559 then :
2646928560 ac_cv_lib_X11_XOpenDisplay=yes
26470 else
28561 else $as_nop
2647128562 ac_cv_lib_X11_XOpenDisplay=no
2647228563 fi
26473 rm -f core conftest.err conftest.$ac_objext \
28564 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2647428565 conftest$ac_exeext conftest.$ac_ext
2647528566 LIBS=$ac_check_lib_save_LIBS
2647628567 fi
26477 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_X11_XOpenDisplay" >&5
26478 $as_echo "$ac_cv_lib_X11_XOpenDisplay" >&6; }
26479 if test "x$ac_cv_lib_X11_XOpenDisplay" = xyes; then :
28568 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_X11_XOpenDisplay" >&5
28569 printf "%s\n" "$ac_cv_lib_X11_XOpenDisplay" >&6; }
28570 if test "x$ac_cv_lib_X11_XOpenDisplay" = xyes
28571 then :
2648028572 hwloc_enable_X11=yes
2648128573 fi
2648228574
2648428576 fi
2648528577
2648628578 done
26487
2648828579 CPPFLAGS=$CPPFLAGS_save
2648928580 LIBS=$LIBS_save
2649028581
26491 if test "$hwloc_enable_X11" != "yes"; then :
26492 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: X11 not found; GL disabled" >&5
26493 $as_echo "$as_me: WARNING: X11 not found; GL disabled" >&2;}
28582 if test "$hwloc_enable_X11" != "yes"
28583 then :
28584 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: X11 not found; GL disabled" >&5
28585 printf "%s\n" "$as_me: WARNING: X11 not found; GL disabled" >&2;}
2649428586 hwloc_gl_happy=no
2649528587 fi
2649628588
26497 for ac_header in NVCtrl/NVCtrl.h
28589 for ac_header in NVCtrl/NVCtrl.h
2649828590 do :
26499 ac_fn_c_check_header_mongrel "$LINENO" "NVCtrl/NVCtrl.h" "ac_cv_header_NVCtrl_NVCtrl_h" "$ac_includes_default"
26500 if test "x$ac_cv_header_NVCtrl_NVCtrl_h" = xyes; then :
26501 cat >>confdefs.h <<_ACEOF
26502 #define HAVE_NVCTRL_NVCTRL_H 1
26503 _ACEOF
26504
26505 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XNVCTRLQueryTargetAttribute in -lXNVCtrl" >&5
26506 $as_echo_n "checking for XNVCTRLQueryTargetAttribute in -lXNVCtrl... " >&6; }
26507 if ${ac_cv_lib_XNVCtrl_XNVCTRLQueryTargetAttribute+:} false; then :
26508 $as_echo_n "(cached) " >&6
26509 else
28591 ac_fn_c_check_header_compile "$LINENO" "NVCtrl/NVCtrl.h" "ac_cv_header_NVCtrl_NVCtrl_h" "$ac_includes_default"
28592 if test "x$ac_cv_header_NVCtrl_NVCtrl_h" = xyes
28593 then :
28594 printf "%s\n" "#define HAVE_NVCTRL_NVCTRL_H 1" >>confdefs.h
28595
28596 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XNVCTRLQueryTargetAttribute in -lXNVCtrl" >&5
28597 printf %s "checking for XNVCTRLQueryTargetAttribute in -lXNVCtrl... " >&6; }
28598 if test ${ac_cv_lib_XNVCtrl_XNVCTRLQueryTargetAttribute+y}
28599 then :
28600 printf %s "(cached) " >&6
28601 else $as_nop
2651028602 ac_check_lib_save_LIBS=$LIBS
2651128603 LIBS="-lXNVCtrl -lXext $LIBS"
2651228604 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2651528607 /* Override any GCC internal prototype to avoid an error.
2651628608 Use char because int might match the return type of a GCC
2651728609 builtin and then its argument prototype would still apply. */
26518 #ifdef __cplusplus
26519 extern "C"
26520 #endif
2652128610 char XNVCTRLQueryTargetAttribute ();
2652228611 int
26523 main ()
28612 main (void)
2652428613 {
2652528614 return XNVCTRLQueryTargetAttribute ();
2652628615 ;
2652728616 return 0;
2652828617 }
2652928618 _ACEOF
26530 if ac_fn_c_try_link "$LINENO"; then :
28619 if ac_fn_c_try_link "$LINENO"
28620 then :
2653128621 ac_cv_lib_XNVCtrl_XNVCTRLQueryTargetAttribute=yes
26532 else
28622 else $as_nop
2653328623 ac_cv_lib_XNVCtrl_XNVCTRLQueryTargetAttribute=no
2653428624 fi
26535 rm -f core conftest.err conftest.$ac_objext \
28625 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2653628626 conftest$ac_exeext conftest.$ac_ext
2653728627 LIBS=$ac_check_lib_save_LIBS
2653828628 fi
26539 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_XNVCtrl_XNVCTRLQueryTargetAttribute" >&5
26540 $as_echo "$ac_cv_lib_XNVCtrl_XNVCTRLQueryTargetAttribute" >&6; }
26541 if test "x$ac_cv_lib_XNVCtrl_XNVCTRLQueryTargetAttribute" = xyes; then :
28629 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_XNVCtrl_XNVCTRLQueryTargetAttribute" >&5
28630 printf "%s\n" "$ac_cv_lib_XNVCtrl_XNVCTRLQueryTargetAttribute" >&6; }
28631 if test "x$ac_cv_lib_XNVCtrl_XNVCTRLQueryTargetAttribute" = xyes
28632 then :
2654228633 :
26543 else
28634 else $as_nop
2654428635 hwloc_gl_happy=no
2654528636 fi
2654628637
2654728638
26548 else
28639 else $as_nop
2654928640 hwloc_gl_happy=no
2655028641 fi
2655128642
2655228643 done
2655328644
26554
2655528645 if test "x$hwloc_gl_happy" = "xyes"; then
2655628646
26557 $as_echo "#define HWLOC_HAVE_GL 1" >>confdefs.h
28647 printf "%s\n" "#define HWLOC_HAVE_GL 1" >>confdefs.h
2655828648
2655928649 HWLOC_GL_LIBS="-lXNVCtrl -lXext -lX11"
2656028650
2656528655 hwloc_components="$hwloc_components gl"
2656628656 hwloc_gl_component_maybeplugin=1
2656728657 else
26568 if test "$enable_gl" = "yes"; then :
26569
26570 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Specified --enable-gl switch, but could not" >&5
26571 $as_echo "$as_me: WARNING: Specified --enable-gl switch, but could not" >&2;}
26572 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: find appropriate support" >&5
26573 $as_echo "$as_me: WARNING: find appropriate support" >&2;}
28658 if test "$enable_gl" = "yes"
28659 then :
28660
28661 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Specified --enable-gl switch, but could not" >&5
28662 printf "%s\n" "$as_me: WARNING: Specified --enable-gl switch, but could not" >&2;}
28663 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: find appropriate support" >&5
28664 printf "%s\n" "$as_me: WARNING: find appropriate support" >&2;}
2657428665 as_fn_error $? "Cannot continue" "$LINENO" 5
2657528666
2657628667 fi
2658428675
2658528676
2658628677 HWLOC_pkg_failed=no
26587 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBXML2" >&5
26588 $as_echo_n "checking for LIBXML2... " >&6; }
28678 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for LIBXML2" >&5
28679 printf %s "checking for LIBXML2... " >&6; }
2658928680
2659028681 if test -n "$PKG_CONFIG"; then
2659128682 if test -n "$HWLOC_LIBXML2_CFLAGS"; then
2659228683 HWLOC_pkg_cv_HWLOC_LIBXML2_CFLAGS="$HWLOC_LIBXML2_CFLAGS"
2659328684 else
2659428685 if test -n "$PKG_CONFIG" && \
26595 { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --silence-errors \"libxml-2.0\""; } >&5
28686 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --silence-errors \"libxml-2.0\""; } >&5
2659628687 ($PKG_CONFIG --exists --silence-errors "libxml-2.0") 2>&5
2659728688 ac_status=$?
26598 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
28689 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
2659928690 test $ac_status = 0; }; then
2660028691 HWLOC_pkg_cv_HWLOC_LIBXML2_CFLAGS=`$PKG_CONFIG --cflags "libxml-2.0" 2>/dev/null`
2660128692 else
2661128702 HWLOC_pkg_cv_HWLOC_LIBXML2_LIBS="$HWLOC_LIBXML2_LIBS"
2661228703 else
2661328704 if test -n "$PKG_CONFIG" && \
26614 { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --silence-errors \"libxml-2.0\""; } >&5
28705 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --silence-errors \"libxml-2.0\""; } >&5
2661528706 ($PKG_CONFIG --exists --silence-errors "libxml-2.0") 2>&5
2661628707 ac_status=$?
26617 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
28708 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
2661828709 test $ac_status = 0; }; then
2661928710 HWLOC_pkg_cv_HWLOC_LIBXML2_LIBS=`$PKG_CONFIG --libs "libxml-2.0" 2>/dev/null`
2662028711 else
2664428735 # Put the nasty error message in config.log where it belongs
2664528736 echo "$HWLOC_LIBXML2_PKG_ERRORS" >&5
2664628737
26647 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
26648 $as_echo "no" >&6; }
28738 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
28739 printf "%s\n" "no" >&6; }
2664928740 hwloc_libxml2_happy=no
2665028741 elif test $HWLOC_pkg_failed = untried; then
26651 { $as_echo "$as_me:${as_lineno-$LINENO}: result: cannot check without pkg-config" >&5
26652 $as_echo "cannot check without pkg-config" >&6; }
28742 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cannot check without pkg-config" >&5
28743 printf "%s\n" "cannot check without pkg-config" >&6; }
2665328744 hwloc_libxml2_happy=no
2665428745 else
26655 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
26656 $as_echo "yes" >&6; }
28746 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
28747 printf "%s\n" "yes" >&6; }
2665728748
2665828749 # If we got good results from pkg-config, check that they
2665928750 # actually work (i.e., that we can link against the resulting
2667228763 CFLAGS="$CFLAGS $HWLOC_pkg_cv_HWLOC_LIBXML2_CFLAGS"
2667328764 CPPFLAGS="$CPPFLAGS $HWLOC_pkg_cv_HWLOC_LIBXML2_CFLAGS"
2667428765 LIBS="$LIBS $HWLOC_pkg_cv_HWLOC_LIBXML2_LIBS"
26675 ac_fn_c_check_header_mongrel "$LINENO" "libxml/parser.h" "ac_cv_header_libxml_parser_h" "$ac_includes_default"
26676 if test "x$ac_cv_header_libxml_parser_h" = xyes; then :
28766 ac_fn_c_check_header_compile "$LINENO" "libxml/parser.h" "ac_cv_header_libxml_parser_h" "$ac_includes_default"
28767 if test "x$ac_cv_header_libxml_parser_h" = xyes
28768 then :
2667728769
2667828770 ac_fn_c_check_func "$LINENO" "xmlNewDoc" "ac_cv_func_xmlNewDoc"
26679 if test "x$ac_cv_func_xmlNewDoc" = xyes; then :
28771 if test "x$ac_cv_func_xmlNewDoc" = xyes
28772 then :
2668028773 hwloc_result=yes
26681 else
28774 else $as_nop
2668228775 hwloc_result=no
2668328776 fi
2668428777
2668528778
26686 else
28779 else $as_nop
2668728780 hwloc_result=no
2668828781 fi
26689
2669028782
2669128783 CFLAGS=$hwloc_cflags_save
2669228784 CPPFLAGS=$hwloc_cppflags_save
2669328785 LIBS=$hwloc_libs_save
2669428786
26695 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for final LIBXML2 support" >&5
26696 $as_echo_n "checking for final LIBXML2 support... " >&6; }
26697 if test "$hwloc_result" = "yes"; then :
28787 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for final LIBXML2 support" >&5
28788 printf %s "checking for final LIBXML2 support... " >&6; }
28789 if test "$hwloc_result" = "yes"
28790 then :
2669828791 HWLOC_LIBXML2_CFLAGS=$HWLOC_pkg_cv_HWLOC_LIBXML2_CFLAGS
2669928792 HWLOC_LIBXML2_LIBS=$HWLOC_pkg_cv_HWLOC_LIBXML2_LIBS
26700 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
26701 $as_echo "yes" >&6; }
28793 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
28794 printf "%s\n" "yes" >&6; }
2670228795 hwloc_libxml2_happy=yes
26703 else
26704 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
26705 $as_echo "no" >&6; }
28796 else $as_nop
28797 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
28798 printf "%s\n" "no" >&6; }
2670628799 hwloc_libxml2_happy=no
2670728800 fi
2670828801 fi
2671028803 if test "x$hwloc_libxml2_happy" = "xyes"; then
2671128804 HWLOC_LIBXML2_REQUIRES="libxml-2.0"
2671228805
26713 $as_echo "#define HWLOC_HAVE_LIBXML2 1" >>confdefs.h
28806 printf "%s\n" "#define HWLOC_HAVE_LIBXML2 1" >>confdefs.h
2671428807
2671528808 HWLOC_HAVE_LIBXML2=1
2671628809
2672028813 else
2672128814 HWLOC_HAVE_LIBXML2=0
2672228815
26723 if test "$enable_libxml2" = "yes"; then :
26724 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-libxml2 requested, but libxml2 was not found" >&5
26725 $as_echo "$as_me: WARNING: --enable-libxml2 requested, but libxml2 was not found" >&2;}
28816 if test "$enable_libxml2" = "yes"
28817 then :
28818 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: --enable-libxml2 requested, but libxml2 was not found" >&5
28819 printf "%s\n" "$as_me: WARNING: --enable-libxml2 requested, but libxml2 was not found" >&2;}
2672628820 as_fn_error $? "Cannot continue" "$LINENO" 5
2672728821 fi
2672828822 fi
2673028824
2673128825 # Try to compile the x86 cpuid inlines
2673228826 if test "x$enable_cpuid" != "xno"; then
26733 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid" >&5
26734 $as_echo_n "checking for x86 cpuid... " >&6; }
28827 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for x86 cpuid" >&5
28828 printf %s "checking for x86 cpuid... " >&6; }
2673528829 old_CPPFLAGS="$CPPFLAGS"
2673628830 CPPFLAGS="$CPPFLAGS -I$HWLOC_top_srcdir/include"
2673728831 # We need hwloc_uint64_t but we can't use autogen/config.h before configure ends.
2675728851 #include <private/cpuid-x86.h>
2675828852
2675928853 int
26760 main ()
28854 main (void)
2676128855 {
2676228856
2676328857 if (hwloc_have_x86_cpuid()) {
2677128865 return 0;
2677228866 }
2677328867 _ACEOF
26774 if ac_fn_c_try_link "$LINENO"; then :
26775 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
26776 $as_echo "yes" >&6; }
26777
26778 $as_echo "#define HWLOC_HAVE_X86_CPUID 1" >>confdefs.h
28868 if ac_fn_c_try_link "$LINENO"
28869 then :
28870 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
28871 printf "%s\n" "yes" >&6; }
28872
28873 printf "%s\n" "#define HWLOC_HAVE_X86_CPUID 1" >>confdefs.h
2677928874
2678028875 hwloc_have_x86_cpuid=yes
26781 else
26782 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
26783 $as_echo "no" >&6; }
26784 fi
26785 rm -f core conftest.err conftest.$ac_objext \
28876 else $as_nop
28877 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
28878 printf "%s\n" "no" >&6; }
28879 fi
28880 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2678628881 conftest$ac_exeext conftest.$ac_ext
2678728882 if test "x$hwloc_have_x86_cpuid" = xyes; then
2678828883 hwloc_components="$hwloc_components x86"
2679428889 hwloc_pthread_mutex_happy=no
2679528890 # Try without explicit -lpthread first
2679628891 ac_fn_c_check_func "$LINENO" "pthread_mutex_lock" "ac_cv_func_pthread_mutex_lock"
26797 if test "x$ac_cv_func_pthread_mutex_lock" = xyes; then :
28892 if test "x$ac_cv_func_pthread_mutex_lock" = xyes
28893 then :
2679828894 hwloc_pthread_mutex_happy=yes
2679928895 HWLOC_LIBS_PRIVATE="$HWLOC_LIBS_PRIVATE -lpthread"
2680028896
26801 else
26802 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_lock with -lpthread" >&5
26803 $as_echo_n "checking for pthread_mutex_lock with -lpthread... " >&6; }
28897 else $as_nop
28898 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_mutex_lock with -lpthread" >&5
28899 printf %s "checking for pthread_mutex_lock with -lpthread... " >&6; }
2680428900 # Try again with explicit -lpthread, but don't use AC_CHECK_FUNC to avoid the cache
2680528901 tmp_save_LIBS=$LIBS
2680628902 LIBS="$LIBS -lpthread"
2681028906 /* Override any GCC internal prototype to avoid an error.
2681128907 Use char because int might match the return type of a GCC
2681228908 builtin and then its argument prototype would still apply. */
26813 #ifdef __cplusplus
26814 extern "C"
26815 #endif
2681628909 char pthread_mutex_lock ();
2681728910 int
26818 main ()
28911 main (void)
2681928912 {
2682028913 return pthread_mutex_lock ();
2682128914 ;
2682228915 return 0;
2682328916 }
2682428917 _ACEOF
26825 if ac_fn_c_try_link "$LINENO"; then :
28918 if ac_fn_c_try_link "$LINENO"
28919 then :
2682628920 hwloc_pthread_mutex_happy=yes
2682728921 HWLOC_LIBS="$HWLOC_LIBS -lpthread"
2682828922
2682928923 fi
26830 rm -f core conftest.err conftest.$ac_objext \
28924 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2683128925 conftest$ac_exeext conftest.$ac_ext
26832 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hwloc_pthread_mutex_happy" >&5
26833 $as_echo "$hwloc_pthread_mutex_happy" >&6; }
28926 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hwloc_pthread_mutex_happy" >&5
28927 printf "%s\n" "$hwloc_pthread_mutex_happy" >&6; }
2683428928 LIBS="$tmp_save_LIBS"
2683528929
2683628930 fi
2683728931
26838 if test "x$hwloc_pthread_mutex_happy" = "xyes"; then :
26839
26840 $as_echo "#define HWLOC_HAVE_PTHREAD_MUTEX 1" >>confdefs.h
26841
26842 fi
26843
26844 if test "x$hwloc_pthread_mutex_happy" != xyes -a "x$hwloc_windows" != xyes; then :
26845 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: pthread_mutex_lock not available, required for thread-safe initialization on non-Windows platforms." >&5
26846 $as_echo "$as_me: WARNING: pthread_mutex_lock not available, required for thread-safe initialization on non-Windows platforms." >&2;}
26847 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Please report this to the hwloc-devel mailing list." >&5
26848 $as_echo "$as_me: WARNING: Please report this to the hwloc-devel mailing list." >&2;}
28932 if test "x$hwloc_pthread_mutex_happy" = "xyes"
28933 then :
28934
28935 printf "%s\n" "#define HWLOC_HAVE_PTHREAD_MUTEX 1" >>confdefs.h
28936
28937 fi
28938
28939 if test "x$hwloc_pthread_mutex_happy" != xyes -a "x$hwloc_windows" != xyes
28940 then :
28941 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: pthread_mutex_lock not available, required for thread-safe initialization on non-Windows platforms." >&5
28942 printf "%s\n" "$as_me: WARNING: pthread_mutex_lock not available, required for thread-safe initialization on non-Windows platforms." >&2;}
28943 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Please report this to the hwloc-devel mailing list." >&5
28944 printf "%s\n" "$as_me: WARNING: Please report this to the hwloc-devel mailing list." >&2;}
2684928945 as_fn_error $? "Cannot continue" "$LINENO" 5
2685028946 fi
2685128947
2685428950 #
2685528951
2685628952 # Plugin support
26857 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if plugin support is enabled" >&5
26858 $as_echo_n "checking if plugin support is enabled... " >&6; }
28953 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if plugin support is enabled" >&5
28954 printf %s "checking if plugin support is enabled... " >&6; }
2685928955 # Plugins (even core support) are totally disabled by default.
2686028956 # Pass --enable-plugins=foo (with "foo" NOT an existing component) to enable plugins but build none of them.
2686128957 if test "x$enable_plugins" = xyes; then
2686728963 else
2686828964 hwloc_have_plugins=no
2686928965 fi fi
26870 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hwloc_have_plugins" >&5
26871 $as_echo "$hwloc_have_plugins" >&6; }
28966 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hwloc_have_plugins" >&5
28967 printf "%s\n" "$hwloc_have_plugins" >&6; }
2687228968
2687328969 if test "x$hwloc_have_plugins" = xyes; then
2687428970 # dlopen and ltdl (at least 2.4.2) doesn't work on AIX
2687528971 # posix linkers don't work well with plugins and windows dll constraints
2687628972 if test "x$enable_plugin_dlopen" = x; then
2687728973 if test "x$hwloc_aix" = "xyes"; then
26878 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: dlopen does not work on AIX, disabled by default." >&5
26879 $as_echo "$as_me: WARNING: dlopen does not work on AIX, disabled by default." >&2;}
28974 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: dlopen does not work on AIX, disabled by default." >&5
28975 printf "%s\n" "$as_me: WARNING: dlopen does not work on AIX, disabled by default." >&2;}
2688028976 enable_plugin_dlopen=no
2688128977 else if test "x$hwloc_windows" = "xyes"; then
26882 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: dlopen not supported on non-native Windows build, disabled by default." >&5
26883 $as_echo "$as_me: WARNING: dlopen not supported on non-native Windows build, disabled by default." >&2;}
28978 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: dlopen not supported on non-native Windows build, disabled by default." >&5
28979 printf "%s\n" "$as_me: WARNING: dlopen not supported on non-native Windows build, disabled by default." >&2;}
2688428980 enable_plugin_dlopen=no
2688528981 fi fi
2688628982 fi
2688728983 if test "x$enable_plugin_ltdl" = x; then
2688828984 if test "x$hwloc_aix" = "xyes"; then
26889 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ltdl does not work on AIX, disabled by default." >&5
26890 $as_echo "$as_me: WARNING: ltdl does not work on AIX, disabled by default." >&2;}
28985 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: ltdl does not work on AIX, disabled by default." >&5
28986 printf "%s\n" "$as_me: WARNING: ltdl does not work on AIX, disabled by default." >&2;}
2689128987 enable_plugin_dlopen=no
2689228988 else if test "x$hwloc_windows" = "xyes"; then
26893 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ltdl not supported on non-native Windows build, disabled by default." >&5
26894 $as_echo "$as_me: WARNING: ltdl not supported on non-native Windows build, disabled by default." >&2;}
28989 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: ltdl not supported on non-native Windows build, disabled by default." >&5
28990 printf "%s\n" "$as_me: WARNING: ltdl not supported on non-native Windows build, disabled by default." >&2;}
2689528991 enable_plugin_dlopen=no
2689628992 fi fi
2689728993 fi
2690028996 if test "x$enable_plugin_dlopen" != xno; then
2690128997
2690228998 hwloc_dlopen_ready=no
26903 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen" >&5
26904 $as_echo_n "checking for dlopen... " >&6; }
28999 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen" >&5
29000 printf %s "checking for dlopen... " >&6; }
2690529001 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2690629002 /* end confdefs.h. */
2690729003
2691129007 void *handle;
2691229008
2691329009 int
26914 main ()
29010 main (void)
2691529011 {
2691629012
2691729013 handle = dlopen(NULL, RTLD_NOW|RTLD_LOCAL);
2692029016 return 0;
2692129017 }
2692229018 _ACEOF
26923 if ac_fn_c_try_link "$LINENO"; then :
26924 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
26925 $as_echo "yes" >&6; }
29019 if ac_fn_c_try_link "$LINENO"
29020 then :
29021 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
29022 printf "%s\n" "yes" >&6; }
2692629023 hwloc_dlopen_ready=yes
26927 else
26928 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
26929 $as_echo "no" >&6; }
26930 ac_fn_c_check_header_mongrel "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default"
26931 if test "x$ac_cv_header_dlfcn_h" = xyes; then :
26932 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
26933 $as_echo_n "checking for dlopen in -ldl... " >&6; }
26934 if ${ac_cv_lib_dl_dlopen+:} false; then :
26935 $as_echo_n "(cached) " >&6
26936 else
29024 else $as_nop
29025 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
29026 printf "%s\n" "no" >&6; }
29027 ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default"
29028 if test "x$ac_cv_header_dlfcn_h" = xyes
29029 then :
29030 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
29031 printf %s "checking for dlopen in -ldl... " >&6; }
29032 if test ${ac_cv_lib_dl_dlopen+y}
29033 then :
29034 printf %s "(cached) " >&6
29035 else $as_nop
2693729036 ac_check_lib_save_LIBS=$LIBS
2693829037 LIBS="-ldl $LIBS"
2693929038 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2694229041 /* Override any GCC internal prototype to avoid an error.
2694329042 Use char because int might match the return type of a GCC
2694429043 builtin and then its argument prototype would still apply. */
26945 #ifdef __cplusplus
26946 extern "C"
26947 #endif
2694829044 char dlopen ();
2694929045 int
26950 main ()
29046 main (void)
2695129047 {
2695229048 return dlopen ();
2695329049 ;
2695429050 return 0;
2695529051 }
2695629052 _ACEOF
26957 if ac_fn_c_try_link "$LINENO"; then :
29053 if ac_fn_c_try_link "$LINENO"
29054 then :
2695829055 ac_cv_lib_dl_dlopen=yes
26959 else
29056 else $as_nop
2696029057 ac_cv_lib_dl_dlopen=no
2696129058 fi
26962 rm -f core conftest.err conftest.$ac_objext \
29059 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2696329060 conftest$ac_exeext conftest.$ac_ext
2696429061 LIBS=$ac_check_lib_save_LIBS
2696529062 fi
26966 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
26967 $as_echo "$ac_cv_lib_dl_dlopen" >&6; }
26968 if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
29063 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
29064 printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; }
29065 if test "x$ac_cv_lib_dl_dlopen" = xyes
29066 then :
2696929067 hwloc_dlopen_ready=yes
2697029068 hwloc_dlopen_libs=-ldl
2697129069 fi
2697429072 fi
2697529073
2697629074
26977
26978 fi
26979 rm -f core conftest.err conftest.$ac_objext \
29075 fi
29076 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2698029077 conftest$ac_exeext conftest.$ac_ext
2698129078
2698229079 fi
2698429081 if test "x$enable_plugin_ltdl" != xno; then
2698529082
2698629083 hwloc_ltdl_ready=no
26987 ac_fn_c_check_header_mongrel "$LINENO" "ltdl.h" "ac_cv_header_ltdl_h" "$ac_includes_default"
26988 if test "x$ac_cv_header_ltdl_h" = xyes; then :
26989 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lt_dlopenext in -lltdl" >&5
26990 $as_echo_n "checking for lt_dlopenext in -lltdl... " >&6; }
26991 if ${ac_cv_lib_ltdl_lt_dlopenext+:} false; then :
26992 $as_echo_n "(cached) " >&6
26993 else
29084 ac_fn_c_check_header_compile "$LINENO" "ltdl.h" "ac_cv_header_ltdl_h" "$ac_includes_default"
29085 if test "x$ac_cv_header_ltdl_h" = xyes
29086 then :
29087 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for lt_dlopenext in -lltdl" >&5
29088 printf %s "checking for lt_dlopenext in -lltdl... " >&6; }
29089 if test ${ac_cv_lib_ltdl_lt_dlopenext+y}
29090 then :
29091 printf %s "(cached) " >&6
29092 else $as_nop
2699429093 ac_check_lib_save_LIBS=$LIBS
2699529094 LIBS="-lltdl $LIBS"
2699629095 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2699929098 /* Override any GCC internal prototype to avoid an error.
2700029099 Use char because int might match the return type of a GCC
2700129100 builtin and then its argument prototype would still apply. */
27002 #ifdef __cplusplus
27003 extern "C"
27004 #endif
2700529101 char lt_dlopenext ();
2700629102 int
27007 main ()
29103 main (void)
2700829104 {
2700929105 return lt_dlopenext ();
2701029106 ;
2701129107 return 0;
2701229108 }
2701329109 _ACEOF
27014 if ac_fn_c_try_link "$LINENO"; then :
29110 if ac_fn_c_try_link "$LINENO"
29111 then :
2701529112 ac_cv_lib_ltdl_lt_dlopenext=yes
27016 else
29113 else $as_nop
2701729114 ac_cv_lib_ltdl_lt_dlopenext=no
2701829115 fi
27019 rm -f core conftest.err conftest.$ac_objext \
29116 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2702029117 conftest$ac_exeext conftest.$ac_ext
2702129118 LIBS=$ac_check_lib_save_LIBS
2702229119 fi
27023 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ltdl_lt_dlopenext" >&5
27024 $as_echo "$ac_cv_lib_ltdl_lt_dlopenext" >&6; }
27025 if test "x$ac_cv_lib_ltdl_lt_dlopenext" = xyes; then :
29120 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ltdl_lt_dlopenext" >&5
29121 printf "%s\n" "$ac_cv_lib_ltdl_lt_dlopenext" >&6; }
29122 if test "x$ac_cv_lib_ltdl_lt_dlopenext" = xyes
29123 then :
2702629124 hwloc_ltdl_ready=yes
2702729125 hwloc_ltdl_libs=-lltdl
2702829126 fi
2703129129 fi
2703229130
2703329131
27034
2703529132 fi
2703629133
2703729134 # Now use dlopen by default, or ltdl, or just fail to enable plugins
27038 { $as_echo "$as_me:${as_lineno-$LINENO}: checking which library to use for loading plugins" >&5
27039 $as_echo_n "checking which library to use for loading plugins... " >&6; }
29135 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which library to use for loading plugins" >&5
29136 printf %s "checking which library to use for loading plugins... " >&6; }
2704029137 if test "x$hwloc_dlopen_ready" = xyes; then
27041 { $as_echo "$as_me:${as_lineno-$LINENO}: result: dlopen" >&5
27042 $as_echo "dlopen" >&6; }
29138 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: dlopen" >&5
29139 printf "%s\n" "dlopen" >&6; }
2704329140 hwloc_plugins_load=dlopen
2704429141 # Now enable dlopen libs
2704529142 HWLOC_DL_LIBS="$hwloc_dlopen_libs"
2704629143
2704729144 else if test x$hwloc_ltdl_ready = xyes; then
27048 { $as_echo "$as_me:${as_lineno-$LINENO}: result: ltdl" >&5
27049 $as_echo "ltdl" >&6; }
29145 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ltdl" >&5
29146 printf "%s\n" "ltdl" >&6; }
2705029147 hwloc_plugins_load=ltdl
2705129148 # Now enable ltdl libs
2705229149
27053 $as_echo "#define HWLOC_HAVE_LTDL 1" >>confdefs.h
29150 printf "%s\n" "#define HWLOC_HAVE_LTDL 1" >>confdefs.h
2705429151
2705529152 HWLOC_LTDL_LIBS="$hwloc_ltdl_libs"
2705629153
2708129178
2708229179 darwin*)
2708329180 # if libdl is installed we need to link against it
27084 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
27085 $as_echo_n "checking for dlopen in -ldl... " >&6; }
27086 if ${ac_cv_lib_dl_dlopen+:} false; then :
27087 $as_echo_n "(cached) " >&6
27088 else
29181 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
29182 printf %s "checking for dlopen in -ldl... " >&6; }
29183 if test ${ac_cv_lib_dl_dlopen+y}
29184 then :
29185 printf %s "(cached) " >&6
29186 else $as_nop
2708929187 ac_check_lib_save_LIBS=$LIBS
2709029188 LIBS="-ldl $LIBS"
2709129189 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2709429192 /* Override any GCC internal prototype to avoid an error.
2709529193 Use char because int might match the return type of a GCC
2709629194 builtin and then its argument prototype would still apply. */
27097 #ifdef __cplusplus
27098 extern "C"
27099 #endif
2710029195 char dlopen ();
2710129196 int
27102 main ()
29197 main (void)
2710329198 {
2710429199 return dlopen ();
2710529200 ;
2710629201 return 0;
2710729202 }
2710829203 _ACEOF
27109 if ac_fn_c_try_link "$LINENO"; then :
29204 if ac_fn_c_try_link "$LINENO"
29205 then :
2711029206 ac_cv_lib_dl_dlopen=yes
27111 else
29207 else $as_nop
2711229208 ac_cv_lib_dl_dlopen=no
2711329209 fi
27114 rm -f core conftest.err conftest.$ac_objext \
29210 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2711529211 conftest$ac_exeext conftest.$ac_ext
2711629212 LIBS=$ac_check_lib_save_LIBS
2711729213 fi
27118 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
27119 $as_echo "$ac_cv_lib_dl_dlopen" >&6; }
27120 if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
29214 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
29215 printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; }
29216 if test "x$ac_cv_lib_dl_dlopen" = xyes
29217 then :
2712129218 lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
27122 else
29219 else $as_nop
2712329220
2712429221 lt_cv_dlopen="dyld"
2712529222 lt_cv_dlopen_libs=
2713129228
2713229229 *)
2713329230 ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
27134 if test "x$ac_cv_func_shl_load" = xyes; then :
29231 if test "x$ac_cv_func_shl_load" = xyes
29232 then :
2713529233 lt_cv_dlopen="shl_load"
27136 else
27137 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
27138 $as_echo_n "checking for shl_load in -ldld... " >&6; }
27139 if ${ac_cv_lib_dld_shl_load+:} false; then :
27140 $as_echo_n "(cached) " >&6
27141 else
29234 else $as_nop
29235 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
29236 printf %s "checking for shl_load in -ldld... " >&6; }
29237 if test ${ac_cv_lib_dld_shl_load+y}
29238 then :
29239 printf %s "(cached) " >&6
29240 else $as_nop
2714229241 ac_check_lib_save_LIBS=$LIBS
2714329242 LIBS="-ldld $LIBS"
2714429243 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2714729246 /* Override any GCC internal prototype to avoid an error.
2714829247 Use char because int might match the return type of a GCC
2714929248 builtin and then its argument prototype would still apply. */
27150 #ifdef __cplusplus
27151 extern "C"
27152 #endif
2715329249 char shl_load ();
2715429250 int
27155 main ()
29251 main (void)
2715629252 {
2715729253 return shl_load ();
2715829254 ;
2715929255 return 0;
2716029256 }
2716129257 _ACEOF
27162 if ac_fn_c_try_link "$LINENO"; then :
29258 if ac_fn_c_try_link "$LINENO"
29259 then :
2716329260 ac_cv_lib_dld_shl_load=yes
27164 else
29261 else $as_nop
2716529262 ac_cv_lib_dld_shl_load=no
2716629263 fi
27167 rm -f core conftest.err conftest.$ac_objext \
29264 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2716829265 conftest$ac_exeext conftest.$ac_ext
2716929266 LIBS=$ac_check_lib_save_LIBS
2717029267 fi
27171 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
27172 $as_echo "$ac_cv_lib_dld_shl_load" >&6; }
27173 if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
29268 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
29269 printf "%s\n" "$ac_cv_lib_dld_shl_load" >&6; }
29270 if test "x$ac_cv_lib_dld_shl_load" = xyes
29271 then :
2717429272 lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
27175 else
29273 else $as_nop
2717629274 ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
27177 if test "x$ac_cv_func_dlopen" = xyes; then :
29275 if test "x$ac_cv_func_dlopen" = xyes
29276 then :
2717829277 lt_cv_dlopen="dlopen"
27179 else
27180 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
27181 $as_echo_n "checking for dlopen in -ldl... " >&6; }
27182 if ${ac_cv_lib_dl_dlopen+:} false; then :
27183 $as_echo_n "(cached) " >&6
27184 else
29278 else $as_nop
29279 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
29280 printf %s "checking for dlopen in -ldl... " >&6; }
29281 if test ${ac_cv_lib_dl_dlopen+y}
29282 then :
29283 printf %s "(cached) " >&6
29284 else $as_nop
2718529285 ac_check_lib_save_LIBS=$LIBS
2718629286 LIBS="-ldl $LIBS"
2718729287 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2719029290 /* Override any GCC internal prototype to avoid an error.
2719129291 Use char because int might match the return type of a GCC
2719229292 builtin and then its argument prototype would still apply. */
27193 #ifdef __cplusplus
27194 extern "C"
27195 #endif
2719629293 char dlopen ();
2719729294 int
27198 main ()
29295 main (void)
2719929296 {
2720029297 return dlopen ();
2720129298 ;
2720229299 return 0;
2720329300 }
2720429301 _ACEOF
27205 if ac_fn_c_try_link "$LINENO"; then :
29302 if ac_fn_c_try_link "$LINENO"
29303 then :
2720629304 ac_cv_lib_dl_dlopen=yes
27207 else
29305 else $as_nop
2720829306 ac_cv_lib_dl_dlopen=no
2720929307 fi
27210 rm -f core conftest.err conftest.$ac_objext \
29308 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2721129309 conftest$ac_exeext conftest.$ac_ext
2721229310 LIBS=$ac_check_lib_save_LIBS
2721329311 fi
27214 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
27215 $as_echo "$ac_cv_lib_dl_dlopen" >&6; }
27216 if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
29312 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
29313 printf "%s\n" "$ac_cv_lib_dl_dlopen" >&6; }
29314 if test "x$ac_cv_lib_dl_dlopen" = xyes
29315 then :
2721729316 lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
27218 else
27219 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
27220 $as_echo_n "checking for dlopen in -lsvld... " >&6; }
27221 if ${ac_cv_lib_svld_dlopen+:} false; then :
27222 $as_echo_n "(cached) " >&6
27223 else
29317 else $as_nop
29318 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
29319 printf %s "checking for dlopen in -lsvld... " >&6; }
29320 if test ${ac_cv_lib_svld_dlopen+y}
29321 then :
29322 printf %s "(cached) " >&6
29323 else $as_nop
2722429324 ac_check_lib_save_LIBS=$LIBS
2722529325 LIBS="-lsvld $LIBS"
2722629326 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2722929329 /* Override any GCC internal prototype to avoid an error.
2723029330 Use char because int might match the return type of a GCC
2723129331 builtin and then its argument prototype would still apply. */
27232 #ifdef __cplusplus
27233 extern "C"
27234 #endif
2723529332 char dlopen ();
2723629333 int
27237 main ()
29334 main (void)
2723829335 {
2723929336 return dlopen ();
2724029337 ;
2724129338 return 0;
2724229339 }
2724329340 _ACEOF
27244 if ac_fn_c_try_link "$LINENO"; then :
29341 if ac_fn_c_try_link "$LINENO"
29342 then :
2724529343 ac_cv_lib_svld_dlopen=yes
27246 else
29344 else $as_nop
2724729345 ac_cv_lib_svld_dlopen=no
2724829346 fi
27249 rm -f core conftest.err conftest.$ac_objext \
29347 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2725029348 conftest$ac_exeext conftest.$ac_ext
2725129349 LIBS=$ac_check_lib_save_LIBS
2725229350 fi
27253 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
27254 $as_echo "$ac_cv_lib_svld_dlopen" >&6; }
27255 if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
29351 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
29352 printf "%s\n" "$ac_cv_lib_svld_dlopen" >&6; }
29353 if test "x$ac_cv_lib_svld_dlopen" = xyes
29354 then :
2725629355 lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
27257 else
27258 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
27259 $as_echo_n "checking for dld_link in -ldld... " >&6; }
27260 if ${ac_cv_lib_dld_dld_link+:} false; then :
27261 $as_echo_n "(cached) " >&6
27262 else
29356 else $as_nop
29357 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
29358 printf %s "checking for dld_link in -ldld... " >&6; }
29359 if test ${ac_cv_lib_dld_dld_link+y}
29360 then :
29361 printf %s "(cached) " >&6
29362 else $as_nop
2726329363 ac_check_lib_save_LIBS=$LIBS
2726429364 LIBS="-ldld $LIBS"
2726529365 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2726829368 /* Override any GCC internal prototype to avoid an error.
2726929369 Use char because int might match the return type of a GCC
2727029370 builtin and then its argument prototype would still apply. */
27271 #ifdef __cplusplus
27272 extern "C"
27273 #endif
2727429371 char dld_link ();
2727529372 int
27276 main ()
29373 main (void)
2727729374 {
2727829375 return dld_link ();
2727929376 ;
2728029377 return 0;
2728129378 }
2728229379 _ACEOF
27283 if ac_fn_c_try_link "$LINENO"; then :
29380 if ac_fn_c_try_link "$LINENO"
29381 then :
2728429382 ac_cv_lib_dld_dld_link=yes
27285 else
29383 else $as_nop
2728629384 ac_cv_lib_dld_dld_link=no
2728729385 fi
27288 rm -f core conftest.err conftest.$ac_objext \
29386 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2728929387 conftest$ac_exeext conftest.$ac_ext
2729029388 LIBS=$ac_check_lib_save_LIBS
2729129389 fi
27292 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
27293 $as_echo "$ac_cv_lib_dld_dld_link" >&6; }
27294 if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
29390 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
29391 printf "%s\n" "$ac_cv_lib_dld_dld_link" >&6; }
29392 if test "x$ac_cv_lib_dld_dld_link" = xyes
29393 then :
2729529394 lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
2729629395 fi
2729729396
2732329422 lt_cv_dlopen_self="$save_lt_cv_dlopen_self"
2732429423
2732529424 else
27326 { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
27327 $as_echo "none" >&6; }
27328 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Plugin support requested, but could not enable dlopen or ltdl" >&5
27329 $as_echo "$as_me: WARNING: Plugin support requested, but could not enable dlopen or ltdl" >&2;}
29425 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5
29426 printf "%s\n" "none" >&6; }
29427 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Plugin support requested, but could not enable dlopen or ltdl" >&5
29428 printf "%s\n" "$as_me: WARNING: Plugin support requested, but could not enable dlopen or ltdl" >&2;}
2733029429 as_fn_error $? "Cannot continue" "$LINENO" 5
2733129430 fi fi
2733229431
2733329432
27334 $as_echo "#define HWLOC_HAVE_PLUGINS 1" >>confdefs.h
29433 printf "%s\n" "#define HWLOC_HAVE_PLUGINS 1" >>confdefs.h
2733529434
2733629435 fi
2733729436
2733829437
2733929438 # Check whether --with-hwloc-plugins-path was given.
27340 if test "${with_hwloc_plugins_path+set}" = set; then :
29439 if test ${with_hwloc_plugins_path+y}
29440 then :
2734129441 withval=$with_hwloc_plugins_path; HWLOC_PLUGINS_PATH="$with_hwloc_plugins_path"
27342 else
29442 else $as_nop
2734329443 HWLOC_PLUGINS_PATH="\$(libdir)/hwloc"
2734429444 fi
2734529445
2738029480
2738129481 # Now we have some hwloc_<name>_component=plugin/static
2738229482 # and hwloc_static/plugin_components=list (space separated)
27383 { $as_echo "$as_me:${as_lineno-$LINENO}: checking components to build statically" >&5
27384 $as_echo_n "checking components to build statically... " >&6; }
27385 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hwloc_static_components" >&5
27386 $as_echo "$hwloc_static_components" >&6; }
29483 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking components to build statically" >&5
29484 printf %s "checking components to build statically... " >&6; }
29485 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hwloc_static_components" >&5
29486 printf "%s\n" "$hwloc_static_components" >&6; }
2738729487
2738829488 cat <<EOF >>"$hwloc_static_components_file"
2738929489 #include <private/internal-components.h>
2739729497 };
2739829498 EOF
2739929499
27400 { $as_echo "$as_me:${as_lineno-$LINENO}: checking components to build as plugins" >&5
27401 $as_echo_n "checking components to build as plugins... " >&6; }
27402 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hwloc_plugin_components" >&5
27403 $as_echo "$hwloc_plugin_components" >&6; }
27404
27405 if test "$hwloc_pci_component" = "static"; then :
29500 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking components to build as plugins" >&5
29501 printf %s "checking components to build as plugins... " >&6; }
29502 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hwloc_plugin_components" >&5
29503 printf "%s\n" "$hwloc_plugin_components" >&6; }
29504
29505 if test "$hwloc_pci_component" = "static"
29506 then :
2740629507 HWLOC_LIBS="$HWLOC_LIBS $HWLOC_PCIACCESS_LIBS"
27407 HWLOC_CFLAGS="$HWLOC_CFLAGS $HWLOC_PCIACCESS_CFLAGS"
29508 HWLOC_LDFLAGS="$HWLOC_LDFLAGS $HWLOC_PCIACCESS_LDFLAGS"
29509 HWLOC_CFLAGS="$HWLOC_CFLAGS $HWLOC_PCIACCESS_CPPFLAGS $HWLOC_PCIACCESS_CFLAGS"
2740829510 HWLOC_REQUIRES="$HWLOC_PCIACCESS_REQUIRES $HWLOC_REQUIRES"
2740929511 fi
27410 if test "$hwloc_opencl_component" = "static"; then :
29512 if test "$hwloc_opencl_component" = "static"
29513 then :
2741129514 HWLOC_LIBS="$HWLOC_LIBS $HWLOC_OPENCL_LIBS"
2741229515 HWLOC_LDFLAGS="$HWLOC_LDFLAGS $HWLOC_OPENCL_LDFLAGS"
27413 HWLOC_CFLAGS="$HWLOC_CFLAGS $HWLOC_OPENCL_CFLAGS"
29516 HWLOC_CFLAGS="$HWLOC_CFLAGS $HWLOC_OPENCL_CPPFLAGS $HWLOC_OPENCL_CFLAGS"
2741429517 HWLOC_REQUIRES="$HWLOC_OPENCL_REQUIRES $HWLOC_REQUIRES"
2741529518 fi
27416 if test "$hwloc_cuda_component" = "static"; then :
27417 HWLOC_LIBS="$HWLOC_LIBS $HWLOC_CUDA_LIBS"
27418 HWLOC_CFLAGS="$HWLOC_CFLAGS $HWLOC_CUDA_CFLAGS"
27419 HWLOC_REQUIRES="$HWLOC_CUDA_REQUIRES $HWLOC_REQUIRES"
27420 fi
27421 if test "$hwloc_nvml_component" = "static"; then :
29519 if test "$hwloc_cuda_component" = "static"
29520 then :
29521 HWLOC_LIBS="$HWLOC_LIBS $HWLOC_CUDART_LIBS"
29522 HWLOC_LDFLAGS="$HWLOC_LDFLAGS $HWLOC_CUDART_LDFLAGS"
29523 HWLOC_CFLAGS="$HWLOC_CFLAGS $HWLOC_CUDART_CPPFLAGS $HWLOC_CUDART_CFLAGS"
29524 HWLOC_REQUIRES="$HWLOC_CUDART_REQUIRES $HWLOC_REQUIRES"
29525 fi
29526 if test "$hwloc_nvml_component" = "static"
29527 then :
2742229528 HWLOC_LIBS="$HWLOC_LIBS $HWLOC_NVML_LIBS"
27423 HWLOC_CFLAGS="$HWLOC_CFLAGS $HWLOC_NVML_CFLAGS"
29529 HWLOC_LDFLAGS="$HWLOC_LDFLAGS $HWLOC_NVML_LDFLAGS"
29530 HWLOC_CFLAGS="$HWLOC_CFLAGS $HWLOC_NVML_CPPFLAGS $HWLOC_NVML_CFLAGS"
2742429531 HWLOC_REQUIRES="$HWLOC_NVML_REQUIRES $HWLOC_REQUIRES"
2742529532 fi
27426 if test "$hwloc_rsmi_component" = "static"; then :
29533 if test "$hwloc_rsmi_component" = "static"
29534 then :
2742729535 HWLOC_LIBS="$HWLOC_LIBS $HWLOC_RSMI_LIBS"
27428 HWLOC_CFLAGS="$HWLOC_CFLAGS $HWLOC_RSMI_CFLAGS"
29536 HWLOC_LDFLAGS="$HWLOC_LDFLAGS $HWLOC_RSMI_LDFLAGS"
29537 HWLOC_CFLAGS="$HWLOC_CFLAGS $HWLOC_RSMI_CPPFLAGS $HWLOC_RSMI_CFLAGS"
2742929538 HWLOC_REQUIRES="$HWLOC_RSMI_REQUIRES $HWLOC_REQUIRES"
2743029539 fi
27431 if test "$hwloc_gl_component" = "static"; then :
29540 if test "$hwloc_levelzero_component" = "static"
29541 then :
29542 HWLOC_LIBS="$HWLOC_LIBS $HWLOC_LEVELZERO_LIBS"
29543 HWLOC_LDFLAGS="$HWLOC_LDFLAGS $HWLOC_LEVELZERO_LDFLAGS"
29544 HWLOC_CFLAGS="$HWLOC_CFLAGS $HWLOC_LEVELZERO_CPPFLAGS $HWLOC_LEVELZERO_CFLAGS"
29545 HWLOC_REQUIRES="$HWLOC_LEVELZERO_REQUIRES $HWLOC_REQUIRES"
29546 fi
29547 if test "$hwloc_gl_component" = "static"
29548 then :
2743229549 HWLOC_LIBS="$HWLOC_LIBS $HWLOC_GL_LIBS"
27433 HWLOC_CFLAGS="$HWLOC_CFLAGS $HWLOC_GL_CFLAGS"
29550 HWLOC_LDFLAGS="$HWLOC_LDFLAGS $HWLOC_GL_LDFLAGS"
29551 HWLOC_CFLAGS="$HWLOC_CFLAGS $HWLOC_GL_CPPFLAGS $HWLOC_GL_CFLAGS"
2743429552 HWLOC_REQUIRES="$HWLOC_GL_REQUIRES $HWLOC_REQUIRES"
2743529553 fi
27436 if test "$hwloc_xml_libxml_component" = "static"; then :
29554 if test "$hwloc_xml_libxml_component" = "static"
29555 then :
2743729556 HWLOC_LIBS="$HWLOC_LIBS $HWLOC_LIBXML2_LIBS"
27438 HWLOC_CFLAGS="$HWLOC_CFLAGS $HWLOC_LIBXML2_CFLAGS"
29557 HWLOC_LDFLAGS="$HWLOC_LDFLAGS $HWLOC_LIBXML2_LDFLAGS"
29558 HWLOC_CFLAGS="$HWLOC_CFLAGS $HWLOC_LIBXML2_CPPFLAGS $HWLOC_LIBXML2_CFLAGS"
2743929559 HWLOC_REQUIRES="$HWLOC_LIBXML2_REQUIRES $HWLOC_REQUIRES"
2744029560 fi
2744129561
2745829578 # to be empty so that nothing is linked into libhwloc_embedded.la
2745929579 # itself -- only the upper-layer will link in anything required.
2746029580
27461 if test "$hwloc_mode" = "embedded"; then :
29581 if test "$hwloc_mode" = "embedded"
29582 then :
2746229583 HWLOC_EMBEDDED_CFLAGS=$HWLOC_CFLAGS
2746329584 HWLOC_EMBEDDED_CPPFLAGS=$HWLOC_CPPFLAGS
2746429585 HWLOC_EMBEDDED_LDFLAGS=$HWLOC_LDFLAGS
2749529616
2749629617
2749729618 # Check whether --enable-netloc was given.
27498 if test "${enable_netloc+set}" = set; then :
29619 if test ${enable_netloc+y}
29620 then :
2749929621 enableval=$enable_netloc;
2750029622 fi
2750129623
2750229624
27503 if test "$enable_netloc" = "yes" -a "$hwloc_mode" = "standalone"; then :
27504
27505
27506
27507
27508 if test "x1" != "x"; then :
29625 if test "$enable_netloc" = "yes" -a "$hwloc_mode" = "standalone"
29626 then :
29627
29628
29629
29630
29631 if test "x1" != "x"
29632 then :
2750929633 cat <<EOF
2751029634
2751129635 ###
2752529649
2752629650 # Setup the individual parts of Netloc
2752729651 netloc_happy=yes
27528 if test "$netloc_happy" = "yes"; then :
29652 if test "$netloc_happy" = "yes"
29653 then :
2752929654
2753029655 ac_fn_c_check_func "$LINENO" "asprintf" "ac_cv_func_asprintf"
27531 if test "x$ac_cv_func_asprintf" = xyes; then :
27532
27533 fi
27534
27535 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if netloc supports this platform" >&5
27536 $as_echo_n "checking if netloc supports this platform... " >&6; }
27537 if test "$ac_cv_func_asprintf" != "yes"; then :
29656 if test "x$ac_cv_func_asprintf" = xyes
29657 then :
29658
29659 fi
29660
29661 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if netloc supports this platform" >&5
29662 printf %s "checking if netloc supports this platform... " >&6; }
29663 if test "$ac_cv_func_asprintf" != "yes"
29664 then :
2753829665 netloc_happy=no netloc_missing_reason=" (asprintf missing)"
2753929666 fi
27540 if test "$hwloc_windows" = "yes"; then :
29667 if test "$hwloc_windows" = "yes"
29668 then :
2754129669 netloc_happy=no netloc_missing_reason=" (Windows platform)"
2754229670 fi
27543 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $netloc_happy$netloc_missing_reason" >&5
27544 $as_echo "$netloc_happy$netloc_missing_reason" >&6; }
27545
27546 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SCOTCH_archSub in -lscotch" >&5
27547 $as_echo_n "checking for SCOTCH_archSub in -lscotch... " >&6; }
27548 if ${ac_cv_lib_scotch_SCOTCH_archSub+:} false; then :
27549 $as_echo_n "(cached) " >&6
27550 else
29671 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $netloc_happy$netloc_missing_reason" >&5
29672 printf "%s\n" "$netloc_happy$netloc_missing_reason" >&6; }
29673
29674 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SCOTCH_archSub in -lscotch" >&5
29675 printf %s "checking for SCOTCH_archSub in -lscotch... " >&6; }
29676 if test ${ac_cv_lib_scotch_SCOTCH_archSub+y}
29677 then :
29678 printf %s "(cached) " >&6
29679 else $as_nop
2755129680 ac_check_lib_save_LIBS=$LIBS
2755229681 LIBS="-lscotch -lscotcherr $LIBS"
2755329682 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2755629685 /* Override any GCC internal prototype to avoid an error.
2755729686 Use char because int might match the return type of a GCC
2755829687 builtin and then its argument prototype would still apply. */
27559 #ifdef __cplusplus
27560 extern "C"
27561 #endif
2756229688 char SCOTCH_archSub ();
2756329689 int
27564 main ()
29690 main (void)
2756529691 {
2756629692 return SCOTCH_archSub ();
2756729693 ;
2756829694 return 0;
2756929695 }
2757029696 _ACEOF
27571 if ac_fn_c_try_link "$LINENO"; then :
29697 if ac_fn_c_try_link "$LINENO"
29698 then :
2757229699 ac_cv_lib_scotch_SCOTCH_archSub=yes
27573 else
29700 else $as_nop
2757429701 ac_cv_lib_scotch_SCOTCH_archSub=no
2757529702 fi
27576 rm -f core conftest.err conftest.$ac_objext \
29703 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2757729704 conftest$ac_exeext conftest.$ac_ext
2757829705 LIBS=$ac_check_lib_save_LIBS
2757929706 fi
27580 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_scotch_SCOTCH_archSub" >&5
27581 $as_echo "$ac_cv_lib_scotch_SCOTCH_archSub" >&6; }
27582 if test "x$ac_cv_lib_scotch_SCOTCH_archSub" = xyes; then :
29707 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_scotch_SCOTCH_archSub" >&5
29708 printf "%s\n" "$ac_cv_lib_scotch_SCOTCH_archSub" >&6; }
29709 if test "x$ac_cv_lib_scotch_SCOTCH_archSub" = xyes
29710 then :
2758329711 scotch_found_headers=yes;
2758429712
27585 $as_echo "#define NETLOC_SCOTCH 1" >>confdefs.h
27586
27587
27588 fi
27589
27590 for ac_header in mpi.h
29713 printf "%s\n" "#define NETLOC_SCOTCH 1" >>confdefs.h
29714
29715
29716 fi
29717
29718 for ac_header in mpi.h
2759129719 do :
27592 ac_fn_c_check_header_mongrel "$LINENO" "mpi.h" "ac_cv_header_mpi_h" "$ac_includes_default"
27593 if test "x$ac_cv_header_mpi_h" = xyes; then :
27594 cat >>confdefs.h <<_ACEOF
27595 #define HAVE_MPI_H 1
27596 _ACEOF
29720 ac_fn_c_check_header_compile "$LINENO" "mpi.h" "ac_cv_header_mpi_h" "$ac_includes_default"
29721 if test "x$ac_cv_header_mpi_h" = xyes
29722 then :
29723 printf "%s\n" "#define HAVE_MPI_H 1" >>confdefs.h
2759729724 mpi_found_headers=yes;
2759829725 MPI_CPPFLAGS=`mpicc -showme:compile 2>/dev/null`
2759929726 MPI_LDADD=`mpicc -showme:link 2>/dev/null`
2760429731
2760529732 done
2760629733
27607
2760829734 # Extract the first word of "xz", so it can be a program name with args.
2760929735 set dummy xz; ac_word=$2
27610 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
27611 $as_echo_n "checking for $ac_word... " >&6; }
27612 if ${ac_cv_prog_xz+:} false; then :
27613 $as_echo_n "(cached) " >&6
27614 else
29736 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
29737 printf %s "checking for $ac_word... " >&6; }
29738 if test ${ac_cv_prog_xz+y}
29739 then :
29740 printf %s "(cached) " >&6
29741 else $as_nop
2761529742 if test -n "$xz"; then
2761629743 ac_cv_prog_xz="$xz" # Let the user override the test.
2761729744 else
2761929746 for as_dir in $PATH
2762029747 do
2762129748 IFS=$as_save_IFS
27622 test -z "$as_dir" && as_dir=.
29749 case $as_dir in #(((
29750 '') as_dir=./ ;;
29751 */) ;;
29752 *) as_dir=$as_dir/ ;;
29753 esac
2762329754 for ac_exec_ext in '' $ac_executable_extensions; do
27624 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
29755 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
2762529756 ac_cv_prog_xz="yes"
27626 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
29757 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
2762729758 break 2
2762829759 fi
2762929760 done
2763529766 fi
2763629767 xz=$ac_cv_prog_xz
2763729768 if test -n "$xz"; then
27638 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xz" >&5
27639 $as_echo "$xz" >&6; }
29769 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $xz" >&5
29770 printf "%s\n" "$xz" >&6; }
2764029771 else
27641 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
27642 $as_echo "no" >&6; }
29772 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
29773 printf "%s\n" "no" >&6; }
2764329774 fi
2764429775
2764529776
2766029791 # to be empty so that nothing is linked into libnetloc_embedded.la
2766129792 # itself -- only the upper-layer will link in anything required.
2766229793
27663 if test "$hwloc_mode" = "embedded"; then :
29794 if test "$hwloc_mode" = "embedded"
29795 then :
2766429796 NETLOC_EMBEDDED_CFLAGS=$NETLOC_CFLAGS
2766529797 NETLOC_EMBEDDED_CPPFLAGS=$NETLOC_CPPFLAGS
2766629798 NETLOC_EMBEDDED_LDADD='$(HWLOC_top_builddir)/netloc/libnetloc_embedded.la'
2767229804
2767329805
2767429806
27675 if test "$netloc_happy" = "yes"; then :
27676
27677 else
27678 if test "$enable_netloc" = "yes"; then :
29807 if test "$netloc_happy" = "yes"
29808 then :
29809
29810 else $as_nop
29811 if test "$enable_netloc" = "yes"
29812 then :
2767929813 as_fn_error $? "Cannot build netloc core" "$LINENO" 5
2768029814 fi
2768129815
2771729851
2771829852 # Extract the first word of "diff", so it can be a program name with args.
2771929853 set dummy diff; ac_word=$2
27720 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
27721 $as_echo_n "checking for $ac_word... " >&6; }
27722 if ${ac_cv_path_DIFF+:} false; then :
27723 $as_echo_n "(cached) " >&6
27724 else
29854 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
29855 printf %s "checking for $ac_word... " >&6; }
29856 if test ${ac_cv_path_DIFF+y}
29857 then :
29858 printf %s "(cached) " >&6
29859 else $as_nop
2772529860 case $DIFF in
2772629861 [\\/]* | ?:[\\/]*)
2772729862 ac_cv_path_DIFF="$DIFF" # Let the user override the test with a path.
2773129866 for as_dir in $PATH
2773229867 do
2773329868 IFS=$as_save_IFS
27734 test -z "$as_dir" && as_dir=.
29869 case $as_dir in #(((
29870 '') as_dir=./ ;;
29871 */) ;;
29872 *) as_dir=$as_dir/ ;;
29873 esac
2773529874 for ac_exec_ext in '' $ac_executable_extensions; do
27736 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
27737 ac_cv_path_DIFF="$as_dir/$ac_word$ac_exec_ext"
27738 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
29875 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
29876 ac_cv_path_DIFF="$as_dir$ac_word$ac_exec_ext"
29877 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
2773929878 break 2
2774029879 fi
2774129880 done
2774729886 fi
2774829887 DIFF=$ac_cv_path_DIFF
2774929888 if test -n "$DIFF"; then
27750 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DIFF" >&5
27751 $as_echo "$DIFF" >&6; }
29889 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DIFF" >&5
29890 printf "%s\n" "$DIFF" >&6; }
2775229891 else
27753 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
27754 $as_echo "no" >&6; }
27755 fi
27756
27757
27758
27759 if test "$hwloc_mode" = "standalone"; then :
29892 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
29893 printf "%s\n" "no" >&6; }
29894 fi
29895
29896
29897
29898 if test "$hwloc_mode" = "standalone"
29899 then :
2776029900
2776129901 cat <<EOF
2776229902
2776529905 ###
2776629906 EOF
2776729907
27768 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if this is a developer build" >&5
27769 $as_echo_n "checking if this is a developer build... " >&6; }
27770 if test ! -e "$srcdir/.git"; then :
27771 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (doxygen generation is optional)" >&5
27772 $as_echo "no (doxygen generation is optional)" >&6; }
29908 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if this is a developer build" >&5
29909 printf %s "checking if this is a developer build... " >&6; }
29910 if test ! -e "$srcdir/.git"
29911 then :
29912 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no (doxygen generation is optional)" >&5
29913 printf "%s\n" "no (doxygen generation is optional)" >&6; }
2777329914 test "x$enable_doxygen" = x && enable_doxygen=no
27774 else
27775 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
27776 $as_echo "yes" >&6; }
29915 else $as_nop
29916 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
29917 printf "%s\n" "yes" >&6; }
2777729918 test "x$enable_doxygen" = x && enable_doxygen=yes
2777829919 fi
2777929920
2778329924 if test -n "$ac_tool_prefix"; then
2778429925 # Extract the first word of "${ac_tool_prefix}doxygen", so it can be a program name with args.
2778529926 set dummy ${ac_tool_prefix}doxygen; ac_word=$2
27786 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
27787 $as_echo_n "checking for $ac_word... " >&6; }
27788 if ${ac_cv_path_DOXYGEN+:} false; then :
27789 $as_echo_n "(cached) " >&6
27790 else
29927 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
29928 printf %s "checking for $ac_word... " >&6; }
29929 if test ${ac_cv_path_DOXYGEN+y}
29930 then :
29931 printf %s "(cached) " >&6
29932 else $as_nop
2779129933 case $DOXYGEN in
2779229934 [\\/]* | ?:[\\/]*)
2779329935 ac_cv_path_DOXYGEN="$DOXYGEN" # Let the user override the test with a path.
2779729939 for as_dir in $PATH
2779829940 do
2779929941 IFS=$as_save_IFS
27800 test -z "$as_dir" && as_dir=.
29942 case $as_dir in #(((
29943 '') as_dir=./ ;;
29944 */) ;;
29945 *) as_dir=$as_dir/ ;;
29946 esac
2780129947 for ac_exec_ext in '' $ac_executable_extensions; do
27802 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
27803 ac_cv_path_DOXYGEN="$as_dir/$ac_word$ac_exec_ext"
27804 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
29948 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
29949 ac_cv_path_DOXYGEN="$as_dir$ac_word$ac_exec_ext"
29950 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
2780529951 break 2
2780629952 fi
2780729953 done
2781329959 fi
2781429960 DOXYGEN=$ac_cv_path_DOXYGEN
2781529961 if test -n "$DOXYGEN"; then
27816 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DOXYGEN" >&5
27817 $as_echo "$DOXYGEN" >&6; }
29962 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DOXYGEN" >&5
29963 printf "%s\n" "$DOXYGEN" >&6; }
2781829964 else
27819 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
27820 $as_echo "no" >&6; }
29965 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
29966 printf "%s\n" "no" >&6; }
2782129967 fi
2782229968
2782329969
2782629972 ac_pt_DOXYGEN=$DOXYGEN
2782729973 # Extract the first word of "doxygen", so it can be a program name with args.
2782829974 set dummy doxygen; ac_word=$2
27829 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
27830 $as_echo_n "checking for $ac_word... " >&6; }
27831 if ${ac_cv_path_ac_pt_DOXYGEN+:} false; then :
27832 $as_echo_n "(cached) " >&6
27833 else
29975 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
29976 printf %s "checking for $ac_word... " >&6; }
29977 if test ${ac_cv_path_ac_pt_DOXYGEN+y}
29978 then :
29979 printf %s "(cached) " >&6
29980 else $as_nop
2783429981 case $ac_pt_DOXYGEN in
2783529982 [\\/]* | ?:[\\/]*)
2783629983 ac_cv_path_ac_pt_DOXYGEN="$ac_pt_DOXYGEN" # Let the user override the test with a path.
2784029987 for as_dir in $PATH
2784129988 do
2784229989 IFS=$as_save_IFS
27843 test -z "$as_dir" && as_dir=.
29990 case $as_dir in #(((
29991 '') as_dir=./ ;;
29992 */) ;;
29993 *) as_dir=$as_dir/ ;;
29994 esac
2784429995 for ac_exec_ext in '' $ac_executable_extensions; do
27845 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
27846 ac_cv_path_ac_pt_DOXYGEN="$as_dir/$ac_word$ac_exec_ext"
27847 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
29996 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
29997 ac_cv_path_ac_pt_DOXYGEN="$as_dir$ac_word$ac_exec_ext"
29998 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
2784829999 break 2
2784930000 fi
2785030001 done
2785630007 fi
2785730008 ac_pt_DOXYGEN=$ac_cv_path_ac_pt_DOXYGEN
2785830009 if test -n "$ac_pt_DOXYGEN"; then
27859 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DOXYGEN" >&5
27860 $as_echo "$ac_pt_DOXYGEN" >&6; }
30010 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DOXYGEN" >&5
30011 printf "%s\n" "$ac_pt_DOXYGEN" >&6; }
2786130012 else
27862 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
27863 $as_echo "no" >&6; }
30013 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
30014 printf "%s\n" "no" >&6; }
2786430015 fi
2786530016
2786630017 if test "x$ac_pt_DOXYGEN" = x; then
2786830019 else
2786930020 case $cross_compiling:$ac_tool_warned in
2787030021 yes:)
27871 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
27872 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
30022 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
30023 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
2787330024 ac_tool_warned=yes ;;
2787430025 esac
2787530026 DOXYGEN=$ac_pt_DOXYGEN
2788430035 if test -n "$ac_tool_prefix"; then
2788530036 # Extract the first word of "${ac_tool_prefix}pdflatex", so it can be a program name with args.
2788630037 set dummy ${ac_tool_prefix}pdflatex; ac_word=$2
27887 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
27888 $as_echo_n "checking for $ac_word... " >&6; }
27889 if ${ac_cv_path_PDFLATEX+:} false; then :
27890 $as_echo_n "(cached) " >&6
27891 else
30038 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
30039 printf %s "checking for $ac_word... " >&6; }
30040 if test ${ac_cv_path_PDFLATEX+y}
30041 then :
30042 printf %s "(cached) " >&6
30043 else $as_nop
2789230044 case $PDFLATEX in
2789330045 [\\/]* | ?:[\\/]*)
2789430046 ac_cv_path_PDFLATEX="$PDFLATEX" # Let the user override the test with a path.
2789830050 for as_dir in $PATH
2789930051 do
2790030052 IFS=$as_save_IFS
27901 test -z "$as_dir" && as_dir=.
30053 case $as_dir in #(((
30054 '') as_dir=./ ;;
30055 */) ;;
30056 *) as_dir=$as_dir/ ;;
30057 esac
2790230058 for ac_exec_ext in '' $ac_executable_extensions; do
27903 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
27904 ac_cv_path_PDFLATEX="$as_dir/$ac_word$ac_exec_ext"
27905 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
30059 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
30060 ac_cv_path_PDFLATEX="$as_dir$ac_word$ac_exec_ext"
30061 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
2790630062 break 2
2790730063 fi
2790830064 done
2791430070 fi
2791530071 PDFLATEX=$ac_cv_path_PDFLATEX
2791630072 if test -n "$PDFLATEX"; then
27917 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PDFLATEX" >&5
27918 $as_echo "$PDFLATEX" >&6; }
30073 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PDFLATEX" >&5
30074 printf "%s\n" "$PDFLATEX" >&6; }
2791930075 else
27920 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
27921 $as_echo "no" >&6; }
30076 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
30077 printf "%s\n" "no" >&6; }
2792230078 fi
2792330079
2792430080
2792730083 ac_pt_PDFLATEX=$PDFLATEX
2792830084 # Extract the first word of "pdflatex", so it can be a program name with args.
2792930085 set dummy pdflatex; ac_word=$2
27930 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
27931 $as_echo_n "checking for $ac_word... " >&6; }
27932 if ${ac_cv_path_ac_pt_PDFLATEX+:} false; then :
27933 $as_echo_n "(cached) " >&6
27934 else
30086 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
30087 printf %s "checking for $ac_word... " >&6; }
30088 if test ${ac_cv_path_ac_pt_PDFLATEX+y}
30089 then :
30090 printf %s "(cached) " >&6
30091 else $as_nop
2793530092 case $ac_pt_PDFLATEX in
2793630093 [\\/]* | ?:[\\/]*)
2793730094 ac_cv_path_ac_pt_PDFLATEX="$ac_pt_PDFLATEX" # Let the user override the test with a path.
2794130098 for as_dir in $PATH
2794230099 do
2794330100 IFS=$as_save_IFS
27944 test -z "$as_dir" && as_dir=.
30101 case $as_dir in #(((
30102 '') as_dir=./ ;;
30103 */) ;;
30104 *) as_dir=$as_dir/ ;;
30105 esac
2794530106 for ac_exec_ext in '' $ac_executable_extensions; do
27946 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
27947 ac_cv_path_ac_pt_PDFLATEX="$as_dir/$ac_word$ac_exec_ext"
27948 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
30107 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
30108 ac_cv_path_ac_pt_PDFLATEX="$as_dir$ac_word$ac_exec_ext"
30109 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
2794930110 break 2
2795030111 fi
2795130112 done
2795730118 fi
2795830119 ac_pt_PDFLATEX=$ac_cv_path_ac_pt_PDFLATEX
2795930120 if test -n "$ac_pt_PDFLATEX"; then
27960 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PDFLATEX" >&5
27961 $as_echo "$ac_pt_PDFLATEX" >&6; }
30121 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PDFLATEX" >&5
30122 printf "%s\n" "$ac_pt_PDFLATEX" >&6; }
2796230123 else
27963 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
27964 $as_echo "no" >&6; }
30124 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
30125 printf "%s\n" "no" >&6; }
2796530126 fi
2796630127
2796730128 if test "x$ac_pt_PDFLATEX" = x; then
2796930130 else
2797030131 case $cross_compiling:$ac_tool_warned in
2797130132 yes:)
27972 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
27973 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
30133 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
30134 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
2797430135 ac_tool_warned=yes ;;
2797530136 esac
2797630137 PDFLATEX=$ac_pt_PDFLATEX
2798430145 if test -n "$ac_tool_prefix"; then
2798530146 # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args.
2798630147 set dummy ${ac_tool_prefix}makeindex; ac_word=$2
27987 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
27988 $as_echo_n "checking for $ac_word... " >&6; }
27989 if ${ac_cv_path_MAKEINDEX+:} false; then :
27990 $as_echo_n "(cached) " >&6
27991 else
30148 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
30149 printf %s "checking for $ac_word... " >&6; }
30150 if test ${ac_cv_path_MAKEINDEX+y}
30151 then :
30152 printf %s "(cached) " >&6
30153 else $as_nop
2799230154 case $MAKEINDEX in
2799330155 [\\/]* | ?:[\\/]*)
2799430156 ac_cv_path_MAKEINDEX="$MAKEINDEX" # Let the user override the test with a path.
2799830160 for as_dir in $PATH
2799930161 do
2800030162 IFS=$as_save_IFS
28001 test -z "$as_dir" && as_dir=.
30163 case $as_dir in #(((
30164 '') as_dir=./ ;;
30165 */) ;;
30166 *) as_dir=$as_dir/ ;;
30167 esac
2800230168 for ac_exec_ext in '' $ac_executable_extensions; do
28003 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
28004 ac_cv_path_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext"
28005 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
30169 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
30170 ac_cv_path_MAKEINDEX="$as_dir$ac_word$ac_exec_ext"
30171 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
2800630172 break 2
2800730173 fi
2800830174 done
2801430180 fi
2801530181 MAKEINDEX=$ac_cv_path_MAKEINDEX
2801630182 if test -n "$MAKEINDEX"; then
28017 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAKEINDEX" >&5
28018 $as_echo "$MAKEINDEX" >&6; }
30183 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAKEINDEX" >&5
30184 printf "%s\n" "$MAKEINDEX" >&6; }
2801930185 else
28020 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
28021 $as_echo "no" >&6; }
30186 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
30187 printf "%s\n" "no" >&6; }
2802230188 fi
2802330189
2802430190
2802730193 ac_pt_MAKEINDEX=$MAKEINDEX
2802830194 # Extract the first word of "makeindex", so it can be a program name with args.
2802930195 set dummy makeindex; ac_word=$2
28030 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
28031 $as_echo_n "checking for $ac_word... " >&6; }
28032 if ${ac_cv_path_ac_pt_MAKEINDEX+:} false; then :
28033 $as_echo_n "(cached) " >&6
28034 else
30196 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
30197 printf %s "checking for $ac_word... " >&6; }
30198 if test ${ac_cv_path_ac_pt_MAKEINDEX+y}
30199 then :
30200 printf %s "(cached) " >&6
30201 else $as_nop
2803530202 case $ac_pt_MAKEINDEX in
2803630203 [\\/]* | ?:[\\/]*)
2803730204 ac_cv_path_ac_pt_MAKEINDEX="$ac_pt_MAKEINDEX" # Let the user override the test with a path.
2804130208 for as_dir in $PATH
2804230209 do
2804330210 IFS=$as_save_IFS
28044 test -z "$as_dir" && as_dir=.
30211 case $as_dir in #(((
30212 '') as_dir=./ ;;
30213 */) ;;
30214 *) as_dir=$as_dir/ ;;
30215 esac
2804530216 for ac_exec_ext in '' $ac_executable_extensions; do
28046 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
28047 ac_cv_path_ac_pt_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext"
28048 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
30217 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
30218 ac_cv_path_ac_pt_MAKEINDEX="$as_dir$ac_word$ac_exec_ext"
30219 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
2804930220 break 2
2805030221 fi
2805130222 done
2805730228 fi
2805830229 ac_pt_MAKEINDEX=$ac_cv_path_ac_pt_MAKEINDEX
2805930230 if test -n "$ac_pt_MAKEINDEX"; then
28060 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_MAKEINDEX" >&5
28061 $as_echo "$ac_pt_MAKEINDEX" >&6; }
30231 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_MAKEINDEX" >&5
30232 printf "%s\n" "$ac_pt_MAKEINDEX" >&6; }
2806230233 else
28063 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
28064 $as_echo "no" >&6; }
30234 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
30235 printf "%s\n" "no" >&6; }
2806530236 fi
2806630237
2806730238 if test "x$ac_pt_MAKEINDEX" = x; then
2806930240 else
2807030241 case $cross_compiling:$ac_tool_warned in
2807130242 yes:)
28072 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
28073 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
30243 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
30244 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
2807430245 ac_tool_warned=yes ;;
2807530246 esac
2807630247 MAKEINDEX=$ac_pt_MAKEINDEX
2808430255 if test -n "$ac_tool_prefix"; then
2808530256 # Extract the first word of "${ac_tool_prefix}fig2dev", so it can be a program name with args.
2808630257 set dummy ${ac_tool_prefix}fig2dev; ac_word=$2
28087 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
28088 $as_echo_n "checking for $ac_word... " >&6; }
28089 if ${ac_cv_path_FIG2DEV+:} false; then :
28090 $as_echo_n "(cached) " >&6
28091 else
30258 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
30259 printf %s "checking for $ac_word... " >&6; }
30260 if test ${ac_cv_path_FIG2DEV+y}
30261 then :
30262 printf %s "(cached) " >&6
30263 else $as_nop
2809230264 case $FIG2DEV in
2809330265 [\\/]* | ?:[\\/]*)
2809430266 ac_cv_path_FIG2DEV="$FIG2DEV" # Let the user override the test with a path.
2809830270 for as_dir in $PATH
2809930271 do
2810030272 IFS=$as_save_IFS
28101 test -z "$as_dir" && as_dir=.
30273 case $as_dir in #(((
30274 '') as_dir=./ ;;
30275 */) ;;
30276 *) as_dir=$as_dir/ ;;
30277 esac
2810230278 for ac_exec_ext in '' $ac_executable_extensions; do
28103 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
28104 ac_cv_path_FIG2DEV="$as_dir/$ac_word$ac_exec_ext"
28105 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
30279 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
30280 ac_cv_path_FIG2DEV="$as_dir$ac_word$ac_exec_ext"
30281 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
2810630282 break 2
2810730283 fi
2810830284 done
2811430290 fi
2811530291 FIG2DEV=$ac_cv_path_FIG2DEV
2811630292 if test -n "$FIG2DEV"; then
28117 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FIG2DEV" >&5
28118 $as_echo "$FIG2DEV" >&6; }
30293 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FIG2DEV" >&5
30294 printf "%s\n" "$FIG2DEV" >&6; }
2811930295 else
28120 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
28121 $as_echo "no" >&6; }
30296 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
30297 printf "%s\n" "no" >&6; }
2812230298 fi
2812330299
2812430300
2812730303 ac_pt_FIG2DEV=$FIG2DEV
2812830304 # Extract the first word of "fig2dev", so it can be a program name with args.
2812930305 set dummy fig2dev; ac_word=$2
28130 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
28131 $as_echo_n "checking for $ac_word... " >&6; }
28132 if ${ac_cv_path_ac_pt_FIG2DEV+:} false; then :
28133 $as_echo_n "(cached) " >&6
28134 else
30306 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
30307 printf %s "checking for $ac_word... " >&6; }
30308 if test ${ac_cv_path_ac_pt_FIG2DEV+y}
30309 then :
30310 printf %s "(cached) " >&6
30311 else $as_nop
2813530312 case $ac_pt_FIG2DEV in
2813630313 [\\/]* | ?:[\\/]*)
2813730314 ac_cv_path_ac_pt_FIG2DEV="$ac_pt_FIG2DEV" # Let the user override the test with a path.
2814130318 for as_dir in $PATH
2814230319 do
2814330320 IFS=$as_save_IFS
28144 test -z "$as_dir" && as_dir=.
30321 case $as_dir in #(((
30322 '') as_dir=./ ;;
30323 */) ;;
30324 *) as_dir=$as_dir/ ;;
30325 esac
2814530326 for ac_exec_ext in '' $ac_executable_extensions; do
28146 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
28147 ac_cv_path_ac_pt_FIG2DEV="$as_dir/$ac_word$ac_exec_ext"
28148 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
30327 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
30328 ac_cv_path_ac_pt_FIG2DEV="$as_dir$ac_word$ac_exec_ext"
30329 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
2814930330 break 2
2815030331 fi
2815130332 done
2815730338 fi
2815830339 ac_pt_FIG2DEV=$ac_cv_path_ac_pt_FIG2DEV
2815930340 if test -n "$ac_pt_FIG2DEV"; then
28160 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_FIG2DEV" >&5
28161 $as_echo "$ac_pt_FIG2DEV" >&6; }
30341 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_FIG2DEV" >&5
30342 printf "%s\n" "$ac_pt_FIG2DEV" >&6; }
2816230343 else
28163 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
28164 $as_echo "no" >&6; }
30344 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
30345 printf "%s\n" "no" >&6; }
2816530346 fi
2816630347
2816730348 if test "x$ac_pt_FIG2DEV" = x; then
2816930350 else
2817030351 case $cross_compiling:$ac_tool_warned in
2817130352 yes:)
28172 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
28173 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
30353 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
30354 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
2817430355 ac_tool_warned=yes ;;
2817530356 esac
2817630357 FIG2DEV=$ac_pt_FIG2DEV
2818430365 if test -n "$ac_tool_prefix"; then
2818530366 # Extract the first word of "${ac_tool_prefix}gs", so it can be a program name with args.
2818630367 set dummy ${ac_tool_prefix}gs; ac_word=$2
28187 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
28188 $as_echo_n "checking for $ac_word... " >&6; }
28189 if ${ac_cv_path_GS+:} false; then :
28190 $as_echo_n "(cached) " >&6
28191 else
30368 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
30369 printf %s "checking for $ac_word... " >&6; }
30370 if test ${ac_cv_path_GS+y}
30371 then :
30372 printf %s "(cached) " >&6
30373 else $as_nop
2819230374 case $GS in
2819330375 [\\/]* | ?:[\\/]*)
2819430376 ac_cv_path_GS="$GS" # Let the user override the test with a path.
2819830380 for as_dir in $PATH
2819930381 do
2820030382 IFS=$as_save_IFS
28201 test -z "$as_dir" && as_dir=.
30383 case $as_dir in #(((
30384 '') as_dir=./ ;;
30385 */) ;;
30386 *) as_dir=$as_dir/ ;;
30387 esac
2820230388 for ac_exec_ext in '' $ac_executable_extensions; do
28203 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
28204 ac_cv_path_GS="$as_dir/$ac_word$ac_exec_ext"
28205 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
30389 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
30390 ac_cv_path_GS="$as_dir$ac_word$ac_exec_ext"
30391 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
2820630392 break 2
2820730393 fi
2820830394 done
2821430400 fi
2821530401 GS=$ac_cv_path_GS
2821630402 if test -n "$GS"; then
28217 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GS" >&5
28218 $as_echo "$GS" >&6; }
30403 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GS" >&5
30404 printf "%s\n" "$GS" >&6; }
2821930405 else
28220 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
28221 $as_echo "no" >&6; }
30406 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
30407 printf "%s\n" "no" >&6; }
2822230408 fi
2822330409
2822430410
2822730413 ac_pt_GS=$GS
2822830414 # Extract the first word of "gs", so it can be a program name with args.
2822930415 set dummy gs; ac_word=$2
28230 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
28231 $as_echo_n "checking for $ac_word... " >&6; }
28232 if ${ac_cv_path_ac_pt_GS+:} false; then :
28233 $as_echo_n "(cached) " >&6
28234 else
30416 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
30417 printf %s "checking for $ac_word... " >&6; }
30418 if test ${ac_cv_path_ac_pt_GS+y}
30419 then :
30420 printf %s "(cached) " >&6
30421 else $as_nop
2823530422 case $ac_pt_GS in
2823630423 [\\/]* | ?:[\\/]*)
2823730424 ac_cv_path_ac_pt_GS="$ac_pt_GS" # Let the user override the test with a path.
2824130428 for as_dir in $PATH
2824230429 do
2824330430 IFS=$as_save_IFS
28244 test -z "$as_dir" && as_dir=.
30431 case $as_dir in #(((
30432 '') as_dir=./ ;;
30433 */) ;;
30434 *) as_dir=$as_dir/ ;;
30435 esac
2824530436 for ac_exec_ext in '' $ac_executable_extensions; do
28246 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
28247 ac_cv_path_ac_pt_GS="$as_dir/$ac_word$ac_exec_ext"
28248 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
30437 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
30438 ac_cv_path_ac_pt_GS="$as_dir$ac_word$ac_exec_ext"
30439 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
2824930440 break 2
2825030441 fi
2825130442 done
2825730448 fi
2825830449 ac_pt_GS=$ac_cv_path_ac_pt_GS
2825930450 if test -n "$ac_pt_GS"; then
28260 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_GS" >&5
28261 $as_echo "$ac_pt_GS" >&6; }
30451 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_GS" >&5
30452 printf "%s\n" "$ac_pt_GS" >&6; }
2826230453 else
28263 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
28264 $as_echo "no" >&6; }
30454 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
30455 printf "%s\n" "no" >&6; }
2826530456 fi
2826630457
2826730458 if test "x$ac_pt_GS" = x; then
2826930460 else
2827030461 case $cross_compiling:$ac_tool_warned in
2827130462 yes:)
28272 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
28273 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
30463 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
30464 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
2827430465 ac_tool_warned=yes ;;
2827530466 esac
2827630467 GS=$ac_pt_GS
2828430475 if test -n "$ac_tool_prefix"; then
2828530476 # Extract the first word of "${ac_tool_prefix}epstopdf", so it can be a program name with args.
2828630477 set dummy ${ac_tool_prefix}epstopdf; ac_word=$2
28287 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
28288 $as_echo_n "checking for $ac_word... " >&6; }
28289 if ${ac_cv_path_EPSTOPDF+:} false; then :
28290 $as_echo_n "(cached) " >&6
28291 else
30478 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
30479 printf %s "checking for $ac_word... " >&6; }
30480 if test ${ac_cv_path_EPSTOPDF+y}
30481 then :
30482 printf %s "(cached) " >&6
30483 else $as_nop
2829230484 case $EPSTOPDF in
2829330485 [\\/]* | ?:[\\/]*)
2829430486 ac_cv_path_EPSTOPDF="$EPSTOPDF" # Let the user override the test with a path.
2829830490 for as_dir in $PATH
2829930491 do
2830030492 IFS=$as_save_IFS
28301 test -z "$as_dir" && as_dir=.
30493 case $as_dir in #(((
30494 '') as_dir=./ ;;
30495 */) ;;
30496 *) as_dir=$as_dir/ ;;
30497 esac
2830230498 for ac_exec_ext in '' $ac_executable_extensions; do
28303 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
28304 ac_cv_path_EPSTOPDF="$as_dir/$ac_word$ac_exec_ext"
28305 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
30499 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
30500 ac_cv_path_EPSTOPDF="$as_dir$ac_word$ac_exec_ext"
30501 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
2830630502 break 2
2830730503 fi
2830830504 done
2831430510 fi
2831530511 EPSTOPDF=$ac_cv_path_EPSTOPDF
2831630512 if test -n "$EPSTOPDF"; then
28317 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $EPSTOPDF" >&5
28318 $as_echo "$EPSTOPDF" >&6; }
30513 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $EPSTOPDF" >&5
30514 printf "%s\n" "$EPSTOPDF" >&6; }
2831930515 else
28320 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
28321 $as_echo "no" >&6; }
30516 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
30517 printf "%s\n" "no" >&6; }
2832230518 fi
2832330519
2832430520
2832730523 ac_pt_EPSTOPDF=$EPSTOPDF
2832830524 # Extract the first word of "epstopdf", so it can be a program name with args.
2832930525 set dummy epstopdf; ac_word=$2
28330 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
28331 $as_echo_n "checking for $ac_word... " >&6; }
28332 if ${ac_cv_path_ac_pt_EPSTOPDF+:} false; then :
28333 $as_echo_n "(cached) " >&6
28334 else
30526 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
30527 printf %s "checking for $ac_word... " >&6; }
30528 if test ${ac_cv_path_ac_pt_EPSTOPDF+y}
30529 then :
30530 printf %s "(cached) " >&6
30531 else $as_nop
2833530532 case $ac_pt_EPSTOPDF in
2833630533 [\\/]* | ?:[\\/]*)
2833730534 ac_cv_path_ac_pt_EPSTOPDF="$ac_pt_EPSTOPDF" # Let the user override the test with a path.
2834130538 for as_dir in $PATH
2834230539 do
2834330540 IFS=$as_save_IFS
28344 test -z "$as_dir" && as_dir=.
30541 case $as_dir in #(((
30542 '') as_dir=./ ;;
30543 */) ;;
30544 *) as_dir=$as_dir/ ;;
30545 esac
2834530546 for ac_exec_ext in '' $ac_executable_extensions; do
28346 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
28347 ac_cv_path_ac_pt_EPSTOPDF="$as_dir/$ac_word$ac_exec_ext"
28348 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
30547 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
30548 ac_cv_path_ac_pt_EPSTOPDF="$as_dir$ac_word$ac_exec_ext"
30549 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
2834930550 break 2
2835030551 fi
2835130552 done
2835730558 fi
2835830559 ac_pt_EPSTOPDF=$ac_cv_path_ac_pt_EPSTOPDF
2835930560 if test -n "$ac_pt_EPSTOPDF"; then
28360 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_EPSTOPDF" >&5
28361 $as_echo "$ac_pt_EPSTOPDF" >&6; }
30561 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_EPSTOPDF" >&5
30562 printf "%s\n" "$ac_pt_EPSTOPDF" >&6; }
2836230563 else
28363 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
28364 $as_echo "no" >&6; }
30564 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
30565 printf "%s\n" "no" >&6; }
2836530566 fi
2836630567
2836730568 if test "x$ac_pt_EPSTOPDF" = x; then
2836930570 else
2837030571 case $cross_compiling:$ac_tool_warned in
2837130572 yes:)
28372 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
28373 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
30573 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
30574 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
2837430575 ac_tool_warned=yes ;;
2837530576 esac
2837630577 EPSTOPDF=$ac_pt_EPSTOPDF
2838030581 fi
2838130582
2838230583
28383 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if can build doxygen docs" >&5
28384 $as_echo_n "checking if can build doxygen docs... " >&6; }
28385 if test "x$DOXYGEN" != "x" -a "x$PDFLATEX" != "x" -a "x$MAKEINDEX" != "x" -a "x$FIG2DEV" != "x" -a "x$GS" != "x" -a "x$EPSTOPDF" != "x"; then :
30584 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if can build doxygen docs" >&5
30585 printf %s "checking if can build doxygen docs... " >&6; }
30586 if test "x$DOXYGEN" != "x" -a "x$PDFLATEX" != "x" -a "x$MAKEINDEX" != "x" -a "x$FIG2DEV" != "x" -a "x$GS" != "x" -a "x$EPSTOPDF" != "x"
30587 then :
2838630588 hwloc_generate_doxs=yes
28387 else
30589 else $as_nop
2838830590 hwloc_generate_doxs=no
2838930591 fi
28390 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hwloc_generate_doxs" >&5
28391 $as_echo "$hwloc_generate_doxs" >&6; }
28392 if test "x$hwloc_generate_doxs" = xyes -a "x$HWLOC_DOXYGEN_VERSION" = x1.6.2; then :
28393 hwloc_generate_doxs="no"; { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: doxygen 1.6.2 has broken short name support, disabling" >&5
28394 $as_echo "$as_me: WARNING: doxygen 1.6.2 has broken short name support, disabling" >&2;}
28395 fi
28396 if test "x$hwloc_generate_doxs" = xyes -a "x$HWLOC_DOXYGEN_VERSION" = x1.8.16 -a "$HWLOC_top_builddir" = "$HWLOC_top_srcdir"; then :
28397 hwloc_generate_doxs="no"; { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: doxygen 1.8.16 fails when building inside the source-tree, disabling" >&5
28398 $as_echo "$as_me: WARNING: doxygen 1.8.16 fails when building inside the source-tree, disabling" >&2;}
30592 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hwloc_generate_doxs" >&5
30593 printf "%s\n" "$hwloc_generate_doxs" >&6; }
30594 if test "x$hwloc_generate_doxs" = xyes -a "x$HWLOC_DOXYGEN_VERSION" = x1.6.2
30595 then :
30596 hwloc_generate_doxs="no"; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: doxygen 1.6.2 has broken short name support, disabling" >&5
30597 printf "%s\n" "$as_me: WARNING: doxygen 1.6.2 has broken short name support, disabling" >&2;}
30598 fi
30599 if test "x$hwloc_generate_doxs" = xyes -a "x$HWLOC_DOXYGEN_VERSION" = x1.8.16 -a "$HWLOC_top_builddir" = "$HWLOC_top_srcdir"
30600 then :
30601 hwloc_generate_doxs="no"; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: doxygen 1.8.16 fails when building inside the source-tree, disabling" >&5
30602 printf "%s\n" "$as_me: WARNING: doxygen 1.8.16 fails when building inside the source-tree, disabling" >&2;}
2839930603 fi
2840030604
2840130605
2840530609 if test -n "$ac_tool_prefix"; then
2840630610 # Extract the first word of "${ac_tool_prefix}w3m", so it can be a program name with args.
2840730611 set dummy ${ac_tool_prefix}w3m; ac_word=$2
28408 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
28409 $as_echo_n "checking for $ac_word... " >&6; }
28410 if ${ac_cv_path_W3M+:} false; then :
28411 $as_echo_n "(cached) " >&6
28412 else
30612 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
30613 printf %s "checking for $ac_word... " >&6; }
30614 if test ${ac_cv_path_W3M+y}
30615 then :
30616 printf %s "(cached) " >&6
30617 else $as_nop
2841330618 case $W3M in
2841430619 [\\/]* | ?:[\\/]*)
2841530620 ac_cv_path_W3M="$W3M" # Let the user override the test with a path.
2841930624 for as_dir in $PATH
2842030625 do
2842130626 IFS=$as_save_IFS
28422 test -z "$as_dir" && as_dir=.
30627 case $as_dir in #(((
30628 '') as_dir=./ ;;
30629 */) ;;
30630 *) as_dir=$as_dir/ ;;
30631 esac
2842330632 for ac_exec_ext in '' $ac_executable_extensions; do
28424 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
28425 ac_cv_path_W3M="$as_dir/$ac_word$ac_exec_ext"
28426 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
30633 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
30634 ac_cv_path_W3M="$as_dir$ac_word$ac_exec_ext"
30635 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
2842730636 break 2
2842830637 fi
2842930638 done
2843530644 fi
2843630645 W3M=$ac_cv_path_W3M
2843730646 if test -n "$W3M"; then
28438 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $W3M" >&5
28439 $as_echo "$W3M" >&6; }
30647 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $W3M" >&5
30648 printf "%s\n" "$W3M" >&6; }
2844030649 else
28441 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
28442 $as_echo "no" >&6; }
30650 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
30651 printf "%s\n" "no" >&6; }
2844330652 fi
2844430653
2844530654
2844830657 ac_pt_W3M=$W3M
2844930658 # Extract the first word of "w3m", so it can be a program name with args.
2845030659 set dummy w3m; ac_word=$2
28451 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
28452 $as_echo_n "checking for $ac_word... " >&6; }
28453 if ${ac_cv_path_ac_pt_W3M+:} false; then :
28454 $as_echo_n "(cached) " >&6
28455 else
30660 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
30661 printf %s "checking for $ac_word... " >&6; }
30662 if test ${ac_cv_path_ac_pt_W3M+y}
30663 then :
30664 printf %s "(cached) " >&6
30665 else $as_nop
2845630666 case $ac_pt_W3M in
2845730667 [\\/]* | ?:[\\/]*)
2845830668 ac_cv_path_ac_pt_W3M="$ac_pt_W3M" # Let the user override the test with a path.
2846230672 for as_dir in $PATH
2846330673 do
2846430674 IFS=$as_save_IFS
28465 test -z "$as_dir" && as_dir=.
30675 case $as_dir in #(((
30676 '') as_dir=./ ;;
30677 */) ;;
30678 *) as_dir=$as_dir/ ;;
30679 esac
2846630680 for ac_exec_ext in '' $ac_executable_extensions; do
28467 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
28468 ac_cv_path_ac_pt_W3M="$as_dir/$ac_word$ac_exec_ext"
28469 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
30681 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
30682 ac_cv_path_ac_pt_W3M="$as_dir$ac_word$ac_exec_ext"
30683 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
2847030684 break 2
2847130685 fi
2847230686 done
2847830692 fi
2847930693 ac_pt_W3M=$ac_cv_path_ac_pt_W3M
2848030694 if test -n "$ac_pt_W3M"; then
28481 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_W3M" >&5
28482 $as_echo "$ac_pt_W3M" >&6; }
30695 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_W3M" >&5
30696 printf "%s\n" "$ac_pt_W3M" >&6; }
2848330697 else
28484 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
28485 $as_echo "no" >&6; }
30698 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
30699 printf "%s\n" "no" >&6; }
2848630700 fi
2848730701
2848830702 if test "x$ac_pt_W3M" = x; then
2849030704 else
2849130705 case $cross_compiling:$ac_tool_warned in
2849230706 yes:)
28493 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
28494 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
30707 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
30708 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
2849530709 ac_tool_warned=yes ;;
2849630710 esac
2849730711 W3M=$ac_pt_W3M
2850430718 if test -n "$ac_tool_prefix"; then
2850530719 # Extract the first word of "${ac_tool_prefix}lynx", so it can be a program name with args.
2850630720 set dummy ${ac_tool_prefix}lynx; ac_word=$2
28507 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
28508 $as_echo_n "checking for $ac_word... " >&6; }
28509 if ${ac_cv_path_LYNX+:} false; then :
28510 $as_echo_n "(cached) " >&6
28511 else
30721 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
30722 printf %s "checking for $ac_word... " >&6; }
30723 if test ${ac_cv_path_LYNX+y}
30724 then :
30725 printf %s "(cached) " >&6
30726 else $as_nop
2851230727 case $LYNX in
2851330728 [\\/]* | ?:[\\/]*)
2851430729 ac_cv_path_LYNX="$LYNX" # Let the user override the test with a path.
2851830733 for as_dir in $PATH
2851930734 do
2852030735 IFS=$as_save_IFS
28521 test -z "$as_dir" && as_dir=.
30736 case $as_dir in #(((
30737 '') as_dir=./ ;;
30738 */) ;;
30739 *) as_dir=$as_dir/ ;;
30740 esac
2852230741 for ac_exec_ext in '' $ac_executable_extensions; do
28523 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
28524 ac_cv_path_LYNX="$as_dir/$ac_word$ac_exec_ext"
28525 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
30742 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
30743 ac_cv_path_LYNX="$as_dir$ac_word$ac_exec_ext"
30744 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
2852630745 break 2
2852730746 fi
2852830747 done
2853430753 fi
2853530754 LYNX=$ac_cv_path_LYNX
2853630755 if test -n "$LYNX"; then
28537 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LYNX" >&5
28538 $as_echo "$LYNX" >&6; }
30756 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LYNX" >&5
30757 printf "%s\n" "$LYNX" >&6; }
2853930758 else
28540 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
28541 $as_echo "no" >&6; }
30759 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
30760 printf "%s\n" "no" >&6; }
2854230761 fi
2854330762
2854430763
2854730766 ac_pt_LYNX=$LYNX
2854830767 # Extract the first word of "lynx", so it can be a program name with args.
2854930768 set dummy lynx; ac_word=$2
28550 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
28551 $as_echo_n "checking for $ac_word... " >&6; }
28552 if ${ac_cv_path_ac_pt_LYNX+:} false; then :
28553 $as_echo_n "(cached) " >&6
28554 else
30769 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
30770 printf %s "checking for $ac_word... " >&6; }
30771 if test ${ac_cv_path_ac_pt_LYNX+y}
30772 then :
30773 printf %s "(cached) " >&6
30774 else $as_nop
2855530775 case $ac_pt_LYNX in
2855630776 [\\/]* | ?:[\\/]*)
2855730777 ac_cv_path_ac_pt_LYNX="$ac_pt_LYNX" # Let the user override the test with a path.
2856130781 for as_dir in $PATH
2856230782 do
2856330783 IFS=$as_save_IFS
28564 test -z "$as_dir" && as_dir=.
30784 case $as_dir in #(((
30785 '') as_dir=./ ;;
30786 */) ;;
30787 *) as_dir=$as_dir/ ;;
30788 esac
2856530789 for ac_exec_ext in '' $ac_executable_extensions; do
28566 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
28567 ac_cv_path_ac_pt_LYNX="$as_dir/$ac_word$ac_exec_ext"
28568 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
30790 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
30791 ac_cv_path_ac_pt_LYNX="$as_dir$ac_word$ac_exec_ext"
30792 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
2856930793 break 2
2857030794 fi
2857130795 done
2857730801 fi
2857830802 ac_pt_LYNX=$ac_cv_path_ac_pt_LYNX
2857930803 if test -n "$ac_pt_LYNX"; then
28580 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_LYNX" >&5
28581 $as_echo "$ac_pt_LYNX" >&6; }
30804 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_LYNX" >&5
30805 printf "%s\n" "$ac_pt_LYNX" >&6; }
2858230806 else
28583 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
28584 $as_echo "no" >&6; }
30807 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
30808 printf "%s\n" "no" >&6; }
2858530809 fi
2858630810
2858730811 if test "x$ac_pt_LYNX" = x; then
2858930813 else
2859030814 case $cross_compiling:$ac_tool_warned in
2859130815 yes:)
28592 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
28593 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
30816 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
30817 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
2859430818 ac_tool_warned=yes ;;
2859530819 esac
2859630820 LYNX=$ac_pt_LYNX
2860030824 fi
2860130825
2860230826
28603 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if can build top-level README" >&5
28604 $as_echo_n "checking if can build top-level README... " >&6; }
28605 if test "x$W3M" != "x"; then :
30827 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if can build top-level README" >&5
30828 printf %s "checking if can build top-level README... " >&6; }
30829 if test "x$W3M" != "x"
30830 then :
2860630831 hwloc_generate_readme=yes
2860730832 HWLOC_W3_GENERATOR=$W3M
28608 else
28609 if test "x$LYNX" != "x"; then :
30833 else $as_nop
30834 if test "x$LYNX" != "x"
30835 then :
2861030836 hwloc_generate_readme=yes
2861130837 HWLOC_W3_GENERATOR="$LYNX -dump -nolist"
28612 else
30838 else $as_nop
2861330839 hwloc_generate_readme=no
2861430840 fi
2861530841 fi
2861630842
28617 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hwloc_generate_readme" >&5
28618 $as_echo "$hwloc_generate_readme" >&6; }
30843 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hwloc_generate_readme" >&5
30844 printf "%s\n" "$hwloc_generate_readme" >&6; }
2861930845
2862030846 # If any one of the above tools is missing, we will refuse to make dist.
28621 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if will build doxygen docs" >&5
28622 $as_echo_n "checking if will build doxygen docs... " >&6; }
28623 if test "x$hwloc_generate_doxs" = "xyes" -a "x$enable_doxygen" != "xno"; then :
28624
28625 else
30847 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if will build doxygen docs" >&5
30848 printf %s "checking if will build doxygen docs... " >&6; }
30849 if test "x$hwloc_generate_doxs" = "xyes" -a "x$enable_doxygen" != "xno"
30850 then :
30851
30852 else $as_nop
2862630853 hwloc_generate_doxs=no
2862730854 fi
28628 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hwloc_generate_doxs" >&5
28629 $as_echo "$hwloc_generate_doxs" >&6; }
30855 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hwloc_generate_doxs" >&5
30856 printf "%s\n" "$hwloc_generate_doxs" >&6; }
2863030857
2863130858 # See if we want to install the doxygen docs
28632 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if will install doxygen docs" >&5
28633 $as_echo_n "checking if will install doxygen docs... " >&6; }
30859 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if will install doxygen docs" >&5
30860 printf %s "checking if will install doxygen docs... " >&6; }
2863430861 if test "x$hwloc_generate_doxs" = "xyes" -o \
2863530862 -f "$srcdir/doc/doxygen-doc/man/man3/hwloc_distrib.3" -a \
2863630863 -f "$srcdir/doc/doxygen-doc/hwloc-a4.pdf" -a \
28637 -f "$srcdir/doc/doxygen-doc/hwloc-letter.pdf"; then :
30864 -f "$srcdir/doc/doxygen-doc/hwloc-letter.pdf"
30865 then :
2863830866 hwloc_install_doxs=yes
28639 else
30867 else $as_nop
2864030868 hwloc_install_doxs=no
2864130869 fi
28642 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hwloc_install_doxs" >&5
28643 $as_echo "$hwloc_install_doxs" >&6; }
30870 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hwloc_install_doxs" >&5
30871 printf "%s\n" "$hwloc_install_doxs" >&6; }
2864430872
2864530873 # Generate some files for the docs
2864630874 ac_config_files="$ac_config_files doc/Makefile doc/examples/Makefile doc/doxygen-config.cfg"
2866830896 if test "$no_x" = yes; then
2866930897 # Not all programs may use this symbol, but it does not hurt to define it.
2867030898
28671 $as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h
30899 printf "%s\n" "#define X_DISPLAY_MISSING 1" >>confdefs.h
2867230900
2867330901 X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS=
2867430902 else
2868130909 X_LIBS="$X_LIBS -L$x_libraries"
2868230910 # For Solaris; some versions of Sun CC require a space after -R and
2868330911 # others require no space. Words are not sufficient . . . .
28684 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5
28685 $as_echo_n "checking whether -R must be followed by a space... " >&6; }
30912 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5
30913 printf %s "checking whether -R must be followed by a space... " >&6; }
2868630914 ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries"
2868730915 ac_xsave_c_werror_flag=$ac_c_werror_flag
2868830916 ac_c_werror_flag=yes
2869030918 /* end confdefs.h. */
2869130919
2869230920 int
28693 main ()
30921 main (void)
2869430922 {
2869530923
2869630924 ;
2869730925 return 0;
2869830926 }
2869930927 _ACEOF
28700 if ac_fn_c_try_link "$LINENO"; then :
28701 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
28702 $as_echo "no" >&6; }
30928 if ac_fn_c_try_link "$LINENO"
30929 then :
30930 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
30931 printf "%s\n" "no" >&6; }
2870330932 X_LIBS="$X_LIBS -R$x_libraries"
28704 else
30933 else $as_nop
2870530934 LIBS="$ac_xsave_LIBS -R $x_libraries"
2870630935 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2870730936 /* end confdefs.h. */
2870830937
2870930938 int
28710 main ()
30939 main (void)
2871130940 {
2871230941
2871330942 ;
2871430943 return 0;
2871530944 }
2871630945 _ACEOF
28717 if ac_fn_c_try_link "$LINENO"; then :
28718 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
28719 $as_echo "yes" >&6; }
30946 if ac_fn_c_try_link "$LINENO"
30947 then :
30948 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
30949 printf "%s\n" "yes" >&6; }
2872030950 X_LIBS="$X_LIBS -R $x_libraries"
28721 else
28722 { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5
28723 $as_echo "neither works" >&6; }
28724 fi
28725 rm -f core conftest.err conftest.$ac_objext \
30951 else $as_nop
30952 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: neither works" >&5
30953 printf "%s\n" "neither works" >&6; }
30954 fi
30955 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2872630956 conftest$ac_exeext conftest.$ac_ext
2872730957 fi
28728 rm -f core conftest.err conftest.$ac_objext \
30958 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2872930959 conftest$ac_exeext conftest.$ac_ext
2873030960 ac_c_werror_flag=$ac_xsave_c_werror_flag
2873130961 LIBS=$ac_xsave_LIBS
2874830978 /* Override any GCC internal prototype to avoid an error.
2874930979 Use char because int might match the return type of a GCC
2875030980 builtin and then its argument prototype would still apply. */
28751 #ifdef __cplusplus
28752 extern "C"
28753 #endif
2875430981 char XOpenDisplay ();
2875530982 int
28756 main ()
30983 main (void)
2875730984 {
2875830985 return XOpenDisplay ();
2875930986 ;
2876030987 return 0;
2876130988 }
2876230989 _ACEOF
28763 if ac_fn_c_try_link "$LINENO"; then :
28764
28765 else
28766 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5
28767 $as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; }
28768 if ${ac_cv_lib_dnet_dnet_ntoa+:} false; then :
28769 $as_echo_n "(cached) " >&6
28770 else
30990 if ac_fn_c_try_link "$LINENO"
30991 then :
30992
30993 else $as_nop
30994 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5
30995 printf %s "checking for dnet_ntoa in -ldnet... " >&6; }
30996 if test ${ac_cv_lib_dnet_dnet_ntoa+y}
30997 then :
30998 printf %s "(cached) " >&6
30999 else $as_nop
2877131000 ac_check_lib_save_LIBS=$LIBS
2877231001 LIBS="-ldnet $LIBS"
2877331002 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2877631005 /* Override any GCC internal prototype to avoid an error.
2877731006 Use char because int might match the return type of a GCC
2877831007 builtin and then its argument prototype would still apply. */
28779 #ifdef __cplusplus
28780 extern "C"
28781 #endif
2878231008 char dnet_ntoa ();
2878331009 int
28784 main ()
31010 main (void)
2878531011 {
2878631012 return dnet_ntoa ();
2878731013 ;
2878831014 return 0;
2878931015 }
2879031016 _ACEOF
28791 if ac_fn_c_try_link "$LINENO"; then :
31017 if ac_fn_c_try_link "$LINENO"
31018 then :
2879231019 ac_cv_lib_dnet_dnet_ntoa=yes
28793 else
31020 else $as_nop
2879431021 ac_cv_lib_dnet_dnet_ntoa=no
2879531022 fi
28796 rm -f core conftest.err conftest.$ac_objext \
31023 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2879731024 conftest$ac_exeext conftest.$ac_ext
2879831025 LIBS=$ac_check_lib_save_LIBS
2879931026 fi
28800 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5
28801 $as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; }
28802 if test "x$ac_cv_lib_dnet_dnet_ntoa" = xyes; then :
31027 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5
31028 printf "%s\n" "$ac_cv_lib_dnet_dnet_ntoa" >&6; }
31029 if test "x$ac_cv_lib_dnet_dnet_ntoa" = xyes
31030 then :
2880331031 X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
2880431032 fi
2880531033
2880631034 if test $ac_cv_lib_dnet_dnet_ntoa = no; then
28807 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5
28808 $as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; }
28809 if ${ac_cv_lib_dnet_stub_dnet_ntoa+:} false; then :
28810 $as_echo_n "(cached) " >&6
28811 else
31035 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5
31036 printf %s "checking for dnet_ntoa in -ldnet_stub... " >&6; }
31037 if test ${ac_cv_lib_dnet_stub_dnet_ntoa+y}
31038 then :
31039 printf %s "(cached) " >&6
31040 else $as_nop
2881231041 ac_check_lib_save_LIBS=$LIBS
2881331042 LIBS="-ldnet_stub $LIBS"
2881431043 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2881731046 /* Override any GCC internal prototype to avoid an error.
2881831047 Use char because int might match the return type of a GCC
2881931048 builtin and then its argument prototype would still apply. */
28820 #ifdef __cplusplus
28821 extern "C"
28822 #endif
2882331049 char dnet_ntoa ();
2882431050 int
28825 main ()
31051 main (void)
2882631052 {
2882731053 return dnet_ntoa ();
2882831054 ;
2882931055 return 0;
2883031056 }
2883131057 _ACEOF
28832 if ac_fn_c_try_link "$LINENO"; then :
31058 if ac_fn_c_try_link "$LINENO"
31059 then :
2883331060 ac_cv_lib_dnet_stub_dnet_ntoa=yes
28834 else
31061 else $as_nop
2883531062 ac_cv_lib_dnet_stub_dnet_ntoa=no
2883631063 fi
28837 rm -f core conftest.err conftest.$ac_objext \
31064 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2883831065 conftest$ac_exeext conftest.$ac_ext
2883931066 LIBS=$ac_check_lib_save_LIBS
2884031067 fi
28841 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5
28842 $as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; }
28843 if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = xyes; then :
31068 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5
31069 printf "%s\n" "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; }
31070 if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = xyes
31071 then :
2884431072 X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
2884531073 fi
2884631074
2884731075 fi
2884831076 fi
28849 rm -f core conftest.err conftest.$ac_objext \
31077 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2885031078 conftest$ac_exeext conftest.$ac_ext
2885131079 LIBS="$ac_xsave_LIBS"
2885231080
2885931087 # The functions gethostbyname, getservbyname, and inet_addr are
2886031088 # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking.
2886131089 ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname"
28862 if test "x$ac_cv_func_gethostbyname" = xyes; then :
31090 if test "x$ac_cv_func_gethostbyname" = xyes
31091 then :
2886331092
2886431093 fi
2886531094
2886631095 if test $ac_cv_func_gethostbyname = no; then
28867 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5
28868 $as_echo_n "checking for gethostbyname in -lnsl... " >&6; }
28869 if ${ac_cv_lib_nsl_gethostbyname+:} false; then :
28870 $as_echo_n "(cached) " >&6
28871 else
31096 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5
31097 printf %s "checking for gethostbyname in -lnsl... " >&6; }
31098 if test ${ac_cv_lib_nsl_gethostbyname+y}
31099 then :
31100 printf %s "(cached) " >&6
31101 else $as_nop
2887231102 ac_check_lib_save_LIBS=$LIBS
2887331103 LIBS="-lnsl $LIBS"
2887431104 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2887731107 /* Override any GCC internal prototype to avoid an error.
2887831108 Use char because int might match the return type of a GCC
2887931109 builtin and then its argument prototype would still apply. */
28880 #ifdef __cplusplus
28881 extern "C"
28882 #endif
2888331110 char gethostbyname ();
2888431111 int
28885 main ()
31112 main (void)
2888631113 {
2888731114 return gethostbyname ();
2888831115 ;
2888931116 return 0;
2889031117 }
2889131118 _ACEOF
28892 if ac_fn_c_try_link "$LINENO"; then :
31119 if ac_fn_c_try_link "$LINENO"
31120 then :
2889331121 ac_cv_lib_nsl_gethostbyname=yes
28894 else
31122 else $as_nop
2889531123 ac_cv_lib_nsl_gethostbyname=no
2889631124 fi
28897 rm -f core conftest.err conftest.$ac_objext \
31125 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2889831126 conftest$ac_exeext conftest.$ac_ext
2889931127 LIBS=$ac_check_lib_save_LIBS
2890031128 fi
28901 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5
28902 $as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; }
28903 if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then :
31129 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5
31130 printf "%s\n" "$ac_cv_lib_nsl_gethostbyname" >&6; }
31131 if test "x$ac_cv_lib_nsl_gethostbyname" = xyes
31132 then :
2890431133 X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
2890531134 fi
2890631135
2890731136 if test $ac_cv_lib_nsl_gethostbyname = no; then
28908 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5
28909 $as_echo_n "checking for gethostbyname in -lbsd... " >&6; }
28910 if ${ac_cv_lib_bsd_gethostbyname+:} false; then :
28911 $as_echo_n "(cached) " >&6
28912 else
31137 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5
31138 printf %s "checking for gethostbyname in -lbsd... " >&6; }
31139 if test ${ac_cv_lib_bsd_gethostbyname+y}
31140 then :
31141 printf %s "(cached) " >&6
31142 else $as_nop
2891331143 ac_check_lib_save_LIBS=$LIBS
2891431144 LIBS="-lbsd $LIBS"
2891531145 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2891831148 /* Override any GCC internal prototype to avoid an error.
2891931149 Use char because int might match the return type of a GCC
2892031150 builtin and then its argument prototype would still apply. */
28921 #ifdef __cplusplus
28922 extern "C"
28923 #endif
2892431151 char gethostbyname ();
2892531152 int
28926 main ()
31153 main (void)
2892731154 {
2892831155 return gethostbyname ();
2892931156 ;
2893031157 return 0;
2893131158 }
2893231159 _ACEOF
28933 if ac_fn_c_try_link "$LINENO"; then :
31160 if ac_fn_c_try_link "$LINENO"
31161 then :
2893431162 ac_cv_lib_bsd_gethostbyname=yes
28935 else
31163 else $as_nop
2893631164 ac_cv_lib_bsd_gethostbyname=no
2893731165 fi
28938 rm -f core conftest.err conftest.$ac_objext \
31166 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2893931167 conftest$ac_exeext conftest.$ac_ext
2894031168 LIBS=$ac_check_lib_save_LIBS
2894131169 fi
28942 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5
28943 $as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; }
28944 if test "x$ac_cv_lib_bsd_gethostbyname" = xyes; then :
31170 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5
31171 printf "%s\n" "$ac_cv_lib_bsd_gethostbyname" >&6; }
31172 if test "x$ac_cv_lib_bsd_gethostbyname" = xyes
31173 then :
2894531174 X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd"
2894631175 fi
2894731176
2895631185 # must be given before -lnsl if both are needed. We assume that
2895731186 # if connect needs -lnsl, so does gethostbyname.
2895831187 ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect"
28959 if test "x$ac_cv_func_connect" = xyes; then :
31188 if test "x$ac_cv_func_connect" = xyes
31189 then :
2896031190
2896131191 fi
2896231192
2896331193 if test $ac_cv_func_connect = no; then
28964 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5
28965 $as_echo_n "checking for connect in -lsocket... " >&6; }
28966 if ${ac_cv_lib_socket_connect+:} false; then :
28967 $as_echo_n "(cached) " >&6
28968 else
31194 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5
31195 printf %s "checking for connect in -lsocket... " >&6; }
31196 if test ${ac_cv_lib_socket_connect+y}
31197 then :
31198 printf %s "(cached) " >&6
31199 else $as_nop
2896931200 ac_check_lib_save_LIBS=$LIBS
2897031201 LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
2897131202 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2897431205 /* Override any GCC internal prototype to avoid an error.
2897531206 Use char because int might match the return type of a GCC
2897631207 builtin and then its argument prototype would still apply. */
28977 #ifdef __cplusplus
28978 extern "C"
28979 #endif
2898031208 char connect ();
2898131209 int
28982 main ()
31210 main (void)
2898331211 {
2898431212 return connect ();
2898531213 ;
2898631214 return 0;
2898731215 }
2898831216 _ACEOF
28989 if ac_fn_c_try_link "$LINENO"; then :
31217 if ac_fn_c_try_link "$LINENO"
31218 then :
2899031219 ac_cv_lib_socket_connect=yes
28991 else
31220 else $as_nop
2899231221 ac_cv_lib_socket_connect=no
2899331222 fi
28994 rm -f core conftest.err conftest.$ac_objext \
31223 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2899531224 conftest$ac_exeext conftest.$ac_ext
2899631225 LIBS=$ac_check_lib_save_LIBS
2899731226 fi
28998 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5
28999 $as_echo "$ac_cv_lib_socket_connect" >&6; }
29000 if test "x$ac_cv_lib_socket_connect" = xyes; then :
31227 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5
31228 printf "%s\n" "$ac_cv_lib_socket_connect" >&6; }
31229 if test "x$ac_cv_lib_socket_connect" = xyes
31230 then :
2900131231 X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
2900231232 fi
2900331233
2900531235
2900631236 # Guillermo Gomez says -lposix is necessary on A/UX.
2900731237 ac_fn_c_check_func "$LINENO" "remove" "ac_cv_func_remove"
29008 if test "x$ac_cv_func_remove" = xyes; then :
31238 if test "x$ac_cv_func_remove" = xyes
31239 then :
2900931240
2901031241 fi
2901131242
2901231243 if test $ac_cv_func_remove = no; then
29013 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5
29014 $as_echo_n "checking for remove in -lposix... " >&6; }
29015 if ${ac_cv_lib_posix_remove+:} false; then :
29016 $as_echo_n "(cached) " >&6
29017 else
31244 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5
31245 printf %s "checking for remove in -lposix... " >&6; }
31246 if test ${ac_cv_lib_posix_remove+y}
31247 then :
31248 printf %s "(cached) " >&6
31249 else $as_nop
2901831250 ac_check_lib_save_LIBS=$LIBS
2901931251 LIBS="-lposix $LIBS"
2902031252 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2902331255 /* Override any GCC internal prototype to avoid an error.
2902431256 Use char because int might match the return type of a GCC
2902531257 builtin and then its argument prototype would still apply. */
29026 #ifdef __cplusplus
29027 extern "C"
29028 #endif
2902931258 char remove ();
2903031259 int
29031 main ()
31260 main (void)
2903231261 {
2903331262 return remove ();
2903431263 ;
2903531264 return 0;
2903631265 }
2903731266 _ACEOF
29038 if ac_fn_c_try_link "$LINENO"; then :
31267 if ac_fn_c_try_link "$LINENO"
31268 then :
2903931269 ac_cv_lib_posix_remove=yes
29040 else
31270 else $as_nop
2904131271 ac_cv_lib_posix_remove=no
2904231272 fi
29043 rm -f core conftest.err conftest.$ac_objext \
31273 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2904431274 conftest$ac_exeext conftest.$ac_ext
2904531275 LIBS=$ac_check_lib_save_LIBS
2904631276 fi
29047 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5
29048 $as_echo "$ac_cv_lib_posix_remove" >&6; }
29049 if test "x$ac_cv_lib_posix_remove" = xyes; then :
31277 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5
31278 printf "%s\n" "$ac_cv_lib_posix_remove" >&6; }
31279 if test "x$ac_cv_lib_posix_remove" = xyes
31280 then :
2905031281 X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
2905131282 fi
2905231283
2905431285
2905531286 # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
2905631287 ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat"
29057 if test "x$ac_cv_func_shmat" = xyes; then :
31288 if test "x$ac_cv_func_shmat" = xyes
31289 then :
2905831290
2905931291 fi
2906031292
2906131293 if test $ac_cv_func_shmat = no; then
29062 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5
29063 $as_echo_n "checking for shmat in -lipc... " >&6; }
29064 if ${ac_cv_lib_ipc_shmat+:} false; then :
29065 $as_echo_n "(cached) " >&6
29066 else
31294 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5
31295 printf %s "checking for shmat in -lipc... " >&6; }
31296 if test ${ac_cv_lib_ipc_shmat+y}
31297 then :
31298 printf %s "(cached) " >&6
31299 else $as_nop
2906731300 ac_check_lib_save_LIBS=$LIBS
2906831301 LIBS="-lipc $LIBS"
2906931302 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2907231305 /* Override any GCC internal prototype to avoid an error.
2907331306 Use char because int might match the return type of a GCC
2907431307 builtin and then its argument prototype would still apply. */
29075 #ifdef __cplusplus
29076 extern "C"
29077 #endif
2907831308 char shmat ();
2907931309 int
29080 main ()
31310 main (void)
2908131311 {
2908231312 return shmat ();
2908331313 ;
2908431314 return 0;
2908531315 }
2908631316 _ACEOF
29087 if ac_fn_c_try_link "$LINENO"; then :
31317 if ac_fn_c_try_link "$LINENO"
31318 then :
2908831319 ac_cv_lib_ipc_shmat=yes
29089 else
31320 else $as_nop
2909031321 ac_cv_lib_ipc_shmat=no
2909131322 fi
29092 rm -f core conftest.err conftest.$ac_objext \
31323 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2909331324 conftest$ac_exeext conftest.$ac_ext
2909431325 LIBS=$ac_check_lib_save_LIBS
2909531326 fi
29096 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5
29097 $as_echo "$ac_cv_lib_ipc_shmat" >&6; }
29098 if test "x$ac_cv_lib_ipc_shmat" = xyes; then :
31327 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5
31328 printf "%s\n" "$ac_cv_lib_ipc_shmat" >&6; }
31329 if test "x$ac_cv_lib_ipc_shmat" = xyes
31330 then :
2909931331 X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
2910031332 fi
2910131333
2911131343 # These have to be linked with before -lX11, unlike the other
2911231344 # libraries we check for below, so use a different variable.
2911331345 # John Interrante, Karl Berry
29114 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5
29115 $as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; }
29116 if ${ac_cv_lib_ICE_IceConnectionNumber+:} false; then :
29117 $as_echo_n "(cached) " >&6
29118 else
31346 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5
31347 printf %s "checking for IceConnectionNumber in -lICE... " >&6; }
31348 if test ${ac_cv_lib_ICE_IceConnectionNumber+y}
31349 then :
31350 printf %s "(cached) " >&6
31351 else $as_nop
2911931352 ac_check_lib_save_LIBS=$LIBS
2912031353 LIBS="-lICE $X_EXTRA_LIBS $LIBS"
2912131354 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2912431357 /* Override any GCC internal prototype to avoid an error.
2912531358 Use char because int might match the return type of a GCC
2912631359 builtin and then its argument prototype would still apply. */
29127 #ifdef __cplusplus
29128 extern "C"
29129 #endif
2913031360 char IceConnectionNumber ();
2913131361 int
29132 main ()
31362 main (void)
2913331363 {
2913431364 return IceConnectionNumber ();
2913531365 ;
2913631366 return 0;
2913731367 }
2913831368 _ACEOF
29139 if ac_fn_c_try_link "$LINENO"; then :
31369 if ac_fn_c_try_link "$LINENO"
31370 then :
2914031371 ac_cv_lib_ICE_IceConnectionNumber=yes
29141 else
31372 else $as_nop
2914231373 ac_cv_lib_ICE_IceConnectionNumber=no
2914331374 fi
29144 rm -f core conftest.err conftest.$ac_objext \
31375 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2914531376 conftest$ac_exeext conftest.$ac_ext
2914631377 LIBS=$ac_check_lib_save_LIBS
2914731378 fi
29148 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5
29149 $as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; }
29150 if test "x$ac_cv_lib_ICE_IceConnectionNumber" = xyes; then :
31379 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5
31380 printf "%s\n" "$ac_cv_lib_ICE_IceConnectionNumber" >&6; }
31381 if test "x$ac_cv_lib_ICE_IceConnectionNumber" = xyes
31382 then :
2915131383 X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
2915231384 fi
2915331385
2916131393
2916231394 CPPFLAGS="$CPPFLAGS $X_CFLAGS"
2916331395 LIBS="$LIBS $X_PRE_LIBS $X_LIBS $X_EXTRA_LIBS"
29164 for ac_header in X11/Xlib.h
31396 for ac_header in X11/Xlib.h
2916531397 do :
29166 ac_fn_c_check_header_mongrel "$LINENO" "X11/Xlib.h" "ac_cv_header_X11_Xlib_h" "$ac_includes_default"
29167 if test "x$ac_cv_header_X11_Xlib_h" = xyes; then :
29168 cat >>confdefs.h <<_ACEOF
29169 #define HAVE_X11_XLIB_H 1
29170 _ACEOF
29171 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XOpenDisplay in -lX11" >&5
29172 $as_echo_n "checking for XOpenDisplay in -lX11... " >&6; }
29173 if ${ac_cv_lib_X11_XOpenDisplay+:} false; then :
29174 $as_echo_n "(cached) " >&6
29175 else
31398 ac_fn_c_check_header_compile "$LINENO" "X11/Xlib.h" "ac_cv_header_X11_Xlib_h" "$ac_includes_default"
31399 if test "x$ac_cv_header_X11_Xlib_h" = xyes
31400 then :
31401 printf "%s\n" "#define HAVE_X11_XLIB_H 1" >>confdefs.h
31402 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for XOpenDisplay in -lX11" >&5
31403 printf %s "checking for XOpenDisplay in -lX11... " >&6; }
31404 if test ${ac_cv_lib_X11_XOpenDisplay+y}
31405 then :
31406 printf %s "(cached) " >&6
31407 else $as_nop
2917631408 ac_check_lib_save_LIBS=$LIBS
2917731409 LIBS="-lX11 $LIBS"
2917831410 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2918131413 /* Override any GCC internal prototype to avoid an error.
2918231414 Use char because int might match the return type of a GCC
2918331415 builtin and then its argument prototype would still apply. */
29184 #ifdef __cplusplus
29185 extern "C"
29186 #endif
2918731416 char XOpenDisplay ();
2918831417 int
29189 main ()
31418 main (void)
2919031419 {
2919131420 return XOpenDisplay ();
2919231421 ;
2919331422 return 0;
2919431423 }
2919531424 _ACEOF
29196 if ac_fn_c_try_link "$LINENO"; then :
31425 if ac_fn_c_try_link "$LINENO"
31426 then :
2919731427 ac_cv_lib_X11_XOpenDisplay=yes
29198 else
31428 else $as_nop
2919931429 ac_cv_lib_X11_XOpenDisplay=no
2920031430 fi
29201 rm -f core conftest.err conftest.$ac_objext \
31431 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2920231432 conftest$ac_exeext conftest.$ac_ext
2920331433 LIBS=$ac_check_lib_save_LIBS
2920431434 fi
29205 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_X11_XOpenDisplay" >&5
29206 $as_echo "$ac_cv_lib_X11_XOpenDisplay" >&6; }
29207 if test "x$ac_cv_lib_X11_XOpenDisplay" = xyes; then :
29208 for ac_header in X11/Xutil.h
31435 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_X11_XOpenDisplay" >&5
31436 printf "%s\n" "$ac_cv_lib_X11_XOpenDisplay" >&6; }
31437 if test "x$ac_cv_lib_X11_XOpenDisplay" = xyes
31438 then :
31439 for ac_header in X11/Xutil.h
2920931440 do :
2921031441 ac_fn_c_check_header_compile "$LINENO" "X11/Xutil.h" "ac_cv_header_X11_Xutil_h" "#include <X11/Xlib.h>
2921131442 "
29212 if test "x$ac_cv_header_X11_Xutil_h" = xyes; then :
29213 cat >>confdefs.h <<_ACEOF
29214 #define HAVE_X11_XUTIL_H 1
29215 _ACEOF
29216 for ac_header in X11/keysym.h
31443 if test "x$ac_cv_header_X11_Xutil_h" = xyes
31444 then :
31445 printf "%s\n" "#define HAVE_X11_XUTIL_H 1" >>confdefs.h
31446 for ac_header in X11/keysym.h
2921731447 do :
29218 ac_fn_c_check_header_mongrel "$LINENO" "X11/keysym.h" "ac_cv_header_X11_keysym_h" "$ac_includes_default"
29219 if test "x$ac_cv_header_X11_keysym_h" = xyes; then :
29220 cat >>confdefs.h <<_ACEOF
29221 #define HAVE_X11_KEYSYM_H 1
29222 _ACEOF
29223
29224 $as_echo "#define HWLOC_HAVE_X11_KEYSYM 1" >>confdefs.h
31448 ac_fn_c_check_header_compile "$LINENO" "X11/keysym.h" "ac_cv_header_X11_keysym_h" "$ac_includes_default"
31449 if test "x$ac_cv_header_X11_keysym_h" = xyes
31450 then :
31451 printf "%s\n" "#define HAVE_X11_KEYSYM_H 1" >>confdefs.h
31452
31453 printf "%s\n" "#define HWLOC_HAVE_X11_KEYSYM 1" >>confdefs.h
2922531454
2922631455 hwloc_x11_keysym_happy=yes
2922731456 HWLOC_X11_CPPFLAGS="$X_CFLAGS"
2923231461
2923331462 done
2923431463
29235
2923631464 fi
2923731465
2923831466 done
2923931467
29240
2924131468 fi
2924231469
2924331470
2924431471 fi
2924531472
2924631473 done
29247
2924831474 CPPFLAGS=$CPPFLAGS_save
2924931475 LIBS=$LIBS_save
2925031476
2925431480
2925531481
2925631482 HWLOC_pkg_failed=no
29257 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CAIRO" >&5
29258 $as_echo_n "checking for CAIRO... " >&6; }
31483 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CAIRO" >&5
31484 printf %s "checking for CAIRO... " >&6; }
2925931485
2926031486 if test -n "$PKG_CONFIG"; then
2926131487 if test -n "$HWLOC_CAIRO_CFLAGS"; then
2926231488 HWLOC_pkg_cv_HWLOC_CAIRO_CFLAGS="$HWLOC_CAIRO_CFLAGS"
2926331489 else
2926431490 if test -n "$PKG_CONFIG" && \
29265 { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --silence-errors \"cairo\""; } >&5
31491 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --silence-errors \"cairo\""; } >&5
2926631492 ($PKG_CONFIG --exists --silence-errors "cairo") 2>&5
2926731493 ac_status=$?
29268 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
31494 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
2926931495 test $ac_status = 0; }; then
2927031496 HWLOC_pkg_cv_HWLOC_CAIRO_CFLAGS=`$PKG_CONFIG --cflags "cairo" 2>/dev/null`
2927131497 else
2928131507 HWLOC_pkg_cv_HWLOC_CAIRO_LIBS="$HWLOC_CAIRO_LIBS"
2928231508 else
2928331509 if test -n "$PKG_CONFIG" && \
29284 { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --silence-errors \"cairo\""; } >&5
31510 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --silence-errors \"cairo\""; } >&5
2928531511 ($PKG_CONFIG --exists --silence-errors "cairo") 2>&5
2928631512 ac_status=$?
29287 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
31513 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
2928831514 test $ac_status = 0; }; then
2928931515 HWLOC_pkg_cv_HWLOC_CAIRO_LIBS=`$PKG_CONFIG --libs "cairo" 2>/dev/null`
2929031516 else
2931431540 # Put the nasty error message in config.log where it belongs
2931531541 echo "$HWLOC_CAIRO_PKG_ERRORS" >&5
2931631542
29317 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
29318 $as_echo "no" >&6; }
31543 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
31544 printf "%s\n" "no" >&6; }
2931931545 hwloc_cairo_happy=no
2932031546 elif test $HWLOC_pkg_failed = untried; then
29321 { $as_echo "$as_me:${as_lineno-$LINENO}: result: cannot check without pkg-config" >&5
29322 $as_echo "cannot check without pkg-config" >&6; }
31547 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cannot check without pkg-config" >&5
31548 printf "%s\n" "cannot check without pkg-config" >&6; }
2932331549 hwloc_cairo_happy=no
2932431550 else
29325 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
29326 $as_echo "yes" >&6; }
31551 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
31552 printf "%s\n" "yes" >&6; }
2932731553
2932831554 # If we got good results from pkg-config, check that they
2932931555 # actually work (i.e., that we can link against the resulting
2934231568 CFLAGS="$CFLAGS $HWLOC_pkg_cv_HWLOC_CAIRO_CFLAGS"
2934331569 CPPFLAGS="$CPPFLAGS $HWLOC_pkg_cv_HWLOC_CAIRO_CFLAGS"
2934431570 LIBS="$LIBS $HWLOC_pkg_cv_HWLOC_CAIRO_LIBS"
29345 ac_fn_c_check_header_mongrel "$LINENO" "cairo.h" "ac_cv_header_cairo_h" "$ac_includes_default"
29346 if test "x$ac_cv_header_cairo_h" = xyes; then :
31571 ac_fn_c_check_header_compile "$LINENO" "cairo.h" "ac_cv_header_cairo_h" "$ac_includes_default"
31572 if test "x$ac_cv_header_cairo_h" = xyes
31573 then :
2934731574
2934831575 ac_fn_c_check_func "$LINENO" "cairo_fill" "ac_cv_func_cairo_fill"
29349 if test "x$ac_cv_func_cairo_fill" = xyes; then :
31576 if test "x$ac_cv_func_cairo_fill" = xyes
31577 then :
2935031578 hwloc_result=yes
29351 else
31579 else $as_nop
2935231580 hwloc_result=no
2935331581 fi
2935431582
2935531583
29356 else
31584 else $as_nop
2935731585 hwloc_result=no
2935831586 fi
29359
2936031587
2936131588 CFLAGS=$hwloc_cflags_save
2936231589 CPPFLAGS=$hwloc_cppflags_save
2936331590 LIBS=$hwloc_libs_save
2936431591
29365 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for final CAIRO support" >&5
29366 $as_echo_n "checking for final CAIRO support... " >&6; }
29367 if test "$hwloc_result" = "yes"; then :
31592 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for final CAIRO support" >&5
31593 printf %s "checking for final CAIRO support... " >&6; }
31594 if test "$hwloc_result" = "yes"
31595 then :
2936831596 HWLOC_CAIRO_CFLAGS=$HWLOC_pkg_cv_HWLOC_CAIRO_CFLAGS
2936931597 HWLOC_CAIRO_LIBS=$HWLOC_pkg_cv_HWLOC_CAIRO_LIBS
29370 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
29371 $as_echo "yes" >&6; }
31598 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
31599 printf "%s\n" "yes" >&6; }
2937231600 hwloc_cairo_happy=yes
29373 else
29374 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
29375 $as_echo "no" >&6; }
31601 else $as_nop
31602 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
31603 printf "%s\n" "no" >&6; }
2937631604 hwloc_cairo_happy=no
2937731605 fi
2937831606 fi
2938031608
2938131609 if test "x$hwloc_cairo_happy" = "xyes"; then
2938231610
29383 $as_echo "#define HWLOC_HAVE_CAIRO 1" >>confdefs.h
29384
29385 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstopo Cairo/X11 interactive graphical output is supported" >&5
29386 $as_echo_n "checking whether lstopo Cairo/X11 interactive graphical output is supported... " >&6; }
31611 printf "%s\n" "#define HWLOC_HAVE_CAIRO 1" >>confdefs.h
31612
31613 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether lstopo Cairo/X11 interactive graphical output is supported" >&5
31614 printf %s "checking whether lstopo Cairo/X11 interactive graphical output is supported... " >&6; }
2938731615 if test "x$hwloc_x11_keysym_happy" = xyes; then
2938831616 save_CPPFLAGS="$CPPFLAGS"
2938931617 CPPFLAGS="$CPPFLAGS $HWLOC_CAIRO_CFLAGS $HWLOC_X11_CPPFLAGS"
2939431622 #include <cairo.h>
2939531623
2939631624 int
29397 main ()
31625 main (void)
2939831626 {
2939931627
2940031628 #ifndef CAIRO_HAS_XLIB_SURFACE
2940631634 }
2940731635
2940831636 _ACEOF
29409 if ac_fn_c_try_cpp "$LINENO"; then :
29410
29411 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
29412 $as_echo "yes" >&6; }
31637 if ac_fn_c_try_cpp "$LINENO"
31638 then :
31639
31640 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
31641 printf "%s\n" "yes" >&6; }
2941331642 lstopo_have_x11=yes
2941431643
29415 $as_echo "#define LSTOPO_HAVE_X11 1" >>confdefs.h
29416
29417
29418 else
29419
29420 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (missing CAIRO_HAS_XLIB_SURFACE)" >&5
29421 $as_echo "no (missing CAIRO_HAS_XLIB_SURFACE)" >&6; }
31644 printf "%s\n" "#define LSTOPO_HAVE_X11 1" >>confdefs.h
31645
31646
31647 else $as_nop
31648
31649 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no (missing CAIRO_HAS_XLIB_SURFACE)" >&5
31650 printf "%s\n" "no (missing CAIRO_HAS_XLIB_SURFACE)" >&6; }
2942231651
2942331652 fi
2942431653 rm -f conftest.err conftest.i conftest.$ac_ext
2942531654 CPPFLAGS="$save_CPPFLAGS"
2942631655 else
29427 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (missing X11)" >&5
29428 $as_echo "no (missing X11)" >&6; }
31656 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no (missing X11)" >&5
31657 printf "%s\n" "no (missing X11)" >&6; }
2942931658 fi
2943031659 else
29431 if test "$enable_cairo" = "yes"; then :
29432 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: --enable-cairo requested, but Cairo/X11 support was not found" >&5
29433 $as_echo "$as_me: WARNING: --enable-cairo requested, but Cairo/X11 support was not found" >&2;}
31660 if test "$enable_cairo" = "yes"
31661 then :
31662 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: --enable-cairo requested, but Cairo/X11 support was not found" >&5
31663 printf "%s\n" "$as_me: WARNING: --enable-cairo requested, but Cairo/X11 support was not found" >&2;}
2943431664 as_fn_error $? "Cannot continue" "$LINENO" 5
2943531665 fi
2943631666 fi
2943731667
2943831668 ac_fn_c_check_type "$LINENO" "wchar_t" "ac_cv_type_wchar_t" "#include <wchar.h>
2943931669 "
29440 if test "x$ac_cv_type_wchar_t" = xyes; then :
29441
29442 cat >>confdefs.h <<_ACEOF
29443 #define HAVE_WCHAR_T 1
31670 if test "x$ac_cv_type_wchar_t" = xyes
31671 then :
31672
31673 printf "%s\n" "#define HAVE_WCHAR_T 1" >>confdefs.h
31674
31675
31676 ac_fn_c_check_func "$LINENO" "putwc" "ac_cv_func_putwc"
31677 if test "x$ac_cv_func_putwc" = xyes
31678 then :
31679 printf "%s\n" "#define HAVE_PUTWC 1" >>confdefs.h
31680
31681 fi
31682
31683
31684 fi
31685
31686
31687 HWLOC_XML_LOCALIZED=1
31688 for ac_header in locale.h xlocale.h
31689 do :
31690 as_ac_Header=`printf "%s\n" "ac_cv_header_$ac_header" | $as_tr_sh`
31691 ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
31692 if eval test \"x\$"$as_ac_Header"\" = x"yes"
31693 then :
31694 cat >>confdefs.h <<_ACEOF
31695 #define `printf "%s\n" "HAVE_$ac_header" | $as_tr_cpp` 1
2944431696 _ACEOF
2944531697
29446
29447 for ac_func in putwc
29448 do :
29449 ac_fn_c_check_func "$LINENO" "putwc" "ac_cv_func_putwc"
29450 if test "x$ac_cv_func_putwc" = xyes; then :
29451 cat >>confdefs.h <<_ACEOF
29452 #define HAVE_PUTWC 1
29453 _ACEOF
29454
29455 fi
29456 done
29457
29458
29459 fi
29460
29461
29462 HWLOC_XML_LOCALIZED=1
29463 for ac_header in locale.h xlocale.h
29464 do :
29465 as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
29466 ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
29467 if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
29468 cat >>confdefs.h <<_ACEOF
29469 #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
29470 _ACEOF
29471
29472 for ac_func in setlocale
29473 do :
29474 ac_fn_c_check_func "$LINENO" "setlocale" "ac_cv_func_setlocale"
29475 if test "x$ac_cv_func_setlocale" = xyes; then :
29476 cat >>confdefs.h <<_ACEOF
29477 #define HAVE_SETLOCALE 1
29478 _ACEOF
29479
29480 fi
29481 done
29482
29483 for ac_func in uselocale
31698 ac_fn_c_check_func "$LINENO" "setlocale" "ac_cv_func_setlocale"
31699 if test "x$ac_cv_func_setlocale" = xyes
31700 then :
31701 printf "%s\n" "#define HAVE_SETLOCALE 1" >>confdefs.h
31702
31703 fi
31704
31705
31706 for ac_func in uselocale
2948431707 do :
2948531708 ac_fn_c_check_func "$LINENO" "uselocale" "ac_cv_func_uselocale"
29486 if test "x$ac_cv_func_uselocale" = xyes; then :
29487 cat >>confdefs.h <<_ACEOF
29488 #define HAVE_USELOCALE 1
29489 _ACEOF
31709 if test "x$ac_cv_func_uselocale" = xyes
31710 then :
31711 printf "%s\n" "#define HAVE_USELOCALE 1" >>confdefs.h
2949031712 HWLOC_XML_LOCALIZED=0
2949131713 fi
31714
2949231715 done
2949331716
29494
2949531717 fi
2949631718
2949731719 done
2949831720
29499
29500 for ac_header in langinfo.h
31721 for ac_header in langinfo.h
2950131722 do :
29502 ac_fn_c_check_header_mongrel "$LINENO" "langinfo.h" "ac_cv_header_langinfo_h" "$ac_includes_default"
29503 if test "x$ac_cv_header_langinfo_h" = xyes; then :
29504 cat >>confdefs.h <<_ACEOF
29505 #define HAVE_LANGINFO_H 1
29506 _ACEOF
29507
29508 for ac_func in nl_langinfo
29509 do :
29510 ac_fn_c_check_func "$LINENO" "nl_langinfo" "ac_cv_func_nl_langinfo"
29511 if test "x$ac_cv_func_nl_langinfo" = xyes; then :
29512 cat >>confdefs.h <<_ACEOF
29513 #define HAVE_NL_LANGINFO 1
29514 _ACEOF
29515
29516 fi
31723 ac_fn_c_check_header_compile "$LINENO" "langinfo.h" "ac_cv_header_langinfo_h" "$ac_includes_default"
31724 if test "x$ac_cv_header_langinfo_h" = xyes
31725 then :
31726 printf "%s\n" "#define HAVE_LANGINFO_H 1" >>confdefs.h
31727
31728 ac_fn_c_check_func "$LINENO" "nl_langinfo" "ac_cv_func_nl_langinfo"
31729 if test "x$ac_cv_func_nl_langinfo" = xyes
31730 then :
31731 printf "%s\n" "#define HAVE_NL_LANGINFO 1" >>confdefs.h
31732
31733 fi
31734
31735
31736 fi
31737
2951731738 done
29518
29519
29520 fi
29521
29522 done
29523
2952431739 hwloc_old_LIBS="$LIBS"
2952531740 chosen_curses=""
2952631741 for curses in ncurses curses
2952731742 do
29528 for lib in "" -ltermcap -l${curses}w -l$curses -ltinfo
31743 for lib in "" -l${curses}w -l$curses -ltinfo -ltermcap
2952931744 do
29530 { $as_echo "$as_me:${as_lineno-$LINENO}: checking termcap support using $curses and $lib" >&5
29531 $as_echo_n "checking termcap support using $curses and $lib... " >&6; }
31745 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking termcap support using $curses and $lib" >&5
31746 printf %s "checking termcap support using $curses and $lib... " >&6; }
2953231747 LIBS="$hwloc_old_LIBS $lib"
2953331748 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2953431749 /* end confdefs.h. */
2953731752 #include <term.h>
2953831753
2953931754 int
29540 main ()
31755 main (void)
2954131756 {
2954231757 tparm(NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0)
2954331758 ;
2954431759 return 0;
2954531760 }
2954631761 _ACEOF
29547 if ac_fn_c_try_link "$LINENO"; then :
29548
29549 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
29550 $as_echo "yes" >&6; }
31762 if ac_fn_c_try_link "$LINENO"
31763 then :
31764
31765 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
31766 printf "%s\n" "yes" >&6; }
2955131767 HWLOC_TERMCAP_LIBS="$LIBS"
2955231768
2955331769
29554 $as_echo "#define HWLOC_HAVE_LIBTERMCAP 1" >>confdefs.h
31770 printf "%s\n" "#define HWLOC_HAVE_LIBTERMCAP 1" >>confdefs.h
2955531771
2955631772 chosen_curses=$curses
2955731773
29558 else
29559
29560 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
29561 $as_echo "no" >&6; }
29562
29563 fi
29564 rm -f core conftest.err conftest.$ac_objext \
31774 else $as_nop
31775
31776 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
31777 printf "%s\n" "no" >&6; }
31778
31779 fi
31780 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2956531781 conftest$ac_exeext conftest.$ac_ext
2956631782 test "x$chosen_curses" != "x" && break
2956731783 done
2957031786 if test "$chosen_curses" = ncurses
2957131787 then
2957231788
29573 $as_echo "#define HWLOC_USE_NCURSES 1" >>confdefs.h
31789 printf "%s\n" "#define HWLOC_USE_NCURSES 1" >>confdefs.h
2957431790
2957531791 fi
2957631792 LIBS="$hwloc_old_LIBS"
2957831794
2957931795
2958031796
29581 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether diff accepts -u" >&5
29582 $as_echo_n "checking whether diff accepts -u... " >&6; }
31797 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether diff accepts -u" >&5
31798 printf %s "checking whether diff accepts -u... " >&6; }
2958331799 if $DIFF -u /dev/null /dev/null 2> /dev/null
2958431800 then
29585 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
29586 $as_echo "yes" >&6; }
31801 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
31802 printf "%s\n" "yes" >&6; }
2958731803 HWLOC_DIFF_U="-u"
2958831804 else
29589 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
29590 $as_echo "no" >&6; }
31805 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
31806 printf "%s\n" "no" >&6; }
2959131807 HWLOC_DIFF_U=""
2959231808 fi
2959331809
2959431810
2959531811
2959631812
29597 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether diff accepts -w" >&5
29598 $as_echo_n "checking whether diff accepts -w... " >&6; }
31813 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether diff accepts -w" >&5
31814 printf %s "checking whether diff accepts -w... " >&6; }
2959931815 if $DIFF -w /dev/null /dev/null 2> /dev/null
2960031816 then
29601 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
29602 $as_echo "yes" >&6; }
31817 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
31818 printf "%s\n" "yes" >&6; }
2960331819 HWLOC_DIFF_W="-w"
2960431820 else
29605 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
29606 $as_echo "no" >&6; }
31821 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
31822 printf "%s\n" "no" >&6; }
2960731823 HWLOC_DIFF_W=""
2960831824 fi
2960931825
2961031826
2961131827
2961231828 # Solaris needs -lsocket for socket/bind/... in hwloc-ps
29613 ac_fn_c_check_decl "$LINENO" "bind" "ac_cv_have_decl_bind" "#include <sys/socket.h>
29614 "
29615 if test "x$ac_cv_have_decl_bind" = xyes; then :
31829 ac_fn_check_decl "$LINENO" "bind" "ac_cv_have_decl_bind" "#include <sys/socket.h>
31830 " "$ac_c_undeclared_builtin_options" "CFLAGS"
31831 if test "x$ac_cv_have_decl_bind" = xyes
31832 then :
2961631833 ac_have_decl=1
29617 else
31834 else $as_nop
2961831835 ac_have_decl=0
2961931836 fi
29620
29621 cat >>confdefs.h <<_ACEOF
29622 #define HAVE_DECL_BIND $ac_have_decl
29623 _ACEOF
29624 if test $ac_have_decl = 1; then :
29625
29626 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bind in -lsocket" >&5
29627 $as_echo_n "checking for bind in -lsocket... " >&6; }
29628 if ${ac_cv_lib_socket_bind+:} false; then :
29629 $as_echo_n "(cached) " >&6
29630 else
31837 printf "%s\n" "#define HAVE_DECL_BIND $ac_have_decl" >>confdefs.h
31838 if test $ac_have_decl = 1
31839 then :
31840
31841 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for bind in -lsocket" >&5
31842 printf %s "checking for bind in -lsocket... " >&6; }
31843 if test ${ac_cv_lib_socket_bind+y}
31844 then :
31845 printf %s "(cached) " >&6
31846 else $as_nop
2963131847 ac_check_lib_save_LIBS=$LIBS
2963231848 LIBS="-lsocket $LIBS"
2963331849 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2963631852 /* Override any GCC internal prototype to avoid an error.
2963731853 Use char because int might match the return type of a GCC
2963831854 builtin and then its argument prototype would still apply. */
29639 #ifdef __cplusplus
29640 extern "C"
29641 #endif
2964231855 char bind ();
2964331856 int
29644 main ()
31857 main (void)
2964531858 {
2964631859 return bind ();
2964731860 ;
2964831861 return 0;
2964931862 }
2965031863 _ACEOF
29651 if ac_fn_c_try_link "$LINENO"; then :
31864 if ac_fn_c_try_link "$LINENO"
31865 then :
2965231866 ac_cv_lib_socket_bind=yes
29653 else
31867 else $as_nop
2965431868 ac_cv_lib_socket_bind=no
2965531869 fi
29656 rm -f core conftest.err conftest.$ac_objext \
31870 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2965731871 conftest$ac_exeext conftest.$ac_ext
2965831872 LIBS=$ac_check_lib_save_LIBS
2965931873 fi
29660 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_bind" >&5
29661 $as_echo "$ac_cv_lib_socket_bind" >&6; }
29662 if test "x$ac_cv_lib_socket_bind" = xyes; then :
31874 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_bind" >&5
31875 printf "%s\n" "$ac_cv_lib_socket_bind" >&6; }
31876 if test "x$ac_cv_lib_socket_bind" = xyes
31877 then :
2966331878 need_libsocket=yes
2966431879 fi
2966531880
2967231887 fi
2967331888
2967431889
29675 for ac_header in time.h
31890 for ac_header in time.h
2967631891 do :
29677 ac_fn_c_check_header_mongrel "$LINENO" "time.h" "ac_cv_header_time_h" "$ac_includes_default"
29678 if test "x$ac_cv_header_time_h" = xyes; then :
29679 cat >>confdefs.h <<_ACEOF
29680 #define HAVE_TIME_H 1
29681 _ACEOF
29682
29683 for ac_func in clock_gettime
29684 do :
29685 ac_fn_c_check_func "$LINENO" "clock_gettime" "ac_cv_func_clock_gettime"
29686 if test "x$ac_cv_func_clock_gettime" = xyes; then :
29687 cat >>confdefs.h <<_ACEOF
29688 #define HAVE_CLOCK_GETTIME 1
29689 _ACEOF
29690
29691 fi
31892 ac_fn_c_check_header_compile "$LINENO" "time.h" "ac_cv_header_time_h" "$ac_includes_default"
31893 if test "x$ac_cv_header_time_h" = xyes
31894 then :
31895 printf "%s\n" "#define HAVE_TIME_H 1" >>confdefs.h
31896
31897 ac_fn_c_check_func "$LINENO" "clock_gettime" "ac_cv_func_clock_gettime"
31898 if test "x$ac_cv_func_clock_gettime" = xyes
31899 then :
31900 printf "%s\n" "#define HAVE_CLOCK_GETTIME 1" >>confdefs.h
31901
31902 fi
31903
31904
31905 fi
31906
2969231907 done
29693
29694
29695 fi
29696
29697 done
29698
2969931908
2970031909 # Only generate this if we're building the utilities
2970131910 # Even the netloc library Makefile is here because
2971131920 ###
2971231921 EOF
2971331922
29714 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_self in -lpthread" >&5
29715 $as_echo_n "checking for pthread_self in -lpthread... " >&6; }
29716 if ${ac_cv_lib_pthread_pthread_self+:} false; then :
29717 $as_echo_n "(cached) " >&6
29718 else
31923 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_self in -lpthread" >&5
31924 printf %s "checking for pthread_self in -lpthread... " >&6; }
31925 if test ${ac_cv_lib_pthread_pthread_self+y}
31926 then :
31927 printf %s "(cached) " >&6
31928 else $as_nop
2971931929 ac_check_lib_save_LIBS=$LIBS
2972031930 LIBS="-lpthread $LIBS"
2972131931 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2972431934 /* Override any GCC internal prototype to avoid an error.
2972531935 Use char because int might match the return type of a GCC
2972631936 builtin and then its argument prototype would still apply. */
29727 #ifdef __cplusplus
29728 extern "C"
29729 #endif
2973031937 char pthread_self ();
2973131938 int
29732 main ()
31939 main (void)
2973331940 {
2973431941 return pthread_self ();
2973531942 ;
2973631943 return 0;
2973731944 }
2973831945 _ACEOF
29739 if ac_fn_c_try_link "$LINENO"; then :
31946 if ac_fn_c_try_link "$LINENO"
31947 then :
2974031948 ac_cv_lib_pthread_pthread_self=yes
29741 else
31949 else $as_nop
2974231950 ac_cv_lib_pthread_pthread_self=no
2974331951 fi
29744 rm -f core conftest.err conftest.$ac_objext \
31952 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2974531953 conftest$ac_exeext conftest.$ac_ext
2974631954 LIBS=$ac_check_lib_save_LIBS
2974731955 fi
29748 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_self" >&5
29749 $as_echo "$ac_cv_lib_pthread_pthread_self" >&6; }
29750 if test "x$ac_cv_lib_pthread_pthread_self" = xyes; then :
31956 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_self" >&5
31957 printf "%s\n" "$ac_cv_lib_pthread_pthread_self" >&6; }
31958 if test "x$ac_cv_lib_pthread_pthread_self" = xyes
31959 then :
2975131960 hwloc_have_pthread=yes
2975231961 fi
2975331962
2975531964
2975631965
2975731966 HWLOC_pkg_failed=no
29758 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for NUMA" >&5
29759 $as_echo_n "checking for NUMA... " >&6; }
31967 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for NUMA" >&5
31968 printf %s "checking for NUMA... " >&6; }
2976031969
2976131970 if test -n "$PKG_CONFIG"; then
2976231971 if test -n "$HWLOC_NUMA_CFLAGS"; then
2976331972 HWLOC_pkg_cv_HWLOC_NUMA_CFLAGS="$HWLOC_NUMA_CFLAGS"
2976431973 else
2976531974 if test -n "$PKG_CONFIG" && \
29766 { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --silence-errors \"numa\""; } >&5
31975 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --silence-errors \"numa\""; } >&5
2976731976 ($PKG_CONFIG --exists --silence-errors "numa") 2>&5
2976831977 ac_status=$?
29769 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
31978 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
2977031979 test $ac_status = 0; }; then
2977131980 HWLOC_pkg_cv_HWLOC_NUMA_CFLAGS=`$PKG_CONFIG --cflags "numa" 2>/dev/null`
2977231981 else
2978231991 HWLOC_pkg_cv_HWLOC_NUMA_LIBS="$HWLOC_NUMA_LIBS"
2978331992 else
2978431993 if test -n "$PKG_CONFIG" && \
29785 { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --silence-errors \"numa\""; } >&5
31994 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --silence-errors \"numa\""; } >&5
2978631995 ($PKG_CONFIG --exists --silence-errors "numa") 2>&5
2978731996 ac_status=$?
29788 $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
31997 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
2978931998 test $ac_status = 0; }; then
2979031999 HWLOC_pkg_cv_HWLOC_NUMA_LIBS=`$PKG_CONFIG --libs "numa" 2>/dev/null`
2979132000 else
2981532024 # Put the nasty error message in config.log where it belongs
2981632025 echo "$HWLOC_NUMA_PKG_ERRORS" >&5
2981732026
29818 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
29819 $as_echo "no" >&6; }
32027 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
32028 printf "%s\n" "no" >&6; }
2982032029
2982132030 # libnuma didn't have a .pc before 2.0.12, look for it manually.
29822 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for numa_available in -lnuma" >&5
29823 $as_echo_n "checking for numa_available in -lnuma... " >&6; }
29824 if ${ac_cv_lib_numa_numa_available+:} false; then :
29825 $as_echo_n "(cached) " >&6
29826 else
32031 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for numa_available in -lnuma" >&5
32032 printf %s "checking for numa_available in -lnuma... " >&6; }
32033 if test ${ac_cv_lib_numa_numa_available+y}
32034 then :
32035 printf %s "(cached) " >&6
32036 else $as_nop
2982732037 ac_check_lib_save_LIBS=$LIBS
2982832038 LIBS="-lnuma $LIBS"
2982932039 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2983232042 /* Override any GCC internal prototype to avoid an error.
2983332043 Use char because int might match the return type of a GCC
2983432044 builtin and then its argument prototype would still apply. */
29835 #ifdef __cplusplus
29836 extern "C"
29837 #endif
2983832045 char numa_available ();
2983932046 int
29840 main ()
32047 main (void)
2984132048 {
2984232049 return numa_available ();
2984332050 ;
2984432051 return 0;
2984532052 }
2984632053 _ACEOF
29847 if ac_fn_c_try_link "$LINENO"; then :
32054 if ac_fn_c_try_link "$LINENO"
32055 then :
2984832056 ac_cv_lib_numa_numa_available=yes
29849 else
32057 else $as_nop
2985032058 ac_cv_lib_numa_numa_available=no
2985132059 fi
29852 rm -f core conftest.err conftest.$ac_objext \
32060 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2985332061 conftest$ac_exeext conftest.$ac_ext
2985432062 LIBS=$ac_check_lib_save_LIBS
2985532063 fi
29856 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_available" >&5
29857 $as_echo "$ac_cv_lib_numa_numa_available" >&6; }
29858 if test "x$ac_cv_lib_numa_numa_available" = xyes; then :
32064 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_available" >&5
32065 printf "%s\n" "$ac_cv_lib_numa_numa_available" >&6; }
32066 if test "x$ac_cv_lib_numa_numa_available" = xyes
32067 then :
2985932068
2986032069 # and make sure this old release has at least numa_bitmask_alloc() for our tests
29861 ac_fn_c_check_decl "$LINENO" "numa_bitmask_alloc" "ac_cv_have_decl_numa_bitmask_alloc" "#include <numa.h>
29862 "
29863 if test "x$ac_cv_have_decl_numa_bitmask_alloc" = xyes; then :
32070 ac_fn_check_decl "$LINENO" "numa_bitmask_alloc" "ac_cv_have_decl_numa_bitmask_alloc" "#include <numa.h>
32071 " "$ac_c_undeclared_builtin_options" "CFLAGS"
32072 if test "x$ac_cv_have_decl_numa_bitmask_alloc" = xyes
32073 then :
2986432074 hwloc_have_linux_libnuma=yes
2986532075 HWLOC_NUMA_LIBS=-lnuma
2986632076
2986732077 fi
2986832078
29869
2987032079 fi
2987132080
2987232081 elif test $HWLOC_pkg_failed = untried; then
29873 { $as_echo "$as_me:${as_lineno-$LINENO}: result: cannot check without pkg-config" >&5
29874 $as_echo "cannot check without pkg-config" >&6; }
32082 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cannot check without pkg-config" >&5
32083 printf "%s\n" "cannot check without pkg-config" >&6; }
2987532084
2987632085 # libnuma didn't have a .pc before 2.0.12, look for it manually.
29877 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for numa_available in -lnuma" >&5
29878 $as_echo_n "checking for numa_available in -lnuma... " >&6; }
29879 if ${ac_cv_lib_numa_numa_available+:} false; then :
29880 $as_echo_n "(cached) " >&6
29881 else
32086 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for numa_available in -lnuma" >&5
32087 printf %s "checking for numa_available in -lnuma... " >&6; }
32088 if test ${ac_cv_lib_numa_numa_available+y}
32089 then :
32090 printf %s "(cached) " >&6
32091 else $as_nop
2988232092 ac_check_lib_save_LIBS=$LIBS
2988332093 LIBS="-lnuma $LIBS"
2988432094 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2988732097 /* Override any GCC internal prototype to avoid an error.
2988832098 Use char because int might match the return type of a GCC
2988932099 builtin and then its argument prototype would still apply. */
29890 #ifdef __cplusplus
29891 extern "C"
29892 #endif
2989332100 char numa_available ();
2989432101 int
29895 main ()
32102 main (void)
2989632103 {
2989732104 return numa_available ();
2989832105 ;
2989932106 return 0;
2990032107 }
2990132108 _ACEOF
29902 if ac_fn_c_try_link "$LINENO"; then :
32109 if ac_fn_c_try_link "$LINENO"
32110 then :
2990332111 ac_cv_lib_numa_numa_available=yes
29904 else
32112 else $as_nop
2990532113 ac_cv_lib_numa_numa_available=no
2990632114 fi
29907 rm -f core conftest.err conftest.$ac_objext \
32115 rm -f core conftest.err conftest.$ac_objext conftest.beam \
2990832116 conftest$ac_exeext conftest.$ac_ext
2990932117 LIBS=$ac_check_lib_save_LIBS
2991032118 fi
29911 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_available" >&5
29912 $as_echo "$ac_cv_lib_numa_numa_available" >&6; }
29913 if test "x$ac_cv_lib_numa_numa_available" = xyes; then :
32119 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_available" >&5
32120 printf "%s\n" "$ac_cv_lib_numa_numa_available" >&6; }
32121 if test "x$ac_cv_lib_numa_numa_available" = xyes
32122 then :
2991432123
2991532124 # and make sure this old release has at least numa_bitmask_alloc() for our tests
29916 ac_fn_c_check_decl "$LINENO" "numa_bitmask_alloc" "ac_cv_have_decl_numa_bitmask_alloc" "#include <numa.h>
29917 "
29918 if test "x$ac_cv_have_decl_numa_bitmask_alloc" = xyes; then :
32125 ac_fn_check_decl "$LINENO" "numa_bitmask_alloc" "ac_cv_have_decl_numa_bitmask_alloc" "#include <numa.h>
32126 " "$ac_c_undeclared_builtin_options" "CFLAGS"
32127 if test "x$ac_cv_have_decl_numa_bitmask_alloc" = xyes
32128 then :
2991932129 hwloc_have_linux_libnuma=yes
2992032130 HWLOC_NUMA_LIBS=-lnuma
2992132131
2992232132 fi
2992332133
29924
2992532134 fi
2992632135
2992732136 else
29928 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
29929 $as_echo "yes" >&6; }
32137 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
32138 printf "%s\n" "yes" >&6; }
2993032139
2993132140 # If we got good results from pkg-config, check that they
2993232141 # actually work (i.e., that we can link against the resulting
2994532154 CFLAGS="$CFLAGS $HWLOC_pkg_cv_HWLOC_NUMA_CFLAGS"
2994632155 CPPFLAGS="$CPPFLAGS $HWLOC_pkg_cv_HWLOC_NUMA_CFLAGS"
2994732156 LIBS="$LIBS $HWLOC_pkg_cv_HWLOC_NUMA_LIBS"
29948 ac_fn_c_check_header_mongrel "$LINENO" "numa.h" "ac_cv_header_numa_h" "$ac_includes_default"
29949 if test "x$ac_cv_header_numa_h" = xyes; then :
32157 ac_fn_c_check_header_compile "$LINENO" "numa.h" "ac_cv_header_numa_h" "$ac_includes_default"
32158 if test "x$ac_cv_header_numa_h" = xyes
32159 then :
2995032160
2995132161 ac_fn_c_check_func "$LINENO" "numa_available" "ac_cv_func_numa_available"
29952 if test "x$ac_cv_func_numa_available" = xyes; then :
32162 if test "x$ac_cv_func_numa_available" = xyes
32163 then :
2995332164 hwloc_result=yes
29954 else
32165 else $as_nop
2995532166 hwloc_result=no
2995632167 fi
2995732168
2995832169
29959 else
32170 else $as_nop
2996032171 hwloc_result=no
2996132172 fi
29962
2996332173
2996432174 CFLAGS=$hwloc_cflags_save
2996532175 CPPFLAGS=$hwloc_cppflags_save
2996632176 LIBS=$hwloc_libs_save
2996732177
29968 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for final NUMA support" >&5
29969 $as_echo_n "checking for final NUMA support... " >&6; }
29970 if test "$hwloc_result" = "yes"; then :
32178 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for final NUMA support" >&5
32179 printf %s "checking for final NUMA support... " >&6; }
32180 if test "$hwloc_result" = "yes"
32181 then :
2997132182 HWLOC_NUMA_CFLAGS=$HWLOC_pkg_cv_HWLOC_NUMA_CFLAGS
2997232183 HWLOC_NUMA_LIBS=$HWLOC_pkg_cv_HWLOC_NUMA_LIBS
29973 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
29974 $as_echo "yes" >&6; }
32184 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
32185 printf "%s\n" "yes" >&6; }
2997532186 hwloc_have_linux_libnuma=yes
29976 else
29977 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
29978 $as_echo "no" >&6; }
32187 else $as_nop
32188 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
32189 printf "%s\n" "no" >&6; }
2997932190
2998032191 # libnuma didn't have a .pc before 2.0.12, look for it manually.
29981 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for numa_available in -lnuma" >&5
29982 $as_echo_n "checking for numa_available in -lnuma... " >&6; }
29983 if ${ac_cv_lib_numa_numa_available+:} false; then :
29984 $as_echo_n "(cached) " >&6
29985 else
32192 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for numa_available in -lnuma" >&5
32193 printf %s "checking for numa_available in -lnuma... " >&6; }
32194 if test ${ac_cv_lib_numa_numa_available+y}
32195 then :
32196 printf %s "(cached) " >&6
32197 else $as_nop
2998632198 ac_check_lib_save_LIBS=$LIBS
2998732199 LIBS="-lnuma $LIBS"
2998832200 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
2999132203 /* Override any GCC internal prototype to avoid an error.
2999232204 Use char because int might match the return type of a GCC
2999332205 builtin and then its argument prototype would still apply. */
29994 #ifdef __cplusplus
29995 extern "C"
29996 #endif
2999732206 char numa_available ();
2999832207 int
29999 main ()
32208 main (void)
3000032209 {
3000132210 return numa_available ();
3000232211 ;
3000332212 return 0;
3000432213 }
3000532214 _ACEOF
30006 if ac_fn_c_try_link "$LINENO"; then :
32215 if ac_fn_c_try_link "$LINENO"
32216 then :
3000732217 ac_cv_lib_numa_numa_available=yes
30008 else
32218 else $as_nop
3000932219 ac_cv_lib_numa_numa_available=no
3001032220 fi
30011 rm -f core conftest.err conftest.$ac_objext \
32221 rm -f core conftest.err conftest.$ac_objext conftest.beam \
3001232222 conftest$ac_exeext conftest.$ac_ext
3001332223 LIBS=$ac_check_lib_save_LIBS
3001432224 fi
30015 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_available" >&5
30016 $as_echo "$ac_cv_lib_numa_numa_available" >&6; }
30017 if test "x$ac_cv_lib_numa_numa_available" = xyes; then :
32225 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_numa_numa_available" >&5
32226 printf "%s\n" "$ac_cv_lib_numa_numa_available" >&6; }
32227 if test "x$ac_cv_lib_numa_numa_available" = xyes
32228 then :
3001832229
3001932230 # and make sure this old release has at least numa_bitmask_alloc() for our tests
30020 ac_fn_c_check_decl "$LINENO" "numa_bitmask_alloc" "ac_cv_have_decl_numa_bitmask_alloc" "#include <numa.h>
30021 "
30022 if test "x$ac_cv_have_decl_numa_bitmask_alloc" = xyes; then :
32231 ac_fn_check_decl "$LINENO" "numa_bitmask_alloc" "ac_cv_have_decl_numa_bitmask_alloc" "#include <numa.h>
32232 " "$ac_c_undeclared_builtin_options" "CFLAGS"
32233 if test "x$ac_cv_have_decl_numa_bitmask_alloc" = xyes
32234 then :
3002332235 hwloc_have_linux_libnuma=yes
3002432236 HWLOC_NUMA_LIBS=-lnuma
3002532237
3002632238 fi
3002732239
30028
3002932240 fi
3003032241
3003132242 fi
3003232243 fi
3003332244
30034 for ac_header in stdlib.h
32245 for ac_header in stdlib.h
3003532246 do :
30036 ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default"
30037 if test "x$ac_cv_header_stdlib_h" = xyes; then :
30038 cat >>confdefs.h <<_ACEOF
30039 #define HAVE_STDLIB_H 1
30040 _ACEOF
30041
30042 for ac_func in mkstemp
32247 ac_fn_c_check_header_compile "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default"
32248 if test "x$ac_cv_header_stdlib_h" = xyes
32249 then :
32250 printf "%s\n" "#define HAVE_STDLIB_H 1" >>confdefs.h
32251
32252 ac_fn_c_check_func "$LINENO" "mkstemp" "ac_cv_func_mkstemp"
32253 if test "x$ac_cv_func_mkstemp" = xyes
32254 then :
32255 printf "%s\n" "#define HAVE_MKSTEMP 1" >>confdefs.h
32256
32257 fi
32258
32259
32260 fi
32261
32262 done
32263
32264 for ac_header in infiniband/verbs.h
3004332265 do :
30044 ac_fn_c_check_func "$LINENO" "mkstemp" "ac_cv_func_mkstemp"
30045 if test "x$ac_cv_func_mkstemp" = xyes; then :
30046 cat >>confdefs.h <<_ACEOF
30047 #define HAVE_MKSTEMP 1
30048 _ACEOF
30049
30050 fi
30051 done
30052
30053
30054 fi
30055
30056 done
30057
30058
30059 for ac_header in infiniband/verbs.h
30060 do :
30061 ac_fn_c_check_header_mongrel "$LINENO" "infiniband/verbs.h" "ac_cv_header_infiniband_verbs_h" "$ac_includes_default"
30062 if test "x$ac_cv_header_infiniband_verbs_h" = xyes; then :
30063 cat >>confdefs.h <<_ACEOF
30064 #define HAVE_INFINIBAND_VERBS_H 1
30065 _ACEOF
30066
30067 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ibv_open_device in -libverbs" >&5
30068 $as_echo_n "checking for ibv_open_device in -libverbs... " >&6; }
30069 if ${ac_cv_lib_ibverbs_ibv_open_device+:} false; then :
30070 $as_echo_n "(cached) " >&6
30071 else
32266 ac_fn_c_check_header_compile "$LINENO" "infiniband/verbs.h" "ac_cv_header_infiniband_verbs_h" "$ac_includes_default"
32267 if test "x$ac_cv_header_infiniband_verbs_h" = xyes
32268 then :
32269 printf "%s\n" "#define HAVE_INFINIBAND_VERBS_H 1" >>confdefs.h
32270
32271 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ibv_open_device in -libverbs" >&5
32272 printf %s "checking for ibv_open_device in -libverbs... " >&6; }
32273 if test ${ac_cv_lib_ibverbs_ibv_open_device+y}
32274 then :
32275 printf %s "(cached) " >&6
32276 else $as_nop
3007232277 ac_check_lib_save_LIBS=$LIBS
3007332278 LIBS="-libverbs $LIBS"
3007432279 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
3007732282 /* Override any GCC internal prototype to avoid an error.
3007832283 Use char because int might match the return type of a GCC
3007932284 builtin and then its argument prototype would still apply. */
30080 #ifdef __cplusplus
30081 extern "C"
30082 #endif
3008332285 char ibv_open_device ();
3008432286 int
30085 main ()
32287 main (void)
3008632288 {
3008732289 return ibv_open_device ();
3008832290 ;
3008932291 return 0;
3009032292 }
3009132293 _ACEOF
30092 if ac_fn_c_try_link "$LINENO"; then :
32294 if ac_fn_c_try_link "$LINENO"
32295 then :
3009332296 ac_cv_lib_ibverbs_ibv_open_device=yes
30094 else
32297 else $as_nop
3009532298 ac_cv_lib_ibverbs_ibv_open_device=no
3009632299 fi
30097 rm -f core conftest.err conftest.$ac_objext \
32300 rm -f core conftest.err conftest.$ac_objext conftest.beam \
3009832301 conftest$ac_exeext conftest.$ac_ext
3009932302 LIBS=$ac_check_lib_save_LIBS
3010032303 fi
30101 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ibverbs_ibv_open_device" >&5
30102 $as_echo "$ac_cv_lib_ibverbs_ibv_open_device" >&6; }
30103 if test "x$ac_cv_lib_ibverbs_ibv_open_device" = xyes; then :
30104
30105 $as_echo "#define HAVE_LIBIBVERBS 1" >>confdefs.h
32304 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ibverbs_ibv_open_device" >&5
32305 printf "%s\n" "$ac_cv_lib_ibverbs_ibv_open_device" >&6; }
32306 if test "x$ac_cv_lib_ibverbs_ibv_open_device" = xyes
32307 then :
32308
32309 printf "%s\n" "#define HAVE_LIBIBVERBS 1" >>confdefs.h
3010632310
3010732311 hwloc_have_libibverbs=yes
32312 HWLOC_IBVERBS_LIBS=-libverbs
32313
32314
3010832315 fi
3010932316
3011032317
3011132318 fi
3011232319
3011332320 done
30114
3011532321
3011632322 for ac_prog in xmllint
3011732323 do
3011832324 # Extract the first word of "$ac_prog", so it can be a program name with args.
3011932325 set dummy $ac_prog; ac_word=$2
30120 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
30121 $as_echo_n "checking for $ac_word... " >&6; }
30122 if ${ac_cv_prog_XMLLINT+:} false; then :
30123 $as_echo_n "(cached) " >&6
30124 else
32326 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
32327 printf %s "checking for $ac_word... " >&6; }
32328 if test ${ac_cv_prog_XMLLINT+y}
32329 then :
32330 printf %s "(cached) " >&6
32331 else $as_nop
3012532332 if test -n "$XMLLINT"; then
3012632333 ac_cv_prog_XMLLINT="$XMLLINT" # Let the user override the test.
3012732334 else
3012932336 for as_dir in $PATH
3013032337 do
3013132338 IFS=$as_save_IFS
30132 test -z "$as_dir" && as_dir=.
32339 case $as_dir in #(((
32340 '') as_dir=./ ;;
32341 */) ;;
32342 *) as_dir=$as_dir/ ;;
32343 esac
3013332344 for ac_exec_ext in '' $ac_executable_extensions; do
30134 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
32345 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
3013532346 ac_cv_prog_XMLLINT="$ac_prog"
30136 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
32347 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
3013732348 break 2
3013832349 fi
3013932350 done
3014432355 fi
3014532356 XMLLINT=$ac_cv_prog_XMLLINT
3014632357 if test -n "$XMLLINT"; then
30147 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XMLLINT" >&5
30148 $as_echo "$XMLLINT" >&6; }
32358 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $XMLLINT" >&5
32359 printf "%s\n" "$XMLLINT" >&6; }
3014932360 else
30150 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
30151 $as_echo "no" >&6; }
32361 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
32362 printf "%s\n" "no" >&6; }
3015232363 fi
3015332364
3015432365
3016032371 do
3016132372 # Extract the first word of "$ac_prog", so it can be a program name with args.
3016232373 set dummy $ac_prog; ac_word=$2
30163 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
30164 $as_echo_n "checking for $ac_word... " >&6; }
30165 if ${ac_cv_prog_BUNZIPP+:} false; then :
30166 $as_echo_n "(cached) " >&6
30167 else
32374 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
32375 printf %s "checking for $ac_word... " >&6; }
32376 if test ${ac_cv_prog_BUNZIPP+y}
32377 then :
32378 printf %s "(cached) " >&6
32379 else $as_nop
3016832380 if test -n "$BUNZIPP"; then
3016932381 ac_cv_prog_BUNZIPP="$BUNZIPP" # Let the user override the test.
3017032382 else
3017232384 for as_dir in $PATH
3017332385 do
3017432386 IFS=$as_save_IFS
30175 test -z "$as_dir" && as_dir=.
32387 case $as_dir in #(((
32388 '') as_dir=./ ;;
32389 */) ;;
32390 *) as_dir=$as_dir/ ;;
32391 esac
3017632392 for ac_exec_ext in '' $ac_executable_extensions; do
30177 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
32393 if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
3017832394 ac_cv_prog_BUNZIPP="$ac_prog"
30179 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
32395 printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
3018032396 break 2
3018132397 fi
3018232398 done
3018732403 fi
3018832404 BUNZIPP=$ac_cv_prog_BUNZIPP
3018932405 if test -n "$BUNZIPP"; then
30190 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BUNZIPP" >&5
30191 $as_echo "$BUNZIPP" >&6; }
32406 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $BUNZIPP" >&5
32407 printf "%s\n" "$BUNZIPP" >&6; }
3019232408 else
30193 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
30194 $as_echo "no" >&6; }
32409 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
32410 printf "%s\n" "no" >&6; }
3019532411 fi
3019632412
3019732413
3020032416 test -n "$BUNZIPP" || BUNZIPP="false"
3020132417
3020232418
30203 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if CXX works" >&5
30204 $as_echo_n "checking if CXX works... " >&6; }
32419 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if CXX works" >&5
32420 printf %s "checking if CXX works... " >&6; }
3020532421 ac_ext=cpp
3020632422 ac_cpp='$CXXCPP $CPPFLAGS'
3020732423 ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
3021932435 }
3022032436
3022132437 int
30222 main ()
32438 main (void)
3022332439 {
3022432440
3022532441 ;
3022632442 return 0;
3022732443 }
3022832444 _ACEOF
30229 if ac_fn_cxx_try_compile "$LINENO"; then :
32445 if ac_fn_cxx_try_compile "$LINENO"
32446 then :
3023032447 hwloc_have_cxx=yes
30231 else
32448 else $as_nop
3023232449 hwloc_have_cxx=no
3023332450 fi
30234 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
32451 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
3023532452 ac_ext=c
3023632453 ac_cpp='$CPP $CPPFLAGS'
3023732454 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
3023832455 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
3023932456 ac_compiler_gnu=$ac_cv_c_compiler_gnu
3024032457
30241 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hwloc_have_cxx" >&5
30242 $as_echo "$hwloc_have_cxx" >&6; }
30243
30244
30245
30246 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether diff accepts -u" >&5
30247 $as_echo_n "checking whether diff accepts -u... " >&6; }
32458 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hwloc_have_cxx" >&5
32459 printf "%s\n" "$hwloc_have_cxx" >&6; }
32460
32461
32462
32463 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether diff accepts -u" >&5
32464 printf %s "checking whether diff accepts -u... " >&6; }
3024832465 if $DIFF -u /dev/null /dev/null 2> /dev/null
3024932466 then
30250 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
30251 $as_echo "yes" >&6; }
32467 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
32468 printf "%s\n" "yes" >&6; }
3025232469 HWLOC_DIFF_U="-u"
3025332470 else
30254 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
30255 $as_echo "no" >&6; }
32471 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
32472 printf "%s\n" "no" >&6; }
3025632473 HWLOC_DIFF_U=""
3025732474 fi
3025832475
3027132488 # AC_CONFIG_LINKS. :-\ Since these tests are only run when
3027232489 # built in standalone mode, only generate them in
3027332490 # standalone mode.
30274 ac_config_links="$ac_config_links tests/hwloc/ports/topology-solaris.c:hwloc/topology-solaris.c tests/hwloc/ports/topology-solaris-chiptype.c:hwloc/topology-solaris-chiptype.c tests/hwloc/ports/topology-aix.c:hwloc/topology-aix.c tests/hwloc/ports/topology-windows.c:hwloc/topology-windows.c tests/hwloc/ports/topology-darwin.c:hwloc/topology-darwin.c tests/hwloc/ports/topology-freebsd.c:hwloc/topology-freebsd.c tests/hwloc/ports/topology-netbsd.c:hwloc/topology-netbsd.c tests/hwloc/ports/topology-hpux.c:hwloc/topology-hpux.c tests/hwloc/ports/topology-bgq.c:hwloc/topology-bgq.c tests/hwloc/ports/topology-opencl.c:hwloc/topology-opencl.c tests/hwloc/ports/topology-cuda.c:hwloc/topology-cuda.c tests/hwloc/ports/topology-nvml.c:hwloc/topology-nvml.c tests/hwloc/ports/topology-rsmi.c:hwloc/topology-rsmi.c tests/hwloc/ports/topology-gl.c:hwloc/topology-gl.c tests/hwloc/ports/lstopo-windows.c:utils/lstopo/lstopo-windows.c tests/hwloc/ports/lstopo-android.c:utils/lstopo/lstopo-android.c"
32491 ac_config_links="$ac_config_links tests/hwloc/ports/topology-solaris.c:hwloc/topology-solaris.c tests/hwloc/ports/topology-solaris-chiptype.c:hwloc/topology-solaris-chiptype.c tests/hwloc/ports/topology-aix.c:hwloc/topology-aix.c tests/hwloc/ports/topology-windows.c:hwloc/topology-windows.c tests/hwloc/ports/topology-darwin.c:hwloc/topology-darwin.c tests/hwloc/ports/topology-freebsd.c:hwloc/topology-freebsd.c tests/hwloc/ports/topology-netbsd.c:hwloc/topology-netbsd.c tests/hwloc/ports/topology-hpux.c:hwloc/topology-hpux.c tests/hwloc/ports/topology-bgq.c:hwloc/topology-bgq.c tests/hwloc/ports/topology-opencl.c:hwloc/topology-opencl.c tests/hwloc/ports/topology-cuda.c:hwloc/topology-cuda.c tests/hwloc/ports/topology-nvml.c:hwloc/topology-nvml.c tests/hwloc/ports/topology-rsmi.c:hwloc/topology-rsmi.c tests/hwloc/ports/topology-levelzero.c:hwloc/topology-levelzero.c tests/hwloc/ports/topology-gl.c:hwloc/topology-gl.c tests/hwloc/ports/lstopo-windows.c:utils/lstopo/lstopo-windows.c tests/hwloc/ports/lstopo-android.c:utils/lstopo/lstopo-android.c"
3027532492
3027632493
3027732494 fi
3028532502
3028632503 # Run the AM_CONDITIONALs
3028732504
30288 if test "$hwloc_did_am_conditionals" != "yes"; then :
32505 if test "$hwloc_did_am_conditionals" != "yes"
32506 then :
3028932507
3029032508 if test "$hwloc_mode" = "standalone"; then
3029132509 HWLOC_BUILD_STANDALONE_TRUE=
3042432642 HWLOC_HAVE_RSMI_FALSE=
3042532643 fi
3042632644
32645 if test "$hwloc_levelzero_happy" = "yes"; then
32646 HWLOC_HAVE_LEVELZERO_TRUE=
32647 HWLOC_HAVE_LEVELZERO_FALSE='#'
32648 else
32649 HWLOC_HAVE_LEVELZERO_TRUE='#'
32650 HWLOC_HAVE_LEVELZERO_FALSE=
32651 fi
32652
3042732653 if test "x$BUNZIPP" != "xfalse"; then
3042832654 HWLOC_HAVE_BUNZIPP_TRUE=
3042932655 HWLOC_HAVE_BUNZIPP_FALSE='#'
3064332869 else
3064432870 HWLOC_RSMI_BUILD_STATIC_TRUE='#'
3064532871 HWLOC_RSMI_BUILD_STATIC_FALSE=
32872 fi
32873
32874 if test "x$hwloc_levelzero_component" = "xstatic"; then
32875 HWLOC_LEVELZERO_BUILD_STATIC_TRUE=
32876 HWLOC_LEVELZERO_BUILD_STATIC_FALSE='#'
32877 else
32878 HWLOC_LEVELZERO_BUILD_STATIC_TRUE='#'
32879 HWLOC_LEVELZERO_BUILD_STATIC_FALSE=
3064632880 fi
3064732881
3064832882 if test "x$hwloc_gl_component" = "xstatic"; then
3078433018 case $ac_val in #(
3078533019 *${as_nl}*)
3078633020 case $ac_var in #(
30787 *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
30788 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
33021 *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
33022 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
3078933023 esac
3079033024 case $ac_var in #(
3079133025 _ | IFS | as_nl) ;; #(
3081533049 /^ac_cv_env_/b end
3081633050 t clear
3081733051 :clear
30818 s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
33052 s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/
3081933053 t end
3082033054 s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
3082133055 :end' >>confcache
3082233056 if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
3082333057 if test -w "$cache_file"; then
3082433058 if test "x$cache_file" != "x/dev/null"; then
30825 { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
30826 $as_echo "$as_me: updating cache $cache_file" >&6;}
33059 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
33060 printf "%s\n" "$as_me: updating cache $cache_file" >&6;}
3082733061 if test ! -f "$cache_file" || test -h "$cache_file"; then
3082833062 cat confcache >"$cache_file"
3082933063 else
3083733071 fi
3083833072 fi
3083933073 else
30840 { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
30841 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
33074 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
33075 printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;}
3084233076 fi
3084333077 fi
3084433078 rm -f confcache
3085533089 for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
3085633090 # 1. Remove the extension, and $U if already installed.
3085733091 ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
30858 ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
33092 ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"`
3085933093 # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
3086033094 # will be set to the directory where LIBOBJS objects are built.
3086133095 as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
3086633100 LTLIBOBJS=$ac_ltlibobjs
3086733101
3086833102
30869 { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
30870 $as_echo_n "checking that generated files are newer than configure... " >&6; }
33103 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
33104 printf %s "checking that generated files are newer than configure... " >&6; }
3087133105 if test -n "$am_sleep_pid"; then
3087233106 # Hide warnings about reused PIDs.
3087333107 wait $am_sleep_pid 2>/dev/null
3087433108 fi
30875 { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
30876 $as_echo "done" >&6; }
33109 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5
33110 printf "%s\n" "done" >&6; }
3087733111 if test -n "$EXEEXT"; then
3087833112 am__EXEEXT_TRUE=
3087933113 am__EXEEXT_FALSE='#'
3096633200 as_fn_error $? "conditional \"HWLOC_HAVE_RSMI\" was never defined.
3096733201 Usually this means the macro was only invoked conditionally." "$LINENO" 5
3096833202 fi
33203 if test -z "${HWLOC_HAVE_LEVELZERO_TRUE}" && test -z "${HWLOC_HAVE_LEVELZERO_FALSE}"; then
33204 as_fn_error $? "conditional \"HWLOC_HAVE_LEVELZERO\" was never defined.
33205 Usually this means the macro was only invoked conditionally." "$LINENO" 5
33206 fi
3096933207 if test -z "${HWLOC_HAVE_BUNZIPP_TRUE}" && test -z "${HWLOC_HAVE_BUNZIPP_FALSE}"; then
3097033208 as_fn_error $? "conditional \"HWLOC_HAVE_BUNZIPP\" was never defined.
3097133209 Usually this means the macro was only invoked conditionally." "$LINENO" 5
3107233310 fi
3107333311 if test -z "${HWLOC_RSMI_BUILD_STATIC_TRUE}" && test -z "${HWLOC_RSMI_BUILD_STATIC_FALSE}"; then
3107433312 as_fn_error $? "conditional \"HWLOC_RSMI_BUILD_STATIC\" was never defined.
33313 Usually this means the macro was only invoked conditionally." "$LINENO" 5
33314 fi
33315 if test -z "${HWLOC_LEVELZERO_BUILD_STATIC_TRUE}" && test -z "${HWLOC_LEVELZERO_BUILD_STATIC_FALSE}"; then
33316 as_fn_error $? "conditional \"HWLOC_LEVELZERO_BUILD_STATIC\" was never defined.
3107533317 Usually this means the macro was only invoked conditionally." "$LINENO" 5
3107633318 fi
3107733319 if test -z "${HWLOC_GL_BUILD_STATIC_TRUE}" && test -z "${HWLOC_GL_BUILD_STATIC_FALSE}"; then
3112333365 ac_write_fail=0
3112433366 ac_clean_files_save=$ac_clean_files
3112533367 ac_clean_files="$ac_clean_files $CONFIG_STATUS"
31126 { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
31127 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
33368 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
33369 printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;}
3112833370 as_write_fail=0
3112933371 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
3113033372 #! $SHELL
3114733389
3114833390 # Be more Bourne compatible
3114933391 DUALCASE=1; export DUALCASE # for MKS sh
31150 if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
33392 as_nop=:
33393 if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
33394 then :
3115133395 emulate sh
3115233396 NULLCMD=:
3115333397 # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
3115433398 # is contrary to our usage. Disable this feature.
3115533399 alias -g '${1+"$@"}'='"$@"'
3115633400 setopt NO_GLOB_SUBST
31157 else
33401 else $as_nop
3115833402 case `(set -o) 2>/dev/null` in #(
3115933403 *posix*) :
3116033404 set -o posix ;; #(
3116433408 fi
3116533409
3116633410
33411
33412 # Reset variables that may have inherited troublesome values from
33413 # the environment.
33414
33415 # IFS needs to be set, to space, tab, and newline, in precisely that order.
33416 # (If _AS_PATH_WALK were called with IFS unset, it would have the
33417 # side effect of setting IFS to empty, thus disabling word splitting.)
33418 # Quoting is to prevent editors from complaining about space-tab.
3116733419 as_nl='
3116833420 '
3116933421 export as_nl
31170 # Printing a long string crashes Solaris 7 /usr/bin/printf.
31171 as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
31172 as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
31173 as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
31174 # Prefer a ksh shell builtin over an external printf program on Solaris,
31175 # but without wasting forks for bash or zsh.
31176 if test -z "$BASH_VERSION$ZSH_VERSION" \
31177 && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
31178 as_echo='print -r --'
31179 as_echo_n='print -rn --'
31180 elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
31181 as_echo='printf %s\n'
31182 as_echo_n='printf %s'
31183 else
31184 if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
31185 as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
31186 as_echo_n='/usr/ucb/echo -n'
31187 else
31188 as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
31189 as_echo_n_body='eval
31190 arg=$1;
31191 case $arg in #(
31192 *"$as_nl"*)
31193 expr "X$arg" : "X\\(.*\\)$as_nl";
31194 arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
31195 esac;
31196 expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
31197 '
31198 export as_echo_n_body
31199 as_echo_n='sh -c $as_echo_n_body as_echo'
31200 fi
31201 export as_echo_body
31202 as_echo='sh -c $as_echo_body as_echo'
31203 fi
33422 IFS=" "" $as_nl"
33423
33424 PS1='$ '
33425 PS2='> '
33426 PS4='+ '
33427
33428 # Ensure predictable behavior from utilities with locale-dependent output.
33429 LC_ALL=C
33430 export LC_ALL
33431 LANGUAGE=C
33432 export LANGUAGE
33433
33434 # We cannot yet rely on "unset" to work, but we need these variables
33435 # to be unset--not just set to an empty or harmless value--now, to
33436 # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct
33437 # also avoids known problems related to "unset" and subshell syntax
33438 # in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
33439 for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
33440 do eval test \${$as_var+y} \
33441 && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
33442 done
33443
33444 # Ensure that fds 0, 1, and 2 are open.
33445 if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
33446 if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
33447 if (exec 3>&2) ; then :; else exec 2>/dev/null; fi
3120433448
3120533449 # The user is always right.
31206 if test "${PATH_SEPARATOR+set}" != set; then
33450 if ${PATH_SEPARATOR+false} :; then
3120733451 PATH_SEPARATOR=:
3120833452 (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
3120933453 (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
3121133455 }
3121233456 fi
3121333457
31214
31215 # IFS
31216 # We need space, tab and new line, in precisely that order. Quoting is
31217 # there to prevent editors from complaining about space-tab.
31218 # (If _AS_PATH_WALK were called with IFS unset, it would disable word
31219 # splitting by setting IFS to empty value.)
31220 IFS=" "" $as_nl"
3122133458
3122233459 # Find who we are. Look in the path if we contain no directory separator.
3122333460 as_myself=
3122733464 for as_dir in $PATH
3122833465 do
3122933466 IFS=$as_save_IFS
31230 test -z "$as_dir" && as_dir=.
31231 test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
33467 case $as_dir in #(((
33468 '') as_dir=./ ;;
33469 */) ;;
33470 *) as_dir=$as_dir/ ;;
33471 esac
33472 test -r "$as_dir$0" && as_myself=$as_dir$0 && break
3123233473 done
3123333474 IFS=$as_save_IFS
3123433475
3124033481 as_myself=$0
3124133482 fi
3124233483 if test ! -f "$as_myself"; then
31243 $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
33484 printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
3124433485 exit 1
3124533486 fi
3124633487
31247 # Unset variables that we do not need and which cause bugs (e.g. in
31248 # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
31249 # suppresses any "Segmentation fault" message there. '((' could
31250 # trigger a bug in pdksh 5.2.14.
31251 for as_var in BASH_ENV ENV MAIL MAILPATH
31252 do eval test x\${$as_var+set} = xset \
31253 && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
31254 done
31255 PS1='$ '
31256 PS2='> '
31257 PS4='+ '
31258
31259 # NLS nuisances.
31260 LC_ALL=C
31261 export LC_ALL
31262 LANGUAGE=C
31263 export LANGUAGE
31264
31265 # CDPATH.
31266 (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
3126733488
3126833489
3126933490 # as_fn_error STATUS ERROR [LINENO LOG_FD]
3127633497 as_status=$1; test $as_status -eq 0 && as_status=1
3127733498 if test "$4"; then
3127833499 as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
31279 $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
33500 printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
3128033501 fi
31281 $as_echo "$as_me: error: $2" >&2
33502 printf "%s\n" "$as_me: error: $2" >&2
3128233503 as_fn_exit $as_status
3128333504 } # as_fn_error
33505
3128433506
3128533507
3128633508 # as_fn_set_status STATUS
3130933531 { eval $1=; unset $1;}
3131033532 }
3131133533 as_unset=as_fn_unset
33534
3131233535 # as_fn_append VAR VALUE
3131333536 # ----------------------
3131433537 # Append the text in VALUE to the end of the definition contained in VAR. Take
3131533538 # advantage of any shell optimizations that allow amortized linear growth over
3131633539 # repeated appends, instead of the typical quadratic growth present in naive
3131733540 # implementations.
31318 if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
33541 if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
33542 then :
3131933543 eval 'as_fn_append ()
3132033544 {
3132133545 eval $1+=\$2
3132233546 }'
31323 else
33547 else $as_nop
3132433548 as_fn_append ()
3132533549 {
3132633550 eval $1=\$$1\$2
3133233556 # Perform arithmetic evaluation on the ARGs, and store the result in the
3133333557 # global $as_val. Take advantage of shells that can avoid forks. The arguments
3133433558 # must be portable across $(()) and expr.
31335 if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
33559 if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
33560 then :
3133633561 eval 'as_fn_arith ()
3133733562 {
3133833563 as_val=$(( $* ))
3133933564 }'
31340 else
33565 else $as_nop
3134133566 as_fn_arith ()
3134233567 {
3134333568 as_val=`expr "$@" || test $? -eq 1`
3136833593 $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
3136933594 X"$0" : 'X\(//\)$' \| \
3137033595 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
31371 $as_echo X/"$0" |
33596 printf "%s\n" X/"$0" |
3137233597 sed '/^.*\/\([^/][^/]*\)\/*$/{
3137333598 s//\1/
3137433599 q
3139033615 as_cr_digits='0123456789'
3139133616 as_cr_alnum=$as_cr_Letters$as_cr_digits
3139233617
33618
33619 # Determine whether it's possible to make 'echo' print without a newline.
33620 # These variables are no longer used directly by Autoconf, but are AC_SUBSTed
33621 # for compatibility with existing Makefiles.
3139333622 ECHO_C= ECHO_N= ECHO_T=
3139433623 case `echo -n x` in #(((((
3139533624 -n*)
3140233631 *)
3140333632 ECHO_N='-n';;
3140433633 esac
33634
33635 # For backward compatibility with old third-party macros, we provide
33636 # the shell variables $as_echo and $as_echo_n. New code should use
33637 # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
33638 as_echo='printf %s\n'
33639 as_echo_n='printf %s'
3140533640
3140633641 rm -f conf$$ conf$$.exe conf$$.file
3140733642 if test -d conf$$.dir; then
3144433679 as_dirs=
3144533680 while :; do
3144633681 case $as_dir in #(
31447 *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
33682 *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
3144833683 *) as_qdir=$as_dir;;
3144933684 esac
3145033685 as_dirs="'$as_qdir' $as_dirs"
3145333688 X"$as_dir" : 'X\(//\)[^/]' \| \
3145433689 X"$as_dir" : 'X\(//\)$' \| \
3145533690 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
31456 $as_echo X"$as_dir" |
33691 printf "%s\n" X"$as_dir" |
3145733692 sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
3145833693 s//\1/
3145933694 q
3151533750 # report actual input values of CONFIG_FILES etc. instead of their
3151633751 # values after options handling.
3151733752 ac_log="
31518 This file was extended by hwloc $as_me 2.4.1, which was
31519 generated by GNU Autoconf 2.69. Invocation command line was
33753 This file was extended by hwloc $as_me 2.5.0rc1, which was
33754 generated by GNU Autoconf 2.71. Invocation command line was
3152033755
3152133756 CONFIG_FILES = $CONFIG_FILES
3152233757 CONFIG_HEADERS = $CONFIG_HEADERS
3158233817 Report bugs to <https://github.com/open-mpi/hwloc/issues>."
3158333818
3158433819 _ACEOF
33820 ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"`
33821 ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"`
3158533822 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
31586 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
33823 ac_cs_config='$ac_cs_config_escaped'
3158733824 ac_cs_version="\\
31588 hwloc config.status 2.4.1
31589 configured by $0, generated by GNU Autoconf 2.69,
33825 hwloc config.status 2.5.0rc1
33826 configured by $0, generated by GNU Autoconf 2.71,
3159033827 with options \\"\$ac_cs_config\\"
3159133828
31592 Copyright (C) 2012 Free Software Foundation, Inc.
33829 Copyright (C) 2021 Free Software Foundation, Inc.
3159333830 This config.status script is free software; the Free Software Foundation
3159433831 gives unlimited permission to copy, distribute and modify it."
3159533832
3162933866 -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
3163033867 ac_cs_recheck=: ;;
3163133868 --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
31632 $as_echo "$ac_cs_version"; exit ;;
33869 printf "%s\n" "$ac_cs_version"; exit ;;
3163333870 --config | --confi | --conf | --con | --co | --c )
31634 $as_echo "$ac_cs_config"; exit ;;
33871 printf "%s\n" "$ac_cs_config"; exit ;;
3163533872 --debug | --debu | --deb | --de | --d | -d )
3163633873 debug=: ;;
3163733874 --file | --fil | --fi | --f )
3163833875 $ac_shift
3163933876 case $ac_optarg in
31640 *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
33877 *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
3164133878 '') as_fn_error $? "missing file argument" ;;
3164233879 esac
3164333880 as_fn_append CONFIG_FILES " '$ac_optarg'"
3164533882 --header | --heade | --head | --hea )
3164633883 $ac_shift
3164733884 case $ac_optarg in
31648 *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
33885 *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
3164933886 esac
3165033887 as_fn_append CONFIG_HEADERS " '$ac_optarg'"
3165133888 ac_need_defaults=false;;
3165433891 as_fn_error $? "ambiguous option: \`$1'
3165533892 Try \`$0 --help' for more information.";;
3165633893 --help | --hel | -h )
31657 $as_echo "$ac_cs_usage"; exit ;;
33894 printf "%s\n" "$ac_cs_usage"; exit ;;
3165833895 -q | -quiet | --quiet | --quie | --qui | --qu | --q \
3165933896 | -silent | --silent | --silen | --sile | --sil | --si | --s)
3166033897 ac_cs_silent=: ;;
3168233919 if \$ac_cs_recheck; then
3168333920 set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
3168433921 shift
31685 \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
33922 \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6
3168633923 CONFIG_SHELL='$SHELL'
3168733924 export CONFIG_SHELL
3168833925 exec "\$@"
3169633933 sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
3169733934 ## Running $as_me. ##
3169833935 _ASBOX
31699 $as_echo "$ac_log"
33936 printf "%s\n" "$ac_log"
3170033937 } >&5
3170133938
3170233939 _ACEOF
3217234409 "tests/hwloc/ports/topology-cuda.c") CONFIG_LINKS="$CONFIG_LINKS tests/hwloc/ports/topology-cuda.c:hwloc/topology-cuda.c" ;;
3217334410 "tests/hwloc/ports/topology-nvml.c") CONFIG_LINKS="$CONFIG_LINKS tests/hwloc/ports/topology-nvml.c:hwloc/topology-nvml.c" ;;
3217434411 "tests/hwloc/ports/topology-rsmi.c") CONFIG_LINKS="$CONFIG_LINKS tests/hwloc/ports/topology-rsmi.c:hwloc/topology-rsmi.c" ;;
34412 "tests/hwloc/ports/topology-levelzero.c") CONFIG_LINKS="$CONFIG_LINKS tests/hwloc/ports/topology-levelzero.c:hwloc/topology-levelzero.c" ;;
3217534413 "tests/hwloc/ports/topology-gl.c") CONFIG_LINKS="$CONFIG_LINKS tests/hwloc/ports/topology-gl.c:hwloc/topology-gl.c" ;;
3217634414 "tests/hwloc/ports/lstopo-windows.c") CONFIG_LINKS="$CONFIG_LINKS tests/hwloc/ports/lstopo-windows.c:utils/lstopo/lstopo-windows.c" ;;
3217734415 "tests/hwloc/ports/lstopo-android.c") CONFIG_LINKS="$CONFIG_LINKS tests/hwloc/ports/lstopo-android.c:utils/lstopo/lstopo-android.c" ;;
3218634424 # We use the long form for the default assignment because of an extremely
3218734425 # bizarre bug on SunOS 4.1.3.
3218834426 if $ac_need_defaults; then
32189 test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
32190 test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
32191 test "${CONFIG_LINKS+set}" = set || CONFIG_LINKS=$config_links
32192 test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
34427 test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files
34428 test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers
34429 test ${CONFIG_LINKS+y} || CONFIG_LINKS=$config_links
34430 test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands
3219334431 fi
3219434432
3219534433 # Have a temporary directory for convenience. Make it in the build tree
3252534763 esac ||
3252634764 as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
3252734765 esac
32528 case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
34766 case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
3252934767 as_fn_append ac_file_inputs " '$ac_f'"
3253034768 done
3253134769
3253334771 # use $as_me), people would be surprised to read:
3253434772 # /* config.h. Generated by config.status. */
3253534773 configure_input='Generated from '`
32536 $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
34774 printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
3253734775 `' by configure.'
3253834776 if test x"$ac_file" != x-; then
3253934777 configure_input="$ac_file. $configure_input"
32540 { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
32541 $as_echo "$as_me: creating $ac_file" >&6;}
34778 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
34779 printf "%s\n" "$as_me: creating $ac_file" >&6;}
3254234780 fi
3254334781 # Neutralize special characters interpreted by sed in replacement strings.
3254434782 case $configure_input in #(
3254534783 *\&* | *\|* | *\\* )
32546 ac_sed_conf_input=`$as_echo "$configure_input" |
34784 ac_sed_conf_input=`printf "%s\n" "$configure_input" |
3254734785 sed 's/[\\\\&|]/\\\\&/g'`;; #(
3254834786 *) ac_sed_conf_input=$configure_input;;
3254934787 esac
3256034798 X"$ac_file" : 'X\(//\)[^/]' \| \
3256134799 X"$ac_file" : 'X\(//\)$' \| \
3256234800 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
32563 $as_echo X"$ac_file" |
34801 printf "%s\n" X"$ac_file" |
3256434802 sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
3256534803 s//\1/
3256634804 q
3258434822 case "$ac_dir" in
3258534823 .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
3258634824 *)
32587 ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
34825 ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
3258834826 # A ".." for each directory in $ac_dir_suffix.
32589 ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
34827 ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
3259034828 case $ac_top_builddir_sub in
3259134829 "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
3259234830 *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
3264834886 case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
3264934887 *datarootdir*) ac_datarootdir_seen=yes;;
3265034888 *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
32651 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
32652 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
34889 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
34890 printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
3265334891 _ACEOF
3265434892 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
3265534893 ac_datarootdir_hack='
3269334931 { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
3269434932 { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \
3269534933 "$ac_tmp/out"`; test -z "$ac_out"; } &&
32696 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
34934 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
3269734935 which seems to be undefined. Please make sure it is defined" >&5
32698 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
34936 printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
3269934937 which seems to be undefined. Please make sure it is defined" >&2;}
3270034938
3270134939 rm -f "$ac_tmp/stdin"
3271134949 #
3271234950 if test x"$ac_file" != x-; then
3271334951 {
32714 $as_echo "/* $configure_input */" \
34952 printf "%s\n" "/* $configure_input */" >&1 \
3271534953 && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
3271634954 } >"$ac_tmp/config.h" \
3271734955 || as_fn_error $? "could not create $ac_file" "$LINENO" 5
3271834956 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
32719 { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
32720 $as_echo "$as_me: $ac_file is unchanged" >&6;}
34957 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
34958 printf "%s\n" "$as_me: $ac_file is unchanged" >&6;}
3272134959 else
3272234960 rm -f "$ac_file"
3272334961 mv "$ac_tmp/config.h" "$ac_file" \
3272434962 || as_fn_error $? "could not create $ac_file" "$LINENO" 5
3272534963 fi
3272634964 else
32727 $as_echo "/* $configure_input */" \
34965 printf "%s\n" "/* $configure_input */" >&1 \
3272834966 && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
3272934967 || as_fn_error $? "could not create -" "$LINENO" 5
3273034968 fi
3274434982 X"$_am_arg" : 'X\(//\)[^/]' \| \
3274534983 X"$_am_arg" : 'X\(//\)$' \| \
3274634984 X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
32747 $as_echo X"$_am_arg" |
34985 printf "%s\n" X"$_am_arg" |
3274834986 sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
3274934987 s//\1/
3275034988 q
3277635014 ac_source=$srcdir/$ac_source
3277735015 fi
3277835016
32779 { $as_echo "$as_me:${as_lineno-$LINENO}: linking $ac_source to $ac_file" >&5
32780 $as_echo "$as_me: linking $ac_source to $ac_file" >&6;}
35017 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: linking $ac_source to $ac_file" >&5
35018 printf "%s\n" "$as_me: linking $ac_source to $ac_file" >&6;}
3278135019
3278235020 if test ! -r "$ac_source"; then
3278335021 as_fn_error $? "$ac_source: file not found" "$LINENO" 5
3279535033 as_fn_error $? "cannot link or copy $ac_source to $ac_file" "$LINENO" 5
3279635034 fi
3279735035 ;;
32798 :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
32799 $as_echo "$as_me: executing $ac_file commands" >&6;}
35036 :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
35037 printf "%s\n" "$as_me: executing $ac_file commands" >&6;}
3280035038 ;;
3280135039 esac
3280235040
3282235060 for am_mf
3282335061 do
3282435062 # Strip MF so we end up with the name of the file.
32825 am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'`
35063 am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'`
3282635064 # Check whether this is an Automake generated Makefile which includes
3282735065 # dependency-tracking related rules and includes.
3282835066 # Grep'ing the whole file directly is not great: AIX grep has a line
3283435072 X"$am_mf" : 'X\(//\)[^/]' \| \
3283535073 X"$am_mf" : 'X\(//\)$' \| \
3283635074 X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
32837 $as_echo X"$am_mf" |
35075 printf "%s\n" X"$am_mf" |
3283835076 sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
3283935077 s//\1/
3284035078 q
3285635094 $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \
3285735095 X"$am_mf" : 'X\(//\)$' \| \
3285835096 X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
32859 $as_echo X/"$am_mf" |
35097 printf "%s\n" X/"$am_mf" |
3286035098 sed '/^.*\/\([^/][^/]*\)\/*$/{
3286135099 s//\1/
3286235100 q
3288135119 (exit $ac_status); } || am_rc=$?
3288235120 done
3288335121 if test $am_rc -ne 0; then
32884 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
32885 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
35122 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
35123 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
3288635124 as_fn_error $? "Something went wrong bootstrapping makefile fragments
3288735125 for automatic dependency tracking. If GNU make was not used, consider
3288835126 re-running the configure script with MAKE=\"gmake\" (or whatever is
3344335681 esac
3344435682
3344535683
35684
3344635685 ltmain=$ac_aux_dir/ltmain.sh
3344735686
3344835687
3366935908 $ac_cs_success || as_fn_exit 1
3367035909 fi
3367135910 if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
33672 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
33673 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
35911 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
35912 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
3367435913 fi
3367535914
3367635915
3368735926
3368835927 # Show which optional support we'll be building
3368935928 hwloc_xml_status=basic
33690 if test "$hwloc_libxml2_happy" = "yes"; then :
35929 if test "$hwloc_libxml2_happy" = "yes"
35930 then :
3369135931 hwloc_xml_status=full
3369235932 fi
3369335933 netloc_status=no
33694 if test "$netloc_happy" = "yes"; then :
35934 if test "$netloc_happy" = "yes"
35935 then :
3369535936
3369635937 netlocscotch_status=without
33697 if test "$scotch_found_headers" = "yes"; then :
35938 if test "$scotch_found_headers" = "yes"
35939 then :
3369835940 netlocscotch_status=with
3369935941 fi
3370035942 netloc_status="yes ($netlocscotch_status scotch)"
3370135943
3370235944 fi
3370335945
33704 if test "$enable_embedded_mode" = "yes"; then :
35946 if test "$enable_embedded_mode" = "yes"
35947 then :
3370535948 hwloc_graphical_lstopo_status="no (disabled in embedded mode)"
33706 else
33707 if test "$hwloc_windows" = "yes"; then :
35949 else $as_nop
35950 if test "$hwloc_windows" = "yes"
35951 then :
3370835952 hwloc_graphical_lstopo_status="yes (Windows)"
33709 else
33710 if test "$hwloc_cairo_happy" = "yes"; then :
33711 if test "$lstopo_have_x11" = "yes"; then :
35953 else $as_nop
35954 if test "$hwloc_cairo_happy" = "yes"
35955 then :
35956 if test "$lstopo_have_x11" = "yes"
35957 then :
3371235958 hwloc_graphical_lstopo_status="yes (Cairo)"
33713 else
35959 else $as_nop
3371435960 hwloc_graphical_lstopo_status="partial (Cairo, without X11)"
3371535961 fi
33716 else
35962 else $as_nop
3371735963 hwloc_graphical_lstopo_status="no"
3371835964 fi
3371935965
3373435980 test "x$hwloc_have_cudart" = "xyes" && hwloc_probeio_list="$hwloc_probeio_list CUDA"
3373535981 test "x$hwloc_nvml_happy" = "xyes" && hwloc_probeio_list="$hwloc_probeio_list NVML"
3373635982 test "x$hwloc_rsmi_happy" = "xyes" && hwloc_probeio_list="$hwloc_probeio_list RSMI"
35983 test "x$hwloc_levelzero_happy" = "xyes" && hwloc_probeio_list="$hwloc_probeio_list LevelZero"
3373735984 test "x$hwloc_gl_happy" = "xyes" && hwloc_probeio_list="$hwloc_probeio_list GL"
3373835985 # if nothing, say "no"
3373935986 test "x$hwloc_probeio_list" = "x" && hwloc_probeio_list=" no"
3376236009 -----------------------------------------------------------------------------
3376336010
3376436011 EOF
36012
00 # -*- shell-script -*-
11 #
22 # Copyright © 2009 CNRS
3 # Copyright © 2009-2020 Inria. All rights reserved.
3 # Copyright © 2009-2021 Inria. All rights reserved.
44 # Copyright © 2009, 2011-2012 Université Bordeaux
55 * Copyright © 2009-2020 Cisco Systems, Inc. All rights reserved.
66 #
7878
7979 # Setup libtool, but disable F77, Java and Windows Resource
8080 # Compiler support -- we don't need that stuff.
81 AM_ENABLE_SHARED
82 AM_DISABLE_STATIC
81 AC_ENABLE_SHARED
82 AC_DISABLE_STATIC
8383
8484 # This did not exist pre AM 1.11.x (where x is somewhere >0 and <3),
8585 # but it is necessary in AM 1.12.x.
9696 CFLAGS_save=$CFLAGS
9797 AC_PROG_CC
9898 AM_PROG_CC_C_O
99 AC_PROG_CC_C99
99 # AC_PROG_CC_C99 obsolete, detected inside AC_PROG_CC, since autoconf 2.70
100 m4_version_prereq([2.70], [], [AC_PROG_CC_C99])
100101 CFLAGS=$CFLAGS_save
101102
102103 AC_ARG_VAR(CC_FOR_BUILD,[build system C compiler])
141142 AC_SUBST([libnetloc_so_version])
142143
143144 AC_ARG_ENABLE([netloc],
144 [AC_HELP_STRING([--enable-netloc],
145 [AS_HELP_STRING([--enable-netloc],
145146 [The Netloc functionality is disabled by default. Using --enable-netloc will cause configure to abort if Netloc cannot be build (e.g., not supported on your platform).])
146147 ])
147148
255256 test "x$hwloc_have_cudart" = "xyes" && hwloc_probeio_list="$hwloc_probeio_list CUDA"
256257 test "x$hwloc_nvml_happy" = "xyes" && hwloc_probeio_list="$hwloc_probeio_list NVML"
257258 test "x$hwloc_rsmi_happy" = "xyes" && hwloc_probeio_list="$hwloc_probeio_list RSMI"
259 test "x$hwloc_levelzero_happy" = "xyes" && hwloc_probeio_list="$hwloc_probeio_list LevelZero"
258260 test "x$hwloc_gl_happy" = "xyes" && hwloc_probeio_list="$hwloc_probeio_list GL"
259261 # if nothing, say "no"
260262 test "x$hwloc_probeio_list" = "x" && hwloc_probeio_list=" no"
187187 CONFIGURE_DEPENDENCIES = @CONFIGURE_DEPENDENCIES@
188188 CPP = @CPP@
189189 CPPFLAGS = @CPPFLAGS@
190 CUDA_VERSION = @CUDA_VERSION@
190191 CXX = @CXX@
191192 CXXCPP = @CXXCPP@
192193 CXXDEPMODE = @CXXDEPMODE@
213214 HWLOC_CAIRO_LIBS = @HWLOC_CAIRO_LIBS@
214215 HWLOC_CFLAGS = @HWLOC_CFLAGS@
215216 HWLOC_CPPFLAGS = @HWLOC_CPPFLAGS@
217 HWLOC_CUDART_CFLAGS = @HWLOC_CUDART_CFLAGS@
218 HWLOC_CUDART_CPPFLAGS = @HWLOC_CUDART_CPPFLAGS@
219 HWLOC_CUDART_LDFLAGS = @HWLOC_CUDART_LDFLAGS@
220 HWLOC_CUDART_LIBS = @HWLOC_CUDART_LIBS@
221 HWLOC_CUDA_CFLAGS = @HWLOC_CUDA_CFLAGS@
222 HWLOC_CUDA_CPPFLAGS = @HWLOC_CUDA_CPPFLAGS@
223 HWLOC_CUDA_LDFLAGS = @HWLOC_CUDA_LDFLAGS@
216224 HWLOC_CUDA_LIBS = @HWLOC_CUDA_LIBS@
217225 HWLOC_DIFF_U = @HWLOC_DIFF_U@
218226 HWLOC_DIFF_W = @HWLOC_DIFF_W@
223231 HWLOC_EMBEDDED_LDFLAGS = @HWLOC_EMBEDDED_LDFLAGS@
224232 HWLOC_EMBEDDED_LIBS = @HWLOC_EMBEDDED_LIBS@
225233 HWLOC_GL_LIBS = @HWLOC_GL_LIBS@
234 HWLOC_HAVE_LEVELZERO = @HWLOC_HAVE_LEVELZERO@
226235 HWLOC_HAVE_LIBXML2 = @HWLOC_HAVE_LIBXML2@
227236 HWLOC_HAVE_NVML = @HWLOC_HAVE_NVML@
228237 HWLOC_HAVE_OPENCL = @HWLOC_HAVE_OPENCL@
229238 HWLOC_HAVE_RSMI = @HWLOC_HAVE_RSMI@
239 HWLOC_IBVERBS_LIBS = @HWLOC_IBVERBS_LIBS@
230240 HWLOC_LDFLAGS = @HWLOC_LDFLAGS@
241 HWLOC_LEVELZERO_CFLAGS = @HWLOC_LEVELZERO_CFLAGS@
242 HWLOC_LEVELZERO_LIBS = @HWLOC_LEVELZERO_LIBS@
231243 HWLOC_LIBS = @HWLOC_LIBS@
232244 HWLOC_LIBS_PRIVATE = @HWLOC_LIBS_PRIVATE@
233245 HWLOC_LIBXML2_CFLAGS = @HWLOC_LIBXML2_CFLAGS@
237249 HWLOC_MS_LIB_ARCH = @HWLOC_MS_LIB_ARCH@
238250 HWLOC_NUMA_CFLAGS = @HWLOC_NUMA_CFLAGS@
239251 HWLOC_NUMA_LIBS = @HWLOC_NUMA_LIBS@
252 HWLOC_NVML_CPPFLAGS = @HWLOC_NVML_CPPFLAGS@
253 HWLOC_NVML_LDFLAGS = @HWLOC_NVML_LDFLAGS@
240254 HWLOC_NVML_LIBS = @HWLOC_NVML_LIBS@
241 HWLOC_OPENCL_CFLAGS = @HWLOC_OPENCL_CFLAGS@
255 HWLOC_OPENCL_CPPFLAGS = @HWLOC_OPENCL_CPPFLAGS@
242256 HWLOC_OPENCL_LDFLAGS = @HWLOC_OPENCL_LDFLAGS@
243257 HWLOC_OPENCL_LIBS = @HWLOC_OPENCL_LIBS@
244258 HWLOC_PCIACCESS_CFLAGS = @HWLOC_PCIACCESS_CFLAGS@
364378 prefix = @prefix@
365379 program_transform_name = @program_transform_name@
366380 psdir = @psdir@
381 runstatedir = @runstatedir@
367382 sbindir = @sbindir@
368383 sharedstatedir = @sharedstatedir@
369384 srcdir = @srcdir@
00 #
1 # Copyright © 2018-2020 Inria. All rights reserved.
1 # Copyright © 2018-2021 Inria. All rights reserved.
22 # See COPYING in top-level directory.
33 #
44
2222 -v --verbose
2323 -s --silent
2424 --distances
25 --distances-transform
2526 --memattrs
2627 --cpukinds
28 --windows-processor-groups
2729 -c --cpuset
2830 -C --cpuset-only
2931 --taskset
5355 --fontsize
5456 --gridsize
5557 --linespacing
58 --thickness
5659 --horiz --horiz=
5760 --vert --vert=
5861 --rect --rect=
116119 --allow)
117120 COMPREPLY=( `compgen -W "all local <mask> nodeset=<mask>" -- "$cur"` )
118121 ;;
119 --restrict-flags | --export-xml-flags | --export-synthetic-flags | --fontsize | --gridsize | --linespacing)
122 --restrict-flags | --export-xml-flags | --export-synthetic-flags | --fontsize | --gridsize | --linespacing | --thickness)
120123 COMPREPLY=( "<integer>" "" )
121124 ;;
122125 --append-legend)
130133 ;;
131134 --children-order)
132135 COMPREPLY=( `compgen -W "plain memoryabove" -- "$cur"` )
136 ;;
137 --distances-transform)
138 COMPREPLY=( `compgen -W "links merge-switch-ports transitive-closure" -- "$cur"` )
133139 ;;
134140 esac
135141 fi
351357
352358
353359 _hwloc_annotate(){
354 local OPTIONS=(--ci --ri --cu --cd -h --help)
360 local OPTIONS=(--ci --ri --cu --cd --version -h --help)
355361 local cur=${COMP_WORDS[COMP_CWORD]}
356362
357363 if [[ $COMP_CWORD == 1 || $cur == -* ]] ; then
402408 _hwloc_compress_dir(){
403409 local OPTIONS=(-R --reverse
404410 -v --verbose
411 --version
405412 -h --help
406413 )
407414 local cur=${COMP_WORDS[COMP_CWORD]}
464471 local OPTIONS=(-a
465472 --pid
466473 --name
474 --uid
467475 -l --logical
468476 -p --physical
469477 -c --cpuset
478 --single-ancestor
470479 -t --threads
471480 -e --get-last-cpu-location
472481 --pid-cmd
473 --uid
482 --short-name
474483 --disallowed --whole-system
475484 --json-server
476485 --json-port
477486 -v --verbose
487 --version
478488 -h --help
479489 )
480490 local cur=${COMP_WORDS[COMP_CWORD]}
508518 _hwloc_gather_cpuid(){
509519 local OPTIONS=(-c
510520 -s --silent
521 --version
511522 -h --help
512523 )
513524 local cur=${COMP_WORDS[COMP_CWORD]}
531542 --dmi
532543 --no-cpuid
533544 --keep
545 --version
534546 -h --help
535547 )
536548 local cur=${COMP_WORDS[COMP_CWORD]}
184184 CONFIGURE_DEPENDENCIES = @CONFIGURE_DEPENDENCIES@
185185 CPP = @CPP@
186186 CPPFLAGS = @CPPFLAGS@
187 CUDA_VERSION = @CUDA_VERSION@
187188 CXX = @CXX@
188189 CXXCPP = @CXXCPP@
189190 CXXDEPMODE = @CXXDEPMODE@
210211 HWLOC_CAIRO_LIBS = @HWLOC_CAIRO_LIBS@
211212 HWLOC_CFLAGS = @HWLOC_CFLAGS@
212213 HWLOC_CPPFLAGS = @HWLOC_CPPFLAGS@
214 HWLOC_CUDART_CFLAGS = @HWLOC_CUDART_CFLAGS@
215 HWLOC_CUDART_CPPFLAGS = @HWLOC_CUDART_CPPFLAGS@
216 HWLOC_CUDART_LDFLAGS = @HWLOC_CUDART_LDFLAGS@
217 HWLOC_CUDART_LIBS = @HWLOC_CUDART_LIBS@
218 HWLOC_CUDA_CFLAGS = @HWLOC_CUDA_CFLAGS@
219 HWLOC_CUDA_CPPFLAGS = @HWLOC_CUDA_CPPFLAGS@
220 HWLOC_CUDA_LDFLAGS = @HWLOC_CUDA_LDFLAGS@
213221 HWLOC_CUDA_LIBS = @HWLOC_CUDA_LIBS@
214222 HWLOC_DIFF_U = @HWLOC_DIFF_U@
215223 HWLOC_DIFF_W = @HWLOC_DIFF_W@
220228 HWLOC_EMBEDDED_LDFLAGS = @HWLOC_EMBEDDED_LDFLAGS@
221229 HWLOC_EMBEDDED_LIBS = @HWLOC_EMBEDDED_LIBS@
222230 HWLOC_GL_LIBS = @HWLOC_GL_LIBS@
231 HWLOC_HAVE_LEVELZERO = @HWLOC_HAVE_LEVELZERO@
223232 HWLOC_HAVE_LIBXML2 = @HWLOC_HAVE_LIBXML2@
224233 HWLOC_HAVE_NVML = @HWLOC_HAVE_NVML@
225234 HWLOC_HAVE_OPENCL = @HWLOC_HAVE_OPENCL@
226235 HWLOC_HAVE_RSMI = @HWLOC_HAVE_RSMI@
236 HWLOC_IBVERBS_LIBS = @HWLOC_IBVERBS_LIBS@
227237 HWLOC_LDFLAGS = @HWLOC_LDFLAGS@
238 HWLOC_LEVELZERO_CFLAGS = @HWLOC_LEVELZERO_CFLAGS@
239 HWLOC_LEVELZERO_LIBS = @HWLOC_LEVELZERO_LIBS@
228240 HWLOC_LIBS = @HWLOC_LIBS@
229241 HWLOC_LIBS_PRIVATE = @HWLOC_LIBS_PRIVATE@
230242 HWLOC_LIBXML2_CFLAGS = @HWLOC_LIBXML2_CFLAGS@
234246 HWLOC_MS_LIB_ARCH = @HWLOC_MS_LIB_ARCH@
235247 HWLOC_NUMA_CFLAGS = @HWLOC_NUMA_CFLAGS@
236248 HWLOC_NUMA_LIBS = @HWLOC_NUMA_LIBS@
249 HWLOC_NVML_CPPFLAGS = @HWLOC_NVML_CPPFLAGS@
250 HWLOC_NVML_LDFLAGS = @HWLOC_NVML_LDFLAGS@
237251 HWLOC_NVML_LIBS = @HWLOC_NVML_LIBS@
238 HWLOC_OPENCL_CFLAGS = @HWLOC_OPENCL_CFLAGS@
252 HWLOC_OPENCL_CPPFLAGS = @HWLOC_OPENCL_CPPFLAGS@
239253 HWLOC_OPENCL_LDFLAGS = @HWLOC_OPENCL_LDFLAGS@
240254 HWLOC_OPENCL_LIBS = @HWLOC_OPENCL_LIBS@
241255 HWLOC_PCIACCESS_CFLAGS = @HWLOC_PCIACCESS_CFLAGS@
361375 prefix = @prefix@
362376 program_transform_name = @program_transform_name@
363377 psdir = @psdir@
378 runstatedir = @runstatedir@
364379 sbindir = @sbindir@
365380 sharedstatedir = @sharedstatedir@
366381 srcdir = @srcdir@
238238 CONFIGURE_DEPENDENCIES = @CONFIGURE_DEPENDENCIES@
239239 CPP = @CPP@
240240 CPPFLAGS = @CPPFLAGS@
241 CUDA_VERSION = @CUDA_VERSION@
241242 CXX = @CXX@
242243 CXXCPP = @CXXCPP@
243244 CXXDEPMODE = @CXXDEPMODE@
264265 HWLOC_CAIRO_LIBS = @HWLOC_CAIRO_LIBS@
265266 HWLOC_CFLAGS = @HWLOC_CFLAGS@
266267 HWLOC_CPPFLAGS = @HWLOC_CPPFLAGS@
268 HWLOC_CUDART_CFLAGS = @HWLOC_CUDART_CFLAGS@
269 HWLOC_CUDART_CPPFLAGS = @HWLOC_CUDART_CPPFLAGS@
270 HWLOC_CUDART_LDFLAGS = @HWLOC_CUDART_LDFLAGS@
271 HWLOC_CUDART_LIBS = @HWLOC_CUDART_LIBS@
272 HWLOC_CUDA_CFLAGS = @HWLOC_CUDA_CFLAGS@
273 HWLOC_CUDA_CPPFLAGS = @HWLOC_CUDA_CPPFLAGS@
274 HWLOC_CUDA_LDFLAGS = @HWLOC_CUDA_LDFLAGS@
267275 HWLOC_CUDA_LIBS = @HWLOC_CUDA_LIBS@
268276 HWLOC_DIFF_U = @HWLOC_DIFF_U@
269277 HWLOC_DIFF_W = @HWLOC_DIFF_W@
274282 HWLOC_EMBEDDED_LDFLAGS = @HWLOC_EMBEDDED_LDFLAGS@
275283 HWLOC_EMBEDDED_LIBS = @HWLOC_EMBEDDED_LIBS@
276284 HWLOC_GL_LIBS = @HWLOC_GL_LIBS@
285 HWLOC_HAVE_LEVELZERO = @HWLOC_HAVE_LEVELZERO@
277286 HWLOC_HAVE_LIBXML2 = @HWLOC_HAVE_LIBXML2@
278287 HWLOC_HAVE_NVML = @HWLOC_HAVE_NVML@
279288 HWLOC_HAVE_OPENCL = @HWLOC_HAVE_OPENCL@
280289 HWLOC_HAVE_RSMI = @HWLOC_HAVE_RSMI@
290 HWLOC_IBVERBS_LIBS = @HWLOC_IBVERBS_LIBS@
281291 HWLOC_LDFLAGS = @HWLOC_LDFLAGS@
292 HWLOC_LEVELZERO_CFLAGS = @HWLOC_LEVELZERO_CFLAGS@
293 HWLOC_LEVELZERO_LIBS = @HWLOC_LEVELZERO_LIBS@
282294 HWLOC_LIBS = @HWLOC_LIBS@
283295 HWLOC_LIBS_PRIVATE = @HWLOC_LIBS_PRIVATE@
284296 HWLOC_LIBXML2_CFLAGS = @HWLOC_LIBXML2_CFLAGS@
288300 HWLOC_MS_LIB_ARCH = @HWLOC_MS_LIB_ARCH@
289301 HWLOC_NUMA_CFLAGS = @HWLOC_NUMA_CFLAGS@
290302 HWLOC_NUMA_LIBS = @HWLOC_NUMA_LIBS@
303 HWLOC_NVML_CPPFLAGS = @HWLOC_NVML_CPPFLAGS@
304 HWLOC_NVML_LDFLAGS = @HWLOC_NVML_LDFLAGS@
291305 HWLOC_NVML_LIBS = @HWLOC_NVML_LIBS@
292 HWLOC_OPENCL_CFLAGS = @HWLOC_OPENCL_CFLAGS@
306 HWLOC_OPENCL_CPPFLAGS = @HWLOC_OPENCL_CPPFLAGS@
293307 HWLOC_OPENCL_LDFLAGS = @HWLOC_OPENCL_LDFLAGS@
294308 HWLOC_OPENCL_LIBS = @HWLOC_OPENCL_LIBS@
295309 HWLOC_PCIACCESS_CFLAGS = @HWLOC_PCIACCESS_CFLAGS@
415429 prefix = @prefix@
416430 program_transform_name = @program_transform_name@
417431 psdir = @psdir@
432 runstatedir = @runstatedir@
418433 sbindir = @sbindir@
419434 sharedstatedir = @sharedstatedir@
420435 srcdir = @srcdir@
187187 CONFIGURE_DEPENDENCIES = @CONFIGURE_DEPENDENCIES@
188188 CPP = @CPP@
189189 CPPFLAGS = @CPPFLAGS@
190 CUDA_VERSION = @CUDA_VERSION@
190191 CXX = @CXX@
191192 CXXCPP = @CXXCPP@
192193 CXXDEPMODE = @CXXDEPMODE@
213214 HWLOC_CAIRO_LIBS = @HWLOC_CAIRO_LIBS@
214215 HWLOC_CFLAGS = @HWLOC_CFLAGS@
215216 HWLOC_CPPFLAGS = @HWLOC_CPPFLAGS@
217 HWLOC_CUDART_CFLAGS = @HWLOC_CUDART_CFLAGS@
218 HWLOC_CUDART_CPPFLAGS = @HWLOC_CUDART_CPPFLAGS@
219 HWLOC_CUDART_LDFLAGS = @HWLOC_CUDART_LDFLAGS@
220 HWLOC_CUDART_LIBS = @HWLOC_CUDART_LIBS@
221 HWLOC_CUDA_CFLAGS = @HWLOC_CUDA_CFLAGS@
222 HWLOC_CUDA_CPPFLAGS = @HWLOC_CUDA_CPPFLAGS@
223 HWLOC_CUDA_LDFLAGS = @HWLOC_CUDA_LDFLAGS@
216224 HWLOC_CUDA_LIBS = @HWLOC_CUDA_LIBS@
217225 HWLOC_DIFF_U = @HWLOC_DIFF_U@
218226 HWLOC_DIFF_W = @HWLOC_DIFF_W@
223231 HWLOC_EMBEDDED_LDFLAGS = @HWLOC_EMBEDDED_LDFLAGS@
224232 HWLOC_EMBEDDED_LIBS = @HWLOC_EMBEDDED_LIBS@
225233 HWLOC_GL_LIBS = @HWLOC_GL_LIBS@
234 HWLOC_HAVE_LEVELZERO = @HWLOC_HAVE_LEVELZERO@
226235 HWLOC_HAVE_LIBXML2 = @HWLOC_HAVE_LIBXML2@
227236 HWLOC_HAVE_NVML = @HWLOC_HAVE_NVML@
228237 HWLOC_HAVE_OPENCL = @HWLOC_HAVE_OPENCL@
229238 HWLOC_HAVE_RSMI = @HWLOC_HAVE_RSMI@
239 HWLOC_IBVERBS_LIBS = @HWLOC_IBVERBS_LIBS@
230240 HWLOC_LDFLAGS = @HWLOC_LDFLAGS@
241 HWLOC_LEVELZERO_CFLAGS = @HWLOC_LEVELZERO_CFLAGS@
242 HWLOC_LEVELZERO_LIBS = @HWLOC_LEVELZERO_LIBS@
231243 HWLOC_LIBS = @HWLOC_LIBS@
232244 HWLOC_LIBS_PRIVATE = @HWLOC_LIBS_PRIVATE@
233245 HWLOC_LIBXML2_CFLAGS = @HWLOC_LIBXML2_CFLAGS@
237249 HWLOC_MS_LIB_ARCH = @HWLOC_MS_LIB_ARCH@
238250 HWLOC_NUMA_CFLAGS = @HWLOC_NUMA_CFLAGS@
239251 HWLOC_NUMA_LIBS = @HWLOC_NUMA_LIBS@
252 HWLOC_NVML_CPPFLAGS = @HWLOC_NVML_CPPFLAGS@
253 HWLOC_NVML_LDFLAGS = @HWLOC_NVML_LDFLAGS@
240254 HWLOC_NVML_LIBS = @HWLOC_NVML_LIBS@
241 HWLOC_OPENCL_CFLAGS = @HWLOC_OPENCL_CFLAGS@
255 HWLOC_OPENCL_CPPFLAGS = @HWLOC_OPENCL_CPPFLAGS@
242256 HWLOC_OPENCL_LDFLAGS = @HWLOC_OPENCL_LDFLAGS@
243257 HWLOC_OPENCL_LIBS = @HWLOC_OPENCL_LIBS@
244258 HWLOC_PCIACCESS_CFLAGS = @HWLOC_PCIACCESS_CFLAGS@
364378 prefix = @prefix@
365379 program_transform_name = @program_transform_name@
366380 psdir = @psdir@
381 runstatedir = @runstatedir@
367382 sbindir = @sbindir@
368383 sharedstatedir = @sharedstatedir@
369384 srcdir = @srcdir@
364364 CONFIGURE_DEPENDENCIES = @CONFIGURE_DEPENDENCIES@
365365 CPP = @CPP@
366366 CPPFLAGS = @CPPFLAGS@
367 CUDA_VERSION = @CUDA_VERSION@
367368 CXX = @CXX@
368369 CXXCPP = @CXXCPP@
369370 CXXDEPMODE = @CXXDEPMODE@
390391 HWLOC_CAIRO_LIBS = @HWLOC_CAIRO_LIBS@
391392 HWLOC_CFLAGS = @HWLOC_CFLAGS@
392393 HWLOC_CPPFLAGS = @HWLOC_CPPFLAGS@
394 HWLOC_CUDART_CFLAGS = @HWLOC_CUDART_CFLAGS@
395 HWLOC_CUDART_CPPFLAGS = @HWLOC_CUDART_CPPFLAGS@
396 HWLOC_CUDART_LDFLAGS = @HWLOC_CUDART_LDFLAGS@
397 HWLOC_CUDART_LIBS = @HWLOC_CUDART_LIBS@
398 HWLOC_CUDA_CFLAGS = @HWLOC_CUDA_CFLAGS@
399 HWLOC_CUDA_CPPFLAGS = @HWLOC_CUDA_CPPFLAGS@
400 HWLOC_CUDA_LDFLAGS = @HWLOC_CUDA_LDFLAGS@
393401 HWLOC_CUDA_LIBS = @HWLOC_CUDA_LIBS@
394402 HWLOC_DIFF_U = @HWLOC_DIFF_U@
395403 HWLOC_DIFF_W = @HWLOC_DIFF_W@
400408 HWLOC_EMBEDDED_LDFLAGS = @HWLOC_EMBEDDED_LDFLAGS@
401409 HWLOC_EMBEDDED_LIBS = @HWLOC_EMBEDDED_LIBS@
402410 HWLOC_GL_LIBS = @HWLOC_GL_LIBS@
411 HWLOC_HAVE_LEVELZERO = @HWLOC_HAVE_LEVELZERO@
403412 HWLOC_HAVE_LIBXML2 = @HWLOC_HAVE_LIBXML2@
404413 HWLOC_HAVE_NVML = @HWLOC_HAVE_NVML@
405414 HWLOC_HAVE_OPENCL = @HWLOC_HAVE_OPENCL@
406415 HWLOC_HAVE_RSMI = @HWLOC_HAVE_RSMI@
416 HWLOC_IBVERBS_LIBS = @HWLOC_IBVERBS_LIBS@
407417 HWLOC_LDFLAGS = @HWLOC_LDFLAGS@
418 HWLOC_LEVELZERO_CFLAGS = @HWLOC_LEVELZERO_CFLAGS@
419 HWLOC_LEVELZERO_LIBS = @HWLOC_LEVELZERO_LIBS@
408420 HWLOC_LIBS = @HWLOC_LIBS@
409421 HWLOC_LIBS_PRIVATE = @HWLOC_LIBS_PRIVATE@
410422 HWLOC_LIBXML2_CFLAGS = @HWLOC_LIBXML2_CFLAGS@
414426 HWLOC_MS_LIB_ARCH = @HWLOC_MS_LIB_ARCH@
415427 HWLOC_NUMA_CFLAGS = @HWLOC_NUMA_CFLAGS@
416428 HWLOC_NUMA_LIBS = @HWLOC_NUMA_LIBS@
429 HWLOC_NVML_CPPFLAGS = @HWLOC_NVML_CPPFLAGS@
430 HWLOC_NVML_LDFLAGS = @HWLOC_NVML_LDFLAGS@
417431 HWLOC_NVML_LIBS = @HWLOC_NVML_LIBS@
418 HWLOC_OPENCL_CFLAGS = @HWLOC_OPENCL_CFLAGS@
432 HWLOC_OPENCL_CPPFLAGS = @HWLOC_OPENCL_CPPFLAGS@
419433 HWLOC_OPENCL_LDFLAGS = @HWLOC_OPENCL_LDFLAGS@
420434 HWLOC_OPENCL_LIBS = @HWLOC_OPENCL_LIBS@
421435 HWLOC_PCIACCESS_CFLAGS = @HWLOC_PCIACCESS_CFLAGS@
541555 prefix = @prefix@
542556 program_transform_name = @program_transform_name@
543557 psdir = @psdir@
558 runstatedir = @runstatedir@
544559 sbindir = @sbindir@
545560 sharedstatedir = @sharedstatedir@
546561 srcdir = @srcdir@
1010 #ifndef HWLOC_CONFIG_H
1111 #define HWLOC_CONFIG_H
1212
13 #define HWLOC_VERSION "2.4.1"
13 #define HWLOC_VERSION "2.5.0"
1414 #define HWLOC_VERSION_MAJOR 2
15 #define HWLOC_VERSION_MINOR 4
16 #define HWLOC_VERSION_RELEASE 1
15 #define HWLOC_VERSION_MINOR 5
16 #define HWLOC_VERSION_RELEASE 0
1717 #define HWLOC_VERSION_GREEK ""
1818
1919 #define __hwloc_restrict
241241 <ClInclude Include="..\..\include\hwloc\inlines.h" />
242242 <ClInclude Include="..\..\include\hwloc\memattrs.h" />
243243 <ClInclude Include="..\..\include\hwloc\cpukinds.h" />
244 <ClInclude Include="..\..\include\hwloc\windows.h" />
244245 <ClInclude Include="..\..\include\hwloc\plugins.h" />
245246 <ClInclude Include="..\..\include\hwloc\shmem.h" />
246247 <ClInclude Include="..\..\include\hwloc\rename.h" />
4242 <Filter>Source Files</Filter>
4343 </ClCompile>
4444 <ClCompile Include="..\..\hwloc\pci-common.c">
45 <Filter>Source Files</Filter>
46 </ClCompile>
47 <ClCompile Include="..\..\hwloc\shmem.c">
4548 <Filter>Source Files</Filter>
4649 </ClCompile>
4750 <ClCompile Include="..\..\hwloc\topology-noos.c">
109112 <ClInclude Include="..\..\include\hwloc\cpukinds.h">
110113 <Filter>Header Files</Filter>
111114 </ClInclude>
115 <ClInclude Include="..\..\include\hwloc\windows.h">
116 <Filter>Header Files</Filter>
117 </ClInclude>
112118 <ClInclude Include="..\..\include\hwloc\plugins.h">
113119 <Filter>Header Files</Filter>
114120 </ClInclude>
8888 <ClInclude Include="..\..\include\hwloc\bitmap.h" />
8989 <ClInclude Include="..\..\include\hwloc\helper.h" />
9090 <ClInclude Include="..\..\include\hwloc\openfabrics-verbs.h" />
91 <ClInclude Include="..\..\include\hwloc\windows.h" />
9192 <ClInclude Include="..\..\include\hwloc\plugins.h" />
9293 <ClInclude Include="..\..\include\hwloc\rename.h" />
9394 <ClInclude Include="..\..\include\private\components.h" />
5555 <ClInclude Include="..\..\include\hwloc\openfabrics-verbs.h">
5656 <Filter>Header Files</Filter>
5757 </ClInclude>
58 <ClInclude Include="..\..\include\hwloc\windows.h">
59 <Filter>Header Files</Filter>
60 </ClInclude>
5861 <ClInclude Include="..\..\include\hwloc\plugins.h">
5962 <Filter>Header Files</Filter>
6063 </ClInclude>
9090 <ClInclude Include="..\..\include\hwloc\bitmap.h" />
9191 <ClInclude Include="..\..\include\hwloc\helper.h" />
9292 <ClInclude Include="..\..\include\hwloc\openfabrics-verbs.h" />
93 <ClInclude Include="..\..\include\hwloc\windows.h" />
9394 <ClInclude Include="..\..\include\hwloc\plugins.h" />
9495 <ClInclude Include="..\..\include\hwloc\rename.h" />
9596 <ClInclude Include="..\..\include\private\components.h" />
5858 <ClInclude Include="..\..\include\hwloc\openfabrics-verbs.h">
5959 <Filter>Header Files</Filter>
6060 </ClInclude>
61 <ClInclude Include="..\..\include\hwloc\windows.h">
62 <Filter>Header Files</Filter>
63 </ClInclude>
6164 <ClInclude Include="..\..\include\hwloc\plugins.h">
6265 <Filter>Header Files</Filter>
6366 </ClInclude>
8989 <ClInclude Include="..\..\include\hwloc\bitmap.h" />
9090 <ClInclude Include="..\..\include\hwloc\helper.h" />
9191 <ClInclude Include="..\..\include\hwloc\openfabrics-verbs.h" />
92 <ClInclude Include="..\..\include\hwloc\windows.h" />
9293 <ClInclude Include="..\..\include\hwloc\plugins.h" />
9394 <ClInclude Include="..\..\include\hwloc\rename.h" />
9495 <ClInclude Include="..\..\include\private\components.h" />
5858 <ClInclude Include="..\..\include\hwloc\openfabrics-verbs.h">
5959 <Filter>Header Files</Filter>
6060 </ClInclude>
61 <ClInclude Include="..\..\include\hwloc\windows.h">
62 <Filter>Header Files</Filter>
63 </ClInclude>
6164 <ClInclude Include="..\..\include\hwloc\plugins.h">
6265 <Filter>Header Files</Filter>
6366 </ClInclude>
0 # Copyright © 2009-2020 Inria. All rights reserved.
0 # Copyright © 2009-2021 Inria. All rights reserved.
11 # Copyright © 2009-2013, 2021 Université Bordeaux
22 # Copyright © 2009-2016 Cisco Systems, Inc. All rights reserved.
33 # See COPYING in top-level directory.
8181 $(hwloc_include_dir)/hwloc/cudart.h \
8282 $(hwloc_include_dir)/hwloc/nvml.h \
8383 $(hwloc_include_dir)/hwloc/rsmi.h \
84 $(hwloc_include_dir)/hwloc/levelzero.h \
8485 $(hwloc_include_dir)/hwloc/gl.h \
86 $(hwloc_include_dir)/hwloc/windows.h \
8587 $(hwloc_include_dir)/hwloc/openfabrics-verbs.h \
8688 $(srcdir)/netloc.doxy \
8789 $(hwloc_include_dir)/netloc.h
435437 $(DOX_MAN_DIR)/man3/HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM.3 \
436438 $(DOX_MAN_DIR)/man3/HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES.3 \
437439 $(DOX_MAN_DIR)/man3/HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT.3 \
440 $(DOX_MAN_DIR)/man3/HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING.3 \
441 $(DOX_MAN_DIR)/man3/HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_MEMBINDING.3 \
442 $(DOX_MAN_DIR)/man3/HWLOC_TOPOLOGY_FLAG_DONT_CHANGE_BINDING.3 \
438443 $(DOX_MAN_DIR)/man3/hwloc_topology_flags_e.3 \
439444 $(DOX_MAN_DIR)/man3/hwloc_topology_get_flags.3 \
440445 $(DOX_MAN_DIR)/man3/hwloc_topology_set_flags.3 \
661666 $(DOX_MAN_DIR)/man3/hwloc_distances_get_by_name.3 \
662667 $(DOX_MAN_DIR)/man3/hwloc_distances_get_name.3 \
663668 $(DOX_MAN_DIR)/man3/hwloc_distances_release.3 \
669 $(DOX_MAN_DIR)/man3/hwloc_distances_transform_e.3 \
670 $(DOX_MAN_DIR)/man3/HWLOC_DISTANCES_TRANSFORM_REMOVE_NULL.3 \
671 $(DOX_MAN_DIR)/man3/HWLOC_DISTANCES_TRANSFORM_LINKS.3 \
672 $(DOX_MAN_DIR)/man3/HWLOC_DISTANCES_TRANSFORM_TRANSITIVE_CLOSURE.3 \
673 $(DOX_MAN_DIR)/man3/HWLOC_DISTANCES_TRANSFORM_MERGE_SWITCH_PORTS.3 \
674 $(DOX_MAN_DIR)/man3/hwloc_distances_transform.3 \
664675 $(DOX_MAN_DIR)/man3/hwlocality_distances_consult.3 \
665676 $(DOX_MAN_DIR)/man3/hwloc_distances_obj_index.3 \
666677 $(DOX_MAN_DIR)/man3/hwloc_distances_obj_pair_values.3 \
667678 $(DOX_MAN_DIR)/man3/hwlocality_distances_add.3 \
679 $(DOX_MAN_DIR)/man3/hwloc_distances_add_handle_t.3 \
668680 $(DOX_MAN_DIR)/man3/hwloc_distances_add_flag_e.3 \
669681 $(DOX_MAN_DIR)/man3/HWLOC_DISTANCES_ADD_FLAG_GROUP.3 \
670682 $(DOX_MAN_DIR)/man3/HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE.3 \
671 $(DOX_MAN_DIR)/man3/hwloc_distances_add.3 \
683 $(DOX_MAN_DIR)/man3/hwloc_distances_add_create.3 \
684 $(DOX_MAN_DIR)/man3/hwloc_distances_add_values.3 \
685 $(DOX_MAN_DIR)/man3/hwloc_distances_add_commit.3 \
686 $(DOX_MAN_DIR)/man3/hwlocality_distances_remove.3 \
672687 $(DOX_MAN_DIR)/man3/hwloc_distances_remove.3 \
673688 $(DOX_MAN_DIR)/man3/hwloc_distances_remove_by_depth.3 \
674689 $(DOX_MAN_DIR)/man3/hwloc_distances_remove_by_type.3 \
764779 $(DOX_MAN_DIR)/man3/hwloc_rsmi_get_device_cpuset.3 \
765780 $(DOX_MAN_DIR)/man3/hwloc_rsmi_get_device_osdev.3 \
766781 $(DOX_MAN_DIR)/man3/hwloc_rsmi_get_device_osdev_by_index.3 \
782 $(DOX_MAN_DIR)/man3/hwlocality_levelzero.3 \
783 $(DOX_MAN_DIR)/man3/hwloc_levelzero_get_device_cpuset.3 \
784 $(DOX_MAN_DIR)/man3/hwloc_levelzero_get_device_osdev.3 \
767785 $(DOX_MAN_DIR)/man3/hwlocality_gl.3 \
768786 $(DOX_MAN_DIR)/man3/hwloc_gl_get_display_osdev_by_port_device.3 \
769787 $(DOX_MAN_DIR)/man3/hwloc_gl_get_display_osdev_by_name.3 \
795813 $(DOX_MAN_DIR)/man3/hwloc_nodeset_from_linux_libnuma_ulongs.3 \
796814 $(DOX_MAN_DIR)/man3/hwloc_cpuset_to_linux_libnuma_ulongs.3 \
797815 $(DOX_MAN_DIR)/man3/hwloc_nodeset_to_linux_libnuma_ulongs.3
816
817 man3_windowsdir = $(man3dir)
818 man3_windows_DATA = \
819 $(DOX_MAN_DIR)/man3/hwlocality_windows.3 \
820 $(DOX_MAN_DIR)/man3/hwloc_windows_get_nr_processor_groups.3 \
821 $(DOX_MAN_DIR)/man3/hwloc_windows_get_processor_group_cpuset.3
798822
799823 man3_openfabricsdir = $(man3dir)
800824 man3_openfabrics_DATA = \
856880 $(man3_glibc_sched_DATA): $(DOX_TAG)
857881 $(man3_linux_DATA): $(DOX_TAG)
858882 $(man3_linux_libnuma_DATA): $(DOX_TAG)
883 $(man3_windows_DATA): $(DOX_TAG)
859884 $(man3_openfabrics_DATA): $(DOX_TAG)
860885
861886 $(DOX_LETTERPDF): $(DOX_TAG)
1313
1414 @SET_MAKE@
1515
16 # Copyright © 2009-2020 Inria. All rights reserved.
16 # Copyright © 2009-2021 Inria. All rights reserved.
1717 # Copyright © 2009-2013, 2021 Université Bordeaux
1818 # Copyright © 2009-2016 Cisco Systems, Inc. All rights reserved.
1919 # See COPYING in top-level directory.
200200 "$(DESTDIR)$(man3_openfabricsdir)" \
201201 "$(DESTDIR)$(man3_setsourcedir)" "$(DESTDIR)$(man3_shmemdir)" \
202202 "$(DESTDIR)$(man3_syntheticexportdir)" \
203 "$(DESTDIR)$(man3_tinkerdir)" "$(DESTDIR)$(man3_xmlexportdir)" \
204 "$(DESTDIR)$(pdfdir)"
203 "$(DESTDIR)$(man3_tinkerdir)" "$(DESTDIR)$(man3_windowsdir)" \
204 "$(DESTDIR)$(man3_xmlexportdir)" "$(DESTDIR)$(pdfdir)"
205205 NROFF = nroff
206206 MANS = $(man3_MANS)
207207 DATA = $(man3_bitmap_DATA) $(man3_configuration_DATA) \
222222 $(man3_objects_DATA) $(man3_openfabrics_DATA) \
223223 $(man3_setsource_DATA) $(man3_shmem_DATA) \
224224 $(man3_syntheticexport_DATA) $(man3_tinker_DATA) \
225 $(man3_xmlexport_DATA) $(pdf_DATA)
225 $(man3_windows_DATA) $(man3_xmlexport_DATA) $(pdf_DATA)
226226 RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
227227 distclean-recursive maintainer-clean-recursive
228228 am__recursive_targets = \
297297 CONFIGURE_DEPENDENCIES = @CONFIGURE_DEPENDENCIES@
298298 CPP = @CPP@
299299 CPPFLAGS = @CPPFLAGS@
300 CUDA_VERSION = @CUDA_VERSION@
300301 CXX = @CXX@
301302 CXXCPP = @CXXCPP@
302303 CXXDEPMODE = @CXXDEPMODE@
323324 HWLOC_CAIRO_LIBS = @HWLOC_CAIRO_LIBS@
324325 HWLOC_CFLAGS = @HWLOC_CFLAGS@
325326 HWLOC_CPPFLAGS = @HWLOC_CPPFLAGS@
327 HWLOC_CUDART_CFLAGS = @HWLOC_CUDART_CFLAGS@
328 HWLOC_CUDART_CPPFLAGS = @HWLOC_CUDART_CPPFLAGS@
329 HWLOC_CUDART_LDFLAGS = @HWLOC_CUDART_LDFLAGS@
330 HWLOC_CUDART_LIBS = @HWLOC_CUDART_LIBS@
331 HWLOC_CUDA_CFLAGS = @HWLOC_CUDA_CFLAGS@
332 HWLOC_CUDA_CPPFLAGS = @HWLOC_CUDA_CPPFLAGS@
333 HWLOC_CUDA_LDFLAGS = @HWLOC_CUDA_LDFLAGS@
326334 HWLOC_CUDA_LIBS = @HWLOC_CUDA_LIBS@
327335 HWLOC_DIFF_U = @HWLOC_DIFF_U@
328336 HWLOC_DIFF_W = @HWLOC_DIFF_W@
333341 HWLOC_EMBEDDED_LDFLAGS = @HWLOC_EMBEDDED_LDFLAGS@
334342 HWLOC_EMBEDDED_LIBS = @HWLOC_EMBEDDED_LIBS@
335343 HWLOC_GL_LIBS = @HWLOC_GL_LIBS@
344 HWLOC_HAVE_LEVELZERO = @HWLOC_HAVE_LEVELZERO@
336345 HWLOC_HAVE_LIBXML2 = @HWLOC_HAVE_LIBXML2@
337346 HWLOC_HAVE_NVML = @HWLOC_HAVE_NVML@
338347 HWLOC_HAVE_OPENCL = @HWLOC_HAVE_OPENCL@
339348 HWLOC_HAVE_RSMI = @HWLOC_HAVE_RSMI@
349 HWLOC_IBVERBS_LIBS = @HWLOC_IBVERBS_LIBS@
340350 HWLOC_LDFLAGS = @HWLOC_LDFLAGS@
351 HWLOC_LEVELZERO_CFLAGS = @HWLOC_LEVELZERO_CFLAGS@
352 HWLOC_LEVELZERO_LIBS = @HWLOC_LEVELZERO_LIBS@
341353 HWLOC_LIBS = @HWLOC_LIBS@
342354 HWLOC_LIBS_PRIVATE = @HWLOC_LIBS_PRIVATE@
343355 HWLOC_LIBXML2_CFLAGS = @HWLOC_LIBXML2_CFLAGS@
347359 HWLOC_MS_LIB_ARCH = @HWLOC_MS_LIB_ARCH@
348360 HWLOC_NUMA_CFLAGS = @HWLOC_NUMA_CFLAGS@
349361 HWLOC_NUMA_LIBS = @HWLOC_NUMA_LIBS@
362 HWLOC_NVML_CPPFLAGS = @HWLOC_NVML_CPPFLAGS@
363 HWLOC_NVML_LDFLAGS = @HWLOC_NVML_LDFLAGS@
350364 HWLOC_NVML_LIBS = @HWLOC_NVML_LIBS@
351 HWLOC_OPENCL_CFLAGS = @HWLOC_OPENCL_CFLAGS@
365 HWLOC_OPENCL_CPPFLAGS = @HWLOC_OPENCL_CPPFLAGS@
352366 HWLOC_OPENCL_LDFLAGS = @HWLOC_OPENCL_LDFLAGS@
353367 HWLOC_OPENCL_LIBS = @HWLOC_OPENCL_LIBS@
354368 HWLOC_PCIACCESS_CFLAGS = @HWLOC_PCIACCESS_CFLAGS@
474488 prefix = @prefix@
475489 program_transform_name = @program_transform_name@
476490 psdir = @psdir@
491 runstatedir = @runstatedir@
477492 sbindir = @sbindir@
478493 sharedstatedir = @sharedstatedir@
479494 srcdir = @srcdir@
559574 @HWLOC_BUILD_DOXYGEN_TRUE@ $(hwloc_include_dir)/hwloc/cudart.h \
560575 @HWLOC_BUILD_DOXYGEN_TRUE@ $(hwloc_include_dir)/hwloc/nvml.h \
561576 @HWLOC_BUILD_DOXYGEN_TRUE@ $(hwloc_include_dir)/hwloc/rsmi.h \
577 @HWLOC_BUILD_DOXYGEN_TRUE@ $(hwloc_include_dir)/hwloc/levelzero.h \
562578 @HWLOC_BUILD_DOXYGEN_TRUE@ $(hwloc_include_dir)/hwloc/gl.h \
579 @HWLOC_BUILD_DOXYGEN_TRUE@ $(hwloc_include_dir)/hwloc/windows.h \
563580 @HWLOC_BUILD_DOXYGEN_TRUE@ $(hwloc_include_dir)/hwloc/openfabrics-verbs.h \
564581 @HWLOC_BUILD_DOXYGEN_TRUE@ $(srcdir)/netloc.doxy \
565582 @HWLOC_BUILD_DOXYGEN_TRUE@ $(hwloc_include_dir)/netloc.h
787804 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM.3 \
788805 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES.3 \
789806 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT.3 \
807 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING.3 \
808 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_MEMBINDING.3 \
809 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/HWLOC_TOPOLOGY_FLAG_DONT_CHANGE_BINDING.3 \
790810 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_topology_flags_e.3 \
791811 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_topology_get_flags.3 \
792812 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_topology_set_flags.3 \
10131033 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_distances_get_by_name.3 \
10141034 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_distances_get_name.3 \
10151035 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_distances_release.3 \
1036 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_distances_transform_e.3 \
1037 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/HWLOC_DISTANCES_TRANSFORM_REMOVE_NULL.3 \
1038 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/HWLOC_DISTANCES_TRANSFORM_LINKS.3 \
1039 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/HWLOC_DISTANCES_TRANSFORM_TRANSITIVE_CLOSURE.3 \
1040 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/HWLOC_DISTANCES_TRANSFORM_MERGE_SWITCH_PORTS.3 \
1041 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_distances_transform.3 \
10161042 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwlocality_distances_consult.3 \
10171043 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_distances_obj_index.3 \
10181044 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_distances_obj_pair_values.3 \
10191045 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwlocality_distances_add.3 \
1046 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_distances_add_handle_t.3 \
10201047 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_distances_add_flag_e.3 \
10211048 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/HWLOC_DISTANCES_ADD_FLAG_GROUP.3 \
10221049 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE.3 \
1023 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_distances_add.3 \
1050 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_distances_add_create.3 \
1051 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_distances_add_values.3 \
1052 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_distances_add_commit.3 \
1053 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwlocality_distances_remove.3 \
10241054 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_distances_remove.3 \
10251055 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_distances_remove_by_depth.3 \
10261056 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_distances_remove_by_type.3 \
11161146 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_rsmi_get_device_cpuset.3 \
11171147 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_rsmi_get_device_osdev.3 \
11181148 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_rsmi_get_device_osdev_by_index.3 \
1149 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwlocality_levelzero.3 \
1150 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_levelzero_get_device_cpuset.3 \
1151 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_levelzero_get_device_osdev.3 \
11191152 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwlocality_gl.3 \
11201153 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_gl_get_display_osdev_by_port_device.3 \
11211154 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_gl_get_display_osdev_by_name.3 \
11471180 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_nodeset_from_linux_libnuma_ulongs.3 \
11481181 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_cpuset_to_linux_libnuma_ulongs.3 \
11491182 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_nodeset_to_linux_libnuma_ulongs.3
1183
1184 @HWLOC_INSTALL_DOXYGEN_TRUE@man3_windowsdir = $(man3dir)
1185 @HWLOC_INSTALL_DOXYGEN_TRUE@man3_windows_DATA = \
1186 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwlocality_windows.3 \
1187 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_windows_get_nr_processor_groups.3 \
1188 @HWLOC_INSTALL_DOXYGEN_TRUE@ $(DOX_MAN_DIR)/man3/hwloc_windows_get_processor_group_cpuset.3
11501189
11511190 @HWLOC_INSTALL_DOXYGEN_TRUE@man3_openfabricsdir = $(man3dir)
11521191 @HWLOC_INSTALL_DOXYGEN_TRUE@man3_openfabrics_DATA = \
19652004 @list='$(man3_tinker_DATA)'; test -n "$(man3_tinkerdir)" || list=; \
19662005 files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
19672006 dir='$(DESTDIR)$(man3_tinkerdir)'; $(am__uninstall_files_from_dir)
2007 install-man3_windowsDATA: $(man3_windows_DATA)
2008 @$(NORMAL_INSTALL)
2009 @list='$(man3_windows_DATA)'; test -n "$(man3_windowsdir)" || list=; \
2010 if test -n "$$list"; then \
2011 echo " $(MKDIR_P) '$(DESTDIR)$(man3_windowsdir)'"; \
2012 $(MKDIR_P) "$(DESTDIR)$(man3_windowsdir)" || exit 1; \
2013 fi; \
2014 for p in $$list; do \
2015 if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
2016 echo "$$d$$p"; \
2017 done | $(am__base_list) | \
2018 while read files; do \
2019 echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man3_windowsdir)'"; \
2020 $(INSTALL_DATA) $$files "$(DESTDIR)$(man3_windowsdir)" || exit $$?; \
2021 done
2022
2023 uninstall-man3_windowsDATA:
2024 @$(NORMAL_UNINSTALL)
2025 @list='$(man3_windows_DATA)'; test -n "$(man3_windowsdir)" || list=; \
2026 files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
2027 dir='$(DESTDIR)$(man3_windowsdir)'; $(am__uninstall_files_from_dir)
19682028 install-man3_xmlexportDATA: $(man3_xmlexport_DATA)
19692029 @$(NORMAL_INSTALL)
19702030 @list='$(man3_xmlexport_DATA)'; test -n "$(man3_xmlexportdir)" || list=; \
21712231 all-am: Makefile $(MANS) $(DATA) all-local
21722232 installdirs: installdirs-recursive
21732233 installdirs-am:
2174 for dir in "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man3_bitmapdir)" "$(DESTDIR)$(man3_configurationdir)" "$(DESTDIR)$(man3_cpubindingdir)" "$(DESTDIR)$(man3_cpukindsdir)" "$(DESTDIR)$(man3_creationdir)" "$(DESTDIR)$(man3_diffdir)" "$(DESTDIR)$(man3_distancesdir)" "$(DESTDIR)$(man3_glibc_scheddir)" "$(DESTDIR)$(man3_gpudir)" "$(DESTDIR)$(man3_helper_advanced_iodir)" "$(DESTDIR)$(man3_helper_ancestorsdir)" "$(DESTDIR)$(man3_helper_distributedir)" "$(DESTDIR)$(man3_helper_find_cachedir)" "$(DESTDIR)$(man3_helper_find_coveringdir)" "$(DESTDIR)$(man3_helper_find_insidedir)" "$(DESTDIR)$(man3_helper_find_miscdir)" "$(DESTDIR)$(man3_helper_find_typesdir)" "$(DESTDIR)$(man3_helper_nodeset_convertdir)" "$(DESTDIR)$(man3_helper_topology_setsdir)" "$(DESTDIR)$(man3_levelsdir)" "$(DESTDIR)$(man3_linuxdir)" "$(DESTDIR)$(man3_linux_libnumadir)" "$(DESTDIR)$(man3_memattrsdir)" "$(DESTDIR)$(man3_membindingdir)" "$(DESTDIR)$(man3_object_info_attrsdir)" "$(DESTDIR)$(man3_object_setsdir)" "$(DESTDIR)$(man3_object_stringsdir)" "$(DESTDIR)$(man3_object_typesdir)" "$(DESTDIR)$(man3_objectsdir)" "$(DESTDIR)$(man3_openfabricsdir)" "$(DESTDIR)$(man3_setsourcedir)" "$(DESTDIR)$(man3_shmemdir)" "$(DESTDIR)$(man3_syntheticexportdir)" "$(DESTDIR)$(man3_tinkerdir)" "$(DESTDIR)$(man3_xmlexportdir)" "$(DESTDIR)$(pdfdir)"; do \
2234 for dir in "$(DESTDIR)$(man3dir)" "$(DESTDIR)$(man3_bitmapdir)" "$(DESTDIR)$(man3_configurationdir)" "$(DESTDIR)$(man3_cpubindingdir)" "$(DESTDIR)$(man3_cpukindsdir)" "$(DESTDIR)$(man3_creationdir)" "$(DESTDIR)$(man3_diffdir)" "$(DESTDIR)$(man3_distancesdir)" "$(DESTDIR)$(man3_glibc_scheddir)" "$(DESTDIR)$(man3_gpudir)" "$(DESTDIR)$(man3_helper_advanced_iodir)" "$(DESTDIR)$(man3_helper_ancestorsdir)" "$(DESTDIR)$(man3_helper_distributedir)" "$(DESTDIR)$(man3_helper_find_cachedir)" "$(DESTDIR)$(man3_helper_find_coveringdir)" "$(DESTDIR)$(man3_helper_find_insidedir)" "$(DESTDIR)$(man3_helper_find_miscdir)" "$(DESTDIR)$(man3_helper_find_typesdir)" "$(DESTDIR)$(man3_helper_nodeset_convertdir)" "$(DESTDIR)$(man3_helper_topology_setsdir)" "$(DESTDIR)$(man3_levelsdir)" "$(DESTDIR)$(man3_linuxdir)" "$(DESTDIR)$(man3_linux_libnumadir)" "$(DESTDIR)$(man3_memattrsdir)" "$(DESTDIR)$(man3_membindingdir)" "$(DESTDIR)$(man3_object_info_attrsdir)" "$(DESTDIR)$(man3_object_setsdir)" "$(DESTDIR)$(man3_object_stringsdir)" "$(DESTDIR)$(man3_object_typesdir)" "$(DESTDIR)$(man3_objectsdir)" "$(DESTDIR)$(man3_openfabricsdir)" "$(DESTDIR)$(man3_setsourcedir)" "$(DESTDIR)$(man3_shmemdir)" "$(DESTDIR)$(man3_syntheticexportdir)" "$(DESTDIR)$(man3_tinkerdir)" "$(DESTDIR)$(man3_windowsdir)" "$(DESTDIR)$(man3_xmlexportdir)" "$(DESTDIR)$(pdfdir)"; do \
21752235 test -z "$$dir" || $(MKDIR_P) "$$dir"; \
21762236 done
21772237 install: $(BUILT_SOURCES)
22502310 install-man3_object_typesDATA install-man3_objectsDATA \
22512311 install-man3_openfabricsDATA install-man3_setsourceDATA \
22522312 install-man3_shmemDATA install-man3_syntheticexportDATA \
2253 install-man3_tinkerDATA install-man3_xmlexportDATA \
2254 install-pdfDATA
2313 install-man3_tinkerDATA install-man3_windowsDATA \
2314 install-man3_xmlexportDATA install-pdfDATA
22552315
22562316 install-dvi: install-dvi-recursive
22572317
23192379 uninstall-man3_object_typesDATA uninstall-man3_objectsDATA \
23202380 uninstall-man3_openfabricsDATA uninstall-man3_setsourceDATA \
23212381 uninstall-man3_shmemDATA uninstall-man3_syntheticexportDATA \
2322 uninstall-man3_tinkerDATA uninstall-man3_xmlexportDATA \
2323 uninstall-pdfDATA
2382 uninstall-man3_tinkerDATA uninstall-man3_windowsDATA \
2383 uninstall-man3_xmlexportDATA uninstall-pdfDATA
23242384
23252385 uninstall-man: uninstall-man3
23262386
23562416 install-man3_object_typesDATA install-man3_objectsDATA \
23572417 install-man3_openfabricsDATA install-man3_setsourceDATA \
23582418 install-man3_shmemDATA install-man3_syntheticexportDATA \
2359 install-man3_tinkerDATA install-man3_xmlexportDATA install-pdf \
2360 install-pdf-am install-pdfDATA install-ps install-ps-am \
2361 install-strip installcheck installcheck-am installdirs \
2362 installdirs-am maintainer-clean maintainer-clean-generic \
2363 mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
2364 ps ps-am tags tags-am uninstall uninstall-am uninstall-man \
2419 install-man3_tinkerDATA install-man3_windowsDATA \
2420 install-man3_xmlexportDATA install-pdf install-pdf-am \
2421 install-pdfDATA install-ps install-ps-am install-strip \
2422 installcheck installcheck-am installdirs installdirs-am \
2423 maintainer-clean maintainer-clean-generic mostlyclean \
2424 mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
2425 tags tags-am uninstall uninstall-am uninstall-man \
23652426 uninstall-man3 uninstall-man3_bitmapDATA \
23662427 uninstall-man3_configurationDATA uninstall-man3_cpubindingDATA \
23672428 uninstall-man3_cpukindsDATA uninstall-man3_creationDATA \
23862447 uninstall-man3_object_typesDATA uninstall-man3_objectsDATA \
23872448 uninstall-man3_openfabricsDATA uninstall-man3_setsourceDATA \
23882449 uninstall-man3_shmemDATA uninstall-man3_syntheticexportDATA \
2389 uninstall-man3_tinkerDATA uninstall-man3_xmlexportDATA \
2390 uninstall-pdfDATA
2450 uninstall-man3_tinkerDATA uninstall-man3_windowsDATA \
2451 uninstall-man3_xmlexportDATA uninstall-pdfDATA
23912452
23922453 .PRECIOUS: Makefile
23932454
25542615 @HWLOC_BUILD_DOXYGEN_TRUE@$(man3_glibc_sched_DATA): $(DOX_TAG)
25552616 @HWLOC_BUILD_DOXYGEN_TRUE@$(man3_linux_DATA): $(DOX_TAG)
25562617 @HWLOC_BUILD_DOXYGEN_TRUE@$(man3_linux_libnuma_DATA): $(DOX_TAG)
2618 @HWLOC_BUILD_DOXYGEN_TRUE@$(man3_windows_DATA): $(DOX_TAG)
25572619 @HWLOC_BUILD_DOXYGEN_TRUE@$(man3_openfabrics_DATA): $(DOX_TAG)
25582620
25592621 @HWLOC_BUILD_DOXYGEN_TRUE@$(DOX_LETTERPDF): $(DOX_TAG)
0 # Copyright © 2010-2020 Inria. All rights reserved.
0 # Copyright © 2010-2021 Inria. All rights reserved.
11 # Copyright © 2009 Cisco Systems, Inc. All rights reserved.
22 # See COPYING in top-level directory.
33
1818 @top_srcdir@/include/hwloc/cpukinds.h \
1919 @top_srcdir@/include/hwloc/linux.h \
2020 @top_srcdir@/include/hwloc/linux-libnuma.h \
21 @top_srcdir@/include/hwloc/windows.h \
2122 @top_srcdir@/include/hwloc/glibc-sched.h \
2223 @top_srcdir@/include/hwloc/opencl.h \
2324 @top_srcdir@/include/hwloc/cuda.h \
2425 @top_srcdir@/include/hwloc/cudart.h \
2526 @top_srcdir@/include/hwloc/nvml.h \
2627 @top_srcdir@/include/hwloc/rsmi.h \
28 @top_srcdir@/include/hwloc/levelzero.h \
2729 @top_srcdir@/include/hwloc/gl.h \
2830 @top_srcdir@/include/hwloc/openfabrics-verbs.h \
2931 @top_srcdir@/include/hwloc/diff.h \
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc.h Source File</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 <div id="nav-path" class="navpath">
40 <ul>
41 <li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li> </ul>
42 </div>
43 </div><!-- top -->
44 <div class="header">
45 <div class="headertitle">
46 <div class="title">hwloc.h</div> </div>
47 </div><!--header-->
48 <div class="contents">
49 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
50 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2009 CNRS</span></div>
51 <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * Copyright © 2009-2021 Inria. All rights reserved.</span></div>
52 <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Copyright © 2009-2012 Université Bordeaux</span></div>
53 <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * Copyright © 2009-2020 Cisco Systems, Inc. All rights reserved.</span></div>
54 <div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
55 <div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> */</span></div>
56 <div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
57 <div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">/*=====================================================================</span></div>
58 <div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * PLEASE GO READ THE DOCUMENTATION!</span></div>
59 <div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * ------------------------------------------------</span></div>
60 <div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * $tarball_directory/doc/doxygen-doc/</span></div>
61 <div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * or</span></div>
62 <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * https://www.open-mpi.org/projects/hwloc/doc/</span></div>
63 <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> *=====================================================================</span></div>
64 <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> *</span></div>
65 <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * FAIR WARNING: Do NOT expect to be able to figure out all the</span></div>
66 <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * subtleties of hwloc by simply reading function prototypes and</span></div>
67 <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * constant descrptions here in this file.</span></div>
68 <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> *</span></div>
69 <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> * Hwloc has wonderful documentation in both PDF and HTML formats for</span></div>
70 <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment"> * your reading pleasure. The formal documentation explains a LOT of</span></div>
71 <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment"> * hwloc-specific concepts, provides definitions, and discusses the</span></div>
72 <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * &quot;big picture&quot; for many of the things that you&#39;ll find here in this</span></div>
73 <div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> * header file.</span></div>
74 <div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> *</span></div>
75 <div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * The PDF/HTML documentation was generated via Doxygen; much of what</span></div>
76 <div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> * you&#39;ll see in there is also here in this file. BUT THERE IS A LOT</span></div>
77 <div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment"> * THAT IS IN THE PDF/HTML THAT IS ***NOT*** IN hwloc.h!</span></div>
78 <div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="comment"> *</span></div>
79 <div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="comment"> * There are entire paragraph-length descriptions, discussions, and</span></div>
80 <div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="comment"> * pretty prictures to explain subtle corner cases, provide concrete</span></div>
81 <div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="comment"> * examples, etc.</span></div>
82 <div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="comment"> *</span></div>
83 <div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="comment"> * Please, go read the documentation. :-)</span></div>
84 <div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="comment"> *</span></div>
85 <div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="comment"> * Moreover there are several examples of hwloc use under doc/examples</span></div>
86 <div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="comment"> * in the source tree.</span></div>
87 <div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="comment"> *</span></div>
88 <div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="comment"> *=====================================================================*/</span></div>
89 <div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; </div>
90 <div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="preprocessor">#ifndef HWLOC_H</span></div>
91 <div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="preprocessor">#define HWLOC_H</span></div>
92 <div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; </div>
93 <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="preprocessor">#include &quot;hwloc/autogen/config.h&quot;</span></div>
94 <div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; </div>
95 <div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="preprocessor">#include &lt;sys/types.h&gt;</span></div>
96 <div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="preprocessor">#include &lt;stdio.h&gt;</span></div>
97 <div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div>
98 <div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="preprocessor">#include &lt;limits.h&gt;</span></div>
99 <div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; </div>
100 <div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="comment">/*</span></div>
101 <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="comment"> * Symbol transforms</span></div>
102 <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="comment"> */</span></div>
103 <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="preprocessor">#include &quot;hwloc/rename.h&quot;</span></div>
104 <div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; </div>
105 <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="comment">/*</span></div>
106 <div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="comment"> * Bitmap definitions</span></div>
107 <div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="comment"> */</span></div>
108 <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; </div>
109 <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="preprocessor">#include &quot;hwloc/bitmap.h&quot;</span></div>
110 <div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; </div>
111 <div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; </div>
112 <div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
113 <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
114 <div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="preprocessor">#endif</span></div>
115 <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; </div>
116 <div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; </div>
117 <div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="a00191.html#ga8f4dfb8eef138af55dd1a0fa802e5476"> 96</a></span>&#160;<span class="preprocessor">#define HWLOC_API_VERSION 0x00020500</span></div>
118 <div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; </div>
119 <div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="a00191.html#ga9c0b50c98add1adf57ed1ce85bb5190d"> 102</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">unsigned</span> <a class="code" href="a00191.html#ga9c0b50c98add1adf57ed1ce85bb5190d">hwloc_get_api_version</a>(<span class="keywordtype">void</span>);</div>
120 <div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; </div>
121 <div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="a00191.html#gaac5bc1f46f55e10ef0141a68ce70e21f"> 105</a></span>&#160;<span class="preprocessor">#define HWLOC_COMPONENT_ABI 7</span></div>
122 <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; </div>
123 <div class="line"><a name="l00140"></a><span class="lineno"><a class="line" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801"> 140</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> <a class="code" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>;</div>
124 <div class="line"><a name="l00142"></a><span class="lineno"><a class="line" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25"> 142</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>;</div>
125 <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; </div>
126 <div class="line"><a name="l00157"></a><span class="lineno"><a class="line" href="a00192.html#ga37e35730fa7e775b5bb0afe893d6d508"> 157</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> <a class="code" href="a00192.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a>;</div>
127 <div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="a00192.html#ga2f5276235841ad66a79bedad16a5a10c"> 160</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> <a class="code" href="a00192.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a>;</div>
128 <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; </div>
129 <div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55"> 176</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
130 <div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; </div>
131 <div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;<span class="preprocessor">#define HWLOC_OBJ_TYPE_MIN HWLOC_OBJ_MACHINE </span><span class="comment">/* Sentinel value */</span><span class="preprocessor"></span></div>
132 <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a3f4e83ffc4a259354959ae8a9eaa2a80">HWLOC_OBJ_MACHINE</a>, </div>
133 <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55ab16ab8c0dbffc234921d86f3dfb63129">HWLOC_OBJ_PACKAGE</a>, </div>
134 <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55ac793958f330bca371aa1535de8aff45f">HWLOC_OBJ_CORE</a>, </div>
135 <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661">HWLOC_OBJ_PU</a>, </div>
136 <div class="line"><a name="l00213"></a><span class="lineno"><a class="line" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a56389b8eb2e2f74f288bb657c4e72140"> 213</a></span>&#160; <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a56389b8eb2e2f74f288bb657c4e72140">HWLOC_OBJ_L1CACHE</a>, </div>
137 <div class="line"><a name="l00214"></a><span class="lineno"><a class="line" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a18f61d19fe9f4bcea978fcc68bc078fb"> 214</a></span>&#160; <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a18f61d19fe9f4bcea978fcc68bc078fb">HWLOC_OBJ_L2CACHE</a>, </div>
138 <div class="line"><a name="l00215"></a><span class="lineno"><a class="line" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a25fae0e0514c90e3973a29866a5a837d"> 215</a></span>&#160; <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a25fae0e0514c90e3973a29866a5a837d">HWLOC_OBJ_L3CACHE</a>, </div>
139 <div class="line"><a name="l00216"></a><span class="lineno"><a class="line" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a54923bfa13df9d7e6d6dd0d5baff5f72"> 216</a></span>&#160; <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a54923bfa13df9d7e6d6dd0d5baff5f72">HWLOC_OBJ_L4CACHE</a>, </div>
140 <div class="line"><a name="l00217"></a><span class="lineno"><a class="line" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a67194c9de5e3e581c64c11d2eb1c109d"> 217</a></span>&#160; <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a67194c9de5e3e581c64c11d2eb1c109d">HWLOC_OBJ_L5CACHE</a>, </div>
141 <div class="line"><a name="l00219"></a><span class="lineno"><a class="line" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55afa834a85d9e53836cf0db6d0bd8329b4"> 219</a></span>&#160; <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55afa834a85d9e53836cf0db6d0bd8329b4">HWLOC_OBJ_L1ICACHE</a>, </div>
142 <div class="line"><a name="l00220"></a><span class="lineno"><a class="line" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a10713b7e561b8cc32544cd31b1c17f8d"> 220</a></span>&#160; <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a10713b7e561b8cc32544cd31b1c17f8d">HWLOC_OBJ_L2ICACHE</a>, </div>
143 <div class="line"><a name="l00221"></a><span class="lineno"><a class="line" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55ac22850c717f07bf7ffb316fadd08d218"> 221</a></span>&#160; <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55ac22850c717f07bf7ffb316fadd08d218">HWLOC_OBJ_L3ICACHE</a>, </div>
144 <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a5269ef95be72f88465559d35c9b7ad56">HWLOC_OBJ_GROUP</a>, </div>
145 <div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>, </div>
146 <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0">HWLOC_OBJ_BRIDGE</a>, </div>
147 <div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a>, </div>
148 <div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075">HWLOC_OBJ_OS_DEVICE</a>, </div>
149 <div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a19f8a6953fa91efc76bcbcdf2d22de4d">HWLOC_OBJ_MISC</a>, </div>
150 <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a0ed5bd98974729a0c476c39e917dabd6">HWLOC_OBJ_MEMCACHE</a>, </div>
151 <div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55af78bb6cde53aaaaa162a7dc420c409da">HWLOC_OBJ_DIE</a>, </div>
152 <div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; HWLOC_OBJ_TYPE_MAX </div>
153 <div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;} <a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>;</div>
154 <div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; </div>
155 <div class="line"><a name="l00326"></a><span class="lineno"><a class="line" href="a00193.html#ga791c9875c8fe20f3e1e5871e0657e59b"> 326</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="a00193.html#ga791c9875c8fe20f3e1e5871e0657e59b">hwloc_obj_cache_type_e</a> {</div>
156 <div class="line"><a name="l00327"></a><span class="lineno"><a class="line" href="a00193.html#gga791c9875c8fe20f3e1e5871e0657e59ba3900b3b2db54941aac249e5a638a2d7a"> 327</a></span>&#160; <a class="code" href="a00193.html#gga791c9875c8fe20f3e1e5871e0657e59ba3900b3b2db54941aac249e5a638a2d7a">HWLOC_OBJ_CACHE_UNIFIED</a>, </div>
157 <div class="line"><a name="l00328"></a><span class="lineno"><a class="line" href="a00193.html#gga791c9875c8fe20f3e1e5871e0657e59bacac60ecad4206f85aeb79bef1604b488"> 328</a></span>&#160; <a class="code" href="a00193.html#gga791c9875c8fe20f3e1e5871e0657e59bacac60ecad4206f85aeb79bef1604b488">HWLOC_OBJ_CACHE_DATA</a>, </div>
158 <div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <a class="code" href="a00193.html#gga791c9875c8fe20f3e1e5871e0657e59ba6f98b0d422b38ba90c5f5c79a11b0658">HWLOC_OBJ_CACHE_INSTRUCTION</a> </div>
159 <div class="line"><a name="l00330"></a><span class="lineno"><a class="line" href="a00193.html#gga791c9875c8fe20f3e1e5871e0657e59ba6f98b0d422b38ba90c5f5c79a11b0658"> 330</a></span>&#160;} <a class="code" href="a00193.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a>;</div>
160 <div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; </div>
161 <div class="line"><a name="l00333"></a><span class="lineno"><a class="line" href="a00193.html#ga48a4803c72574191d7ead1c62aaf9860"> 333</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="a00193.html#ga48a4803c72574191d7ead1c62aaf9860">hwloc_obj_bridge_type_e</a> {</div>
162 <div class="line"><a name="l00334"></a><span class="lineno"><a class="line" href="a00193.html#gga48a4803c72574191d7ead1c62aaf9860a2c7660f3864ad2810c1e72aad285e574"> 334</a></span>&#160; <a class="code" href="a00193.html#gga48a4803c72574191d7ead1c62aaf9860a2c7660f3864ad2810c1e72aad285e574">HWLOC_OBJ_BRIDGE_HOST</a>, </div>
163 <div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <a class="code" href="a00193.html#gga48a4803c72574191d7ead1c62aaf9860a8f3b4cecf3dab6073d74696d10863c60">HWLOC_OBJ_BRIDGE_PCI</a> </div>
164 <div class="line"><a name="l00336"></a><span class="lineno"><a class="line" href="a00193.html#gga48a4803c72574191d7ead1c62aaf9860a8f3b4cecf3dab6073d74696d10863c60"> 336</a></span>&#160;} <a class="code" href="a00193.html#gab34362c7a23296c3f12c5756747abda3">hwloc_obj_bridge_type_t</a>;</div>
165 <div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; </div>
166 <div class="line"><a name="l00339"></a><span class="lineno"><a class="line" href="a00193.html#ga64f5d539df299c97ae80ce53fc4b56c0"> 339</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="a00193.html#ga64f5d539df299c97ae80ce53fc4b56c0">hwloc_obj_osdev_type_e</a> {</div>
167 <div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <a class="code" href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0a689b0488c3c0d08d116751c6b9cb8871">HWLOC_OBJ_OSDEV_BLOCK</a>, </div>
168 <div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <a class="code" href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90">HWLOC_OBJ_OSDEV_GPU</a>, </div>
169 <div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <a class="code" href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0ab715d81155f771573c8682dffc65021b">HWLOC_OBJ_OSDEV_NETWORK</a>, </div>
170 <div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <a class="code" href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0a52157d03694fdae82dddd57ca8c973b6">HWLOC_OBJ_OSDEV_OPENFABRICS</a>, </div>
171 <div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <a class="code" href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0a827ad1643360711a8b6c6af671366791">HWLOC_OBJ_OSDEV_DMA</a>, </div>
172 <div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <a class="code" href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83">HWLOC_OBJ_OSDEV_COPROC</a> </div>
173 <div class="line"><a name="l00355"></a><span class="lineno"><a class="line" href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83"> 355</a></span>&#160;} <a class="code" href="a00193.html#gaa9a6941ef7b1c169412518d7ef71b3d2">hwloc_obj_osdev_type_t</a>;</div>
174 <div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; </div>
175 <div class="line"><a name="l00376"></a><span class="lineno"><a class="line" href="a00193.html#ga1820ea0dfd8e9dca28f9ea7624df5ae2"> 376</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00193.html#ga1820ea0dfd8e9dca28f9ea7624df5ae2">hwloc_compare_types</a> (<a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type1, <a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type2) __hwloc_attribute_const;</div>
176 <div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; </div>
177 <div class="line"><a name="l00379"></a><span class="lineno"><a class="line" href="a00193.html#ga3b6e4128e9fe773863b123fa6e4a080b"> 379</a></span>&#160;<span class="preprocessor">#define HWLOC_TYPE_UNORDERED INT_MAX</span></div>
178 <div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; </div>
179 <div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;<span class="keyword">union </span><a class="code" href="a00254.html">hwloc_obj_attr_u</a>;</div>
180 <div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; </div>
181 <div class="line"><a name="l00395"></a><span class="lineno"><a class="line" href="a00250.html"> 395</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00250.html">hwloc_obj</a> {</div>
182 <div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="comment">/* physical information */</span></div>
183 <div class="line"><a name="l00397"></a><span class="lineno"><a class="line" href="a00250.html#acc4f0803f244867e68fe0036800be5de"> 397</a></span>&#160; <a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00250.html#acc4f0803f244867e68fe0036800be5de">type</a>; </div>
184 <div class="line"><a name="l00398"></a><span class="lineno"><a class="line" href="a00250.html#a5d4f97e76723a9ec8d38046f19e00d33"> 398</a></span>&#160; <span class="keywordtype">char</span> *<a class="code" href="a00250.html#a5d4f97e76723a9ec8d38046f19e00d33">subtype</a>; </div>
185 <div class="line"><a name="l00400"></a><span class="lineno"><a class="line" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9"> 400</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>; </div>
186 <div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160;<span class="preprocessor">#define HWLOC_UNKNOWN_INDEX (unsigned)-1</span></div>
187 <div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; </div>
188 <div class="line"><a name="l00407"></a><span class="lineno"><a class="line" href="a00250.html#abb709ec38f2970677e4e57d1d30be96d"> 407</a></span>&#160; <span class="keywordtype">char</span> *<a class="code" href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">name</a>; </div>
189 <div class="line"><a name="l00412"></a><span class="lineno"><a class="line" href="a00250.html#a75603fc36c9284ba48ce814b772a58b6"> 412</a></span>&#160; hwloc_uint64_t <a class="code" href="a00250.html#a75603fc36c9284ba48ce814b772a58b6">total_memory</a>; </div>
190 <div class="line"><a name="l00414"></a><span class="lineno"><a class="line" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8"> 414</a></span>&#160; <span class="keyword">union </span><a class="code" href="a00254.html">hwloc_obj_attr_u</a> *<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>; </div>
191 <div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="comment">/* global position */</span></div>
192 <div class="line"><a name="l00418"></a><span class="lineno"><a class="line" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed"> 418</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>; </div>
193 <div class="line"><a name="l00433"></a><span class="lineno"><a class="line" href="a00250.html#a0d07fb7b8935e137c94d75a3eb492ae9"> 433</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00250.html#a0d07fb7b8935e137c94d75a3eb492ae9">logical_index</a>; </div>
194 <div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="comment">/* cousins are all objects of the same type (and depth) across the entire topology */</span></div>
195 <div class="line"><a name="l00441"></a><span class="lineno"><a class="line" href="a00250.html#a85a788017457129589318b6c39451acf"> 441</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00250.html">hwloc_obj</a> *<a class="code" href="a00250.html#a85a788017457129589318b6c39451acf">next_cousin</a>; </div>
196 <div class="line"><a name="l00442"></a><span class="lineno"><a class="line" href="a00250.html#ac715989f55ff5a0eb6be2969ee477ec0"> 442</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00250.html">hwloc_obj</a> *<a class="code" href="a00250.html#ac715989f55ff5a0eb6be2969ee477ec0">prev_cousin</a>; </div>
197 <div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="comment">/* children of the same parent are siblings, even if they may have different type and depth */</span></div>
198 <div class="line"><a name="l00445"></a><span class="lineno"><a class="line" href="a00250.html#adc494f6aed939992be1c55cca5822900"> 445</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00250.html">hwloc_obj</a> *<a class="code" href="a00250.html#adc494f6aed939992be1c55cca5822900">parent</a>; </div>
199 <div class="line"><a name="l00446"></a><span class="lineno"><a class="line" href="a00250.html#aaa6043eee6f55869933c1d974efd9acd"> 446</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00250.html#aaa6043eee6f55869933c1d974efd9acd">sibling_rank</a>; </div>
200 <div class="line"><a name="l00447"></a><span class="lineno"><a class="line" href="a00250.html#a7f2343ed476fe4942e6fffd4cade1b40"> 447</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00250.html">hwloc_obj</a> *<a class="code" href="a00250.html#a7f2343ed476fe4942e6fffd4cade1b40">next_sibling</a>; </div>
201 <div class="line"><a name="l00448"></a><span class="lineno"><a class="line" href="a00250.html#a7b89e8c189876c0158a9282aaaf17f50"> 448</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00250.html">hwloc_obj</a> *<a class="code" href="a00250.html#a7b89e8c189876c0158a9282aaaf17f50">prev_sibling</a>; </div>
202 <div class="line"><a name="l00451"></a><span class="lineno"><a class="line" href="a00250.html#aac3f6da35c9b57599909a44ce2b716c1"> 451</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00250.html#aac3f6da35c9b57599909a44ce2b716c1">arity</a>; </div>
203 <div class="line"><a name="l00455"></a><span class="lineno"><a class="line" href="a00250.html#a04d05403da37bfe17cd63b7c7dd07b1f"> 455</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00250.html">hwloc_obj</a> **<a class="code" href="a00250.html#a04d05403da37bfe17cd63b7c7dd07b1f">children</a>; </div>
204 <div class="line"><a name="l00456"></a><span class="lineno"><a class="line" href="a00250.html#af51d08a0a79dba517c06c5afedc8d2dc"> 456</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00250.html">hwloc_obj</a> *<a class="code" href="a00250.html#af51d08a0a79dba517c06c5afedc8d2dc">first_child</a>; </div>
205 <div class="line"><a name="l00457"></a><span class="lineno"><a class="line" href="a00250.html#a84bd65634dbc55f4158b74443a9bd04f"> 457</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00250.html">hwloc_obj</a> *<a class="code" href="a00250.html#a84bd65634dbc55f4158b74443a9bd04f">last_child</a>; </div>
206 <div class="line"><a name="l00460"></a><span class="lineno"><a class="line" href="a00250.html#a0f41a1d67dc6b661906f2217563637f3"> 460</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="a00250.html#a0f41a1d67dc6b661906f2217563637f3">symmetric_subtree</a>; </div>
207 <div class="line"><a name="l00471"></a><span class="lineno"><a class="line" href="a00250.html#a6f834ea4dd26553cdea601d2fae6d3b7"> 471</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00250.html#a6f834ea4dd26553cdea601d2fae6d3b7">memory_arity</a>; </div>
208 <div class="line"><a name="l00474"></a><span class="lineno"><a class="line" href="a00250.html#ac0e8200dba25b90d5954bd4ec61f97d3"> 474</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00250.html">hwloc_obj</a> *<a class="code" href="a00250.html#ac0e8200dba25b90d5954bd4ec61f97d3">memory_first_child</a>; </div>
209 <div class="line"><a name="l00489"></a><span class="lineno"><a class="line" href="a00250.html#a7b3b29f0be377c7d2d52262019fc7d11"> 489</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00250.html#a7b3b29f0be377c7d2d52262019fc7d11">io_arity</a>; </div>
210 <div class="line"><a name="l00492"></a><span class="lineno"><a class="line" href="a00250.html#a8d14c88e1ebc4ae67cc69f9e928558b3"> 492</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00250.html">hwloc_obj</a> *<a class="code" href="a00250.html#a8d14c88e1ebc4ae67cc69f9e928558b3">io_first_child</a>; </div>
211 <div class="line"><a name="l00501"></a><span class="lineno"><a class="line" href="a00250.html#a2bb7862ce722d7ceda23cfa153da165a"> 501</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00250.html#a2bb7862ce722d7ceda23cfa153da165a">misc_arity</a>; </div>
212 <div class="line"><a name="l00504"></a><span class="lineno"><a class="line" href="a00250.html#a57812a313fe9b1a9500489f47c3011cc"> 504</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00250.html">hwloc_obj</a> *<a class="code" href="a00250.html#a57812a313fe9b1a9500489f47c3011cc">misc_first_child</a>; </div>
213 <div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="comment">/* cpusets and nodesets */</span></div>
214 <div class="line"><a name="l00511"></a><span class="lineno"><a class="line" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f"> 511</a></span>&#160; <a class="code" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> <a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>; </div>
215 <div class="line"><a name="l00526"></a><span class="lineno"><a class="line" href="a00250.html#a91788a9da687beb7224cc1fd7b75208c"> 526</a></span>&#160; <a class="code" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> <a class="code" href="a00250.html#a91788a9da687beb7224cc1fd7b75208c">complete_cpuset</a>; </div>
216 <div class="line"><a name="l00539"></a><span class="lineno"><a class="line" href="a00250.html#a08f0d0e16c619a6e653526cbee4ffea3"> 539</a></span>&#160; <a class="code" href="a00192.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a> <a class="code" href="a00250.html#a08f0d0e16c619a6e653526cbee4ffea3">nodeset</a>; </div>
217 <div class="line"><a name="l00561"></a><span class="lineno"><a class="line" href="a00250.html#ac38c4012127525ef74c5615c526f4c2e"> 561</a></span>&#160; <a class="code" href="a00192.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a> <a class="code" href="a00250.html#ac38c4012127525ef74c5615c526f4c2e">complete_nodeset</a>; </div>
218 <div class="line"><a name="l00577"></a><span class="lineno"><a class="line" href="a00250.html#a8604654c38b7a720efae5025d3a96ee6"> 577</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00298.html">hwloc_info_s</a> *<a class="code" href="a00250.html#a8604654c38b7a720efae5025d3a96ee6">infos</a>; </div>
219 <div class="line"><a name="l00578"></a><span class="lineno"><a class="line" href="a00250.html#a9843acc28cfbba903b63ea14b137ff70"> 578</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00250.html#a9843acc28cfbba903b63ea14b137ff70">infos_count</a>; </div>
220 <div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <span class="comment">/* misc */</span></div>
221 <div class="line"><a name="l00581"></a><span class="lineno"><a class="line" href="a00250.html#a76fd3ac94401cf32dfccc3a3a8de68a5"> 581</a></span>&#160; <span class="keywordtype">void</span> *<a class="code" href="a00250.html#a76fd3ac94401cf32dfccc3a3a8de68a5">userdata</a>; </div>
222 <div class="line"><a name="l00586"></a><span class="lineno"><a class="line" href="a00250.html#a957984a355fa61c85f46605c336e7551"> 586</a></span>&#160; hwloc_uint64_t <a class="code" href="a00250.html#a957984a355fa61c85f46605c336e7551">gp_index</a>; </div>
223 <div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160;};</div>
224 <div class="line"><a name="l00595"></a><span class="lineno"><a class="line" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d"> 595</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="a00250.html">hwloc_obj</a> * <a class="code" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>;</div>
225 <div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; </div>
226 <div class="line"><a name="l00598"></a><span class="lineno"><a class="line" href="a00254.html"> 598</a></span>&#160;<span class="keyword">union </span><a class="code" href="a00254.html">hwloc_obj_attr_u</a> {</div>
227 <div class="line"><a name="l00600"></a><span class="lineno"><a class="line" href="a00258.html"> 600</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00258.html">hwloc_numanode_attr_s</a> {</div>
228 <div class="line"><a name="l00601"></a><span class="lineno"><a class="line" href="a00258.html#a6703cbf2afbf63c9d60c5ff4dc0c73aa"> 601</a></span>&#160; hwloc_uint64_t <a class="code" href="a00258.html#a6703cbf2afbf63c9d60c5ff4dc0c73aa">local_memory</a>; </div>
229 <div class="line"><a name="l00602"></a><span class="lineno"><a class="line" href="a00258.html#a513078122d403904e16723d30f583cb2"> 602</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00258.html#a513078122d403904e16723d30f583cb2">page_types_len</a>; </div>
230 <div class="line"><a name="l00608"></a><span class="lineno"><a class="line" href="a00262.html"> 608</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00262.html">hwloc_memory_page_type_s</a> {</div>
231 <div class="line"><a name="l00609"></a><span class="lineno"><a class="line" href="a00262.html#a8ea7ebe9d91c7378bba03da57efc25cb"> 609</a></span>&#160; hwloc_uint64_t <a class="code" href="a00262.html#a8ea7ebe9d91c7378bba03da57efc25cb">size</a>; </div>
232 <div class="line"><a name="l00610"></a><span class="lineno"><a class="line" href="a00262.html#a98514e37d57a325b78e21ffd8d7419e0"> 610</a></span>&#160; hwloc_uint64_t <a class="code" href="a00262.html#a98514e37d57a325b78e21ffd8d7419e0">count</a>; </div>
233 <div class="line"><a name="l00611"></a><span class="lineno"><a class="line" href="a00258.html#a7e53c5024da2d7741a5cc1e7016bb8d2"> 611</a></span>&#160; } * <a class="code" href="a00258.html#a7e53c5024da2d7741a5cc1e7016bb8d2">page_types</a>;</div>
234 <div class="line"><a name="l00612"></a><span class="lineno"><a class="line" href="a00254.html#ad066b9612802ffa01e132dc3a8e6cc86"> 612</a></span>&#160; } <a class="code" href="a00254.html#ad066b9612802ffa01e132dc3a8e6cc86">numanode</a>;</div>
235 <div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; </div>
236 <div class="line"><a name="l00615"></a><span class="lineno"><a class="line" href="a00266.html"> 615</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00266.html">hwloc_cache_attr_s</a> {</div>
237 <div class="line"><a name="l00616"></a><span class="lineno"><a class="line" href="a00266.html#abe5e788943ed04302976740c829674c0"> 616</a></span>&#160; hwloc_uint64_t <a class="code" href="a00266.html#abe5e788943ed04302976740c829674c0">size</a>; </div>
238 <div class="line"><a name="l00617"></a><span class="lineno"><a class="line" href="a00266.html#a5c8f7f39193736c2187ed626940835d5"> 617</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00266.html#a5c8f7f39193736c2187ed626940835d5">depth</a>; </div>
239 <div class="line"><a name="l00618"></a><span class="lineno"><a class="line" href="a00266.html#a801e8a668e28caf06c8b88e9ae5c10db"> 618</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00266.html#a801e8a668e28caf06c8b88e9ae5c10db">linesize</a>; </div>
240 <div class="line"><a name="l00619"></a><span class="lineno"><a class="line" href="a00266.html#ad06525e474d1e2d1423ed71bb998592d"> 619</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="a00266.html#ad06525e474d1e2d1423ed71bb998592d">associativity</a>; </div>
241 <div class="line"><a name="l00621"></a><span class="lineno"><a class="line" href="a00266.html#ad8edc8ded2b7a70d6abbc874801930f4"> 621</a></span>&#160; <a class="code" href="a00193.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a> <a class="code" href="a00266.html#ad8edc8ded2b7a70d6abbc874801930f4">type</a>; </div>
242 <div class="line"><a name="l00622"></a><span class="lineno"><a class="line" href="a00254.html#a23f553f3252c9d13f2338231cd354ea9"> 622</a></span>&#160; } <a class="code" href="a00254.html#a23f553f3252c9d13f2338231cd354ea9">cache</a>;</div>
243 <div class="line"><a name="l00624"></a><span class="lineno"><a class="line" href="a00270.html"> 624</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00270.html">hwloc_group_attr_s</a> {</div>
244 <div class="line"><a name="l00625"></a><span class="lineno"><a class="line" href="a00270.html#ad914eac61c77481e1b7037877bcc5579"> 625</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00270.html#ad914eac61c77481e1b7037877bcc5579">depth</a>; </div>
245 <div class="line"><a name="l00627"></a><span class="lineno"><a class="line" href="a00270.html#a3229f269c4cc7e63492c168535e4f0c1"> 627</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00270.html#a3229f269c4cc7e63492c168535e4f0c1">kind</a>; </div>
246 <div class="line"><a name="l00628"></a><span class="lineno"><a class="line" href="a00270.html#ad514d943960a4036ed5e44dc187c74ed"> 628</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00270.html#ad514d943960a4036ed5e44dc187c74ed">subkind</a>; </div>
247 <div class="line"><a name="l00629"></a><span class="lineno"><a class="line" href="a00270.html#afa253d4b70f92e940c226d61f192054f"> 629</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00270.html#afa253d4b70f92e940c226d61f192054f">dont_merge</a>; </div>
248 <div class="line"><a name="l00630"></a><span class="lineno"><a class="line" href="a00254.html#a9eddbd69e34cd2ef6af6d2ac31b6eff3"> 630</a></span>&#160; } <a class="code" href="a00254.html#a9eddbd69e34cd2ef6af6d2ac31b6eff3">group</a>;</div>
249 <div class="line"><a name="l00632"></a><span class="lineno"><a class="line" href="a00274.html"> 632</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00274.html">hwloc_pcidev_attr_s</a> {</div>
250 <div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160;<span class="preprocessor">#ifndef HWLOC_HAVE_32BITS_PCI_DOMAIN</span></div>
251 <div class="line"><a name="l00634"></a><span class="lineno"><a class="line" href="a00274.html#a8fba44988deb98613c1505a4019a34dc"> 634</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code" href="a00274.html#a8fba44988deb98613c1505a4019a34dc">domain</a>; <span class="comment">/* Only 16bits PCI domains are supported by default */</span></div>
252 <div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160;<span class="preprocessor">#else</span></div>
253 <div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="a00274.html#a8fba44988deb98613c1505a4019a34dc">domain</a>; <span class="comment">/* 32bits PCI domain support break the library ABI, hence it&#39;s disabled by default */</span></div>
254 <div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160;<span class="preprocessor">#endif</span></div>
255 <div class="line"><a name="l00638"></a><span class="lineno"><a class="line" href="a00274.html#aae99e035e8d1387d7b8768aaa8eceb0a"> 638</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00274.html#aae99e035e8d1387d7b8768aaa8eceb0a">bus</a>, <a class="code" href="a00274.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">dev</a>, <a class="code" href="a00274.html#a695f32df53f4ef728670bfcf31b74e0f">func</a>;</div>
256 <div class="line"><a name="l00639"></a><span class="lineno"><a class="line" href="a00274.html#aee735352d9f1686fd290fc6d6397c334"> 639</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code" href="a00274.html#aee735352d9f1686fd290fc6d6397c334">class_id</a>;</div>
257 <div class="line"><a name="l00640"></a><span class="lineno"><a class="line" href="a00274.html#a35b66064ab7d768caf7154e410caf0fa"> 640</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code" href="a00274.html#aad970ad19b62eb2d5df30e4802da4f4c">vendor_id</a>, <a class="code" href="a00274.html#a35b66064ab7d768caf7154e410caf0fa">device_id</a>, <a class="code" href="a00274.html#a499db3d8cc89eaba04fcaef3df1cba97">subvendor_id</a>, <a class="code" href="a00274.html#acac741aecd7a6db64f33409427e3971f">subdevice_id</a>;</div>
258 <div class="line"><a name="l00641"></a><span class="lineno"><a class="line" href="a00274.html#a13ad54c93d08d8ac808e4de9674c5ee7"> 641</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00274.html#a13ad54c93d08d8ac808e4de9674c5ee7">revision</a>;</div>
259 <div class="line"><a name="l00642"></a><span class="lineno"><a class="line" href="a00274.html#a59b2fce35f7cbde86c4fd305d0ccda5f"> 642</a></span>&#160; <span class="keywordtype">float</span> <a class="code" href="a00274.html#a59b2fce35f7cbde86c4fd305d0ccda5f">linkspeed</a>; <span class="comment">/* in GB/s */</span></div>
260 <div class="line"><a name="l00643"></a><span class="lineno"><a class="line" href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c"> 643</a></span>&#160; } <a class="code" href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>;</div>
261 <div class="line"><a name="l00645"></a><span class="lineno"><a class="line" href="a00278.html"> 645</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00278.html">hwloc_bridge_attr_s</a> {</div>
262 <div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <span class="keyword">union </span>{</div>
263 <div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <span class="keyword">struct </span><a class="code" href="a00274.html">hwloc_pcidev_attr_s</a> <a class="code" href="a00278.html#ab5c564e7c95b747dae9eb84ec0a2c31e">pci</a>;</div>
264 <div class="line"><a name="l00648"></a><span class="lineno"><a class="line" href="a00278.html#ab62888c880f8bb730292722f5811958d"> 648</a></span>&#160; } <a class="code" href="a00278.html#ab62888c880f8bb730292722f5811958d">upstream</a>;</div>
265 <div class="line"><a name="l00649"></a><span class="lineno"><a class="line" href="a00278.html#a265dd2164aa2df4972e25a029da72125"> 649</a></span>&#160; <a class="code" href="a00193.html#gab34362c7a23296c3f12c5756747abda3">hwloc_obj_bridge_type_t</a> <a class="code" href="a00278.html#a265dd2164aa2df4972e25a029da72125">upstream_type</a>;</div>
266 <div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="keyword">union </span>{</div>
267 <div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <span class="keyword">struct </span>{</div>
268 <div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160;<span class="preprocessor">#ifndef HWLOC_HAVE_32BITS_PCI_DOMAIN</span></div>
269 <div class="line"><a name="l00653"></a><span class="lineno"><a class="line" href="a00278.html#a2c31e565a5f0d23d0a0a3dd3ec8f4b17"> 653</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code" href="a00278.html#a2c31e565a5f0d23d0a0a3dd3ec8f4b17">domain</a>; <span class="comment">/* Only 16bits PCI domains are supported by default */</span></div>
270 <div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160;<span class="preprocessor">#else</span></div>
271 <div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="a00278.html#a2c31e565a5f0d23d0a0a3dd3ec8f4b17">domain</a>; <span class="comment">/* 32bits PCI domain support break the library ABI, hence it&#39;s disabled by default */</span></div>
272 <div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160;<span class="preprocessor">#endif</span></div>
273 <div class="line"><a name="l00657"></a><span class="lineno"><a class="line" href="a00278.html#ae2d9dd73ef1d32045c584a8e66d2f83f"> 657</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00278.html#ae2d9dd73ef1d32045c584a8e66d2f83f">secondary_bus</a>, <a class="code" href="a00278.html#af3f3f7d76bf03e8d2afa721c2b8d6771">subordinate_bus</a>;</div>
274 <div class="line"><a name="l00658"></a><span class="lineno"><a class="line" href="a00278.html#a2fdc40034b915d504724b35cc776a4ec"> 658</a></span>&#160; } <a class="code" href="a00278.html#ab5c564e7c95b747dae9eb84ec0a2c31e">pci</a>;</div>
275 <div class="line"><a name="l00659"></a><span class="lineno"><a class="line" href="a00278.html#a7d5db91d655ba23ffe9bda7a2cbcb9a8"> 659</a></span>&#160; } <a class="code" href="a00278.html#a7d5db91d655ba23ffe9bda7a2cbcb9a8">downstream</a>;</div>
276 <div class="line"><a name="l00660"></a><span class="lineno"><a class="line" href="a00278.html#ac6a169b672d0e9f75756fd5665828b93"> 660</a></span>&#160; <a class="code" href="a00193.html#gab34362c7a23296c3f12c5756747abda3">hwloc_obj_bridge_type_t</a> <a class="code" href="a00278.html#ac6a169b672d0e9f75756fd5665828b93">downstream_type</a>;</div>
277 <div class="line"><a name="l00661"></a><span class="lineno"><a class="line" href="a00278.html#a336c8b22893d5d734d8c9dfca4066b46"> 661</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00278.html#a336c8b22893d5d734d8c9dfca4066b46">depth</a>;</div>
278 <div class="line"><a name="l00662"></a><span class="lineno"><a class="line" href="a00254.html#a207e6359497b7116d6f4baa9e8bbeb43"> 662</a></span>&#160; } <a class="code" href="a00254.html#a207e6359497b7116d6f4baa9e8bbeb43">bridge</a>;</div>
279 <div class="line"><a name="l00664"></a><span class="lineno"><a class="line" href="a00294.html"> 664</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00294.html">hwloc_osdev_attr_s</a> {</div>
280 <div class="line"><a name="l00665"></a><span class="lineno"><a class="line" href="a00294.html#a31e019e27e54ac6138d04be639bb96f9"> 665</a></span>&#160; <a class="code" href="a00193.html#gaa9a6941ef7b1c169412518d7ef71b3d2">hwloc_obj_osdev_type_t</a> <a class="code" href="a00294.html#a31e019e27e54ac6138d04be639bb96f9">type</a>;</div>
281 <div class="line"><a name="l00666"></a><span class="lineno"><a class="line" href="a00254.html#aaf7a5c38b5185703ff18c46ad2761dcf"> 666</a></span>&#160; } <a class="code" href="a00254.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a>;</div>
282 <div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160;};</div>
283 <div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; </div>
284 <div class="line"><a name="l00673"></a><span class="lineno"><a class="line" href="a00298.html"> 673</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00298.html">hwloc_info_s</a> {</div>
285 <div class="line"><a name="l00674"></a><span class="lineno"><a class="line" href="a00298.html#a12ce1309e4381ae38b5c15d242a47124"> 674</a></span>&#160; <span class="keywordtype">char</span> *<a class="code" href="a00298.html#a12ce1309e4381ae38b5c15d242a47124">name</a>; </div>
286 <div class="line"><a name="l00675"></a><span class="lineno"><a class="line" href="a00298.html#a788a0073bafe660645e7b69f31a43bbb"> 675</a></span>&#160; <span class="keywordtype">char</span> *<a class="code" href="a00298.html#a788a0073bafe660645e7b69f31a43bbb">value</a>; </div>
287 <div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160;};</div>
288 <div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; </div>
289 <div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160;<span class="keyword">struct </span>hwloc_topology;</div>
290 <div class="line"><a name="l00691"></a><span class="lineno"><a class="line" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38"> 691</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>hwloc_topology * <a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>;</div>
291 <div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; </div>
292 <div class="line"><a name="l00699"></a><span class="lineno"><a class="line" href="a00195.html#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa"> 699</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00195.html#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa">hwloc_topology_init</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> *topologyp);</div>
293 <div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; </div>
294 <div class="line"><a name="l00721"></a><span class="lineno"><a class="line" href="a00195.html#gabdf58d87ad77f6615fccdfe0535ff826"> 721</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00195.html#gabdf58d87ad77f6615fccdfe0535ff826">hwloc_topology_load</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology);</div>
295 <div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; </div>
296 <div class="line"><a name="l00727"></a><span class="lineno"><a class="line" href="a00195.html#ga9f34a640b6fd28d23699d4d084667b15"> 727</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> <a class="code" href="a00195.html#ga9f34a640b6fd28d23699d4d084667b15">hwloc_topology_destroy</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology);</div>
297 <div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; </div>
298 <div class="line"><a name="l00739"></a><span class="lineno"><a class="line" href="a00195.html#ga62a161fc5e6f120344dc69a7bee4e587"> 739</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00195.html#ga62a161fc5e6f120344dc69a7bee4e587">hwloc_topology_dup</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> *newtopology, <a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> oldtopology);</div>
299 <div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; </div>
300 <div class="line"><a name="l00758"></a><span class="lineno"><a class="line" href="a00195.html#ga0647ae66458fe68172eb5a320042f870"> 758</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00195.html#ga0647ae66458fe68172eb5a320042f870">hwloc_topology_abi_check</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology);</div>
301 <div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; </div>
302 <div class="line"><a name="l00771"></a><span class="lineno"><a class="line" href="a00195.html#gaf6746bc3a558ef1ac8348b4491d091b5"> 771</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> <a class="code" href="a00195.html#gaf6746bc3a558ef1ac8348b4491d091b5">hwloc_topology_check</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology);</div>
303 <div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; </div>
304 <div class="line"><a name="l00793"></a><span class="lineno"><a class="line" href="a00196.html#gae54d1782ca9b54bea915f5c18a9158fa"> 793</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00196.html#gae54d1782ca9b54bea915f5c18a9158fa">hwloc_topology_get_depth</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> __hwloc_restrict topology) __hwloc_attribute_pure;</div>
305 <div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; </div>
306 <div class="line"><a name="l00818"></a><span class="lineno"><a class="line" href="a00196.html#ga8bec782e21be313750da70cf7428b374"> 818</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00196.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type);</div>
307 <div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; </div>
308 <div class="line"><a name="l00820"></a><span class="lineno"><a class="line" href="a00196.html#gaf4e663cf42bbe20756b849c6293ef575"> 820</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00196.html#gaf4e663cf42bbe20756b849c6293ef575">hwloc_get_type_depth_e</a> {</div>
309 <div class="line"><a name="l00821"></a><span class="lineno"><a class="line" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad"> 821</a></span>&#160; <a class="code" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a> = -1, </div>
310 <div class="line"><a name="l00822"></a><span class="lineno"><a class="line" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c"> 822</a></span>&#160; <a class="code" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c">HWLOC_TYPE_DEPTH_MULTIPLE</a> = -2, </div>
311 <div class="line"><a name="l00823"></a><span class="lineno"><a class="line" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a245c34ec9884c2cf5de5049b2153ed9c"> 823</a></span>&#160; <a class="code" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a245c34ec9884c2cf5de5049b2153ed9c">HWLOC_TYPE_DEPTH_NUMANODE</a> = -3, </div>
312 <div class="line"><a name="l00824"></a><span class="lineno"><a class="line" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575af93b50182973e4a718d9d4db9e253a90"> 824</a></span>&#160; <a class="code" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575af93b50182973e4a718d9d4db9e253a90">HWLOC_TYPE_DEPTH_BRIDGE</a> = -4, </div>
313 <div class="line"><a name="l00825"></a><span class="lineno"><a class="line" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575ad8b1516e699b57ce1c8d107fbd2f674c"> 825</a></span>&#160; <a class="code" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575ad8b1516e699b57ce1c8d107fbd2f674c">HWLOC_TYPE_DEPTH_PCI_DEVICE</a> = -5, </div>
314 <div class="line"><a name="l00826"></a><span class="lineno"><a class="line" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575afe9a2131073eebbe129d4aa2928d3f46"> 826</a></span>&#160; <a class="code" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575afe9a2131073eebbe129d4aa2928d3f46">HWLOC_TYPE_DEPTH_OS_DEVICE</a> = -6, </div>
315 <div class="line"><a name="l00827"></a><span class="lineno"><a class="line" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a96436a392b4cdcaa1a29bc65351b373f"> 827</a></span>&#160; <a class="code" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a96436a392b4cdcaa1a29bc65351b373f">HWLOC_TYPE_DEPTH_MISC</a> = -7, </div>
316 <div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; <a class="code" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a8b8d7d300c018c0eb65e6c9a9f162101">HWLOC_TYPE_DEPTH_MEMCACHE</a> = -8 </div>
317 <div class="line"><a name="l00829"></a><span class="lineno"><a class="line" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a8b8d7d300c018c0eb65e6c9a9f162101"> 829</a></span>&#160;};</div>
318 <div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; </div>
319 <div class="line"><a name="l00850"></a><span class="lineno"><a class="line" href="a00196.html#gae85786340b88e24835f8c403a1e2e54b"> 850</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00196.html#gae85786340b88e24835f8c403a1e2e54b">hwloc_get_memory_parents_depth</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology);</div>
320 <div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; </div>
321 <div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
322 <div class="line"><a name="l00866"></a><span class="lineno"><a class="line" href="a00196.html#ga8125328e69eba709c33ea8055c12589b"> 866</a></span>&#160;<a class="code" href="a00196.html#ga8125328e69eba709c33ea8055c12589b">hwloc_get_type_or_below_depth</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type) __hwloc_attribute_pure;</div>
323 <div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; </div>
324 <div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
325 <div class="line"><a name="l00882"></a><span class="lineno"><a class="line" href="a00196.html#ga8a9ee573b7d2190272095d10712a7cca"> 882</a></span>&#160;<a class="code" href="a00196.html#ga8a9ee573b7d2190272095d10712a7cca">hwloc_get_type_or_above_depth</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type) __hwloc_attribute_pure;</div>
326 <div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; </div>
327 <div class="line"><a name="l00891"></a><span class="lineno"><a class="line" href="a00196.html#ga506b0682b98aa264d53e934d2e9badb0"> 891</a></span>&#160;HWLOC_DECLSPEC <a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00196.html#ga506b0682b98aa264d53e934d2e9badb0">hwloc_get_depth_type</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">int</span> depth) __hwloc_attribute_pure;</div>
328 <div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; </div>
329 <div class="line"><a name="l00895"></a><span class="lineno"><a class="line" href="a00196.html#ga1d5ceafe8130fe6e8657bf0bc666ba50"> 895</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">unsigned</span> <a class="code" href="a00196.html#ga1d5ceafe8130fe6e8657bf0bc666ba50">hwloc_get_nbobjs_by_depth</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">int</span> depth) __hwloc_attribute_pure;</div>
330 <div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; </div>
331 <div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
332 <div class="line"><a name="l00903"></a><span class="lineno"><a class="line" href="a00196.html#ga789a3f65aedff644be64a18526a03065"> 903</a></span>&#160;<a class="code" href="a00196.html#ga789a3f65aedff644be64a18526a03065">hwloc_get_nbobjs_by_type</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type) __hwloc_attribute_pure;</div>
333 <div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; </div>
334 <div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
335 <div class="line"><a name="l00910"></a><span class="lineno"><a class="line" href="a00196.html#ga2d4b12fc187dfc53b35f2fa21d21044d"> 910</a></span>&#160;<a class="code" href="a00196.html#ga2d4b12fc187dfc53b35f2fa21d21044d">hwloc_get_root_obj</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology) __hwloc_attribute_pure;</div>
336 <div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; </div>
337 <div class="line"><a name="l00913"></a><span class="lineno"><a class="line" href="a00196.html#ga391f6b2613f0065673eaa4069b93d4e0"> 913</a></span>&#160;HWLOC_DECLSPEC <a class="code" href="a00250.html">hwloc_obj_t</a> <a class="code" href="a00196.html#ga391f6b2613f0065673eaa4069b93d4e0">hwloc_get_obj_by_depth</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">int</span> depth, <span class="keywordtype">unsigned</span> idx) __hwloc_attribute_pure;</div>
338 <div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; </div>
339 <div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
340 <div class="line"><a name="l00922"></a><span class="lineno"><a class="line" href="a00196.html#ga6f414dd80a2b943967a0ac92da3181a2"> 922</a></span>&#160;<a class="code" href="a00196.html#ga6f414dd80a2b943967a0ac92da3181a2">hwloc_get_obj_by_type</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, <span class="keywordtype">unsigned</span> idx) __hwloc_attribute_pure;</div>
341 <div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; </div>
342 <div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
343 <div class="line"><a name="l00929"></a><span class="lineno"><a class="line" href="a00196.html#gac140a9b939d9fa0b30c4a910efcb0656"> 929</a></span>&#160;<a class="code" href="a00196.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">int</span> depth, <a class="code" href="a00250.html">hwloc_obj_t</a> prev);</div>
344 <div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; </div>
345 <div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
346 <div class="line"><a name="l00938"></a><span class="lineno"><a class="line" href="a00196.html#ga759e88eaf5a230ad283e9d4c42486735"> 938</a></span>&#160;<a class="code" href="a00196.html#ga759e88eaf5a230ad283e9d4c42486735">hwloc_get_next_obj_by_type</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type,</div>
347 <div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> prev);</div>
348 <div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; </div>
349 <div class="line"><a name="l00957"></a><span class="lineno"><a class="line" href="a00197.html#ga5ca0bf94bbbb080d0eff17a57bd90422"> 957</a></span>&#160;HWLOC_DECLSPEC <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="a00197.html#ga5ca0bf94bbbb080d0eff17a57bd90422">hwloc_obj_type_string</a> (<a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type) __hwloc_attribute_const;</div>
350 <div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; </div>
351 <div class="line"><a name="l00976"></a><span class="lineno"><a class="line" href="a00197.html#gadb8765c260edea80c52cd06a76639ba4"> 976</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00197.html#gadb8765c260edea80c52cd06a76639ba4">hwloc_obj_type_snprintf</a>(<span class="keywordtype">char</span> * __hwloc_restrict <span class="keywordtype">string</span>, <span class="keywordtype">size_t</span> size,</div>
352 <div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> obj,</div>
353 <div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; <span class="keywordtype">int</span> verbose);</div>
354 <div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; </div>
355 <div class="line"><a name="l00991"></a><span class="lineno"><a class="line" href="a00197.html#ga870e876931c282a1c7aee2f031912ce3"> 991</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00197.html#ga870e876931c282a1c7aee2f031912ce3">hwloc_obj_attr_snprintf</a>(<span class="keywordtype">char</span> * __hwloc_restrict <span class="keywordtype">string</span>, <span class="keywordtype">size_t</span> size,</div>
356 <div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> obj, <span class="keyword">const</span> <span class="keywordtype">char</span> * __hwloc_restrict separator,</div>
357 <div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; <span class="keywordtype">int</span> verbose);</div>
358 <div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; </div>
359 <div class="line"><a name="l01018"></a><span class="lineno"><a class="line" href="a00197.html#ga510f21b066fba2dab12b8c9b173b1dfd"> 1018</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00197.html#ga510f21b066fba2dab12b8c9b173b1dfd">hwloc_type_sscanf</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keywordtype">string</span>,</div>
360 <div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; <a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> *typep,</div>
361 <div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; <span class="keyword">union</span> <a class="code" href="a00254.html">hwloc_obj_attr_u</a> *attrp, <span class="keywordtype">size_t</span> attrsize);</div>
362 <div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; </div>
363 <div class="line"><a name="l01043"></a><span class="lineno"><a class="line" href="a00197.html#ga52c63cd7203e55b804c1314affc9bd12"> 1043</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00197.html#ga52c63cd7203e55b804c1314affc9bd12">hwloc_type_sscanf_as_depth</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keywordtype">string</span>,</div>
364 <div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; <a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> *typep,</div>
365 <div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; <a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">int</span> *depthp);</div>
366 <div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; </div>
367 <div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keyword">const</span> <span class="keywordtype">char</span> *</div>
368 <div class="line"><a name="l01063"></a><span class="lineno"><a class="line" href="a00198.html#gab358661a92bb27d8542b255cc9f6f25e"> 1063</a></span>&#160;<a class="code" href="a00198.html#gab358661a92bb27d8542b255cc9f6f25e">hwloc_obj_get_info_by_name</a>(<a class="code" href="a00250.html">hwloc_obj_t</a> obj, <span class="keyword">const</span> <span class="keywordtype">char</span> *name) __hwloc_attribute_pure;</div>
369 <div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; </div>
370 <div class="line"><a name="l01081"></a><span class="lineno"><a class="line" href="a00198.html#gace7654bb8a9002caae1a4b8a59e7452e"> 1081</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00198.html#gace7654bb8a9002caae1a4b8a59e7452e">hwloc_obj_add_info</a>(<a class="code" href="a00250.html">hwloc_obj_t</a> obj, <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> <span class="keywordtype">char</span> *value);</div>
371 <div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; </div>
372 <div class="line"><a name="l01154"></a><span class="lineno"><a class="line" href="a00199.html#ga217dc8d373f8958cc93c154ebce1c71c"> 1154</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
373 <div class="line"><a name="l01157"></a><span class="lineno"><a class="line" href="a00199.html#gga217dc8d373f8958cc93c154ebce1c71ca2e0dd0128dac6b03408c7dd170477fdc"> 1157</a></span>&#160; <a class="code" href="a00199.html#gga217dc8d373f8958cc93c154ebce1c71ca2e0dd0128dac6b03408c7dd170477fdc">HWLOC_CPUBIND_PROCESS</a> = (1&lt;&lt;0),</div>
374 <div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; </div>
375 <div class="line"><a name="l01161"></a><span class="lineno"><a class="line" href="a00199.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421"> 1161</a></span>&#160; <a class="code" href="a00199.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421">HWLOC_CPUBIND_THREAD</a> = (1&lt;&lt;1),</div>
376 <div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; </div>
377 <div class="line"><a name="l01186"></a><span class="lineno"><a class="line" href="a00199.html#gga217dc8d373f8958cc93c154ebce1c71ca679a7e0f0c7ee06b123565f90d98e7fa"> 1186</a></span>&#160; <a class="code" href="a00199.html#gga217dc8d373f8958cc93c154ebce1c71ca679a7e0f0c7ee06b123565f90d98e7fa">HWLOC_CPUBIND_STRICT</a> = (1&lt;&lt;2),</div>
378 <div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; </div>
379 <div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160; <a class="code" href="a00199.html#gga217dc8d373f8958cc93c154ebce1c71ca41ce440443cc3087caed95ab60edcad6">HWLOC_CPUBIND_NOMEMBIND</a> = (1&lt;&lt;3)</div>
380 <div class="line"><a name="l01204"></a><span class="lineno"><a class="line" href="a00199.html#gga217dc8d373f8958cc93c154ebce1c71ca41ce440443cc3087caed95ab60edcad6"> 1204</a></span>&#160;} <a class="code" href="a00199.html#ga217dc8d373f8958cc93c154ebce1c71c">hwloc_cpubind_flags_t</a>;</div>
381 <div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160; </div>
382 <div class="line"><a name="l01211"></a><span class="lineno"><a class="line" href="a00199.html#ga80bc07473a8edf840cae17bd7ec21d48"> 1211</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00199.html#ga80bc07473a8edf840cae17bd7ec21d48">hwloc_set_cpubind</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, <span class="keywordtype">int</span> flags);</div>
383 <div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; </div>
384 <div class="line"><a name="l01218"></a><span class="lineno"><a class="line" href="a00199.html#gacba7ecb979baf824d5240fa2cb2a8be6"> 1218</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00199.html#gacba7ecb979baf824d5240fa2cb2a8be6">hwloc_get_cpubind</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set, <span class="keywordtype">int</span> flags);</div>
385 <div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; </div>
386 <div class="line"><a name="l01231"></a><span class="lineno"><a class="line" href="a00199.html#ga296db8a3c6d49b51fb83d6f3e45c02a6"> 1231</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00199.html#ga296db8a3c6d49b51fb83d6f3e45c02a6">hwloc_set_proc_cpubind</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_pid_t pid, <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, <span class="keywordtype">int</span> flags);</div>
387 <div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160; </div>
388 <div class="line"><a name="l01244"></a><span class="lineno"><a class="line" href="a00199.html#gac82de91f788fa82dacf99c6e0d4b7158"> 1244</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00199.html#gac82de91f788fa82dacf99c6e0d4b7158">hwloc_get_proc_cpubind</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_pid_t pid, <a class="code" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set, <span class="keywordtype">int</span> flags);</div>
389 <div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; </div>
390 <div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160;<span class="preprocessor">#ifdef hwloc_thread_t</span></div>
391 <div class="line"><a name="l01254"></a><span class="lineno"><a class="line" href="a00199.html#gae42c01b2addcfbf6048b9a516dd7a906"> 1254</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00199.html#gae42c01b2addcfbf6048b9a516dd7a906">hwloc_set_thread_cpubind</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_thread_t thread, <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, <span class="keywordtype">int</span> flags);</div>
392 <div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160;<span class="preprocessor">#endif</span></div>
393 <div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160; </div>
394 <div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160;<span class="preprocessor">#ifdef hwloc_thread_t</span></div>
395 <div class="line"><a name="l01265"></a><span class="lineno"><a class="line" href="a00199.html#gaf13f765642b5d0d9a9813e6bb043671b"> 1265</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00199.html#gaf13f765642b5d0d9a9813e6bb043671b">hwloc_get_thread_cpubind</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_thread_t thread, <a class="code" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set, <span class="keywordtype">int</span> flags);</div>
396 <div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160;<span class="preprocessor">#endif</span></div>
397 <div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160; </div>
398 <div class="line"><a name="l01281"></a><span class="lineno"><a class="line" href="a00199.html#gafdb374627358bf09203b5a4215b13032"> 1281</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00199.html#gafdb374627358bf09203b5a4215b13032">hwloc_get_last_cpu_location</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set, <span class="keywordtype">int</span> flags);</div>
399 <div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; </div>
400 <div class="line"><a name="l01299"></a><span class="lineno"><a class="line" href="a00199.html#ga910a05c2d47f68a3155bf176b50fa555"> 1299</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00199.html#ga910a05c2d47f68a3155bf176b50fa555">hwloc_get_proc_last_cpu_location</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_pid_t pid, <a class="code" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set, <span class="keywordtype">int</span> flags);</div>
401 <div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; </div>
402 <div class="line"><a name="l01380"></a><span class="lineno"><a class="line" href="a00200.html#gac9764f79505775d06407b40f5e4661e8"> 1380</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
403 <div class="line"><a name="l01388"></a><span class="lineno"><a class="line" href="a00200.html#ggac9764f79505775d06407b40f5e4661e8a18675bb80ebc1bce5b652e9de8f3998c"> 1388</a></span>&#160; <a class="code" href="a00200.html#ggac9764f79505775d06407b40f5e4661e8a18675bb80ebc1bce5b652e9de8f3998c">HWLOC_MEMBIND_DEFAULT</a> = 0,</div>
404 <div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160; </div>
405 <div class="line"><a name="l01399"></a><span class="lineno"><a class="line" href="a00200.html#ggac9764f79505775d06407b40f5e4661e8a979c7aa78dd32780858f30f47a72cca0"> 1399</a></span>&#160; <a class="code" href="a00200.html#ggac9764f79505775d06407b40f5e4661e8a979c7aa78dd32780858f30f47a72cca0">HWLOC_MEMBIND_FIRSTTOUCH</a> = 1,</div>
406 <div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160; </div>
407 <div class="line"><a name="l01403"></a><span class="lineno"><a class="line" href="a00200.html#ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c"> 1403</a></span>&#160; <a class="code" href="a00200.html#ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c">HWLOC_MEMBIND_BIND</a> = 2,</div>
408 <div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160; </div>
409 <div class="line"><a name="l01412"></a><span class="lineno"><a class="line" href="a00200.html#ggac9764f79505775d06407b40f5e4661e8ae370075e5af016d42310f87ea5af236b"> 1412</a></span>&#160; <a class="code" href="a00200.html#ggac9764f79505775d06407b40f5e4661e8ae370075e5af016d42310f87ea5af236b">HWLOC_MEMBIND_INTERLEAVE</a> = 3,</div>
410 <div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160; </div>
411 <div class="line"><a name="l01419"></a><span class="lineno"><a class="line" href="a00200.html#ggac9764f79505775d06407b40f5e4661e8aecdd4164d647708fbb51a00d98dbb138"> 1419</a></span>&#160; <a class="code" href="a00200.html#ggac9764f79505775d06407b40f5e4661e8aecdd4164d647708fbb51a00d98dbb138">HWLOC_MEMBIND_NEXTTOUCH</a> = 4,</div>
412 <div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160; </div>
413 <div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160; <a class="code" href="a00200.html#ggac9764f79505775d06407b40f5e4661e8a3185bd869b67817fb2bd5164bf360402">HWLOC_MEMBIND_MIXED</a> = -1</div>
414 <div class="line"><a name="l01428"></a><span class="lineno"><a class="line" href="a00200.html#ggac9764f79505775d06407b40f5e4661e8a3185bd869b67817fb2bd5164bf360402"> 1428</a></span>&#160;} <a class="code" href="a00200.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a>;</div>
415 <div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160; </div>
416 <div class="line"><a name="l01443"></a><span class="lineno"><a class="line" href="a00200.html#gab00475fd98815bf4fb9aaf752030e7d2"> 1443</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
417 <div class="line"><a name="l01448"></a><span class="lineno"><a class="line" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4"> 1448</a></span>&#160; <a class="code" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4">HWLOC_MEMBIND_PROCESS</a> = (1&lt;&lt;0),</div>
418 <div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160; </div>
419 <div class="line"><a name="l01453"></a><span class="lineno"><a class="line" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298"> 1453</a></span>&#160; <a class="code" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298">HWLOC_MEMBIND_THREAD</a> = (1&lt;&lt;1),</div>
420 <div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160; </div>
421 <div class="line"><a name="l01461"></a><span class="lineno"><a class="line" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6"> 1461</a></span>&#160; <a class="code" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a> = (1&lt;&lt;2),</div>
422 <div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160; </div>
423 <div class="line"><a name="l01467"></a><span class="lineno"><a class="line" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2aa6e49e54f52827cb143cc869cfd748af"> 1467</a></span>&#160; <a class="code" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2aa6e49e54f52827cb143cc869cfd748af">HWLOC_MEMBIND_MIGRATE</a> = (1&lt;&lt;3),</div>
424 <div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160; </div>
425 <div class="line"><a name="l01480"></a><span class="lineno"><a class="line" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2aad6b9eaf2ee324ca58dc8f58094b9997"> 1480</a></span>&#160; <a class="code" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2aad6b9eaf2ee324ca58dc8f58094b9997">HWLOC_MEMBIND_NOCPUBIND</a> = (1&lt;&lt;4),</div>
426 <div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160; </div>
427 <div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160; <a class="code" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256">HWLOC_MEMBIND_BYNODESET</a> = (1&lt;&lt;5)</div>
428 <div class="line"><a name="l01492"></a><span class="lineno"><a class="line" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256"> 1492</a></span>&#160;} <a class="code" href="a00200.html#gab00475fd98815bf4fb9aaf752030e7d2">hwloc_membind_flags_t</a>;</div>
429 <div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160; </div>
430 <div class="line"><a name="l01509"></a><span class="lineno"><a class="line" href="a00200.html#ga020951efa0ce3862bd4faec295501a7f"> 1509</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00200.html#ga020951efa0ce3862bd4faec295501a7f">hwloc_set_membind</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, <a class="code" href="a00200.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> policy, <span class="keywordtype">int</span> flags);</div>
431 <div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160; </div>
432 <div class="line"><a name="l01555"></a><span class="lineno"><a class="line" href="a00200.html#gae21f0a1a884929c784bebf070252aa56"> 1555</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00200.html#gae21f0a1a884929c784bebf070252aa56">hwloc_get_membind</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set, <a class="code" href="a00200.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> * policy, <span class="keywordtype">int</span> flags);</div>
433 <div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160; </div>
434 <div class="line"><a name="l01569"></a><span class="lineno"><a class="line" href="a00200.html#gabc91ff16f7e41047924e3a4ae6d9da7e"> 1569</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00200.html#gabc91ff16f7e41047924e3a4ae6d9da7e">hwloc_set_proc_membind</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_pid_t pid, <a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, <a class="code" href="a00200.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> policy, <span class="keywordtype">int</span> flags);</div>
435 <div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160; </div>
436 <div class="line"><a name="l01610"></a><span class="lineno"><a class="line" href="a00200.html#ga1730ceb18ec6ee3b7bd3d0db81f07dc8"> 1610</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00200.html#ga1730ceb18ec6ee3b7bd3d0db81f07dc8">hwloc_get_proc_membind</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_pid_t pid, <a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set, <a class="code" href="a00200.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> * policy, <span class="keywordtype">int</span> flags);</div>
437 <div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160; </div>
438 <div class="line"><a name="l01622"></a><span class="lineno"><a class="line" href="a00200.html#gaf881faefe20701229f07dd7dbd0125ed"> 1622</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00200.html#gaf881faefe20701229f07dd7dbd0125ed">hwloc_set_area_membind</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">const</span> <span class="keywordtype">void</span> *addr, <span class="keywordtype">size_t</span> len, <a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, <a class="code" href="a00200.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> policy, <span class="keywordtype">int</span> flags);</div>
439 <div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160; </div>
440 <div class="line"><a name="l01651"></a><span class="lineno"><a class="line" href="a00200.html#gaa87e0a6946ff145914fdf0b1c60567f8"> 1651</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00200.html#gaa87e0a6946ff145914fdf0b1c60567f8">hwloc_get_area_membind</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">const</span> <span class="keywordtype">void</span> *addr, <span class="keywordtype">size_t</span> len, <a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set, <a class="code" href="a00200.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> * policy, <span class="keywordtype">int</span> flags);</div>
441 <div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160; </div>
442 <div class="line"><a name="l01672"></a><span class="lineno"><a class="line" href="a00200.html#ga537c7508a4e2d1db05673ec5be6e805c"> 1672</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00200.html#ga537c7508a4e2d1db05673ec5be6e805c">hwloc_get_area_memlocation</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">const</span> <span class="keywordtype">void</span> *addr, <span class="keywordtype">size_t</span> len, <a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set, <span class="keywordtype">int</span> flags);</div>
443 <div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160; </div>
444 <div class="line"><a name="l01681"></a><span class="lineno"><a class="line" href="a00200.html#ga972b335a86a7d5e7b34bce2b243c41bc"> 1681</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> *<a class="code" href="a00200.html#ga972b335a86a7d5e7b34bce2b243c41bc">hwloc_alloc</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">size_t</span> len);</div>
445 <div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>&#160; </div>
446 <div class="line"><a name="l01697"></a><span class="lineno"><a class="line" href="a00200.html#ga04736461780fadcf193af218c0122273"> 1697</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> *<a class="code" href="a00200.html#ga04736461780fadcf193af218c0122273">hwloc_alloc_membind</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">size_t</span> len, <a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, <a class="code" href="a00200.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> policy, <span class="keywordtype">int</span> flags) __hwloc_attribute_malloc;</div>
447 <div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160; </div>
448 <div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">void</span> *</div>
449 <div class="line"><a name="l01709"></a><span class="lineno"><a class="line" href="a00200.html#gab1b77b8408bacaf03c7e8878f7577922"> 1709</a></span>&#160;<a class="code" href="a00200.html#gab1b77b8408bacaf03c7e8878f7577922">hwloc_alloc_membind_policy</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">size_t</span> len, <a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, <a class="code" href="a00200.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> policy, <span class="keywordtype">int</span> flags) __hwloc_attribute_malloc;</div>
450 <div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160; </div>
451 <div class="line"><a name="l01714"></a><span class="lineno"><a class="line" href="a00200.html#ga32dbd4f54e9e4a7179f2dde37ffe6ad7"> 1714</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00200.html#ga32dbd4f54e9e4a7179f2dde37ffe6ad7">hwloc_free</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">void</span> *addr, <span class="keywordtype">size_t</span> len);</div>
452 <div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160; </div>
453 <div class="line"><a name="l01752"></a><span class="lineno"><a class="line" href="a00201.html#ga341fc17b5867a4715570baab131f68cd"> 1752</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00201.html#ga341fc17b5867a4715570baab131f68cd">hwloc_topology_set_pid</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> __hwloc_restrict topology, hwloc_pid_t pid);</div>
454 <div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160; </div>
455 <div class="line"><a name="l01782"></a><span class="lineno"><a class="line" href="a00201.html#ga4fab186bb6181a00bcf585825fddd38d"> 1782</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00201.html#ga4fab186bb6181a00bcf585825fddd38d">hwloc_topology_set_synthetic</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> __hwloc_restrict topology, <span class="keyword">const</span> <span class="keywordtype">char</span> * __hwloc_restrict description);</div>
456 <div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>&#160; </div>
457 <div class="line"><a name="l01810"></a><span class="lineno"><a class="line" href="a00201.html#ga879439b7ee99407ee911b3ac64e9a25e"> 1810</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00201.html#ga879439b7ee99407ee911b3ac64e9a25e">hwloc_topology_set_xml</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> __hwloc_restrict topology, <span class="keyword">const</span> <span class="keywordtype">char</span> * __hwloc_restrict xmlpath);</div>
458 <div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>&#160; </div>
459 <div class="line"><a name="l01838"></a><span class="lineno"><a class="line" href="a00201.html#ga2745616b65595e1c1e579ecc7e461fa8"> 1838</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00201.html#ga2745616b65595e1c1e579ecc7e461fa8">hwloc_topology_set_xmlbuffer</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> __hwloc_restrict topology, <span class="keyword">const</span> <span class="keywordtype">char</span> * __hwloc_restrict buffer, <span class="keywordtype">int</span> size);</div>
460 <div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>&#160; </div>
461 <div class="line"><a name="l01842"></a><span class="lineno"><a class="line" href="a00201.html#ga949f656c779208a36790feba24048b7e"> 1842</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00201.html#ga949f656c779208a36790feba24048b7e">hwloc_topology_components_flag_e</a> {</div>
462 <div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>&#160; <a class="code" href="a00201.html#gga949f656c779208a36790feba24048b7ea33eec25d29253a2aba21dd3c731b416e">HWLOC_TOPOLOGY_COMPONENTS_FLAG_BLACKLIST</a> = (1UL&lt;&lt;0)</div>
463 <div class="line"><a name="l01847"></a><span class="lineno"><a class="line" href="a00201.html#gga949f656c779208a36790feba24048b7ea33eec25d29253a2aba21dd3c731b416e"> 1847</a></span>&#160;};</div>
464 <div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>&#160; </div>
465 <div class="line"><a name="l01863"></a><span class="lineno"><a class="line" href="a00201.html#ga9ad41adf418cee1c0ee32ba9bd4a3d36"> 1863</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00201.html#ga9ad41adf418cee1c0ee32ba9bd4a3d36">hwloc_topology_set_components</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> __hwloc_restrict topology, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags, <span class="keyword">const</span> <span class="keywordtype">char</span> * __hwloc_restrict name);</div>
466 <div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>&#160; </div>
467 <div class="line"><a name="l01883"></a><span class="lineno"><a class="line" href="a00202.html#gada025d3ec20b4b420f8038d23d6e7bde"> 1883</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00202.html#gada025d3ec20b4b420f8038d23d6e7bde">hwloc_topology_flags_e</a> {</div>
468 <div class="line"><a name="l01904"></a><span class="lineno"><a class="line" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258"> 1904</a></span>&#160; <a class="code" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a> = (1UL&lt;&lt;0),</div>
469 <div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>&#160; </div>
470 <div class="line"><a name="l01924"></a><span class="lineno"><a class="line" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b"> 1924</a></span>&#160; <a class="code" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a> = (1UL&lt;&lt;1),</div>
471 <div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>&#160; </div>
472 <div class="line"><a name="l01945"></a><span class="lineno"><a class="line" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea1b66bbd66e900e5c837f71defb32ad89"> 1945</a></span>&#160; <a class="code" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea1b66bbd66e900e5c837f71defb32ad89">HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES</a> = (1UL&lt;&lt;2),</div>
473 <div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>&#160; </div>
474 <div class="line"><a name="l01969"></a><span class="lineno"><a class="line" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdead93e82b8668ee90e4f9354e201a2ed9c"> 1969</a></span>&#160; <a class="code" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdead93e82b8668ee90e4f9354e201a2ed9c">HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT</a> = (1UL&lt;&lt;3),</div>
475 <div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>&#160; </div>
476 <div class="line"><a name="l01991"></a><span class="lineno"><a class="line" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdeaa595aed197779012acf43e8ca4a2658d"> 1991</a></span>&#160; <a class="code" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdeaa595aed197779012acf43e8ca4a2658d">HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING</a> = (1UL&lt;&lt;4),</div>
477 <div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>&#160; </div>
478 <div class="line"><a name="l02013"></a><span class="lineno"><a class="line" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea368d7741135fe309f3782c59644d3caa"> 2013</a></span>&#160; <a class="code" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea368d7741135fe309f3782c59644d3caa">HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_MEMBINDING</a> = (1UL&lt;&lt;5),</div>
479 <div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>&#160; </div>
480 <div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>&#160; <a class="code" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdeae7a792e3db4360360a10f9160b10e631">HWLOC_TOPOLOGY_FLAG_DONT_CHANGE_BINDING</a> = (1UL&lt;&lt;6)</div>
481 <div class="line"><a name="l02029"></a><span class="lineno"><a class="line" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdeae7a792e3db4360360a10f9160b10e631"> 2029</a></span>&#160;};</div>
482 <div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>&#160; </div>
483 <div class="line"><a name="l02040"></a><span class="lineno"><a class="line" href="a00202.html#gaaeed4df656979e5f16befea9d29b814b"> 2040</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00202.html#gaaeed4df656979e5f16befea9d29b814b">hwloc_topology_set_flags</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
484 <div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>&#160; </div>
485 <div class="line"><a name="l02048"></a><span class="lineno"><a class="line" href="a00202.html#ga09318f81c1d4713be907d64748a6f93c"> 2048</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="a00202.html#ga09318f81c1d4713be907d64748a6f93c">hwloc_topology_get_flags</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology);</div>
486 <div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160; </div>
487 <div class="line"><a name="l02057"></a><span class="lineno"><a class="line" href="a00202.html#ga68ffdcfd9175cdf40709801092f18017"> 2057</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00202.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> __hwloc_restrict topology) __hwloc_attribute_pure;</div>
488 <div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>&#160; </div>
489 <div class="line"><a name="l02060"></a><span class="lineno"><a class="line" href="a00302.html"> 2060</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00302.html">hwloc_topology_discovery_support</a> {</div>
490 <div class="line"><a name="l02062"></a><span class="lineno"><a class="line" href="a00302.html#ad7bb4ecf7a82f5a04fc632e9592ad3ab"> 2062</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00302.html#ad7bb4ecf7a82f5a04fc632e9592ad3ab">pu</a>;</div>
491 <div class="line"><a name="l02064"></a><span class="lineno"><a class="line" href="a00302.html#a955f96066cb9e4cd34e2a3710ad43e80"> 2064</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00302.html#a955f96066cb9e4cd34e2a3710ad43e80">numa</a>;</div>
492 <div class="line"><a name="l02066"></a><span class="lineno"><a class="line" href="a00302.html#af193eb858e40e12ef4923f5ed0e1f11a"> 2066</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00302.html#af193eb858e40e12ef4923f5ed0e1f11a">numa_memory</a>;</div>
493 <div class="line"><a name="l02068"></a><span class="lineno"><a class="line" href="a00302.html#af3c97b28781a2972cf8eaaf94a6617da"> 2068</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00302.html#af3c97b28781a2972cf8eaaf94a6617da">disallowed_pu</a>;</div>
494 <div class="line"><a name="l02070"></a><span class="lineno"><a class="line" href="a00302.html#a970e65235873bcdb9669a9805161ce03"> 2070</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00302.html#a970e65235873bcdb9669a9805161ce03">disallowed_numa</a>;</div>
495 <div class="line"><a name="l02072"></a><span class="lineno"><a class="line" href="a00302.html#aba80d6f9c15e2395f9ed61db9ff3b75d"> 2072</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00302.html#aba80d6f9c15e2395f9ed61db9ff3b75d">cpukind_efficiency</a>;</div>
496 <div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>&#160;};</div>
497 <div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>&#160; </div>
498 <div class="line"><a name="l02080"></a><span class="lineno"><a class="line" href="a00306.html"> 2080</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00306.html">hwloc_topology_cpubind_support</a> {</div>
499 <div class="line"><a name="l02082"></a><span class="lineno"><a class="line" href="a00306.html#a9403d51657a4d546b3ea9553a2973a27"> 2082</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00306.html#a9403d51657a4d546b3ea9553a2973a27">set_thisproc_cpubind</a>;</div>
500 <div class="line"><a name="l02084"></a><span class="lineno"><a class="line" href="a00306.html#a77a09ddd78ee3e9ff5f532a6ac74f7eb"> 2084</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00306.html#a77a09ddd78ee3e9ff5f532a6ac74f7eb">get_thisproc_cpubind</a>;</div>
501 <div class="line"><a name="l02086"></a><span class="lineno"><a class="line" href="a00306.html#aa166223d1c2a6de7256ab2d8b675a87e"> 2086</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00306.html#aa166223d1c2a6de7256ab2d8b675a87e">set_proc_cpubind</a>;</div>
502 <div class="line"><a name="l02088"></a><span class="lineno"><a class="line" href="a00306.html#aae705bc447adc163ead377362c4dfe9f"> 2088</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00306.html#aae705bc447adc163ead377362c4dfe9f">get_proc_cpubind</a>;</div>
503 <div class="line"><a name="l02090"></a><span class="lineno"><a class="line" href="a00306.html#a57a89a4b5f1f74fa6cfe176f1e8b0798"> 2090</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00306.html#a57a89a4b5f1f74fa6cfe176f1e8b0798">set_thisthread_cpubind</a>;</div>
504 <div class="line"><a name="l02092"></a><span class="lineno"><a class="line" href="a00306.html#a80d762e532d677dff262d83cc7bb1c60"> 2092</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00306.html#a80d762e532d677dff262d83cc7bb1c60">get_thisthread_cpubind</a>;</div>
505 <div class="line"><a name="l02094"></a><span class="lineno"><a class="line" href="a00306.html#a46fba33e307909ce256624687799dd6d"> 2094</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00306.html#a46fba33e307909ce256624687799dd6d">set_thread_cpubind</a>;</div>
506 <div class="line"><a name="l02096"></a><span class="lineno"><a class="line" href="a00306.html#a8dd4d8531ed2eebdce1507e7d104154e"> 2096</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00306.html#a8dd4d8531ed2eebdce1507e7d104154e">get_thread_cpubind</a>;</div>
507 <div class="line"><a name="l02098"></a><span class="lineno"><a class="line" href="a00306.html#ad2d5c94b738d92b7d2ede87e4e96321d"> 2098</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00306.html#ad2d5c94b738d92b7d2ede87e4e96321d">get_thisproc_last_cpu_location</a>;</div>
508 <div class="line"><a name="l02100"></a><span class="lineno"><a class="line" href="a00306.html#a2554620148b7992a5093f338f5ae254f"> 2100</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00306.html#a2554620148b7992a5093f338f5ae254f">get_proc_last_cpu_location</a>;</div>
509 <div class="line"><a name="l02102"></a><span class="lineno"><a class="line" href="a00306.html#a6be1f042fdce6bf41b4ea39f6f193808"> 2102</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00306.html#a6be1f042fdce6bf41b4ea39f6f193808">get_thisthread_last_cpu_location</a>;</div>
510 <div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160;};</div>
511 <div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>&#160; </div>
512 <div class="line"><a name="l02110"></a><span class="lineno"><a class="line" href="a00310.html"> 2110</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00310.html">hwloc_topology_membind_support</a> {</div>
513 <div class="line"><a name="l02112"></a><span class="lineno"><a class="line" href="a00310.html#a36b3e388df9c6a249427cab7e3724749"> 2112</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00310.html#a36b3e388df9c6a249427cab7e3724749">set_thisproc_membind</a>;</div>
514 <div class="line"><a name="l02114"></a><span class="lineno"><a class="line" href="a00310.html#a3fd51e6fa5f0dd800322301b46b08559"> 2114</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00310.html#a3fd51e6fa5f0dd800322301b46b08559">get_thisproc_membind</a>;</div>
515 <div class="line"><a name="l02116"></a><span class="lineno"><a class="line" href="a00310.html#a756f44912894b176bf979a1b65f12aac"> 2116</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00310.html#a756f44912894b176bf979a1b65f12aac">set_proc_membind</a>;</div>
516 <div class="line"><a name="l02118"></a><span class="lineno"><a class="line" href="a00310.html#a9880cd2d605e316fc020167c49ca69ad"> 2118</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00310.html#a9880cd2d605e316fc020167c49ca69ad">get_proc_membind</a>;</div>
517 <div class="line"><a name="l02120"></a><span class="lineno"><a class="line" href="a00310.html#a0697af2e41f2e82b8ce71e3cc13f7eac"> 2120</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00310.html#a0697af2e41f2e82b8ce71e3cc13f7eac">set_thisthread_membind</a>;</div>
518 <div class="line"><a name="l02122"></a><span class="lineno"><a class="line" href="a00310.html#a63b0b2e26157b472f5717ee93cc7c535"> 2122</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00310.html#a63b0b2e26157b472f5717ee93cc7c535">get_thisthread_membind</a>;</div>
519 <div class="line"><a name="l02124"></a><span class="lineno"><a class="line" href="a00310.html#a476c06f96b65c08b287cf2369966123b"> 2124</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00310.html#a476c06f96b65c08b287cf2369966123b">set_area_membind</a>;</div>
520 <div class="line"><a name="l02126"></a><span class="lineno"><a class="line" href="a00310.html#a0a84e24a06f2fa487fe8c9605c6f68b3"> 2126</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00310.html#a0a84e24a06f2fa487fe8c9605c6f68b3">get_area_membind</a>;</div>
521 <div class="line"><a name="l02128"></a><span class="lineno"><a class="line" href="a00310.html#ae551abb27d2aa9ce008583488b845b98"> 2128</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00310.html#ae551abb27d2aa9ce008583488b845b98">alloc_membind</a>;</div>
522 <div class="line"><a name="l02130"></a><span class="lineno"><a class="line" href="a00310.html#a221098c339dbfab27bd2c9f5d32f123b"> 2130</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00310.html#a221098c339dbfab27bd2c9f5d32f123b">firsttouch_membind</a>;</div>
523 <div class="line"><a name="l02132"></a><span class="lineno"><a class="line" href="a00310.html#ae7cdb1f1b5f0242a69f85b5a5538c764"> 2132</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00310.html#ae7cdb1f1b5f0242a69f85b5a5538c764">bind_membind</a>;</div>
524 <div class="line"><a name="l02134"></a><span class="lineno"><a class="line" href="a00310.html#a3c44c6012860bbeba8a0f4c19710858d"> 2134</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00310.html#a3c44c6012860bbeba8a0f4c19710858d">interleave_membind</a>;</div>
525 <div class="line"><a name="l02136"></a><span class="lineno"><a class="line" href="a00310.html#ab0921af6e0cd6975812a80b8e5c7435c"> 2136</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00310.html#ab0921af6e0cd6975812a80b8e5c7435c">nexttouch_membind</a>;</div>
526 <div class="line"><a name="l02138"></a><span class="lineno"><a class="line" href="a00310.html#aafa7683871a6a760246f9b35209caec5"> 2138</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00310.html#aafa7683871a6a760246f9b35209caec5">migrate_membind</a>;</div>
527 <div class="line"><a name="l02140"></a><span class="lineno"><a class="line" href="a00310.html#a30173553a68e0a4dd1672d26f8e892b1"> 2140</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00310.html#a30173553a68e0a4dd1672d26f8e892b1">get_area_memlocation</a>;</div>
528 <div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>&#160;};</div>
529 <div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>&#160; </div>
530 <div class="line"><a name="l02145"></a><span class="lineno"><a class="line" href="a00314.html"> 2145</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00314.html">hwloc_topology_misc_support</a> {</div>
531 <div class="line"><a name="l02147"></a><span class="lineno"><a class="line" href="a00314.html#adf54a6dbe8e9dd5033dfe9c93df726c4"> 2147</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00314.html#adf54a6dbe8e9dd5033dfe9c93df726c4">imported_support</a>;</div>
532 <div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>&#160;};</div>
533 <div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>&#160; </div>
534 <div class="line"><a name="l02156"></a><span class="lineno"><a class="line" href="a00318.html"> 2156</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00318.html">hwloc_topology_support</a> {</div>
535 <div class="line"><a name="l02157"></a><span class="lineno"><a class="line" href="a00318.html#aea3fbd7653d987d81f848636c420504d"> 2157</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00302.html">hwloc_topology_discovery_support</a> *<a class="code" href="a00318.html#aea3fbd7653d987d81f848636c420504d">discovery</a>;</div>
536 <div class="line"><a name="l02158"></a><span class="lineno"><a class="line" href="a00318.html#adef2bb91f74c3e70a2a071393caf5f56"> 2158</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00306.html">hwloc_topology_cpubind_support</a> *<a class="code" href="a00318.html#adef2bb91f74c3e70a2a071393caf5f56">cpubind</a>;</div>
537 <div class="line"><a name="l02159"></a><span class="lineno"><a class="line" href="a00318.html#ac6eb62ae8bc0a68dce679a7107a36194"> 2159</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00310.html">hwloc_topology_membind_support</a> *<a class="code" href="a00318.html#ac6eb62ae8bc0a68dce679a7107a36194">membind</a>;</div>
538 <div class="line"><a name="l02160"></a><span class="lineno"><a class="line" href="a00318.html#ab9d08df4b0b03994f21b893ece826e78"> 2160</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00314.html">hwloc_topology_misc_support</a> *<a class="code" href="a00318.html#ab9d08df4b0b03994f21b893ece826e78">misc</a>;</div>
539 <div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>&#160;};</div>
540 <div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>&#160; </div>
541 <div class="line"><a name="l02184"></a><span class="lineno"><a class="line" href="a00202.html#gab8c76173c4a8ce1a9a9366012b1388e6"> 2184</a></span>&#160;HWLOC_DECLSPEC <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="a00318.html">hwloc_topology_support</a> *<a class="code" href="a00202.html#gab8c76173c4a8ce1a9a9366012b1388e6">hwloc_topology_get_support</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> __hwloc_restrict topology);</div>
542 <div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>&#160; </div>
543 <div class="line"><a name="l02195"></a><span class="lineno"><a class="line" href="a00202.html#ga9a5a1f0140cd1952544477833733195b"> 2195</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00202.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> {</div>
544 <div class="line"><a name="l02201"></a><span class="lineno"><a class="line" href="a00202.html#gga9a5a1f0140cd1952544477833733195bafda7b59e6810dfe778d8f9a4cc1e350e"> 2201</a></span>&#160; <a class="code" href="a00202.html#gga9a5a1f0140cd1952544477833733195bafda7b59e6810dfe778d8f9a4cc1e350e">HWLOC_TYPE_FILTER_KEEP_ALL</a> = 0,</div>
545 <div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>&#160; </div>
546 <div class="line"><a name="l02209"></a><span class="lineno"><a class="line" href="a00202.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a"> 2209</a></span>&#160; <a class="code" href="a00202.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a">HWLOC_TYPE_FILTER_KEEP_NONE</a> = 1,</div>
547 <div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>&#160; </div>
548 <div class="line"><a name="l02223"></a><span class="lineno"><a class="line" href="a00202.html#gga9a5a1f0140cd1952544477833733195ba7664716643bf1db83e631eed34f659e4"> 2223</a></span>&#160; <a class="code" href="a00202.html#gga9a5a1f0140cd1952544477833733195ba7664716643bf1db83e631eed34f659e4">HWLOC_TYPE_FILTER_KEEP_STRUCTURE</a> = 2,</div>
549 <div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>&#160; </div>
550 <div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>&#160; <a class="code" href="a00202.html#gga9a5a1f0140cd1952544477833733195ba63fd24954e18c83ff7eae9588759adb5">HWLOC_TYPE_FILTER_KEEP_IMPORTANT</a> = 3</div>
551 <div class="line"><a name="l02239"></a><span class="lineno"><a class="line" href="a00202.html#gga9a5a1f0140cd1952544477833733195ba63fd24954e18c83ff7eae9588759adb5"> 2239</a></span>&#160;};</div>
552 <div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>&#160; </div>
553 <div class="line"><a name="l02243"></a><span class="lineno"><a class="line" href="a00202.html#gad894e70f15f8d4aada7be8d1aba38b7e"> 2243</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00202.html#gad894e70f15f8d4aada7be8d1aba38b7e">hwloc_topology_set_type_filter</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, <span class="keyword">enum</span> <a class="code" href="a00202.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter);</div>
554 <div class="line"><a name="l02244"></a><span class="lineno"> 2244</span>&#160; </div>
555 <div class="line"><a name="l02247"></a><span class="lineno"><a class="line" href="a00202.html#ga137ad1178f7a79f2383974d983083401"> 2247</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00202.html#ga137ad1178f7a79f2383974d983083401">hwloc_topology_get_type_filter</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, <span class="keyword">enum</span> <a class="code" href="a00202.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> *filter);</div>
556 <div class="line"><a name="l02248"></a><span class="lineno"> 2248</span>&#160; </div>
557 <div class="line"><a name="l02253"></a><span class="lineno"><a class="line" href="a00202.html#ga9eb8dc3b106f84921bf5789101e97e24"> 2253</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00202.html#ga9eb8dc3b106f84921bf5789101e97e24">hwloc_topology_set_all_types_filter</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">enum</span> <a class="code" href="a00202.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter);</div>
558 <div class="line"><a name="l02254"></a><span class="lineno"> 2254</span>&#160; </div>
559 <div class="line"><a name="l02259"></a><span class="lineno"><a class="line" href="a00202.html#ga30bd6d330fe3c8f0cbaad724d114ee20"> 2259</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00202.html#ga30bd6d330fe3c8f0cbaad724d114ee20">hwloc_topology_set_cache_types_filter</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">enum</span> <a class="code" href="a00202.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter);</div>
560 <div class="line"><a name="l02260"></a><span class="lineno"> 2260</span>&#160; </div>
561 <div class="line"><a name="l02265"></a><span class="lineno"><a class="line" href="a00202.html#ga37c7b2e599ed3cd76ad9164630024f30"> 2265</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00202.html#ga37c7b2e599ed3cd76ad9164630024f30">hwloc_topology_set_icache_types_filter</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">enum</span> <a class="code" href="a00202.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter);</div>
562 <div class="line"><a name="l02266"></a><span class="lineno"> 2266</span>&#160; </div>
563 <div class="line"><a name="l02269"></a><span class="lineno"><a class="line" href="a00202.html#ga0ab38705357bc1203abe829da8a12ad3"> 2269</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00202.html#ga0ab38705357bc1203abe829da8a12ad3">hwloc_topology_set_io_types_filter</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">enum</span> <a class="code" href="a00202.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter);</div>
564 <div class="line"><a name="l02270"></a><span class="lineno"> 2270</span>&#160; </div>
565 <div class="line"><a name="l02281"></a><span class="lineno"><a class="line" href="a00202.html#ga2cc7b7b155cba58dda203e54f1637b9c"> 2281</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> <a class="code" href="a00202.html#ga2cc7b7b155cba58dda203e54f1637b9c">hwloc_topology_set_userdata</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">const</span> <span class="keywordtype">void</span> *userdata);</div>
566 <div class="line"><a name="l02282"></a><span class="lineno"> 2282</span>&#160; </div>
567 <div class="line"><a name="l02288"></a><span class="lineno"><a class="line" href="a00202.html#ga91f992f8d6c4905b2d3c4f43e509c2a3"> 2288</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> * <a class="code" href="a00202.html#ga91f992f8d6c4905b2d3c4f43e509c2a3">hwloc_topology_get_userdata</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology);</div>
568 <div class="line"><a name="l02289"></a><span class="lineno"> 2289</span>&#160; </div>
569 <div class="line"><a name="l02299"></a><span class="lineno"><a class="line" href="a00203.html#ga9d80f08eb25b7ac22f1b998dc8bf521f"> 2299</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00203.html#ga9d80f08eb25b7ac22f1b998dc8bf521f">hwloc_restrict_flags_e</a> {</div>
570 <div class="line"><a name="l02305"></a><span class="lineno"><a class="line" href="a00203.html#gga9d80f08eb25b7ac22f1b998dc8bf521fa80eeb9cbba401ab050f8fb4573725891"> 2305</a></span>&#160; <a class="code" href="a00203.html#gga9d80f08eb25b7ac22f1b998dc8bf521fa80eeb9cbba401ab050f8fb4573725891">HWLOC_RESTRICT_FLAG_REMOVE_CPULESS</a> = (1UL&lt;&lt;0),</div>
571 <div class="line"><a name="l02306"></a><span class="lineno"> 2306</span>&#160; </div>
572 <div class="line"><a name="l02311"></a><span class="lineno"><a class="line" href="a00203.html#gga9d80f08eb25b7ac22f1b998dc8bf521fae4c5b1b87232f2d8a60559e77ac65a68"> 2311</a></span>&#160; <a class="code" href="a00203.html#gga9d80f08eb25b7ac22f1b998dc8bf521fae4c5b1b87232f2d8a60559e77ac65a68">HWLOC_RESTRICT_FLAG_BYNODESET</a> = (1UL&lt;&lt;3),</div>
573 <div class="line"><a name="l02312"></a><span class="lineno"> 2312</span>&#160; </div>
574 <div class="line"><a name="l02318"></a><span class="lineno"><a class="line" href="a00203.html#gga9d80f08eb25b7ac22f1b998dc8bf521faf5ba49808855704bfe9cb9fe7347f93b"> 2318</a></span>&#160; <a class="code" href="a00203.html#gga9d80f08eb25b7ac22f1b998dc8bf521faf5ba49808855704bfe9cb9fe7347f93b">HWLOC_RESTRICT_FLAG_REMOVE_MEMLESS</a> = (1UL&lt;&lt;4),</div>
575 <div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>&#160; </div>
576 <div class="line"><a name="l02324"></a><span class="lineno"><a class="line" href="a00203.html#gga9d80f08eb25b7ac22f1b998dc8bf521fa699969227a09bbc1a7de51dc9fb7be4b"> 2324</a></span>&#160; <a class="code" href="a00203.html#gga9d80f08eb25b7ac22f1b998dc8bf521fa699969227a09bbc1a7de51dc9fb7be4b">HWLOC_RESTRICT_FLAG_ADAPT_MISC</a> = (1UL&lt;&lt;1),</div>
577 <div class="line"><a name="l02325"></a><span class="lineno"> 2325</span>&#160; </div>
578 <div class="line"><a name="l02330"></a><span class="lineno"> 2330</span>&#160; <a class="code" href="a00203.html#gga9d80f08eb25b7ac22f1b998dc8bf521faa95d6985e36ec1e55f68b210297a85cb">HWLOC_RESTRICT_FLAG_ADAPT_IO</a> = (1UL&lt;&lt;2)</div>
579 <div class="line"><a name="l02331"></a><span class="lineno"><a class="line" href="a00203.html#gga9d80f08eb25b7ac22f1b998dc8bf521faa95d6985e36ec1e55f68b210297a85cb"> 2331</a></span>&#160;};</div>
580 <div class="line"><a name="l02332"></a><span class="lineno"> 2332</span>&#160; </div>
581 <div class="line"><a name="l02357"></a><span class="lineno"><a class="line" href="a00203.html#ga6db81ed13ac0a9d70cc80372ab537815"> 2357</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00203.html#ga6db81ed13ac0a9d70cc80372ab537815">hwloc_topology_restrict</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> __hwloc_restrict topology, <a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
582 <div class="line"><a name="l02358"></a><span class="lineno"> 2358</span>&#160; </div>
583 <div class="line"><a name="l02360"></a><span class="lineno"><a class="line" href="a00203.html#ga38b1be3922094d880f6e76bf56c973d6"> 2360</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00203.html#ga38b1be3922094d880f6e76bf56c973d6">hwloc_allow_flags_e</a> {</div>
584 <div class="line"><a name="l02365"></a><span class="lineno"><a class="line" href="a00203.html#gga38b1be3922094d880f6e76bf56c973d6aca107692455774f9d323d21b8abfce72"> 2365</a></span>&#160; <a class="code" href="a00203.html#gga38b1be3922094d880f6e76bf56c973d6aca107692455774f9d323d21b8abfce72">HWLOC_ALLOW_FLAG_ALL</a> = (1UL&lt;&lt;0),</div>
585 <div class="line"><a name="l02366"></a><span class="lineno"> 2366</span>&#160; </div>
586 <div class="line"><a name="l02374"></a><span class="lineno"><a class="line" href="a00203.html#gga38b1be3922094d880f6e76bf56c973d6a88c50088c09dcf1e1a496c0817556fb9"> 2374</a></span>&#160; <a class="code" href="a00203.html#gga38b1be3922094d880f6e76bf56c973d6a88c50088c09dcf1e1a496c0817556fb9">HWLOC_ALLOW_FLAG_LOCAL_RESTRICTIONS</a> = (1UL&lt;&lt;1),</div>
587 <div class="line"><a name="l02375"></a><span class="lineno"> 2375</span>&#160; </div>
588 <div class="line"><a name="l02378"></a><span class="lineno"> 2378</span>&#160; <a class="code" href="a00203.html#gga38b1be3922094d880f6e76bf56c973d6a489c8c1b67ce7e0b8cf7a665852760e1">HWLOC_ALLOW_FLAG_CUSTOM</a> = (1UL&lt;&lt;2)</div>
589 <div class="line"><a name="l02379"></a><span class="lineno"><a class="line" href="a00203.html#gga38b1be3922094d880f6e76bf56c973d6a489c8c1b67ce7e0b8cf7a665852760e1"> 2379</a></span>&#160;};</div>
590 <div class="line"><a name="l02380"></a><span class="lineno"> 2380</span>&#160; </div>
591 <div class="line"><a name="l02396"></a><span class="lineno"><a class="line" href="a00203.html#gaf955b190c0299dcfb5bc985d777f92a1"> 2396</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00203.html#gaf955b190c0299dcfb5bc985d777f92a1">hwloc_topology_allow</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> __hwloc_restrict topology, <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> cpuset, <a class="code" href="a00192.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> nodeset, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
592 <div class="line"><a name="l02397"></a><span class="lineno"> 2397</span>&#160; </div>
593 <div class="line"><a name="l02419"></a><span class="lineno"><a class="line" href="a00203.html#gad980782ade737900c5cf208946768c30"> 2419</a></span>&#160;HWLOC_DECLSPEC <a class="code" href="a00250.html">hwloc_obj_t</a> <a class="code" href="a00203.html#gad980782ade737900c5cf208946768c30">hwloc_topology_insert_misc_object</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00250.html">hwloc_obj_t</a> parent, <span class="keyword">const</span> <span class="keywordtype">char</span> *name);</div>
594 <div class="line"><a name="l02420"></a><span class="lineno"> 2420</span>&#160; </div>
595 <div class="line"><a name="l02428"></a><span class="lineno"><a class="line" href="a00203.html#ga4cea4741165faf5323931a9ed8786ef7"> 2428</a></span>&#160;HWLOC_DECLSPEC <a class="code" href="a00250.html">hwloc_obj_t</a> <a class="code" href="a00203.html#ga4cea4741165faf5323931a9ed8786ef7">hwloc_topology_alloc_group_object</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology);</div>
596 <div class="line"><a name="l02429"></a><span class="lineno"> 2429</span>&#160; </div>
597 <div class="line"><a name="l02476"></a><span class="lineno"><a class="line" href="a00203.html#ga1fc6012b3e1c249b83f48cb7bcacaa5b"> 2476</a></span>&#160;HWLOC_DECLSPEC <a class="code" href="a00250.html">hwloc_obj_t</a> <a class="code" href="a00203.html#ga1fc6012b3e1c249b83f48cb7bcacaa5b">hwloc_topology_insert_group_object</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00250.html">hwloc_obj_t</a> group);</div>
598 <div class="line"><a name="l02477"></a><span class="lineno"> 2477</span>&#160; </div>
599 <div class="line"><a name="l02487"></a><span class="lineno"><a class="line" href="a00203.html#gad458715d3335df44849216cc123d1055"> 2487</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00203.html#gad458715d3335df44849216cc123d1055">hwloc_obj_add_other_obj_sets</a>(<a class="code" href="a00250.html">hwloc_obj_t</a> dst, <a class="code" href="a00250.html">hwloc_obj_t</a> src);</div>
600 <div class="line"><a name="l02488"></a><span class="lineno"> 2488</span>&#160; </div>
601 <div class="line"><a name="l02503"></a><span class="lineno"><a class="line" href="a00203.html#ga698ecd640d2b76742bba3829a145cd9a"> 2503</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00203.html#ga698ecd640d2b76742bba3829a145cd9a">hwloc_topology_refresh</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology);</div>
602 <div class="line"><a name="l02504"></a><span class="lineno"> 2504</span>&#160; </div>
603 <div class="line"><a name="l02509"></a><span class="lineno"> 2509</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
604 <div class="line"><a name="l02510"></a><span class="lineno"> 2510</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
605 <div class="line"><a name="l02511"></a><span class="lineno"> 2511</span>&#160;<span class="preprocessor">#endif</span></div>
606 <div class="line"><a name="l02512"></a><span class="lineno"> 2512</span>&#160; </div>
607 <div class="line"><a name="l02513"></a><span class="lineno"> 2513</span>&#160; </div>
608 <div class="line"><a name="l02514"></a><span class="lineno"> 2514</span>&#160;<span class="comment">/* high-level helpers */</span></div>
609 <div class="line"><a name="l02515"></a><span class="lineno"> 2515</span>&#160;<span class="preprocessor">#include &quot;hwloc/helper.h&quot;</span></div>
610 <div class="line"><a name="l02516"></a><span class="lineno"> 2516</span>&#160; </div>
611 <div class="line"><a name="l02517"></a><span class="lineno"> 2517</span>&#160;<span class="comment">/* inline code of some functions above */</span></div>
612 <div class="line"><a name="l02518"></a><span class="lineno"> 2518</span>&#160;<span class="preprocessor">#include &quot;hwloc/inlines.h&quot;</span></div>
613 <div class="line"><a name="l02519"></a><span class="lineno"> 2519</span>&#160; </div>
614 <div class="line"><a name="l02520"></a><span class="lineno"> 2520</span>&#160;<span class="comment">/* memory attributes */</span></div>
615 <div class="line"><a name="l02521"></a><span class="lineno"> 2521</span>&#160;<span class="preprocessor">#include &quot;hwloc/memattrs.h&quot;</span></div>
616 <div class="line"><a name="l02522"></a><span class="lineno"> 2522</span>&#160; </div>
617 <div class="line"><a name="l02523"></a><span class="lineno"> 2523</span>&#160;<span class="comment">/* kinds of CPU cores */</span></div>
618 <div class="line"><a name="l02524"></a><span class="lineno"> 2524</span>&#160;<span class="preprocessor">#include &quot;hwloc/cpukinds.h&quot;</span></div>
619 <div class="line"><a name="l02525"></a><span class="lineno"> 2525</span>&#160; </div>
620 <div class="line"><a name="l02526"></a><span class="lineno"> 2526</span>&#160;<span class="comment">/* exporting to XML or synthetic */</span></div>
621 <div class="line"><a name="l02527"></a><span class="lineno"> 2527</span>&#160;<span class="preprocessor">#include &quot;hwloc/export.h&quot;</span></div>
622 <div class="line"><a name="l02528"></a><span class="lineno"> 2528</span>&#160; </div>
623 <div class="line"><a name="l02529"></a><span class="lineno"> 2529</span>&#160;<span class="comment">/* distances */</span></div>
624 <div class="line"><a name="l02530"></a><span class="lineno"> 2530</span>&#160;<span class="preprocessor">#include &quot;hwloc/distances.h&quot;</span></div>
625 <div class="line"><a name="l02531"></a><span class="lineno"> 2531</span>&#160; </div>
626 <div class="line"><a name="l02532"></a><span class="lineno"> 2532</span>&#160;<span class="comment">/* topology diffs */</span></div>
627 <div class="line"><a name="l02533"></a><span class="lineno"> 2533</span>&#160;<span class="preprocessor">#include &quot;hwloc/diff.h&quot;</span></div>
628 <div class="line"><a name="l02534"></a><span class="lineno"> 2534</span>&#160; </div>
629 <div class="line"><a name="l02535"></a><span class="lineno"> 2535</span>&#160;<span class="comment">/* deprecated headers */</span></div>
630 <div class="line"><a name="l02536"></a><span class="lineno"> 2536</span>&#160;<span class="preprocessor">#include &quot;hwloc/deprecated.h&quot;</span></div>
631 <div class="line"><a name="l02537"></a><span class="lineno"> 2537</span>&#160; </div>
632 <div class="line"><a name="l02538"></a><span class="lineno"> 2538</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_H */</span><span class="preprocessor"></span></div>
633 <div class="ttc" id="aa00191_html_ga9c0b50c98add1adf57ed1ce85bb5190d"><div class="ttname"><a href="a00191.html#ga9c0b50c98add1adf57ed1ce85bb5190d">hwloc_get_api_version</a></div><div class="ttdeci">unsigned hwloc_get_api_version(void)</div><div class="ttdoc">Indicate at runtime which hwloc API version was used at build time.</div></div>
634 <div class="ttc" id="aa00192_html_ga1f784433e9b606261f62d1134f6a3b25"><div class="ttname"><a href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a></div><div class="ttdeci">hwloc_const_bitmap_t hwloc_const_cpuset_t</div><div class="ttdoc">A non-modifiable hwloc_cpuset_t.</div><div class="ttdef"><b>Definition:</b> hwloc.h:142</div></div>
635 <div class="ttc" id="aa00192_html_ga2f5276235841ad66a79bedad16a5a10c"><div class="ttname"><a href="a00192.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a></div><div class="ttdeci">hwloc_const_bitmap_t hwloc_const_nodeset_t</div><div class="ttdoc">A non-modifiable hwloc_nodeset_t.</div><div class="ttdef"><b>Definition:</b> hwloc.h:160</div></div>
636 <div class="ttc" id="aa00192_html_ga37e35730fa7e775b5bb0afe893d6d508"><div class="ttname"><a href="a00192.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_nodeset_t</div><div class="ttdoc">A node set is a bitmap whose bits are set according to NUMA memory node physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:157</div></div>
637 <div class="ttc" id="aa00192_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
638 <div class="ttc" id="aa00193_html_ga1820ea0dfd8e9dca28f9ea7624df5ae2"><div class="ttname"><a href="a00193.html#ga1820ea0dfd8e9dca28f9ea7624df5ae2">hwloc_compare_types</a></div><div class="ttdeci">int hwloc_compare_types(hwloc_obj_type_t type1, hwloc_obj_type_t type2)</div><div class="ttdoc">Compare the depth of two object types.</div></div>
639 <div class="ttc" id="aa00193_html_ga48a4803c72574191d7ead1c62aaf9860"><div class="ttname"><a href="a00193.html#ga48a4803c72574191d7ead1c62aaf9860">hwloc_obj_bridge_type_e</a></div><div class="ttdeci">hwloc_obj_bridge_type_e</div><div class="ttdoc">Type of one side (upstream or downstream) of an I/O bridge.</div><div class="ttdef"><b>Definition:</b> hwloc.h:333</div></div>
640 <div class="ttc" id="aa00193_html_ga552ec74296a024237f474acec98694c0"><div class="ttname"><a href="a00193.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a></div><div class="ttdeci">enum hwloc_obj_cache_type_e hwloc_obj_cache_type_t</div><div class="ttdoc">Cache type.</div></div>
641 <div class="ttc" id="aa00193_html_ga64f5d539df299c97ae80ce53fc4b56c0"><div class="ttname"><a href="a00193.html#ga64f5d539df299c97ae80ce53fc4b56c0">hwloc_obj_osdev_type_e</a></div><div class="ttdeci">hwloc_obj_osdev_type_e</div><div class="ttdoc">Type of a OS device.</div><div class="ttdef"><b>Definition:</b> hwloc.h:339</div></div>
642 <div class="ttc" id="aa00193_html_ga791c9875c8fe20f3e1e5871e0657e59b"><div class="ttname"><a href="a00193.html#ga791c9875c8fe20f3e1e5871e0657e59b">hwloc_obj_cache_type_e</a></div><div class="ttdeci">hwloc_obj_cache_type_e</div><div class="ttdoc">Cache type.</div><div class="ttdef"><b>Definition:</b> hwloc.h:326</div></div>
643 <div class="ttc" id="aa00193_html_gaa9a6941ef7b1c169412518d7ef71b3d2"><div class="ttname"><a href="a00193.html#gaa9a6941ef7b1c169412518d7ef71b3d2">hwloc_obj_osdev_type_t</a></div><div class="ttdeci">enum hwloc_obj_osdev_type_e hwloc_obj_osdev_type_t</div><div class="ttdoc">Type of a OS device.</div></div>
644 <div class="ttc" id="aa00193_html_gab34362c7a23296c3f12c5756747abda3"><div class="ttname"><a href="a00193.html#gab34362c7a23296c3f12c5756747abda3">hwloc_obj_bridge_type_t</a></div><div class="ttdeci">enum hwloc_obj_bridge_type_e hwloc_obj_bridge_type_t</div><div class="ttdoc">Type of one side (upstream or downstream) of an I/O bridge.</div></div>
645 <div class="ttc" id="aa00193_html_gacd37bb612667dc437d66bfb175a8dc55"><div class="ttname"><a href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a></div><div class="ttdeci">hwloc_obj_type_t</div><div class="ttdoc">Type of topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:176</div></div>
646 <div class="ttc" id="aa00193_html_gga48a4803c72574191d7ead1c62aaf9860a2c7660f3864ad2810c1e72aad285e574"><div class="ttname"><a href="a00193.html#gga48a4803c72574191d7ead1c62aaf9860a2c7660f3864ad2810c1e72aad285e574">HWLOC_OBJ_BRIDGE_HOST</a></div><div class="ttdeci">@ HWLOC_OBJ_BRIDGE_HOST</div><div class="ttdoc">Host-side of a bridge, only possible upstream.</div><div class="ttdef"><b>Definition:</b> hwloc.h:334</div></div>
647 <div class="ttc" id="aa00193_html_gga48a4803c72574191d7ead1c62aaf9860a8f3b4cecf3dab6073d74696d10863c60"><div class="ttname"><a href="a00193.html#gga48a4803c72574191d7ead1c62aaf9860a8f3b4cecf3dab6073d74696d10863c60">HWLOC_OBJ_BRIDGE_PCI</a></div><div class="ttdeci">@ HWLOC_OBJ_BRIDGE_PCI</div><div class="ttdoc">PCI-side of a bridge.</div><div class="ttdef"><b>Definition:</b> hwloc.h:335</div></div>
648 <div class="ttc" id="aa00193_html_gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83"><div class="ttname"><a href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83">HWLOC_OBJ_OSDEV_COPROC</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_COPROC</div><div class="ttdoc">Operating system co-processor device. For instance &quot;opencl0d0&quot; for a OpenCL device,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:352</div></div>
649 <div class="ttc" id="aa00193_html_gga64f5d539df299c97ae80ce53fc4b56c0a52157d03694fdae82dddd57ca8c973b6"><div class="ttname"><a href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0a52157d03694fdae82dddd57ca8c973b6">HWLOC_OBJ_OSDEV_OPENFABRICS</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_OPENFABRICS</div><div class="ttdoc">Operating system openfabrics device. For instance the &quot;mlx4_0&quot; InfiniBand HCA, or &quot;hfi1_0&quot; Omni-Path ...</div><div class="ttdef"><b>Definition:</b> hwloc.h:347</div></div>
650 <div class="ttc" id="aa00193_html_gga64f5d539df299c97ae80ce53fc4b56c0a689b0488c3c0d08d116751c6b9cb8871"><div class="ttname"><a href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0a689b0488c3c0d08d116751c6b9cb8871">HWLOC_OBJ_OSDEV_BLOCK</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_BLOCK</div><div class="ttdoc">Operating system block device, or non-volatile memory device. For instance &quot;sda&quot; or &quot;dax2....</div><div class="ttdef"><b>Definition:</b> hwloc.h:340</div></div>
651 <div class="ttc" id="aa00193_html_gga64f5d539df299c97ae80ce53fc4b56c0a827ad1643360711a8b6c6af671366791"><div class="ttname"><a href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0a827ad1643360711a8b6c6af671366791">HWLOC_OBJ_OSDEV_DMA</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_DMA</div><div class="ttdoc">Operating system dma engine device. For instance the &quot;dma0chan0&quot; DMA channel on Linux.</div><div class="ttdef"><b>Definition:</b> hwloc.h:350</div></div>
652 <div class="ttc" id="aa00193_html_gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90"><div class="ttname"><a href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90">HWLOC_OBJ_OSDEV_GPU</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_GPU</div><div class="ttdoc">Operating system GPU device. For instance &quot;:0.0&quot; for a GL display, &quot;card0&quot; for a Linux DRM device.</div><div class="ttdef"><b>Definition:</b> hwloc.h:342</div></div>
653 <div class="ttc" id="aa00193_html_gga64f5d539df299c97ae80ce53fc4b56c0ab715d81155f771573c8682dffc65021b"><div class="ttname"><a href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0ab715d81155f771573c8682dffc65021b">HWLOC_OBJ_OSDEV_NETWORK</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_NETWORK</div><div class="ttdoc">Operating system network device. For instance the &quot;eth0&quot; interface on Linux.</div><div class="ttdef"><b>Definition:</b> hwloc.h:345</div></div>
654 <div class="ttc" id="aa00193_html_gga791c9875c8fe20f3e1e5871e0657e59ba3900b3b2db54941aac249e5a638a2d7a"><div class="ttname"><a href="a00193.html#gga791c9875c8fe20f3e1e5871e0657e59ba3900b3b2db54941aac249e5a638a2d7a">HWLOC_OBJ_CACHE_UNIFIED</a></div><div class="ttdeci">@ HWLOC_OBJ_CACHE_UNIFIED</div><div class="ttdoc">Unified cache.</div><div class="ttdef"><b>Definition:</b> hwloc.h:327</div></div>
655 <div class="ttc" id="aa00193_html_gga791c9875c8fe20f3e1e5871e0657e59ba6f98b0d422b38ba90c5f5c79a11b0658"><div class="ttname"><a href="a00193.html#gga791c9875c8fe20f3e1e5871e0657e59ba6f98b0d422b38ba90c5f5c79a11b0658">HWLOC_OBJ_CACHE_INSTRUCTION</a></div><div class="ttdeci">@ HWLOC_OBJ_CACHE_INSTRUCTION</div><div class="ttdoc">Instruction cache (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:329</div></div>
656 <div class="ttc" id="aa00193_html_gga791c9875c8fe20f3e1e5871e0657e59bacac60ecad4206f85aeb79bef1604b488"><div class="ttname"><a href="a00193.html#gga791c9875c8fe20f3e1e5871e0657e59bacac60ecad4206f85aeb79bef1604b488">HWLOC_OBJ_CACHE_DATA</a></div><div class="ttdeci">@ HWLOC_OBJ_CACHE_DATA</div><div class="ttdoc">Data cache.</div><div class="ttdef"><b>Definition:</b> hwloc.h:328</div></div>
657 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55a0ed5bd98974729a0c476c39e917dabd6"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a0ed5bd98974729a0c476c39e917dabd6">HWLOC_OBJ_MEMCACHE</a></div><div class="ttdeci">@ HWLOC_OBJ_MEMCACHE</div><div class="ttdoc">Memory-side cache (filtered out by default). A cache in front of a specific NUMA node.</div><div class="ttdef"><b>Definition:</b> hwloc.h:305</div></div>
658 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55a10713b7e561b8cc32544cd31b1c17f8d"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a10713b7e561b8cc32544cd31b1c17f8d">HWLOC_OBJ_L2ICACHE</a></div><div class="ttdeci">@ HWLOC_OBJ_L2ICACHE</div><div class="ttdoc">Level 2 instruction Cache (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:220</div></div>
659 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55a18f61d19fe9f4bcea978fcc68bc078fb"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a18f61d19fe9f4bcea978fcc68bc078fb">HWLOC_OBJ_L2CACHE</a></div><div class="ttdeci">@ HWLOC_OBJ_L2CACHE</div><div class="ttdoc">Level 2 Data (or Unified) Cache.</div><div class="ttdef"><b>Definition:</b> hwloc.h:214</div></div>
660 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55a19f8a6953fa91efc76bcbcdf2d22de4d"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a19f8a6953fa91efc76bcbcdf2d22de4d">HWLOC_OBJ_MISC</a></div><div class="ttdeci">@ HWLOC_OBJ_MISC</div><div class="ttdoc">Miscellaneous objects (filtered out by default). Objects without particular meaning,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:290</div></div>
661 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55a25fae0e0514c90e3973a29866a5a837d"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a25fae0e0514c90e3973a29866a5a837d">HWLOC_OBJ_L3CACHE</a></div><div class="ttdeci">@ HWLOC_OBJ_L3CACHE</div><div class="ttdoc">Level 3 Data (or Unified) Cache.</div><div class="ttdef"><b>Definition:</b> hwloc.h:215</div></div>
662 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55a3f4e83ffc4a259354959ae8a9eaa2a80"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a3f4e83ffc4a259354959ae8a9eaa2a80">HWLOC_OBJ_MACHINE</a></div><div class="ttdeci">@ HWLOC_OBJ_MACHINE</div><div class="ttdoc">Machine. A set of processors and memory with cache coherency.</div><div class="ttdef"><b>Definition:</b> hwloc.h:182</div></div>
663 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075">HWLOC_OBJ_OS_DEVICE</a></div><div class="ttdeci">@ HWLOC_OBJ_OS_DEVICE</div><div class="ttdoc">Operating system device (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:279</div></div>
664 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55a5269ef95be72f88465559d35c9b7ad56"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a5269ef95be72f88465559d35c9b7ad56">HWLOC_OBJ_GROUP</a></div><div class="ttdeci">@ HWLOC_OBJ_GROUP</div><div class="ttdoc">Group objects. Objects which do not fit in the above but are detected by hwloc and are useful to take...</div><div class="ttdef"><b>Definition:</b> hwloc.h:223</div></div>
665 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55a54923bfa13df9d7e6d6dd0d5baff5f72"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a54923bfa13df9d7e6d6dd0d5baff5f72">HWLOC_OBJ_L4CACHE</a></div><div class="ttdeci">@ HWLOC_OBJ_L4CACHE</div><div class="ttdoc">Level 4 Data (or Unified) Cache.</div><div class="ttdef"><b>Definition:</b> hwloc.h:216</div></div>
666 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55a56389b8eb2e2f74f288bb657c4e72140"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a56389b8eb2e2f74f288bb657c4e72140">HWLOC_OBJ_L1CACHE</a></div><div class="ttdeci">@ HWLOC_OBJ_L1CACHE</div><div class="ttdoc">Level 1 Data (or Unified) Cache.</div><div class="ttdef"><b>Definition:</b> hwloc.h:213</div></div>
667 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div><div class="ttdeci">@ HWLOC_OBJ_PCI_DEVICE</div><div class="ttdoc">PCI device (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:269</div></div>
668 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55a67194c9de5e3e581c64c11d2eb1c109d"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a67194c9de5e3e581c64c11d2eb1c109d">HWLOC_OBJ_L5CACHE</a></div><div class="ttdeci">@ HWLOC_OBJ_L5CACHE</div><div class="ttdoc">Level 5 Data (or Unified) Cache.</div><div class="ttdef"><b>Definition:</b> hwloc.h:217</div></div>
669 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0">HWLOC_OBJ_BRIDGE</a></div><div class="ttdeci">@ HWLOC_OBJ_BRIDGE</div><div class="ttdoc">Bridge (filtered out by default). Any bridge (or PCI switch) that connects the host or an I/O bus,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:257</div></div>
670 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a></div><div class="ttdeci">@ HWLOC_OBJ_NUMANODE</div><div class="ttdoc">NUMA node. An object that contains memory that is directly and byte-accessible to the host processors...</div><div class="ttdef"><b>Definition:</b> hwloc.h:236</div></div>
671 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55ab16ab8c0dbffc234921d86f3dfb63129"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55ab16ab8c0dbffc234921d86f3dfb63129">HWLOC_OBJ_PACKAGE</a></div><div class="ttdeci">@ HWLOC_OBJ_PACKAGE</div><div class="ttdoc">Physical package. The physical package that usually gets inserted into a socket on the motherboard....</div><div class="ttdef"><b>Definition:</b> hwloc.h:191</div></div>
672 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661">HWLOC_OBJ_PU</a></div><div class="ttdeci">@ HWLOC_OBJ_PU</div><div class="ttdoc">Processing Unit, or (Logical) Processor. An execution unit (may share a core with some other logical ...</div><div class="ttdef"><b>Definition:</b> hwloc.h:201</div></div>
673 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55ac22850c717f07bf7ffb316fadd08d218"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55ac22850c717f07bf7ffb316fadd08d218">HWLOC_OBJ_L3ICACHE</a></div><div class="ttdeci">@ HWLOC_OBJ_L3ICACHE</div><div class="ttdoc">Level 3 instruction Cache (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:221</div></div>
674 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55ac793958f330bca371aa1535de8aff45f"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55ac793958f330bca371aa1535de8aff45f">HWLOC_OBJ_CORE</a></div><div class="ttdeci">@ HWLOC_OBJ_CORE</div><div class="ttdoc">Core. A computation unit (may be shared by several PUs, aka logical processors).</div><div class="ttdef"><b>Definition:</b> hwloc.h:197</div></div>
675 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55af78bb6cde53aaaaa162a7dc420c409da"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55af78bb6cde53aaaaa162a7dc420c409da">HWLOC_OBJ_DIE</a></div><div class="ttdeci">@ HWLOC_OBJ_DIE</div><div class="ttdoc">Die within a physical package. A subpart of the physical package, that contains multiple cores.</div><div class="ttdef"><b>Definition:</b> hwloc.h:318</div></div>
676 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55afa834a85d9e53836cf0db6d0bd8329b4"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55afa834a85d9e53836cf0db6d0bd8329b4">HWLOC_OBJ_L1ICACHE</a></div><div class="ttdeci">@ HWLOC_OBJ_L1ICACHE</div><div class="ttdoc">Level 1 instruction Cache (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:219</div></div>
677 <div class="ttc" id="aa00194_html_ga79b8ab56877ef99ac59b833203391c7d"><div class="ttname"><a href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a></div><div class="ttdeci">struct hwloc_obj * hwloc_obj_t</div><div class="ttdoc">Convenience typedef; a pointer to a struct hwloc_obj.</div><div class="ttdef"><b>Definition:</b> hwloc.h:595</div></div>
678 <div class="ttc" id="aa00195_html_ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa"><div class="ttname"><a href="a00195.html#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa">hwloc_topology_init</a></div><div class="ttdeci">int hwloc_topology_init(hwloc_topology_t *topologyp)</div><div class="ttdoc">Allocate a topology context.</div></div>
679 <div class="ttc" id="aa00195_html_ga0647ae66458fe68172eb5a320042f870"><div class="ttname"><a href="a00195.html#ga0647ae66458fe68172eb5a320042f870">hwloc_topology_abi_check</a></div><div class="ttdeci">int hwloc_topology_abi_check(hwloc_topology_t topology)</div><div class="ttdoc">Verify that the topology is compatible with the current hwloc library.</div></div>
680 <div class="ttc" id="aa00195_html_ga62a161fc5e6f120344dc69a7bee4e587"><div class="ttname"><a href="a00195.html#ga62a161fc5e6f120344dc69a7bee4e587">hwloc_topology_dup</a></div><div class="ttdeci">int hwloc_topology_dup(hwloc_topology_t *newtopology, hwloc_topology_t oldtopology)</div><div class="ttdoc">Duplicate a topology.</div></div>
681 <div class="ttc" id="aa00195_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
682 <div class="ttc" id="aa00195_html_ga9f34a640b6fd28d23699d4d084667b15"><div class="ttname"><a href="a00195.html#ga9f34a640b6fd28d23699d4d084667b15">hwloc_topology_destroy</a></div><div class="ttdeci">void hwloc_topology_destroy(hwloc_topology_t topology)</div><div class="ttdoc">Terminate and free a topology context.</div></div>
683 <div class="ttc" id="aa00195_html_gabdf58d87ad77f6615fccdfe0535ff826"><div class="ttname"><a href="a00195.html#gabdf58d87ad77f6615fccdfe0535ff826">hwloc_topology_load</a></div><div class="ttdeci">int hwloc_topology_load(hwloc_topology_t topology)</div><div class="ttdoc">Build the actual topology.</div></div>
684 <div class="ttc" id="aa00195_html_gaf6746bc3a558ef1ac8348b4491d091b5"><div class="ttname"><a href="a00195.html#gaf6746bc3a558ef1ac8348b4491d091b5">hwloc_topology_check</a></div><div class="ttdeci">void hwloc_topology_check(hwloc_topology_t topology)</div><div class="ttdoc">Run internal checks on a topology structure.</div></div>
685 <div class="ttc" id="aa00196_html_ga1d5ceafe8130fe6e8657bf0bc666ba50"><div class="ttname"><a href="a00196.html#ga1d5ceafe8130fe6e8657bf0bc666ba50">hwloc_get_nbobjs_by_depth</a></div><div class="ttdeci">unsigned hwloc_get_nbobjs_by_depth(hwloc_topology_t topology, int depth)</div><div class="ttdoc">Returns the width of level at depth depth.</div></div>
686 <div class="ttc" id="aa00196_html_ga2d4b12fc187dfc53b35f2fa21d21044d"><div class="ttname"><a href="a00196.html#ga2d4b12fc187dfc53b35f2fa21d21044d">hwloc_get_root_obj</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_root_obj(hwloc_topology_t topology)</div><div class="ttdoc">Returns the top-object of the topology-tree.</div></div>
687 <div class="ttc" id="aa00196_html_ga391f6b2613f0065673eaa4069b93d4e0"><div class="ttname"><a href="a00196.html#ga391f6b2613f0065673eaa4069b93d4e0">hwloc_get_obj_by_depth</a></div><div class="ttdeci">hwloc_obj_t hwloc_get_obj_by_depth(hwloc_topology_t topology, int depth, unsigned idx)</div><div class="ttdoc">Returns the topology object at logical index idx from depth depth.</div></div>
688 <div class="ttc" id="aa00196_html_ga506b0682b98aa264d53e934d2e9badb0"><div class="ttname"><a href="a00196.html#ga506b0682b98aa264d53e934d2e9badb0">hwloc_get_depth_type</a></div><div class="ttdeci">hwloc_obj_type_t hwloc_get_depth_type(hwloc_topology_t topology, int depth)</div><div class="ttdoc">Returns the type of objects at depth depth.</div></div>
689 <div class="ttc" id="aa00196_html_ga6f414dd80a2b943967a0ac92da3181a2"><div class="ttname"><a href="a00196.html#ga6f414dd80a2b943967a0ac92da3181a2">hwloc_get_obj_by_type</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_obj_by_type(hwloc_topology_t topology, hwloc_obj_type_t type, unsigned idx)</div><div class="ttdoc">Returns the topology object at logical index idx with type type.</div></div>
690 <div class="ttc" id="aa00196_html_ga759e88eaf5a230ad283e9d4c42486735"><div class="ttname"><a href="a00196.html#ga759e88eaf5a230ad283e9d4c42486735">hwloc_get_next_obj_by_type</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_obj_by_type(hwloc_topology_t topology, hwloc_obj_type_t type, hwloc_obj_t prev)</div><div class="ttdoc">Returns the next object of type type.</div></div>
691 <div class="ttc" id="aa00196_html_ga789a3f65aedff644be64a18526a03065"><div class="ttname"><a href="a00196.html#ga789a3f65aedff644be64a18526a03065">hwloc_get_nbobjs_by_type</a></div><div class="ttdeci">static int hwloc_get_nbobjs_by_type(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Returns the width of level type type.</div></div>
692 <div class="ttc" id="aa00196_html_ga8125328e69eba709c33ea8055c12589b"><div class="ttname"><a href="a00196.html#ga8125328e69eba709c33ea8055c12589b">hwloc_get_type_or_below_depth</a></div><div class="ttdeci">static int hwloc_get_type_or_below_depth(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Returns the depth of objects of type type or below.</div></div>
693 <div class="ttc" id="aa00196_html_ga8a9ee573b7d2190272095d10712a7cca"><div class="ttname"><a href="a00196.html#ga8a9ee573b7d2190272095d10712a7cca">hwloc_get_type_or_above_depth</a></div><div class="ttdeci">static int hwloc_get_type_or_above_depth(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Returns the depth of objects of type type or above.</div></div>
694 <div class="ttc" id="aa00196_html_ga8bec782e21be313750da70cf7428b374"><div class="ttname"><a href="a00196.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a></div><div class="ttdeci">int hwloc_get_type_depth(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Returns the depth of objects of type type.</div></div>
695 <div class="ttc" id="aa00196_html_gac140a9b939d9fa0b30c4a910efcb0656"><div class="ttname"><a href="a00196.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_obj_by_depth(hwloc_topology_t topology, int depth, hwloc_obj_t prev)</div><div class="ttdoc">Returns the next object at depth depth.</div></div>
696 <div class="ttc" id="aa00196_html_gae54d1782ca9b54bea915f5c18a9158fa"><div class="ttname"><a href="a00196.html#gae54d1782ca9b54bea915f5c18a9158fa">hwloc_topology_get_depth</a></div><div class="ttdeci">int hwloc_topology_get_depth(hwloc_topology_t restrict topology)</div><div class="ttdoc">Get the depth of the hierarchical tree of objects.</div></div>
697 <div class="ttc" id="aa00196_html_gae85786340b88e24835f8c403a1e2e54b"><div class="ttname"><a href="a00196.html#gae85786340b88e24835f8c403a1e2e54b">hwloc_get_memory_parents_depth</a></div><div class="ttdeci">int hwloc_get_memory_parents_depth(hwloc_topology_t topology)</div><div class="ttdoc">Return the depth of parents where memory objects are attached.</div></div>
698 <div class="ttc" id="aa00196_html_gaf4e663cf42bbe20756b849c6293ef575"><div class="ttname"><a href="a00196.html#gaf4e663cf42bbe20756b849c6293ef575">hwloc_get_type_depth_e</a></div><div class="ttdeci">hwloc_get_type_depth_e</div><div class="ttdef"><b>Definition:</b> hwloc.h:820</div></div>
699 <div class="ttc" id="aa00196_html_ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad"><div class="ttname"><a href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_UNKNOWN</div><div class="ttdoc">No object of given type exists in the topology.</div><div class="ttdef"><b>Definition:</b> hwloc.h:821</div></div>
700 <div class="ttc" id="aa00196_html_ggaf4e663cf42bbe20756b849c6293ef575a245c34ec9884c2cf5de5049b2153ed9c"><div class="ttname"><a href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a245c34ec9884c2cf5de5049b2153ed9c">HWLOC_TYPE_DEPTH_NUMANODE</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_NUMANODE</div><div class="ttdoc">Virtual depth for NUMA nodes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:823</div></div>
701 <div class="ttc" id="aa00196_html_ggaf4e663cf42bbe20756b849c6293ef575a8b8d7d300c018c0eb65e6c9a9f162101"><div class="ttname"><a href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a8b8d7d300c018c0eb65e6c9a9f162101">HWLOC_TYPE_DEPTH_MEMCACHE</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_MEMCACHE</div><div class="ttdoc">Virtual depth for MemCache object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:828</div></div>
702 <div class="ttc" id="aa00196_html_ggaf4e663cf42bbe20756b849c6293ef575a96436a392b4cdcaa1a29bc65351b373f"><div class="ttname"><a href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a96436a392b4cdcaa1a29bc65351b373f">HWLOC_TYPE_DEPTH_MISC</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_MISC</div><div class="ttdoc">Virtual depth for Misc object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:827</div></div>
703 <div class="ttc" id="aa00196_html_ggaf4e663cf42bbe20756b849c6293ef575ad8b1516e699b57ce1c8d107fbd2f674c"><div class="ttname"><a href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575ad8b1516e699b57ce1c8d107fbd2f674c">HWLOC_TYPE_DEPTH_PCI_DEVICE</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_PCI_DEVICE</div><div class="ttdoc">Virtual depth for PCI device object level.</div><div class="ttdef"><b>Definition:</b> hwloc.h:825</div></div>
704 <div class="ttc" id="aa00196_html_ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c"><div class="ttname"><a href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c">HWLOC_TYPE_DEPTH_MULTIPLE</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_MULTIPLE</div><div class="ttdoc">Objects of given type exist at different depth in the topology (only for Groups).</div><div class="ttdef"><b>Definition:</b> hwloc.h:822</div></div>
705 <div class="ttc" id="aa00196_html_ggaf4e663cf42bbe20756b849c6293ef575af93b50182973e4a718d9d4db9e253a90"><div class="ttname"><a href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575af93b50182973e4a718d9d4db9e253a90">HWLOC_TYPE_DEPTH_BRIDGE</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_BRIDGE</div><div class="ttdoc">Virtual depth for bridge object level.</div><div class="ttdef"><b>Definition:</b> hwloc.h:824</div></div>
706 <div class="ttc" id="aa00196_html_ggaf4e663cf42bbe20756b849c6293ef575afe9a2131073eebbe129d4aa2928d3f46"><div class="ttname"><a href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575afe9a2131073eebbe129d4aa2928d3f46">HWLOC_TYPE_DEPTH_OS_DEVICE</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_OS_DEVICE</div><div class="ttdoc">Virtual depth for software device object level.</div><div class="ttdef"><b>Definition:</b> hwloc.h:826</div></div>
707 <div class="ttc" id="aa00197_html_ga510f21b066fba2dab12b8c9b173b1dfd"><div class="ttname"><a href="a00197.html#ga510f21b066fba2dab12b8c9b173b1dfd">hwloc_type_sscanf</a></div><div class="ttdeci">int hwloc_type_sscanf(const char *string, hwloc_obj_type_t *typep, union hwloc_obj_attr_u *attrp, size_t attrsize)</div><div class="ttdoc">Return an object type and attributes from a type string.</div></div>
708 <div class="ttc" id="aa00197_html_ga52c63cd7203e55b804c1314affc9bd12"><div class="ttname"><a href="a00197.html#ga52c63cd7203e55b804c1314affc9bd12">hwloc_type_sscanf_as_depth</a></div><div class="ttdeci">int hwloc_type_sscanf_as_depth(const char *string, hwloc_obj_type_t *typep, hwloc_topology_t topology, int *depthp)</div><div class="ttdoc">Return an object type and its level depth from a type string.</div></div>
709 <div class="ttc" id="aa00197_html_ga5ca0bf94bbbb080d0eff17a57bd90422"><div class="ttname"><a href="a00197.html#ga5ca0bf94bbbb080d0eff17a57bd90422">hwloc_obj_type_string</a></div><div class="ttdeci">const char * hwloc_obj_type_string(hwloc_obj_type_t type)</div><div class="ttdoc">Return a constant stringified object type.</div></div>
710 <div class="ttc" id="aa00197_html_ga870e876931c282a1c7aee2f031912ce3"><div class="ttname"><a href="a00197.html#ga870e876931c282a1c7aee2f031912ce3">hwloc_obj_attr_snprintf</a></div><div class="ttdeci">int hwloc_obj_attr_snprintf(char *restrict string, size_t size, hwloc_obj_t obj, const char *restrict separator, int verbose)</div><div class="ttdoc">Stringify the attributes of a given topology object into a human-readable form.</div></div>
711 <div class="ttc" id="aa00197_html_gadb8765c260edea80c52cd06a76639ba4"><div class="ttname"><a href="a00197.html#gadb8765c260edea80c52cd06a76639ba4">hwloc_obj_type_snprintf</a></div><div class="ttdeci">int hwloc_obj_type_snprintf(char *restrict string, size_t size, hwloc_obj_t obj, int verbose)</div><div class="ttdoc">Stringify the type of a given topology object into a human-readable form.</div></div>
712 <div class="ttc" id="aa00198_html_gab358661a92bb27d8542b255cc9f6f25e"><div class="ttname"><a href="a00198.html#gab358661a92bb27d8542b255cc9f6f25e">hwloc_obj_get_info_by_name</a></div><div class="ttdeci">static const char * hwloc_obj_get_info_by_name(hwloc_obj_t obj, const char *name)</div><div class="ttdoc">Search the given key name in object infos and return the corresponding value.</div></div>
713 <div class="ttc" id="aa00198_html_gace7654bb8a9002caae1a4b8a59e7452e"><div class="ttname"><a href="a00198.html#gace7654bb8a9002caae1a4b8a59e7452e">hwloc_obj_add_info</a></div><div class="ttdeci">int hwloc_obj_add_info(hwloc_obj_t obj, const char *name, const char *value)</div><div class="ttdoc">Add the given info name and value pair to the given object.</div></div>
714 <div class="ttc" id="aa00199_html_ga217dc8d373f8958cc93c154ebce1c71c"><div class="ttname"><a href="a00199.html#ga217dc8d373f8958cc93c154ebce1c71c">hwloc_cpubind_flags_t</a></div><div class="ttdeci">hwloc_cpubind_flags_t</div><div class="ttdoc">Process/Thread binding flags.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1154</div></div>
715 <div class="ttc" id="aa00199_html_ga296db8a3c6d49b51fb83d6f3e45c02a6"><div class="ttname"><a href="a00199.html#ga296db8a3c6d49b51fb83d6f3e45c02a6">hwloc_set_proc_cpubind</a></div><div class="ttdeci">int hwloc_set_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_cpuset_t set, int flags)</div><div class="ttdoc">Bind a process pid on cpus given in physical bitmap set.</div></div>
716 <div class="ttc" id="aa00199_html_ga80bc07473a8edf840cae17bd7ec21d48"><div class="ttname"><a href="a00199.html#ga80bc07473a8edf840cae17bd7ec21d48">hwloc_set_cpubind</a></div><div class="ttdeci">int hwloc_set_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t set, int flags)</div><div class="ttdoc">Bind current process or thread on cpus given in physical bitmap set.</div></div>
717 <div class="ttc" id="aa00199_html_ga910a05c2d47f68a3155bf176b50fa555"><div class="ttname"><a href="a00199.html#ga910a05c2d47f68a3155bf176b50fa555">hwloc_get_proc_last_cpu_location</a></div><div class="ttdeci">int hwloc_get_proc_last_cpu_location(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int flags)</div><div class="ttdoc">Get the last physical CPU where a process ran.</div></div>
718 <div class="ttc" id="aa00199_html_gac82de91f788fa82dacf99c6e0d4b7158"><div class="ttname"><a href="a00199.html#gac82de91f788fa82dacf99c6e0d4b7158">hwloc_get_proc_cpubind</a></div><div class="ttdeci">int hwloc_get_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int flags)</div><div class="ttdoc">Get the current physical binding of process pid.</div></div>
719 <div class="ttc" id="aa00199_html_gacba7ecb979baf824d5240fa2cb2a8be6"><div class="ttname"><a href="a00199.html#gacba7ecb979baf824d5240fa2cb2a8be6">hwloc_get_cpubind</a></div><div class="ttdeci">int hwloc_get_cpubind(hwloc_topology_t topology, hwloc_cpuset_t set, int flags)</div><div class="ttdoc">Get current process or thread binding.</div></div>
720 <div class="ttc" id="aa00199_html_gae42c01b2addcfbf6048b9a516dd7a906"><div class="ttname"><a href="a00199.html#gae42c01b2addcfbf6048b9a516dd7a906">hwloc_set_thread_cpubind</a></div><div class="ttdeci">int hwloc_set_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t thread, hwloc_const_cpuset_t set, int flags)</div><div class="ttdoc">Bind a thread thread on cpus given in physical bitmap set.</div></div>
721 <div class="ttc" id="aa00199_html_gaf13f765642b5d0d9a9813e6bb043671b"><div class="ttname"><a href="a00199.html#gaf13f765642b5d0d9a9813e6bb043671b">hwloc_get_thread_cpubind</a></div><div class="ttdeci">int hwloc_get_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t thread, hwloc_cpuset_t set, int flags)</div><div class="ttdoc">Get the current physical binding of thread tid.</div></div>
722 <div class="ttc" id="aa00199_html_gafdb374627358bf09203b5a4215b13032"><div class="ttname"><a href="a00199.html#gafdb374627358bf09203b5a4215b13032">hwloc_get_last_cpu_location</a></div><div class="ttdeci">int hwloc_get_last_cpu_location(hwloc_topology_t topology, hwloc_cpuset_t set, int flags)</div><div class="ttdoc">Get the last physical CPU where the current process or thread ran.</div></div>
723 <div class="ttc" id="aa00199_html_gga217dc8d373f8958cc93c154ebce1c71ca2e0dd0128dac6b03408c7dd170477fdc"><div class="ttname"><a href="a00199.html#gga217dc8d373f8958cc93c154ebce1c71ca2e0dd0128dac6b03408c7dd170477fdc">HWLOC_CPUBIND_PROCESS</a></div><div class="ttdeci">@ HWLOC_CPUBIND_PROCESS</div><div class="ttdoc">Bind all threads of the current (possibly) multithreaded process.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1157</div></div>
724 <div class="ttc" id="aa00199_html_gga217dc8d373f8958cc93c154ebce1c71ca41ce440443cc3087caed95ab60edcad6"><div class="ttname"><a href="a00199.html#gga217dc8d373f8958cc93c154ebce1c71ca41ce440443cc3087caed95ab60edcad6">HWLOC_CPUBIND_NOMEMBIND</a></div><div class="ttdeci">@ HWLOC_CPUBIND_NOMEMBIND</div><div class="ttdoc">Avoid any effect on memory binding.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1203</div></div>
725 <div class="ttc" id="aa00199_html_gga217dc8d373f8958cc93c154ebce1c71ca679a7e0f0c7ee06b123565f90d98e7fa"><div class="ttname"><a href="a00199.html#gga217dc8d373f8958cc93c154ebce1c71ca679a7e0f0c7ee06b123565f90d98e7fa">HWLOC_CPUBIND_STRICT</a></div><div class="ttdeci">@ HWLOC_CPUBIND_STRICT</div><div class="ttdoc">Request for strict binding from the OS.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1186</div></div>
726 <div class="ttc" id="aa00199_html_gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421"><div class="ttname"><a href="a00199.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421">HWLOC_CPUBIND_THREAD</a></div><div class="ttdeci">@ HWLOC_CPUBIND_THREAD</div><div class="ttdoc">Bind current thread of current process.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1161</div></div>
727 <div class="ttc" id="aa00200_html_ga020951efa0ce3862bd4faec295501a7f"><div class="ttname"><a href="a00200.html#ga020951efa0ce3862bd4faec295501a7f">hwloc_set_membind</a></div><div class="ttdeci">int hwloc_set_membind(hwloc_topology_t topology, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)</div><div class="ttdoc">Set the default memory binding policy of the current process or thread to prefer the NUMA node(s) spe...</div></div>
728 <div class="ttc" id="aa00200_html_ga04736461780fadcf193af218c0122273"><div class="ttname"><a href="a00200.html#ga04736461780fadcf193af218c0122273">hwloc_alloc_membind</a></div><div class="ttdeci">void * hwloc_alloc_membind(hwloc_topology_t topology, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)</div><div class="ttdoc">Allocate some memory on NUMA memory nodes specified by set.</div></div>
729 <div class="ttc" id="aa00200_html_ga1730ceb18ec6ee3b7bd3d0db81f07dc8"><div class="ttname"><a href="a00200.html#ga1730ceb18ec6ee3b7bd3d0db81f07dc8">hwloc_get_proc_membind</a></div><div class="ttdeci">int hwloc_get_proc_membind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_bitmap_t set, hwloc_membind_policy_t *policy, int flags)</div><div class="ttdoc">Query the default memory binding policy and physical locality of the specified process.</div></div>
730 <div class="ttc" id="aa00200_html_ga32dbd4f54e9e4a7179f2dde37ffe6ad7"><div class="ttname"><a href="a00200.html#ga32dbd4f54e9e4a7179f2dde37ffe6ad7">hwloc_free</a></div><div class="ttdeci">int hwloc_free(hwloc_topology_t topology, void *addr, size_t len)</div><div class="ttdoc">Free memory that was previously allocated by hwloc_alloc() or hwloc_alloc_membind().</div></div>
731 <div class="ttc" id="aa00200_html_ga537c7508a4e2d1db05673ec5be6e805c"><div class="ttname"><a href="a00200.html#ga537c7508a4e2d1db05673ec5be6e805c">hwloc_get_area_memlocation</a></div><div class="ttdeci">int hwloc_get_area_memlocation(hwloc_topology_t topology, const void *addr, size_t len, hwloc_bitmap_t set, int flags)</div><div class="ttdoc">Get the NUMA nodes where memory identified by (addr, len ) is physically allocated.</div></div>
732 <div class="ttc" id="aa00200_html_ga972b335a86a7d5e7b34bce2b243c41bc"><div class="ttname"><a href="a00200.html#ga972b335a86a7d5e7b34bce2b243c41bc">hwloc_alloc</a></div><div class="ttdeci">void * hwloc_alloc(hwloc_topology_t topology, size_t len)</div><div class="ttdoc">Allocate some memory.</div></div>
733 <div class="ttc" id="aa00200_html_gaa87e0a6946ff145914fdf0b1c60567f8"><div class="ttname"><a href="a00200.html#gaa87e0a6946ff145914fdf0b1c60567f8">hwloc_get_area_membind</a></div><div class="ttdeci">int hwloc_get_area_membind(hwloc_topology_t topology, const void *addr, size_t len, hwloc_bitmap_t set, hwloc_membind_policy_t *policy, int flags)</div><div class="ttdoc">Query the CPUs near the physical NUMA node(s) and binding policy of the memory identified by (addr,...</div></div>
734 <div class="ttc" id="aa00200_html_gab00475fd98815bf4fb9aaf752030e7d2"><div class="ttname"><a href="a00200.html#gab00475fd98815bf4fb9aaf752030e7d2">hwloc_membind_flags_t</a></div><div class="ttdeci">hwloc_membind_flags_t</div><div class="ttdoc">Memory binding flags.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1443</div></div>
735 <div class="ttc" id="aa00200_html_gab1b77b8408bacaf03c7e8878f7577922"><div class="ttname"><a href="a00200.html#gab1b77b8408bacaf03c7e8878f7577922">hwloc_alloc_membind_policy</a></div><div class="ttdeci">static void * hwloc_alloc_membind_policy(hwloc_topology_t topology, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)</div><div class="ttdoc">Allocate some memory on NUMA memory nodes specified by set.</div></div>
736 <div class="ttc" id="aa00200_html_gabc91ff16f7e41047924e3a4ae6d9da7e"><div class="ttname"><a href="a00200.html#gabc91ff16f7e41047924e3a4ae6d9da7e">hwloc_set_proc_membind</a></div><div class="ttdeci">int hwloc_set_proc_membind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)</div><div class="ttdoc">Set the default memory binding policy of the specified process to prefer the NUMA node(s) specified b...</div></div>
737 <div class="ttc" id="aa00200_html_gac9764f79505775d06407b40f5e4661e8"><div class="ttname"><a href="a00200.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a></div><div class="ttdeci">hwloc_membind_policy_t</div><div class="ttdoc">Memory binding policy.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1380</div></div>
738 <div class="ttc" id="aa00200_html_gae21f0a1a884929c784bebf070252aa56"><div class="ttname"><a href="a00200.html#gae21f0a1a884929c784bebf070252aa56">hwloc_get_membind</a></div><div class="ttdeci">int hwloc_get_membind(hwloc_topology_t topology, hwloc_bitmap_t set, hwloc_membind_policy_t *policy, int flags)</div><div class="ttdoc">Query the default memory binding policy and physical locality of the current process or thread.</div></div>
739 <div class="ttc" id="aa00200_html_gaf881faefe20701229f07dd7dbd0125ed"><div class="ttname"><a href="a00200.html#gaf881faefe20701229f07dd7dbd0125ed">hwloc_set_area_membind</a></div><div class="ttdeci">int hwloc_set_area_membind(hwloc_topology_t topology, const void *addr, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)</div><div class="ttdoc">Bind the already-allocated memory identified by (addr, len) to the NUMA node(s) specified by set.</div></div>
740 <div class="ttc" id="aa00200_html_ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6"><div class="ttname"><a href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a></div><div class="ttdeci">@ HWLOC_MEMBIND_STRICT</div><div class="ttdef"><b>Definition:</b> hwloc.h:1461</div></div>
741 <div class="ttc" id="aa00200_html_ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4"><div class="ttname"><a href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4">HWLOC_MEMBIND_PROCESS</a></div><div class="ttdeci">@ HWLOC_MEMBIND_PROCESS</div><div class="ttdoc">Set policy for all threads of the specified (possibly multithreaded) process. This flag is mutually e...</div><div class="ttdef"><b>Definition:</b> hwloc.h:1448</div></div>
742 <div class="ttc" id="aa00200_html_ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298"><div class="ttname"><a href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298">HWLOC_MEMBIND_THREAD</a></div><div class="ttdeci">@ HWLOC_MEMBIND_THREAD</div><div class="ttdoc">Set policy for a specific thread of the current process. This flag is mutually exclusive with HWLOC_M...</div><div class="ttdef"><b>Definition:</b> hwloc.h:1453</div></div>
743 <div class="ttc" id="aa00200_html_ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256"><div class="ttname"><a href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256">HWLOC_MEMBIND_BYNODESET</a></div><div class="ttdeci">@ HWLOC_MEMBIND_BYNODESET</div><div class="ttdoc">Consider the bitmap argument as a nodeset.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1491</div></div>
744 <div class="ttc" id="aa00200_html_ggab00475fd98815bf4fb9aaf752030e7d2aa6e49e54f52827cb143cc869cfd748af"><div class="ttname"><a href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2aa6e49e54f52827cb143cc869cfd748af">HWLOC_MEMBIND_MIGRATE</a></div><div class="ttdeci">@ HWLOC_MEMBIND_MIGRATE</div><div class="ttdoc">Migrate existing allocated memory. If the memory cannot be migrated and the HWLOC_MEMBIND_STRICT flag...</div><div class="ttdef"><b>Definition:</b> hwloc.h:1467</div></div>
745 <div class="ttc" id="aa00200_html_ggab00475fd98815bf4fb9aaf752030e7d2aad6b9eaf2ee324ca58dc8f58094b9997"><div class="ttname"><a href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2aad6b9eaf2ee324ca58dc8f58094b9997">HWLOC_MEMBIND_NOCPUBIND</a></div><div class="ttdeci">@ HWLOC_MEMBIND_NOCPUBIND</div><div class="ttdoc">Avoid any effect on CPU binding.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1480</div></div>
746 <div class="ttc" id="aa00200_html_ggac9764f79505775d06407b40f5e4661e8a18675bb80ebc1bce5b652e9de8f3998c"><div class="ttname"><a href="a00200.html#ggac9764f79505775d06407b40f5e4661e8a18675bb80ebc1bce5b652e9de8f3998c">HWLOC_MEMBIND_DEFAULT</a></div><div class="ttdeci">@ HWLOC_MEMBIND_DEFAULT</div><div class="ttdoc">Reset the memory allocation policy to the system default. Depending on the operating system,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:1388</div></div>
747 <div class="ttc" id="aa00200_html_ggac9764f79505775d06407b40f5e4661e8a3185bd869b67817fb2bd5164bf360402"><div class="ttname"><a href="a00200.html#ggac9764f79505775d06407b40f5e4661e8a3185bd869b67817fb2bd5164bf360402">HWLOC_MEMBIND_MIXED</a></div><div class="ttdeci">@ HWLOC_MEMBIND_MIXED</div><div class="ttdoc">Returned by get_membind() functions when multiple threads or parts of a memory area have differing me...</div><div class="ttdef"><b>Definition:</b> hwloc.h:1427</div></div>
748 <div class="ttc" id="aa00200_html_ggac9764f79505775d06407b40f5e4661e8a979c7aa78dd32780858f30f47a72cca0"><div class="ttname"><a href="a00200.html#ggac9764f79505775d06407b40f5e4661e8a979c7aa78dd32780858f30f47a72cca0">HWLOC_MEMBIND_FIRSTTOUCH</a></div><div class="ttdeci">@ HWLOC_MEMBIND_FIRSTTOUCH</div><div class="ttdoc">Allocate each memory page individually on the local NUMA node of the thread that touches it.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1399</div></div>
749 <div class="ttc" id="aa00200_html_ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c"><div class="ttname"><a href="a00200.html#ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c">HWLOC_MEMBIND_BIND</a></div><div class="ttdeci">@ HWLOC_MEMBIND_BIND</div><div class="ttdoc">Allocate memory on the specified nodes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1403</div></div>
750 <div class="ttc" id="aa00200_html_ggac9764f79505775d06407b40f5e4661e8ae370075e5af016d42310f87ea5af236b"><div class="ttname"><a href="a00200.html#ggac9764f79505775d06407b40f5e4661e8ae370075e5af016d42310f87ea5af236b">HWLOC_MEMBIND_INTERLEAVE</a></div><div class="ttdeci">@ HWLOC_MEMBIND_INTERLEAVE</div><div class="ttdoc">Allocate memory on the given nodes in an interleaved / round-robin manner. The precise layout of the ...</div><div class="ttdef"><b>Definition:</b> hwloc.h:1412</div></div>
751 <div class="ttc" id="aa00200_html_ggac9764f79505775d06407b40f5e4661e8aecdd4164d647708fbb51a00d98dbb138"><div class="ttname"><a href="a00200.html#ggac9764f79505775d06407b40f5e4661e8aecdd4164d647708fbb51a00d98dbb138">HWLOC_MEMBIND_NEXTTOUCH</a></div><div class="ttdeci">@ HWLOC_MEMBIND_NEXTTOUCH</div><div class="ttdoc">For each page bound with this policy, by next time it is touched (and next time only),...</div><div class="ttdef"><b>Definition:</b> hwloc.h:1419</div></div>
752 <div class="ttc" id="aa00201_html_ga2745616b65595e1c1e579ecc7e461fa8"><div class="ttname"><a href="a00201.html#ga2745616b65595e1c1e579ecc7e461fa8">hwloc_topology_set_xmlbuffer</a></div><div class="ttdeci">int hwloc_topology_set_xmlbuffer(hwloc_topology_t restrict topology, const char *restrict buffer, int size)</div><div class="ttdoc">Enable XML based topology using a memory buffer (instead of a file, as with hwloc_topology_set_xml())...</div></div>
753 <div class="ttc" id="aa00201_html_ga341fc17b5867a4715570baab131f68cd"><div class="ttname"><a href="a00201.html#ga341fc17b5867a4715570baab131f68cd">hwloc_topology_set_pid</a></div><div class="ttdeci">int hwloc_topology_set_pid(hwloc_topology_t restrict topology, hwloc_pid_t pid)</div><div class="ttdoc">Change which process the topology is viewed from.</div></div>
754 <div class="ttc" id="aa00201_html_ga4fab186bb6181a00bcf585825fddd38d"><div class="ttname"><a href="a00201.html#ga4fab186bb6181a00bcf585825fddd38d">hwloc_topology_set_synthetic</a></div><div class="ttdeci">int hwloc_topology_set_synthetic(hwloc_topology_t restrict topology, const char *restrict description)</div><div class="ttdoc">Enable synthetic topology.</div></div>
755 <div class="ttc" id="aa00201_html_ga879439b7ee99407ee911b3ac64e9a25e"><div class="ttname"><a href="a00201.html#ga879439b7ee99407ee911b3ac64e9a25e">hwloc_topology_set_xml</a></div><div class="ttdeci">int hwloc_topology_set_xml(hwloc_topology_t restrict topology, const char *restrict xmlpath)</div><div class="ttdoc">Enable XML-file based topology.</div></div>
756 <div class="ttc" id="aa00201_html_ga949f656c779208a36790feba24048b7e"><div class="ttname"><a href="a00201.html#ga949f656c779208a36790feba24048b7e">hwloc_topology_components_flag_e</a></div><div class="ttdeci">hwloc_topology_components_flag_e</div><div class="ttdoc">Flags to be passed to hwloc_topology_set_components()</div><div class="ttdef"><b>Definition:</b> hwloc.h:1842</div></div>
757 <div class="ttc" id="aa00201_html_ga9ad41adf418cee1c0ee32ba9bd4a3d36"><div class="ttname"><a href="a00201.html#ga9ad41adf418cee1c0ee32ba9bd4a3d36">hwloc_topology_set_components</a></div><div class="ttdeci">int hwloc_topology_set_components(hwloc_topology_t restrict topology, unsigned long flags, const char *restrict name)</div><div class="ttdoc">Prevent a discovery component from being used for a topology.</div></div>
758 <div class="ttc" id="aa00201_html_gga949f656c779208a36790feba24048b7ea33eec25d29253a2aba21dd3c731b416e"><div class="ttname"><a href="a00201.html#gga949f656c779208a36790feba24048b7ea33eec25d29253a2aba21dd3c731b416e">HWLOC_TOPOLOGY_COMPONENTS_FLAG_BLACKLIST</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_COMPONENTS_FLAG_BLACKLIST</div><div class="ttdoc">Blacklist the target component from being used.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1846</div></div>
759 <div class="ttc" id="aa00202_html_ga09318f81c1d4713be907d64748a6f93c"><div class="ttname"><a href="a00202.html#ga09318f81c1d4713be907d64748a6f93c">hwloc_topology_get_flags</a></div><div class="ttdeci">unsigned long hwloc_topology_get_flags(hwloc_topology_t topology)</div><div class="ttdoc">Get OR'ed flags of a topology.</div></div>
760 <div class="ttc" id="aa00202_html_ga0ab38705357bc1203abe829da8a12ad3"><div class="ttname"><a href="a00202.html#ga0ab38705357bc1203abe829da8a12ad3">hwloc_topology_set_io_types_filter</a></div><div class="ttdeci">int hwloc_topology_set_io_types_filter(hwloc_topology_t topology, enum hwloc_type_filter_e filter)</div><div class="ttdoc">Set the filtering for all I/O object types.</div></div>
761 <div class="ttc" id="aa00202_html_ga137ad1178f7a79f2383974d983083401"><div class="ttname"><a href="a00202.html#ga137ad1178f7a79f2383974d983083401">hwloc_topology_get_type_filter</a></div><div class="ttdeci">int hwloc_topology_get_type_filter(hwloc_topology_t topology, hwloc_obj_type_t type, enum hwloc_type_filter_e *filter)</div><div class="ttdoc">Get the current filtering for the given object type.</div></div>
762 <div class="ttc" id="aa00202_html_ga2cc7b7b155cba58dda203e54f1637b9c"><div class="ttname"><a href="a00202.html#ga2cc7b7b155cba58dda203e54f1637b9c">hwloc_topology_set_userdata</a></div><div class="ttdeci">void hwloc_topology_set_userdata(hwloc_topology_t topology, const void *userdata)</div><div class="ttdoc">Set the topology-specific userdata pointer.</div></div>
763 <div class="ttc" id="aa00202_html_ga30bd6d330fe3c8f0cbaad724d114ee20"><div class="ttname"><a href="a00202.html#ga30bd6d330fe3c8f0cbaad724d114ee20">hwloc_topology_set_cache_types_filter</a></div><div class="ttdeci">int hwloc_topology_set_cache_types_filter(hwloc_topology_t topology, enum hwloc_type_filter_e filter)</div><div class="ttdoc">Set the filtering for all CPU cache object types.</div></div>
764 <div class="ttc" id="aa00202_html_ga37c7b2e599ed3cd76ad9164630024f30"><div class="ttname"><a href="a00202.html#ga37c7b2e599ed3cd76ad9164630024f30">hwloc_topology_set_icache_types_filter</a></div><div class="ttdeci">int hwloc_topology_set_icache_types_filter(hwloc_topology_t topology, enum hwloc_type_filter_e filter)</div><div class="ttdoc">Set the filtering for all CPU instruction cache object types.</div></div>
765 <div class="ttc" id="aa00202_html_ga68ffdcfd9175cdf40709801092f18017"><div class="ttname"><a href="a00202.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a></div><div class="ttdeci">int hwloc_topology_is_thissystem(hwloc_topology_t restrict topology)</div><div class="ttdoc">Does the topology context come from this system?</div></div>
766 <div class="ttc" id="aa00202_html_ga91f992f8d6c4905b2d3c4f43e509c2a3"><div class="ttname"><a href="a00202.html#ga91f992f8d6c4905b2d3c4f43e509c2a3">hwloc_topology_get_userdata</a></div><div class="ttdeci">void * hwloc_topology_get_userdata(hwloc_topology_t topology)</div><div class="ttdoc">Retrieve the topology-specific userdata pointer.</div></div>
767 <div class="ttc" id="aa00202_html_ga9a5a1f0140cd1952544477833733195b"><div class="ttname"><a href="a00202.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a></div><div class="ttdeci">hwloc_type_filter_e</div><div class="ttdoc">Type filtering flags.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2195</div></div>
768 <div class="ttc" id="aa00202_html_ga9eb8dc3b106f84921bf5789101e97e24"><div class="ttname"><a href="a00202.html#ga9eb8dc3b106f84921bf5789101e97e24">hwloc_topology_set_all_types_filter</a></div><div class="ttdeci">int hwloc_topology_set_all_types_filter(hwloc_topology_t topology, enum hwloc_type_filter_e filter)</div><div class="ttdoc">Set the filtering for all object types.</div></div>
769 <div class="ttc" id="aa00202_html_gaaeed4df656979e5f16befea9d29b814b"><div class="ttname"><a href="a00202.html#gaaeed4df656979e5f16befea9d29b814b">hwloc_topology_set_flags</a></div><div class="ttdeci">int hwloc_topology_set_flags(hwloc_topology_t topology, unsigned long flags)</div><div class="ttdoc">Set OR'ed flags to non-yet-loaded topology.</div></div>
770 <div class="ttc" id="aa00202_html_gab8c76173c4a8ce1a9a9366012b1388e6"><div class="ttname"><a href="a00202.html#gab8c76173c4a8ce1a9a9366012b1388e6">hwloc_topology_get_support</a></div><div class="ttdeci">const struct hwloc_topology_support * hwloc_topology_get_support(hwloc_topology_t restrict topology)</div><div class="ttdoc">Retrieve the topology support.</div></div>
771 <div class="ttc" id="aa00202_html_gad894e70f15f8d4aada7be8d1aba38b7e"><div class="ttname"><a href="a00202.html#gad894e70f15f8d4aada7be8d1aba38b7e">hwloc_topology_set_type_filter</a></div><div class="ttdeci">int hwloc_topology_set_type_filter(hwloc_topology_t topology, hwloc_obj_type_t type, enum hwloc_type_filter_e filter)</div><div class="ttdoc">Set the filtering for the given object type.</div></div>
772 <div class="ttc" id="aa00202_html_gada025d3ec20b4b420f8038d23d6e7bde"><div class="ttname"><a href="a00202.html#gada025d3ec20b4b420f8038d23d6e7bde">hwloc_topology_flags_e</a></div><div class="ttdeci">hwloc_topology_flags_e</div><div class="ttdoc">Flags to be set onto a topology context before load.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1883</div></div>
773 <div class="ttc" id="aa00202_html_gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a"><div class="ttname"><a href="a00202.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a">HWLOC_TYPE_FILTER_KEEP_NONE</a></div><div class="ttdeci">@ HWLOC_TYPE_FILTER_KEEP_NONE</div><div class="ttdoc">Ignore all objects of this type.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2209</div></div>
774 <div class="ttc" id="aa00202_html_gga9a5a1f0140cd1952544477833733195ba63fd24954e18c83ff7eae9588759adb5"><div class="ttname"><a href="a00202.html#gga9a5a1f0140cd1952544477833733195ba63fd24954e18c83ff7eae9588759adb5">HWLOC_TYPE_FILTER_KEEP_IMPORTANT</a></div><div class="ttdeci">@ HWLOC_TYPE_FILTER_KEEP_IMPORTANT</div><div class="ttdoc">Only keep likely-important objects of the given type.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2238</div></div>
775 <div class="ttc" id="aa00202_html_gga9a5a1f0140cd1952544477833733195ba7664716643bf1db83e631eed34f659e4"><div class="ttname"><a href="a00202.html#gga9a5a1f0140cd1952544477833733195ba7664716643bf1db83e631eed34f659e4">HWLOC_TYPE_FILTER_KEEP_STRUCTURE</a></div><div class="ttdeci">@ HWLOC_TYPE_FILTER_KEEP_STRUCTURE</div><div class="ttdoc">Only ignore objects if their entire level does not bring any structure.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2223</div></div>
776 <div class="ttc" id="aa00202_html_gga9a5a1f0140cd1952544477833733195bafda7b59e6810dfe778d8f9a4cc1e350e"><div class="ttname"><a href="a00202.html#gga9a5a1f0140cd1952544477833733195bafda7b59e6810dfe778d8f9a4cc1e350e">HWLOC_TYPE_FILTER_KEEP_ALL</a></div><div class="ttdeci">@ HWLOC_TYPE_FILTER_KEEP_ALL</div><div class="ttdoc">Keep all objects of this type.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2201</div></div>
777 <div class="ttc" id="aa00202_html_ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258"><div class="ttname"><a href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</div><div class="ttdoc">Detect the whole system, ignore reservations, include disallowed objects.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1904</div></div>
778 <div class="ttc" id="aa00202_html_ggada025d3ec20b4b420f8038d23d6e7bdea1b66bbd66e900e5c837f71defb32ad89"><div class="ttname"><a href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea1b66bbd66e900e5c837f71defb32ad89">HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES</div><div class="ttdoc">Get the set of allowed resources from the local operating system even if the topology was loaded from...</div><div class="ttdef"><b>Definition:</b> hwloc.h:1945</div></div>
779 <div class="ttc" id="aa00202_html_ggada025d3ec20b4b420f8038d23d6e7bdea368d7741135fe309f3782c59644d3caa"><div class="ttname"><a href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea368d7741135fe309f3782c59644d3caa">HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_MEMBINDING</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_MEMBINDING</div><div class="ttdoc">Do not consider resources outside of the process memory binding.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2013</div></div>
780 <div class="ttc" id="aa00202_html_ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b"><div class="ttname"><a href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</div><div class="ttdoc">Assume that the selected backend provides the topology for the system on which we are running.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1924</div></div>
781 <div class="ttc" id="aa00202_html_ggada025d3ec20b4b420f8038d23d6e7bdeaa595aed197779012acf43e8ca4a2658d"><div class="ttname"><a href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdeaa595aed197779012acf43e8ca4a2658d">HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING</div><div class="ttdoc">Do not consider resources outside of the process CPU binding.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1991</div></div>
782 <div class="ttc" id="aa00202_html_ggada025d3ec20b4b420f8038d23d6e7bdead93e82b8668ee90e4f9354e201a2ed9c"><div class="ttname"><a href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdead93e82b8668ee90e4f9354e201a2ed9c">HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT</div><div class="ttdoc">Import support from the imported topology.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1969</div></div>
783 <div class="ttc" id="aa00202_html_ggada025d3ec20b4b420f8038d23d6e7bdeae7a792e3db4360360a10f9160b10e631"><div class="ttname"><a href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdeae7a792e3db4360360a10f9160b10e631">HWLOC_TOPOLOGY_FLAG_DONT_CHANGE_BINDING</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_FLAG_DONT_CHANGE_BINDING</div><div class="ttdoc">Do not ever modify the process or thread binding during discovery.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2028</div></div>
784 <div class="ttc" id="aa00203_html_ga1fc6012b3e1c249b83f48cb7bcacaa5b"><div class="ttname"><a href="a00203.html#ga1fc6012b3e1c249b83f48cb7bcacaa5b">hwloc_topology_insert_group_object</a></div><div class="ttdeci">hwloc_obj_t hwloc_topology_insert_group_object(hwloc_topology_t topology, hwloc_obj_t group)</div><div class="ttdoc">Add more structure to the topology by adding an intermediate Group.</div></div>
785 <div class="ttc" id="aa00203_html_ga38b1be3922094d880f6e76bf56c973d6"><div class="ttname"><a href="a00203.html#ga38b1be3922094d880f6e76bf56c973d6">hwloc_allow_flags_e</a></div><div class="ttdeci">hwloc_allow_flags_e</div><div class="ttdoc">Flags to be given to hwloc_topology_allow().</div><div class="ttdef"><b>Definition:</b> hwloc.h:2360</div></div>
786 <div class="ttc" id="aa00203_html_ga4cea4741165faf5323931a9ed8786ef7"><div class="ttname"><a href="a00203.html#ga4cea4741165faf5323931a9ed8786ef7">hwloc_topology_alloc_group_object</a></div><div class="ttdeci">hwloc_obj_t hwloc_topology_alloc_group_object(hwloc_topology_t topology)</div><div class="ttdoc">Allocate a Group object to insert later with hwloc_topology_insert_group_object().</div></div>
787 <div class="ttc" id="aa00203_html_ga698ecd640d2b76742bba3829a145cd9a"><div class="ttname"><a href="a00203.html#ga698ecd640d2b76742bba3829a145cd9a">hwloc_topology_refresh</a></div><div class="ttdeci">int hwloc_topology_refresh(hwloc_topology_t topology)</div><div class="ttdoc">Refresh internal structures after topology modification.</div></div>
788 <div class="ttc" id="aa00203_html_ga6db81ed13ac0a9d70cc80372ab537815"><div class="ttname"><a href="a00203.html#ga6db81ed13ac0a9d70cc80372ab537815">hwloc_topology_restrict</a></div><div class="ttdeci">int hwloc_topology_restrict(hwloc_topology_t restrict topology, hwloc_const_bitmap_t set, unsigned long flags)</div><div class="ttdoc">Restrict the topology to the given CPU set or nodeset.</div></div>
789 <div class="ttc" id="aa00203_html_ga9d80f08eb25b7ac22f1b998dc8bf521f"><div class="ttname"><a href="a00203.html#ga9d80f08eb25b7ac22f1b998dc8bf521f">hwloc_restrict_flags_e</a></div><div class="ttdeci">hwloc_restrict_flags_e</div><div class="ttdoc">Flags to be given to hwloc_topology_restrict().</div><div class="ttdef"><b>Definition:</b> hwloc.h:2299</div></div>
790 <div class="ttc" id="aa00203_html_gad458715d3335df44849216cc123d1055"><div class="ttname"><a href="a00203.html#gad458715d3335df44849216cc123d1055">hwloc_obj_add_other_obj_sets</a></div><div class="ttdeci">int hwloc_obj_add_other_obj_sets(hwloc_obj_t dst, hwloc_obj_t src)</div><div class="ttdoc">Setup object cpusets/nodesets by OR'ing another object's sets.</div></div>
791 <div class="ttc" id="aa00203_html_gad980782ade737900c5cf208946768c30"><div class="ttname"><a href="a00203.html#gad980782ade737900c5cf208946768c30">hwloc_topology_insert_misc_object</a></div><div class="ttdeci">hwloc_obj_t hwloc_topology_insert_misc_object(hwloc_topology_t topology, hwloc_obj_t parent, const char *name)</div><div class="ttdoc">Add a MISC object as a leaf of the topology.</div></div>
792 <div class="ttc" id="aa00203_html_gaf955b190c0299dcfb5bc985d777f92a1"><div class="ttname"><a href="a00203.html#gaf955b190c0299dcfb5bc985d777f92a1">hwloc_topology_allow</a></div><div class="ttdeci">int hwloc_topology_allow(hwloc_topology_t restrict topology, hwloc_const_cpuset_t cpuset, hwloc_const_nodeset_t nodeset, unsigned long flags)</div><div class="ttdoc">Change the sets of allowed PUs and NUMA nodes in the topology.</div></div>
793 <div class="ttc" id="aa00203_html_gga38b1be3922094d880f6e76bf56c973d6a489c8c1b67ce7e0b8cf7a665852760e1"><div class="ttname"><a href="a00203.html#gga38b1be3922094d880f6e76bf56c973d6a489c8c1b67ce7e0b8cf7a665852760e1">HWLOC_ALLOW_FLAG_CUSTOM</a></div><div class="ttdeci">@ HWLOC_ALLOW_FLAG_CUSTOM</div><div class="ttdoc">Allow a custom set of objects, given to hwloc_topology_allow() as cpuset and/or nodeset parameters.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2378</div></div>
794 <div class="ttc" id="aa00203_html_gga38b1be3922094d880f6e76bf56c973d6a88c50088c09dcf1e1a496c0817556fb9"><div class="ttname"><a href="a00203.html#gga38b1be3922094d880f6e76bf56c973d6a88c50088c09dcf1e1a496c0817556fb9">HWLOC_ALLOW_FLAG_LOCAL_RESTRICTIONS</a></div><div class="ttdeci">@ HWLOC_ALLOW_FLAG_LOCAL_RESTRICTIONS</div><div class="ttdoc">Only allow objects that are available to the current process.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2374</div></div>
795 <div class="ttc" id="aa00203_html_gga38b1be3922094d880f6e76bf56c973d6aca107692455774f9d323d21b8abfce72"><div class="ttname"><a href="a00203.html#gga38b1be3922094d880f6e76bf56c973d6aca107692455774f9d323d21b8abfce72">HWLOC_ALLOW_FLAG_ALL</a></div><div class="ttdeci">@ HWLOC_ALLOW_FLAG_ALL</div><div class="ttdoc">Mark all objects as allowed in the topology.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2365</div></div>
796 <div class="ttc" id="aa00203_html_gga9d80f08eb25b7ac22f1b998dc8bf521fa699969227a09bbc1a7de51dc9fb7be4b"><div class="ttname"><a href="a00203.html#gga9d80f08eb25b7ac22f1b998dc8bf521fa699969227a09bbc1a7de51dc9fb7be4b">HWLOC_RESTRICT_FLAG_ADAPT_MISC</a></div><div class="ttdeci">@ HWLOC_RESTRICT_FLAG_ADAPT_MISC</div><div class="ttdoc">Move Misc objects to ancestors if their parents are removed during restriction. If this flag is not s...</div><div class="ttdef"><b>Definition:</b> hwloc.h:2324</div></div>
797 <div class="ttc" id="aa00203_html_gga9d80f08eb25b7ac22f1b998dc8bf521fa80eeb9cbba401ab050f8fb4573725891"><div class="ttname"><a href="a00203.html#gga9d80f08eb25b7ac22f1b998dc8bf521fa80eeb9cbba401ab050f8fb4573725891">HWLOC_RESTRICT_FLAG_REMOVE_CPULESS</a></div><div class="ttdeci">@ HWLOC_RESTRICT_FLAG_REMOVE_CPULESS</div><div class="ttdoc">Remove all objects that became CPU-less. By default, only objects that contain no PU and no memory ar...</div><div class="ttdef"><b>Definition:</b> hwloc.h:2305</div></div>
798 <div class="ttc" id="aa00203_html_gga9d80f08eb25b7ac22f1b998dc8bf521faa95d6985e36ec1e55f68b210297a85cb"><div class="ttname"><a href="a00203.html#gga9d80f08eb25b7ac22f1b998dc8bf521faa95d6985e36ec1e55f68b210297a85cb">HWLOC_RESTRICT_FLAG_ADAPT_IO</a></div><div class="ttdeci">@ HWLOC_RESTRICT_FLAG_ADAPT_IO</div><div class="ttdoc">Move I/O objects to ancestors if their parents are removed during restriction. If this flag is not se...</div><div class="ttdef"><b>Definition:</b> hwloc.h:2330</div></div>
799 <div class="ttc" id="aa00203_html_gga9d80f08eb25b7ac22f1b998dc8bf521fae4c5b1b87232f2d8a60559e77ac65a68"><div class="ttname"><a href="a00203.html#gga9d80f08eb25b7ac22f1b998dc8bf521fae4c5b1b87232f2d8a60559e77ac65a68">HWLOC_RESTRICT_FLAG_BYNODESET</a></div><div class="ttdeci">@ HWLOC_RESTRICT_FLAG_BYNODESET</div><div class="ttdoc">Restrict by nodeset instead of CPU set. Only keep objects whose nodeset is included or partially incl...</div><div class="ttdef"><b>Definition:</b> hwloc.h:2311</div></div>
800 <div class="ttc" id="aa00203_html_gga9d80f08eb25b7ac22f1b998dc8bf521faf5ba49808855704bfe9cb9fe7347f93b"><div class="ttname"><a href="a00203.html#gga9d80f08eb25b7ac22f1b998dc8bf521faf5ba49808855704bfe9cb9fe7347f93b">HWLOC_RESTRICT_FLAG_REMOVE_MEMLESS</a></div><div class="ttdeci">@ HWLOC_RESTRICT_FLAG_REMOVE_MEMLESS</div><div class="ttdoc">Remove all objects that became Memory-less. By default, only objects that contain no PU and no memory...</div><div class="ttdef"><b>Definition:</b> hwloc.h:2318</div></div>
801 <div class="ttc" id="aa00214_html_gaa3c2bf4c776d603dcebbb61b0c923d84"><div class="ttname"><a href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a></div><div class="ttdeci">struct hwloc_bitmap_s * hwloc_bitmap_t</div><div class="ttdoc">Set of bits represented as an opaque pointer to an internal bitmap.</div><div class="ttdef"><b>Definition:</b> bitmap.h:68</div></div>
802 <div class="ttc" id="aa00214_html_gae991a108af01d408be2776c5b2c467b2"><div class="ttname"><a href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a></div><div class="ttdeci">const struct hwloc_bitmap_s * hwloc_const_bitmap_t</div><div class="ttdoc">a non-modifiable hwloc_bitmap_t</div><div class="ttdef"><b>Definition:</b> bitmap.h:70</div></div>
803 <div class="ttc" id="aa00250_html"><div class="ttname"><a href="a00250.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:395</div></div>
804 <div class="ttc" id="aa00250_html_a04d05403da37bfe17cd63b7c7dd07b1f"><div class="ttname"><a href="a00250.html#a04d05403da37bfe17cd63b7c7dd07b1f">hwloc_obj::children</a></div><div class="ttdeci">struct hwloc_obj ** children</div><div class="ttdoc">Normal children, children[0 .. arity -1].</div><div class="ttdef"><b>Definition:</b> hwloc.h:455</div></div>
805 <div class="ttc" id="aa00250_html_a08f0d0e16c619a6e653526cbee4ffea3"><div class="ttname"><a href="a00250.html#a08f0d0e16c619a6e653526cbee4ffea3">hwloc_obj::nodeset</a></div><div class="ttdeci">hwloc_nodeset_t nodeset</div><div class="ttdoc">NUMA nodes covered by this object or containing this object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:539</div></div>
806 <div class="ttc" id="aa00250_html_a0d07fb7b8935e137c94d75a3eb492ae9"><div class="ttname"><a href="a00250.html#a0d07fb7b8935e137c94d75a3eb492ae9">hwloc_obj::logical_index</a></div><div class="ttdeci">unsigned logical_index</div><div class="ttdoc">Horizontal index in the whole list of similar objects, hence guaranteed unique across the entire mach...</div><div class="ttdef"><b>Definition:</b> hwloc.h:433</div></div>
807 <div class="ttc" id="aa00250_html_a0f41a1d67dc6b661906f2217563637f3"><div class="ttname"><a href="a00250.html#a0f41a1d67dc6b661906f2217563637f3">hwloc_obj::symmetric_subtree</a></div><div class="ttdeci">int symmetric_subtree</div><div class="ttdoc">Set if the subtree of normal objects below this object is symmetric, which means all normal children ...</div><div class="ttdef"><b>Definition:</b> hwloc.h:460</div></div>
808 <div class="ttc" id="aa00250_html_a2bb7862ce722d7ceda23cfa153da165a"><div class="ttname"><a href="a00250.html#a2bb7862ce722d7ceda23cfa153da165a">hwloc_obj::misc_arity</a></div><div class="ttdeci">unsigned misc_arity</div><div class="ttdoc">Number of Misc children. These children are listed in misc_first_child.</div><div class="ttdef"><b>Definition:</b> hwloc.h:501</div></div>
809 <div class="ttc" id="aa00250_html_a4876fd165b4fff35521f07ebd85355ed"><div class="ttname"><a href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">hwloc_obj::depth</a></div><div class="ttdeci">int depth</div><div class="ttdoc">Vertical index in the hierarchy.</div><div class="ttdef"><b>Definition:</b> hwloc.h:418</div></div>
810 <div class="ttc" id="aa00250_html_a57812a313fe9b1a9500489f47c3011cc"><div class="ttname"><a href="a00250.html#a57812a313fe9b1a9500489f47c3011cc">hwloc_obj::misc_first_child</a></div><div class="ttdeci">struct hwloc_obj * misc_first_child</div><div class="ttdoc">First Misc child. Misc objects are listed here (misc_arity and misc_first_child) instead of in the no...</div><div class="ttdef"><b>Definition:</b> hwloc.h:504</div></div>
811 <div class="ttc" id="aa00250_html_a5d4f97e76723a9ec8d38046f19e00d33"><div class="ttname"><a href="a00250.html#a5d4f97e76723a9ec8d38046f19e00d33">hwloc_obj::subtype</a></div><div class="ttdeci">char * subtype</div><div class="ttdoc">Subtype string to better describe the type field.</div><div class="ttdef"><b>Definition:</b> hwloc.h:398</div></div>
812 <div class="ttc" id="aa00250_html_a61a7a80a68eaccbaaa28269e678c81a9"><div class="ttname"><a href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">hwloc_obj::os_index</a></div><div class="ttdeci">unsigned os_index</div><div class="ttdoc">OS-provided physical index number. It is not guaranteed unique across the entire machine,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:400</div></div>
813 <div class="ttc" id="aa00250_html_a67925e0f2c47f50408fbdb9bddd0790f"><div class="ttname"><a href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">hwloc_obj::cpuset</a></div><div class="ttdeci">hwloc_cpuset_t cpuset</div><div class="ttdoc">CPUs covered by this object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:511</div></div>
814 <div class="ttc" id="aa00250_html_a6f834ea4dd26553cdea601d2fae6d3b7"><div class="ttname"><a href="a00250.html#a6f834ea4dd26553cdea601d2fae6d3b7">hwloc_obj::memory_arity</a></div><div class="ttdeci">unsigned memory_arity</div><div class="ttdoc">Number of Memory children. These children are listed in memory_first_child.</div><div class="ttdef"><b>Definition:</b> hwloc.h:471</div></div>
815 <div class="ttc" id="aa00250_html_a75603fc36c9284ba48ce814b772a58b6"><div class="ttname"><a href="a00250.html#a75603fc36c9284ba48ce814b772a58b6">hwloc_obj::total_memory</a></div><div class="ttdeci">hwloc_uint64_t total_memory</div><div class="ttdoc">Total memory (in bytes) in NUMA nodes below this object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:412</div></div>
816 <div class="ttc" id="aa00250_html_a76fd3ac94401cf32dfccc3a3a8de68a5"><div class="ttname"><a href="a00250.html#a76fd3ac94401cf32dfccc3a3a8de68a5">hwloc_obj::userdata</a></div><div class="ttdeci">void * userdata</div><div class="ttdoc">Application-given private data pointer, initialized to NULL, use it as you wish. See hwloc_topology_s...</div><div class="ttdef"><b>Definition:</b> hwloc.h:581</div></div>
817 <div class="ttc" id="aa00250_html_a7b3b29f0be377c7d2d52262019fc7d11"><div class="ttname"><a href="a00250.html#a7b3b29f0be377c7d2d52262019fc7d11">hwloc_obj::io_arity</a></div><div class="ttdeci">unsigned io_arity</div><div class="ttdoc">Number of I/O children. These children are listed in io_first_child.</div><div class="ttdef"><b>Definition:</b> hwloc.h:489</div></div>
818 <div class="ttc" id="aa00250_html_a7b89e8c189876c0158a9282aaaf17f50"><div class="ttname"><a href="a00250.html#a7b89e8c189876c0158a9282aaaf17f50">hwloc_obj::prev_sibling</a></div><div class="ttdeci">struct hwloc_obj * prev_sibling</div><div class="ttdoc">Previous object below the same parent (inside the same list of children).</div><div class="ttdef"><b>Definition:</b> hwloc.h:448</div></div>
819 <div class="ttc" id="aa00250_html_a7f2343ed476fe4942e6fffd4cade1b40"><div class="ttname"><a href="a00250.html#a7f2343ed476fe4942e6fffd4cade1b40">hwloc_obj::next_sibling</a></div><div class="ttdeci">struct hwloc_obj * next_sibling</div><div class="ttdoc">Next object below the same parent (inside the same list of children).</div><div class="ttdef"><b>Definition:</b> hwloc.h:447</div></div>
820 <div class="ttc" id="aa00250_html_a84bd65634dbc55f4158b74443a9bd04f"><div class="ttname"><a href="a00250.html#a84bd65634dbc55f4158b74443a9bd04f">hwloc_obj::last_child</a></div><div class="ttdeci">struct hwloc_obj * last_child</div><div class="ttdoc">Last normal child.</div><div class="ttdef"><b>Definition:</b> hwloc.h:457</div></div>
821 <div class="ttc" id="aa00250_html_a85a788017457129589318b6c39451acf"><div class="ttname"><a href="a00250.html#a85a788017457129589318b6c39451acf">hwloc_obj::next_cousin</a></div><div class="ttdeci">struct hwloc_obj * next_cousin</div><div class="ttdoc">Next object of same type and depth.</div><div class="ttdef"><b>Definition:</b> hwloc.h:441</div></div>
822 <div class="ttc" id="aa00250_html_a8604654c38b7a720efae5025d3a96ee6"><div class="ttname"><a href="a00250.html#a8604654c38b7a720efae5025d3a96ee6">hwloc_obj::infos</a></div><div class="ttdeci">struct hwloc_info_s * infos</div><div class="ttdoc">Array of stringified info type=name.</div><div class="ttdef"><b>Definition:</b> hwloc.h:577</div></div>
823 <div class="ttc" id="aa00250_html_a8d14c88e1ebc4ae67cc69f9e928558b3"><div class="ttname"><a href="a00250.html#a8d14c88e1ebc4ae67cc69f9e928558b3">hwloc_obj::io_first_child</a></div><div class="ttdeci">struct hwloc_obj * io_first_child</div><div class="ttdoc">First I/O child. Bridges, PCI and OS devices are listed here (io_arity and io_first_child) instead of...</div><div class="ttdef"><b>Definition:</b> hwloc.h:492</div></div>
824 <div class="ttc" id="aa00250_html_a91788a9da687beb7224cc1fd7b75208c"><div class="ttname"><a href="a00250.html#a91788a9da687beb7224cc1fd7b75208c">hwloc_obj::complete_cpuset</a></div><div class="ttdeci">hwloc_cpuset_t complete_cpuset</div><div class="ttdoc">The complete CPU set of processors of this object,.</div><div class="ttdef"><b>Definition:</b> hwloc.h:526</div></div>
825 <div class="ttc" id="aa00250_html_a957984a355fa61c85f46605c336e7551"><div class="ttname"><a href="a00250.html#a957984a355fa61c85f46605c336e7551">hwloc_obj::gp_index</a></div><div class="ttdeci">hwloc_uint64_t gp_index</div><div class="ttdoc">Global persistent index. Generated by hwloc, unique across the topology (contrary to os_index) and pe...</div><div class="ttdef"><b>Definition:</b> hwloc.h:586</div></div>
826 <div class="ttc" id="aa00250_html_a9843acc28cfbba903b63ea14b137ff70"><div class="ttname"><a href="a00250.html#a9843acc28cfbba903b63ea14b137ff70">hwloc_obj::infos_count</a></div><div class="ttdeci">unsigned infos_count</div><div class="ttdoc">Size of infos array.</div><div class="ttdef"><b>Definition:</b> hwloc.h:578</div></div>
827 <div class="ttc" id="aa00250_html_aaa6043eee6f55869933c1d974efd9acd"><div class="ttname"><a href="a00250.html#aaa6043eee6f55869933c1d974efd9acd">hwloc_obj::sibling_rank</a></div><div class="ttdeci">unsigned sibling_rank</div><div class="ttdoc">Index in parent's children[] array. Or the index in parent's Memory, I/O or Misc children list.</div><div class="ttdef"><b>Definition:</b> hwloc.h:446</div></div>
828 <div class="ttc" id="aa00250_html_aac3f6da35c9b57599909a44ce2b716c1"><div class="ttname"><a href="a00250.html#aac3f6da35c9b57599909a44ce2b716c1">hwloc_obj::arity</a></div><div class="ttdeci">unsigned arity</div><div class="ttdoc">Number of normal children. Memory, Misc and I/O children are not listed here but rather in their dedi...</div><div class="ttdef"><b>Definition:</b> hwloc.h:451</div></div>
829 <div class="ttc" id="aa00250_html_abb709ec38f2970677e4e57d1d30be96d"><div class="ttname"><a href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">hwloc_obj::name</a></div><div class="ttdeci">char * name</div><div class="ttdoc">Object-specific name if any. Mostly used for identifying OS devices and Misc objects where a name str...</div><div class="ttdef"><b>Definition:</b> hwloc.h:407</div></div>
830 <div class="ttc" id="aa00250_html_ac0e8200dba25b90d5954bd4ec61f97d3"><div class="ttname"><a href="a00250.html#ac0e8200dba25b90d5954bd4ec61f97d3">hwloc_obj::memory_first_child</a></div><div class="ttdeci">struct hwloc_obj * memory_first_child</div><div class="ttdoc">First Memory child. NUMA nodes and Memory-side caches are listed here (memory_arity and memory_first_...</div><div class="ttdef"><b>Definition:</b> hwloc.h:474</div></div>
831 <div class="ttc" id="aa00250_html_ac38c4012127525ef74c5615c526f4c2e"><div class="ttname"><a href="a00250.html#ac38c4012127525ef74c5615c526f4c2e">hwloc_obj::complete_nodeset</a></div><div class="ttdeci">hwloc_nodeset_t complete_nodeset</div><div class="ttdoc">The complete NUMA node set of this object,.</div><div class="ttdef"><b>Definition:</b> hwloc.h:561</div></div>
832 <div class="ttc" id="aa00250_html_ac715989f55ff5a0eb6be2969ee477ec0"><div class="ttname"><a href="a00250.html#ac715989f55ff5a0eb6be2969ee477ec0">hwloc_obj::prev_cousin</a></div><div class="ttdeci">struct hwloc_obj * prev_cousin</div><div class="ttdoc">Previous object of same type and depth.</div><div class="ttdef"><b>Definition:</b> hwloc.h:442</div></div>
833 <div class="ttc" id="aa00250_html_acc4f0803f244867e68fe0036800be5de"><div class="ttname"><a href="a00250.html#acc4f0803f244867e68fe0036800be5de">hwloc_obj::type</a></div><div class="ttdeci">hwloc_obj_type_t type</div><div class="ttdoc">Type of object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:397</div></div>
834 <div class="ttc" id="aa00250_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:414</div></div>
835 <div class="ttc" id="aa00250_html_adc494f6aed939992be1c55cca5822900"><div class="ttname"><a href="a00250.html#adc494f6aed939992be1c55cca5822900">hwloc_obj::parent</a></div><div class="ttdeci">struct hwloc_obj * parent</div><div class="ttdoc">Parent, NULL if root (Machine object)</div><div class="ttdef"><b>Definition:</b> hwloc.h:445</div></div>
836 <div class="ttc" id="aa00250_html_af51d08a0a79dba517c06c5afedc8d2dc"><div class="ttname"><a href="a00250.html#af51d08a0a79dba517c06c5afedc8d2dc">hwloc_obj::first_child</a></div><div class="ttdeci">struct hwloc_obj * first_child</div><div class="ttdoc">First normal child.</div><div class="ttdef"><b>Definition:</b> hwloc.h:456</div></div>
837 <div class="ttc" id="aa00254_html"><div class="ttname"><a href="a00254.html">hwloc_obj_attr_u</a></div><div class="ttdoc">Object type-specific Attributes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:598</div></div>
838 <div class="ttc" id="aa00254_html_a0b66da7ab072f7c016f8ed86701f5a7c"><div class="ttname"><a href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">hwloc_obj_attr_u::pcidev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_pcidev_attr_s pcidev</div></div>
839 <div class="ttc" id="aa00254_html_a207e6359497b7116d6f4baa9e8bbeb43"><div class="ttname"><a href="a00254.html#a207e6359497b7116d6f4baa9e8bbeb43">hwloc_obj_attr_u::bridge</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_bridge_attr_s bridge</div></div>
840 <div class="ttc" id="aa00254_html_a23f553f3252c9d13f2338231cd354ea9"><div class="ttname"><a href="a00254.html#a23f553f3252c9d13f2338231cd354ea9">hwloc_obj_attr_u::cache</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_cache_attr_s cache</div></div>
841 <div class="ttc" id="aa00254_html_a9eddbd69e34cd2ef6af6d2ac31b6eff3"><div class="ttname"><a href="a00254.html#a9eddbd69e34cd2ef6af6d2ac31b6eff3">hwloc_obj_attr_u::group</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_group_attr_s group</div></div>
842 <div class="ttc" id="aa00254_html_aaf7a5c38b5185703ff18c46ad2761dcf"><div class="ttname"><a href="a00254.html#aaf7a5c38b5185703ff18c46ad2761dcf">hwloc_obj_attr_u::osdev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_osdev_attr_s osdev</div></div>
843 <div class="ttc" id="aa00254_html_ad066b9612802ffa01e132dc3a8e6cc86"><div class="ttname"><a href="a00254.html#ad066b9612802ffa01e132dc3a8e6cc86">hwloc_obj_attr_u::numanode</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_numanode_attr_s numanode</div></div>
844 <div class="ttc" id="aa00258_html"><div class="ttname"><a href="a00258.html">hwloc_obj_attr_u::hwloc_numanode_attr_s</a></div><div class="ttdoc">NUMA node-specific Object Attributes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:600</div></div>
845 <div class="ttc" id="aa00258_html_a513078122d403904e16723d30f583cb2"><div class="ttname"><a href="a00258.html#a513078122d403904e16723d30f583cb2">hwloc_obj_attr_u::hwloc_numanode_attr_s::page_types_len</a></div><div class="ttdeci">unsigned page_types_len</div><div class="ttdoc">Size of array page_types.</div><div class="ttdef"><b>Definition:</b> hwloc.h:602</div></div>
846 <div class="ttc" id="aa00258_html_a6703cbf2afbf63c9d60c5ff4dc0c73aa"><div class="ttname"><a href="a00258.html#a6703cbf2afbf63c9d60c5ff4dc0c73aa">hwloc_obj_attr_u::hwloc_numanode_attr_s::local_memory</a></div><div class="ttdeci">hwloc_uint64_t local_memory</div><div class="ttdoc">Local memory (in bytes)</div><div class="ttdef"><b>Definition:</b> hwloc.h:601</div></div>
847 <div class="ttc" id="aa00258_html_a7e53c5024da2d7741a5cc1e7016bb8d2"><div class="ttname"><a href="a00258.html#a7e53c5024da2d7741a5cc1e7016bb8d2">hwloc_obj_attr_u::hwloc_numanode_attr_s::page_types</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s * page_types</div></div>
848 <div class="ttc" id="aa00262_html"><div class="ttname"><a href="a00262.html">hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s</a></div><div class="ttdoc">Array of local memory page types, NULL if no local memory and page_types is 0.</div><div class="ttdef"><b>Definition:</b> hwloc.h:608</div></div>
849 <div class="ttc" id="aa00262_html_a8ea7ebe9d91c7378bba03da57efc25cb"><div class="ttname"><a href="a00262.html#a8ea7ebe9d91c7378bba03da57efc25cb">hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s::size</a></div><div class="ttdeci">hwloc_uint64_t size</div><div class="ttdoc">Size of pages.</div><div class="ttdef"><b>Definition:</b> hwloc.h:609</div></div>
850 <div class="ttc" id="aa00262_html_a98514e37d57a325b78e21ffd8d7419e0"><div class="ttname"><a href="a00262.html#a98514e37d57a325b78e21ffd8d7419e0">hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s::count</a></div><div class="ttdeci">hwloc_uint64_t count</div><div class="ttdoc">Number of pages of this size.</div><div class="ttdef"><b>Definition:</b> hwloc.h:610</div></div>
851 <div class="ttc" id="aa00266_html"><div class="ttname"><a href="a00266.html">hwloc_obj_attr_u::hwloc_cache_attr_s</a></div><div class="ttdoc">Cache-specific Object Attributes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:615</div></div>
852 <div class="ttc" id="aa00266_html_a5c8f7f39193736c2187ed626940835d5"><div class="ttname"><a href="a00266.html#a5c8f7f39193736c2187ed626940835d5">hwloc_obj_attr_u::hwloc_cache_attr_s::depth</a></div><div class="ttdeci">unsigned depth</div><div class="ttdoc">Depth of cache (e.g., L1, L2, ...etc.)</div><div class="ttdef"><b>Definition:</b> hwloc.h:617</div></div>
853 <div class="ttc" id="aa00266_html_a801e8a668e28caf06c8b88e9ae5c10db"><div class="ttname"><a href="a00266.html#a801e8a668e28caf06c8b88e9ae5c10db">hwloc_obj_attr_u::hwloc_cache_attr_s::linesize</a></div><div class="ttdeci">unsigned linesize</div><div class="ttdoc">Cache-line size in bytes. 0 if unknown.</div><div class="ttdef"><b>Definition:</b> hwloc.h:618</div></div>
854 <div class="ttc" id="aa00266_html_abe5e788943ed04302976740c829674c0"><div class="ttname"><a href="a00266.html#abe5e788943ed04302976740c829674c0">hwloc_obj_attr_u::hwloc_cache_attr_s::size</a></div><div class="ttdeci">hwloc_uint64_t size</div><div class="ttdoc">Size of cache in bytes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:616</div></div>
855 <div class="ttc" id="aa00266_html_ad06525e474d1e2d1423ed71bb998592d"><div class="ttname"><a href="a00266.html#ad06525e474d1e2d1423ed71bb998592d">hwloc_obj_attr_u::hwloc_cache_attr_s::associativity</a></div><div class="ttdeci">int associativity</div><div class="ttdoc">Ways of associativity, -1 if fully associative, 0 if unknown.</div><div class="ttdef"><b>Definition:</b> hwloc.h:619</div></div>
856 <div class="ttc" id="aa00266_html_ad8edc8ded2b7a70d6abbc874801930f4"><div class="ttname"><a href="a00266.html#ad8edc8ded2b7a70d6abbc874801930f4">hwloc_obj_attr_u::hwloc_cache_attr_s::type</a></div><div class="ttdeci">hwloc_obj_cache_type_t type</div><div class="ttdoc">Cache type.</div><div class="ttdef"><b>Definition:</b> hwloc.h:621</div></div>
857 <div class="ttc" id="aa00270_html"><div class="ttname"><a href="a00270.html">hwloc_obj_attr_u::hwloc_group_attr_s</a></div><div class="ttdoc">Group-specific Object Attributes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:624</div></div>
858 <div class="ttc" id="aa00270_html_a3229f269c4cc7e63492c168535e4f0c1"><div class="ttname"><a href="a00270.html#a3229f269c4cc7e63492c168535e4f0c1">hwloc_obj_attr_u::hwloc_group_attr_s::kind</a></div><div class="ttdeci">unsigned kind</div><div class="ttdoc">Internally-used kind of group.</div><div class="ttdef"><b>Definition:</b> hwloc.h:627</div></div>
859 <div class="ttc" id="aa00270_html_ad514d943960a4036ed5e44dc187c74ed"><div class="ttname"><a href="a00270.html#ad514d943960a4036ed5e44dc187c74ed">hwloc_obj_attr_u::hwloc_group_attr_s::subkind</a></div><div class="ttdeci">unsigned subkind</div><div class="ttdoc">Internally-used subkind to distinguish different levels of groups with same kind.</div><div class="ttdef"><b>Definition:</b> hwloc.h:628</div></div>
860 <div class="ttc" id="aa00270_html_ad914eac61c77481e1b7037877bcc5579"><div class="ttname"><a href="a00270.html#ad914eac61c77481e1b7037877bcc5579">hwloc_obj_attr_u::hwloc_group_attr_s::depth</a></div><div class="ttdeci">unsigned depth</div><div class="ttdoc">Depth of group object. It may change if intermediate Group objects are added.</div><div class="ttdef"><b>Definition:</b> hwloc.h:625</div></div>
861 <div class="ttc" id="aa00270_html_afa253d4b70f92e940c226d61f192054f"><div class="ttname"><a href="a00270.html#afa253d4b70f92e940c226d61f192054f">hwloc_obj_attr_u::hwloc_group_attr_s::dont_merge</a></div><div class="ttdeci">unsigned char dont_merge</div><div class="ttdoc">Flag preventing groups from being automatically merged with identical parent or children.</div><div class="ttdef"><b>Definition:</b> hwloc.h:629</div></div>
862 <div class="ttc" id="aa00274_html"><div class="ttname"><a href="a00274.html">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a></div><div class="ttdoc">PCI Device specific Object Attributes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:632</div></div>
863 <div class="ttc" id="aa00274_html_a13ad54c93d08d8ac808e4de9674c5ee7"><div class="ttname"><a href="a00274.html#a13ad54c93d08d8ac808e4de9674c5ee7">hwloc_obj_attr_u::hwloc_pcidev_attr_s::revision</a></div><div class="ttdeci">unsigned char revision</div><div class="ttdef"><b>Definition:</b> hwloc.h:641</div></div>
864 <div class="ttc" id="aa00274_html_a35b66064ab7d768caf7154e410caf0fa"><div class="ttname"><a href="a00274.html#a35b66064ab7d768caf7154e410caf0fa">hwloc_obj_attr_u::hwloc_pcidev_attr_s::device_id</a></div><div class="ttdeci">unsigned short device_id</div><div class="ttdef"><b>Definition:</b> hwloc.h:640</div></div>
865 <div class="ttc" id="aa00274_html_a3d70c84a12f7e93d14c8d47bf4fd9dc5"><div class="ttname"><a href="a00274.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">hwloc_obj_attr_u::hwloc_pcidev_attr_s::dev</a></div><div class="ttdeci">unsigned char dev</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
866 <div class="ttc" id="aa00274_html_a499db3d8cc89eaba04fcaef3df1cba97"><div class="ttname"><a href="a00274.html#a499db3d8cc89eaba04fcaef3df1cba97">hwloc_obj_attr_u::hwloc_pcidev_attr_s::subvendor_id</a></div><div class="ttdeci">unsigned short subvendor_id</div><div class="ttdef"><b>Definition:</b> hwloc.h:640</div></div>
867 <div class="ttc" id="aa00274_html_a59b2fce35f7cbde86c4fd305d0ccda5f"><div class="ttname"><a href="a00274.html#a59b2fce35f7cbde86c4fd305d0ccda5f">hwloc_obj_attr_u::hwloc_pcidev_attr_s::linkspeed</a></div><div class="ttdeci">float linkspeed</div><div class="ttdef"><b>Definition:</b> hwloc.h:642</div></div>
868 <div class="ttc" id="aa00274_html_a695f32df53f4ef728670bfcf31b74e0f"><div class="ttname"><a href="a00274.html#a695f32df53f4ef728670bfcf31b74e0f">hwloc_obj_attr_u::hwloc_pcidev_attr_s::func</a></div><div class="ttdeci">unsigned char func</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
869 <div class="ttc" id="aa00274_html_a8fba44988deb98613c1505a4019a34dc"><div class="ttname"><a href="a00274.html#a8fba44988deb98613c1505a4019a34dc">hwloc_obj_attr_u::hwloc_pcidev_attr_s::domain</a></div><div class="ttdeci">unsigned short domain</div><div class="ttdef"><b>Definition:</b> hwloc.h:634</div></div>
870 <div class="ttc" id="aa00274_html_aad970ad19b62eb2d5df30e4802da4f4c"><div class="ttname"><a href="a00274.html#aad970ad19b62eb2d5df30e4802da4f4c">hwloc_obj_attr_u::hwloc_pcidev_attr_s::vendor_id</a></div><div class="ttdeci">unsigned short vendor_id</div><div class="ttdef"><b>Definition:</b> hwloc.h:640</div></div>
871 <div class="ttc" id="aa00274_html_aae99e035e8d1387d7b8768aaa8eceb0a"><div class="ttname"><a href="a00274.html#aae99e035e8d1387d7b8768aaa8eceb0a">hwloc_obj_attr_u::hwloc_pcidev_attr_s::bus</a></div><div class="ttdeci">unsigned char bus</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
872 <div class="ttc" id="aa00274_html_acac741aecd7a6db64f33409427e3971f"><div class="ttname"><a href="a00274.html#acac741aecd7a6db64f33409427e3971f">hwloc_obj_attr_u::hwloc_pcidev_attr_s::subdevice_id</a></div><div class="ttdeci">unsigned short subdevice_id</div><div class="ttdef"><b>Definition:</b> hwloc.h:640</div></div>
873 <div class="ttc" id="aa00274_html_aee735352d9f1686fd290fc6d6397c334"><div class="ttname"><a href="a00274.html#aee735352d9f1686fd290fc6d6397c334">hwloc_obj_attr_u::hwloc_pcidev_attr_s::class_id</a></div><div class="ttdeci">unsigned short class_id</div><div class="ttdef"><b>Definition:</b> hwloc.h:639</div></div>
874 <div class="ttc" id="aa00278_html"><div class="ttname"><a href="a00278.html">hwloc_obj_attr_u::hwloc_bridge_attr_s</a></div><div class="ttdoc">Bridge specific Object Attribues.</div><div class="ttdef"><b>Definition:</b> hwloc.h:645</div></div>
875 <div class="ttc" id="aa00278_html_a265dd2164aa2df4972e25a029da72125"><div class="ttname"><a href="a00278.html#a265dd2164aa2df4972e25a029da72125">hwloc_obj_attr_u::hwloc_bridge_attr_s::upstream_type</a></div><div class="ttdeci">hwloc_obj_bridge_type_t upstream_type</div><div class="ttdef"><b>Definition:</b> hwloc.h:649</div></div>
876 <div class="ttc" id="aa00278_html_a2c31e565a5f0d23d0a0a3dd3ec8f4b17"><div class="ttname"><a href="a00278.html#a2c31e565a5f0d23d0a0a3dd3ec8f4b17">hwloc_obj_attr_u::hwloc_bridge_attr_s::domain</a></div><div class="ttdeci">unsigned short domain</div><div class="ttdef"><b>Definition:</b> hwloc.h:653</div></div>
877 <div class="ttc" id="aa00278_html_a336c8b22893d5d734d8c9dfca4066b46"><div class="ttname"><a href="a00278.html#a336c8b22893d5d734d8c9dfca4066b46">hwloc_obj_attr_u::hwloc_bridge_attr_s::depth</a></div><div class="ttdeci">unsigned depth</div><div class="ttdef"><b>Definition:</b> hwloc.h:661</div></div>
878 <div class="ttc" id="aa00278_html_a7d5db91d655ba23ffe9bda7a2cbcb9a8"><div class="ttname"><a href="a00278.html#a7d5db91d655ba23ffe9bda7a2cbcb9a8">hwloc_obj_attr_u::hwloc_bridge_attr_s::downstream</a></div><div class="ttdeci">union hwloc_obj_attr_u::hwloc_bridge_attr_s::@1 downstream</div></div>
879 <div class="ttc" id="aa00278_html_ab5c564e7c95b747dae9eb84ec0a2c31e"><div class="ttname"><a href="a00278.html#ab5c564e7c95b747dae9eb84ec0a2c31e">hwloc_obj_attr_u::hwloc_bridge_attr_s::pci</a></div><div class="ttdeci">struct hwloc_pcidev_attr_s pci</div><div class="ttdef"><b>Definition:</b> hwloc.h:647</div></div>
880 <div class="ttc" id="aa00278_html_ab62888c880f8bb730292722f5811958d"><div class="ttname"><a href="a00278.html#ab62888c880f8bb730292722f5811958d">hwloc_obj_attr_u::hwloc_bridge_attr_s::upstream</a></div><div class="ttdeci">union hwloc_obj_attr_u::hwloc_bridge_attr_s::@0 upstream</div></div>
881 <div class="ttc" id="aa00278_html_ac6a169b672d0e9f75756fd5665828b93"><div class="ttname"><a href="a00278.html#ac6a169b672d0e9f75756fd5665828b93">hwloc_obj_attr_u::hwloc_bridge_attr_s::downstream_type</a></div><div class="ttdeci">hwloc_obj_bridge_type_t downstream_type</div><div class="ttdef"><b>Definition:</b> hwloc.h:660</div></div>
882 <div class="ttc" id="aa00278_html_ae2d9dd73ef1d32045c584a8e66d2f83f"><div class="ttname"><a href="a00278.html#ae2d9dd73ef1d32045c584a8e66d2f83f">hwloc_obj_attr_u::hwloc_bridge_attr_s::secondary_bus</a></div><div class="ttdeci">unsigned char secondary_bus</div><div class="ttdef"><b>Definition:</b> hwloc.h:657</div></div>
883 <div class="ttc" id="aa00278_html_af3f3f7d76bf03e8d2afa721c2b8d6771"><div class="ttname"><a href="a00278.html#af3f3f7d76bf03e8d2afa721c2b8d6771">hwloc_obj_attr_u::hwloc_bridge_attr_s::subordinate_bus</a></div><div class="ttdeci">unsigned char subordinate_bus</div><div class="ttdef"><b>Definition:</b> hwloc.h:657</div></div>
884 <div class="ttc" id="aa00294_html"><div class="ttname"><a href="a00294.html">hwloc_obj_attr_u::hwloc_osdev_attr_s</a></div><div class="ttdoc">OS Device specific Object Attributes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:664</div></div>
885 <div class="ttc" id="aa00294_html_a31e019e27e54ac6138d04be639bb96f9"><div class="ttname"><a href="a00294.html#a31e019e27e54ac6138d04be639bb96f9">hwloc_obj_attr_u::hwloc_osdev_attr_s::type</a></div><div class="ttdeci">hwloc_obj_osdev_type_t type</div><div class="ttdef"><b>Definition:</b> hwloc.h:665</div></div>
886 <div class="ttc" id="aa00298_html"><div class="ttname"><a href="a00298.html">hwloc_info_s</a></div><div class="ttdoc">Object info.</div><div class="ttdef"><b>Definition:</b> hwloc.h:673</div></div>
887 <div class="ttc" id="aa00298_html_a12ce1309e4381ae38b5c15d242a47124"><div class="ttname"><a href="a00298.html#a12ce1309e4381ae38b5c15d242a47124">hwloc_info_s::name</a></div><div class="ttdeci">char * name</div><div class="ttdoc">Info name.</div><div class="ttdef"><b>Definition:</b> hwloc.h:674</div></div>
888 <div class="ttc" id="aa00298_html_a788a0073bafe660645e7b69f31a43bbb"><div class="ttname"><a href="a00298.html#a788a0073bafe660645e7b69f31a43bbb">hwloc_info_s::value</a></div><div class="ttdeci">char * value</div><div class="ttdoc">Info value.</div><div class="ttdef"><b>Definition:</b> hwloc.h:675</div></div>
889 <div class="ttc" id="aa00302_html"><div class="ttname"><a href="a00302.html">hwloc_topology_discovery_support</a></div><div class="ttdoc">Flags describing actual discovery support for this topology.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2060</div></div>
890 <div class="ttc" id="aa00302_html_a955f96066cb9e4cd34e2a3710ad43e80"><div class="ttname"><a href="a00302.html#a955f96066cb9e4cd34e2a3710ad43e80">hwloc_topology_discovery_support::numa</a></div><div class="ttdeci">unsigned char numa</div><div class="ttdoc">Detecting the number of NUMA nodes is supported.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2064</div></div>
891 <div class="ttc" id="aa00302_html_a970e65235873bcdb9669a9805161ce03"><div class="ttname"><a href="a00302.html#a970e65235873bcdb9669a9805161ce03">hwloc_topology_discovery_support::disallowed_numa</a></div><div class="ttdeci">unsigned char disallowed_numa</div><div class="ttdoc">Detecting and identifying NUMA nodes that are not available to the current process is supported.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2070</div></div>
892 <div class="ttc" id="aa00302_html_aba80d6f9c15e2395f9ed61db9ff3b75d"><div class="ttname"><a href="a00302.html#aba80d6f9c15e2395f9ed61db9ff3b75d">hwloc_topology_discovery_support::cpukind_efficiency</a></div><div class="ttdeci">unsigned char cpukind_efficiency</div><div class="ttdoc">Detecting the efficiency of CPU kinds is supported, see Kinds of CPU cores.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2072</div></div>
893 <div class="ttc" id="aa00302_html_ad7bb4ecf7a82f5a04fc632e9592ad3ab"><div class="ttname"><a href="a00302.html#ad7bb4ecf7a82f5a04fc632e9592ad3ab">hwloc_topology_discovery_support::pu</a></div><div class="ttdeci">unsigned char pu</div><div class="ttdoc">Detecting the number of PU objects is supported.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2062</div></div>
894 <div class="ttc" id="aa00302_html_af193eb858e40e12ef4923f5ed0e1f11a"><div class="ttname"><a href="a00302.html#af193eb858e40e12ef4923f5ed0e1f11a">hwloc_topology_discovery_support::numa_memory</a></div><div class="ttdeci">unsigned char numa_memory</div><div class="ttdoc">Detecting the amount of memory in NUMA nodes is supported.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2066</div></div>
895 <div class="ttc" id="aa00302_html_af3c97b28781a2972cf8eaaf94a6617da"><div class="ttname"><a href="a00302.html#af3c97b28781a2972cf8eaaf94a6617da">hwloc_topology_discovery_support::disallowed_pu</a></div><div class="ttdeci">unsigned char disallowed_pu</div><div class="ttdoc">Detecting and identifying PU objects that are not available to the current process is supported.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2068</div></div>
896 <div class="ttc" id="aa00306_html"><div class="ttname"><a href="a00306.html">hwloc_topology_cpubind_support</a></div><div class="ttdoc">Flags describing actual PU binding support for this topology.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2080</div></div>
897 <div class="ttc" id="aa00306_html_a2554620148b7992a5093f338f5ae254f"><div class="ttname"><a href="a00306.html#a2554620148b7992a5093f338f5ae254f">hwloc_topology_cpubind_support::get_proc_last_cpu_location</a></div><div class="ttdeci">unsigned char get_proc_last_cpu_location</div><div class="ttdef"><b>Definition:</b> hwloc.h:2100</div></div>
898 <div class="ttc" id="aa00306_html_a46fba33e307909ce256624687799dd6d"><div class="ttname"><a href="a00306.html#a46fba33e307909ce256624687799dd6d">hwloc_topology_cpubind_support::set_thread_cpubind</a></div><div class="ttdeci">unsigned char set_thread_cpubind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2094</div></div>
899 <div class="ttc" id="aa00306_html_a57a89a4b5f1f74fa6cfe176f1e8b0798"><div class="ttname"><a href="a00306.html#a57a89a4b5f1f74fa6cfe176f1e8b0798">hwloc_topology_cpubind_support::set_thisthread_cpubind</a></div><div class="ttdeci">unsigned char set_thisthread_cpubind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2090</div></div>
900 <div class="ttc" id="aa00306_html_a6be1f042fdce6bf41b4ea39f6f193808"><div class="ttname"><a href="a00306.html#a6be1f042fdce6bf41b4ea39f6f193808">hwloc_topology_cpubind_support::get_thisthread_last_cpu_location</a></div><div class="ttdeci">unsigned char get_thisthread_last_cpu_location</div><div class="ttdef"><b>Definition:</b> hwloc.h:2102</div></div>
901 <div class="ttc" id="aa00306_html_a77a09ddd78ee3e9ff5f532a6ac74f7eb"><div class="ttname"><a href="a00306.html#a77a09ddd78ee3e9ff5f532a6ac74f7eb">hwloc_topology_cpubind_support::get_thisproc_cpubind</a></div><div class="ttdeci">unsigned char get_thisproc_cpubind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2084</div></div>
902 <div class="ttc" id="aa00306_html_a80d762e532d677dff262d83cc7bb1c60"><div class="ttname"><a href="a00306.html#a80d762e532d677dff262d83cc7bb1c60">hwloc_topology_cpubind_support::get_thisthread_cpubind</a></div><div class="ttdeci">unsigned char get_thisthread_cpubind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2092</div></div>
903 <div class="ttc" id="aa00306_html_a8dd4d8531ed2eebdce1507e7d104154e"><div class="ttname"><a href="a00306.html#a8dd4d8531ed2eebdce1507e7d104154e">hwloc_topology_cpubind_support::get_thread_cpubind</a></div><div class="ttdeci">unsigned char get_thread_cpubind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2096</div></div>
904 <div class="ttc" id="aa00306_html_a9403d51657a4d546b3ea9553a2973a27"><div class="ttname"><a href="a00306.html#a9403d51657a4d546b3ea9553a2973a27">hwloc_topology_cpubind_support::set_thisproc_cpubind</a></div><div class="ttdeci">unsigned char set_thisproc_cpubind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2082</div></div>
905 <div class="ttc" id="aa00306_html_aa166223d1c2a6de7256ab2d8b675a87e"><div class="ttname"><a href="a00306.html#aa166223d1c2a6de7256ab2d8b675a87e">hwloc_topology_cpubind_support::set_proc_cpubind</a></div><div class="ttdeci">unsigned char set_proc_cpubind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2086</div></div>
906 <div class="ttc" id="aa00306_html_aae705bc447adc163ead377362c4dfe9f"><div class="ttname"><a href="a00306.html#aae705bc447adc163ead377362c4dfe9f">hwloc_topology_cpubind_support::get_proc_cpubind</a></div><div class="ttdeci">unsigned char get_proc_cpubind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2088</div></div>
907 <div class="ttc" id="aa00306_html_ad2d5c94b738d92b7d2ede87e4e96321d"><div class="ttname"><a href="a00306.html#ad2d5c94b738d92b7d2ede87e4e96321d">hwloc_topology_cpubind_support::get_thisproc_last_cpu_location</a></div><div class="ttdeci">unsigned char get_thisproc_last_cpu_location</div><div class="ttdef"><b>Definition:</b> hwloc.h:2098</div></div>
908 <div class="ttc" id="aa00310_html"><div class="ttname"><a href="a00310.html">hwloc_topology_membind_support</a></div><div class="ttdoc">Flags describing actual memory binding support for this topology.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2110</div></div>
909 <div class="ttc" id="aa00310_html_a0697af2e41f2e82b8ce71e3cc13f7eac"><div class="ttname"><a href="a00310.html#a0697af2e41f2e82b8ce71e3cc13f7eac">hwloc_topology_membind_support::set_thisthread_membind</a></div><div class="ttdeci">unsigned char set_thisthread_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2120</div></div>
910 <div class="ttc" id="aa00310_html_a0a84e24a06f2fa487fe8c9605c6f68b3"><div class="ttname"><a href="a00310.html#a0a84e24a06f2fa487fe8c9605c6f68b3">hwloc_topology_membind_support::get_area_membind</a></div><div class="ttdeci">unsigned char get_area_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2126</div></div>
911 <div class="ttc" id="aa00310_html_a221098c339dbfab27bd2c9f5d32f123b"><div class="ttname"><a href="a00310.html#a221098c339dbfab27bd2c9f5d32f123b">hwloc_topology_membind_support::firsttouch_membind</a></div><div class="ttdeci">unsigned char firsttouch_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2130</div></div>
912 <div class="ttc" id="aa00310_html_a30173553a68e0a4dd1672d26f8e892b1"><div class="ttname"><a href="a00310.html#a30173553a68e0a4dd1672d26f8e892b1">hwloc_topology_membind_support::get_area_memlocation</a></div><div class="ttdeci">unsigned char get_area_memlocation</div><div class="ttdef"><b>Definition:</b> hwloc.h:2140</div></div>
913 <div class="ttc" id="aa00310_html_a36b3e388df9c6a249427cab7e3724749"><div class="ttname"><a href="a00310.html#a36b3e388df9c6a249427cab7e3724749">hwloc_topology_membind_support::set_thisproc_membind</a></div><div class="ttdeci">unsigned char set_thisproc_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2112</div></div>
914 <div class="ttc" id="aa00310_html_a3c44c6012860bbeba8a0f4c19710858d"><div class="ttname"><a href="a00310.html#a3c44c6012860bbeba8a0f4c19710858d">hwloc_topology_membind_support::interleave_membind</a></div><div class="ttdeci">unsigned char interleave_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2134</div></div>
915 <div class="ttc" id="aa00310_html_a3fd51e6fa5f0dd800322301b46b08559"><div class="ttname"><a href="a00310.html#a3fd51e6fa5f0dd800322301b46b08559">hwloc_topology_membind_support::get_thisproc_membind</a></div><div class="ttdeci">unsigned char get_thisproc_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2114</div></div>
916 <div class="ttc" id="aa00310_html_a476c06f96b65c08b287cf2369966123b"><div class="ttname"><a href="a00310.html#a476c06f96b65c08b287cf2369966123b">hwloc_topology_membind_support::set_area_membind</a></div><div class="ttdeci">unsigned char set_area_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2124</div></div>
917 <div class="ttc" id="aa00310_html_a63b0b2e26157b472f5717ee93cc7c535"><div class="ttname"><a href="a00310.html#a63b0b2e26157b472f5717ee93cc7c535">hwloc_topology_membind_support::get_thisthread_membind</a></div><div class="ttdeci">unsigned char get_thisthread_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2122</div></div>
918 <div class="ttc" id="aa00310_html_a756f44912894b176bf979a1b65f12aac"><div class="ttname"><a href="a00310.html#a756f44912894b176bf979a1b65f12aac">hwloc_topology_membind_support::set_proc_membind</a></div><div class="ttdeci">unsigned char set_proc_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2116</div></div>
919 <div class="ttc" id="aa00310_html_a9880cd2d605e316fc020167c49ca69ad"><div class="ttname"><a href="a00310.html#a9880cd2d605e316fc020167c49ca69ad">hwloc_topology_membind_support::get_proc_membind</a></div><div class="ttdeci">unsigned char get_proc_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2118</div></div>
920 <div class="ttc" id="aa00310_html_aafa7683871a6a760246f9b35209caec5"><div class="ttname"><a href="a00310.html#aafa7683871a6a760246f9b35209caec5">hwloc_topology_membind_support::migrate_membind</a></div><div class="ttdeci">unsigned char migrate_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2138</div></div>
921 <div class="ttc" id="aa00310_html_ab0921af6e0cd6975812a80b8e5c7435c"><div class="ttname"><a href="a00310.html#ab0921af6e0cd6975812a80b8e5c7435c">hwloc_topology_membind_support::nexttouch_membind</a></div><div class="ttdeci">unsigned char nexttouch_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2136</div></div>
922 <div class="ttc" id="aa00310_html_ae551abb27d2aa9ce008583488b845b98"><div class="ttname"><a href="a00310.html#ae551abb27d2aa9ce008583488b845b98">hwloc_topology_membind_support::alloc_membind</a></div><div class="ttdeci">unsigned char alloc_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2128</div></div>
923 <div class="ttc" id="aa00310_html_ae7cdb1f1b5f0242a69f85b5a5538c764"><div class="ttname"><a href="a00310.html#ae7cdb1f1b5f0242a69f85b5a5538c764">hwloc_topology_membind_support::bind_membind</a></div><div class="ttdeci">unsigned char bind_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2132</div></div>
924 <div class="ttc" id="aa00314_html"><div class="ttname"><a href="a00314.html">hwloc_topology_misc_support</a></div><div class="ttdoc">Flags describing miscellaneous features.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2145</div></div>
925 <div class="ttc" id="aa00314_html_adf54a6dbe8e9dd5033dfe9c93df726c4"><div class="ttname"><a href="a00314.html#adf54a6dbe8e9dd5033dfe9c93df726c4">hwloc_topology_misc_support::imported_support</a></div><div class="ttdeci">unsigned char imported_support</div><div class="ttdef"><b>Definition:</b> hwloc.h:2147</div></div>
926 <div class="ttc" id="aa00318_html"><div class="ttname"><a href="a00318.html">hwloc_topology_support</a></div><div class="ttdoc">Set of flags describing actual support for this topology.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2156</div></div>
927 <div class="ttc" id="aa00318_html_ab9d08df4b0b03994f21b893ece826e78"><div class="ttname"><a href="a00318.html#ab9d08df4b0b03994f21b893ece826e78">hwloc_topology_support::misc</a></div><div class="ttdeci">struct hwloc_topology_misc_support * misc</div><div class="ttdef"><b>Definition:</b> hwloc.h:2160</div></div>
928 <div class="ttc" id="aa00318_html_ac6eb62ae8bc0a68dce679a7107a36194"><div class="ttname"><a href="a00318.html#ac6eb62ae8bc0a68dce679a7107a36194">hwloc_topology_support::membind</a></div><div class="ttdeci">struct hwloc_topology_membind_support * membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2159</div></div>
929 <div class="ttc" id="aa00318_html_adef2bb91f74c3e70a2a071393caf5f56"><div class="ttname"><a href="a00318.html#adef2bb91f74c3e70a2a071393caf5f56">hwloc_topology_support::cpubind</a></div><div class="ttdeci">struct hwloc_topology_cpubind_support * cpubind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2158</div></div>
930 <div class="ttc" id="aa00318_html_aea3fbd7653d987d81f848636c420504d"><div class="ttname"><a href="a00318.html#aea3fbd7653d987d81f848636c420504d">hwloc_topology_support::discovery</a></div><div class="ttdeci">struct hwloc_topology_discovery_support * discovery</div><div class="ttdef"><b>Definition:</b> hwloc.h:2157</div></div>
931 </div><!-- fragment --></div><!-- contents -->
932 <!-- start footer part -->
933 <hr class="footer"/><address class="footer"><small>
934 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
935 </small></address>
936 </body>
937 </html>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc.h Source File</title>
7 <title>Hardware Locality (hwloc): helper.h Source File</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3838 <div id="main-nav"></div>
3939 <div id="nav-path" class="navpath">
4040 <ul>
41 <li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li> </ul>
41 <li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_5cb306d949c7931a3b6c77517393dd34.html">hwloc</a></li> </ul>
4242 </div>
4343 </div><!-- top -->
4444 <div class="header">
4545 <div class="headertitle">
46 <div class="title">hwloc.h</div> </div>
46 <div class="title">helper.h</div> </div>
4747 </div><!--header-->
4848 <div class="contents">
4949 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
5050 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2009 CNRS</span></div>
5151 <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * Copyright © 2009-2021 Inria. All rights reserved.</span></div>
5252 <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Copyright © 2009-2012 Université Bordeaux</span></div>
53 <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * Copyright © 2009-2020 Cisco Systems, Inc. All rights reserved.</span></div>
53 <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.</span></div>
5454 <div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
5555 <div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> */</span></div>
5656 <div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
57 <div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">/*=====================================================================</span></div>
58 <div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * PLEASE GO READ THE DOCUMENTATION!</span></div>
59 <div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * ------------------------------------------------</span></div>
60 <div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * $tarball_directory/doc/doxygen-doc/</span></div>
61 <div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * or</span></div>
62 <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> * https://www.open-mpi.org/projects/hwloc/doc/</span></div>
63 <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> *=====================================================================</span></div>
64 <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> *</span></div>
65 <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> * FAIR WARNING: Do NOT expect to be able to figure out all the</span></div>
66 <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * subtleties of hwloc by simply reading function prototypes and</span></div>
67 <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * constant descrptions here in this file.</span></div>
68 <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> *</span></div>
69 <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> * Hwloc has wonderful documentation in both PDF and HTML formats for</span></div>
70 <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment"> * your reading pleasure. The formal documentation explains a LOT of</span></div>
71 <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment"> * hwloc-specific concepts, provides definitions, and discusses the</span></div>
72 <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * &quot;big picture&quot; for many of the things that you&#39;ll find here in this</span></div>
73 <div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> * header file.</span></div>
74 <div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> *</span></div>
75 <div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * The PDF/HTML documentation was generated via Doxygen; much of what</span></div>
76 <div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> * you&#39;ll see in there is also here in this file. BUT THERE IS A LOT</span></div>
77 <div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment"> * THAT IS IN THE PDF/HTML THAT IS ***NOT*** IN hwloc.h!</span></div>
78 <div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="comment"> *</span></div>
79 <div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="comment"> * There are entire paragraph-length descriptions, discussions, and</span></div>
80 <div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="comment"> * pretty prictures to explain subtle corner cases, provide concrete</span></div>
81 <div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="comment"> * examples, etc.</span></div>
82 <div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="comment"> *</span></div>
83 <div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="comment"> * Please, go read the documentation. :-)</span></div>
84 <div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="comment"> *</span></div>
85 <div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="comment"> * Moreover there are several examples of hwloc use under doc/examples</span></div>
86 <div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;<span class="comment"> * in the source tree.</span></div>
87 <div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<span class="comment"> *</span></div>
88 <div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="comment"> *=====================================================================*/</span></div>
89 <div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; </div>
90 <div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="preprocessor">#ifndef HWLOC_H</span></div>
91 <div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="preprocessor">#define HWLOC_H</span></div>
92 <div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; </div>
93 <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="preprocessor">#include &quot;hwloc/autogen/config.h&quot;</span></div>
94 <div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; </div>
95 <div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="preprocessor">#include &lt;sys/types.h&gt;</span></div>
96 <div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="preprocessor">#include &lt;stdio.h&gt;</span></div>
97 <div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div>
98 <div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="preprocessor">#include &lt;limits.h&gt;</span></div>
99 <div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; </div>
100 <div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="comment">/*</span></div>
101 <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="comment"> * Symbol transforms</span></div>
102 <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="comment"> */</span></div>
103 <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="preprocessor">#include &quot;hwloc/rename.h&quot;</span></div>
104 <div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; </div>
105 <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="comment">/*</span></div>
106 <div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="comment"> * Bitmap definitions</span></div>
107 <div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="comment"> */</span></div>
57 <div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#ifndef HWLOC_HELPER_H</span></div>
58 <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#define HWLOC_HELPER_H</span></div>
59 <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; </div>
60 <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#ifndef HWLOC_H</span></div>
61 <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#error Please include the main hwloc.h instead</span></div>
62 <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#endif</span></div>
63 <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
64 <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;stdlib.h&gt;</span></div>
65 <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;errno.h&gt;</span></div>
66 <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
67 <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
68 <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
69 <div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
70 <div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#endif</span></div>
71 <div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
72 <div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
73 <div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
74 <div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="a00204.html#ga547325a4193dbc215d07c23097519d79"> 42</a></span>&#160;<a class="code" href="a00204.html#ga547325a4193dbc215d07c23097519d79">hwloc_get_first_largest_obj_inside_cpuset</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set)</div>
75 <div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;{</div>
76 <div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> obj = <a class="code" href="a00196.html#ga2d4b12fc187dfc53b35f2fa21d21044d">hwloc_get_root_obj</a>(topology);</div>
77 <div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00214.html#gaefa070f9232857ba5a57297ea9a08ea2">hwloc_bitmap_intersects</a>(obj-&gt;<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, set))</div>
78 <div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">return</span> NULL;</div>
79 <div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">while</span> (!<a class="code" href="a00214.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a>(obj-&gt;<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, set)) {</div>
80 <div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="comment">/* while the object intersects without being included, look at its children */</span></div>
81 <div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> child = obj-&gt;<a class="code" href="a00250.html#af51d08a0a79dba517c06c5afedc8d2dc">first_child</a>;</div>
82 <div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">while</span> (child) {</div>
83 <div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00214.html#gaefa070f9232857ba5a57297ea9a08ea2">hwloc_bitmap_intersects</a>(child-&gt;<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, set))</div>
84 <div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">break</span>;</div>
85 <div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; child = child-&gt;<a class="code" href="a00250.html#a7f2343ed476fe4942e6fffd4cade1b40">next_sibling</a>;</div>
86 <div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; }</div>
87 <div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">if</span> (!child)</div>
88 <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="comment">/* no child intersects, return their father */</span></div>
89 <div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">return</span> obj;</div>
90 <div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="comment">/* found one intersecting child, look at its children */</span></div>
91 <div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; obj = child;</div>
92 <div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; }</div>
93 <div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="comment">/* obj is included, return it */</span></div>
94 <div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">return</span> obj;</div>
95 <div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;}</div>
96 <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; </div>
97 <div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="a00204.html#ga34ca563fa3a6a4e05268f36a87668511"> 69</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00204.html#ga34ca563fa3a6a4e05268f36a87668511">hwloc_get_largest_objs_inside_cpuset</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
98 <div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> * __hwloc_restrict objs, <span class="keywordtype">int</span> max);</div>
10899 <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; </div>
109 <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="preprocessor">#include &quot;hwloc/bitmap.h&quot;</span></div>
110 <div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; </div>
111 <div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; </div>
112 <div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
113 <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
114 <div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="preprocessor">#endif</span></div>
115 <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; </div>
116 <div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; </div>
117 <div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="a00188.html#ga8f4dfb8eef138af55dd1a0fa802e5476"> 96</a></span>&#160;<span class="preprocessor">#define HWLOC_API_VERSION 0x00020400</span></div>
118 <div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; </div>
119 <div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="a00188.html#ga9c0b50c98add1adf57ed1ce85bb5190d"> 102</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">unsigned</span> <a class="code" href="a00188.html#ga9c0b50c98add1adf57ed1ce85bb5190d">hwloc_get_api_version</a>(<span class="keywordtype">void</span>);</div>
120 <div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; </div>
121 <div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="a00188.html#gaac5bc1f46f55e10ef0141a68ce70e21f"> 105</a></span>&#160;<span class="preprocessor">#define HWLOC_COMPONENT_ABI 7</span></div>
122 <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; </div>
123 <div class="line"><a name="l00140"></a><span class="lineno"><a class="line" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801"> 140</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> <a class="code" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>;</div>
124 <div class="line"><a name="l00142"></a><span class="lineno"><a class="line" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25"> 142</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>;</div>
125 <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; </div>
126 <div class="line"><a name="l00157"></a><span class="lineno"><a class="line" href="a00189.html#ga37e35730fa7e775b5bb0afe893d6d508"> 157</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> <a class="code" href="a00189.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a>;</div>
127 <div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="a00189.html#ga2f5276235841ad66a79bedad16a5a10c"> 160</a></span>&#160;<span class="keyword">typedef</span> <a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> <a class="code" href="a00189.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a>;</div>
128 <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; </div>
129 <div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55"> 176</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
130 <div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; </div>
131 <div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160;<span class="preprocessor">#define HWLOC_OBJ_TYPE_MIN HWLOC_OBJ_MACHINE </span><span class="comment">/* Sentinel value */</span><span class="preprocessor"></span></div>
132 <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a3f4e83ffc4a259354959ae8a9eaa2a80">HWLOC_OBJ_MACHINE</a>, </div>
133 <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55ab16ab8c0dbffc234921d86f3dfb63129">HWLOC_OBJ_PACKAGE</a>, </div>
134 <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55ac793958f330bca371aa1535de8aff45f">HWLOC_OBJ_CORE</a>, </div>
135 <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661">HWLOC_OBJ_PU</a>, </div>
136 <div class="line"><a name="l00213"></a><span class="lineno"><a class="line" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a56389b8eb2e2f74f288bb657c4e72140"> 213</a></span>&#160; <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a56389b8eb2e2f74f288bb657c4e72140">HWLOC_OBJ_L1CACHE</a>, </div>
137 <div class="line"><a name="l00214"></a><span class="lineno"><a class="line" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a18f61d19fe9f4bcea978fcc68bc078fb"> 214</a></span>&#160; <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a18f61d19fe9f4bcea978fcc68bc078fb">HWLOC_OBJ_L2CACHE</a>, </div>
138 <div class="line"><a name="l00215"></a><span class="lineno"><a class="line" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a25fae0e0514c90e3973a29866a5a837d"> 215</a></span>&#160; <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a25fae0e0514c90e3973a29866a5a837d">HWLOC_OBJ_L3CACHE</a>, </div>
139 <div class="line"><a name="l00216"></a><span class="lineno"><a class="line" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a54923bfa13df9d7e6d6dd0d5baff5f72"> 216</a></span>&#160; <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a54923bfa13df9d7e6d6dd0d5baff5f72">HWLOC_OBJ_L4CACHE</a>, </div>
140 <div class="line"><a name="l00217"></a><span class="lineno"><a class="line" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a67194c9de5e3e581c64c11d2eb1c109d"> 217</a></span>&#160; <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a67194c9de5e3e581c64c11d2eb1c109d">HWLOC_OBJ_L5CACHE</a>, </div>
141 <div class="line"><a name="l00219"></a><span class="lineno"><a class="line" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55afa834a85d9e53836cf0db6d0bd8329b4"> 219</a></span>&#160; <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55afa834a85d9e53836cf0db6d0bd8329b4">HWLOC_OBJ_L1ICACHE</a>, </div>
142 <div class="line"><a name="l00220"></a><span class="lineno"><a class="line" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a10713b7e561b8cc32544cd31b1c17f8d"> 220</a></span>&#160; <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a10713b7e561b8cc32544cd31b1c17f8d">HWLOC_OBJ_L2ICACHE</a>, </div>
143 <div class="line"><a name="l00221"></a><span class="lineno"><a class="line" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55ac22850c717f07bf7ffb316fadd08d218"> 221</a></span>&#160; <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55ac22850c717f07bf7ffb316fadd08d218">HWLOC_OBJ_L3ICACHE</a>, </div>
144 <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a5269ef95be72f88465559d35c9b7ad56">HWLOC_OBJ_GROUP</a>, </div>
145 <div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>, </div>
146 <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0">HWLOC_OBJ_BRIDGE</a>, </div>
147 <div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a>, </div>
148 <div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075">HWLOC_OBJ_OS_DEVICE</a>, </div>
149 <div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a19f8a6953fa91efc76bcbcdf2d22de4d">HWLOC_OBJ_MISC</a>, </div>
150 <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a0ed5bd98974729a0c476c39e917dabd6">HWLOC_OBJ_MEMCACHE</a>, </div>
151 <div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55af78bb6cde53aaaaa162a7dc420c409da">HWLOC_OBJ_DIE</a>, </div>
152 <div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; HWLOC_OBJ_TYPE_MAX </div>
153 <div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;} <a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>;</div>
154 <div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; </div>
155 <div class="line"><a name="l00326"></a><span class="lineno"><a class="line" href="a00190.html#ga791c9875c8fe20f3e1e5871e0657e59b"> 326</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="a00190.html#ga791c9875c8fe20f3e1e5871e0657e59b">hwloc_obj_cache_type_e</a> {</div>
156 <div class="line"><a name="l00327"></a><span class="lineno"><a class="line" href="a00190.html#gga791c9875c8fe20f3e1e5871e0657e59ba3900b3b2db54941aac249e5a638a2d7a"> 327</a></span>&#160; <a class="code" href="a00190.html#gga791c9875c8fe20f3e1e5871e0657e59ba3900b3b2db54941aac249e5a638a2d7a">HWLOC_OBJ_CACHE_UNIFIED</a>, </div>
157 <div class="line"><a name="l00328"></a><span class="lineno"><a class="line" href="a00190.html#gga791c9875c8fe20f3e1e5871e0657e59bacac60ecad4206f85aeb79bef1604b488"> 328</a></span>&#160; <a class="code" href="a00190.html#gga791c9875c8fe20f3e1e5871e0657e59bacac60ecad4206f85aeb79bef1604b488">HWLOC_OBJ_CACHE_DATA</a>, </div>
158 <div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <a class="code" href="a00190.html#gga791c9875c8fe20f3e1e5871e0657e59ba6f98b0d422b38ba90c5f5c79a11b0658">HWLOC_OBJ_CACHE_INSTRUCTION</a> </div>
159 <div class="line"><a name="l00330"></a><span class="lineno"><a class="line" href="a00190.html#gga791c9875c8fe20f3e1e5871e0657e59ba6f98b0d422b38ba90c5f5c79a11b0658"> 330</a></span>&#160;} <a class="code" href="a00190.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a>;</div>
100 <div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
101 <div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="a00204.html#ga63e3784e7c60fbae5073428cb98ac787"> 85</a></span>&#160;<a class="code" href="a00204.html#ga63e3784e7c60fbae5073428cb98ac787">hwloc_get_next_obj_inside_cpuset_by_depth</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
102 <div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordtype">int</span> depth, <a class="code" href="a00250.html">hwloc_obj_t</a> prev)</div>
103 <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;{</div>
104 <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> next = <a class="code" href="a00196.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a>(topology, depth, prev);</div>
105 <div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">if</span> (!next)</div>
106 <div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">return</span> NULL;</div>
107 <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">while</span> (next &amp;&amp; (<a class="code" href="a00214.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(next-&gt;<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>) || !<a class="code" href="a00214.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a>(next-&gt;<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, set)))</div>
108 <div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; next = next-&gt;<a class="code" href="a00250.html#a85a788017457129589318b6c39451acf">next_cousin</a>;</div>
109 <div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">return</span> next;</div>
110 <div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;}</div>
111 <div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; </div>
112 <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
113 <div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="a00204.html#gafe859176cf9233f215fea0e87cef47e7"> 109</a></span>&#160;<a class="code" href="a00204.html#gafe859176cf9233f215fea0e87cef47e7">hwloc_get_next_obj_inside_cpuset_by_type</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
114 <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, <a class="code" href="a00250.html">hwloc_obj_t</a> prev)</div>
115 <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;{</div>
116 <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordtype">int</span> depth = <a class="code" href="a00196.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, type);</div>
117 <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">if</span> (depth == <a class="code" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a> || depth == <a class="code" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c">HWLOC_TYPE_DEPTH_MULTIPLE</a>)</div>
118 <div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">return</span> NULL;</div>
119 <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">return</span> <a class="code" href="a00204.html#ga63e3784e7c60fbae5073428cb98ac787">hwloc_get_next_obj_inside_cpuset_by_depth</a>(topology, set, depth, prev);</div>
120 <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;}</div>
121 <div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; </div>
122 <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
123 <div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;<a class="code" href="a00204.html#gaec86f1f88832836e3f9338e246ea5862">hwloc_get_obj_inside_cpuset_by_depth</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
124 <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordtype">int</span> depth, <span class="keywordtype">unsigned</span> idx) __hwloc_attribute_pure;</div>
125 <div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
126 <div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="a00204.html#gaec86f1f88832836e3f9338e246ea5862"> 130</a></span>&#160;<a class="code" href="a00204.html#gaec86f1f88832836e3f9338e246ea5862">hwloc_get_obj_inside_cpuset_by_depth</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
127 <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordtype">int</span> depth, <span class="keywordtype">unsigned</span> idx)</div>
128 <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;{</div>
129 <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> obj = <a class="code" href="a00196.html#ga391f6b2613f0065673eaa4069b93d4e0">hwloc_get_obj_by_depth</a> (topology, depth, 0);</div>
130 <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordtype">unsigned</span> count = 0;</div>
131 <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">if</span> (!obj)</div>
132 <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">return</span> NULL;</div>
133 <div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">while</span> (obj) {</div>
134 <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00214.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(obj-&gt;<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>) &amp;&amp; <a class="code" href="a00214.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a>(obj-&gt;<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, set)) {</div>
135 <div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">if</span> (count == idx)</div>
136 <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">return</span> obj;</div>
137 <div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; count++;</div>
138 <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; }</div>
139 <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; obj = obj-&gt;<a class="code" href="a00250.html#a85a788017457129589318b6c39451acf">next_cousin</a>;</div>
140 <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; }</div>
141 <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">return</span> NULL;</div>
142 <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;}</div>
143 <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; </div>
144 <div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
145 <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;<a class="code" href="a00204.html#ga2edf924e5a0cca9cb22f65cc77c6ddb5">hwloc_get_obj_inside_cpuset_by_type</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
146 <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, <span class="keywordtype">unsigned</span> idx) __hwloc_attribute_pure;</div>
147 <div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
148 <div class="line"><a name="l00164"></a><span class="lineno"><a class="line" href="a00204.html#ga2edf924e5a0cca9cb22f65cc77c6ddb5"> 164</a></span>&#160;<a class="code" href="a00204.html#ga2edf924e5a0cca9cb22f65cc77c6ddb5">hwloc_get_obj_inside_cpuset_by_type</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
149 <div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, <span class="keywordtype">unsigned</span> idx)</div>
150 <div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;{</div>
151 <div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordtype">int</span> depth = <a class="code" href="a00196.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, type);</div>
152 <div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">if</span> (depth == <a class="code" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a> || depth == <a class="code" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c">HWLOC_TYPE_DEPTH_MULTIPLE</a>)</div>
153 <div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">return</span> NULL;</div>
154 <div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">return</span> <a class="code" href="a00204.html#gaec86f1f88832836e3f9338e246ea5862">hwloc_get_obj_inside_cpuset_by_depth</a>(topology, set, depth, idx);</div>
155 <div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;}</div>
156 <div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; </div>
157 <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">unsigned</span></div>
158 <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;<a class="code" href="a00204.html#gaa43c64512ddb33fd181990c4261cec7d">hwloc_get_nbobjs_inside_cpuset_by_depth</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
159 <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordtype">int</span> depth) __hwloc_attribute_pure;</div>
160 <div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">unsigned</span></div>
161 <div class="line"><a name="l00185"></a><span class="lineno"><a class="line" href="a00204.html#gaa43c64512ddb33fd181990c4261cec7d"> 185</a></span>&#160;<a class="code" href="a00204.html#gaa43c64512ddb33fd181990c4261cec7d">hwloc_get_nbobjs_inside_cpuset_by_depth</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
162 <div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keywordtype">int</span> depth)</div>
163 <div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;{</div>
164 <div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> obj = <a class="code" href="a00196.html#ga391f6b2613f0065673eaa4069b93d4e0">hwloc_get_obj_by_depth</a> (topology, depth, 0);</div>
165 <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keywordtype">unsigned</span> count = 0;</div>
166 <div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">if</span> (!obj)</div>
167 <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordflow">return</span> 0;</div>
168 <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keywordflow">while</span> (obj) {</div>
169 <div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00214.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(obj-&gt;<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>) &amp;&amp; <a class="code" href="a00214.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a>(obj-&gt;<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, set))</div>
170 <div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; count++;</div>
171 <div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; obj = obj-&gt;<a class="code" href="a00250.html#a85a788017457129589318b6c39451acf">next_cousin</a>;</div>
172 <div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; }</div>
173 <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordflow">return</span> count;</div>
174 <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;}</div>
175 <div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; </div>
176 <div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
177 <div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;<a class="code" href="a00204.html#ga133c40415de008518608f8bff52a5ab9">hwloc_get_nbobjs_inside_cpuset_by_type</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
178 <div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type) __hwloc_attribute_pure;</div>
179 <div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
180 <div class="line"><a name="l00216"></a><span class="lineno"><a class="line" href="a00204.html#ga133c40415de008518608f8bff52a5ab9"> 216</a></span>&#160;<a class="code" href="a00204.html#ga133c40415de008518608f8bff52a5ab9">hwloc_get_nbobjs_inside_cpuset_by_type</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
181 <div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</div>
182 <div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;{</div>
183 <div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordtype">int</span> depth = <a class="code" href="a00196.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, type);</div>
184 <div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordflow">if</span> (depth == <a class="code" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a>)</div>
185 <div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordflow">return</span> 0;</div>
186 <div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">if</span> (depth == <a class="code" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c">HWLOC_TYPE_DEPTH_MULTIPLE</a>)</div>
187 <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">return</span> -1; <span class="comment">/* FIXME: agregate nbobjs from different levels? */</span></div>
188 <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">return</span> (<span class="keywordtype">int</span>) <a class="code" href="a00204.html#gaa43c64512ddb33fd181990c4261cec7d">hwloc_get_nbobjs_inside_cpuset_by_depth</a>(topology, set, depth);</div>
189 <div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;}</div>
190 <div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; </div>
191 <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
192 <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;<a class="code" href="a00204.html#ga4c3a20d61e9beb06c667b21688c772c5">hwloc_get_obj_index_inside_cpuset</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
193 <div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> obj) __hwloc_attribute_pure;</div>
194 <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
195 <div class="line"><a name="l00244"></a><span class="lineno"><a class="line" href="a00204.html#ga4c3a20d61e9beb06c667b21688c772c5"> 244</a></span>&#160;<a class="code" href="a00204.html#ga4c3a20d61e9beb06c667b21688c772c5">hwloc_get_obj_index_inside_cpuset</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
196 <div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> obj)</div>
197 <div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;{</div>
198 <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keywordtype">int</span> idx = 0;</div>
199 <div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00214.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a>(obj-&gt;<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, set))</div>
200 <div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keywordflow">return</span> -1;</div>
201 <div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="comment">/* count how many objects are inside the cpuset on the way from us to the beginning of the level */</span></div>
202 <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordflow">while</span> ((obj = obj-&gt;<a class="code" href="a00250.html#ac715989f55ff5a0eb6be2969ee477ec0">prev_cousin</a>) != NULL)</div>
203 <div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00214.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(obj-&gt;<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>) &amp;&amp; <a class="code" href="a00214.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a>(obj-&gt;<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, set))</div>
204 <div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; idx++;</div>
205 <div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">return</span> idx;</div>
206 <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;}</div>
207 <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; </div>
208 <div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
209 <div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;<a class="code" href="a00205.html#ga0e66aa2dc6b2527cfd10723af646c9d7">hwloc_get_child_covering_cpuset</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
210 <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> parent) __hwloc_attribute_pure;</div>
211 <div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
212 <div class="line"><a name="l00275"></a><span class="lineno"><a class="line" href="a00205.html#ga0e66aa2dc6b2527cfd10723af646c9d7"> 275</a></span>&#160;<a class="code" href="a00205.html#ga0e66aa2dc6b2527cfd10723af646c9d7">hwloc_get_child_covering_cpuset</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
213 <div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> parent)</div>
214 <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;{</div>
215 <div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> child;</div>
216 <div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00214.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(set))</div>
217 <div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">return</span> NULL;</div>
218 <div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; child = parent-&gt;<a class="code" href="a00250.html#af51d08a0a79dba517c06c5afedc8d2dc">first_child</a>;</div>
219 <div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">while</span> (child) {</div>
220 <div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keywordflow">if</span> (child-&gt;<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a> &amp;&amp; <a class="code" href="a00214.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a>(set, child-&gt;<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>))</div>
221 <div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keywordflow">return</span> child;</div>
222 <div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; child = child-&gt;<a class="code" href="a00250.html#a7f2343ed476fe4942e6fffd4cade1b40">next_sibling</a>;</div>
223 <div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; }</div>
224 <div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordflow">return</span> NULL;</div>
225 <div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;}</div>
226 <div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; </div>
227 <div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
228 <div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;<a class="code" href="a00205.html#ga41acdcdbb8b95d70ecf6c572a3f67dca">hwloc_get_obj_covering_cpuset</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set) __hwloc_attribute_pure;</div>
229 <div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
230 <div class="line"><a name="l00297"></a><span class="lineno"><a class="line" href="a00205.html#ga41acdcdbb8b95d70ecf6c572a3f67dca"> 297</a></span>&#160;<a class="code" href="a00205.html#ga41acdcdbb8b95d70ecf6c572a3f67dca">hwloc_get_obj_covering_cpuset</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set)</div>
231 <div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;{</div>
232 <div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keyword">struct </span><a class="code" href="a00250.html">hwloc_obj</a> *current = <a class="code" href="a00196.html#ga2d4b12fc187dfc53b35f2fa21d21044d">hwloc_get_root_obj</a>(topology);</div>
233 <div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00214.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(set) || !<a class="code" href="a00214.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a>(set, current-&gt;<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>))</div>
234 <div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keywordflow">return</span> NULL;</div>
235 <div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keywordflow">while</span> (1) {</div>
236 <div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> child = <a class="code" href="a00205.html#ga0e66aa2dc6b2527cfd10723af646c9d7">hwloc_get_child_covering_cpuset</a>(topology, set, current);</div>
237 <div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">if</span> (!child)</div>
238 <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keywordflow">return</span> current;</div>
239 <div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; current = child;</div>
240 <div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; }</div>
241 <div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;}</div>
242 <div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; </div>
243 <div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
244 <div class="line"><a name="l00321"></a><span class="lineno"><a class="line" href="a00205.html#gaba4b6d86eba1169ced4b0e941d2bb5f0"> 321</a></span>&#160;<a class="code" href="a00205.html#gaba4b6d86eba1169ced4b0e941d2bb5f0">hwloc_get_next_obj_covering_cpuset_by_depth</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
245 <div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keywordtype">int</span> <a class="code" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>, <a class="code" href="a00250.html">hwloc_obj_t</a> prev)</div>
246 <div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;{</div>
247 <div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> next = <a class="code" href="a00196.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a>(topology, <a class="code" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>, prev);</div>
248 <div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordflow">if</span> (!next)</div>
249 <div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordflow">return</span> NULL;</div>
250 <div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keywordflow">while</span> (next &amp;&amp; !<a class="code" href="a00214.html#gaefa070f9232857ba5a57297ea9a08ea2">hwloc_bitmap_intersects</a>(set, next-&gt;<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>))</div>
251 <div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; next = next-&gt;<a class="code" href="a00250.html#a85a788017457129589318b6c39451acf">next_cousin</a>;</div>
252 <div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keywordflow">return</span> next;</div>
253 <div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160;}</div>
160254 <div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; </div>
161 <div class="line"><a name="l00333"></a><span class="lineno"><a class="line" href="a00190.html#ga48a4803c72574191d7ead1c62aaf9860"> 333</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="a00190.html#ga48a4803c72574191d7ead1c62aaf9860">hwloc_obj_bridge_type_e</a> {</div>
162 <div class="line"><a name="l00334"></a><span class="lineno"><a class="line" href="a00190.html#gga48a4803c72574191d7ead1c62aaf9860a2c7660f3864ad2810c1e72aad285e574"> 334</a></span>&#160; <a class="code" href="a00190.html#gga48a4803c72574191d7ead1c62aaf9860a2c7660f3864ad2810c1e72aad285e574">HWLOC_OBJ_BRIDGE_HOST</a>, </div>
163 <div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <a class="code" href="a00190.html#gga48a4803c72574191d7ead1c62aaf9860a8f3b4cecf3dab6073d74696d10863c60">HWLOC_OBJ_BRIDGE_PCI</a> </div>
164 <div class="line"><a name="l00336"></a><span class="lineno"><a class="line" href="a00190.html#gga48a4803c72574191d7ead1c62aaf9860a8f3b4cecf3dab6073d74696d10863c60"> 336</a></span>&#160;} <a class="code" href="a00190.html#gab34362c7a23296c3f12c5756747abda3">hwloc_obj_bridge_type_t</a>;</div>
165 <div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; </div>
166 <div class="line"><a name="l00339"></a><span class="lineno"><a class="line" href="a00190.html#ga64f5d539df299c97ae80ce53fc4b56c0"> 339</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="a00190.html#ga64f5d539df299c97ae80ce53fc4b56c0">hwloc_obj_osdev_type_e</a> {</div>
167 <div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <a class="code" href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0a689b0488c3c0d08d116751c6b9cb8871">HWLOC_OBJ_OSDEV_BLOCK</a>, </div>
168 <div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <a class="code" href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90">HWLOC_OBJ_OSDEV_GPU</a>, </div>
169 <div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <a class="code" href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0ab715d81155f771573c8682dffc65021b">HWLOC_OBJ_OSDEV_NETWORK</a>, </div>
170 <div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <a class="code" href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0a52157d03694fdae82dddd57ca8c973b6">HWLOC_OBJ_OSDEV_OPENFABRICS</a>, </div>
171 <div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <a class="code" href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0a827ad1643360711a8b6c6af671366791">HWLOC_OBJ_OSDEV_DMA</a>, </div>
172 <div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <a class="code" href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83">HWLOC_OBJ_OSDEV_COPROC</a> </div>
173 <div class="line"><a name="l00355"></a><span class="lineno"><a class="line" href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83"> 355</a></span>&#160;} <a class="code" href="a00190.html#gaa9a6941ef7b1c169412518d7ef71b3d2">hwloc_obj_osdev_type_t</a>;</div>
255 <div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
256 <div class="line"><a name="l00348"></a><span class="lineno"><a class="line" href="a00205.html#ga91cfae08b092e7966002e15d1e987213"> 348</a></span>&#160;<a class="code" href="a00205.html#ga91cfae08b092e7966002e15d1e987213">hwloc_get_next_obj_covering_cpuset_by_type</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
257 <div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00250.html#acc4f0803f244867e68fe0036800be5de">type</a>, <a class="code" href="a00250.html">hwloc_obj_t</a> prev)</div>
258 <div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;{</div>
259 <div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordtype">int</span> <a class="code" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> = <a class="code" href="a00196.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00250.html#acc4f0803f244867e68fe0036800be5de">type</a>);</div>
260 <div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> == <a class="code" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a> || <a class="code" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> == <a class="code" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c">HWLOC_TYPE_DEPTH_MULTIPLE</a>)</div>
261 <div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keywordflow">return</span> NULL;</div>
262 <div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordflow">return</span> <a class="code" href="a00205.html#gaba4b6d86eba1169ced4b0e941d2bb5f0">hwloc_get_next_obj_covering_cpuset_by_depth</a>(topology, set, <a class="code" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>, prev);</div>
263 <div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160;}</div>
174264 <div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; </div>
175 <div class="line"><a name="l00376"></a><span class="lineno"><a class="line" href="a00190.html#ga1820ea0dfd8e9dca28f9ea7624df5ae2"> 376</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00190.html#ga1820ea0dfd8e9dca28f9ea7624df5ae2">hwloc_compare_types</a> (<a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type1, <a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type2) __hwloc_attribute_const;</div>
176 <div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; </div>
177 <div class="line"><a name="l00379"></a><span class="lineno"><a class="line" href="a00190.html#ga3b6e4128e9fe773863b123fa6e4a080b"> 379</a></span>&#160;<span class="preprocessor">#define HWLOC_TYPE_UNORDERED INT_MAX</span></div>
178 <div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; </div>
179 <div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;<span class="keyword">union </span><a class="code" href="a00248.html">hwloc_obj_attr_u</a>;</div>
180 <div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; </div>
181 <div class="line"><a name="l00395"></a><span class="lineno"><a class="line" href="a00244.html"> 395</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00244.html">hwloc_obj</a> {</div>
182 <div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="comment">/* physical information */</span></div>
183 <div class="line"><a name="l00397"></a><span class="lineno"><a class="line" href="a00244.html#acc4f0803f244867e68fe0036800be5de"> 397</a></span>&#160; <a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00244.html#acc4f0803f244867e68fe0036800be5de">type</a>; </div>
184 <div class="line"><a name="l00398"></a><span class="lineno"><a class="line" href="a00244.html#a5d4f97e76723a9ec8d38046f19e00d33"> 398</a></span>&#160; <span class="keywordtype">char</span> *<a class="code" href="a00244.html#a5d4f97e76723a9ec8d38046f19e00d33">subtype</a>; </div>
185 <div class="line"><a name="l00400"></a><span class="lineno"><a class="line" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9"> 400</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>; </div>
186 <div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160;<span class="preprocessor">#define HWLOC_UNKNOWN_INDEX (unsigned)-1</span></div>
187 <div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; </div>
188 <div class="line"><a name="l00407"></a><span class="lineno"><a class="line" href="a00244.html#abb709ec38f2970677e4e57d1d30be96d"> 407</a></span>&#160; <span class="keywordtype">char</span> *<a class="code" href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">name</a>; </div>
189 <div class="line"><a name="l00412"></a><span class="lineno"><a class="line" href="a00244.html#a75603fc36c9284ba48ce814b772a58b6"> 412</a></span>&#160; hwloc_uint64_t <a class="code" href="a00244.html#a75603fc36c9284ba48ce814b772a58b6">total_memory</a>; </div>
190 <div class="line"><a name="l00414"></a><span class="lineno"><a class="line" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8"> 414</a></span>&#160; <span class="keyword">union </span><a class="code" href="a00248.html">hwloc_obj_attr_u</a> *<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>; </div>
191 <div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="comment">/* global position */</span></div>
192 <div class="line"><a name="l00418"></a><span class="lineno"><a class="line" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed"> 418</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>; </div>
193 <div class="line"><a name="l00433"></a><span class="lineno"><a class="line" href="a00244.html#a0d07fb7b8935e137c94d75a3eb492ae9"> 433</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00244.html#a0d07fb7b8935e137c94d75a3eb492ae9">logical_index</a>; </div>
194 <div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="comment">/* cousins are all objects of the same type (and depth) across the entire topology */</span></div>
195 <div class="line"><a name="l00441"></a><span class="lineno"><a class="line" href="a00244.html#a85a788017457129589318b6c39451acf"> 441</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00244.html">hwloc_obj</a> *<a class="code" href="a00244.html#a85a788017457129589318b6c39451acf">next_cousin</a>; </div>
196 <div class="line"><a name="l00442"></a><span class="lineno"><a class="line" href="a00244.html#ac715989f55ff5a0eb6be2969ee477ec0"> 442</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00244.html">hwloc_obj</a> *<a class="code" href="a00244.html#ac715989f55ff5a0eb6be2969ee477ec0">prev_cousin</a>; </div>
197 <div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="comment">/* children of the same parent are siblings, even if they may have different type and depth */</span></div>
198 <div class="line"><a name="l00445"></a><span class="lineno"><a class="line" href="a00244.html#adc494f6aed939992be1c55cca5822900"> 445</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00244.html">hwloc_obj</a> *<a class="code" href="a00244.html#adc494f6aed939992be1c55cca5822900">parent</a>; </div>
199 <div class="line"><a name="l00446"></a><span class="lineno"><a class="line" href="a00244.html#aaa6043eee6f55869933c1d974efd9acd"> 446</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00244.html#aaa6043eee6f55869933c1d974efd9acd">sibling_rank</a>; </div>
200 <div class="line"><a name="l00447"></a><span class="lineno"><a class="line" href="a00244.html#a7f2343ed476fe4942e6fffd4cade1b40"> 447</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00244.html">hwloc_obj</a> *<a class="code" href="a00244.html#a7f2343ed476fe4942e6fffd4cade1b40">next_sibling</a>; </div>
201 <div class="line"><a name="l00448"></a><span class="lineno"><a class="line" href="a00244.html#a7b89e8c189876c0158a9282aaaf17f50"> 448</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00244.html">hwloc_obj</a> *<a class="code" href="a00244.html#a7b89e8c189876c0158a9282aaaf17f50">prev_sibling</a>; </div>
202 <div class="line"><a name="l00451"></a><span class="lineno"><a class="line" href="a00244.html#aac3f6da35c9b57599909a44ce2b716c1"> 451</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00244.html#aac3f6da35c9b57599909a44ce2b716c1">arity</a>; </div>
203 <div class="line"><a name="l00455"></a><span class="lineno"><a class="line" href="a00244.html#a04d05403da37bfe17cd63b7c7dd07b1f"> 455</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00244.html">hwloc_obj</a> **<a class="code" href="a00244.html#a04d05403da37bfe17cd63b7c7dd07b1f">children</a>; </div>
204 <div class="line"><a name="l00456"></a><span class="lineno"><a class="line" href="a00244.html#af51d08a0a79dba517c06c5afedc8d2dc"> 456</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00244.html">hwloc_obj</a> *<a class="code" href="a00244.html#af51d08a0a79dba517c06c5afedc8d2dc">first_child</a>; </div>
205 <div class="line"><a name="l00457"></a><span class="lineno"><a class="line" href="a00244.html#a84bd65634dbc55f4158b74443a9bd04f"> 457</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00244.html">hwloc_obj</a> *<a class="code" href="a00244.html#a84bd65634dbc55f4158b74443a9bd04f">last_child</a>; </div>
206 <div class="line"><a name="l00460"></a><span class="lineno"><a class="line" href="a00244.html#a0f41a1d67dc6b661906f2217563637f3"> 460</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="a00244.html#a0f41a1d67dc6b661906f2217563637f3">symmetric_subtree</a>; </div>
207 <div class="line"><a name="l00471"></a><span class="lineno"><a class="line" href="a00244.html#a6f834ea4dd26553cdea601d2fae6d3b7"> 471</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00244.html#a6f834ea4dd26553cdea601d2fae6d3b7">memory_arity</a>; </div>
208 <div class="line"><a name="l00474"></a><span class="lineno"><a class="line" href="a00244.html#ac0e8200dba25b90d5954bd4ec61f97d3"> 474</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00244.html">hwloc_obj</a> *<a class="code" href="a00244.html#ac0e8200dba25b90d5954bd4ec61f97d3">memory_first_child</a>; </div>
209 <div class="line"><a name="l00489"></a><span class="lineno"><a class="line" href="a00244.html#a7b3b29f0be377c7d2d52262019fc7d11"> 489</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00244.html#a7b3b29f0be377c7d2d52262019fc7d11">io_arity</a>; </div>
210 <div class="line"><a name="l00492"></a><span class="lineno"><a class="line" href="a00244.html#a8d14c88e1ebc4ae67cc69f9e928558b3"> 492</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00244.html">hwloc_obj</a> *<a class="code" href="a00244.html#a8d14c88e1ebc4ae67cc69f9e928558b3">io_first_child</a>; </div>
211 <div class="line"><a name="l00501"></a><span class="lineno"><a class="line" href="a00244.html#a2bb7862ce722d7ceda23cfa153da165a"> 501</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00244.html#a2bb7862ce722d7ceda23cfa153da165a">misc_arity</a>; </div>
212 <div class="line"><a name="l00504"></a><span class="lineno"><a class="line" href="a00244.html#a57812a313fe9b1a9500489f47c3011cc"> 504</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00244.html">hwloc_obj</a> *<a class="code" href="a00244.html#a57812a313fe9b1a9500489f47c3011cc">misc_first_child</a>; </div>
213 <div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="comment">/* cpusets and nodesets */</span></div>
214 <div class="line"><a name="l00511"></a><span class="lineno"><a class="line" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f"> 511</a></span>&#160; <a class="code" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> <a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>; </div>
215 <div class="line"><a name="l00526"></a><span class="lineno"><a class="line" href="a00244.html#a91788a9da687beb7224cc1fd7b75208c"> 526</a></span>&#160; <a class="code" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> <a class="code" href="a00244.html#a91788a9da687beb7224cc1fd7b75208c">complete_cpuset</a>; </div>
216 <div class="line"><a name="l00539"></a><span class="lineno"><a class="line" href="a00244.html#a08f0d0e16c619a6e653526cbee4ffea3"> 539</a></span>&#160; <a class="code" href="a00189.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a> <a class="code" href="a00244.html#a08f0d0e16c619a6e653526cbee4ffea3">nodeset</a>; </div>
217 <div class="line"><a name="l00561"></a><span class="lineno"><a class="line" href="a00244.html#ac38c4012127525ef74c5615c526f4c2e"> 561</a></span>&#160; <a class="code" href="a00189.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a> <a class="code" href="a00244.html#ac38c4012127525ef74c5615c526f4c2e">complete_nodeset</a>; </div>
218 <div class="line"><a name="l00577"></a><span class="lineno"><a class="line" href="a00244.html#a8604654c38b7a720efae5025d3a96ee6"> 577</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00292.html">hwloc_info_s</a> *<a class="code" href="a00244.html#a8604654c38b7a720efae5025d3a96ee6">infos</a>; </div>
219 <div class="line"><a name="l00578"></a><span class="lineno"><a class="line" href="a00244.html#a9843acc28cfbba903b63ea14b137ff70"> 578</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00244.html#a9843acc28cfbba903b63ea14b137ff70">infos_count</a>; </div>
220 <div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <span class="comment">/* misc */</span></div>
221 <div class="line"><a name="l00581"></a><span class="lineno"><a class="line" href="a00244.html#a76fd3ac94401cf32dfccc3a3a8de68a5"> 581</a></span>&#160; <span class="keywordtype">void</span> *<a class="code" href="a00244.html#a76fd3ac94401cf32dfccc3a3a8de68a5">userdata</a>; </div>
222 <div class="line"><a name="l00586"></a><span class="lineno"><a class="line" href="a00244.html#a957984a355fa61c85f46605c336e7551"> 586</a></span>&#160; hwloc_uint64_t <a class="code" href="a00244.html#a957984a355fa61c85f46605c336e7551">gp_index</a>; </div>
223 <div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160;};</div>
224 <div class="line"><a name="l00595"></a><span class="lineno"><a class="line" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d"> 595</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span><a class="code" href="a00244.html">hwloc_obj</a> * <a class="code" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>;</div>
225 <div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; </div>
226 <div class="line"><a name="l00598"></a><span class="lineno"><a class="line" href="a00248.html"> 598</a></span>&#160;<span class="keyword">union </span><a class="code" href="a00248.html">hwloc_obj_attr_u</a> {</div>
227 <div class="line"><a name="l00600"></a><span class="lineno"><a class="line" href="a00252.html"> 600</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00252.html">hwloc_numanode_attr_s</a> {</div>
228 <div class="line"><a name="l00601"></a><span class="lineno"><a class="line" href="a00252.html#a6703cbf2afbf63c9d60c5ff4dc0c73aa"> 601</a></span>&#160; hwloc_uint64_t <a class="code" href="a00252.html#a6703cbf2afbf63c9d60c5ff4dc0c73aa">local_memory</a>; </div>
229 <div class="line"><a name="l00602"></a><span class="lineno"><a class="line" href="a00252.html#a513078122d403904e16723d30f583cb2"> 602</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00252.html#a513078122d403904e16723d30f583cb2">page_types_len</a>; </div>
230 <div class="line"><a name="l00608"></a><span class="lineno"><a class="line" href="a00256.html"> 608</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00256.html">hwloc_memory_page_type_s</a> {</div>
231 <div class="line"><a name="l00609"></a><span class="lineno"><a class="line" href="a00256.html#a8ea7ebe9d91c7378bba03da57efc25cb"> 609</a></span>&#160; hwloc_uint64_t <a class="code" href="a00256.html#a8ea7ebe9d91c7378bba03da57efc25cb">size</a>; </div>
232 <div class="line"><a name="l00610"></a><span class="lineno"><a class="line" href="a00256.html#a98514e37d57a325b78e21ffd8d7419e0"> 610</a></span>&#160; hwloc_uint64_t <a class="code" href="a00256.html#a98514e37d57a325b78e21ffd8d7419e0">count</a>; </div>
233 <div class="line"><a name="l00611"></a><span class="lineno"><a class="line" href="a00252.html#a7e53c5024da2d7741a5cc1e7016bb8d2"> 611</a></span>&#160; } * <a class="code" href="a00252.html#a7e53c5024da2d7741a5cc1e7016bb8d2">page_types</a>;</div>
234 <div class="line"><a name="l00612"></a><span class="lineno"><a class="line" href="a00248.html#ad066b9612802ffa01e132dc3a8e6cc86"> 612</a></span>&#160; } <a class="code" href="a00248.html#ad066b9612802ffa01e132dc3a8e6cc86">numanode</a>;</div>
235 <div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; </div>
236 <div class="line"><a name="l00615"></a><span class="lineno"><a class="line" href="a00260.html"> 615</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00260.html">hwloc_cache_attr_s</a> {</div>
237 <div class="line"><a name="l00616"></a><span class="lineno"><a class="line" href="a00260.html#abe5e788943ed04302976740c829674c0"> 616</a></span>&#160; hwloc_uint64_t <a class="code" href="a00260.html#abe5e788943ed04302976740c829674c0">size</a>; </div>
238 <div class="line"><a name="l00617"></a><span class="lineno"><a class="line" href="a00260.html#a5c8f7f39193736c2187ed626940835d5"> 617</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00260.html#a5c8f7f39193736c2187ed626940835d5">depth</a>; </div>
239 <div class="line"><a name="l00618"></a><span class="lineno"><a class="line" href="a00260.html#a801e8a668e28caf06c8b88e9ae5c10db"> 618</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00260.html#a801e8a668e28caf06c8b88e9ae5c10db">linesize</a>; </div>
240 <div class="line"><a name="l00619"></a><span class="lineno"><a class="line" href="a00260.html#ad06525e474d1e2d1423ed71bb998592d"> 619</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="a00260.html#ad06525e474d1e2d1423ed71bb998592d">associativity</a>; </div>
241 <div class="line"><a name="l00621"></a><span class="lineno"><a class="line" href="a00260.html#ad8edc8ded2b7a70d6abbc874801930f4"> 621</a></span>&#160; <a class="code" href="a00190.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a> <a class="code" href="a00260.html#ad8edc8ded2b7a70d6abbc874801930f4">type</a>; </div>
242 <div class="line"><a name="l00622"></a><span class="lineno"><a class="line" href="a00248.html#a23f553f3252c9d13f2338231cd354ea9"> 622</a></span>&#160; } <a class="code" href="a00248.html#a23f553f3252c9d13f2338231cd354ea9">cache</a>;</div>
243 <div class="line"><a name="l00624"></a><span class="lineno"><a class="line" href="a00264.html"> 624</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00264.html">hwloc_group_attr_s</a> {</div>
244 <div class="line"><a name="l00625"></a><span class="lineno"><a class="line" href="a00264.html#ad914eac61c77481e1b7037877bcc5579"> 625</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00264.html#ad914eac61c77481e1b7037877bcc5579">depth</a>; </div>
245 <div class="line"><a name="l00627"></a><span class="lineno"><a class="line" href="a00264.html#a3229f269c4cc7e63492c168535e4f0c1"> 627</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00264.html#a3229f269c4cc7e63492c168535e4f0c1">kind</a>; </div>
246 <div class="line"><a name="l00628"></a><span class="lineno"><a class="line" href="a00264.html#ad514d943960a4036ed5e44dc187c74ed"> 628</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00264.html#ad514d943960a4036ed5e44dc187c74ed">subkind</a>; </div>
247 <div class="line"><a name="l00629"></a><span class="lineno"><a class="line" href="a00264.html#afa253d4b70f92e940c226d61f192054f"> 629</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00264.html#afa253d4b70f92e940c226d61f192054f">dont_merge</a>; </div>
248 <div class="line"><a name="l00630"></a><span class="lineno"><a class="line" href="a00248.html#a9eddbd69e34cd2ef6af6d2ac31b6eff3"> 630</a></span>&#160; } <a class="code" href="a00248.html#a9eddbd69e34cd2ef6af6d2ac31b6eff3">group</a>;</div>
249 <div class="line"><a name="l00632"></a><span class="lineno"><a class="line" href="a00268.html"> 632</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00268.html">hwloc_pcidev_attr_s</a> {</div>
250 <div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160;<span class="preprocessor">#ifndef HWLOC_HAVE_32BITS_PCI_DOMAIN</span></div>
251 <div class="line"><a name="l00634"></a><span class="lineno"><a class="line" href="a00268.html#a8fba44988deb98613c1505a4019a34dc"> 634</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code" href="a00268.html#a8fba44988deb98613c1505a4019a34dc">domain</a>; <span class="comment">/* Only 16bits PCI domains are supported by default */</span></div>
252 <div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160;<span class="preprocessor">#else</span></div>
253 <div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="a00268.html#a8fba44988deb98613c1505a4019a34dc">domain</a>; <span class="comment">/* 32bits PCI domain support break the library ABI, hence it&#39;s disabled by default */</span></div>
254 <div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160;<span class="preprocessor">#endif</span></div>
255 <div class="line"><a name="l00638"></a><span class="lineno"><a class="line" href="a00268.html#aae99e035e8d1387d7b8768aaa8eceb0a"> 638</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00268.html#aae99e035e8d1387d7b8768aaa8eceb0a">bus</a>, <a class="code" href="a00268.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">dev</a>, <a class="code" href="a00268.html#a695f32df53f4ef728670bfcf31b74e0f">func</a>;</div>
256 <div class="line"><a name="l00639"></a><span class="lineno"><a class="line" href="a00268.html#aee735352d9f1686fd290fc6d6397c334"> 639</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code" href="a00268.html#aee735352d9f1686fd290fc6d6397c334">class_id</a>;</div>
257 <div class="line"><a name="l00640"></a><span class="lineno"><a class="line" href="a00268.html#a35b66064ab7d768caf7154e410caf0fa"> 640</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code" href="a00268.html#aad970ad19b62eb2d5df30e4802da4f4c">vendor_id</a>, <a class="code" href="a00268.html#a35b66064ab7d768caf7154e410caf0fa">device_id</a>, <a class="code" href="a00268.html#a499db3d8cc89eaba04fcaef3df1cba97">subvendor_id</a>, <a class="code" href="a00268.html#acac741aecd7a6db64f33409427e3971f">subdevice_id</a>;</div>
258 <div class="line"><a name="l00641"></a><span class="lineno"><a class="line" href="a00268.html#a13ad54c93d08d8ac808e4de9674c5ee7"> 641</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00268.html#a13ad54c93d08d8ac808e4de9674c5ee7">revision</a>;</div>
259 <div class="line"><a name="l00642"></a><span class="lineno"><a class="line" href="a00268.html#a59b2fce35f7cbde86c4fd305d0ccda5f"> 642</a></span>&#160; <span class="keywordtype">float</span> <a class="code" href="a00268.html#a59b2fce35f7cbde86c4fd305d0ccda5f">linkspeed</a>; <span class="comment">/* in GB/s */</span></div>
260 <div class="line"><a name="l00643"></a><span class="lineno"><a class="line" href="a00248.html#a0b66da7ab072f7c016f8ed86701f5a7c"> 643</a></span>&#160; } <a class="code" href="a00248.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>;</div>
261 <div class="line"><a name="l00645"></a><span class="lineno"><a class="line" href="a00272.html"> 645</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00272.html">hwloc_bridge_attr_s</a> {</div>
262 <div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <span class="keyword">union </span>{</div>
263 <div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <span class="keyword">struct </span><a class="code" href="a00268.html">hwloc_pcidev_attr_s</a> <a class="code" href="a00272.html#ab5c564e7c95b747dae9eb84ec0a2c31e">pci</a>;</div>
264 <div class="line"><a name="l00648"></a><span class="lineno"><a class="line" href="a00272.html#ab62888c880f8bb730292722f5811958d"> 648</a></span>&#160; } <a class="code" href="a00272.html#ab62888c880f8bb730292722f5811958d">upstream</a>;</div>
265 <div class="line"><a name="l00649"></a><span class="lineno"><a class="line" href="a00272.html#a265dd2164aa2df4972e25a029da72125"> 649</a></span>&#160; <a class="code" href="a00190.html#gab34362c7a23296c3f12c5756747abda3">hwloc_obj_bridge_type_t</a> <a class="code" href="a00272.html#a265dd2164aa2df4972e25a029da72125">upstream_type</a>;</div>
266 <div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="keyword">union </span>{</div>
267 <div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <span class="keyword">struct </span>{</div>
268 <div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160;<span class="preprocessor">#ifndef HWLOC_HAVE_32BITS_PCI_DOMAIN</span></div>
269 <div class="line"><a name="l00653"></a><span class="lineno"><a class="line" href="a00272.html#a2c31e565a5f0d23d0a0a3dd3ec8f4b17"> 653</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> <a class="code" href="a00272.html#a2c31e565a5f0d23d0a0a3dd3ec8f4b17">domain</a>; <span class="comment">/* Only 16bits PCI domains are supported by default */</span></div>
270 <div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160;<span class="preprocessor">#else</span></div>
271 <div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="a00272.html#a2c31e565a5f0d23d0a0a3dd3ec8f4b17">domain</a>; <span class="comment">/* 32bits PCI domain support break the library ABI, hence it&#39;s disabled by default */</span></div>
272 <div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160;<span class="preprocessor">#endif</span></div>
273 <div class="line"><a name="l00657"></a><span class="lineno"><a class="line" href="a00272.html#ae2d9dd73ef1d32045c584a8e66d2f83f"> 657</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00272.html#ae2d9dd73ef1d32045c584a8e66d2f83f">secondary_bus</a>, <a class="code" href="a00272.html#af3f3f7d76bf03e8d2afa721c2b8d6771">subordinate_bus</a>;</div>
274 <div class="line"><a name="l00658"></a><span class="lineno"><a class="line" href="a00272.html#a2fdc40034b915d504724b35cc776a4ec"> 658</a></span>&#160; } <a class="code" href="a00272.html#ab5c564e7c95b747dae9eb84ec0a2c31e">pci</a>;</div>
275 <div class="line"><a name="l00659"></a><span class="lineno"><a class="line" href="a00272.html#a7d5db91d655ba23ffe9bda7a2cbcb9a8"> 659</a></span>&#160; } <a class="code" href="a00272.html#a7d5db91d655ba23ffe9bda7a2cbcb9a8">downstream</a>;</div>
276 <div class="line"><a name="l00660"></a><span class="lineno"><a class="line" href="a00272.html#ac6a169b672d0e9f75756fd5665828b93"> 660</a></span>&#160; <a class="code" href="a00190.html#gab34362c7a23296c3f12c5756747abda3">hwloc_obj_bridge_type_t</a> <a class="code" href="a00272.html#ac6a169b672d0e9f75756fd5665828b93">downstream_type</a>;</div>
277 <div class="line"><a name="l00661"></a><span class="lineno"><a class="line" href="a00272.html#a336c8b22893d5d734d8c9dfca4066b46"> 661</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00272.html#a336c8b22893d5d734d8c9dfca4066b46">depth</a>;</div>
278 <div class="line"><a name="l00662"></a><span class="lineno"><a class="line" href="a00248.html#a207e6359497b7116d6f4baa9e8bbeb43"> 662</a></span>&#160; } <a class="code" href="a00248.html#a207e6359497b7116d6f4baa9e8bbeb43">bridge</a>;</div>
279 <div class="line"><a name="l00664"></a><span class="lineno"><a class="line" href="a00288.html"> 664</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00288.html">hwloc_osdev_attr_s</a> {</div>
280 <div class="line"><a name="l00665"></a><span class="lineno"><a class="line" href="a00288.html#a31e019e27e54ac6138d04be639bb96f9"> 665</a></span>&#160; <a class="code" href="a00190.html#gaa9a6941ef7b1c169412518d7ef71b3d2">hwloc_obj_osdev_type_t</a> <a class="code" href="a00288.html#a31e019e27e54ac6138d04be639bb96f9">type</a>;</div>
281 <div class="line"><a name="l00666"></a><span class="lineno"><a class="line" href="a00248.html#aaf7a5c38b5185703ff18c46ad2761dcf"> 666</a></span>&#160; } <a class="code" href="a00248.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a>;</div>
282 <div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160;};</div>
283 <div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; </div>
284 <div class="line"><a name="l00673"></a><span class="lineno"><a class="line" href="a00292.html"> 673</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00292.html">hwloc_info_s</a> {</div>
285 <div class="line"><a name="l00674"></a><span class="lineno"><a class="line" href="a00292.html#a12ce1309e4381ae38b5c15d242a47124"> 674</a></span>&#160; <span class="keywordtype">char</span> *<a class="code" href="a00292.html#a12ce1309e4381ae38b5c15d242a47124">name</a>; </div>
286 <div class="line"><a name="l00675"></a><span class="lineno"><a class="line" href="a00292.html#a788a0073bafe660645e7b69f31a43bbb"> 675</a></span>&#160; <span class="keywordtype">char</span> *<a class="code" href="a00292.html#a788a0073bafe660645e7b69f31a43bbb">value</a>; </div>
287 <div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160;};</div>
288 <div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; </div>
289 <div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160;<span class="keyword">struct </span>hwloc_topology;</div>
290 <div class="line"><a name="l00691"></a><span class="lineno"><a class="line" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38"> 691</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>hwloc_topology * <a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>;</div>
265 <div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
266 <div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160;<a class="code" href="a00206.html#ga9f8c93fde236e9642a96957af01a11cb">hwloc_get_ancestor_obj_by_depth</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <span class="keywordtype">int</span> <a class="code" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>, <a class="code" href="a00250.html">hwloc_obj_t</a> obj) __hwloc_attribute_pure;</div>
267 <div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
268 <div class="line"><a name="l00380"></a><span class="lineno"><a class="line" href="a00206.html#ga9f8c93fde236e9642a96957af01a11cb"> 380</a></span>&#160;<a class="code" href="a00206.html#ga9f8c93fde236e9642a96957af01a11cb">hwloc_get_ancestor_obj_by_depth</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <span class="keywordtype">int</span> <a class="code" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>, <a class="code" href="a00250.html">hwloc_obj_t</a> obj)</div>
269 <div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160;{</div>
270 <div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> ancestor = obj;</div>
271 <div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordflow">if</span> (obj-&gt;<a class="code" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> &lt; <a class="code" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>)</div>
272 <div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keywordflow">return</span> NULL;</div>
273 <div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="keywordflow">while</span> (ancestor &amp;&amp; ancestor-&gt;<a class="code" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> &gt; <a class="code" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>)</div>
274 <div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; ancestor = ancestor-&gt;<a class="code" href="a00250.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
275 <div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keywordflow">return</span> ancestor;</div>
276 <div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;}</div>
277 <div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; </div>
278 <div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
279 <div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160;<a class="code" href="a00206.html#ga70f0c7583291da707c15ae4daa850f41">hwloc_get_ancestor_obj_by_type</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00250.html#acc4f0803f244867e68fe0036800be5de">type</a>, <a class="code" href="a00250.html">hwloc_obj_t</a> obj) __hwloc_attribute_pure;</div>
280 <div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
281 <div class="line"><a name="l00400"></a><span class="lineno"><a class="line" href="a00206.html#ga70f0c7583291da707c15ae4daa850f41"> 400</a></span>&#160;<a class="code" href="a00206.html#ga70f0c7583291da707c15ae4daa850f41">hwloc_get_ancestor_obj_by_type</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00250.html#acc4f0803f244867e68fe0036800be5de">type</a>, <a class="code" href="a00250.html">hwloc_obj_t</a> obj)</div>
282 <div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160;{</div>
283 <div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> ancestor = obj-&gt;<a class="code" href="a00250.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
284 <div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keywordflow">while</span> (ancestor &amp;&amp; ancestor-&gt;<a class="code" href="a00250.html#acc4f0803f244867e68fe0036800be5de">type</a> != <a class="code" href="a00250.html#acc4f0803f244867e68fe0036800be5de">type</a>)</div>
285 <div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; ancestor = ancestor-&gt;<a class="code" href="a00250.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
286 <div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="keywordflow">return</span> ancestor;</div>
287 <div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160;}</div>
288 <div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; </div>
289 <div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
290 <div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160;<a class="code" href="a00206.html#gab1fa883021928b5c476911c4102e9be3">hwloc_get_common_ancestor_obj</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00250.html">hwloc_obj_t</a> obj1, <a class="code" href="a00250.html">hwloc_obj_t</a> obj2) __hwloc_attribute_pure;</div>
291 <div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
292 <div class="line"><a name="l00412"></a><span class="lineno"><a class="line" href="a00206.html#gab1fa883021928b5c476911c4102e9be3"> 412</a></span>&#160;<a class="code" href="a00206.html#gab1fa883021928b5c476911c4102e9be3">hwloc_get_common_ancestor_obj</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00250.html">hwloc_obj_t</a> obj1, <a class="code" href="a00250.html">hwloc_obj_t</a> obj2)</div>
293 <div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160;{</div>
294 <div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="comment">/* the loop isn&#39;t so easy since intermediate ancestors may have</span></div>
295 <div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;<span class="comment"> * different depth, causing us to alternate between using obj1-&gt;parent</span></div>
296 <div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160;<span class="comment"> * and obj2-&gt;parent. Also, even if at some point we find ancestors of</span></div>
297 <div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160;<span class="comment"> * of the same depth, their ancestors may have different depth again.</span></div>
298 <div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160;<span class="comment"> */</span></div>
299 <div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="keywordflow">while</span> (obj1 != obj2) {</div>
300 <div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="keywordflow">while</span> (obj1-&gt;<a class="code" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> &gt; obj2-&gt;<a class="code" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>)</div>
301 <div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; obj1 = obj1-&gt;<a class="code" href="a00250.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
302 <div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keywordflow">while</span> (obj2-&gt;<a class="code" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> &gt; obj1-&gt;<a class="code" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>)</div>
303 <div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; obj2 = obj2-&gt;<a class="code" href="a00250.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
304 <div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">if</span> (obj1 != obj2 &amp;&amp; obj1-&gt;<a class="code" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> == obj2-&gt;<a class="code" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>) {</div>
305 <div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; obj1 = obj1-&gt;<a class="code" href="a00250.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
306 <div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; obj2 = obj2-&gt;<a class="code" href="a00250.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
307 <div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; }</div>
308 <div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; }</div>
309 <div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="keywordflow">return</span> obj1;</div>
310 <div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160;}</div>
311 <div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; </div>
312 <div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
313 <div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160;<a class="code" href="a00206.html#ga408cf74f5bf9ed497911a320c7f8cc56">hwloc_obj_is_in_subtree</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00250.html">hwloc_obj_t</a> obj, <a class="code" href="a00250.html">hwloc_obj_t</a> subtree_root) __hwloc_attribute_pure;</div>
314 <div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
315 <div class="line"><a name="l00440"></a><span class="lineno"><a class="line" href="a00206.html#ga408cf74f5bf9ed497911a320c7f8cc56"> 440</a></span>&#160;<a class="code" href="a00206.html#ga408cf74f5bf9ed497911a320c7f8cc56">hwloc_obj_is_in_subtree</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00250.html">hwloc_obj_t</a> obj, <a class="code" href="a00250.html">hwloc_obj_t</a> subtree_root)</div>
316 <div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160;{</div>
317 <div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keywordflow">return</span> obj-&gt;<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a> &amp;&amp; subtree_root-&gt;<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a> &amp;&amp; <a class="code" href="a00214.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a>(obj-&gt;<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, subtree_root-&gt;<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>);</div>
318 <div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160;}</div>
319 <div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; </div>
320 <div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
321 <div class="line"><a name="l00456"></a><span class="lineno"><a class="line" href="a00206.html#ga12d8565a3436c565e791ed02a0353621"> 456</a></span>&#160;<a class="code" href="a00206.html#ga12d8565a3436c565e791ed02a0353621">hwloc_get_next_child</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00250.html">hwloc_obj_t</a> <a class="code" href="a00250.html#adc494f6aed939992be1c55cca5822900">parent</a>, <a class="code" href="a00250.html">hwloc_obj_t</a> prev)</div>
322 <div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160;{</div>
323 <div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> obj;</div>
324 <div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <span class="keywordtype">int</span> state = 0;</div>
325 <div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <span class="keywordflow">if</span> (prev) {</div>
326 <div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="keywordflow">if</span> (prev-&gt;<a class="code" href="a00250.html#acc4f0803f244867e68fe0036800be5de">type</a> == <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a19f8a6953fa91efc76bcbcdf2d22de4d">HWLOC_OBJ_MISC</a>)</div>
327 <div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; state = 3;</div>
328 <div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (prev-&gt;<a class="code" href="a00250.html#acc4f0803f244867e68fe0036800be5de">type</a> == <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0">HWLOC_OBJ_BRIDGE</a> || prev-&gt;<a class="code" href="a00250.html#acc4f0803f244867e68fe0036800be5de">type</a> == <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a> || prev-&gt;<a class="code" href="a00250.html#acc4f0803f244867e68fe0036800be5de">type</a> == <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075">HWLOC_OBJ_OS_DEVICE</a>)</div>
329 <div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; state = 2;</div>
330 <div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (prev-&gt;<a class="code" href="a00250.html#acc4f0803f244867e68fe0036800be5de">type</a> == <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>)</div>
331 <div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; state = 1;</div>
332 <div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; obj = prev-&gt;<a class="code" href="a00250.html#a7f2343ed476fe4942e6fffd4cade1b40">next_sibling</a>;</div>
333 <div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; } <span class="keywordflow">else</span> {</div>
334 <div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; obj = <a class="code" href="a00250.html#adc494f6aed939992be1c55cca5822900">parent</a>-&gt;<a class="code" href="a00250.html#af51d08a0a79dba517c06c5afedc8d2dc">first_child</a>;</div>
335 <div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; }</div>
336 <div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="keywordflow">if</span> (!obj &amp;&amp; state == 0) {</div>
337 <div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; obj = <a class="code" href="a00250.html#adc494f6aed939992be1c55cca5822900">parent</a>-&gt;<a class="code" href="a00250.html#ac0e8200dba25b90d5954bd4ec61f97d3">memory_first_child</a>;</div>
338 <div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; state = 1;</div>
339 <div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; }</div>
340 <div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="keywordflow">if</span> (!obj &amp;&amp; state == 1) {</div>
341 <div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; obj = <a class="code" href="a00250.html#adc494f6aed939992be1c55cca5822900">parent</a>-&gt;<a class="code" href="a00250.html#a8d14c88e1ebc4ae67cc69f9e928558b3">io_first_child</a>;</div>
342 <div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; state = 2;</div>
343 <div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; }</div>
344 <div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <span class="keywordflow">if</span> (!obj &amp;&amp; state == 2) {</div>
345 <div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; obj = <a class="code" href="a00250.html#adc494f6aed939992be1c55cca5822900">parent</a>-&gt;<a class="code" href="a00250.html#a57812a313fe9b1a9500489f47c3011cc">misc_first_child</a>;</div>
346 <div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; state = 3;</div>
347 <div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; }</div>
348 <div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <span class="keywordflow">return</span> obj;</div>
349 <div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160;}</div>
350 <div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; </div>
351 <div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
352 <div class="line"><a name="l00513"></a><span class="lineno"><a class="line" href="a00207.html#ga52ef38431eba383b048b98c669b59a16"> 513</a></span>&#160;<a class="code" href="a00207.html#ga52ef38431eba383b048b98c669b59a16">hwloc_obj_type_is_normal</a>(<a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00250.html#acc4f0803f244867e68fe0036800be5de">type</a>);</div>
353 <div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; </div>
354 <div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
355 <div class="line"><a name="l00524"></a><span class="lineno"><a class="line" href="a00207.html#gac8a954ed37a4376097234c828068cbef"> 524</a></span>&#160;<a class="code" href="a00207.html#gac8a954ed37a4376097234c828068cbef">hwloc_obj_type_is_io</a>(<a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00250.html#acc4f0803f244867e68fe0036800be5de">type</a>);</div>
356 <div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; </div>
357 <div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
358 <div class="line"><a name="l00535"></a><span class="lineno"><a class="line" href="a00207.html#ga1d074390c8a3dc3088d84f73fb73f966"> 535</a></span>&#160;<a class="code" href="a00207.html#ga1d074390c8a3dc3088d84f73fb73f966">hwloc_obj_type_is_memory</a>(<a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00250.html#acc4f0803f244867e68fe0036800be5de">type</a>);</div>
359 <div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; </div>
360 <div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
361 <div class="line"><a name="l00544"></a><span class="lineno"><a class="line" href="a00207.html#ga2ed589bea28711e80b92066510a5607d"> 544</a></span>&#160;<a class="code" href="a00207.html#ga2ed589bea28711e80b92066510a5607d">hwloc_obj_type_is_cache</a>(<a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00250.html#acc4f0803f244867e68fe0036800be5de">type</a>);</div>
362 <div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; </div>
363 <div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
364 <div class="line"><a name="l00553"></a><span class="lineno"><a class="line" href="a00207.html#ga395e48cd221d107e5891689624e1aec4"> 553</a></span>&#160;<a class="code" href="a00207.html#ga395e48cd221d107e5891689624e1aec4">hwloc_obj_type_is_dcache</a>(<a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00250.html#acc4f0803f244867e68fe0036800be5de">type</a>);</div>
365 <div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; </div>
366 <div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
367 <div class="line"><a name="l00562"></a><span class="lineno"><a class="line" href="a00207.html#ga8abcee67b9b074332c1866405a3648a9"> 562</a></span>&#160;<a class="code" href="a00207.html#ga8abcee67b9b074332c1866405a3648a9">hwloc_obj_type_is_icache</a>(<a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00250.html#acc4f0803f244867e68fe0036800be5de">type</a>);</div>
368 <div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; </div>
369 <div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
370 <div class="line"><a name="l00594"></a><span class="lineno"><a class="line" href="a00208.html#gad108a09ce400222fe45545257d575489"> 594</a></span>&#160;<a class="code" href="a00208.html#gad108a09ce400222fe45545257d575489">hwloc_get_cache_type_depth</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
371 <div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="keywordtype">unsigned</span> cachelevel, <a class="code" href="a00193.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a> cachetype)</div>
372 <div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160;{</div>
373 <div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="keywordtype">int</span> <a class="code" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>;</div>
374 <div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <span class="keywordtype">int</span> found = <a class="code" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a>;</div>
375 <div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>=0; ; <a class="code" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>++) {</div>
376 <div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> obj = <a class="code" href="a00196.html#ga391f6b2613f0065673eaa4069b93d4e0">hwloc_get_obj_by_depth</a>(topology, <a class="code" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>, 0);</div>
377 <div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; <span class="keywordflow">if</span> (!obj)</div>
378 <div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <span class="keywordflow">break</span>;</div>
379 <div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00207.html#ga395e48cd221d107e5891689624e1aec4">hwloc_obj_type_is_dcache</a>(obj-&gt;<a class="code" href="a00250.html#acc4f0803f244867e68fe0036800be5de">type</a>) || obj-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#a23f553f3252c9d13f2338231cd354ea9">cache</a>.<a class="code" href="a00266.html#a5c8f7f39193736c2187ed626940835d5">depth</a> != cachelevel)</div>
380 <div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <span class="comment">/* doesn&#39;t match, try next depth */</span></div>
381 <div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="keywordflow">continue</span>;</div>
382 <div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <span class="keywordflow">if</span> (cachetype == (<a class="code" href="a00193.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a>) -1) {</div>
383 <div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="keywordflow">if</span> (found != <a class="code" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a>) {</div>
384 <div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <span class="comment">/* second match, return MULTIPLE */</span></div>
385 <div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="keywordflow">return</span> <a class="code" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c">HWLOC_TYPE_DEPTH_MULTIPLE</a>;</div>
386 <div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; }</div>
387 <div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <span class="comment">/* first match, mark it as found */</span></div>
388 <div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; found = <a class="code" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>;</div>
389 <div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <span class="keywordflow">continue</span>;</div>
390 <div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; }</div>
391 <div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <span class="keywordflow">if</span> (obj-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#a23f553f3252c9d13f2338231cd354ea9">cache</a>.<a class="code" href="a00266.html#ad8edc8ded2b7a70d6abbc874801930f4">type</a> == cachetype || obj-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#a23f553f3252c9d13f2338231cd354ea9">cache</a>.<a class="code" href="a00266.html#ad8edc8ded2b7a70d6abbc874801930f4">type</a> == <a class="code" href="a00193.html#gga791c9875c8fe20f3e1e5871e0657e59ba3900b3b2db54941aac249e5a638a2d7a">HWLOC_OBJ_CACHE_UNIFIED</a>)</div>
392 <div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; <span class="comment">/* exact match (either unified is alone, or we match instruction or data), return immediately */</span></div>
393 <div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="keywordflow">return</span> <a class="code" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>;</div>
394 <div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; }</div>
395 <div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <span class="comment">/* went to the bottom, return what we found */</span></div>
396 <div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <span class="keywordflow">return</span> found;</div>
397 <div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160;}</div>
398 <div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; </div>
399 <div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
400 <div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160;<a class="code" href="a00208.html#gac4cd480a5deaa4ada047fdd11ae4c070">hwloc_get_cache_covering_cpuset</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set) __hwloc_attribute_pure;</div>
401 <div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
402 <div class="line"><a name="l00630"></a><span class="lineno"><a class="line" href="a00208.html#gac4cd480a5deaa4ada047fdd11ae4c070"> 630</a></span>&#160;<a class="code" href="a00208.html#gac4cd480a5deaa4ada047fdd11ae4c070">hwloc_get_cache_covering_cpuset</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set)</div>
403 <div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160;{</div>
404 <div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> current = <a class="code" href="a00205.html#ga41acdcdbb8b95d70ecf6c572a3f67dca">hwloc_get_obj_covering_cpuset</a>(topology, set);</div>
405 <div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <span class="keywordflow">while</span> (current) {</div>
406 <div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00207.html#ga395e48cd221d107e5891689624e1aec4">hwloc_obj_type_is_dcache</a>(current-&gt;<a class="code" href="a00250.html#acc4f0803f244867e68fe0036800be5de">type</a>))</div>
407 <div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="keywordflow">return</span> current;</div>
408 <div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; current = current-&gt;<a class="code" href="a00250.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
409 <div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; }</div>
410 <div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <span class="keywordflow">return</span> NULL;</div>
411 <div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160;}</div>
412 <div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; </div>
413 <div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
414 <div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160;<a class="code" href="a00208.html#ga36f48c32837c7a70b424706e213dcd71">hwloc_get_shared_cache_covering_obj</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00250.html">hwloc_obj_t</a> obj) __hwloc_attribute_pure;</div>
415 <div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
416 <div class="line"><a name="l00648"></a><span class="lineno"><a class="line" href="a00208.html#ga36f48c32837c7a70b424706e213dcd71"> 648</a></span>&#160;<a class="code" href="a00208.html#ga36f48c32837c7a70b424706e213dcd71">hwloc_get_shared_cache_covering_obj</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00250.html">hwloc_obj_t</a> obj)</div>
417 <div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160;{</div>
418 <div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> current = obj-&gt;<a class="code" href="a00250.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
419 <div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <span class="keywordflow">if</span> (!obj-&gt;<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>)</div>
420 <div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <span class="keywordflow">return</span> NULL;</div>
421 <div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <span class="keywordflow">while</span> (current) {</div>
422 <div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00214.html#ga32376b1405e57472b73c3aa53bb39663">hwloc_bitmap_isequal</a>(current-&gt;<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, obj-&gt;<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>)</div>
423 <div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; &amp;&amp; <a class="code" href="a00207.html#ga395e48cd221d107e5891689624e1aec4">hwloc_obj_type_is_dcache</a>(current-&gt;<a class="code" href="a00250.html#acc4f0803f244867e68fe0036800be5de">type</a>))</div>
424 <div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="keywordflow">return</span> current;</div>
425 <div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; current = current-&gt;<a class="code" href="a00250.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
426 <div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; }</div>
427 <div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <span class="keywordflow">return</span> NULL;</div>
428 <div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160;}</div>
429 <div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; </div>
430 <div class="line"><a name="l00691"></a><span class="lineno"><a class="line" href="a00209.html#ga050646458efc8ca1120d9f124c5ad861"> 691</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00209.html#ga050646458efc8ca1120d9f124c5ad861">hwloc_bitmap_singlify_per_core</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> <a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, <span class="keywordtype">unsigned</span> which);</div>
291431 <div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; </div>
292 <div class="line"><a name="l00699"></a><span class="lineno"><a class="line" href="a00192.html#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa"> 699</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00192.html#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa">hwloc_topology_init</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> *topologyp);</div>
293 <div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; </div>
294 <div class="line"><a name="l00721"></a><span class="lineno"><a class="line" href="a00192.html#gabdf58d87ad77f6615fccdfe0535ff826"> 721</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00192.html#gabdf58d87ad77f6615fccdfe0535ff826">hwloc_topology_load</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology);</div>
295 <div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; </div>
296 <div class="line"><a name="l00727"></a><span class="lineno"><a class="line" href="a00192.html#ga9f34a640b6fd28d23699d4d084667b15"> 727</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> <a class="code" href="a00192.html#ga9f34a640b6fd28d23699d4d084667b15">hwloc_topology_destroy</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology);</div>
297 <div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; </div>
298 <div class="line"><a name="l00739"></a><span class="lineno"><a class="line" href="a00192.html#ga62a161fc5e6f120344dc69a7bee4e587"> 739</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00192.html#ga62a161fc5e6f120344dc69a7bee4e587">hwloc_topology_dup</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> *newtopology, <a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> oldtopology);</div>
299 <div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; </div>
300 <div class="line"><a name="l00758"></a><span class="lineno"><a class="line" href="a00192.html#ga0647ae66458fe68172eb5a320042f870"> 758</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00192.html#ga0647ae66458fe68172eb5a320042f870">hwloc_topology_abi_check</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology);</div>
301 <div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; </div>
302 <div class="line"><a name="l00771"></a><span class="lineno"><a class="line" href="a00192.html#gaf6746bc3a558ef1ac8348b4491d091b5"> 771</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> <a class="code" href="a00192.html#gaf6746bc3a558ef1ac8348b4491d091b5">hwloc_topology_check</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology);</div>
303 <div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; </div>
304 <div class="line"><a name="l00793"></a><span class="lineno"><a class="line" href="a00193.html#gae54d1782ca9b54bea915f5c18a9158fa"> 793</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00193.html#gae54d1782ca9b54bea915f5c18a9158fa">hwloc_topology_get_depth</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> __hwloc_restrict topology) __hwloc_attribute_pure;</div>
305 <div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; </div>
306 <div class="line"><a name="l00818"></a><span class="lineno"><a class="line" href="a00193.html#ga8bec782e21be313750da70cf7428b374"> 818</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00193.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type);</div>
307 <div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; </div>
308 <div class="line"><a name="l00820"></a><span class="lineno"><a class="line" href="a00193.html#gaf4e663cf42bbe20756b849c6293ef575"> 820</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00193.html#gaf4e663cf42bbe20756b849c6293ef575">hwloc_get_type_depth_e</a> {</div>
309 <div class="line"><a name="l00821"></a><span class="lineno"><a class="line" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad"> 821</a></span>&#160; <a class="code" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a> = -1, </div>
310 <div class="line"><a name="l00822"></a><span class="lineno"><a class="line" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c"> 822</a></span>&#160; <a class="code" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c">HWLOC_TYPE_DEPTH_MULTIPLE</a> = -2, </div>
311 <div class="line"><a name="l00823"></a><span class="lineno"><a class="line" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a245c34ec9884c2cf5de5049b2153ed9c"> 823</a></span>&#160; <a class="code" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a245c34ec9884c2cf5de5049b2153ed9c">HWLOC_TYPE_DEPTH_NUMANODE</a> = -3, </div>
312 <div class="line"><a name="l00824"></a><span class="lineno"><a class="line" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575af93b50182973e4a718d9d4db9e253a90"> 824</a></span>&#160; <a class="code" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575af93b50182973e4a718d9d4db9e253a90">HWLOC_TYPE_DEPTH_BRIDGE</a> = -4, </div>
313 <div class="line"><a name="l00825"></a><span class="lineno"><a class="line" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575ad8b1516e699b57ce1c8d107fbd2f674c"> 825</a></span>&#160; <a class="code" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575ad8b1516e699b57ce1c8d107fbd2f674c">HWLOC_TYPE_DEPTH_PCI_DEVICE</a> = -5, </div>
314 <div class="line"><a name="l00826"></a><span class="lineno"><a class="line" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575afe9a2131073eebbe129d4aa2928d3f46"> 826</a></span>&#160; <a class="code" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575afe9a2131073eebbe129d4aa2928d3f46">HWLOC_TYPE_DEPTH_OS_DEVICE</a> = -6, </div>
315 <div class="line"><a name="l00827"></a><span class="lineno"><a class="line" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a96436a392b4cdcaa1a29bc65351b373f"> 827</a></span>&#160; <a class="code" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a96436a392b4cdcaa1a29bc65351b373f">HWLOC_TYPE_DEPTH_MISC</a> = -7, </div>
316 <div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; <a class="code" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a8b8d7d300c018c0eb65e6c9a9f162101">HWLOC_TYPE_DEPTH_MEMCACHE</a> = -8 </div>
317 <div class="line"><a name="l00829"></a><span class="lineno"><a class="line" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a8b8d7d300c018c0eb65e6c9a9f162101"> 829</a></span>&#160;};</div>
318 <div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; </div>
319 <div class="line"><a name="l00850"></a><span class="lineno"><a class="line" href="a00193.html#gae85786340b88e24835f8c403a1e2e54b"> 850</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00193.html#gae85786340b88e24835f8c403a1e2e54b">hwloc_get_memory_parents_depth</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology);</div>
320 <div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; </div>
321 <div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
322 <div class="line"><a name="l00866"></a><span class="lineno"><a class="line" href="a00193.html#ga8125328e69eba709c33ea8055c12589b"> 866</a></span>&#160;<a class="code" href="a00193.html#ga8125328e69eba709c33ea8055c12589b">hwloc_get_type_or_below_depth</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type) __hwloc_attribute_pure;</div>
323 <div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; </div>
324 <div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
325 <div class="line"><a name="l00882"></a><span class="lineno"><a class="line" href="a00193.html#ga8a9ee573b7d2190272095d10712a7cca"> 882</a></span>&#160;<a class="code" href="a00193.html#ga8a9ee573b7d2190272095d10712a7cca">hwloc_get_type_or_above_depth</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type) __hwloc_attribute_pure;</div>
326 <div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; </div>
327 <div class="line"><a name="l00891"></a><span class="lineno"><a class="line" href="a00193.html#ga506b0682b98aa264d53e934d2e9badb0"> 891</a></span>&#160;HWLOC_DECLSPEC <a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00193.html#ga506b0682b98aa264d53e934d2e9badb0">hwloc_get_depth_type</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">int</span> depth) __hwloc_attribute_pure;</div>
328 <div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; </div>
329 <div class="line"><a name="l00895"></a><span class="lineno"><a class="line" href="a00193.html#ga1d5ceafe8130fe6e8657bf0bc666ba50"> 895</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">unsigned</span> <a class="code" href="a00193.html#ga1d5ceafe8130fe6e8657bf0bc666ba50">hwloc_get_nbobjs_by_depth</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">int</span> depth) __hwloc_attribute_pure;</div>
330 <div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; </div>
331 <div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
332 <div class="line"><a name="l00903"></a><span class="lineno"><a class="line" href="a00193.html#ga789a3f65aedff644be64a18526a03065"> 903</a></span>&#160;<a class="code" href="a00193.html#ga789a3f65aedff644be64a18526a03065">hwloc_get_nbobjs_by_type</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type) __hwloc_attribute_pure;</div>
432 <div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
433 <div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160;<a class="code" href="a00209.html#ga751c238a4931db5cc0ca3181b7dd7479">hwloc_get_pu_obj_by_os_index</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">unsigned</span> <a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>) __hwloc_attribute_pure;</div>
434 <div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
435 <div class="line"><a name="l00705"></a><span class="lineno"><a class="line" href="a00209.html#ga751c238a4931db5cc0ca3181b7dd7479"> 705</a></span>&#160;<a class="code" href="a00209.html#ga751c238a4931db5cc0ca3181b7dd7479">hwloc_get_pu_obj_by_os_index</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">unsigned</span> <a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>)</div>
436 <div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160;{</div>
437 <div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> obj = NULL;</div>
438 <div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <span class="keywordflow">while</span> ((obj = <a class="code" href="a00196.html#ga759e88eaf5a230ad283e9d4c42486735">hwloc_get_next_obj_by_type</a>(topology, <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661">HWLOC_OBJ_PU</a>, obj)) != NULL)</div>
439 <div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; <span class="keywordflow">if</span> (obj-&gt;<a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a> == <a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>)</div>
440 <div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; <span class="keywordflow">return</span> obj;</div>
441 <div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; <span class="keywordflow">return</span> NULL;</div>
442 <div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160;}</div>
443 <div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; </div>
444 <div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
445 <div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160;<a class="code" href="a00209.html#gab89d9ed9edfaa3dd526fb6ee1a1618ea">hwloc_get_numanode_obj_by_os_index</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">unsigned</span> <a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>) __hwloc_attribute_pure;</div>
446 <div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
447 <div class="line"><a name="l00726"></a><span class="lineno"><a class="line" href="a00209.html#gab89d9ed9edfaa3dd526fb6ee1a1618ea"> 726</a></span>&#160;<a class="code" href="a00209.html#gab89d9ed9edfaa3dd526fb6ee1a1618ea">hwloc_get_numanode_obj_by_os_index</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">unsigned</span> <a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>)</div>
448 <div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160;{</div>
449 <div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> obj = NULL;</div>
450 <div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; <span class="keywordflow">while</span> ((obj = <a class="code" href="a00196.html#ga759e88eaf5a230ad283e9d4c42486735">hwloc_get_next_obj_by_type</a>(topology, <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>, obj)) != NULL)</div>
451 <div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; <span class="keywordflow">if</span> (obj-&gt;<a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a> == <a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>)</div>
452 <div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <span class="keywordflow">return</span> obj;</div>
453 <div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; <span class="keywordflow">return</span> NULL;</div>
454 <div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160;}</div>
455 <div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; </div>
456 <div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160;<span class="comment">/* TODO: rather provide an iterator? Provide a way to know how much should be allocated? By returning the total number of objects instead? */</span></div>
457 <div class="line"><a name="l00747"></a><span class="lineno"><a class="line" href="a00209.html#ga2cd22a34360643f7f5bad09576dec205"> 747</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">unsigned</span> <a class="code" href="a00209.html#ga2cd22a34360643f7f5bad09576dec205">hwloc_get_closest_objs</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00250.html">hwloc_obj_t</a> src, <a class="code" href="a00250.html">hwloc_obj_t</a> * __hwloc_restrict objs, <span class="keywordtype">unsigned</span> max);</div>
458 <div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; </div>
459 <div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
460 <div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160;<a class="code" href="a00209.html#ga7a0c1046851f7a88bd52f5a1d4ba0a97">hwloc_get_obj_below_by_type</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
461 <div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type1, <span class="keywordtype">unsigned</span> idx1,</div>
462 <div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; <a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type2, <span class="keywordtype">unsigned</span> idx2) __hwloc_attribute_pure;</div>
463 <div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
464 <div class="line"><a name="l00766"></a><span class="lineno"><a class="line" href="a00209.html#ga7a0c1046851f7a88bd52f5a1d4ba0a97"> 766</a></span>&#160;<a class="code" href="a00209.html#ga7a0c1046851f7a88bd52f5a1d4ba0a97">hwloc_get_obj_below_by_type</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
465 <div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; <a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type1, <span class="keywordtype">unsigned</span> idx1,</div>
466 <div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type2, <span class="keywordtype">unsigned</span> idx2)</div>
467 <div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160;{</div>
468 <div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> obj;</div>
469 <div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; obj = <a class="code" href="a00196.html#ga6f414dd80a2b943967a0ac92da3181a2">hwloc_get_obj_by_type</a> (topology, type1, idx1);</div>
470 <div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; <span class="keywordflow">if</span> (!obj)</div>
471 <div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; <span class="keywordflow">return</span> NULL;</div>
472 <div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; <span class="keywordflow">return</span> <a class="code" href="a00204.html#ga2edf924e5a0cca9cb22f65cc77c6ddb5">hwloc_get_obj_inside_cpuset_by_type</a>(topology, obj-&gt;<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, type2, idx2);</div>
473 <div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160;}</div>
474 <div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; </div>
475 <div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
476 <div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160;<a class="code" href="a00209.html#gacb51295ff3fbd3a96f990f20c6492b1d">hwloc_get_obj_below_array_by_type</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">int</span> nr, <a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> *typev, <span class="keywordtype">unsigned</span> *idxv) __hwloc_attribute_pure;</div>
477 <div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
478 <div class="line"><a name="l00798"></a><span class="lineno"><a class="line" href="a00209.html#gacb51295ff3fbd3a96f990f20c6492b1d"> 798</a></span>&#160;<a class="code" href="a00209.html#gacb51295ff3fbd3a96f990f20c6492b1d">hwloc_get_obj_below_array_by_type</a> (<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">int</span> nr, <a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> *typev, <span class="keywordtype">unsigned</span> *idxv)</div>
479 <div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160;{</div>
480 <div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> obj = <a class="code" href="a00196.html#ga2d4b12fc187dfc53b35f2fa21d21044d">hwloc_get_root_obj</a>(topology);</div>
481 <div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; <span class="keywordtype">int</span> i;</div>
482 <div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; <span class="keywordflow">for</span>(i=0; i&lt;nr; i++) {</div>
483 <div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; <span class="keywordflow">if</span> (!obj)</div>
484 <div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; <span class="keywordflow">return</span> NULL;</div>
485 <div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; obj = <a class="code" href="a00204.html#ga2edf924e5a0cca9cb22f65cc77c6ddb5">hwloc_get_obj_inside_cpuset_by_type</a>(topology, obj-&gt;<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, typev[i], idxv[i]);</div>
486 <div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; }</div>
487 <div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; <span class="keywordflow">return</span> obj;</div>
488 <div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160;}</div>
489 <div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; </div>
490 <div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160;HWLOC_DECLSPEC <a class="code" href="a00250.html">hwloc_obj_t</a></div>
491 <div class="line"><a name="l00849"></a><span class="lineno"><a class="line" href="a00209.html#gab5df3ad1e8565ea0c2cf06412f6f6233"> 849</a></span>&#160;<a class="code" href="a00209.html#gab5df3ad1e8565ea0c2cf06412f6f6233">hwloc_get_obj_with_same_locality</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00250.html">hwloc_obj_t</a> src,</div>
492 <div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; <a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00250.html#acc4f0803f244867e68fe0036800be5de">type</a>, <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="a00250.html#a5d4f97e76723a9ec8d38046f19e00d33">subtype</a>, <span class="keyword">const</span> <span class="keywordtype">char</span> *nameprefix,</div>
493 <div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
494 <div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; </div>
495 <div class="line"><a name="l00863"></a><span class="lineno"><a class="line" href="a00210.html#ga8b835295a52b6768a5e6c8abb1f9c54d"> 863</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00210.html#ga8b835295a52b6768a5e6c8abb1f9c54d">hwloc_distrib_flags_e</a> {</div>
496 <div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; <a class="code" href="a00210.html#gga8b835295a52b6768a5e6c8abb1f9c54da2ca08404bfbebe9ed5f34c3d7635425a">HWLOC_DISTRIB_FLAG_REVERSE</a> = (1UL&lt;&lt;0)</div>
497 <div class="line"><a name="l00868"></a><span class="lineno"><a class="line" href="a00210.html#gga8b835295a52b6768a5e6c8abb1f9c54da2ca08404bfbebe9ed5f34c3d7635425a"> 868</a></span>&#160;};</div>
498 <div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; </div>
499 <div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
500 <div class="line"><a name="l00894"></a><span class="lineno"><a class="line" href="a00210.html#ga7b0c28f797c2ff17fa2f244ebbd55b33"> 894</a></span>&#160;<a class="code" href="a00210.html#ga7b0c28f797c2ff17fa2f244ebbd55b33">hwloc_distrib</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
501 <div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> *roots, <span class="keywordtype">unsigned</span> n_roots,</div>
502 <div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; <a class="code" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> *set,</div>
503 <div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; <span class="keywordtype">unsigned</span> n,</div>
504 <div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; <span class="keywordtype">int</span> until, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags)</div>
505 <div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160;{</div>
506 <div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160; <span class="keywordtype">unsigned</span> i;</div>
507 <div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160; <span class="keywordtype">unsigned</span> tot_weight;</div>
508 <div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; <span class="keywordtype">unsigned</span> given, givenweight;</div>
509 <div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; <a class="code" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> *cpusetp = set;</div>
333510 <div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; </div>
334 <div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
335 <div class="line"><a name="l00910"></a><span class="lineno"><a class="line" href="a00193.html#ga2d4b12fc187dfc53b35f2fa21d21044d"> 910</a></span>&#160;<a class="code" href="a00193.html#ga2d4b12fc187dfc53b35f2fa21d21044d">hwloc_get_root_obj</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology) __hwloc_attribute_pure;</div>
336 <div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; </div>
337 <div class="line"><a name="l00913"></a><span class="lineno"><a class="line" href="a00193.html#ga391f6b2613f0065673eaa4069b93d4e0"> 913</a></span>&#160;HWLOC_DECLSPEC <a class="code" href="a00244.html">hwloc_obj_t</a> <a class="code" href="a00193.html#ga391f6b2613f0065673eaa4069b93d4e0">hwloc_get_obj_by_depth</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">int</span> depth, <span class="keywordtype">unsigned</span> idx) __hwloc_attribute_pure;</div>
338 <div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; </div>
339 <div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
340 <div class="line"><a name="l00922"></a><span class="lineno"><a class="line" href="a00193.html#ga6f414dd80a2b943967a0ac92da3181a2"> 922</a></span>&#160;<a class="code" href="a00193.html#ga6f414dd80a2b943967a0ac92da3181a2">hwloc_get_obj_by_type</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, <span class="keywordtype">unsigned</span> idx) __hwloc_attribute_pure;</div>
341 <div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; </div>
342 <div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
343 <div class="line"><a name="l00929"></a><span class="lineno"><a class="line" href="a00193.html#gac140a9b939d9fa0b30c4a910efcb0656"> 929</a></span>&#160;<a class="code" href="a00193.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">int</span> depth, <a class="code" href="a00244.html">hwloc_obj_t</a> prev);</div>
344 <div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; </div>
345 <div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
346 <div class="line"><a name="l00938"></a><span class="lineno"><a class="line" href="a00193.html#ga759e88eaf5a230ad283e9d4c42486735"> 938</a></span>&#160;<a class="code" href="a00193.html#ga759e88eaf5a230ad283e9d4c42486735">hwloc_get_next_obj_by_type</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type,</div>
347 <div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> prev);</div>
348 <div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; </div>
349 <div class="line"><a name="l00957"></a><span class="lineno"><a class="line" href="a00194.html#ga5ca0bf94bbbb080d0eff17a57bd90422"> 957</a></span>&#160;HWLOC_DECLSPEC <span class="keyword">const</span> <span class="keywordtype">char</span> * <a class="code" href="a00194.html#ga5ca0bf94bbbb080d0eff17a57bd90422">hwloc_obj_type_string</a> (<a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type) __hwloc_attribute_const;</div>
350 <div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; </div>
351 <div class="line"><a name="l00976"></a><span class="lineno"><a class="line" href="a00194.html#gadb8765c260edea80c52cd06a76639ba4"> 976</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00194.html#gadb8765c260edea80c52cd06a76639ba4">hwloc_obj_type_snprintf</a>(<span class="keywordtype">char</span> * __hwloc_restrict <span class="keywordtype">string</span>, <span class="keywordtype">size_t</span> size,</div>
352 <div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> obj,</div>
353 <div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; <span class="keywordtype">int</span> verbose);</div>
354 <div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; </div>
355 <div class="line"><a name="l00991"></a><span class="lineno"><a class="line" href="a00194.html#ga870e876931c282a1c7aee2f031912ce3"> 991</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00194.html#ga870e876931c282a1c7aee2f031912ce3">hwloc_obj_attr_snprintf</a>(<span class="keywordtype">char</span> * __hwloc_restrict <span class="keywordtype">string</span>, <span class="keywordtype">size_t</span> size,</div>
356 <div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> obj, <span class="keyword">const</span> <span class="keywordtype">char</span> * __hwloc_restrict separator,</div>
357 <div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; <span class="keywordtype">int</span> verbose);</div>
358 <div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; </div>
359 <div class="line"><a name="l01018"></a><span class="lineno"><a class="line" href="a00194.html#ga510f21b066fba2dab12b8c9b173b1dfd"> 1018</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00194.html#ga510f21b066fba2dab12b8c9b173b1dfd">hwloc_type_sscanf</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keywordtype">string</span>,</div>
360 <div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; <a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> *typep,</div>
361 <div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; <span class="keyword">union</span> <a class="code" href="a00248.html">hwloc_obj_attr_u</a> *attrp, <span class="keywordtype">size_t</span> attrsize);</div>
362 <div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; </div>
363 <div class="line"><a name="l01043"></a><span class="lineno"><a class="line" href="a00194.html#ga52c63cd7203e55b804c1314affc9bd12"> 1043</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00194.html#ga52c63cd7203e55b804c1314affc9bd12">hwloc_type_sscanf_as_depth</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keywordtype">string</span>,</div>
364 <div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; <a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> *typep,</div>
365 <div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; <a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">int</span> *depthp);</div>
366 <div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; </div>
367 <div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keyword">const</span> <span class="keywordtype">char</span> *</div>
368 <div class="line"><a name="l01063"></a><span class="lineno"><a class="line" href="a00195.html#gab358661a92bb27d8542b255cc9f6f25e"> 1063</a></span>&#160;<a class="code" href="a00195.html#gab358661a92bb27d8542b255cc9f6f25e">hwloc_obj_get_info_by_name</a>(<a class="code" href="a00244.html">hwloc_obj_t</a> obj, <span class="keyword">const</span> <span class="keywordtype">char</span> *name) __hwloc_attribute_pure;</div>
369 <div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; </div>
370 <div class="line"><a name="l01081"></a><span class="lineno"><a class="line" href="a00195.html#gace7654bb8a9002caae1a4b8a59e7452e"> 1081</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00195.html#gace7654bb8a9002caae1a4b8a59e7452e">hwloc_obj_add_info</a>(<a class="code" href="a00244.html">hwloc_obj_t</a> obj, <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> <span class="keywordtype">char</span> *value);</div>
371 <div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; </div>
372 <div class="line"><a name="l01154"></a><span class="lineno"><a class="line" href="a00196.html#ga217dc8d373f8958cc93c154ebce1c71c"> 1154</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
373 <div class="line"><a name="l01157"></a><span class="lineno"><a class="line" href="a00196.html#gga217dc8d373f8958cc93c154ebce1c71ca2e0dd0128dac6b03408c7dd170477fdc"> 1157</a></span>&#160; <a class="code" href="a00196.html#gga217dc8d373f8958cc93c154ebce1c71ca2e0dd0128dac6b03408c7dd170477fdc">HWLOC_CPUBIND_PROCESS</a> = (1&lt;&lt;0),</div>
374 <div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; </div>
375 <div class="line"><a name="l01161"></a><span class="lineno"><a class="line" href="a00196.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421"> 1161</a></span>&#160; <a class="code" href="a00196.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421">HWLOC_CPUBIND_THREAD</a> = (1&lt;&lt;1),</div>
376 <div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; </div>
377 <div class="line"><a name="l01186"></a><span class="lineno"><a class="line" href="a00196.html#gga217dc8d373f8958cc93c154ebce1c71ca679a7e0f0c7ee06b123565f90d98e7fa"> 1186</a></span>&#160; <a class="code" href="a00196.html#gga217dc8d373f8958cc93c154ebce1c71ca679a7e0f0c7ee06b123565f90d98e7fa">HWLOC_CPUBIND_STRICT</a> = (1&lt;&lt;2),</div>
378 <div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; </div>
379 <div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160; <a class="code" href="a00196.html#gga217dc8d373f8958cc93c154ebce1c71ca41ce440443cc3087caed95ab60edcad6">HWLOC_CPUBIND_NOMEMBIND</a> = (1&lt;&lt;3)</div>
380 <div class="line"><a name="l01204"></a><span class="lineno"><a class="line" href="a00196.html#gga217dc8d373f8958cc93c154ebce1c71ca41ce440443cc3087caed95ab60edcad6"> 1204</a></span>&#160;} <a class="code" href="a00196.html#ga217dc8d373f8958cc93c154ebce1c71c">hwloc_cpubind_flags_t</a>;</div>
381 <div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160; </div>
382 <div class="line"><a name="l01211"></a><span class="lineno"><a class="line" href="a00196.html#ga80bc07473a8edf840cae17bd7ec21d48"> 1211</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00196.html#ga80bc07473a8edf840cae17bd7ec21d48">hwloc_set_cpubind</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, <span class="keywordtype">int</span> flags);</div>
383 <div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; </div>
384 <div class="line"><a name="l01218"></a><span class="lineno"><a class="line" href="a00196.html#gacba7ecb979baf824d5240fa2cb2a8be6"> 1218</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00196.html#gacba7ecb979baf824d5240fa2cb2a8be6">hwloc_get_cpubind</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set, <span class="keywordtype">int</span> flags);</div>
385 <div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; </div>
386 <div class="line"><a name="l01231"></a><span class="lineno"><a class="line" href="a00196.html#ga296db8a3c6d49b51fb83d6f3e45c02a6"> 1231</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00196.html#ga296db8a3c6d49b51fb83d6f3e45c02a6">hwloc_set_proc_cpubind</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_pid_t pid, <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, <span class="keywordtype">int</span> flags);</div>
387 <div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160; </div>
388 <div class="line"><a name="l01244"></a><span class="lineno"><a class="line" href="a00196.html#gac82de91f788fa82dacf99c6e0d4b7158"> 1244</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00196.html#gac82de91f788fa82dacf99c6e0d4b7158">hwloc_get_proc_cpubind</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_pid_t pid, <a class="code" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set, <span class="keywordtype">int</span> flags);</div>
389 <div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; </div>
390 <div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160;<span class="preprocessor">#ifdef hwloc_thread_t</span></div>
391 <div class="line"><a name="l01254"></a><span class="lineno"><a class="line" href="a00196.html#gae42c01b2addcfbf6048b9a516dd7a906"> 1254</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00196.html#gae42c01b2addcfbf6048b9a516dd7a906">hwloc_set_thread_cpubind</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_thread_t thread, <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, <span class="keywordtype">int</span> flags);</div>
392 <div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160;<span class="preprocessor">#endif</span></div>
393 <div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160; </div>
394 <div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160;<span class="preprocessor">#ifdef hwloc_thread_t</span></div>
395 <div class="line"><a name="l01265"></a><span class="lineno"><a class="line" href="a00196.html#gaf13f765642b5d0d9a9813e6bb043671b"> 1265</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00196.html#gaf13f765642b5d0d9a9813e6bb043671b">hwloc_get_thread_cpubind</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_thread_t thread, <a class="code" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set, <span class="keywordtype">int</span> flags);</div>
396 <div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160;<span class="preprocessor">#endif</span></div>
397 <div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160; </div>
398 <div class="line"><a name="l01281"></a><span class="lineno"><a class="line" href="a00196.html#gafdb374627358bf09203b5a4215b13032"> 1281</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00196.html#gafdb374627358bf09203b5a4215b13032">hwloc_get_last_cpu_location</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set, <span class="keywordtype">int</span> flags);</div>
399 <div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; </div>
400 <div class="line"><a name="l01299"></a><span class="lineno"><a class="line" href="a00196.html#ga910a05c2d47f68a3155bf176b50fa555"> 1299</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00196.html#ga910a05c2d47f68a3155bf176b50fa555">hwloc_get_proc_last_cpu_location</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_pid_t pid, <a class="code" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set, <span class="keywordtype">int</span> flags);</div>
401 <div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; </div>
402 <div class="line"><a name="l01380"></a><span class="lineno"><a class="line" href="a00197.html#gac9764f79505775d06407b40f5e4661e8"> 1380</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
403 <div class="line"><a name="l01388"></a><span class="lineno"><a class="line" href="a00197.html#ggac9764f79505775d06407b40f5e4661e8a18675bb80ebc1bce5b652e9de8f3998c"> 1388</a></span>&#160; <a class="code" href="a00197.html#ggac9764f79505775d06407b40f5e4661e8a18675bb80ebc1bce5b652e9de8f3998c">HWLOC_MEMBIND_DEFAULT</a> = 0,</div>
404 <div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160; </div>
405 <div class="line"><a name="l01399"></a><span class="lineno"><a class="line" href="a00197.html#ggac9764f79505775d06407b40f5e4661e8a979c7aa78dd32780858f30f47a72cca0"> 1399</a></span>&#160; <a class="code" href="a00197.html#ggac9764f79505775d06407b40f5e4661e8a979c7aa78dd32780858f30f47a72cca0">HWLOC_MEMBIND_FIRSTTOUCH</a> = 1,</div>
406 <div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160; </div>
407 <div class="line"><a name="l01403"></a><span class="lineno"><a class="line" href="a00197.html#ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c"> 1403</a></span>&#160; <a class="code" href="a00197.html#ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c">HWLOC_MEMBIND_BIND</a> = 2,</div>
408 <div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160; </div>
409 <div class="line"><a name="l01412"></a><span class="lineno"><a class="line" href="a00197.html#ggac9764f79505775d06407b40f5e4661e8ae370075e5af016d42310f87ea5af236b"> 1412</a></span>&#160; <a class="code" href="a00197.html#ggac9764f79505775d06407b40f5e4661e8ae370075e5af016d42310f87ea5af236b">HWLOC_MEMBIND_INTERLEAVE</a> = 3,</div>
410 <div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160; </div>
411 <div class="line"><a name="l01419"></a><span class="lineno"><a class="line" href="a00197.html#ggac9764f79505775d06407b40f5e4661e8aecdd4164d647708fbb51a00d98dbb138"> 1419</a></span>&#160; <a class="code" href="a00197.html#ggac9764f79505775d06407b40f5e4661e8aecdd4164d647708fbb51a00d98dbb138">HWLOC_MEMBIND_NEXTTOUCH</a> = 4,</div>
412 <div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160; </div>
413 <div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160; <a class="code" href="a00197.html#ggac9764f79505775d06407b40f5e4661e8a3185bd869b67817fb2bd5164bf360402">HWLOC_MEMBIND_MIXED</a> = -1</div>
414 <div class="line"><a name="l01428"></a><span class="lineno"><a class="line" href="a00197.html#ggac9764f79505775d06407b40f5e4661e8a3185bd869b67817fb2bd5164bf360402"> 1428</a></span>&#160;} <a class="code" href="a00197.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a>;</div>
415 <div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160; </div>
416 <div class="line"><a name="l01443"></a><span class="lineno"><a class="line" href="a00197.html#gab00475fd98815bf4fb9aaf752030e7d2"> 1443</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> {</div>
417 <div class="line"><a name="l01448"></a><span class="lineno"><a class="line" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4"> 1448</a></span>&#160; <a class="code" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4">HWLOC_MEMBIND_PROCESS</a> = (1&lt;&lt;0),</div>
418 <div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160; </div>
419 <div class="line"><a name="l01453"></a><span class="lineno"><a class="line" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298"> 1453</a></span>&#160; <a class="code" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298">HWLOC_MEMBIND_THREAD</a> = (1&lt;&lt;1),</div>
420 <div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160; </div>
421 <div class="line"><a name="l01461"></a><span class="lineno"><a class="line" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6"> 1461</a></span>&#160; <a class="code" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a> = (1&lt;&lt;2),</div>
422 <div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160; </div>
423 <div class="line"><a name="l01467"></a><span class="lineno"><a class="line" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2aa6e49e54f52827cb143cc869cfd748af"> 1467</a></span>&#160; <a class="code" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2aa6e49e54f52827cb143cc869cfd748af">HWLOC_MEMBIND_MIGRATE</a> = (1&lt;&lt;3),</div>
424 <div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160; </div>
425 <div class="line"><a name="l01480"></a><span class="lineno"><a class="line" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2aad6b9eaf2ee324ca58dc8f58094b9997"> 1480</a></span>&#160; <a class="code" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2aad6b9eaf2ee324ca58dc8f58094b9997">HWLOC_MEMBIND_NOCPUBIND</a> = (1&lt;&lt;4),</div>
426 <div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160; </div>
427 <div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160; <a class="code" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256">HWLOC_MEMBIND_BYNODESET</a> = (1&lt;&lt;5)</div>
428 <div class="line"><a name="l01492"></a><span class="lineno"><a class="line" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256"> 1492</a></span>&#160;} <a class="code" href="a00197.html#gab00475fd98815bf4fb9aaf752030e7d2">hwloc_membind_flags_t</a>;</div>
429 <div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160; </div>
430 <div class="line"><a name="l01509"></a><span class="lineno"><a class="line" href="a00197.html#ga020951efa0ce3862bd4faec295501a7f"> 1509</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00197.html#ga020951efa0ce3862bd4faec295501a7f">hwloc_set_membind</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, <a class="code" href="a00197.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> policy, <span class="keywordtype">int</span> flags);</div>
431 <div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160; </div>
432 <div class="line"><a name="l01555"></a><span class="lineno"><a class="line" href="a00197.html#gae21f0a1a884929c784bebf070252aa56"> 1555</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00197.html#gae21f0a1a884929c784bebf070252aa56">hwloc_get_membind</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set, <a class="code" href="a00197.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> * policy, <span class="keywordtype">int</span> flags);</div>
433 <div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160; </div>
434 <div class="line"><a name="l01569"></a><span class="lineno"><a class="line" href="a00197.html#gabc91ff16f7e41047924e3a4ae6d9da7e"> 1569</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00197.html#gabc91ff16f7e41047924e3a4ae6d9da7e">hwloc_set_proc_membind</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_pid_t pid, <a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, <a class="code" href="a00197.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> policy, <span class="keywordtype">int</span> flags);</div>
435 <div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160; </div>
436 <div class="line"><a name="l01610"></a><span class="lineno"><a class="line" href="a00197.html#ga1730ceb18ec6ee3b7bd3d0db81f07dc8"> 1610</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00197.html#ga1730ceb18ec6ee3b7bd3d0db81f07dc8">hwloc_get_proc_membind</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_pid_t pid, <a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set, <a class="code" href="a00197.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> * policy, <span class="keywordtype">int</span> flags);</div>
437 <div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160; </div>
438 <div class="line"><a name="l01622"></a><span class="lineno"><a class="line" href="a00197.html#gaf881faefe20701229f07dd7dbd0125ed"> 1622</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00197.html#gaf881faefe20701229f07dd7dbd0125ed">hwloc_set_area_membind</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">const</span> <span class="keywordtype">void</span> *addr, <span class="keywordtype">size_t</span> len, <a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, <a class="code" href="a00197.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> policy, <span class="keywordtype">int</span> flags);</div>
439 <div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160; </div>
440 <div class="line"><a name="l01651"></a><span class="lineno"><a class="line" href="a00197.html#gaa87e0a6946ff145914fdf0b1c60567f8"> 1651</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00197.html#gaa87e0a6946ff145914fdf0b1c60567f8">hwloc_get_area_membind</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">const</span> <span class="keywordtype">void</span> *addr, <span class="keywordtype">size_t</span> len, <a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set, <a class="code" href="a00197.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> * policy, <span class="keywordtype">int</span> flags);</div>
441 <div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160; </div>
442 <div class="line"><a name="l01672"></a><span class="lineno"><a class="line" href="a00197.html#ga537c7508a4e2d1db05673ec5be6e805c"> 1672</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00197.html#ga537c7508a4e2d1db05673ec5be6e805c">hwloc_get_area_memlocation</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">const</span> <span class="keywordtype">void</span> *addr, <span class="keywordtype">size_t</span> len, <a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set, <span class="keywordtype">int</span> flags);</div>
443 <div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160; </div>
444 <div class="line"><a name="l01681"></a><span class="lineno"><a class="line" href="a00197.html#ga972b335a86a7d5e7b34bce2b243c41bc"> 1681</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> *<a class="code" href="a00197.html#ga972b335a86a7d5e7b34bce2b243c41bc">hwloc_alloc</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">size_t</span> len);</div>
445 <div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>&#160; </div>
446 <div class="line"><a name="l01697"></a><span class="lineno"><a class="line" href="a00197.html#ga04736461780fadcf193af218c0122273"> 1697</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> *<a class="code" href="a00197.html#ga04736461780fadcf193af218c0122273">hwloc_alloc_membind</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">size_t</span> len, <a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, <a class="code" href="a00197.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> policy, <span class="keywordtype">int</span> flags) __hwloc_attribute_malloc;</div>
447 <div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160; </div>
448 <div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">void</span> *</div>
449 <div class="line"><a name="l01709"></a><span class="lineno"><a class="line" href="a00197.html#gab1b77b8408bacaf03c7e8878f7577922"> 1709</a></span>&#160;<a class="code" href="a00197.html#gab1b77b8408bacaf03c7e8878f7577922">hwloc_alloc_membind_policy</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">size_t</span> len, <a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, <a class="code" href="a00197.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> policy, <span class="keywordtype">int</span> flags) __hwloc_attribute_malloc;</div>
450 <div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160; </div>
451 <div class="line"><a name="l01714"></a><span class="lineno"><a class="line" href="a00197.html#ga32dbd4f54e9e4a7179f2dde37ffe6ad7"> 1714</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00197.html#ga32dbd4f54e9e4a7179f2dde37ffe6ad7">hwloc_free</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">void</span> *addr, <span class="keywordtype">size_t</span> len);</div>
452 <div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160; </div>
453 <div class="line"><a name="l01752"></a><span class="lineno"><a class="line" href="a00198.html#ga341fc17b5867a4715570baab131f68cd"> 1752</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00198.html#ga341fc17b5867a4715570baab131f68cd">hwloc_topology_set_pid</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> __hwloc_restrict topology, hwloc_pid_t pid);</div>
454 <div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160; </div>
455 <div class="line"><a name="l01782"></a><span class="lineno"><a class="line" href="a00198.html#ga4fab186bb6181a00bcf585825fddd38d"> 1782</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00198.html#ga4fab186bb6181a00bcf585825fddd38d">hwloc_topology_set_synthetic</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> __hwloc_restrict topology, <span class="keyword">const</span> <span class="keywordtype">char</span> * __hwloc_restrict description);</div>
456 <div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>&#160; </div>
457 <div class="line"><a name="l01810"></a><span class="lineno"><a class="line" href="a00198.html#ga879439b7ee99407ee911b3ac64e9a25e"> 1810</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00198.html#ga879439b7ee99407ee911b3ac64e9a25e">hwloc_topology_set_xml</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> __hwloc_restrict topology, <span class="keyword">const</span> <span class="keywordtype">char</span> * __hwloc_restrict xmlpath);</div>
458 <div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>&#160; </div>
459 <div class="line"><a name="l01838"></a><span class="lineno"><a class="line" href="a00198.html#ga2745616b65595e1c1e579ecc7e461fa8"> 1838</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00198.html#ga2745616b65595e1c1e579ecc7e461fa8">hwloc_topology_set_xmlbuffer</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> __hwloc_restrict topology, <span class="keyword">const</span> <span class="keywordtype">char</span> * __hwloc_restrict buffer, <span class="keywordtype">int</span> size);</div>
460 <div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>&#160; </div>
461 <div class="line"><a name="l01842"></a><span class="lineno"><a class="line" href="a00198.html#ga949f656c779208a36790feba24048b7e"> 1842</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00198.html#ga949f656c779208a36790feba24048b7e">hwloc_topology_components_flag_e</a> {</div>
462 <div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>&#160; <a class="code" href="a00198.html#gga949f656c779208a36790feba24048b7ea33eec25d29253a2aba21dd3c731b416e">HWLOC_TOPOLOGY_COMPONENTS_FLAG_BLACKLIST</a> = (1UL&lt;&lt;0)</div>
463 <div class="line"><a name="l01847"></a><span class="lineno"><a class="line" href="a00198.html#gga949f656c779208a36790feba24048b7ea33eec25d29253a2aba21dd3c731b416e"> 1847</a></span>&#160;};</div>
464 <div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>&#160; </div>
465 <div class="line"><a name="l01863"></a><span class="lineno"><a class="line" href="a00198.html#ga9ad41adf418cee1c0ee32ba9bd4a3d36"> 1863</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00198.html#ga9ad41adf418cee1c0ee32ba9bd4a3d36">hwloc_topology_set_components</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> __hwloc_restrict topology, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags, <span class="keyword">const</span> <span class="keywordtype">char</span> * __hwloc_restrict name);</div>
466 <div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>&#160; </div>
467 <div class="line"><a name="l01883"></a><span class="lineno"><a class="line" href="a00199.html#gada025d3ec20b4b420f8038d23d6e7bde"> 1883</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00199.html#gada025d3ec20b4b420f8038d23d6e7bde">hwloc_topology_flags_e</a> {</div>
468 <div class="line"><a name="l01904"></a><span class="lineno"><a class="line" href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258"> 1904</a></span>&#160; <a class="code" href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a> = (1UL&lt;&lt;0),</div>
469 <div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>&#160; </div>
470 <div class="line"><a name="l01924"></a><span class="lineno"><a class="line" href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b"> 1924</a></span>&#160; <a class="code" href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a> = (1UL&lt;&lt;1),</div>
471 <div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>&#160; </div>
472 <div class="line"><a name="l01945"></a><span class="lineno"><a class="line" href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdea1b66bbd66e900e5c837f71defb32ad89"> 1945</a></span>&#160; <a class="code" href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdea1b66bbd66e900e5c837f71defb32ad89">HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES</a> = (1UL&lt;&lt;2),</div>
473 <div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>&#160; </div>
474 <div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>&#160; <a class="code" href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdead93e82b8668ee90e4f9354e201a2ed9c">HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT</a> = (1UL&lt;&lt;3)</div>
475 <div class="line"><a name="l01970"></a><span class="lineno"><a class="line" href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdead93e82b8668ee90e4f9354e201a2ed9c"> 1970</a></span>&#160;};</div>
476 <div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>&#160; </div>
477 <div class="line"><a name="l01981"></a><span class="lineno"><a class="line" href="a00199.html#gaaeed4df656979e5f16befea9d29b814b"> 1981</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00199.html#gaaeed4df656979e5f16befea9d29b814b">hwloc_topology_set_flags</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
478 <div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>&#160; </div>
479 <div class="line"><a name="l01989"></a><span class="lineno"><a class="line" href="a00199.html#ga09318f81c1d4713be907d64748a6f93c"> 1989</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="a00199.html#ga09318f81c1d4713be907d64748a6f93c">hwloc_topology_get_flags</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology);</div>
480 <div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>&#160; </div>
481 <div class="line"><a name="l01998"></a><span class="lineno"><a class="line" href="a00199.html#ga68ffdcfd9175cdf40709801092f18017"> 1998</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00199.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> __hwloc_restrict topology) __hwloc_attribute_pure;</div>
482 <div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>&#160; </div>
483 <div class="line"><a name="l02001"></a><span class="lineno"><a class="line" href="a00296.html"> 2001</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00296.html">hwloc_topology_discovery_support</a> {</div>
484 <div class="line"><a name="l02003"></a><span class="lineno"><a class="line" href="a00296.html#ad7bb4ecf7a82f5a04fc632e9592ad3ab"> 2003</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00296.html#ad7bb4ecf7a82f5a04fc632e9592ad3ab">pu</a>;</div>
485 <div class="line"><a name="l02005"></a><span class="lineno"><a class="line" href="a00296.html#a955f96066cb9e4cd34e2a3710ad43e80"> 2005</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00296.html#a955f96066cb9e4cd34e2a3710ad43e80">numa</a>;</div>
486 <div class="line"><a name="l02007"></a><span class="lineno"><a class="line" href="a00296.html#af193eb858e40e12ef4923f5ed0e1f11a"> 2007</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00296.html#af193eb858e40e12ef4923f5ed0e1f11a">numa_memory</a>;</div>
487 <div class="line"><a name="l02009"></a><span class="lineno"><a class="line" href="a00296.html#af3c97b28781a2972cf8eaaf94a6617da"> 2009</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00296.html#af3c97b28781a2972cf8eaaf94a6617da">disallowed_pu</a>;</div>
488 <div class="line"><a name="l02011"></a><span class="lineno"><a class="line" href="a00296.html#a970e65235873bcdb9669a9805161ce03"> 2011</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00296.html#a970e65235873bcdb9669a9805161ce03">disallowed_numa</a>;</div>
489 <div class="line"><a name="l02013"></a><span class="lineno"><a class="line" href="a00296.html#aba80d6f9c15e2395f9ed61db9ff3b75d"> 2013</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00296.html#aba80d6f9c15e2395f9ed61db9ff3b75d">cpukind_efficiency</a>;</div>
490 <div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>&#160;};</div>
491 <div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>&#160; </div>
492 <div class="line"><a name="l02021"></a><span class="lineno"><a class="line" href="a00300.html"> 2021</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00300.html">hwloc_topology_cpubind_support</a> {</div>
493 <div class="line"><a name="l02023"></a><span class="lineno"><a class="line" href="a00300.html#a9403d51657a4d546b3ea9553a2973a27"> 2023</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00300.html#a9403d51657a4d546b3ea9553a2973a27">set_thisproc_cpubind</a>;</div>
494 <div class="line"><a name="l02025"></a><span class="lineno"><a class="line" href="a00300.html#a77a09ddd78ee3e9ff5f532a6ac74f7eb"> 2025</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00300.html#a77a09ddd78ee3e9ff5f532a6ac74f7eb">get_thisproc_cpubind</a>;</div>
495 <div class="line"><a name="l02027"></a><span class="lineno"><a class="line" href="a00300.html#aa166223d1c2a6de7256ab2d8b675a87e"> 2027</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00300.html#aa166223d1c2a6de7256ab2d8b675a87e">set_proc_cpubind</a>;</div>
496 <div class="line"><a name="l02029"></a><span class="lineno"><a class="line" href="a00300.html#aae705bc447adc163ead377362c4dfe9f"> 2029</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00300.html#aae705bc447adc163ead377362c4dfe9f">get_proc_cpubind</a>;</div>
497 <div class="line"><a name="l02031"></a><span class="lineno"><a class="line" href="a00300.html#a57a89a4b5f1f74fa6cfe176f1e8b0798"> 2031</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00300.html#a57a89a4b5f1f74fa6cfe176f1e8b0798">set_thisthread_cpubind</a>;</div>
498 <div class="line"><a name="l02033"></a><span class="lineno"><a class="line" href="a00300.html#a80d762e532d677dff262d83cc7bb1c60"> 2033</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00300.html#a80d762e532d677dff262d83cc7bb1c60">get_thisthread_cpubind</a>;</div>
499 <div class="line"><a name="l02035"></a><span class="lineno"><a class="line" href="a00300.html#a46fba33e307909ce256624687799dd6d"> 2035</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00300.html#a46fba33e307909ce256624687799dd6d">set_thread_cpubind</a>;</div>
500 <div class="line"><a name="l02037"></a><span class="lineno"><a class="line" href="a00300.html#a8dd4d8531ed2eebdce1507e7d104154e"> 2037</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00300.html#a8dd4d8531ed2eebdce1507e7d104154e">get_thread_cpubind</a>;</div>
501 <div class="line"><a name="l02039"></a><span class="lineno"><a class="line" href="a00300.html#ad2d5c94b738d92b7d2ede87e4e96321d"> 2039</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00300.html#ad2d5c94b738d92b7d2ede87e4e96321d">get_thisproc_last_cpu_location</a>;</div>
502 <div class="line"><a name="l02041"></a><span class="lineno"><a class="line" href="a00300.html#a2554620148b7992a5093f338f5ae254f"> 2041</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00300.html#a2554620148b7992a5093f338f5ae254f">get_proc_last_cpu_location</a>;</div>
503 <div class="line"><a name="l02043"></a><span class="lineno"><a class="line" href="a00300.html#a6be1f042fdce6bf41b4ea39f6f193808"> 2043</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00300.html#a6be1f042fdce6bf41b4ea39f6f193808">get_thisthread_last_cpu_location</a>;</div>
504 <div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>&#160;};</div>
505 <div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>&#160; </div>
506 <div class="line"><a name="l02051"></a><span class="lineno"><a class="line" href="a00304.html"> 2051</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00304.html">hwloc_topology_membind_support</a> {</div>
507 <div class="line"><a name="l02053"></a><span class="lineno"><a class="line" href="a00304.html#a36b3e388df9c6a249427cab7e3724749"> 2053</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00304.html#a36b3e388df9c6a249427cab7e3724749">set_thisproc_membind</a>;</div>
508 <div class="line"><a name="l02055"></a><span class="lineno"><a class="line" href="a00304.html#a3fd51e6fa5f0dd800322301b46b08559"> 2055</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00304.html#a3fd51e6fa5f0dd800322301b46b08559">get_thisproc_membind</a>;</div>
509 <div class="line"><a name="l02057"></a><span class="lineno"><a class="line" href="a00304.html#a756f44912894b176bf979a1b65f12aac"> 2057</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00304.html#a756f44912894b176bf979a1b65f12aac">set_proc_membind</a>;</div>
510 <div class="line"><a name="l02059"></a><span class="lineno"><a class="line" href="a00304.html#a9880cd2d605e316fc020167c49ca69ad"> 2059</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00304.html#a9880cd2d605e316fc020167c49ca69ad">get_proc_membind</a>;</div>
511 <div class="line"><a name="l02061"></a><span class="lineno"><a class="line" href="a00304.html#a0697af2e41f2e82b8ce71e3cc13f7eac"> 2061</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00304.html#a0697af2e41f2e82b8ce71e3cc13f7eac">set_thisthread_membind</a>;</div>
512 <div class="line"><a name="l02063"></a><span class="lineno"><a class="line" href="a00304.html#a63b0b2e26157b472f5717ee93cc7c535"> 2063</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00304.html#a63b0b2e26157b472f5717ee93cc7c535">get_thisthread_membind</a>;</div>
513 <div class="line"><a name="l02065"></a><span class="lineno"><a class="line" href="a00304.html#a476c06f96b65c08b287cf2369966123b"> 2065</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00304.html#a476c06f96b65c08b287cf2369966123b">set_area_membind</a>;</div>
514 <div class="line"><a name="l02067"></a><span class="lineno"><a class="line" href="a00304.html#a0a84e24a06f2fa487fe8c9605c6f68b3"> 2067</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00304.html#a0a84e24a06f2fa487fe8c9605c6f68b3">get_area_membind</a>;</div>
515 <div class="line"><a name="l02069"></a><span class="lineno"><a class="line" href="a00304.html#ae551abb27d2aa9ce008583488b845b98"> 2069</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00304.html#ae551abb27d2aa9ce008583488b845b98">alloc_membind</a>;</div>
516 <div class="line"><a name="l02071"></a><span class="lineno"><a class="line" href="a00304.html#a221098c339dbfab27bd2c9f5d32f123b"> 2071</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00304.html#a221098c339dbfab27bd2c9f5d32f123b">firsttouch_membind</a>;</div>
517 <div class="line"><a name="l02073"></a><span class="lineno"><a class="line" href="a00304.html#ae7cdb1f1b5f0242a69f85b5a5538c764"> 2073</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00304.html#ae7cdb1f1b5f0242a69f85b5a5538c764">bind_membind</a>;</div>
518 <div class="line"><a name="l02075"></a><span class="lineno"><a class="line" href="a00304.html#a3c44c6012860bbeba8a0f4c19710858d"> 2075</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00304.html#a3c44c6012860bbeba8a0f4c19710858d">interleave_membind</a>;</div>
519 <div class="line"><a name="l02077"></a><span class="lineno"><a class="line" href="a00304.html#ab0921af6e0cd6975812a80b8e5c7435c"> 2077</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00304.html#ab0921af6e0cd6975812a80b8e5c7435c">nexttouch_membind</a>;</div>
520 <div class="line"><a name="l02079"></a><span class="lineno"><a class="line" href="a00304.html#aafa7683871a6a760246f9b35209caec5"> 2079</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00304.html#aafa7683871a6a760246f9b35209caec5">migrate_membind</a>;</div>
521 <div class="line"><a name="l02081"></a><span class="lineno"><a class="line" href="a00304.html#a30173553a68e0a4dd1672d26f8e892b1"> 2081</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00304.html#a30173553a68e0a4dd1672d26f8e892b1">get_area_memlocation</a>;</div>
522 <div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>&#160;};</div>
523 <div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>&#160; </div>
524 <div class="line"><a name="l02086"></a><span class="lineno"><a class="line" href="a00308.html"> 2086</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00308.html">hwloc_topology_misc_support</a> {</div>
525 <div class="line"><a name="l02088"></a><span class="lineno"><a class="line" href="a00308.html#adf54a6dbe8e9dd5033dfe9c93df726c4"> 2088</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="a00308.html#adf54a6dbe8e9dd5033dfe9c93df726c4">imported_support</a>;</div>
526 <div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>&#160;};</div>
527 <div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>&#160; </div>
528 <div class="line"><a name="l02097"></a><span class="lineno"><a class="line" href="a00312.html"> 2097</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00312.html">hwloc_topology_support</a> {</div>
529 <div class="line"><a name="l02098"></a><span class="lineno"><a class="line" href="a00312.html#aea3fbd7653d987d81f848636c420504d"> 2098</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00296.html">hwloc_topology_discovery_support</a> *<a class="code" href="a00312.html#aea3fbd7653d987d81f848636c420504d">discovery</a>;</div>
530 <div class="line"><a name="l02099"></a><span class="lineno"><a class="line" href="a00312.html#adef2bb91f74c3e70a2a071393caf5f56"> 2099</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00300.html">hwloc_topology_cpubind_support</a> *<a class="code" href="a00312.html#adef2bb91f74c3e70a2a071393caf5f56">cpubind</a>;</div>
531 <div class="line"><a name="l02100"></a><span class="lineno"><a class="line" href="a00312.html#ac6eb62ae8bc0a68dce679a7107a36194"> 2100</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00304.html">hwloc_topology_membind_support</a> *<a class="code" href="a00312.html#ac6eb62ae8bc0a68dce679a7107a36194">membind</a>;</div>
532 <div class="line"><a name="l02101"></a><span class="lineno"><a class="line" href="a00312.html#ab9d08df4b0b03994f21b893ece826e78"> 2101</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00308.html">hwloc_topology_misc_support</a> *<a class="code" href="a00312.html#ab9d08df4b0b03994f21b893ece826e78">misc</a>;</div>
533 <div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>&#160;};</div>
534 <div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160; </div>
535 <div class="line"><a name="l02125"></a><span class="lineno"><a class="line" href="a00199.html#gab8c76173c4a8ce1a9a9366012b1388e6"> 2125</a></span>&#160;HWLOC_DECLSPEC <span class="keyword">const</span> <span class="keyword">struct </span><a class="code" href="a00312.html">hwloc_topology_support</a> *<a class="code" href="a00199.html#gab8c76173c4a8ce1a9a9366012b1388e6">hwloc_topology_get_support</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> __hwloc_restrict topology);</div>
536 <div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>&#160; </div>
537 <div class="line"><a name="l02136"></a><span class="lineno"><a class="line" href="a00199.html#ga9a5a1f0140cd1952544477833733195b"> 2136</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00199.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> {</div>
538 <div class="line"><a name="l02142"></a><span class="lineno"><a class="line" href="a00199.html#gga9a5a1f0140cd1952544477833733195bafda7b59e6810dfe778d8f9a4cc1e350e"> 2142</a></span>&#160; <a class="code" href="a00199.html#gga9a5a1f0140cd1952544477833733195bafda7b59e6810dfe778d8f9a4cc1e350e">HWLOC_TYPE_FILTER_KEEP_ALL</a> = 0,</div>
539 <div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>&#160; </div>
540 <div class="line"><a name="l02150"></a><span class="lineno"><a class="line" href="a00199.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a"> 2150</a></span>&#160; <a class="code" href="a00199.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a">HWLOC_TYPE_FILTER_KEEP_NONE</a> = 1,</div>
541 <div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>&#160; </div>
542 <div class="line"><a name="l02164"></a><span class="lineno"><a class="line" href="a00199.html#gga9a5a1f0140cd1952544477833733195ba7664716643bf1db83e631eed34f659e4"> 2164</a></span>&#160; <a class="code" href="a00199.html#gga9a5a1f0140cd1952544477833733195ba7664716643bf1db83e631eed34f659e4">HWLOC_TYPE_FILTER_KEEP_STRUCTURE</a> = 2,</div>
543 <div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>&#160; </div>
544 <div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>&#160; <a class="code" href="a00199.html#gga9a5a1f0140cd1952544477833733195ba63fd24954e18c83ff7eae9588759adb5">HWLOC_TYPE_FILTER_KEEP_IMPORTANT</a> = 3</div>
545 <div class="line"><a name="l02180"></a><span class="lineno"><a class="line" href="a00199.html#gga9a5a1f0140cd1952544477833733195ba63fd24954e18c83ff7eae9588759adb5"> 2180</a></span>&#160;};</div>
546 <div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>&#160; </div>
547 <div class="line"><a name="l02184"></a><span class="lineno"><a class="line" href="a00199.html#gad894e70f15f8d4aada7be8d1aba38b7e"> 2184</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00199.html#gad894e70f15f8d4aada7be8d1aba38b7e">hwloc_topology_set_type_filter</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, <span class="keyword">enum</span> <a class="code" href="a00199.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter);</div>
548 <div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>&#160; </div>
549 <div class="line"><a name="l02188"></a><span class="lineno"><a class="line" href="a00199.html#ga137ad1178f7a79f2383974d983083401"> 2188</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00199.html#ga137ad1178f7a79f2383974d983083401">hwloc_topology_get_type_filter</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, <span class="keyword">enum</span> <a class="code" href="a00199.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> *filter);</div>
550 <div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>&#160; </div>
551 <div class="line"><a name="l02194"></a><span class="lineno"><a class="line" href="a00199.html#ga9eb8dc3b106f84921bf5789101e97e24"> 2194</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00199.html#ga9eb8dc3b106f84921bf5789101e97e24">hwloc_topology_set_all_types_filter</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">enum</span> <a class="code" href="a00199.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter);</div>
552 <div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>&#160; </div>
553 <div class="line"><a name="l02200"></a><span class="lineno"><a class="line" href="a00199.html#ga30bd6d330fe3c8f0cbaad724d114ee20"> 2200</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00199.html#ga30bd6d330fe3c8f0cbaad724d114ee20">hwloc_topology_set_cache_types_filter</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">enum</span> <a class="code" href="a00199.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter);</div>
554 <div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>&#160; </div>
555 <div class="line"><a name="l02206"></a><span class="lineno"><a class="line" href="a00199.html#ga37c7b2e599ed3cd76ad9164630024f30"> 2206</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00199.html#ga37c7b2e599ed3cd76ad9164630024f30">hwloc_topology_set_icache_types_filter</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">enum</span> <a class="code" href="a00199.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter);</div>
556 <div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>&#160; </div>
557 <div class="line"><a name="l02210"></a><span class="lineno"><a class="line" href="a00199.html#ga0ab38705357bc1203abe829da8a12ad3"> 2210</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00199.html#ga0ab38705357bc1203abe829da8a12ad3">hwloc_topology_set_io_types_filter</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">enum</span> <a class="code" href="a00199.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter);</div>
558 <div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>&#160; </div>
559 <div class="line"><a name="l02222"></a><span class="lineno"><a class="line" href="a00199.html#ga2cc7b7b155cba58dda203e54f1637b9c"> 2222</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> <a class="code" href="a00199.html#ga2cc7b7b155cba58dda203e54f1637b9c">hwloc_topology_set_userdata</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">const</span> <span class="keywordtype">void</span> *userdata);</div>
560 <div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>&#160; </div>
561 <div class="line"><a name="l02229"></a><span class="lineno"><a class="line" href="a00199.html#ga91f992f8d6c4905b2d3c4f43e509c2a3"> 2229</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> * <a class="code" href="a00199.html#ga91f992f8d6c4905b2d3c4f43e509c2a3">hwloc_topology_get_userdata</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology);</div>
562 <div class="line"><a name="l02230"></a><span class="lineno"> 2230</span>&#160; </div>
563 <div class="line"><a name="l02240"></a><span class="lineno"><a class="line" href="a00200.html#ga9d80f08eb25b7ac22f1b998dc8bf521f"> 2240</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00200.html#ga9d80f08eb25b7ac22f1b998dc8bf521f">hwloc_restrict_flags_e</a> {</div>
564 <div class="line"><a name="l02246"></a><span class="lineno"><a class="line" href="a00200.html#gga9d80f08eb25b7ac22f1b998dc8bf521fa80eeb9cbba401ab050f8fb4573725891"> 2246</a></span>&#160; <a class="code" href="a00200.html#gga9d80f08eb25b7ac22f1b998dc8bf521fa80eeb9cbba401ab050f8fb4573725891">HWLOC_RESTRICT_FLAG_REMOVE_CPULESS</a> = (1UL&lt;&lt;0),</div>
565 <div class="line"><a name="l02247"></a><span class="lineno"> 2247</span>&#160; </div>
566 <div class="line"><a name="l02252"></a><span class="lineno"><a class="line" href="a00200.html#gga9d80f08eb25b7ac22f1b998dc8bf521fae4c5b1b87232f2d8a60559e77ac65a68"> 2252</a></span>&#160; <a class="code" href="a00200.html#gga9d80f08eb25b7ac22f1b998dc8bf521fae4c5b1b87232f2d8a60559e77ac65a68">HWLOC_RESTRICT_FLAG_BYNODESET</a> = (1UL&lt;&lt;3),</div>
567 <div class="line"><a name="l02253"></a><span class="lineno"> 2253</span>&#160; </div>
568 <div class="line"><a name="l02259"></a><span class="lineno"><a class="line" href="a00200.html#gga9d80f08eb25b7ac22f1b998dc8bf521faf5ba49808855704bfe9cb9fe7347f93b"> 2259</a></span>&#160; <a class="code" href="a00200.html#gga9d80f08eb25b7ac22f1b998dc8bf521faf5ba49808855704bfe9cb9fe7347f93b">HWLOC_RESTRICT_FLAG_REMOVE_MEMLESS</a> = (1UL&lt;&lt;4),</div>
569 <div class="line"><a name="l02260"></a><span class="lineno"> 2260</span>&#160; </div>
570 <div class="line"><a name="l02265"></a><span class="lineno"><a class="line" href="a00200.html#gga9d80f08eb25b7ac22f1b998dc8bf521fa699969227a09bbc1a7de51dc9fb7be4b"> 2265</a></span>&#160; <a class="code" href="a00200.html#gga9d80f08eb25b7ac22f1b998dc8bf521fa699969227a09bbc1a7de51dc9fb7be4b">HWLOC_RESTRICT_FLAG_ADAPT_MISC</a> = (1UL&lt;&lt;1),</div>
571 <div class="line"><a name="l02266"></a><span class="lineno"> 2266</span>&#160; </div>
572 <div class="line"><a name="l02271"></a><span class="lineno"> 2271</span>&#160; <a class="code" href="a00200.html#gga9d80f08eb25b7ac22f1b998dc8bf521faa95d6985e36ec1e55f68b210297a85cb">HWLOC_RESTRICT_FLAG_ADAPT_IO</a> = (1UL&lt;&lt;2)</div>
573 <div class="line"><a name="l02272"></a><span class="lineno"><a class="line" href="a00200.html#gga9d80f08eb25b7ac22f1b998dc8bf521faa95d6985e36ec1e55f68b210297a85cb"> 2272</a></span>&#160;};</div>
574 <div class="line"><a name="l02273"></a><span class="lineno"> 2273</span>&#160; </div>
575 <div class="line"><a name="l02298"></a><span class="lineno"><a class="line" href="a00200.html#ga6db81ed13ac0a9d70cc80372ab537815"> 2298</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00200.html#ga6db81ed13ac0a9d70cc80372ab537815">hwloc_topology_restrict</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> __hwloc_restrict topology, <a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
576 <div class="line"><a name="l02299"></a><span class="lineno"> 2299</span>&#160; </div>
577 <div class="line"><a name="l02301"></a><span class="lineno"><a class="line" href="a00200.html#ga38b1be3922094d880f6e76bf56c973d6"> 2301</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00200.html#ga38b1be3922094d880f6e76bf56c973d6">hwloc_allow_flags_e</a> {</div>
578 <div class="line"><a name="l02306"></a><span class="lineno"><a class="line" href="a00200.html#gga38b1be3922094d880f6e76bf56c973d6aca107692455774f9d323d21b8abfce72"> 2306</a></span>&#160; <a class="code" href="a00200.html#gga38b1be3922094d880f6e76bf56c973d6aca107692455774f9d323d21b8abfce72">HWLOC_ALLOW_FLAG_ALL</a> = (1UL&lt;&lt;0),</div>
579 <div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>&#160; </div>
580 <div class="line"><a name="l02315"></a><span class="lineno"><a class="line" href="a00200.html#gga38b1be3922094d880f6e76bf56c973d6a88c50088c09dcf1e1a496c0817556fb9"> 2315</a></span>&#160; <a class="code" href="a00200.html#gga38b1be3922094d880f6e76bf56c973d6a88c50088c09dcf1e1a496c0817556fb9">HWLOC_ALLOW_FLAG_LOCAL_RESTRICTIONS</a> = (1UL&lt;&lt;1),</div>
581 <div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>&#160; </div>
582 <div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>&#160; <a class="code" href="a00200.html#gga38b1be3922094d880f6e76bf56c973d6a489c8c1b67ce7e0b8cf7a665852760e1">HWLOC_ALLOW_FLAG_CUSTOM</a> = (1UL&lt;&lt;2)</div>
583 <div class="line"><a name="l02320"></a><span class="lineno"><a class="line" href="a00200.html#gga38b1be3922094d880f6e76bf56c973d6a489c8c1b67ce7e0b8cf7a665852760e1"> 2320</a></span>&#160;};</div>
584 <div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>&#160; </div>
585 <div class="line"><a name="l02337"></a><span class="lineno"><a class="line" href="a00200.html#gaf955b190c0299dcfb5bc985d777f92a1"> 2337</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00200.html#gaf955b190c0299dcfb5bc985d777f92a1">hwloc_topology_allow</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> __hwloc_restrict topology, <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> cpuset, <a class="code" href="a00189.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> nodeset, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
586 <div class="line"><a name="l02338"></a><span class="lineno"> 2338</span>&#160; </div>
587 <div class="line"><a name="l02360"></a><span class="lineno"><a class="line" href="a00200.html#gad980782ade737900c5cf208946768c30"> 2360</a></span>&#160;HWLOC_DECLSPEC <a class="code" href="a00244.html">hwloc_obj_t</a> <a class="code" href="a00200.html#gad980782ade737900c5cf208946768c30">hwloc_topology_insert_misc_object</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00244.html">hwloc_obj_t</a> parent, <span class="keyword">const</span> <span class="keywordtype">char</span> *name);</div>
588 <div class="line"><a name="l02361"></a><span class="lineno"> 2361</span>&#160; </div>
589 <div class="line"><a name="l02369"></a><span class="lineno"><a class="line" href="a00200.html#ga4cea4741165faf5323931a9ed8786ef7"> 2369</a></span>&#160;HWLOC_DECLSPEC <a class="code" href="a00244.html">hwloc_obj_t</a> <a class="code" href="a00200.html#ga4cea4741165faf5323931a9ed8786ef7">hwloc_topology_alloc_group_object</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology);</div>
590 <div class="line"><a name="l02370"></a><span class="lineno"> 2370</span>&#160; </div>
591 <div class="line"><a name="l02417"></a><span class="lineno"><a class="line" href="a00200.html#ga1fc6012b3e1c249b83f48cb7bcacaa5b"> 2417</a></span>&#160;HWLOC_DECLSPEC <a class="code" href="a00244.html">hwloc_obj_t</a> <a class="code" href="a00200.html#ga1fc6012b3e1c249b83f48cb7bcacaa5b">hwloc_topology_insert_group_object</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00244.html">hwloc_obj_t</a> group);</div>
592 <div class="line"><a name="l02418"></a><span class="lineno"> 2418</span>&#160; </div>
593 <div class="line"><a name="l02428"></a><span class="lineno"><a class="line" href="a00200.html#gad458715d3335df44849216cc123d1055"> 2428</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00200.html#gad458715d3335df44849216cc123d1055">hwloc_obj_add_other_obj_sets</a>(<a class="code" href="a00244.html">hwloc_obj_t</a> dst, <a class="code" href="a00244.html">hwloc_obj_t</a> src);</div>
594 <div class="line"><a name="l02429"></a><span class="lineno"> 2429</span>&#160; </div>
595 <div class="line"><a name="l02444"></a><span class="lineno"><a class="line" href="a00200.html#ga698ecd640d2b76742bba3829a145cd9a"> 2444</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00200.html#ga698ecd640d2b76742bba3829a145cd9a">hwloc_topology_refresh</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology);</div>
596 <div class="line"><a name="l02445"></a><span class="lineno"> 2445</span>&#160; </div>
597 <div class="line"><a name="l02450"></a><span class="lineno"> 2450</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
598 <div class="line"><a name="l02451"></a><span class="lineno"> 2451</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
599 <div class="line"><a name="l02452"></a><span class="lineno"> 2452</span>&#160;<span class="preprocessor">#endif</span></div>
600 <div class="line"><a name="l02453"></a><span class="lineno"> 2453</span>&#160; </div>
601 <div class="line"><a name="l02454"></a><span class="lineno"> 2454</span>&#160; </div>
602 <div class="line"><a name="l02455"></a><span class="lineno"> 2455</span>&#160;<span class="comment">/* high-level helpers */</span></div>
603 <div class="line"><a name="l02456"></a><span class="lineno"> 2456</span>&#160;<span class="preprocessor">#include &quot;hwloc/helper.h&quot;</span></div>
604 <div class="line"><a name="l02457"></a><span class="lineno"> 2457</span>&#160; </div>
605 <div class="line"><a name="l02458"></a><span class="lineno"> 2458</span>&#160;<span class="comment">/* inline code of some functions above */</span></div>
606 <div class="line"><a name="l02459"></a><span class="lineno"> 2459</span>&#160;<span class="preprocessor">#include &quot;hwloc/inlines.h&quot;</span></div>
607 <div class="line"><a name="l02460"></a><span class="lineno"> 2460</span>&#160; </div>
608 <div class="line"><a name="l02461"></a><span class="lineno"> 2461</span>&#160;<span class="comment">/* memory attributes */</span></div>
609 <div class="line"><a name="l02462"></a><span class="lineno"> 2462</span>&#160;<span class="preprocessor">#include &quot;hwloc/memattrs.h&quot;</span></div>
610 <div class="line"><a name="l02463"></a><span class="lineno"> 2463</span>&#160; </div>
611 <div class="line"><a name="l02464"></a><span class="lineno"> 2464</span>&#160;<span class="comment">/* kinds of CPU cores */</span></div>
612 <div class="line"><a name="l02465"></a><span class="lineno"> 2465</span>&#160;<span class="preprocessor">#include &quot;hwloc/cpukinds.h&quot;</span></div>
613 <div class="line"><a name="l02466"></a><span class="lineno"> 2466</span>&#160; </div>
614 <div class="line"><a name="l02467"></a><span class="lineno"> 2467</span>&#160;<span class="comment">/* exporting to XML or synthetic */</span></div>
615 <div class="line"><a name="l02468"></a><span class="lineno"> 2468</span>&#160;<span class="preprocessor">#include &quot;hwloc/export.h&quot;</span></div>
616 <div class="line"><a name="l02469"></a><span class="lineno"> 2469</span>&#160; </div>
617 <div class="line"><a name="l02470"></a><span class="lineno"> 2470</span>&#160;<span class="comment">/* distances */</span></div>
618 <div class="line"><a name="l02471"></a><span class="lineno"> 2471</span>&#160;<span class="preprocessor">#include &quot;hwloc/distances.h&quot;</span></div>
619 <div class="line"><a name="l02472"></a><span class="lineno"> 2472</span>&#160; </div>
620 <div class="line"><a name="l02473"></a><span class="lineno"> 2473</span>&#160;<span class="comment">/* topology diffs */</span></div>
621 <div class="line"><a name="l02474"></a><span class="lineno"> 2474</span>&#160;<span class="preprocessor">#include &quot;hwloc/diff.h&quot;</span></div>
622 <div class="line"><a name="l02475"></a><span class="lineno"> 2475</span>&#160; </div>
623 <div class="line"><a name="l02476"></a><span class="lineno"> 2476</span>&#160;<span class="comment">/* deprecated headers */</span></div>
624 <div class="line"><a name="l02477"></a><span class="lineno"> 2477</span>&#160;<span class="preprocessor">#include &quot;hwloc/deprecated.h&quot;</span></div>
625 <div class="line"><a name="l02478"></a><span class="lineno"> 2478</span>&#160; </div>
626 <div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_H */</span><span class="preprocessor"></span></div>
627 <div class="ttc" id="aa00188_html_ga9c0b50c98add1adf57ed1ce85bb5190d"><div class="ttname"><a href="a00188.html#ga9c0b50c98add1adf57ed1ce85bb5190d">hwloc_get_api_version</a></div><div class="ttdeci">unsigned hwloc_get_api_version(void)</div><div class="ttdoc">Indicate at runtime which hwloc API version was used at build time.</div></div>
628 <div class="ttc" id="aa00189_html_ga1f784433e9b606261f62d1134f6a3b25"><div class="ttname"><a href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a></div><div class="ttdeci">hwloc_const_bitmap_t hwloc_const_cpuset_t</div><div class="ttdoc">A non-modifiable hwloc_cpuset_t.</div><div class="ttdef"><b>Definition:</b> hwloc.h:142</div></div>
629 <div class="ttc" id="aa00189_html_ga2f5276235841ad66a79bedad16a5a10c"><div class="ttname"><a href="a00189.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a></div><div class="ttdeci">hwloc_const_bitmap_t hwloc_const_nodeset_t</div><div class="ttdoc">A non-modifiable hwloc_nodeset_t.</div><div class="ttdef"><b>Definition:</b> hwloc.h:160</div></div>
630 <div class="ttc" id="aa00189_html_ga37e35730fa7e775b5bb0afe893d6d508"><div class="ttname"><a href="a00189.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_nodeset_t</div><div class="ttdoc">A node set is a bitmap whose bits are set according to NUMA memory node physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:157</div></div>
631 <div class="ttc" id="aa00189_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
632 <div class="ttc" id="aa00190_html_ga1820ea0dfd8e9dca28f9ea7624df5ae2"><div class="ttname"><a href="a00190.html#ga1820ea0dfd8e9dca28f9ea7624df5ae2">hwloc_compare_types</a></div><div class="ttdeci">int hwloc_compare_types(hwloc_obj_type_t type1, hwloc_obj_type_t type2)</div><div class="ttdoc">Compare the depth of two object types.</div></div>
633 <div class="ttc" id="aa00190_html_ga48a4803c72574191d7ead1c62aaf9860"><div class="ttname"><a href="a00190.html#ga48a4803c72574191d7ead1c62aaf9860">hwloc_obj_bridge_type_e</a></div><div class="ttdeci">hwloc_obj_bridge_type_e</div><div class="ttdoc">Type of one side (upstream or downstream) of an I/O bridge.</div><div class="ttdef"><b>Definition:</b> hwloc.h:333</div></div>
634 <div class="ttc" id="aa00190_html_ga552ec74296a024237f474acec98694c0"><div class="ttname"><a href="a00190.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a></div><div class="ttdeci">enum hwloc_obj_cache_type_e hwloc_obj_cache_type_t</div><div class="ttdoc">Cache type.</div></div>
635 <div class="ttc" id="aa00190_html_ga64f5d539df299c97ae80ce53fc4b56c0"><div class="ttname"><a href="a00190.html#ga64f5d539df299c97ae80ce53fc4b56c0">hwloc_obj_osdev_type_e</a></div><div class="ttdeci">hwloc_obj_osdev_type_e</div><div class="ttdoc">Type of a OS device.</div><div class="ttdef"><b>Definition:</b> hwloc.h:339</div></div>
636 <div class="ttc" id="aa00190_html_ga791c9875c8fe20f3e1e5871e0657e59b"><div class="ttname"><a href="a00190.html#ga791c9875c8fe20f3e1e5871e0657e59b">hwloc_obj_cache_type_e</a></div><div class="ttdeci">hwloc_obj_cache_type_e</div><div class="ttdoc">Cache type.</div><div class="ttdef"><b>Definition:</b> hwloc.h:326</div></div>
637 <div class="ttc" id="aa00190_html_gaa9a6941ef7b1c169412518d7ef71b3d2"><div class="ttname"><a href="a00190.html#gaa9a6941ef7b1c169412518d7ef71b3d2">hwloc_obj_osdev_type_t</a></div><div class="ttdeci">enum hwloc_obj_osdev_type_e hwloc_obj_osdev_type_t</div><div class="ttdoc">Type of a OS device.</div></div>
638 <div class="ttc" id="aa00190_html_gab34362c7a23296c3f12c5756747abda3"><div class="ttname"><a href="a00190.html#gab34362c7a23296c3f12c5756747abda3">hwloc_obj_bridge_type_t</a></div><div class="ttdeci">enum hwloc_obj_bridge_type_e hwloc_obj_bridge_type_t</div><div class="ttdoc">Type of one side (upstream or downstream) of an I/O bridge.</div></div>
639 <div class="ttc" id="aa00190_html_gacd37bb612667dc437d66bfb175a8dc55"><div class="ttname"><a href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a></div><div class="ttdeci">hwloc_obj_type_t</div><div class="ttdoc">Type of topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:176</div></div>
640 <div class="ttc" id="aa00190_html_gga48a4803c72574191d7ead1c62aaf9860a2c7660f3864ad2810c1e72aad285e574"><div class="ttname"><a href="a00190.html#gga48a4803c72574191d7ead1c62aaf9860a2c7660f3864ad2810c1e72aad285e574">HWLOC_OBJ_BRIDGE_HOST</a></div><div class="ttdeci">@ HWLOC_OBJ_BRIDGE_HOST</div><div class="ttdoc">Host-side of a bridge, only possible upstream.</div><div class="ttdef"><b>Definition:</b> hwloc.h:334</div></div>
641 <div class="ttc" id="aa00190_html_gga48a4803c72574191d7ead1c62aaf9860a8f3b4cecf3dab6073d74696d10863c60"><div class="ttname"><a href="a00190.html#gga48a4803c72574191d7ead1c62aaf9860a8f3b4cecf3dab6073d74696d10863c60">HWLOC_OBJ_BRIDGE_PCI</a></div><div class="ttdeci">@ HWLOC_OBJ_BRIDGE_PCI</div><div class="ttdoc">PCI-side of a bridge.</div><div class="ttdef"><b>Definition:</b> hwloc.h:335</div></div>
642 <div class="ttc" id="aa00190_html_gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83"><div class="ttname"><a href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83">HWLOC_OBJ_OSDEV_COPROC</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_COPROC</div><div class="ttdoc">Operating system co-processor device. For instance &quot;opencl0d0&quot; for a OpenCL device,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:352</div></div>
643 <div class="ttc" id="aa00190_html_gga64f5d539df299c97ae80ce53fc4b56c0a52157d03694fdae82dddd57ca8c973b6"><div class="ttname"><a href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0a52157d03694fdae82dddd57ca8c973b6">HWLOC_OBJ_OSDEV_OPENFABRICS</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_OPENFABRICS</div><div class="ttdoc">Operating system openfabrics device. For instance the &quot;mlx4_0&quot; InfiniBand HCA, or &quot;hfi1_0&quot; Omni-Path ...</div><div class="ttdef"><b>Definition:</b> hwloc.h:347</div></div>
644 <div class="ttc" id="aa00190_html_gga64f5d539df299c97ae80ce53fc4b56c0a689b0488c3c0d08d116751c6b9cb8871"><div class="ttname"><a href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0a689b0488c3c0d08d116751c6b9cb8871">HWLOC_OBJ_OSDEV_BLOCK</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_BLOCK</div><div class="ttdoc">Operating system block device, or non-volatile memory device. For instance &quot;sda&quot; or &quot;dax2....</div><div class="ttdef"><b>Definition:</b> hwloc.h:340</div></div>
645 <div class="ttc" id="aa00190_html_gga64f5d539df299c97ae80ce53fc4b56c0a827ad1643360711a8b6c6af671366791"><div class="ttname"><a href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0a827ad1643360711a8b6c6af671366791">HWLOC_OBJ_OSDEV_DMA</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_DMA</div><div class="ttdoc">Operating system dma engine device. For instance the &quot;dma0chan0&quot; DMA channel on Linux.</div><div class="ttdef"><b>Definition:</b> hwloc.h:350</div></div>
646 <div class="ttc" id="aa00190_html_gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90"><div class="ttname"><a href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90">HWLOC_OBJ_OSDEV_GPU</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_GPU</div><div class="ttdoc">Operating system GPU device. For instance &quot;:0.0&quot; for a GL display, &quot;card0&quot; for a Linux DRM device.</div><div class="ttdef"><b>Definition:</b> hwloc.h:342</div></div>
647 <div class="ttc" id="aa00190_html_gga64f5d539df299c97ae80ce53fc4b56c0ab715d81155f771573c8682dffc65021b"><div class="ttname"><a href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0ab715d81155f771573c8682dffc65021b">HWLOC_OBJ_OSDEV_NETWORK</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_NETWORK</div><div class="ttdoc">Operating system network device. For instance the &quot;eth0&quot; interface on Linux.</div><div class="ttdef"><b>Definition:</b> hwloc.h:345</div></div>
648 <div class="ttc" id="aa00190_html_gga791c9875c8fe20f3e1e5871e0657e59ba3900b3b2db54941aac249e5a638a2d7a"><div class="ttname"><a href="a00190.html#gga791c9875c8fe20f3e1e5871e0657e59ba3900b3b2db54941aac249e5a638a2d7a">HWLOC_OBJ_CACHE_UNIFIED</a></div><div class="ttdeci">@ HWLOC_OBJ_CACHE_UNIFIED</div><div class="ttdoc">Unified cache.</div><div class="ttdef"><b>Definition:</b> hwloc.h:327</div></div>
649 <div class="ttc" id="aa00190_html_gga791c9875c8fe20f3e1e5871e0657e59ba6f98b0d422b38ba90c5f5c79a11b0658"><div class="ttname"><a href="a00190.html#gga791c9875c8fe20f3e1e5871e0657e59ba6f98b0d422b38ba90c5f5c79a11b0658">HWLOC_OBJ_CACHE_INSTRUCTION</a></div><div class="ttdeci">@ HWLOC_OBJ_CACHE_INSTRUCTION</div><div class="ttdoc">Instruction cache (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:329</div></div>
650 <div class="ttc" id="aa00190_html_gga791c9875c8fe20f3e1e5871e0657e59bacac60ecad4206f85aeb79bef1604b488"><div class="ttname"><a href="a00190.html#gga791c9875c8fe20f3e1e5871e0657e59bacac60ecad4206f85aeb79bef1604b488">HWLOC_OBJ_CACHE_DATA</a></div><div class="ttdeci">@ HWLOC_OBJ_CACHE_DATA</div><div class="ttdoc">Data cache.</div><div class="ttdef"><b>Definition:</b> hwloc.h:328</div></div>
651 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55a0ed5bd98974729a0c476c39e917dabd6"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a0ed5bd98974729a0c476c39e917dabd6">HWLOC_OBJ_MEMCACHE</a></div><div class="ttdeci">@ HWLOC_OBJ_MEMCACHE</div><div class="ttdoc">Memory-side cache (filtered out by default). A cache in front of a specific NUMA node.</div><div class="ttdef"><b>Definition:</b> hwloc.h:305</div></div>
652 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55a10713b7e561b8cc32544cd31b1c17f8d"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a10713b7e561b8cc32544cd31b1c17f8d">HWLOC_OBJ_L2ICACHE</a></div><div class="ttdeci">@ HWLOC_OBJ_L2ICACHE</div><div class="ttdoc">Level 2 instruction Cache (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:220</div></div>
653 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55a18f61d19fe9f4bcea978fcc68bc078fb"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a18f61d19fe9f4bcea978fcc68bc078fb">HWLOC_OBJ_L2CACHE</a></div><div class="ttdeci">@ HWLOC_OBJ_L2CACHE</div><div class="ttdoc">Level 2 Data (or Unified) Cache.</div><div class="ttdef"><b>Definition:</b> hwloc.h:214</div></div>
654 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55a19f8a6953fa91efc76bcbcdf2d22de4d"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a19f8a6953fa91efc76bcbcdf2d22de4d">HWLOC_OBJ_MISC</a></div><div class="ttdeci">@ HWLOC_OBJ_MISC</div><div class="ttdoc">Miscellaneous objects (filtered out by default). Objects without particular meaning,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:290</div></div>
655 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55a25fae0e0514c90e3973a29866a5a837d"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a25fae0e0514c90e3973a29866a5a837d">HWLOC_OBJ_L3CACHE</a></div><div class="ttdeci">@ HWLOC_OBJ_L3CACHE</div><div class="ttdoc">Level 3 Data (or Unified) Cache.</div><div class="ttdef"><b>Definition:</b> hwloc.h:215</div></div>
656 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55a3f4e83ffc4a259354959ae8a9eaa2a80"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a3f4e83ffc4a259354959ae8a9eaa2a80">HWLOC_OBJ_MACHINE</a></div><div class="ttdeci">@ HWLOC_OBJ_MACHINE</div><div class="ttdoc">Machine. A set of processors and memory with cache coherency.</div><div class="ttdef"><b>Definition:</b> hwloc.h:182</div></div>
657 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075">HWLOC_OBJ_OS_DEVICE</a></div><div class="ttdeci">@ HWLOC_OBJ_OS_DEVICE</div><div class="ttdoc">Operating system device (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:279</div></div>
658 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55a5269ef95be72f88465559d35c9b7ad56"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a5269ef95be72f88465559d35c9b7ad56">HWLOC_OBJ_GROUP</a></div><div class="ttdeci">@ HWLOC_OBJ_GROUP</div><div class="ttdoc">Group objects. Objects which do not fit in the above but are detected by hwloc and are useful to take...</div><div class="ttdef"><b>Definition:</b> hwloc.h:223</div></div>
659 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55a54923bfa13df9d7e6d6dd0d5baff5f72"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a54923bfa13df9d7e6d6dd0d5baff5f72">HWLOC_OBJ_L4CACHE</a></div><div class="ttdeci">@ HWLOC_OBJ_L4CACHE</div><div class="ttdoc">Level 4 Data (or Unified) Cache.</div><div class="ttdef"><b>Definition:</b> hwloc.h:216</div></div>
660 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55a56389b8eb2e2f74f288bb657c4e72140"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a56389b8eb2e2f74f288bb657c4e72140">HWLOC_OBJ_L1CACHE</a></div><div class="ttdeci">@ HWLOC_OBJ_L1CACHE</div><div class="ttdoc">Level 1 Data (or Unified) Cache.</div><div class="ttdef"><b>Definition:</b> hwloc.h:213</div></div>
661 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div><div class="ttdeci">@ HWLOC_OBJ_PCI_DEVICE</div><div class="ttdoc">PCI device (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:269</div></div>
662 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55a67194c9de5e3e581c64c11d2eb1c109d"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a67194c9de5e3e581c64c11d2eb1c109d">HWLOC_OBJ_L5CACHE</a></div><div class="ttdeci">@ HWLOC_OBJ_L5CACHE</div><div class="ttdoc">Level 5 Data (or Unified) Cache.</div><div class="ttdef"><b>Definition:</b> hwloc.h:217</div></div>
663 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0">HWLOC_OBJ_BRIDGE</a></div><div class="ttdeci">@ HWLOC_OBJ_BRIDGE</div><div class="ttdoc">Bridge (filtered out by default). Any bridge (or PCI switch) that connects the host or an I/O bus,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:257</div></div>
664 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a></div><div class="ttdeci">@ HWLOC_OBJ_NUMANODE</div><div class="ttdoc">NUMA node. An object that contains memory that is directly and byte-accessible to the host processors...</div><div class="ttdef"><b>Definition:</b> hwloc.h:236</div></div>
665 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55ab16ab8c0dbffc234921d86f3dfb63129"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55ab16ab8c0dbffc234921d86f3dfb63129">HWLOC_OBJ_PACKAGE</a></div><div class="ttdeci">@ HWLOC_OBJ_PACKAGE</div><div class="ttdoc">Physical package. The physical package that usually gets inserted into a socket on the motherboard....</div><div class="ttdef"><b>Definition:</b> hwloc.h:191</div></div>
666 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661">HWLOC_OBJ_PU</a></div><div class="ttdeci">@ HWLOC_OBJ_PU</div><div class="ttdoc">Processing Unit, or (Logical) Processor. An execution unit (may share a core with some other logical ...</div><div class="ttdef"><b>Definition:</b> hwloc.h:201</div></div>
667 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55ac22850c717f07bf7ffb316fadd08d218"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55ac22850c717f07bf7ffb316fadd08d218">HWLOC_OBJ_L3ICACHE</a></div><div class="ttdeci">@ HWLOC_OBJ_L3ICACHE</div><div class="ttdoc">Level 3 instruction Cache (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:221</div></div>
668 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55ac793958f330bca371aa1535de8aff45f"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55ac793958f330bca371aa1535de8aff45f">HWLOC_OBJ_CORE</a></div><div class="ttdeci">@ HWLOC_OBJ_CORE</div><div class="ttdoc">Core. A computation unit (may be shared by several PUs, aka logical processors).</div><div class="ttdef"><b>Definition:</b> hwloc.h:197</div></div>
669 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55af78bb6cde53aaaaa162a7dc420c409da"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55af78bb6cde53aaaaa162a7dc420c409da">HWLOC_OBJ_DIE</a></div><div class="ttdeci">@ HWLOC_OBJ_DIE</div><div class="ttdoc">Die within a physical package. A subpart of the physical package, that contains multiple cores.</div><div class="ttdef"><b>Definition:</b> hwloc.h:318</div></div>
670 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55afa834a85d9e53836cf0db6d0bd8329b4"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55afa834a85d9e53836cf0db6d0bd8329b4">HWLOC_OBJ_L1ICACHE</a></div><div class="ttdeci">@ HWLOC_OBJ_L1ICACHE</div><div class="ttdoc">Level 1 instruction Cache (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:219</div></div>
671 <div class="ttc" id="aa00191_html_ga79b8ab56877ef99ac59b833203391c7d"><div class="ttname"><a href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a></div><div class="ttdeci">struct hwloc_obj * hwloc_obj_t</div><div class="ttdoc">Convenience typedef; a pointer to a struct hwloc_obj.</div><div class="ttdef"><b>Definition:</b> hwloc.h:595</div></div>
672 <div class="ttc" id="aa00192_html_ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa"><div class="ttname"><a href="a00192.html#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa">hwloc_topology_init</a></div><div class="ttdeci">int hwloc_topology_init(hwloc_topology_t *topologyp)</div><div class="ttdoc">Allocate a topology context.</div></div>
673 <div class="ttc" id="aa00192_html_ga0647ae66458fe68172eb5a320042f870"><div class="ttname"><a href="a00192.html#ga0647ae66458fe68172eb5a320042f870">hwloc_topology_abi_check</a></div><div class="ttdeci">int hwloc_topology_abi_check(hwloc_topology_t topology)</div><div class="ttdoc">Verify that the topology is compatible with the current hwloc library.</div></div>
674 <div class="ttc" id="aa00192_html_ga62a161fc5e6f120344dc69a7bee4e587"><div class="ttname"><a href="a00192.html#ga62a161fc5e6f120344dc69a7bee4e587">hwloc_topology_dup</a></div><div class="ttdeci">int hwloc_topology_dup(hwloc_topology_t *newtopology, hwloc_topology_t oldtopology)</div><div class="ttdoc">Duplicate a topology.</div></div>
675 <div class="ttc" id="aa00192_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
676 <div class="ttc" id="aa00192_html_ga9f34a640b6fd28d23699d4d084667b15"><div class="ttname"><a href="a00192.html#ga9f34a640b6fd28d23699d4d084667b15">hwloc_topology_destroy</a></div><div class="ttdeci">void hwloc_topology_destroy(hwloc_topology_t topology)</div><div class="ttdoc">Terminate and free a topology context.</div></div>
677 <div class="ttc" id="aa00192_html_gabdf58d87ad77f6615fccdfe0535ff826"><div class="ttname"><a href="a00192.html#gabdf58d87ad77f6615fccdfe0535ff826">hwloc_topology_load</a></div><div class="ttdeci">int hwloc_topology_load(hwloc_topology_t topology)</div><div class="ttdoc">Build the actual topology.</div></div>
678 <div class="ttc" id="aa00192_html_gaf6746bc3a558ef1ac8348b4491d091b5"><div class="ttname"><a href="a00192.html#gaf6746bc3a558ef1ac8348b4491d091b5">hwloc_topology_check</a></div><div class="ttdeci">void hwloc_topology_check(hwloc_topology_t topology)</div><div class="ttdoc">Run internal checks on a topology structure.</div></div>
679 <div class="ttc" id="aa00193_html_ga1d5ceafe8130fe6e8657bf0bc666ba50"><div class="ttname"><a href="a00193.html#ga1d5ceafe8130fe6e8657bf0bc666ba50">hwloc_get_nbobjs_by_depth</a></div><div class="ttdeci">unsigned hwloc_get_nbobjs_by_depth(hwloc_topology_t topology, int depth)</div><div class="ttdoc">Returns the width of level at depth depth.</div></div>
680 <div class="ttc" id="aa00193_html_ga2d4b12fc187dfc53b35f2fa21d21044d"><div class="ttname"><a href="a00193.html#ga2d4b12fc187dfc53b35f2fa21d21044d">hwloc_get_root_obj</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_root_obj(hwloc_topology_t topology)</div><div class="ttdoc">Returns the top-object of the topology-tree.</div></div>
681 <div class="ttc" id="aa00193_html_ga391f6b2613f0065673eaa4069b93d4e0"><div class="ttname"><a href="a00193.html#ga391f6b2613f0065673eaa4069b93d4e0">hwloc_get_obj_by_depth</a></div><div class="ttdeci">hwloc_obj_t hwloc_get_obj_by_depth(hwloc_topology_t topology, int depth, unsigned idx)</div><div class="ttdoc">Returns the topology object at logical index idx from depth depth.</div></div>
682 <div class="ttc" id="aa00193_html_ga506b0682b98aa264d53e934d2e9badb0"><div class="ttname"><a href="a00193.html#ga506b0682b98aa264d53e934d2e9badb0">hwloc_get_depth_type</a></div><div class="ttdeci">hwloc_obj_type_t hwloc_get_depth_type(hwloc_topology_t topology, int depth)</div><div class="ttdoc">Returns the type of objects at depth depth.</div></div>
683 <div class="ttc" id="aa00193_html_ga6f414dd80a2b943967a0ac92da3181a2"><div class="ttname"><a href="a00193.html#ga6f414dd80a2b943967a0ac92da3181a2">hwloc_get_obj_by_type</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_obj_by_type(hwloc_topology_t topology, hwloc_obj_type_t type, unsigned idx)</div><div class="ttdoc">Returns the topology object at logical index idx with type type.</div></div>
684 <div class="ttc" id="aa00193_html_ga759e88eaf5a230ad283e9d4c42486735"><div class="ttname"><a href="a00193.html#ga759e88eaf5a230ad283e9d4c42486735">hwloc_get_next_obj_by_type</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_obj_by_type(hwloc_topology_t topology, hwloc_obj_type_t type, hwloc_obj_t prev)</div><div class="ttdoc">Returns the next object of type type.</div></div>
685 <div class="ttc" id="aa00193_html_ga789a3f65aedff644be64a18526a03065"><div class="ttname"><a href="a00193.html#ga789a3f65aedff644be64a18526a03065">hwloc_get_nbobjs_by_type</a></div><div class="ttdeci">static int hwloc_get_nbobjs_by_type(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Returns the width of level type type.</div></div>
686 <div class="ttc" id="aa00193_html_ga8125328e69eba709c33ea8055c12589b"><div class="ttname"><a href="a00193.html#ga8125328e69eba709c33ea8055c12589b">hwloc_get_type_or_below_depth</a></div><div class="ttdeci">static int hwloc_get_type_or_below_depth(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Returns the depth of objects of type type or below.</div></div>
687 <div class="ttc" id="aa00193_html_ga8a9ee573b7d2190272095d10712a7cca"><div class="ttname"><a href="a00193.html#ga8a9ee573b7d2190272095d10712a7cca">hwloc_get_type_or_above_depth</a></div><div class="ttdeci">static int hwloc_get_type_or_above_depth(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Returns the depth of objects of type type or above.</div></div>
688 <div class="ttc" id="aa00193_html_ga8bec782e21be313750da70cf7428b374"><div class="ttname"><a href="a00193.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a></div><div class="ttdeci">int hwloc_get_type_depth(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Returns the depth of objects of type type.</div></div>
689 <div class="ttc" id="aa00193_html_gac140a9b939d9fa0b30c4a910efcb0656"><div class="ttname"><a href="a00193.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_obj_by_depth(hwloc_topology_t topology, int depth, hwloc_obj_t prev)</div><div class="ttdoc">Returns the next object at depth depth.</div></div>
690 <div class="ttc" id="aa00193_html_gae54d1782ca9b54bea915f5c18a9158fa"><div class="ttname"><a href="a00193.html#gae54d1782ca9b54bea915f5c18a9158fa">hwloc_topology_get_depth</a></div><div class="ttdeci">int hwloc_topology_get_depth(hwloc_topology_t restrict topology)</div><div class="ttdoc">Get the depth of the hierarchical tree of objects.</div></div>
691 <div class="ttc" id="aa00193_html_gae85786340b88e24835f8c403a1e2e54b"><div class="ttname"><a href="a00193.html#gae85786340b88e24835f8c403a1e2e54b">hwloc_get_memory_parents_depth</a></div><div class="ttdeci">int hwloc_get_memory_parents_depth(hwloc_topology_t topology)</div><div class="ttdoc">Return the depth of parents where memory objects are attached.</div></div>
692 <div class="ttc" id="aa00193_html_gaf4e663cf42bbe20756b849c6293ef575"><div class="ttname"><a href="a00193.html#gaf4e663cf42bbe20756b849c6293ef575">hwloc_get_type_depth_e</a></div><div class="ttdeci">hwloc_get_type_depth_e</div><div class="ttdef"><b>Definition:</b> hwloc.h:820</div></div>
693 <div class="ttc" id="aa00193_html_ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad"><div class="ttname"><a href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_UNKNOWN</div><div class="ttdoc">No object of given type exists in the topology.</div><div class="ttdef"><b>Definition:</b> hwloc.h:821</div></div>
694 <div class="ttc" id="aa00193_html_ggaf4e663cf42bbe20756b849c6293ef575a245c34ec9884c2cf5de5049b2153ed9c"><div class="ttname"><a href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a245c34ec9884c2cf5de5049b2153ed9c">HWLOC_TYPE_DEPTH_NUMANODE</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_NUMANODE</div><div class="ttdoc">Virtual depth for NUMA nodes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:823</div></div>
695 <div class="ttc" id="aa00193_html_ggaf4e663cf42bbe20756b849c6293ef575a8b8d7d300c018c0eb65e6c9a9f162101"><div class="ttname"><a href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a8b8d7d300c018c0eb65e6c9a9f162101">HWLOC_TYPE_DEPTH_MEMCACHE</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_MEMCACHE</div><div class="ttdoc">Virtual depth for MemCache object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:828</div></div>
696 <div class="ttc" id="aa00193_html_ggaf4e663cf42bbe20756b849c6293ef575a96436a392b4cdcaa1a29bc65351b373f"><div class="ttname"><a href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a96436a392b4cdcaa1a29bc65351b373f">HWLOC_TYPE_DEPTH_MISC</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_MISC</div><div class="ttdoc">Virtual depth for Misc object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:827</div></div>
697 <div class="ttc" id="aa00193_html_ggaf4e663cf42bbe20756b849c6293ef575ad8b1516e699b57ce1c8d107fbd2f674c"><div class="ttname"><a href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575ad8b1516e699b57ce1c8d107fbd2f674c">HWLOC_TYPE_DEPTH_PCI_DEVICE</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_PCI_DEVICE</div><div class="ttdoc">Virtual depth for PCI device object level.</div><div class="ttdef"><b>Definition:</b> hwloc.h:825</div></div>
698 <div class="ttc" id="aa00193_html_ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c"><div class="ttname"><a href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c">HWLOC_TYPE_DEPTH_MULTIPLE</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_MULTIPLE</div><div class="ttdoc">Objects of given type exist at different depth in the topology (only for Groups).</div><div class="ttdef"><b>Definition:</b> hwloc.h:822</div></div>
699 <div class="ttc" id="aa00193_html_ggaf4e663cf42bbe20756b849c6293ef575af93b50182973e4a718d9d4db9e253a90"><div class="ttname"><a href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575af93b50182973e4a718d9d4db9e253a90">HWLOC_TYPE_DEPTH_BRIDGE</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_BRIDGE</div><div class="ttdoc">Virtual depth for bridge object level.</div><div class="ttdef"><b>Definition:</b> hwloc.h:824</div></div>
700 <div class="ttc" id="aa00193_html_ggaf4e663cf42bbe20756b849c6293ef575afe9a2131073eebbe129d4aa2928d3f46"><div class="ttname"><a href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575afe9a2131073eebbe129d4aa2928d3f46">HWLOC_TYPE_DEPTH_OS_DEVICE</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_OS_DEVICE</div><div class="ttdoc">Virtual depth for software device object level.</div><div class="ttdef"><b>Definition:</b> hwloc.h:826</div></div>
701 <div class="ttc" id="aa00194_html_ga510f21b066fba2dab12b8c9b173b1dfd"><div class="ttname"><a href="a00194.html#ga510f21b066fba2dab12b8c9b173b1dfd">hwloc_type_sscanf</a></div><div class="ttdeci">int hwloc_type_sscanf(const char *string, hwloc_obj_type_t *typep, union hwloc_obj_attr_u *attrp, size_t attrsize)</div><div class="ttdoc">Return an object type and attributes from a type string.</div></div>
702 <div class="ttc" id="aa00194_html_ga52c63cd7203e55b804c1314affc9bd12"><div class="ttname"><a href="a00194.html#ga52c63cd7203e55b804c1314affc9bd12">hwloc_type_sscanf_as_depth</a></div><div class="ttdeci">int hwloc_type_sscanf_as_depth(const char *string, hwloc_obj_type_t *typep, hwloc_topology_t topology, int *depthp)</div><div class="ttdoc">Return an object type and its level depth from a type string.</div></div>
703 <div class="ttc" id="aa00194_html_ga5ca0bf94bbbb080d0eff17a57bd90422"><div class="ttname"><a href="a00194.html#ga5ca0bf94bbbb080d0eff17a57bd90422">hwloc_obj_type_string</a></div><div class="ttdeci">const char * hwloc_obj_type_string(hwloc_obj_type_t type)</div><div class="ttdoc">Return a constant stringified object type.</div></div>
704 <div class="ttc" id="aa00194_html_ga870e876931c282a1c7aee2f031912ce3"><div class="ttname"><a href="a00194.html#ga870e876931c282a1c7aee2f031912ce3">hwloc_obj_attr_snprintf</a></div><div class="ttdeci">int hwloc_obj_attr_snprintf(char *restrict string, size_t size, hwloc_obj_t obj, const char *restrict separator, int verbose)</div><div class="ttdoc">Stringify the attributes of a given topology object into a human-readable form.</div></div>
705 <div class="ttc" id="aa00194_html_gadb8765c260edea80c52cd06a76639ba4"><div class="ttname"><a href="a00194.html#gadb8765c260edea80c52cd06a76639ba4">hwloc_obj_type_snprintf</a></div><div class="ttdeci">int hwloc_obj_type_snprintf(char *restrict string, size_t size, hwloc_obj_t obj, int verbose)</div><div class="ttdoc">Stringify the type of a given topology object into a human-readable form.</div></div>
706 <div class="ttc" id="aa00195_html_gab358661a92bb27d8542b255cc9f6f25e"><div class="ttname"><a href="a00195.html#gab358661a92bb27d8542b255cc9f6f25e">hwloc_obj_get_info_by_name</a></div><div class="ttdeci">static const char * hwloc_obj_get_info_by_name(hwloc_obj_t obj, const char *name)</div><div class="ttdoc">Search the given key name in object infos and return the corresponding value.</div></div>
707 <div class="ttc" id="aa00195_html_gace7654bb8a9002caae1a4b8a59e7452e"><div class="ttname"><a href="a00195.html#gace7654bb8a9002caae1a4b8a59e7452e">hwloc_obj_add_info</a></div><div class="ttdeci">int hwloc_obj_add_info(hwloc_obj_t obj, const char *name, const char *value)</div><div class="ttdoc">Add the given info name and value pair to the given object.</div></div>
708 <div class="ttc" id="aa00196_html_ga217dc8d373f8958cc93c154ebce1c71c"><div class="ttname"><a href="a00196.html#ga217dc8d373f8958cc93c154ebce1c71c">hwloc_cpubind_flags_t</a></div><div class="ttdeci">hwloc_cpubind_flags_t</div><div class="ttdoc">Process/Thread binding flags.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1154</div></div>
709 <div class="ttc" id="aa00196_html_ga296db8a3c6d49b51fb83d6f3e45c02a6"><div class="ttname"><a href="a00196.html#ga296db8a3c6d49b51fb83d6f3e45c02a6">hwloc_set_proc_cpubind</a></div><div class="ttdeci">int hwloc_set_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_cpuset_t set, int flags)</div><div class="ttdoc">Bind a process pid on cpus given in physical bitmap set.</div></div>
710 <div class="ttc" id="aa00196_html_ga80bc07473a8edf840cae17bd7ec21d48"><div class="ttname"><a href="a00196.html#ga80bc07473a8edf840cae17bd7ec21d48">hwloc_set_cpubind</a></div><div class="ttdeci">int hwloc_set_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t set, int flags)</div><div class="ttdoc">Bind current process or thread on cpus given in physical bitmap set.</div></div>
711 <div class="ttc" id="aa00196_html_ga910a05c2d47f68a3155bf176b50fa555"><div class="ttname"><a href="a00196.html#ga910a05c2d47f68a3155bf176b50fa555">hwloc_get_proc_last_cpu_location</a></div><div class="ttdeci">int hwloc_get_proc_last_cpu_location(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int flags)</div><div class="ttdoc">Get the last physical CPU where a process ran.</div></div>
712 <div class="ttc" id="aa00196_html_gac82de91f788fa82dacf99c6e0d4b7158"><div class="ttname"><a href="a00196.html#gac82de91f788fa82dacf99c6e0d4b7158">hwloc_get_proc_cpubind</a></div><div class="ttdeci">int hwloc_get_proc_cpubind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int flags)</div><div class="ttdoc">Get the current physical binding of process pid.</div></div>
713 <div class="ttc" id="aa00196_html_gacba7ecb979baf824d5240fa2cb2a8be6"><div class="ttname"><a href="a00196.html#gacba7ecb979baf824d5240fa2cb2a8be6">hwloc_get_cpubind</a></div><div class="ttdeci">int hwloc_get_cpubind(hwloc_topology_t topology, hwloc_cpuset_t set, int flags)</div><div class="ttdoc">Get current process or thread binding.</div></div>
714 <div class="ttc" id="aa00196_html_gae42c01b2addcfbf6048b9a516dd7a906"><div class="ttname"><a href="a00196.html#gae42c01b2addcfbf6048b9a516dd7a906">hwloc_set_thread_cpubind</a></div><div class="ttdeci">int hwloc_set_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t thread, hwloc_const_cpuset_t set, int flags)</div><div class="ttdoc">Bind a thread thread on cpus given in physical bitmap set.</div></div>
715 <div class="ttc" id="aa00196_html_gaf13f765642b5d0d9a9813e6bb043671b"><div class="ttname"><a href="a00196.html#gaf13f765642b5d0d9a9813e6bb043671b">hwloc_get_thread_cpubind</a></div><div class="ttdeci">int hwloc_get_thread_cpubind(hwloc_topology_t topology, hwloc_thread_t thread, hwloc_cpuset_t set, int flags)</div><div class="ttdoc">Get the current physical binding of thread tid.</div></div>
716 <div class="ttc" id="aa00196_html_gafdb374627358bf09203b5a4215b13032"><div class="ttname"><a href="a00196.html#gafdb374627358bf09203b5a4215b13032">hwloc_get_last_cpu_location</a></div><div class="ttdeci">int hwloc_get_last_cpu_location(hwloc_topology_t topology, hwloc_cpuset_t set, int flags)</div><div class="ttdoc">Get the last physical CPU where the current process or thread ran.</div></div>
717 <div class="ttc" id="aa00196_html_gga217dc8d373f8958cc93c154ebce1c71ca2e0dd0128dac6b03408c7dd170477fdc"><div class="ttname"><a href="a00196.html#gga217dc8d373f8958cc93c154ebce1c71ca2e0dd0128dac6b03408c7dd170477fdc">HWLOC_CPUBIND_PROCESS</a></div><div class="ttdeci">@ HWLOC_CPUBIND_PROCESS</div><div class="ttdoc">Bind all threads of the current (possibly) multithreaded process.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1157</div></div>
718 <div class="ttc" id="aa00196_html_gga217dc8d373f8958cc93c154ebce1c71ca41ce440443cc3087caed95ab60edcad6"><div class="ttname"><a href="a00196.html#gga217dc8d373f8958cc93c154ebce1c71ca41ce440443cc3087caed95ab60edcad6">HWLOC_CPUBIND_NOMEMBIND</a></div><div class="ttdeci">@ HWLOC_CPUBIND_NOMEMBIND</div><div class="ttdoc">Avoid any effect on memory binding.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1203</div></div>
719 <div class="ttc" id="aa00196_html_gga217dc8d373f8958cc93c154ebce1c71ca679a7e0f0c7ee06b123565f90d98e7fa"><div class="ttname"><a href="a00196.html#gga217dc8d373f8958cc93c154ebce1c71ca679a7e0f0c7ee06b123565f90d98e7fa">HWLOC_CPUBIND_STRICT</a></div><div class="ttdeci">@ HWLOC_CPUBIND_STRICT</div><div class="ttdoc">Request for strict binding from the OS.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1186</div></div>
720 <div class="ttc" id="aa00196_html_gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421"><div class="ttname"><a href="a00196.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421">HWLOC_CPUBIND_THREAD</a></div><div class="ttdeci">@ HWLOC_CPUBIND_THREAD</div><div class="ttdoc">Bind current thread of current process.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1161</div></div>
721 <div class="ttc" id="aa00197_html_ga020951efa0ce3862bd4faec295501a7f"><div class="ttname"><a href="a00197.html#ga020951efa0ce3862bd4faec295501a7f">hwloc_set_membind</a></div><div class="ttdeci">int hwloc_set_membind(hwloc_topology_t topology, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)</div><div class="ttdoc">Set the default memory binding policy of the current process or thread to prefer the NUMA node(s) spe...</div></div>
722 <div class="ttc" id="aa00197_html_ga04736461780fadcf193af218c0122273"><div class="ttname"><a href="a00197.html#ga04736461780fadcf193af218c0122273">hwloc_alloc_membind</a></div><div class="ttdeci">void * hwloc_alloc_membind(hwloc_topology_t topology, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)</div><div class="ttdoc">Allocate some memory on NUMA memory nodes specified by set.</div></div>
723 <div class="ttc" id="aa00197_html_ga1730ceb18ec6ee3b7bd3d0db81f07dc8"><div class="ttname"><a href="a00197.html#ga1730ceb18ec6ee3b7bd3d0db81f07dc8">hwloc_get_proc_membind</a></div><div class="ttdeci">int hwloc_get_proc_membind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_bitmap_t set, hwloc_membind_policy_t *policy, int flags)</div><div class="ttdoc">Query the default memory binding policy and physical locality of the specified process.</div></div>
724 <div class="ttc" id="aa00197_html_ga32dbd4f54e9e4a7179f2dde37ffe6ad7"><div class="ttname"><a href="a00197.html#ga32dbd4f54e9e4a7179f2dde37ffe6ad7">hwloc_free</a></div><div class="ttdeci">int hwloc_free(hwloc_topology_t topology, void *addr, size_t len)</div><div class="ttdoc">Free memory that was previously allocated by hwloc_alloc() or hwloc_alloc_membind().</div></div>
725 <div class="ttc" id="aa00197_html_ga537c7508a4e2d1db05673ec5be6e805c"><div class="ttname"><a href="a00197.html#ga537c7508a4e2d1db05673ec5be6e805c">hwloc_get_area_memlocation</a></div><div class="ttdeci">int hwloc_get_area_memlocation(hwloc_topology_t topology, const void *addr, size_t len, hwloc_bitmap_t set, int flags)</div><div class="ttdoc">Get the NUMA nodes where memory identified by (addr, len ) is physically allocated.</div></div>
726 <div class="ttc" id="aa00197_html_ga972b335a86a7d5e7b34bce2b243c41bc"><div class="ttname"><a href="a00197.html#ga972b335a86a7d5e7b34bce2b243c41bc">hwloc_alloc</a></div><div class="ttdeci">void * hwloc_alloc(hwloc_topology_t topology, size_t len)</div><div class="ttdoc">Allocate some memory.</div></div>
727 <div class="ttc" id="aa00197_html_gaa87e0a6946ff145914fdf0b1c60567f8"><div class="ttname"><a href="a00197.html#gaa87e0a6946ff145914fdf0b1c60567f8">hwloc_get_area_membind</a></div><div class="ttdeci">int hwloc_get_area_membind(hwloc_topology_t topology, const void *addr, size_t len, hwloc_bitmap_t set, hwloc_membind_policy_t *policy, int flags)</div><div class="ttdoc">Query the CPUs near the physical NUMA node(s) and binding policy of the memory identified by (addr,...</div></div>
728 <div class="ttc" id="aa00197_html_gab00475fd98815bf4fb9aaf752030e7d2"><div class="ttname"><a href="a00197.html#gab00475fd98815bf4fb9aaf752030e7d2">hwloc_membind_flags_t</a></div><div class="ttdeci">hwloc_membind_flags_t</div><div class="ttdoc">Memory binding flags.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1443</div></div>
729 <div class="ttc" id="aa00197_html_gab1b77b8408bacaf03c7e8878f7577922"><div class="ttname"><a href="a00197.html#gab1b77b8408bacaf03c7e8878f7577922">hwloc_alloc_membind_policy</a></div><div class="ttdeci">static void * hwloc_alloc_membind_policy(hwloc_topology_t topology, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)</div><div class="ttdoc">Allocate some memory on NUMA memory nodes specified by set.</div></div>
730 <div class="ttc" id="aa00197_html_gabc91ff16f7e41047924e3a4ae6d9da7e"><div class="ttname"><a href="a00197.html#gabc91ff16f7e41047924e3a4ae6d9da7e">hwloc_set_proc_membind</a></div><div class="ttdeci">int hwloc_set_proc_membind(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)</div><div class="ttdoc">Set the default memory binding policy of the specified process to prefer the NUMA node(s) specified b...</div></div>
731 <div class="ttc" id="aa00197_html_gac9764f79505775d06407b40f5e4661e8"><div class="ttname"><a href="a00197.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a></div><div class="ttdeci">hwloc_membind_policy_t</div><div class="ttdoc">Memory binding policy.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1380</div></div>
732 <div class="ttc" id="aa00197_html_gae21f0a1a884929c784bebf070252aa56"><div class="ttname"><a href="a00197.html#gae21f0a1a884929c784bebf070252aa56">hwloc_get_membind</a></div><div class="ttdeci">int hwloc_get_membind(hwloc_topology_t topology, hwloc_bitmap_t set, hwloc_membind_policy_t *policy, int flags)</div><div class="ttdoc">Query the default memory binding policy and physical locality of the current process or thread.</div></div>
733 <div class="ttc" id="aa00197_html_gaf881faefe20701229f07dd7dbd0125ed"><div class="ttname"><a href="a00197.html#gaf881faefe20701229f07dd7dbd0125ed">hwloc_set_area_membind</a></div><div class="ttdeci">int hwloc_set_area_membind(hwloc_topology_t topology, const void *addr, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)</div><div class="ttdoc">Bind the already-allocated memory identified by (addr, len) to the NUMA node(s) specified by set.</div></div>
734 <div class="ttc" id="aa00197_html_ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6"><div class="ttname"><a href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a></div><div class="ttdeci">@ HWLOC_MEMBIND_STRICT</div><div class="ttdef"><b>Definition:</b> hwloc.h:1461</div></div>
735 <div class="ttc" id="aa00197_html_ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4"><div class="ttname"><a href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4">HWLOC_MEMBIND_PROCESS</a></div><div class="ttdeci">@ HWLOC_MEMBIND_PROCESS</div><div class="ttdoc">Set policy for all threads of the specified (possibly multithreaded) process. This flag is mutually e...</div><div class="ttdef"><b>Definition:</b> hwloc.h:1448</div></div>
736 <div class="ttc" id="aa00197_html_ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298"><div class="ttname"><a href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298">HWLOC_MEMBIND_THREAD</a></div><div class="ttdeci">@ HWLOC_MEMBIND_THREAD</div><div class="ttdoc">Set policy for a specific thread of the current process. This flag is mutually exclusive with HWLOC_M...</div><div class="ttdef"><b>Definition:</b> hwloc.h:1453</div></div>
737 <div class="ttc" id="aa00197_html_ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256"><div class="ttname"><a href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256">HWLOC_MEMBIND_BYNODESET</a></div><div class="ttdeci">@ HWLOC_MEMBIND_BYNODESET</div><div class="ttdoc">Consider the bitmap argument as a nodeset.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1491</div></div>
738 <div class="ttc" id="aa00197_html_ggab00475fd98815bf4fb9aaf752030e7d2aa6e49e54f52827cb143cc869cfd748af"><div class="ttname"><a href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2aa6e49e54f52827cb143cc869cfd748af">HWLOC_MEMBIND_MIGRATE</a></div><div class="ttdeci">@ HWLOC_MEMBIND_MIGRATE</div><div class="ttdoc">Migrate existing allocated memory. If the memory cannot be migrated and the HWLOC_MEMBIND_STRICT flag...</div><div class="ttdef"><b>Definition:</b> hwloc.h:1467</div></div>
739 <div class="ttc" id="aa00197_html_ggab00475fd98815bf4fb9aaf752030e7d2aad6b9eaf2ee324ca58dc8f58094b9997"><div class="ttname"><a href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2aad6b9eaf2ee324ca58dc8f58094b9997">HWLOC_MEMBIND_NOCPUBIND</a></div><div class="ttdeci">@ HWLOC_MEMBIND_NOCPUBIND</div><div class="ttdoc">Avoid any effect on CPU binding.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1480</div></div>
740 <div class="ttc" id="aa00197_html_ggac9764f79505775d06407b40f5e4661e8a18675bb80ebc1bce5b652e9de8f3998c"><div class="ttname"><a href="a00197.html#ggac9764f79505775d06407b40f5e4661e8a18675bb80ebc1bce5b652e9de8f3998c">HWLOC_MEMBIND_DEFAULT</a></div><div class="ttdeci">@ HWLOC_MEMBIND_DEFAULT</div><div class="ttdoc">Reset the memory allocation policy to the system default. Depending on the operating system,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:1388</div></div>
741 <div class="ttc" id="aa00197_html_ggac9764f79505775d06407b40f5e4661e8a3185bd869b67817fb2bd5164bf360402"><div class="ttname"><a href="a00197.html#ggac9764f79505775d06407b40f5e4661e8a3185bd869b67817fb2bd5164bf360402">HWLOC_MEMBIND_MIXED</a></div><div class="ttdeci">@ HWLOC_MEMBIND_MIXED</div><div class="ttdoc">Returned by get_membind() functions when multiple threads or parts of a memory area have differing me...</div><div class="ttdef"><b>Definition:</b> hwloc.h:1427</div></div>
742 <div class="ttc" id="aa00197_html_ggac9764f79505775d06407b40f5e4661e8a979c7aa78dd32780858f30f47a72cca0"><div class="ttname"><a href="a00197.html#ggac9764f79505775d06407b40f5e4661e8a979c7aa78dd32780858f30f47a72cca0">HWLOC_MEMBIND_FIRSTTOUCH</a></div><div class="ttdeci">@ HWLOC_MEMBIND_FIRSTTOUCH</div><div class="ttdoc">Allocate each memory page individually on the local NUMA node of the thread that touches it.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1399</div></div>
743 <div class="ttc" id="aa00197_html_ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c"><div class="ttname"><a href="a00197.html#ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c">HWLOC_MEMBIND_BIND</a></div><div class="ttdeci">@ HWLOC_MEMBIND_BIND</div><div class="ttdoc">Allocate memory on the specified nodes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1403</div></div>
744 <div class="ttc" id="aa00197_html_ggac9764f79505775d06407b40f5e4661e8ae370075e5af016d42310f87ea5af236b"><div class="ttname"><a href="a00197.html#ggac9764f79505775d06407b40f5e4661e8ae370075e5af016d42310f87ea5af236b">HWLOC_MEMBIND_INTERLEAVE</a></div><div class="ttdeci">@ HWLOC_MEMBIND_INTERLEAVE</div><div class="ttdoc">Allocate memory on the given nodes in an interleaved / round-robin manner. The precise layout of the ...</div><div class="ttdef"><b>Definition:</b> hwloc.h:1412</div></div>
745 <div class="ttc" id="aa00197_html_ggac9764f79505775d06407b40f5e4661e8aecdd4164d647708fbb51a00d98dbb138"><div class="ttname"><a href="a00197.html#ggac9764f79505775d06407b40f5e4661e8aecdd4164d647708fbb51a00d98dbb138">HWLOC_MEMBIND_NEXTTOUCH</a></div><div class="ttdeci">@ HWLOC_MEMBIND_NEXTTOUCH</div><div class="ttdoc">For each page bound with this policy, by next time it is touched (and next time only),...</div><div class="ttdef"><b>Definition:</b> hwloc.h:1419</div></div>
746 <div class="ttc" id="aa00198_html_ga2745616b65595e1c1e579ecc7e461fa8"><div class="ttname"><a href="a00198.html#ga2745616b65595e1c1e579ecc7e461fa8">hwloc_topology_set_xmlbuffer</a></div><div class="ttdeci">int hwloc_topology_set_xmlbuffer(hwloc_topology_t restrict topology, const char *restrict buffer, int size)</div><div class="ttdoc">Enable XML based topology using a memory buffer (instead of a file, as with hwloc_topology_set_xml())...</div></div>
747 <div class="ttc" id="aa00198_html_ga341fc17b5867a4715570baab131f68cd"><div class="ttname"><a href="a00198.html#ga341fc17b5867a4715570baab131f68cd">hwloc_topology_set_pid</a></div><div class="ttdeci">int hwloc_topology_set_pid(hwloc_topology_t restrict topology, hwloc_pid_t pid)</div><div class="ttdoc">Change which process the topology is viewed from.</div></div>
748 <div class="ttc" id="aa00198_html_ga4fab186bb6181a00bcf585825fddd38d"><div class="ttname"><a href="a00198.html#ga4fab186bb6181a00bcf585825fddd38d">hwloc_topology_set_synthetic</a></div><div class="ttdeci">int hwloc_topology_set_synthetic(hwloc_topology_t restrict topology, const char *restrict description)</div><div class="ttdoc">Enable synthetic topology.</div></div>
749 <div class="ttc" id="aa00198_html_ga879439b7ee99407ee911b3ac64e9a25e"><div class="ttname"><a href="a00198.html#ga879439b7ee99407ee911b3ac64e9a25e">hwloc_topology_set_xml</a></div><div class="ttdeci">int hwloc_topology_set_xml(hwloc_topology_t restrict topology, const char *restrict xmlpath)</div><div class="ttdoc">Enable XML-file based topology.</div></div>
750 <div class="ttc" id="aa00198_html_ga949f656c779208a36790feba24048b7e"><div class="ttname"><a href="a00198.html#ga949f656c779208a36790feba24048b7e">hwloc_topology_components_flag_e</a></div><div class="ttdeci">hwloc_topology_components_flag_e</div><div class="ttdoc">Flags to be passed to hwloc_topology_set_components()</div><div class="ttdef"><b>Definition:</b> hwloc.h:1842</div></div>
751 <div class="ttc" id="aa00198_html_ga9ad41adf418cee1c0ee32ba9bd4a3d36"><div class="ttname"><a href="a00198.html#ga9ad41adf418cee1c0ee32ba9bd4a3d36">hwloc_topology_set_components</a></div><div class="ttdeci">int hwloc_topology_set_components(hwloc_topology_t restrict topology, unsigned long flags, const char *restrict name)</div><div class="ttdoc">Prevent a discovery component from being used for a topology.</div></div>
752 <div class="ttc" id="aa00198_html_gga949f656c779208a36790feba24048b7ea33eec25d29253a2aba21dd3c731b416e"><div class="ttname"><a href="a00198.html#gga949f656c779208a36790feba24048b7ea33eec25d29253a2aba21dd3c731b416e">HWLOC_TOPOLOGY_COMPONENTS_FLAG_BLACKLIST</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_COMPONENTS_FLAG_BLACKLIST</div><div class="ttdoc">Blacklist the target component from being used.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1846</div></div>
753 <div class="ttc" id="aa00199_html_ga09318f81c1d4713be907d64748a6f93c"><div class="ttname"><a href="a00199.html#ga09318f81c1d4713be907d64748a6f93c">hwloc_topology_get_flags</a></div><div class="ttdeci">unsigned long hwloc_topology_get_flags(hwloc_topology_t topology)</div><div class="ttdoc">Get OR'ed flags of a topology.</div></div>
754 <div class="ttc" id="aa00199_html_ga0ab38705357bc1203abe829da8a12ad3"><div class="ttname"><a href="a00199.html#ga0ab38705357bc1203abe829da8a12ad3">hwloc_topology_set_io_types_filter</a></div><div class="ttdeci">int hwloc_topology_set_io_types_filter(hwloc_topology_t topology, enum hwloc_type_filter_e filter)</div><div class="ttdoc">Set the filtering for all I/O object types.</div></div>
755 <div class="ttc" id="aa00199_html_ga137ad1178f7a79f2383974d983083401"><div class="ttname"><a href="a00199.html#ga137ad1178f7a79f2383974d983083401">hwloc_topology_get_type_filter</a></div><div class="ttdeci">int hwloc_topology_get_type_filter(hwloc_topology_t topology, hwloc_obj_type_t type, enum hwloc_type_filter_e *filter)</div><div class="ttdoc">Get the current filtering for the given object type.</div></div>
756 <div class="ttc" id="aa00199_html_ga2cc7b7b155cba58dda203e54f1637b9c"><div class="ttname"><a href="a00199.html#ga2cc7b7b155cba58dda203e54f1637b9c">hwloc_topology_set_userdata</a></div><div class="ttdeci">void hwloc_topology_set_userdata(hwloc_topology_t topology, const void *userdata)</div><div class="ttdoc">Set the topology-specific userdata pointer.</div></div>
757 <div class="ttc" id="aa00199_html_ga30bd6d330fe3c8f0cbaad724d114ee20"><div class="ttname"><a href="a00199.html#ga30bd6d330fe3c8f0cbaad724d114ee20">hwloc_topology_set_cache_types_filter</a></div><div class="ttdeci">int hwloc_topology_set_cache_types_filter(hwloc_topology_t topology, enum hwloc_type_filter_e filter)</div><div class="ttdoc">Set the filtering for all CPU cache object types.</div></div>
758 <div class="ttc" id="aa00199_html_ga37c7b2e599ed3cd76ad9164630024f30"><div class="ttname"><a href="a00199.html#ga37c7b2e599ed3cd76ad9164630024f30">hwloc_topology_set_icache_types_filter</a></div><div class="ttdeci">int hwloc_topology_set_icache_types_filter(hwloc_topology_t topology, enum hwloc_type_filter_e filter)</div><div class="ttdoc">Set the filtering for all CPU instruction cache object types.</div></div>
759 <div class="ttc" id="aa00199_html_ga68ffdcfd9175cdf40709801092f18017"><div class="ttname"><a href="a00199.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a></div><div class="ttdeci">int hwloc_topology_is_thissystem(hwloc_topology_t restrict topology)</div><div class="ttdoc">Does the topology context come from this system?</div></div>
760 <div class="ttc" id="aa00199_html_ga91f992f8d6c4905b2d3c4f43e509c2a3"><div class="ttname"><a href="a00199.html#ga91f992f8d6c4905b2d3c4f43e509c2a3">hwloc_topology_get_userdata</a></div><div class="ttdeci">void * hwloc_topology_get_userdata(hwloc_topology_t topology)</div><div class="ttdoc">Retrieve the topology-specific userdata pointer.</div></div>
761 <div class="ttc" id="aa00199_html_ga9a5a1f0140cd1952544477833733195b"><div class="ttname"><a href="a00199.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a></div><div class="ttdeci">hwloc_type_filter_e</div><div class="ttdoc">Type filtering flags.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2136</div></div>
762 <div class="ttc" id="aa00199_html_ga9eb8dc3b106f84921bf5789101e97e24"><div class="ttname"><a href="a00199.html#ga9eb8dc3b106f84921bf5789101e97e24">hwloc_topology_set_all_types_filter</a></div><div class="ttdeci">int hwloc_topology_set_all_types_filter(hwloc_topology_t topology, enum hwloc_type_filter_e filter)</div><div class="ttdoc">Set the filtering for all object types.</div></div>
763 <div class="ttc" id="aa00199_html_gaaeed4df656979e5f16befea9d29b814b"><div class="ttname"><a href="a00199.html#gaaeed4df656979e5f16befea9d29b814b">hwloc_topology_set_flags</a></div><div class="ttdeci">int hwloc_topology_set_flags(hwloc_topology_t topology, unsigned long flags)</div><div class="ttdoc">Set OR'ed flags to non-yet-loaded topology.</div></div>
764 <div class="ttc" id="aa00199_html_gab8c76173c4a8ce1a9a9366012b1388e6"><div class="ttname"><a href="a00199.html#gab8c76173c4a8ce1a9a9366012b1388e6">hwloc_topology_get_support</a></div><div class="ttdeci">const struct hwloc_topology_support * hwloc_topology_get_support(hwloc_topology_t restrict topology)</div><div class="ttdoc">Retrieve the topology support.</div></div>
765 <div class="ttc" id="aa00199_html_gad894e70f15f8d4aada7be8d1aba38b7e"><div class="ttname"><a href="a00199.html#gad894e70f15f8d4aada7be8d1aba38b7e">hwloc_topology_set_type_filter</a></div><div class="ttdeci">int hwloc_topology_set_type_filter(hwloc_topology_t topology, hwloc_obj_type_t type, enum hwloc_type_filter_e filter)</div><div class="ttdoc">Set the filtering for the given object type.</div></div>
766 <div class="ttc" id="aa00199_html_gada025d3ec20b4b420f8038d23d6e7bde"><div class="ttname"><a href="a00199.html#gada025d3ec20b4b420f8038d23d6e7bde">hwloc_topology_flags_e</a></div><div class="ttdeci">hwloc_topology_flags_e</div><div class="ttdoc">Flags to be set onto a topology context before load.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1883</div></div>
767 <div class="ttc" id="aa00199_html_gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a"><div class="ttname"><a href="a00199.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a">HWLOC_TYPE_FILTER_KEEP_NONE</a></div><div class="ttdeci">@ HWLOC_TYPE_FILTER_KEEP_NONE</div><div class="ttdoc">Ignore all objects of this type.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2150</div></div>
768 <div class="ttc" id="aa00199_html_gga9a5a1f0140cd1952544477833733195ba63fd24954e18c83ff7eae9588759adb5"><div class="ttname"><a href="a00199.html#gga9a5a1f0140cd1952544477833733195ba63fd24954e18c83ff7eae9588759adb5">HWLOC_TYPE_FILTER_KEEP_IMPORTANT</a></div><div class="ttdeci">@ HWLOC_TYPE_FILTER_KEEP_IMPORTANT</div><div class="ttdoc">Only keep likely-important objects of the given type.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2179</div></div>
769 <div class="ttc" id="aa00199_html_gga9a5a1f0140cd1952544477833733195ba7664716643bf1db83e631eed34f659e4"><div class="ttname"><a href="a00199.html#gga9a5a1f0140cd1952544477833733195ba7664716643bf1db83e631eed34f659e4">HWLOC_TYPE_FILTER_KEEP_STRUCTURE</a></div><div class="ttdeci">@ HWLOC_TYPE_FILTER_KEEP_STRUCTURE</div><div class="ttdoc">Only ignore objects if their entire level does not bring any structure.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2164</div></div>
770 <div class="ttc" id="aa00199_html_gga9a5a1f0140cd1952544477833733195bafda7b59e6810dfe778d8f9a4cc1e350e"><div class="ttname"><a href="a00199.html#gga9a5a1f0140cd1952544477833733195bafda7b59e6810dfe778d8f9a4cc1e350e">HWLOC_TYPE_FILTER_KEEP_ALL</a></div><div class="ttdeci">@ HWLOC_TYPE_FILTER_KEEP_ALL</div><div class="ttdoc">Keep all objects of this type.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2142</div></div>
771 <div class="ttc" id="aa00199_html_ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258"><div class="ttname"><a href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</div><div class="ttdoc">Detect the whole system, ignore reservations, include disallowed objects.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1904</div></div>
772 <div class="ttc" id="aa00199_html_ggada025d3ec20b4b420f8038d23d6e7bdea1b66bbd66e900e5c837f71defb32ad89"><div class="ttname"><a href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdea1b66bbd66e900e5c837f71defb32ad89">HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES</div><div class="ttdoc">Get the set of allowed resources from the local operating system even if the topology was loaded from...</div><div class="ttdef"><b>Definition:</b> hwloc.h:1945</div></div>
773 <div class="ttc" id="aa00199_html_ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b"><div class="ttname"><a href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</div><div class="ttdoc">Assume that the selected backend provides the topology for the system on which we are running.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1924</div></div>
774 <div class="ttc" id="aa00199_html_ggada025d3ec20b4b420f8038d23d6e7bdead93e82b8668ee90e4f9354e201a2ed9c"><div class="ttname"><a href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdead93e82b8668ee90e4f9354e201a2ed9c">HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT</div><div class="ttdoc">Import support from the imported topology.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1969</div></div>
775 <div class="ttc" id="aa00200_html_ga1fc6012b3e1c249b83f48cb7bcacaa5b"><div class="ttname"><a href="a00200.html#ga1fc6012b3e1c249b83f48cb7bcacaa5b">hwloc_topology_insert_group_object</a></div><div class="ttdeci">hwloc_obj_t hwloc_topology_insert_group_object(hwloc_topology_t topology, hwloc_obj_t group)</div><div class="ttdoc">Add more structure to the topology by adding an intermediate Group.</div></div>
776 <div class="ttc" id="aa00200_html_ga38b1be3922094d880f6e76bf56c973d6"><div class="ttname"><a href="a00200.html#ga38b1be3922094d880f6e76bf56c973d6">hwloc_allow_flags_e</a></div><div class="ttdeci">hwloc_allow_flags_e</div><div class="ttdoc">Flags to be given to hwloc_topology_allow().</div><div class="ttdef"><b>Definition:</b> hwloc.h:2301</div></div>
777 <div class="ttc" id="aa00200_html_ga4cea4741165faf5323931a9ed8786ef7"><div class="ttname"><a href="a00200.html#ga4cea4741165faf5323931a9ed8786ef7">hwloc_topology_alloc_group_object</a></div><div class="ttdeci">hwloc_obj_t hwloc_topology_alloc_group_object(hwloc_topology_t topology)</div><div class="ttdoc">Allocate a Group object to insert later with hwloc_topology_insert_group_object().</div></div>
778 <div class="ttc" id="aa00200_html_ga698ecd640d2b76742bba3829a145cd9a"><div class="ttname"><a href="a00200.html#ga698ecd640d2b76742bba3829a145cd9a">hwloc_topology_refresh</a></div><div class="ttdeci">int hwloc_topology_refresh(hwloc_topology_t topology)</div><div class="ttdoc">Refresh internal structures after topology modification.</div></div>
779 <div class="ttc" id="aa00200_html_ga6db81ed13ac0a9d70cc80372ab537815"><div class="ttname"><a href="a00200.html#ga6db81ed13ac0a9d70cc80372ab537815">hwloc_topology_restrict</a></div><div class="ttdeci">int hwloc_topology_restrict(hwloc_topology_t restrict topology, hwloc_const_bitmap_t set, unsigned long flags)</div><div class="ttdoc">Restrict the topology to the given CPU set or nodeset.</div></div>
780 <div class="ttc" id="aa00200_html_ga9d80f08eb25b7ac22f1b998dc8bf521f"><div class="ttname"><a href="a00200.html#ga9d80f08eb25b7ac22f1b998dc8bf521f">hwloc_restrict_flags_e</a></div><div class="ttdeci">hwloc_restrict_flags_e</div><div class="ttdoc">Flags to be given to hwloc_topology_restrict().</div><div class="ttdef"><b>Definition:</b> hwloc.h:2240</div></div>
781 <div class="ttc" id="aa00200_html_gad458715d3335df44849216cc123d1055"><div class="ttname"><a href="a00200.html#gad458715d3335df44849216cc123d1055">hwloc_obj_add_other_obj_sets</a></div><div class="ttdeci">int hwloc_obj_add_other_obj_sets(hwloc_obj_t dst, hwloc_obj_t src)</div><div class="ttdoc">Setup object cpusets/nodesets by OR'ing another object's sets.</div></div>
782 <div class="ttc" id="aa00200_html_gad980782ade737900c5cf208946768c30"><div class="ttname"><a href="a00200.html#gad980782ade737900c5cf208946768c30">hwloc_topology_insert_misc_object</a></div><div class="ttdeci">hwloc_obj_t hwloc_topology_insert_misc_object(hwloc_topology_t topology, hwloc_obj_t parent, const char *name)</div><div class="ttdoc">Add a MISC object as a leaf of the topology.</div></div>
783 <div class="ttc" id="aa00200_html_gaf955b190c0299dcfb5bc985d777f92a1"><div class="ttname"><a href="a00200.html#gaf955b190c0299dcfb5bc985d777f92a1">hwloc_topology_allow</a></div><div class="ttdeci">int hwloc_topology_allow(hwloc_topology_t restrict topology, hwloc_const_cpuset_t cpuset, hwloc_const_nodeset_t nodeset, unsigned long flags)</div><div class="ttdoc">Change the sets of allowed PUs and NUMA nodes in the topology.</div></div>
784 <div class="ttc" id="aa00200_html_gga38b1be3922094d880f6e76bf56c973d6a489c8c1b67ce7e0b8cf7a665852760e1"><div class="ttname"><a href="a00200.html#gga38b1be3922094d880f6e76bf56c973d6a489c8c1b67ce7e0b8cf7a665852760e1">HWLOC_ALLOW_FLAG_CUSTOM</a></div><div class="ttdeci">@ HWLOC_ALLOW_FLAG_CUSTOM</div><div class="ttdoc">Allow a custom set of objects, given to hwloc_topology_allow() as cpuset and/or nodeset parameters.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2319</div></div>
785 <div class="ttc" id="aa00200_html_gga38b1be3922094d880f6e76bf56c973d6a88c50088c09dcf1e1a496c0817556fb9"><div class="ttname"><a href="a00200.html#gga38b1be3922094d880f6e76bf56c973d6a88c50088c09dcf1e1a496c0817556fb9">HWLOC_ALLOW_FLAG_LOCAL_RESTRICTIONS</a></div><div class="ttdeci">@ HWLOC_ALLOW_FLAG_LOCAL_RESTRICTIONS</div><div class="ttdoc">Only allow objects that are available to the current process.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2315</div></div>
786 <div class="ttc" id="aa00200_html_gga38b1be3922094d880f6e76bf56c973d6aca107692455774f9d323d21b8abfce72"><div class="ttname"><a href="a00200.html#gga38b1be3922094d880f6e76bf56c973d6aca107692455774f9d323d21b8abfce72">HWLOC_ALLOW_FLAG_ALL</a></div><div class="ttdeci">@ HWLOC_ALLOW_FLAG_ALL</div><div class="ttdoc">Mark all objects as allowed in the topology.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2306</div></div>
787 <div class="ttc" id="aa00200_html_gga9d80f08eb25b7ac22f1b998dc8bf521fa699969227a09bbc1a7de51dc9fb7be4b"><div class="ttname"><a href="a00200.html#gga9d80f08eb25b7ac22f1b998dc8bf521fa699969227a09bbc1a7de51dc9fb7be4b">HWLOC_RESTRICT_FLAG_ADAPT_MISC</a></div><div class="ttdeci">@ HWLOC_RESTRICT_FLAG_ADAPT_MISC</div><div class="ttdoc">Move Misc objects to ancestors if their parents are removed during restriction. If this flag is not s...</div><div class="ttdef"><b>Definition:</b> hwloc.h:2265</div></div>
788 <div class="ttc" id="aa00200_html_gga9d80f08eb25b7ac22f1b998dc8bf521fa80eeb9cbba401ab050f8fb4573725891"><div class="ttname"><a href="a00200.html#gga9d80f08eb25b7ac22f1b998dc8bf521fa80eeb9cbba401ab050f8fb4573725891">HWLOC_RESTRICT_FLAG_REMOVE_CPULESS</a></div><div class="ttdeci">@ HWLOC_RESTRICT_FLAG_REMOVE_CPULESS</div><div class="ttdoc">Remove all objects that became CPU-less. By default, only objects that contain no PU and no memory ar...</div><div class="ttdef"><b>Definition:</b> hwloc.h:2246</div></div>
789 <div class="ttc" id="aa00200_html_gga9d80f08eb25b7ac22f1b998dc8bf521faa95d6985e36ec1e55f68b210297a85cb"><div class="ttname"><a href="a00200.html#gga9d80f08eb25b7ac22f1b998dc8bf521faa95d6985e36ec1e55f68b210297a85cb">HWLOC_RESTRICT_FLAG_ADAPT_IO</a></div><div class="ttdeci">@ HWLOC_RESTRICT_FLAG_ADAPT_IO</div><div class="ttdoc">Move I/O objects to ancestors if their parents are removed during restriction. If this flag is not se...</div><div class="ttdef"><b>Definition:</b> hwloc.h:2271</div></div>
790 <div class="ttc" id="aa00200_html_gga9d80f08eb25b7ac22f1b998dc8bf521fae4c5b1b87232f2d8a60559e77ac65a68"><div class="ttname"><a href="a00200.html#gga9d80f08eb25b7ac22f1b998dc8bf521fae4c5b1b87232f2d8a60559e77ac65a68">HWLOC_RESTRICT_FLAG_BYNODESET</a></div><div class="ttdeci">@ HWLOC_RESTRICT_FLAG_BYNODESET</div><div class="ttdoc">Restrict by nodeset instead of CPU set. Only keep objects whose nodeset is included or partially incl...</div><div class="ttdef"><b>Definition:</b> hwloc.h:2252</div></div>
791 <div class="ttc" id="aa00200_html_gga9d80f08eb25b7ac22f1b998dc8bf521faf5ba49808855704bfe9cb9fe7347f93b"><div class="ttname"><a href="a00200.html#gga9d80f08eb25b7ac22f1b998dc8bf521faf5ba49808855704bfe9cb9fe7347f93b">HWLOC_RESTRICT_FLAG_REMOVE_MEMLESS</a></div><div class="ttdeci">@ HWLOC_RESTRICT_FLAG_REMOVE_MEMLESS</div><div class="ttdoc">Remove all objects that became Memory-less. By default, only objects that contain no PU and no memory...</div><div class="ttdef"><b>Definition:</b> hwloc.h:2259</div></div>
792 <div class="ttc" id="aa00211_html_gaa3c2bf4c776d603dcebbb61b0c923d84"><div class="ttname"><a href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a></div><div class="ttdeci">struct hwloc_bitmap_s * hwloc_bitmap_t</div><div class="ttdoc">Set of bits represented as an opaque pointer to an internal bitmap.</div><div class="ttdef"><b>Definition:</b> bitmap.h:68</div></div>
793 <div class="ttc" id="aa00211_html_gae991a108af01d408be2776c5b2c467b2"><div class="ttname"><a href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a></div><div class="ttdeci">const struct hwloc_bitmap_s * hwloc_const_bitmap_t</div><div class="ttdoc">a non-modifiable hwloc_bitmap_t</div><div class="ttdef"><b>Definition:</b> bitmap.h:70</div></div>
794 <div class="ttc" id="aa00244_html"><div class="ttname"><a href="a00244.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:395</div></div>
795 <div class="ttc" id="aa00244_html_a04d05403da37bfe17cd63b7c7dd07b1f"><div class="ttname"><a href="a00244.html#a04d05403da37bfe17cd63b7c7dd07b1f">hwloc_obj::children</a></div><div class="ttdeci">struct hwloc_obj ** children</div><div class="ttdoc">Normal children, children[0 .. arity -1].</div><div class="ttdef"><b>Definition:</b> hwloc.h:455</div></div>
796 <div class="ttc" id="aa00244_html_a08f0d0e16c619a6e653526cbee4ffea3"><div class="ttname"><a href="a00244.html#a08f0d0e16c619a6e653526cbee4ffea3">hwloc_obj::nodeset</a></div><div class="ttdeci">hwloc_nodeset_t nodeset</div><div class="ttdoc">NUMA nodes covered by this object or containing this object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:539</div></div>
797 <div class="ttc" id="aa00244_html_a0d07fb7b8935e137c94d75a3eb492ae9"><div class="ttname"><a href="a00244.html#a0d07fb7b8935e137c94d75a3eb492ae9">hwloc_obj::logical_index</a></div><div class="ttdeci">unsigned logical_index</div><div class="ttdoc">Horizontal index in the whole list of similar objects, hence guaranteed unique across the entire mach...</div><div class="ttdef"><b>Definition:</b> hwloc.h:433</div></div>
798 <div class="ttc" id="aa00244_html_a0f41a1d67dc6b661906f2217563637f3"><div class="ttname"><a href="a00244.html#a0f41a1d67dc6b661906f2217563637f3">hwloc_obj::symmetric_subtree</a></div><div class="ttdeci">int symmetric_subtree</div><div class="ttdoc">Set if the subtree of normal objects below this object is symmetric, which means all normal children ...</div><div class="ttdef"><b>Definition:</b> hwloc.h:460</div></div>
799 <div class="ttc" id="aa00244_html_a2bb7862ce722d7ceda23cfa153da165a"><div class="ttname"><a href="a00244.html#a2bb7862ce722d7ceda23cfa153da165a">hwloc_obj::misc_arity</a></div><div class="ttdeci">unsigned misc_arity</div><div class="ttdoc">Number of Misc children. These children are listed in misc_first_child.</div><div class="ttdef"><b>Definition:</b> hwloc.h:501</div></div>
800 <div class="ttc" id="aa00244_html_a4876fd165b4fff35521f07ebd85355ed"><div class="ttname"><a href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">hwloc_obj::depth</a></div><div class="ttdeci">int depth</div><div class="ttdoc">Vertical index in the hierarchy.</div><div class="ttdef"><b>Definition:</b> hwloc.h:418</div></div>
801 <div class="ttc" id="aa00244_html_a57812a313fe9b1a9500489f47c3011cc"><div class="ttname"><a href="a00244.html#a57812a313fe9b1a9500489f47c3011cc">hwloc_obj::misc_first_child</a></div><div class="ttdeci">struct hwloc_obj * misc_first_child</div><div class="ttdoc">First Misc child. Misc objects are listed here (misc_arity and misc_first_child) instead of in the no...</div><div class="ttdef"><b>Definition:</b> hwloc.h:504</div></div>
802 <div class="ttc" id="aa00244_html_a5d4f97e76723a9ec8d38046f19e00d33"><div class="ttname"><a href="a00244.html#a5d4f97e76723a9ec8d38046f19e00d33">hwloc_obj::subtype</a></div><div class="ttdeci">char * subtype</div><div class="ttdoc">Subtype string to better describe the type field.</div><div class="ttdef"><b>Definition:</b> hwloc.h:398</div></div>
803 <div class="ttc" id="aa00244_html_a61a7a80a68eaccbaaa28269e678c81a9"><div class="ttname"><a href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">hwloc_obj::os_index</a></div><div class="ttdeci">unsigned os_index</div><div class="ttdoc">OS-provided physical index number. It is not guaranteed unique across the entire machine,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:400</div></div>
804 <div class="ttc" id="aa00244_html_a67925e0f2c47f50408fbdb9bddd0790f"><div class="ttname"><a href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">hwloc_obj::cpuset</a></div><div class="ttdeci">hwloc_cpuset_t cpuset</div><div class="ttdoc">CPUs covered by this object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:511</div></div>
805 <div class="ttc" id="aa00244_html_a6f834ea4dd26553cdea601d2fae6d3b7"><div class="ttname"><a href="a00244.html#a6f834ea4dd26553cdea601d2fae6d3b7">hwloc_obj::memory_arity</a></div><div class="ttdeci">unsigned memory_arity</div><div class="ttdoc">Number of Memory children. These children are listed in memory_first_child.</div><div class="ttdef"><b>Definition:</b> hwloc.h:471</div></div>
806 <div class="ttc" id="aa00244_html_a75603fc36c9284ba48ce814b772a58b6"><div class="ttname"><a href="a00244.html#a75603fc36c9284ba48ce814b772a58b6">hwloc_obj::total_memory</a></div><div class="ttdeci">hwloc_uint64_t total_memory</div><div class="ttdoc">Total memory (in bytes) in NUMA nodes below this object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:412</div></div>
807 <div class="ttc" id="aa00244_html_a76fd3ac94401cf32dfccc3a3a8de68a5"><div class="ttname"><a href="a00244.html#a76fd3ac94401cf32dfccc3a3a8de68a5">hwloc_obj::userdata</a></div><div class="ttdeci">void * userdata</div><div class="ttdoc">Application-given private data pointer, initialized to NULL, use it as you wish. See hwloc_topology_s...</div><div class="ttdef"><b>Definition:</b> hwloc.h:581</div></div>
808 <div class="ttc" id="aa00244_html_a7b3b29f0be377c7d2d52262019fc7d11"><div class="ttname"><a href="a00244.html#a7b3b29f0be377c7d2d52262019fc7d11">hwloc_obj::io_arity</a></div><div class="ttdeci">unsigned io_arity</div><div class="ttdoc">Number of I/O children. These children are listed in io_first_child.</div><div class="ttdef"><b>Definition:</b> hwloc.h:489</div></div>
809 <div class="ttc" id="aa00244_html_a7b89e8c189876c0158a9282aaaf17f50"><div class="ttname"><a href="a00244.html#a7b89e8c189876c0158a9282aaaf17f50">hwloc_obj::prev_sibling</a></div><div class="ttdeci">struct hwloc_obj * prev_sibling</div><div class="ttdoc">Previous object below the same parent (inside the same list of children).</div><div class="ttdef"><b>Definition:</b> hwloc.h:448</div></div>
810 <div class="ttc" id="aa00244_html_a7f2343ed476fe4942e6fffd4cade1b40"><div class="ttname"><a href="a00244.html#a7f2343ed476fe4942e6fffd4cade1b40">hwloc_obj::next_sibling</a></div><div class="ttdeci">struct hwloc_obj * next_sibling</div><div class="ttdoc">Next object below the same parent (inside the same list of children).</div><div class="ttdef"><b>Definition:</b> hwloc.h:447</div></div>
811 <div class="ttc" id="aa00244_html_a84bd65634dbc55f4158b74443a9bd04f"><div class="ttname"><a href="a00244.html#a84bd65634dbc55f4158b74443a9bd04f">hwloc_obj::last_child</a></div><div class="ttdeci">struct hwloc_obj * last_child</div><div class="ttdoc">Last normal child.</div><div class="ttdef"><b>Definition:</b> hwloc.h:457</div></div>
812 <div class="ttc" id="aa00244_html_a85a788017457129589318b6c39451acf"><div class="ttname"><a href="a00244.html#a85a788017457129589318b6c39451acf">hwloc_obj::next_cousin</a></div><div class="ttdeci">struct hwloc_obj * next_cousin</div><div class="ttdoc">Next object of same type and depth.</div><div class="ttdef"><b>Definition:</b> hwloc.h:441</div></div>
813 <div class="ttc" id="aa00244_html_a8604654c38b7a720efae5025d3a96ee6"><div class="ttname"><a href="a00244.html#a8604654c38b7a720efae5025d3a96ee6">hwloc_obj::infos</a></div><div class="ttdeci">struct hwloc_info_s * infos</div><div class="ttdoc">Array of stringified info type=name.</div><div class="ttdef"><b>Definition:</b> hwloc.h:577</div></div>
814 <div class="ttc" id="aa00244_html_a8d14c88e1ebc4ae67cc69f9e928558b3"><div class="ttname"><a href="a00244.html#a8d14c88e1ebc4ae67cc69f9e928558b3">hwloc_obj::io_first_child</a></div><div class="ttdeci">struct hwloc_obj * io_first_child</div><div class="ttdoc">First I/O child. Bridges, PCI and OS devices are listed here (io_arity and io_first_child) instead of...</div><div class="ttdef"><b>Definition:</b> hwloc.h:492</div></div>
815 <div class="ttc" id="aa00244_html_a91788a9da687beb7224cc1fd7b75208c"><div class="ttname"><a href="a00244.html#a91788a9da687beb7224cc1fd7b75208c">hwloc_obj::complete_cpuset</a></div><div class="ttdeci">hwloc_cpuset_t complete_cpuset</div><div class="ttdoc">The complete CPU set of processors of this object,.</div><div class="ttdef"><b>Definition:</b> hwloc.h:526</div></div>
816 <div class="ttc" id="aa00244_html_a957984a355fa61c85f46605c336e7551"><div class="ttname"><a href="a00244.html#a957984a355fa61c85f46605c336e7551">hwloc_obj::gp_index</a></div><div class="ttdeci">hwloc_uint64_t gp_index</div><div class="ttdoc">Global persistent index. Generated by hwloc, unique across the topology (contrary to os_index) and pe...</div><div class="ttdef"><b>Definition:</b> hwloc.h:586</div></div>
817 <div class="ttc" id="aa00244_html_a9843acc28cfbba903b63ea14b137ff70"><div class="ttname"><a href="a00244.html#a9843acc28cfbba903b63ea14b137ff70">hwloc_obj::infos_count</a></div><div class="ttdeci">unsigned infos_count</div><div class="ttdoc">Size of infos array.</div><div class="ttdef"><b>Definition:</b> hwloc.h:578</div></div>
818 <div class="ttc" id="aa00244_html_aaa6043eee6f55869933c1d974efd9acd"><div class="ttname"><a href="a00244.html#aaa6043eee6f55869933c1d974efd9acd">hwloc_obj::sibling_rank</a></div><div class="ttdeci">unsigned sibling_rank</div><div class="ttdoc">Index in parent's children[] array. Or the index in parent's Memory, I/O or Misc children list.</div><div class="ttdef"><b>Definition:</b> hwloc.h:446</div></div>
819 <div class="ttc" id="aa00244_html_aac3f6da35c9b57599909a44ce2b716c1"><div class="ttname"><a href="a00244.html#aac3f6da35c9b57599909a44ce2b716c1">hwloc_obj::arity</a></div><div class="ttdeci">unsigned arity</div><div class="ttdoc">Number of normal children. Memory, Misc and I/O children are not listed here but rather in their dedi...</div><div class="ttdef"><b>Definition:</b> hwloc.h:451</div></div>
820 <div class="ttc" id="aa00244_html_abb709ec38f2970677e4e57d1d30be96d"><div class="ttname"><a href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">hwloc_obj::name</a></div><div class="ttdeci">char * name</div><div class="ttdoc">Object-specific name if any. Mostly used for identifying OS devices and Misc objects where a name str...</div><div class="ttdef"><b>Definition:</b> hwloc.h:407</div></div>
821 <div class="ttc" id="aa00244_html_ac0e8200dba25b90d5954bd4ec61f97d3"><div class="ttname"><a href="a00244.html#ac0e8200dba25b90d5954bd4ec61f97d3">hwloc_obj::memory_first_child</a></div><div class="ttdeci">struct hwloc_obj * memory_first_child</div><div class="ttdoc">First Memory child. NUMA nodes and Memory-side caches are listed here (memory_arity and memory_first_...</div><div class="ttdef"><b>Definition:</b> hwloc.h:474</div></div>
822 <div class="ttc" id="aa00244_html_ac38c4012127525ef74c5615c526f4c2e"><div class="ttname"><a href="a00244.html#ac38c4012127525ef74c5615c526f4c2e">hwloc_obj::complete_nodeset</a></div><div class="ttdeci">hwloc_nodeset_t complete_nodeset</div><div class="ttdoc">The complete NUMA node set of this object,.</div><div class="ttdef"><b>Definition:</b> hwloc.h:561</div></div>
823 <div class="ttc" id="aa00244_html_ac715989f55ff5a0eb6be2969ee477ec0"><div class="ttname"><a href="a00244.html#ac715989f55ff5a0eb6be2969ee477ec0">hwloc_obj::prev_cousin</a></div><div class="ttdeci">struct hwloc_obj * prev_cousin</div><div class="ttdoc">Previous object of same type and depth.</div><div class="ttdef"><b>Definition:</b> hwloc.h:442</div></div>
824 <div class="ttc" id="aa00244_html_acc4f0803f244867e68fe0036800be5de"><div class="ttname"><a href="a00244.html#acc4f0803f244867e68fe0036800be5de">hwloc_obj::type</a></div><div class="ttdeci">hwloc_obj_type_t type</div><div class="ttdoc">Type of object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:397</div></div>
825 <div class="ttc" id="aa00244_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:414</div></div>
826 <div class="ttc" id="aa00244_html_adc494f6aed939992be1c55cca5822900"><div class="ttname"><a href="a00244.html#adc494f6aed939992be1c55cca5822900">hwloc_obj::parent</a></div><div class="ttdeci">struct hwloc_obj * parent</div><div class="ttdoc">Parent, NULL if root (Machine object)</div><div class="ttdef"><b>Definition:</b> hwloc.h:445</div></div>
827 <div class="ttc" id="aa00244_html_af51d08a0a79dba517c06c5afedc8d2dc"><div class="ttname"><a href="a00244.html#af51d08a0a79dba517c06c5afedc8d2dc">hwloc_obj::first_child</a></div><div class="ttdeci">struct hwloc_obj * first_child</div><div class="ttdoc">First normal child.</div><div class="ttdef"><b>Definition:</b> hwloc.h:456</div></div>
828 <div class="ttc" id="aa00248_html"><div class="ttname"><a href="a00248.html">hwloc_obj_attr_u</a></div><div class="ttdoc">Object type-specific Attributes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:598</div></div>
829 <div class="ttc" id="aa00248_html_a0b66da7ab072f7c016f8ed86701f5a7c"><div class="ttname"><a href="a00248.html#a0b66da7ab072f7c016f8ed86701f5a7c">hwloc_obj_attr_u::pcidev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_pcidev_attr_s pcidev</div></div>
830 <div class="ttc" id="aa00248_html_a207e6359497b7116d6f4baa9e8bbeb43"><div class="ttname"><a href="a00248.html#a207e6359497b7116d6f4baa9e8bbeb43">hwloc_obj_attr_u::bridge</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_bridge_attr_s bridge</div></div>
831 <div class="ttc" id="aa00248_html_a23f553f3252c9d13f2338231cd354ea9"><div class="ttname"><a href="a00248.html#a23f553f3252c9d13f2338231cd354ea9">hwloc_obj_attr_u::cache</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_cache_attr_s cache</div></div>
832 <div class="ttc" id="aa00248_html_a9eddbd69e34cd2ef6af6d2ac31b6eff3"><div class="ttname"><a href="a00248.html#a9eddbd69e34cd2ef6af6d2ac31b6eff3">hwloc_obj_attr_u::group</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_group_attr_s group</div></div>
833 <div class="ttc" id="aa00248_html_aaf7a5c38b5185703ff18c46ad2761dcf"><div class="ttname"><a href="a00248.html#aaf7a5c38b5185703ff18c46ad2761dcf">hwloc_obj_attr_u::osdev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_osdev_attr_s osdev</div></div>
834 <div class="ttc" id="aa00248_html_ad066b9612802ffa01e132dc3a8e6cc86"><div class="ttname"><a href="a00248.html#ad066b9612802ffa01e132dc3a8e6cc86">hwloc_obj_attr_u::numanode</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_numanode_attr_s numanode</div></div>
835 <div class="ttc" id="aa00252_html"><div class="ttname"><a href="a00252.html">hwloc_obj_attr_u::hwloc_numanode_attr_s</a></div><div class="ttdoc">NUMA node-specific Object Attributes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:600</div></div>
836 <div class="ttc" id="aa00252_html_a513078122d403904e16723d30f583cb2"><div class="ttname"><a href="a00252.html#a513078122d403904e16723d30f583cb2">hwloc_obj_attr_u::hwloc_numanode_attr_s::page_types_len</a></div><div class="ttdeci">unsigned page_types_len</div><div class="ttdoc">Size of array page_types.</div><div class="ttdef"><b>Definition:</b> hwloc.h:602</div></div>
837 <div class="ttc" id="aa00252_html_a6703cbf2afbf63c9d60c5ff4dc0c73aa"><div class="ttname"><a href="a00252.html#a6703cbf2afbf63c9d60c5ff4dc0c73aa">hwloc_obj_attr_u::hwloc_numanode_attr_s::local_memory</a></div><div class="ttdeci">hwloc_uint64_t local_memory</div><div class="ttdoc">Local memory (in bytes)</div><div class="ttdef"><b>Definition:</b> hwloc.h:601</div></div>
838 <div class="ttc" id="aa00252_html_a7e53c5024da2d7741a5cc1e7016bb8d2"><div class="ttname"><a href="a00252.html#a7e53c5024da2d7741a5cc1e7016bb8d2">hwloc_obj_attr_u::hwloc_numanode_attr_s::page_types</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s * page_types</div></div>
839 <div class="ttc" id="aa00256_html"><div class="ttname"><a href="a00256.html">hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s</a></div><div class="ttdoc">Array of local memory page types, NULL if no local memory and page_types is 0.</div><div class="ttdef"><b>Definition:</b> hwloc.h:608</div></div>
840 <div class="ttc" id="aa00256_html_a8ea7ebe9d91c7378bba03da57efc25cb"><div class="ttname"><a href="a00256.html#a8ea7ebe9d91c7378bba03da57efc25cb">hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s::size</a></div><div class="ttdeci">hwloc_uint64_t size</div><div class="ttdoc">Size of pages.</div><div class="ttdef"><b>Definition:</b> hwloc.h:609</div></div>
841 <div class="ttc" id="aa00256_html_a98514e37d57a325b78e21ffd8d7419e0"><div class="ttname"><a href="a00256.html#a98514e37d57a325b78e21ffd8d7419e0">hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s::count</a></div><div class="ttdeci">hwloc_uint64_t count</div><div class="ttdoc">Number of pages of this size.</div><div class="ttdef"><b>Definition:</b> hwloc.h:610</div></div>
842 <div class="ttc" id="aa00260_html"><div class="ttname"><a href="a00260.html">hwloc_obj_attr_u::hwloc_cache_attr_s</a></div><div class="ttdoc">Cache-specific Object Attributes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:615</div></div>
843 <div class="ttc" id="aa00260_html_a5c8f7f39193736c2187ed626940835d5"><div class="ttname"><a href="a00260.html#a5c8f7f39193736c2187ed626940835d5">hwloc_obj_attr_u::hwloc_cache_attr_s::depth</a></div><div class="ttdeci">unsigned depth</div><div class="ttdoc">Depth of cache (e.g., L1, L2, ...etc.)</div><div class="ttdef"><b>Definition:</b> hwloc.h:617</div></div>
844 <div class="ttc" id="aa00260_html_a801e8a668e28caf06c8b88e9ae5c10db"><div class="ttname"><a href="a00260.html#a801e8a668e28caf06c8b88e9ae5c10db">hwloc_obj_attr_u::hwloc_cache_attr_s::linesize</a></div><div class="ttdeci">unsigned linesize</div><div class="ttdoc">Cache-line size in bytes. 0 if unknown.</div><div class="ttdef"><b>Definition:</b> hwloc.h:618</div></div>
845 <div class="ttc" id="aa00260_html_abe5e788943ed04302976740c829674c0"><div class="ttname"><a href="a00260.html#abe5e788943ed04302976740c829674c0">hwloc_obj_attr_u::hwloc_cache_attr_s::size</a></div><div class="ttdeci">hwloc_uint64_t size</div><div class="ttdoc">Size of cache in bytes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:616</div></div>
846 <div class="ttc" id="aa00260_html_ad06525e474d1e2d1423ed71bb998592d"><div class="ttname"><a href="a00260.html#ad06525e474d1e2d1423ed71bb998592d">hwloc_obj_attr_u::hwloc_cache_attr_s::associativity</a></div><div class="ttdeci">int associativity</div><div class="ttdoc">Ways of associativity, -1 if fully associative, 0 if unknown.</div><div class="ttdef"><b>Definition:</b> hwloc.h:619</div></div>
847 <div class="ttc" id="aa00260_html_ad8edc8ded2b7a70d6abbc874801930f4"><div class="ttname"><a href="a00260.html#ad8edc8ded2b7a70d6abbc874801930f4">hwloc_obj_attr_u::hwloc_cache_attr_s::type</a></div><div class="ttdeci">hwloc_obj_cache_type_t type</div><div class="ttdoc">Cache type.</div><div class="ttdef"><b>Definition:</b> hwloc.h:621</div></div>
848 <div class="ttc" id="aa00264_html"><div class="ttname"><a href="a00264.html">hwloc_obj_attr_u::hwloc_group_attr_s</a></div><div class="ttdoc">Group-specific Object Attributes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:624</div></div>
849 <div class="ttc" id="aa00264_html_a3229f269c4cc7e63492c168535e4f0c1"><div class="ttname"><a href="a00264.html#a3229f269c4cc7e63492c168535e4f0c1">hwloc_obj_attr_u::hwloc_group_attr_s::kind</a></div><div class="ttdeci">unsigned kind</div><div class="ttdoc">Internally-used kind of group.</div><div class="ttdef"><b>Definition:</b> hwloc.h:627</div></div>
850 <div class="ttc" id="aa00264_html_ad514d943960a4036ed5e44dc187c74ed"><div class="ttname"><a href="a00264.html#ad514d943960a4036ed5e44dc187c74ed">hwloc_obj_attr_u::hwloc_group_attr_s::subkind</a></div><div class="ttdeci">unsigned subkind</div><div class="ttdoc">Internally-used subkind to distinguish different levels of groups with same kind.</div><div class="ttdef"><b>Definition:</b> hwloc.h:628</div></div>
851 <div class="ttc" id="aa00264_html_ad914eac61c77481e1b7037877bcc5579"><div class="ttname"><a href="a00264.html#ad914eac61c77481e1b7037877bcc5579">hwloc_obj_attr_u::hwloc_group_attr_s::depth</a></div><div class="ttdeci">unsigned depth</div><div class="ttdoc">Depth of group object. It may change if intermediate Group objects are added.</div><div class="ttdef"><b>Definition:</b> hwloc.h:625</div></div>
852 <div class="ttc" id="aa00264_html_afa253d4b70f92e940c226d61f192054f"><div class="ttname"><a href="a00264.html#afa253d4b70f92e940c226d61f192054f">hwloc_obj_attr_u::hwloc_group_attr_s::dont_merge</a></div><div class="ttdeci">unsigned char dont_merge</div><div class="ttdoc">Flag preventing groups from being automatically merged with identical parent or children.</div><div class="ttdef"><b>Definition:</b> hwloc.h:629</div></div>
853 <div class="ttc" id="aa00268_html"><div class="ttname"><a href="a00268.html">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a></div><div class="ttdoc">PCI Device specific Object Attributes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:632</div></div>
854 <div class="ttc" id="aa00268_html_a13ad54c93d08d8ac808e4de9674c5ee7"><div class="ttname"><a href="a00268.html#a13ad54c93d08d8ac808e4de9674c5ee7">hwloc_obj_attr_u::hwloc_pcidev_attr_s::revision</a></div><div class="ttdeci">unsigned char revision</div><div class="ttdef"><b>Definition:</b> hwloc.h:641</div></div>
855 <div class="ttc" id="aa00268_html_a35b66064ab7d768caf7154e410caf0fa"><div class="ttname"><a href="a00268.html#a35b66064ab7d768caf7154e410caf0fa">hwloc_obj_attr_u::hwloc_pcidev_attr_s::device_id</a></div><div class="ttdeci">unsigned short device_id</div><div class="ttdef"><b>Definition:</b> hwloc.h:640</div></div>
856 <div class="ttc" id="aa00268_html_a3d70c84a12f7e93d14c8d47bf4fd9dc5"><div class="ttname"><a href="a00268.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">hwloc_obj_attr_u::hwloc_pcidev_attr_s::dev</a></div><div class="ttdeci">unsigned char dev</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
857 <div class="ttc" id="aa00268_html_a499db3d8cc89eaba04fcaef3df1cba97"><div class="ttname"><a href="a00268.html#a499db3d8cc89eaba04fcaef3df1cba97">hwloc_obj_attr_u::hwloc_pcidev_attr_s::subvendor_id</a></div><div class="ttdeci">unsigned short subvendor_id</div><div class="ttdef"><b>Definition:</b> hwloc.h:640</div></div>
858 <div class="ttc" id="aa00268_html_a59b2fce35f7cbde86c4fd305d0ccda5f"><div class="ttname"><a href="a00268.html#a59b2fce35f7cbde86c4fd305d0ccda5f">hwloc_obj_attr_u::hwloc_pcidev_attr_s::linkspeed</a></div><div class="ttdeci">float linkspeed</div><div class="ttdef"><b>Definition:</b> hwloc.h:642</div></div>
859 <div class="ttc" id="aa00268_html_a695f32df53f4ef728670bfcf31b74e0f"><div class="ttname"><a href="a00268.html#a695f32df53f4ef728670bfcf31b74e0f">hwloc_obj_attr_u::hwloc_pcidev_attr_s::func</a></div><div class="ttdeci">unsigned char func</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
860 <div class="ttc" id="aa00268_html_a8fba44988deb98613c1505a4019a34dc"><div class="ttname"><a href="a00268.html#a8fba44988deb98613c1505a4019a34dc">hwloc_obj_attr_u::hwloc_pcidev_attr_s::domain</a></div><div class="ttdeci">unsigned short domain</div><div class="ttdef"><b>Definition:</b> hwloc.h:634</div></div>
861 <div class="ttc" id="aa00268_html_aad970ad19b62eb2d5df30e4802da4f4c"><div class="ttname"><a href="a00268.html#aad970ad19b62eb2d5df30e4802da4f4c">hwloc_obj_attr_u::hwloc_pcidev_attr_s::vendor_id</a></div><div class="ttdeci">unsigned short vendor_id</div><div class="ttdef"><b>Definition:</b> hwloc.h:640</div></div>
862 <div class="ttc" id="aa00268_html_aae99e035e8d1387d7b8768aaa8eceb0a"><div class="ttname"><a href="a00268.html#aae99e035e8d1387d7b8768aaa8eceb0a">hwloc_obj_attr_u::hwloc_pcidev_attr_s::bus</a></div><div class="ttdeci">unsigned char bus</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
863 <div class="ttc" id="aa00268_html_acac741aecd7a6db64f33409427e3971f"><div class="ttname"><a href="a00268.html#acac741aecd7a6db64f33409427e3971f">hwloc_obj_attr_u::hwloc_pcidev_attr_s::subdevice_id</a></div><div class="ttdeci">unsigned short subdevice_id</div><div class="ttdef"><b>Definition:</b> hwloc.h:640</div></div>
864 <div class="ttc" id="aa00268_html_aee735352d9f1686fd290fc6d6397c334"><div class="ttname"><a href="a00268.html#aee735352d9f1686fd290fc6d6397c334">hwloc_obj_attr_u::hwloc_pcidev_attr_s::class_id</a></div><div class="ttdeci">unsigned short class_id</div><div class="ttdef"><b>Definition:</b> hwloc.h:639</div></div>
865 <div class="ttc" id="aa00272_html"><div class="ttname"><a href="a00272.html">hwloc_obj_attr_u::hwloc_bridge_attr_s</a></div><div class="ttdoc">Bridge specific Object Attribues.</div><div class="ttdef"><b>Definition:</b> hwloc.h:645</div></div>
866 <div class="ttc" id="aa00272_html_a265dd2164aa2df4972e25a029da72125"><div class="ttname"><a href="a00272.html#a265dd2164aa2df4972e25a029da72125">hwloc_obj_attr_u::hwloc_bridge_attr_s::upstream_type</a></div><div class="ttdeci">hwloc_obj_bridge_type_t upstream_type</div><div class="ttdef"><b>Definition:</b> hwloc.h:649</div></div>
867 <div class="ttc" id="aa00272_html_a2c31e565a5f0d23d0a0a3dd3ec8f4b17"><div class="ttname"><a href="a00272.html#a2c31e565a5f0d23d0a0a3dd3ec8f4b17">hwloc_obj_attr_u::hwloc_bridge_attr_s::domain</a></div><div class="ttdeci">unsigned short domain</div><div class="ttdef"><b>Definition:</b> hwloc.h:653</div></div>
868 <div class="ttc" id="aa00272_html_a336c8b22893d5d734d8c9dfca4066b46"><div class="ttname"><a href="a00272.html#a336c8b22893d5d734d8c9dfca4066b46">hwloc_obj_attr_u::hwloc_bridge_attr_s::depth</a></div><div class="ttdeci">unsigned depth</div><div class="ttdef"><b>Definition:</b> hwloc.h:661</div></div>
869 <div class="ttc" id="aa00272_html_a7d5db91d655ba23ffe9bda7a2cbcb9a8"><div class="ttname"><a href="a00272.html#a7d5db91d655ba23ffe9bda7a2cbcb9a8">hwloc_obj_attr_u::hwloc_bridge_attr_s::downstream</a></div><div class="ttdeci">union hwloc_obj_attr_u::hwloc_bridge_attr_s::@1 downstream</div></div>
870 <div class="ttc" id="aa00272_html_ab5c564e7c95b747dae9eb84ec0a2c31e"><div class="ttname"><a href="a00272.html#ab5c564e7c95b747dae9eb84ec0a2c31e">hwloc_obj_attr_u::hwloc_bridge_attr_s::pci</a></div><div class="ttdeci">struct hwloc_pcidev_attr_s pci</div><div class="ttdef"><b>Definition:</b> hwloc.h:647</div></div>
871 <div class="ttc" id="aa00272_html_ab62888c880f8bb730292722f5811958d"><div class="ttname"><a href="a00272.html#ab62888c880f8bb730292722f5811958d">hwloc_obj_attr_u::hwloc_bridge_attr_s::upstream</a></div><div class="ttdeci">union hwloc_obj_attr_u::hwloc_bridge_attr_s::@0 upstream</div></div>
872 <div class="ttc" id="aa00272_html_ac6a169b672d0e9f75756fd5665828b93"><div class="ttname"><a href="a00272.html#ac6a169b672d0e9f75756fd5665828b93">hwloc_obj_attr_u::hwloc_bridge_attr_s::downstream_type</a></div><div class="ttdeci">hwloc_obj_bridge_type_t downstream_type</div><div class="ttdef"><b>Definition:</b> hwloc.h:660</div></div>
873 <div class="ttc" id="aa00272_html_ae2d9dd73ef1d32045c584a8e66d2f83f"><div class="ttname"><a href="a00272.html#ae2d9dd73ef1d32045c584a8e66d2f83f">hwloc_obj_attr_u::hwloc_bridge_attr_s::secondary_bus</a></div><div class="ttdeci">unsigned char secondary_bus</div><div class="ttdef"><b>Definition:</b> hwloc.h:657</div></div>
874 <div class="ttc" id="aa00272_html_af3f3f7d76bf03e8d2afa721c2b8d6771"><div class="ttname"><a href="a00272.html#af3f3f7d76bf03e8d2afa721c2b8d6771">hwloc_obj_attr_u::hwloc_bridge_attr_s::subordinate_bus</a></div><div class="ttdeci">unsigned char subordinate_bus</div><div class="ttdef"><b>Definition:</b> hwloc.h:657</div></div>
875 <div class="ttc" id="aa00288_html"><div class="ttname"><a href="a00288.html">hwloc_obj_attr_u::hwloc_osdev_attr_s</a></div><div class="ttdoc">OS Device specific Object Attributes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:664</div></div>
876 <div class="ttc" id="aa00288_html_a31e019e27e54ac6138d04be639bb96f9"><div class="ttname"><a href="a00288.html#a31e019e27e54ac6138d04be639bb96f9">hwloc_obj_attr_u::hwloc_osdev_attr_s::type</a></div><div class="ttdeci">hwloc_obj_osdev_type_t type</div><div class="ttdef"><b>Definition:</b> hwloc.h:665</div></div>
877 <div class="ttc" id="aa00292_html"><div class="ttname"><a href="a00292.html">hwloc_info_s</a></div><div class="ttdoc">Object info.</div><div class="ttdef"><b>Definition:</b> hwloc.h:673</div></div>
878 <div class="ttc" id="aa00292_html_a12ce1309e4381ae38b5c15d242a47124"><div class="ttname"><a href="a00292.html#a12ce1309e4381ae38b5c15d242a47124">hwloc_info_s::name</a></div><div class="ttdeci">char * name</div><div class="ttdoc">Info name.</div><div class="ttdef"><b>Definition:</b> hwloc.h:674</div></div>
879 <div class="ttc" id="aa00292_html_a788a0073bafe660645e7b69f31a43bbb"><div class="ttname"><a href="a00292.html#a788a0073bafe660645e7b69f31a43bbb">hwloc_info_s::value</a></div><div class="ttdeci">char * value</div><div class="ttdoc">Info value.</div><div class="ttdef"><b>Definition:</b> hwloc.h:675</div></div>
880 <div class="ttc" id="aa00296_html"><div class="ttname"><a href="a00296.html">hwloc_topology_discovery_support</a></div><div class="ttdoc">Flags describing actual discovery support for this topology.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2001</div></div>
881 <div class="ttc" id="aa00296_html_a955f96066cb9e4cd34e2a3710ad43e80"><div class="ttname"><a href="a00296.html#a955f96066cb9e4cd34e2a3710ad43e80">hwloc_topology_discovery_support::numa</a></div><div class="ttdeci">unsigned char numa</div><div class="ttdoc">Detecting the number of NUMA nodes is supported.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2005</div></div>
882 <div class="ttc" id="aa00296_html_a970e65235873bcdb9669a9805161ce03"><div class="ttname"><a href="a00296.html#a970e65235873bcdb9669a9805161ce03">hwloc_topology_discovery_support::disallowed_numa</a></div><div class="ttdeci">unsigned char disallowed_numa</div><div class="ttdoc">Detecting and identifying NUMA nodes that are not available to the current process is supported.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2011</div></div>
883 <div class="ttc" id="aa00296_html_aba80d6f9c15e2395f9ed61db9ff3b75d"><div class="ttname"><a href="a00296.html#aba80d6f9c15e2395f9ed61db9ff3b75d">hwloc_topology_discovery_support::cpukind_efficiency</a></div><div class="ttdeci">unsigned char cpukind_efficiency</div><div class="ttdoc">Detecting the efficiency of CPU kinds is supported, see Kinds of CPU cores.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2013</div></div>
884 <div class="ttc" id="aa00296_html_ad7bb4ecf7a82f5a04fc632e9592ad3ab"><div class="ttname"><a href="a00296.html#ad7bb4ecf7a82f5a04fc632e9592ad3ab">hwloc_topology_discovery_support::pu</a></div><div class="ttdeci">unsigned char pu</div><div class="ttdoc">Detecting the number of PU objects is supported.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2003</div></div>
885 <div class="ttc" id="aa00296_html_af193eb858e40e12ef4923f5ed0e1f11a"><div class="ttname"><a href="a00296.html#af193eb858e40e12ef4923f5ed0e1f11a">hwloc_topology_discovery_support::numa_memory</a></div><div class="ttdeci">unsigned char numa_memory</div><div class="ttdoc">Detecting the amount of memory in NUMA nodes is supported.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2007</div></div>
886 <div class="ttc" id="aa00296_html_af3c97b28781a2972cf8eaaf94a6617da"><div class="ttname"><a href="a00296.html#af3c97b28781a2972cf8eaaf94a6617da">hwloc_topology_discovery_support::disallowed_pu</a></div><div class="ttdeci">unsigned char disallowed_pu</div><div class="ttdoc">Detecting and identifying PU objects that are not available to the current process is supported.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2009</div></div>
887 <div class="ttc" id="aa00300_html"><div class="ttname"><a href="a00300.html">hwloc_topology_cpubind_support</a></div><div class="ttdoc">Flags describing actual PU binding support for this topology.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2021</div></div>
888 <div class="ttc" id="aa00300_html_a2554620148b7992a5093f338f5ae254f"><div class="ttname"><a href="a00300.html#a2554620148b7992a5093f338f5ae254f">hwloc_topology_cpubind_support::get_proc_last_cpu_location</a></div><div class="ttdeci">unsigned char get_proc_last_cpu_location</div><div class="ttdef"><b>Definition:</b> hwloc.h:2041</div></div>
889 <div class="ttc" id="aa00300_html_a46fba33e307909ce256624687799dd6d"><div class="ttname"><a href="a00300.html#a46fba33e307909ce256624687799dd6d">hwloc_topology_cpubind_support::set_thread_cpubind</a></div><div class="ttdeci">unsigned char set_thread_cpubind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2035</div></div>
890 <div class="ttc" id="aa00300_html_a57a89a4b5f1f74fa6cfe176f1e8b0798"><div class="ttname"><a href="a00300.html#a57a89a4b5f1f74fa6cfe176f1e8b0798">hwloc_topology_cpubind_support::set_thisthread_cpubind</a></div><div class="ttdeci">unsigned char set_thisthread_cpubind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2031</div></div>
891 <div class="ttc" id="aa00300_html_a6be1f042fdce6bf41b4ea39f6f193808"><div class="ttname"><a href="a00300.html#a6be1f042fdce6bf41b4ea39f6f193808">hwloc_topology_cpubind_support::get_thisthread_last_cpu_location</a></div><div class="ttdeci">unsigned char get_thisthread_last_cpu_location</div><div class="ttdef"><b>Definition:</b> hwloc.h:2043</div></div>
892 <div class="ttc" id="aa00300_html_a77a09ddd78ee3e9ff5f532a6ac74f7eb"><div class="ttname"><a href="a00300.html#a77a09ddd78ee3e9ff5f532a6ac74f7eb">hwloc_topology_cpubind_support::get_thisproc_cpubind</a></div><div class="ttdeci">unsigned char get_thisproc_cpubind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2025</div></div>
893 <div class="ttc" id="aa00300_html_a80d762e532d677dff262d83cc7bb1c60"><div class="ttname"><a href="a00300.html#a80d762e532d677dff262d83cc7bb1c60">hwloc_topology_cpubind_support::get_thisthread_cpubind</a></div><div class="ttdeci">unsigned char get_thisthread_cpubind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2033</div></div>
894 <div class="ttc" id="aa00300_html_a8dd4d8531ed2eebdce1507e7d104154e"><div class="ttname"><a href="a00300.html#a8dd4d8531ed2eebdce1507e7d104154e">hwloc_topology_cpubind_support::get_thread_cpubind</a></div><div class="ttdeci">unsigned char get_thread_cpubind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2037</div></div>
895 <div class="ttc" id="aa00300_html_a9403d51657a4d546b3ea9553a2973a27"><div class="ttname"><a href="a00300.html#a9403d51657a4d546b3ea9553a2973a27">hwloc_topology_cpubind_support::set_thisproc_cpubind</a></div><div class="ttdeci">unsigned char set_thisproc_cpubind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2023</div></div>
896 <div class="ttc" id="aa00300_html_aa166223d1c2a6de7256ab2d8b675a87e"><div class="ttname"><a href="a00300.html#aa166223d1c2a6de7256ab2d8b675a87e">hwloc_topology_cpubind_support::set_proc_cpubind</a></div><div class="ttdeci">unsigned char set_proc_cpubind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2027</div></div>
897 <div class="ttc" id="aa00300_html_aae705bc447adc163ead377362c4dfe9f"><div class="ttname"><a href="a00300.html#aae705bc447adc163ead377362c4dfe9f">hwloc_topology_cpubind_support::get_proc_cpubind</a></div><div class="ttdeci">unsigned char get_proc_cpubind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2029</div></div>
898 <div class="ttc" id="aa00300_html_ad2d5c94b738d92b7d2ede87e4e96321d"><div class="ttname"><a href="a00300.html#ad2d5c94b738d92b7d2ede87e4e96321d">hwloc_topology_cpubind_support::get_thisproc_last_cpu_location</a></div><div class="ttdeci">unsigned char get_thisproc_last_cpu_location</div><div class="ttdef"><b>Definition:</b> hwloc.h:2039</div></div>
899 <div class="ttc" id="aa00304_html"><div class="ttname"><a href="a00304.html">hwloc_topology_membind_support</a></div><div class="ttdoc">Flags describing actual memory binding support for this topology.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2051</div></div>
900 <div class="ttc" id="aa00304_html_a0697af2e41f2e82b8ce71e3cc13f7eac"><div class="ttname"><a href="a00304.html#a0697af2e41f2e82b8ce71e3cc13f7eac">hwloc_topology_membind_support::set_thisthread_membind</a></div><div class="ttdeci">unsigned char set_thisthread_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2061</div></div>
901 <div class="ttc" id="aa00304_html_a0a84e24a06f2fa487fe8c9605c6f68b3"><div class="ttname"><a href="a00304.html#a0a84e24a06f2fa487fe8c9605c6f68b3">hwloc_topology_membind_support::get_area_membind</a></div><div class="ttdeci">unsigned char get_area_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2067</div></div>
902 <div class="ttc" id="aa00304_html_a221098c339dbfab27bd2c9f5d32f123b"><div class="ttname"><a href="a00304.html#a221098c339dbfab27bd2c9f5d32f123b">hwloc_topology_membind_support::firsttouch_membind</a></div><div class="ttdeci">unsigned char firsttouch_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2071</div></div>
903 <div class="ttc" id="aa00304_html_a30173553a68e0a4dd1672d26f8e892b1"><div class="ttname"><a href="a00304.html#a30173553a68e0a4dd1672d26f8e892b1">hwloc_topology_membind_support::get_area_memlocation</a></div><div class="ttdeci">unsigned char get_area_memlocation</div><div class="ttdef"><b>Definition:</b> hwloc.h:2081</div></div>
904 <div class="ttc" id="aa00304_html_a36b3e388df9c6a249427cab7e3724749"><div class="ttname"><a href="a00304.html#a36b3e388df9c6a249427cab7e3724749">hwloc_topology_membind_support::set_thisproc_membind</a></div><div class="ttdeci">unsigned char set_thisproc_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2053</div></div>
905 <div class="ttc" id="aa00304_html_a3c44c6012860bbeba8a0f4c19710858d"><div class="ttname"><a href="a00304.html#a3c44c6012860bbeba8a0f4c19710858d">hwloc_topology_membind_support::interleave_membind</a></div><div class="ttdeci">unsigned char interleave_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2075</div></div>
906 <div class="ttc" id="aa00304_html_a3fd51e6fa5f0dd800322301b46b08559"><div class="ttname"><a href="a00304.html#a3fd51e6fa5f0dd800322301b46b08559">hwloc_topology_membind_support::get_thisproc_membind</a></div><div class="ttdeci">unsigned char get_thisproc_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2055</div></div>
907 <div class="ttc" id="aa00304_html_a476c06f96b65c08b287cf2369966123b"><div class="ttname"><a href="a00304.html#a476c06f96b65c08b287cf2369966123b">hwloc_topology_membind_support::set_area_membind</a></div><div class="ttdeci">unsigned char set_area_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2065</div></div>
908 <div class="ttc" id="aa00304_html_a63b0b2e26157b472f5717ee93cc7c535"><div class="ttname"><a href="a00304.html#a63b0b2e26157b472f5717ee93cc7c535">hwloc_topology_membind_support::get_thisthread_membind</a></div><div class="ttdeci">unsigned char get_thisthread_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2063</div></div>
909 <div class="ttc" id="aa00304_html_a756f44912894b176bf979a1b65f12aac"><div class="ttname"><a href="a00304.html#a756f44912894b176bf979a1b65f12aac">hwloc_topology_membind_support::set_proc_membind</a></div><div class="ttdeci">unsigned char set_proc_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2057</div></div>
910 <div class="ttc" id="aa00304_html_a9880cd2d605e316fc020167c49ca69ad"><div class="ttname"><a href="a00304.html#a9880cd2d605e316fc020167c49ca69ad">hwloc_topology_membind_support::get_proc_membind</a></div><div class="ttdeci">unsigned char get_proc_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2059</div></div>
911 <div class="ttc" id="aa00304_html_aafa7683871a6a760246f9b35209caec5"><div class="ttname"><a href="a00304.html#aafa7683871a6a760246f9b35209caec5">hwloc_topology_membind_support::migrate_membind</a></div><div class="ttdeci">unsigned char migrate_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2079</div></div>
912 <div class="ttc" id="aa00304_html_ab0921af6e0cd6975812a80b8e5c7435c"><div class="ttname"><a href="a00304.html#ab0921af6e0cd6975812a80b8e5c7435c">hwloc_topology_membind_support::nexttouch_membind</a></div><div class="ttdeci">unsigned char nexttouch_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2077</div></div>
913 <div class="ttc" id="aa00304_html_ae551abb27d2aa9ce008583488b845b98"><div class="ttname"><a href="a00304.html#ae551abb27d2aa9ce008583488b845b98">hwloc_topology_membind_support::alloc_membind</a></div><div class="ttdeci">unsigned char alloc_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2069</div></div>
914 <div class="ttc" id="aa00304_html_ae7cdb1f1b5f0242a69f85b5a5538c764"><div class="ttname"><a href="a00304.html#ae7cdb1f1b5f0242a69f85b5a5538c764">hwloc_topology_membind_support::bind_membind</a></div><div class="ttdeci">unsigned char bind_membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2073</div></div>
915 <div class="ttc" id="aa00308_html"><div class="ttname"><a href="a00308.html">hwloc_topology_misc_support</a></div><div class="ttdoc">Flags describing miscellaneous features.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2086</div></div>
916 <div class="ttc" id="aa00308_html_adf54a6dbe8e9dd5033dfe9c93df726c4"><div class="ttname"><a href="a00308.html#adf54a6dbe8e9dd5033dfe9c93df726c4">hwloc_topology_misc_support::imported_support</a></div><div class="ttdeci">unsigned char imported_support</div><div class="ttdef"><b>Definition:</b> hwloc.h:2088</div></div>
917 <div class="ttc" id="aa00312_html"><div class="ttname"><a href="a00312.html">hwloc_topology_support</a></div><div class="ttdoc">Set of flags describing actual support for this topology.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2097</div></div>
918 <div class="ttc" id="aa00312_html_ab9d08df4b0b03994f21b893ece826e78"><div class="ttname"><a href="a00312.html#ab9d08df4b0b03994f21b893ece826e78">hwloc_topology_support::misc</a></div><div class="ttdeci">struct hwloc_topology_misc_support * misc</div><div class="ttdef"><b>Definition:</b> hwloc.h:2101</div></div>
919 <div class="ttc" id="aa00312_html_ac6eb62ae8bc0a68dce679a7107a36194"><div class="ttname"><a href="a00312.html#ac6eb62ae8bc0a68dce679a7107a36194">hwloc_topology_support::membind</a></div><div class="ttdeci">struct hwloc_topology_membind_support * membind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2100</div></div>
920 <div class="ttc" id="aa00312_html_adef2bb91f74c3e70a2a071393caf5f56"><div class="ttname"><a href="a00312.html#adef2bb91f74c3e70a2a071393caf5f56">hwloc_topology_support::cpubind</a></div><div class="ttdeci">struct hwloc_topology_cpubind_support * cpubind</div><div class="ttdef"><b>Definition:</b> hwloc.h:2099</div></div>
921 <div class="ttc" id="aa00312_html_aea3fbd7653d987d81f848636c420504d"><div class="ttname"><a href="a00312.html#aea3fbd7653d987d81f848636c420504d">hwloc_topology_support::discovery</a></div><div class="ttdeci">struct hwloc_topology_discovery_support * discovery</div><div class="ttdef"><b>Definition:</b> hwloc.h:2098</div></div>
511 <div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; <span class="keywordflow">if</span> (flags &amp; ~<a class="code" href="a00210.html#gga8b835295a52b6768a5e6c8abb1f9c54da2ca08404bfbebe9ed5f34c3d7635425a">HWLOC_DISTRIB_FLAG_REVERSE</a>) {</div>
512 <div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; errno = EINVAL;</div>
513 <div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; <span class="keywordflow">return</span> -1;</div>
514 <div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; }</div>
515 <div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; </div>
516 <div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; tot_weight = 0;</div>
517 <div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; <span class="keywordflow">for</span> (i = 0; i &lt; n_roots; i++)</div>
518 <div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; tot_weight += (<span class="keywordtype">unsigned</span>) <a class="code" href="a00214.html#ga0200466842c0e1f5da75e84dde460b10">hwloc_bitmap_weight</a>(roots[i]-&gt;<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>);</div>
519 <div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; </div>
520 <div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; <span class="keywordflow">for</span> (i = 0, given = 0, givenweight = 0; i &lt; n_roots; i++) {</div>
521 <div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; <span class="keywordtype">unsigned</span> chunk, weight;</div>
522 <div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> root = roots[flags &amp; <a class="code" href="a00210.html#gga8b835295a52b6768a5e6c8abb1f9c54da2ca08404bfbebe9ed5f34c3d7635425a">HWLOC_DISTRIB_FLAG_REVERSE</a> ? n_roots-1-i : i];</div>
523 <div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; <a class="code" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> <a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a> = root-&gt;<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>;</div>
524 <div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; <span class="keywordflow">while</span> (!<a class="code" href="a00207.html#ga52ef38431eba383b048b98c669b59a16">hwloc_obj_type_is_normal</a>(root-&gt;<a class="code" href="a00250.html#acc4f0803f244867e68fe0036800be5de">type</a>))</div>
525 <div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; <span class="comment">/* If memory/io/misc, walk up to normal parent */</span></div>
526 <div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; root = root-&gt;<a class="code" href="a00250.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
527 <div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; weight = (unsigned) <a class="code" href="a00214.html#ga0200466842c0e1f5da75e84dde460b10">hwloc_bitmap_weight</a>(<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>);</div>
528 <div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; <span class="keywordflow">if</span> (!weight)</div>
529 <div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; <span class="keywordflow">continue</span>;</div>
530 <div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; <span class="comment">/* Give to root a chunk proportional to its weight.</span></div>
531 <div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160;<span class="comment"> * If previous chunks got rounded-up, we may get a bit less. */</span></div>
532 <div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; chunk = (( (givenweight+weight) * n + tot_weight-1) / tot_weight)</div>
533 <div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; - (( givenweight * n + tot_weight-1) / tot_weight);</div>
534 <div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; <span class="keywordflow">if</span> (!root-&gt;<a class="code" href="a00250.html#aac3f6da35c9b57599909a44ce2b716c1">arity</a> || chunk &lt;= 1 || root-&gt;<a class="code" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> &gt;= until) {</div>
535 <div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; <span class="comment">/* We can&#39;t split any more, put everything there. */</span></div>
536 <div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; <span class="keywordflow">if</span> (chunk) {</div>
537 <div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; <span class="comment">/* Fill cpusets with ours */</span></div>
538 <div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; <span class="keywordtype">unsigned</span> j;</div>
539 <div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; <span class="keywordflow">for</span> (j=0; j &lt; chunk; j++)</div>
540 <div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; cpusetp[j] = <a class="code" href="a00214.html#gae679434c1a5f41d3560a8a7e2c1b0dee">hwloc_bitmap_dup</a>(<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>);</div>
541 <div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; } <span class="keywordflow">else</span> {</div>
542 <div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; <span class="comment">/* We got no chunk, just merge our cpuset to a previous one</span></div>
543 <div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160;<span class="comment"> * (the first chunk cannot be empty)</span></div>
544 <div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160;<span class="comment"> * so that this root doesn&#39;t get ignored.</span></div>
545 <div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160;<span class="comment"> */</span></div>
546 <div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; assert(given);</div>
547 <div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; <a class="code" href="a00214.html#ga120b8aefb9ce7ef349929656359b1859">hwloc_bitmap_or</a>(cpusetp[-1], cpusetp[-1], <a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>);</div>
548 <div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; }</div>
549 <div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; } <span class="keywordflow">else</span> {</div>
550 <div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; <span class="comment">/* Still more to distribute, recurse into children */</span></div>
551 <div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; <a class="code" href="a00210.html#ga7b0c28f797c2ff17fa2f244ebbd55b33">hwloc_distrib</a>(topology, root-&gt;<a class="code" href="a00250.html#a04d05403da37bfe17cd63b7c7dd07b1f">children</a>, root-&gt;<a class="code" href="a00250.html#aac3f6da35c9b57599909a44ce2b716c1">arity</a>, cpusetp, chunk, until, flags);</div>
552 <div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; }</div>
553 <div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; cpusetp += chunk;</div>
554 <div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160; given += chunk;</div>
555 <div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; givenweight += weight;</div>
556 <div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; }</div>
557 <div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; </div>
558 <div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; <span class="keywordflow">return</span> 0;</div>
559 <div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160;}</div>
560 <div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; </div>
561 <div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160;HWLOC_DECLSPEC <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a></div>
562 <div class="line"><a name="l00973"></a><span class="lineno"><a class="line" href="a00211.html#gaee30e03391c1ed7dfd617fb5c7bbb033"> 973</a></span>&#160;<a class="code" href="a00211.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology) __hwloc_attribute_pure;</div>
563 <div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; </div>
564 <div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160;HWLOC_DECLSPEC <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a></div>
565 <div class="line"><a name="l00987"></a><span class="lineno"><a class="line" href="a00211.html#ga79212faa07b70dd26588941b17d9fa82"> 987</a></span>&#160;<a class="code" href="a00211.html#ga79212faa07b70dd26588941b17d9fa82">hwloc_topology_get_topology_cpuset</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology) __hwloc_attribute_pure;</div>
566 <div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; </div>
567 <div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160;HWLOC_DECLSPEC <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a></div>
568 <div class="line"><a name="l01006"></a><span class="lineno"><a class="line" href="a00211.html#ga517d5d68ec9f24583d8933aab713be8e"> 1006</a></span>&#160;<a class="code" href="a00211.html#ga517d5d68ec9f24583d8933aab713be8e">hwloc_topology_get_allowed_cpuset</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology) __hwloc_attribute_pure;</div>
569 <div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; </div>
570 <div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160;HWLOC_DECLSPEC <a class="code" href="a00192.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a></div>
571 <div class="line"><a name="l01018"></a><span class="lineno"><a class="line" href="a00211.html#ga773fd98949461ef4c1e3170bb0c0418f"> 1018</a></span>&#160;<a class="code" href="a00211.html#ga773fd98949461ef4c1e3170bb0c0418f">hwloc_topology_get_complete_nodeset</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology) __hwloc_attribute_pure;</div>
572 <div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; </div>
573 <div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160;HWLOC_DECLSPEC <a class="code" href="a00192.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a></div>
574 <div class="line"><a name="l01032"></a><span class="lineno"><a class="line" href="a00211.html#ga3fd37303e99ace8b0d0ea03f95f8c514"> 1032</a></span>&#160;<a class="code" href="a00211.html#ga3fd37303e99ace8b0d0ea03f95f8c514">hwloc_topology_get_topology_nodeset</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology) __hwloc_attribute_pure;</div>
575 <div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; </div>
576 <div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160;HWLOC_DECLSPEC <a class="code" href="a00192.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a></div>
577 <div class="line"><a name="l01051"></a><span class="lineno"><a class="line" href="a00211.html#ga21a4d7237a11e76b912ed4524ab78cbd"> 1051</a></span>&#160;<a class="code" href="a00211.html#ga21a4d7237a11e76b912ed4524ab78cbd">hwloc_topology_get_allowed_nodeset</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology) __hwloc_attribute_pure;</div>
578 <div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; </div>
579 <div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
580 <div class="line"><a name="l01074"></a><span class="lineno"><a class="line" href="a00212.html#ga185751c1653fedbeb7cc480840f38cde"> 1074</a></span>&#160;<a class="code" href="a00212.html#ga185751c1653fedbeb7cc480840f38cde">hwloc_cpuset_to_nodeset</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> _cpuset, <a class="code" href="a00192.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a> <a class="code" href="a00250.html#a08f0d0e16c619a6e653526cbee4ffea3">nodeset</a>)</div>
581 <div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;{</div>
582 <div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; <span class="keywordtype">int</span> <a class="code" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> = <a class="code" href="a00196.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>);</div>
583 <div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> obj = NULL;</div>
584 <div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; assert(<a class="code" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> != <a class="code" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a>);</div>
585 <div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; <a class="code" href="a00214.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a>(<a class="code" href="a00250.html#a08f0d0e16c619a6e653526cbee4ffea3">nodeset</a>);</div>
586 <div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; <span class="keywordflow">while</span> ((obj = <a class="code" href="a00205.html#gaba4b6d86eba1169ced4b0e941d2bb5f0">hwloc_get_next_obj_covering_cpuset_by_depth</a>(topology, _cpuset, <a class="code" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>, obj)) != NULL)</div>
587 <div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00214.html#ga062dbff93baeff3b425a7260c5463646">hwloc_bitmap_set</a>(<a class="code" href="a00250.html#a08f0d0e16c619a6e653526cbee4ffea3">nodeset</a>, obj-&gt;<a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>) &lt; 0)</div>
588 <div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; <span class="keywordflow">return</span> -1;</div>
589 <div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; <span class="keywordflow">return</span> 0;</div>
590 <div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160;}</div>
591 <div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; </div>
592 <div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
593 <div class="line"><a name="l01098"></a><span class="lineno"><a class="line" href="a00212.html#gad5ee8691e08a3538ea7633344c00456d"> 1098</a></span>&#160;<a class="code" href="a00212.html#gad5ee8691e08a3538ea7633344c00456d">hwloc_cpuset_from_nodeset</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> _cpuset, <a class="code" href="a00192.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> <a class="code" href="a00250.html#a08f0d0e16c619a6e653526cbee4ffea3">nodeset</a>)</div>
594 <div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160;{</div>
595 <div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; <span class="keywordtype">int</span> <a class="code" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> = <a class="code" href="a00196.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>);</div>
596 <div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> obj = NULL;</div>
597 <div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; assert(<a class="code" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> != <a class="code" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a>);</div>
598 <div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; <a class="code" href="a00214.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a>(_cpuset);</div>
599 <div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; <span class="keywordflow">while</span> ((obj = <a class="code" href="a00196.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a>(topology, <a class="code" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>, obj)) != NULL) {</div>
600 <div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00214.html#ga11340dd487f110bb84f0a6e4ae90bd06">hwloc_bitmap_isset</a>(<a class="code" href="a00250.html#a08f0d0e16c619a6e653526cbee4ffea3">nodeset</a>, obj-&gt;<a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>))</div>
601 <div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; <span class="comment">/* no need to check obj-&gt;cpuset because objects in levels always have a cpuset */</span></div>
602 <div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00214.html#ga120b8aefb9ce7ef349929656359b1859">hwloc_bitmap_or</a>(_cpuset, _cpuset, obj-&gt;<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>) &lt; 0)</div>
603 <div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; <span class="keywordflow">return</span> -1;</div>
604 <div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; }</div>
605 <div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; <span class="keywordflow">return</span> 0;</div>
606 <div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160;}</div>
607 <div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; </div>
608 <div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
609 <div class="line"><a name="l01133"></a><span class="lineno"><a class="line" href="a00213.html#gaf139bb61375178e90cc3f1835b452ab6"> 1133</a></span>&#160;<a class="code" href="a00213.html#gaf139bb61375178e90cc3f1835b452ab6">hwloc_get_non_io_ancestor_obj</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused,</div>
610 <div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> ioobj)</div>
611 <div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160;{</div>
612 <div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> obj = ioobj;</div>
613 <div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; <span class="keywordflow">while</span> (obj &amp;&amp; !obj-&gt;<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>) {</div>
614 <div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; obj = obj-&gt;<a class="code" href="a00250.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
615 <div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; }</div>
616 <div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; <span class="keywordflow">return</span> obj;</div>
617 <div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160;}</div>
618 <div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; </div>
619 <div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
620 <div class="line"><a name="l01148"></a><span class="lineno"><a class="line" href="a00213.html#ga66470dabce9db19a57c5940a909d0baa"> 1148</a></span>&#160;<a class="code" href="a00213.html#ga66470dabce9db19a57c5940a909d0baa">hwloc_get_next_pcidev</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00250.html">hwloc_obj_t</a> prev)</div>
621 <div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160;{</div>
622 <div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; <span class="keywordflow">return</span> <a class="code" href="a00196.html#ga759e88eaf5a230ad283e9d4c42486735">hwloc_get_next_obj_by_type</a>(topology, <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a>, prev);</div>
623 <div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160;}</div>
624 <div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; </div>
625 <div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
626 <div class="line"><a name="l01157"></a><span class="lineno"><a class="line" href="a00213.html#gacdbaf0db98872e224b7883a84bfb0455"> 1157</a></span>&#160;<a class="code" href="a00213.html#gacdbaf0db98872e224b7883a84bfb0455">hwloc_get_pcidev_by_busid</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
627 <div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; <span class="keywordtype">unsigned</span> domain, <span class="keywordtype">unsigned</span> bus, <span class="keywordtype">unsigned</span> dev, <span class="keywordtype">unsigned</span> func)</div>
628 <div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160;{</div>
629 <div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> obj = NULL;</div>
630 <div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; <span class="keywordflow">while</span> ((obj = <a class="code" href="a00213.html#ga66470dabce9db19a57c5940a909d0baa">hwloc_get_next_pcidev</a>(topology, obj)) != NULL) {</div>
631 <div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; <span class="keywordflow">if</span> (obj-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00274.html#a8fba44988deb98613c1505a4019a34dc">domain</a> == domain</div>
632 <div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; &amp;&amp; obj-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00274.html#aae99e035e8d1387d7b8768aaa8eceb0a">bus</a> == bus</div>
633 <div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160; &amp;&amp; obj-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00274.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">dev</a> == dev</div>
634 <div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160; &amp;&amp; obj-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00274.html#a695f32df53f4ef728670bfcf31b74e0f">func</a> == func)</div>
635 <div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160; <span class="keywordflow">return</span> obj;</div>
636 <div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160; }</div>
637 <div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160; <span class="keywordflow">return</span> NULL;</div>
638 <div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160;}</div>
639 <div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; </div>
640 <div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
641 <div class="line"><a name="l01175"></a><span class="lineno"><a class="line" href="a00213.html#ga23a978469353134b3104b846fe2efceb"> 1175</a></span>&#160;<a class="code" href="a00213.html#ga23a978469353134b3104b846fe2efceb">hwloc_get_pcidev_by_busidstring</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">const</span> <span class="keywordtype">char</span> *busid)</div>
642 <div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160;{</div>
643 <div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; <span class="keywordtype">unsigned</span> domain = 0; <span class="comment">/* default */</span></div>
644 <div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; <span class="keywordtype">unsigned</span> bus, dev, func;</div>
645 <div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; </div>
646 <div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; <span class="keywordflow">if</span> (sscanf(busid, <span class="stringliteral">&quot;%x:%x.%x&quot;</span>, &amp;bus, &amp;dev, &amp;func) != 3</div>
647 <div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; &amp;&amp; sscanf(busid, <span class="stringliteral">&quot;%x:%x:%x.%x&quot;</span>, &amp;domain, &amp;bus, &amp;dev, &amp;func) != 4) {</div>
648 <div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; errno = EINVAL;</div>
649 <div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; <span class="keywordflow">return</span> NULL;</div>
650 <div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; }</div>
651 <div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; </div>
652 <div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; <span class="keywordflow">return</span> <a class="code" href="a00213.html#gacdbaf0db98872e224b7883a84bfb0455">hwloc_get_pcidev_by_busid</a>(topology, domain, bus, dev, func);</div>
653 <div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160;}</div>
654 <div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160; </div>
655 <div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
656 <div class="line"><a name="l01194"></a><span class="lineno"><a class="line" href="a00213.html#ga8b4584c8949e2c5f1c97ba7fe92b8145"> 1194</a></span>&#160;<a class="code" href="a00213.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00250.html">hwloc_obj_t</a> prev)</div>
657 <div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160;{</div>
658 <div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160; <span class="keywordflow">return</span> <a class="code" href="a00196.html#ga759e88eaf5a230ad283e9d4c42486735">hwloc_get_next_obj_by_type</a>(topology, <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075">HWLOC_OBJ_OS_DEVICE</a>, prev);</div>
659 <div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160;}</div>
660 <div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160; </div>
661 <div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
662 <div class="line"><a name="l01204"></a><span class="lineno"><a class="line" href="a00213.html#ga9dba22a3f4f701f2a46780ba9a0bbbe7"> 1204</a></span>&#160;<a class="code" href="a00213.html#ga9dba22a3f4f701f2a46780ba9a0bbbe7">hwloc_get_next_bridge</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00250.html">hwloc_obj_t</a> prev)</div>
663 <div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;{</div>
664 <div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160; <span class="keywordflow">return</span> <a class="code" href="a00196.html#ga759e88eaf5a230ad283e9d4c42486735">hwloc_get_next_obj_by_type</a>(topology, <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0">HWLOC_OBJ_BRIDGE</a>, prev);</div>
665 <div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160;}</div>
666 <div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; </div>
667 <div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160;<span class="comment">/* \brief Checks whether a given bridge covers a given PCI bus.</span></div>
668 <div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160;<span class="comment"> */</span></div>
669 <div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
670 <div class="line"><a name="l01212"></a><span class="lineno"><a class="line" href="a00213.html#ga0d92a9462a3d317f29ecb4442a307fb1"> 1212</a></span>&#160;<a class="code" href="a00213.html#ga0d92a9462a3d317f29ecb4442a307fb1">hwloc_bridge_covers_pcibus</a>(<a class="code" href="a00250.html">hwloc_obj_t</a> bridge,</div>
671 <div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; <span class="keywordtype">unsigned</span> domain, <span class="keywordtype">unsigned</span> bus)</div>
672 <div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160;{</div>
673 <div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; <span class="keywordflow">return</span> bridge-&gt;<a class="code" href="a00250.html#acc4f0803f244867e68fe0036800be5de">type</a> == <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0">HWLOC_OBJ_BRIDGE</a></div>
674 <div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; &amp;&amp; bridge-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#a207e6359497b7116d6f4baa9e8bbeb43">bridge</a>.<a class="code" href="a00278.html#ac6a169b672d0e9f75756fd5665828b93">downstream_type</a> == <a class="code" href="a00193.html#gga48a4803c72574191d7ead1c62aaf9860a8f3b4cecf3dab6073d74696d10863c60">HWLOC_OBJ_BRIDGE_PCI</a></div>
675 <div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; &amp;&amp; bridge-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#a207e6359497b7116d6f4baa9e8bbeb43">bridge</a>.<a class="code" href="a00278.html#a7d5db91d655ba23ffe9bda7a2cbcb9a8">downstream</a>.<a class="code" href="a00278.html#ab5c564e7c95b747dae9eb84ec0a2c31e">pci</a>.<a class="code" href="a00274.html#a8fba44988deb98613c1505a4019a34dc">domain</a> == domain</div>
676 <div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; &amp;&amp; bridge-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#a207e6359497b7116d6f4baa9e8bbeb43">bridge</a>.<a class="code" href="a00278.html#a7d5db91d655ba23ffe9bda7a2cbcb9a8">downstream</a>.<a class="code" href="a00278.html#ab5c564e7c95b747dae9eb84ec0a2c31e">pci</a>.secondary_bus &lt;= bus</div>
677 <div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; &amp;&amp; bridge-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#a207e6359497b7116d6f4baa9e8bbeb43">bridge</a>.<a class="code" href="a00278.html#a7d5db91d655ba23ffe9bda7a2cbcb9a8">downstream</a>.<a class="code" href="a00278.html#ab5c564e7c95b747dae9eb84ec0a2c31e">pci</a>.subordinate_bus &gt;= bus;</div>
678 <div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160;}</div>
679 <div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160; </div>
680 <div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
681 <div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
682 <div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160;<span class="preprocessor">#endif</span></div>
683 <div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160; </div>
684 <div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160; </div>
685 <div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_HELPER_H */</span><span class="preprocessor"></span></div>
686 <div class="ttc" id="aa00192_html_ga1f784433e9b606261f62d1134f6a3b25"><div class="ttname"><a href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a></div><div class="ttdeci">hwloc_const_bitmap_t hwloc_const_cpuset_t</div><div class="ttdoc">A non-modifiable hwloc_cpuset_t.</div><div class="ttdef"><b>Definition:</b> hwloc.h:142</div></div>
687 <div class="ttc" id="aa00192_html_ga2f5276235841ad66a79bedad16a5a10c"><div class="ttname"><a href="a00192.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a></div><div class="ttdeci">hwloc_const_bitmap_t hwloc_const_nodeset_t</div><div class="ttdoc">A non-modifiable hwloc_nodeset_t.</div><div class="ttdef"><b>Definition:</b> hwloc.h:160</div></div>
688 <div class="ttc" id="aa00192_html_ga37e35730fa7e775b5bb0afe893d6d508"><div class="ttname"><a href="a00192.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_nodeset_t</div><div class="ttdoc">A node set is a bitmap whose bits are set according to NUMA memory node physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:157</div></div>
689 <div class="ttc" id="aa00192_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
690 <div class="ttc" id="aa00193_html_ga552ec74296a024237f474acec98694c0"><div class="ttname"><a href="a00193.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a></div><div class="ttdeci">enum hwloc_obj_cache_type_e hwloc_obj_cache_type_t</div><div class="ttdoc">Cache type.</div></div>
691 <div class="ttc" id="aa00193_html_gacd37bb612667dc437d66bfb175a8dc55"><div class="ttname"><a href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a></div><div class="ttdeci">hwloc_obj_type_t</div><div class="ttdoc">Type of topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:176</div></div>
692 <div class="ttc" id="aa00193_html_gga48a4803c72574191d7ead1c62aaf9860a8f3b4cecf3dab6073d74696d10863c60"><div class="ttname"><a href="a00193.html#gga48a4803c72574191d7ead1c62aaf9860a8f3b4cecf3dab6073d74696d10863c60">HWLOC_OBJ_BRIDGE_PCI</a></div><div class="ttdeci">@ HWLOC_OBJ_BRIDGE_PCI</div><div class="ttdoc">PCI-side of a bridge.</div><div class="ttdef"><b>Definition:</b> hwloc.h:335</div></div>
693 <div class="ttc" id="aa00193_html_gga791c9875c8fe20f3e1e5871e0657e59ba3900b3b2db54941aac249e5a638a2d7a"><div class="ttname"><a href="a00193.html#gga791c9875c8fe20f3e1e5871e0657e59ba3900b3b2db54941aac249e5a638a2d7a">HWLOC_OBJ_CACHE_UNIFIED</a></div><div class="ttdeci">@ HWLOC_OBJ_CACHE_UNIFIED</div><div class="ttdoc">Unified cache.</div><div class="ttdef"><b>Definition:</b> hwloc.h:327</div></div>
694 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55a19f8a6953fa91efc76bcbcdf2d22de4d"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a19f8a6953fa91efc76bcbcdf2d22de4d">HWLOC_OBJ_MISC</a></div><div class="ttdeci">@ HWLOC_OBJ_MISC</div><div class="ttdoc">Miscellaneous objects (filtered out by default). Objects without particular meaning,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:290</div></div>
695 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075">HWLOC_OBJ_OS_DEVICE</a></div><div class="ttdeci">@ HWLOC_OBJ_OS_DEVICE</div><div class="ttdoc">Operating system device (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:279</div></div>
696 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div><div class="ttdeci">@ HWLOC_OBJ_PCI_DEVICE</div><div class="ttdoc">PCI device (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:269</div></div>
697 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0">HWLOC_OBJ_BRIDGE</a></div><div class="ttdeci">@ HWLOC_OBJ_BRIDGE</div><div class="ttdoc">Bridge (filtered out by default). Any bridge (or PCI switch) that connects the host or an I/O bus,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:257</div></div>
698 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a></div><div class="ttdeci">@ HWLOC_OBJ_NUMANODE</div><div class="ttdoc">NUMA node. An object that contains memory that is directly and byte-accessible to the host processors...</div><div class="ttdef"><b>Definition:</b> hwloc.h:236</div></div>
699 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661">HWLOC_OBJ_PU</a></div><div class="ttdeci">@ HWLOC_OBJ_PU</div><div class="ttdoc">Processing Unit, or (Logical) Processor. An execution unit (may share a core with some other logical ...</div><div class="ttdef"><b>Definition:</b> hwloc.h:201</div></div>
700 <div class="ttc" id="aa00195_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
701 <div class="ttc" id="aa00196_html_ga2d4b12fc187dfc53b35f2fa21d21044d"><div class="ttname"><a href="a00196.html#ga2d4b12fc187dfc53b35f2fa21d21044d">hwloc_get_root_obj</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_root_obj(hwloc_topology_t topology)</div><div class="ttdoc">Returns the top-object of the topology-tree.</div></div>
702 <div class="ttc" id="aa00196_html_ga391f6b2613f0065673eaa4069b93d4e0"><div class="ttname"><a href="a00196.html#ga391f6b2613f0065673eaa4069b93d4e0">hwloc_get_obj_by_depth</a></div><div class="ttdeci">hwloc_obj_t hwloc_get_obj_by_depth(hwloc_topology_t topology, int depth, unsigned idx)</div><div class="ttdoc">Returns the topology object at logical index idx from depth depth.</div></div>
703 <div class="ttc" id="aa00196_html_ga6f414dd80a2b943967a0ac92da3181a2"><div class="ttname"><a href="a00196.html#ga6f414dd80a2b943967a0ac92da3181a2">hwloc_get_obj_by_type</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_obj_by_type(hwloc_topology_t topology, hwloc_obj_type_t type, unsigned idx)</div><div class="ttdoc">Returns the topology object at logical index idx with type type.</div></div>
704 <div class="ttc" id="aa00196_html_ga759e88eaf5a230ad283e9d4c42486735"><div class="ttname"><a href="a00196.html#ga759e88eaf5a230ad283e9d4c42486735">hwloc_get_next_obj_by_type</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_obj_by_type(hwloc_topology_t topology, hwloc_obj_type_t type, hwloc_obj_t prev)</div><div class="ttdoc">Returns the next object of type type.</div></div>
705 <div class="ttc" id="aa00196_html_ga8bec782e21be313750da70cf7428b374"><div class="ttname"><a href="a00196.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a></div><div class="ttdeci">int hwloc_get_type_depth(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Returns the depth of objects of type type.</div></div>
706 <div class="ttc" id="aa00196_html_gac140a9b939d9fa0b30c4a910efcb0656"><div class="ttname"><a href="a00196.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_obj_by_depth(hwloc_topology_t topology, int depth, hwloc_obj_t prev)</div><div class="ttdoc">Returns the next object at depth depth.</div></div>
707 <div class="ttc" id="aa00196_html_ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad"><div class="ttname"><a href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_UNKNOWN</div><div class="ttdoc">No object of given type exists in the topology.</div><div class="ttdef"><b>Definition:</b> hwloc.h:821</div></div>
708 <div class="ttc" id="aa00196_html_ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c"><div class="ttname"><a href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c">HWLOC_TYPE_DEPTH_MULTIPLE</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_MULTIPLE</div><div class="ttdoc">Objects of given type exist at different depth in the topology (only for Groups).</div><div class="ttdef"><b>Definition:</b> hwloc.h:822</div></div>
709 <div class="ttc" id="aa00204_html_ga133c40415de008518608f8bff52a5ab9"><div class="ttname"><a href="a00204.html#ga133c40415de008518608f8bff52a5ab9">hwloc_get_nbobjs_inside_cpuset_by_type</a></div><div class="ttdeci">static int hwloc_get_nbobjs_inside_cpuset_by_type(hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_type_t type)</div><div class="ttdoc">Return the number of objects of type type included in CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:216</div></div>
710 <div class="ttc" id="aa00204_html_ga2edf924e5a0cca9cb22f65cc77c6ddb5"><div class="ttname"><a href="a00204.html#ga2edf924e5a0cca9cb22f65cc77c6ddb5">hwloc_get_obj_inside_cpuset_by_type</a></div><div class="ttdeci">static 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)</div><div class="ttdoc">Return the idx -th object of type type included in CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:164</div></div>
711 <div class="ttc" id="aa00204_html_ga34ca563fa3a6a4e05268f36a87668511"><div class="ttname"><a href="a00204.html#ga34ca563fa3a6a4e05268f36a87668511">hwloc_get_largest_objs_inside_cpuset</a></div><div class="ttdeci">int hwloc_get_largest_objs_inside_cpuset(hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_t *restrict objs, int max)</div><div class="ttdoc">Get the set of largest objects covering exactly a given cpuset set.</div></div>
712 <div class="ttc" id="aa00204_html_ga4c3a20d61e9beb06c667b21688c772c5"><div class="ttname"><a href="a00204.html#ga4c3a20d61e9beb06c667b21688c772c5">hwloc_get_obj_index_inside_cpuset</a></div><div class="ttdeci">static int hwloc_get_obj_index_inside_cpuset(hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_t obj)</div><div class="ttdoc">Return the logical index among the objects included in CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:244</div></div>
713 <div class="ttc" id="aa00204_html_ga547325a4193dbc215d07c23097519d79"><div class="ttname"><a href="a00204.html#ga547325a4193dbc215d07c23097519d79">hwloc_get_first_largest_obj_inside_cpuset</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_first_largest_obj_inside_cpuset(hwloc_topology_t topology, hwloc_const_cpuset_t set)</div><div class="ttdoc">Get the first largest object included in the given cpuset set.</div><div class="ttdef"><b>Definition:</b> helper.h:42</div></div>
714 <div class="ttc" id="aa00204_html_ga63e3784e7c60fbae5073428cb98ac787"><div class="ttname"><a href="a00204.html#ga63e3784e7c60fbae5073428cb98ac787">hwloc_get_next_obj_inside_cpuset_by_depth</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_obj_inside_cpuset_by_depth(hwloc_topology_t topology, hwloc_const_cpuset_t set, int depth, hwloc_obj_t prev)</div><div class="ttdoc">Return the next object at depth depth included in CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:85</div></div>
715 <div class="ttc" id="aa00204_html_gaa43c64512ddb33fd181990c4261cec7d"><div class="ttname"><a href="a00204.html#gaa43c64512ddb33fd181990c4261cec7d">hwloc_get_nbobjs_inside_cpuset_by_depth</a></div><div class="ttdeci">static unsigned hwloc_get_nbobjs_inside_cpuset_by_depth(hwloc_topology_t topology, hwloc_const_cpuset_t set, int depth)</div><div class="ttdoc">Return the number of objects at depth depth included in CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:185</div></div>
716 <div class="ttc" id="aa00204_html_gaec86f1f88832836e3f9338e246ea5862"><div class="ttname"><a href="a00204.html#gaec86f1f88832836e3f9338e246ea5862">hwloc_get_obj_inside_cpuset_by_depth</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_obj_inside_cpuset_by_depth(hwloc_topology_t topology, hwloc_const_cpuset_t set, int depth, unsigned idx)</div><div class="ttdoc">Return the (logically) idx -th object at depth depth included in CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:130</div></div>
717 <div class="ttc" id="aa00204_html_gafe859176cf9233f215fea0e87cef47e7"><div class="ttname"><a href="a00204.html#gafe859176cf9233f215fea0e87cef47e7">hwloc_get_next_obj_inside_cpuset_by_type</a></div><div class="ttdeci">static 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)</div><div class="ttdoc">Return the next object of type type included in CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:109</div></div>
718 <div class="ttc" id="aa00205_html_ga0e66aa2dc6b2527cfd10723af646c9d7"><div class="ttname"><a href="a00205.html#ga0e66aa2dc6b2527cfd10723af646c9d7">hwloc_get_child_covering_cpuset</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_child_covering_cpuset(hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_t parent)</div><div class="ttdoc">Get the child covering at least CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:275</div></div>
719 <div class="ttc" id="aa00205_html_ga41acdcdbb8b95d70ecf6c572a3f67dca"><div class="ttname"><a href="a00205.html#ga41acdcdbb8b95d70ecf6c572a3f67dca">hwloc_get_obj_covering_cpuset</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_obj_covering_cpuset(hwloc_topology_t topology, hwloc_const_cpuset_t set)</div><div class="ttdoc">Get the lowest object covering at least CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:297</div></div>
720 <div class="ttc" id="aa00205_html_ga91cfae08b092e7966002e15d1e987213"><div class="ttname"><a href="a00205.html#ga91cfae08b092e7966002e15d1e987213">hwloc_get_next_obj_covering_cpuset_by_type</a></div><div class="ttdeci">static 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)</div><div class="ttdoc">Iterate through same-type objects covering at least CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:348</div></div>
721 <div class="ttc" id="aa00205_html_gaba4b6d86eba1169ced4b0e941d2bb5f0"><div class="ttname"><a href="a00205.html#gaba4b6d86eba1169ced4b0e941d2bb5f0">hwloc_get_next_obj_covering_cpuset_by_depth</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_obj_covering_cpuset_by_depth(hwloc_topology_t topology, hwloc_const_cpuset_t set, int depth, hwloc_obj_t prev)</div><div class="ttdoc">Iterate through same-depth objects covering at least CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:321</div></div>
722 <div class="ttc" id="aa00206_html_ga12d8565a3436c565e791ed02a0353621"><div class="ttname"><a href="a00206.html#ga12d8565a3436c565e791ed02a0353621">hwloc_get_next_child</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_child(hwloc_topology_t topology, hwloc_obj_t parent, hwloc_obj_t prev)</div><div class="ttdoc">Return the next child.</div><div class="ttdef"><b>Definition:</b> helper.h:456</div></div>
723 <div class="ttc" id="aa00206_html_ga408cf74f5bf9ed497911a320c7f8cc56"><div class="ttname"><a href="a00206.html#ga408cf74f5bf9ed497911a320c7f8cc56">hwloc_obj_is_in_subtree</a></div><div class="ttdeci">static int hwloc_obj_is_in_subtree(hwloc_topology_t topology, hwloc_obj_t obj, hwloc_obj_t subtree_root)</div><div class="ttdoc">Returns true if obj is inside the subtree beginning with ancestor object subtree_root.</div><div class="ttdef"><b>Definition:</b> helper.h:440</div></div>
724 <div class="ttc" id="aa00206_html_ga70f0c7583291da707c15ae4daa850f41"><div class="ttname"><a href="a00206.html#ga70f0c7583291da707c15ae4daa850f41">hwloc_get_ancestor_obj_by_type</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_ancestor_obj_by_type(hwloc_topology_t topology, hwloc_obj_type_t type, hwloc_obj_t obj)</div><div class="ttdoc">Returns the ancestor object of obj with type type.</div><div class="ttdef"><b>Definition:</b> helper.h:400</div></div>
725 <div class="ttc" id="aa00206_html_ga9f8c93fde236e9642a96957af01a11cb"><div class="ttname"><a href="a00206.html#ga9f8c93fde236e9642a96957af01a11cb">hwloc_get_ancestor_obj_by_depth</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_ancestor_obj_by_depth(hwloc_topology_t topology, int depth, hwloc_obj_t obj)</div><div class="ttdoc">Returns the ancestor object of obj at depth depth.</div><div class="ttdef"><b>Definition:</b> helper.h:380</div></div>
726 <div class="ttc" id="aa00206_html_gab1fa883021928b5c476911c4102e9be3"><div class="ttname"><a href="a00206.html#gab1fa883021928b5c476911c4102e9be3">hwloc_get_common_ancestor_obj</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_common_ancestor_obj(hwloc_topology_t topology, hwloc_obj_t obj1, hwloc_obj_t obj2)</div><div class="ttdoc">Returns the common parent object to objects obj1 and obj2.</div><div class="ttdef"><b>Definition:</b> helper.h:412</div></div>
727 <div class="ttc" id="aa00207_html_ga1d074390c8a3dc3088d84f73fb73f966"><div class="ttname"><a href="a00207.html#ga1d074390c8a3dc3088d84f73fb73f966">hwloc_obj_type_is_memory</a></div><div class="ttdeci">int hwloc_obj_type_is_memory(hwloc_obj_type_t type)</div><div class="ttdoc">Check whether an object type is Memory.</div></div>
728 <div class="ttc" id="aa00207_html_ga2ed589bea28711e80b92066510a5607d"><div class="ttname"><a href="a00207.html#ga2ed589bea28711e80b92066510a5607d">hwloc_obj_type_is_cache</a></div><div class="ttdeci">int hwloc_obj_type_is_cache(hwloc_obj_type_t type)</div><div class="ttdoc">Check whether an object type is a CPU Cache (Data, Unified or Instruction).</div></div>
729 <div class="ttc" id="aa00207_html_ga395e48cd221d107e5891689624e1aec4"><div class="ttname"><a href="a00207.html#ga395e48cd221d107e5891689624e1aec4">hwloc_obj_type_is_dcache</a></div><div class="ttdeci">int hwloc_obj_type_is_dcache(hwloc_obj_type_t type)</div><div class="ttdoc">Check whether an object type is a CPU Data or Unified Cache.</div></div>
730 <div class="ttc" id="aa00207_html_ga52ef38431eba383b048b98c669b59a16"><div class="ttname"><a href="a00207.html#ga52ef38431eba383b048b98c669b59a16">hwloc_obj_type_is_normal</a></div><div class="ttdeci">int hwloc_obj_type_is_normal(hwloc_obj_type_t type)</div><div class="ttdoc">Check whether an object type is Normal.</div></div>
731 <div class="ttc" id="aa00207_html_ga8abcee67b9b074332c1866405a3648a9"><div class="ttname"><a href="a00207.html#ga8abcee67b9b074332c1866405a3648a9">hwloc_obj_type_is_icache</a></div><div class="ttdeci">int hwloc_obj_type_is_icache(hwloc_obj_type_t type)</div><div class="ttdoc">Check whether an object type is a CPU Instruction Cache,.</div></div>
732 <div class="ttc" id="aa00207_html_gac8a954ed37a4376097234c828068cbef"><div class="ttname"><a href="a00207.html#gac8a954ed37a4376097234c828068cbef">hwloc_obj_type_is_io</a></div><div class="ttdeci">int hwloc_obj_type_is_io(hwloc_obj_type_t type)</div><div class="ttdoc">Check whether an object type is I/O.</div></div>
733 <div class="ttc" id="aa00208_html_ga36f48c32837c7a70b424706e213dcd71"><div class="ttname"><a href="a00208.html#ga36f48c32837c7a70b424706e213dcd71">hwloc_get_shared_cache_covering_obj</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_shared_cache_covering_obj(hwloc_topology_t topology, hwloc_obj_t obj)</div><div class="ttdoc">Get the first data (or unified) cache shared between an object and somebody else.</div><div class="ttdef"><b>Definition:</b> helper.h:648</div></div>
734 <div class="ttc" id="aa00208_html_gac4cd480a5deaa4ada047fdd11ae4c070"><div class="ttname"><a href="a00208.html#gac4cd480a5deaa4ada047fdd11ae4c070">hwloc_get_cache_covering_cpuset</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_cache_covering_cpuset(hwloc_topology_t topology, hwloc_const_cpuset_t set)</div><div class="ttdoc">Get the first data (or unified) cache covering a cpuset set.</div><div class="ttdef"><b>Definition:</b> helper.h:630</div></div>
735 <div class="ttc" id="aa00208_html_gad108a09ce400222fe45545257d575489"><div class="ttname"><a href="a00208.html#gad108a09ce400222fe45545257d575489">hwloc_get_cache_type_depth</a></div><div class="ttdeci">static int hwloc_get_cache_type_depth(hwloc_topology_t topology, unsigned cachelevel, hwloc_obj_cache_type_t cachetype)</div><div class="ttdoc">Find the depth of cache objects matching cache level and type.</div><div class="ttdef"><b>Definition:</b> helper.h:594</div></div>
736 <div class="ttc" id="aa00209_html_ga050646458efc8ca1120d9f124c5ad861"><div class="ttname"><a href="a00209.html#ga050646458efc8ca1120d9f124c5ad861">hwloc_bitmap_singlify_per_core</a></div><div class="ttdeci">int hwloc_bitmap_singlify_per_core(hwloc_topology_t topology, hwloc_bitmap_t cpuset, unsigned which)</div><div class="ttdoc">Remove simultaneous multithreading PUs from a CPU set.</div></div>
737 <div class="ttc" id="aa00209_html_ga2cd22a34360643f7f5bad09576dec205"><div class="ttname"><a href="a00209.html#ga2cd22a34360643f7f5bad09576dec205">hwloc_get_closest_objs</a></div><div class="ttdeci">unsigned hwloc_get_closest_objs(hwloc_topology_t topology, hwloc_obj_t src, hwloc_obj_t *restrict objs, unsigned max)</div><div class="ttdoc">Do a depth-first traversal of the topology to find and sort.</div></div>
738 <div class="ttc" id="aa00209_html_ga751c238a4931db5cc0ca3181b7dd7479"><div class="ttname"><a href="a00209.html#ga751c238a4931db5cc0ca3181b7dd7479">hwloc_get_pu_obj_by_os_index</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_pu_obj_by_os_index(hwloc_topology_t topology, unsigned os_index)</div><div class="ttdoc">Returns the object of type HWLOC_OBJ_PU with os_index.</div><div class="ttdef"><b>Definition:</b> helper.h:705</div></div>
739 <div class="ttc" id="aa00209_html_ga7a0c1046851f7a88bd52f5a1d4ba0a97"><div class="ttname"><a href="a00209.html#ga7a0c1046851f7a88bd52f5a1d4ba0a97">hwloc_get_obj_below_by_type</a></div><div class="ttdeci">static 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)</div><div class="ttdoc">Find an object below another object, both specified by types and indexes.</div><div class="ttdef"><b>Definition:</b> helper.h:766</div></div>
740 <div class="ttc" id="aa00209_html_gab5df3ad1e8565ea0c2cf06412f6f6233"><div class="ttname"><a href="a00209.html#gab5df3ad1e8565ea0c2cf06412f6f6233">hwloc_get_obj_with_same_locality</a></div><div class="ttdeci">hwloc_obj_t hwloc_get_obj_with_same_locality(hwloc_topology_t topology, hwloc_obj_t src, hwloc_obj_type_t type, const char *subtype, const char *nameprefix, unsigned long flags)</div><div class="ttdoc">Return an object of a different type with same locality.</div></div>
741 <div class="ttc" id="aa00209_html_gab89d9ed9edfaa3dd526fb6ee1a1618ea"><div class="ttname"><a href="a00209.html#gab89d9ed9edfaa3dd526fb6ee1a1618ea">hwloc_get_numanode_obj_by_os_index</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_numanode_obj_by_os_index(hwloc_topology_t topology, unsigned os_index)</div><div class="ttdoc">Returns the object of type HWLOC_OBJ_NUMANODE with os_index.</div><div class="ttdef"><b>Definition:</b> helper.h:726</div></div>
742 <div class="ttc" id="aa00209_html_gacb51295ff3fbd3a96f990f20c6492b1d"><div class="ttname"><a href="a00209.html#gacb51295ff3fbd3a96f990f20c6492b1d">hwloc_get_obj_below_array_by_type</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_obj_below_array_by_type(hwloc_topology_t topology, int nr, hwloc_obj_type_t *typev, unsigned *idxv)</div><div class="ttdoc">Find an object below a chain of objects specified by types and indexes.</div><div class="ttdef"><b>Definition:</b> helper.h:798</div></div>
743 <div class="ttc" id="aa00210_html_ga7b0c28f797c2ff17fa2f244ebbd55b33"><div class="ttname"><a href="a00210.html#ga7b0c28f797c2ff17fa2f244ebbd55b33">hwloc_distrib</a></div><div class="ttdeci">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)</div><div class="ttdoc">Distribute n items over the topology under roots.</div><div class="ttdef"><b>Definition:</b> helper.h:894</div></div>
744 <div class="ttc" id="aa00210_html_ga8b835295a52b6768a5e6c8abb1f9c54d"><div class="ttname"><a href="a00210.html#ga8b835295a52b6768a5e6c8abb1f9c54d">hwloc_distrib_flags_e</a></div><div class="ttdeci">hwloc_distrib_flags_e</div><div class="ttdoc">Flags to be given to hwloc_distrib().</div><div class="ttdef"><b>Definition:</b> helper.h:863</div></div>
745 <div class="ttc" id="aa00210_html_gga8b835295a52b6768a5e6c8abb1f9c54da2ca08404bfbebe9ed5f34c3d7635425a"><div class="ttname"><a href="a00210.html#gga8b835295a52b6768a5e6c8abb1f9c54da2ca08404bfbebe9ed5f34c3d7635425a">HWLOC_DISTRIB_FLAG_REVERSE</a></div><div class="ttdeci">@ HWLOC_DISTRIB_FLAG_REVERSE</div><div class="ttdoc">Distrib in reverse order, starting from the last objects.</div><div class="ttdef"><b>Definition:</b> helper.h:867</div></div>
746 <div class="ttc" id="aa00211_html_ga21a4d7237a11e76b912ed4524ab78cbd"><div class="ttname"><a href="a00211.html#ga21a4d7237a11e76b912ed4524ab78cbd">hwloc_topology_get_allowed_nodeset</a></div><div class="ttdeci">hwloc_const_nodeset_t hwloc_topology_get_allowed_nodeset(hwloc_topology_t topology)</div><div class="ttdoc">Get allowed node set.</div></div>
747 <div class="ttc" id="aa00211_html_ga3fd37303e99ace8b0d0ea03f95f8c514"><div class="ttname"><a href="a00211.html#ga3fd37303e99ace8b0d0ea03f95f8c514">hwloc_topology_get_topology_nodeset</a></div><div class="ttdeci">hwloc_const_nodeset_t hwloc_topology_get_topology_nodeset(hwloc_topology_t topology)</div><div class="ttdoc">Get topology node set.</div></div>
748 <div class="ttc" id="aa00211_html_ga517d5d68ec9f24583d8933aab713be8e"><div class="ttname"><a href="a00211.html#ga517d5d68ec9f24583d8933aab713be8e">hwloc_topology_get_allowed_cpuset</a></div><div class="ttdeci">hwloc_const_cpuset_t hwloc_topology_get_allowed_cpuset(hwloc_topology_t topology)</div><div class="ttdoc">Get allowed CPU set.</div></div>
749 <div class="ttc" id="aa00211_html_ga773fd98949461ef4c1e3170bb0c0418f"><div class="ttname"><a href="a00211.html#ga773fd98949461ef4c1e3170bb0c0418f">hwloc_topology_get_complete_nodeset</a></div><div class="ttdeci">hwloc_const_nodeset_t hwloc_topology_get_complete_nodeset(hwloc_topology_t topology)</div><div class="ttdoc">Get complete node set.</div></div>
750 <div class="ttc" id="aa00211_html_ga79212faa07b70dd26588941b17d9fa82"><div class="ttname"><a href="a00211.html#ga79212faa07b70dd26588941b17d9fa82">hwloc_topology_get_topology_cpuset</a></div><div class="ttdeci">hwloc_const_cpuset_t hwloc_topology_get_topology_cpuset(hwloc_topology_t topology)</div><div class="ttdoc">Get topology CPU set.</div></div>
751 <div class="ttc" id="aa00211_html_gaee30e03391c1ed7dfd617fb5c7bbb033"><div class="ttname"><a href="a00211.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a></div><div class="ttdeci">hwloc_const_cpuset_t hwloc_topology_get_complete_cpuset(hwloc_topology_t topology)</div><div class="ttdoc">Get complete CPU set.</div></div>
752 <div class="ttc" id="aa00212_html_ga185751c1653fedbeb7cc480840f38cde"><div class="ttname"><a href="a00212.html#ga185751c1653fedbeb7cc480840f38cde">hwloc_cpuset_to_nodeset</a></div><div class="ttdeci">static int hwloc_cpuset_to_nodeset(hwloc_topology_t topology, hwloc_const_cpuset_t _cpuset, hwloc_nodeset_t nodeset)</div><div class="ttdoc">Convert a CPU set into a NUMA node set.</div><div class="ttdef"><b>Definition:</b> helper.h:1074</div></div>
753 <div class="ttc" id="aa00212_html_gad5ee8691e08a3538ea7633344c00456d"><div class="ttname"><a href="a00212.html#gad5ee8691e08a3538ea7633344c00456d">hwloc_cpuset_from_nodeset</a></div><div class="ttdeci">static int hwloc_cpuset_from_nodeset(hwloc_topology_t topology, hwloc_cpuset_t _cpuset, hwloc_const_nodeset_t nodeset)</div><div class="ttdoc">Convert a NUMA node set into a CPU set.</div><div class="ttdef"><b>Definition:</b> helper.h:1098</div></div>
754 <div class="ttc" id="aa00213_html_ga0d92a9462a3d317f29ecb4442a307fb1"><div class="ttname"><a href="a00213.html#ga0d92a9462a3d317f29ecb4442a307fb1">hwloc_bridge_covers_pcibus</a></div><div class="ttdeci">static int hwloc_bridge_covers_pcibus(hwloc_obj_t bridge, unsigned domain, unsigned bus)</div><div class="ttdef"><b>Definition:</b> helper.h:1212</div></div>
755 <div class="ttc" id="aa00213_html_ga23a978469353134b3104b846fe2efceb"><div class="ttname"><a href="a00213.html#ga23a978469353134b3104b846fe2efceb">hwloc_get_pcidev_by_busidstring</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_pcidev_by_busidstring(hwloc_topology_t topology, const char *busid)</div><div class="ttdoc">Find the PCI device object matching the PCI bus id given as a string xxxx:yy:zz.t or yy:zz....</div><div class="ttdef"><b>Definition:</b> helper.h:1175</div></div>
756 <div class="ttc" id="aa00213_html_ga66470dabce9db19a57c5940a909d0baa"><div class="ttname"><a href="a00213.html#ga66470dabce9db19a57c5940a909d0baa">hwloc_get_next_pcidev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_pcidev(hwloc_topology_t topology, hwloc_obj_t prev)</div><div class="ttdoc">Get the next PCI device in the system.</div><div class="ttdef"><b>Definition:</b> helper.h:1148</div></div>
757 <div class="ttc" id="aa00213_html_ga8b4584c8949e2c5f1c97ba7fe92b8145"><div class="ttname"><a href="a00213.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_osdev(hwloc_topology_t topology, hwloc_obj_t prev)</div><div class="ttdoc">Get the next OS device in the system.</div><div class="ttdef"><b>Definition:</b> helper.h:1194</div></div>
758 <div class="ttc" id="aa00213_html_ga9dba22a3f4f701f2a46780ba9a0bbbe7"><div class="ttname"><a href="a00213.html#ga9dba22a3f4f701f2a46780ba9a0bbbe7">hwloc_get_next_bridge</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_bridge(hwloc_topology_t topology, hwloc_obj_t prev)</div><div class="ttdoc">Get the next bridge in the system.</div><div class="ttdef"><b>Definition:</b> helper.h:1204</div></div>
759 <div class="ttc" id="aa00213_html_gacdbaf0db98872e224b7883a84bfb0455"><div class="ttname"><a href="a00213.html#gacdbaf0db98872e224b7883a84bfb0455">hwloc_get_pcidev_by_busid</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_pcidev_by_busid(hwloc_topology_t topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)</div><div class="ttdoc">Find the PCI device object matching the PCI bus id given domain, bus device and function PCI bus id.</div><div class="ttdef"><b>Definition:</b> helper.h:1157</div></div>
760 <div class="ttc" id="aa00213_html_gaf139bb61375178e90cc3f1835b452ab6"><div class="ttname"><a href="a00213.html#gaf139bb61375178e90cc3f1835b452ab6">hwloc_get_non_io_ancestor_obj</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_non_io_ancestor_obj(hwloc_topology_t topology, hwloc_obj_t ioobj)</div><div class="ttdoc">Get the first non-I/O ancestor object.</div><div class="ttdef"><b>Definition:</b> helper.h:1133</div></div>
761 <div class="ttc" id="aa00214_html_ga0200466842c0e1f5da75e84dde460b10"><div class="ttname"><a href="a00214.html#ga0200466842c0e1f5da75e84dde460b10">hwloc_bitmap_weight</a></div><div class="ttdeci">int hwloc_bitmap_weight(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Compute the &quot;weight&quot; of bitmap bitmap (i.e., number of indexes that are in the bitmap).</div></div>
762 <div class="ttc" id="aa00214_html_ga0526e03db81956fb02acc8260b66d6a4"><div class="ttname"><a href="a00214.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a></div><div class="ttdeci">int hwloc_bitmap_isincluded(hwloc_const_bitmap_t sub_bitmap, hwloc_const_bitmap_t super_bitmap)</div><div class="ttdoc">Test whether bitmap sub_bitmap is part of bitmap super_bitmap.</div></div>
763 <div class="ttc" id="aa00214_html_ga062dbff93baeff3b425a7260c5463646"><div class="ttname"><a href="a00214.html#ga062dbff93baeff3b425a7260c5463646">hwloc_bitmap_set</a></div><div class="ttdeci">int hwloc_bitmap_set(hwloc_bitmap_t bitmap, unsigned id)</div><div class="ttdoc">Add index id in bitmap bitmap.</div></div>
764 <div class="ttc" id="aa00214_html_ga11340dd487f110bb84f0a6e4ae90bd06"><div class="ttname"><a href="a00214.html#ga11340dd487f110bb84f0a6e4ae90bd06">hwloc_bitmap_isset</a></div><div class="ttdeci">int hwloc_bitmap_isset(hwloc_const_bitmap_t bitmap, unsigned id)</div><div class="ttdoc">Test whether index id is part of bitmap bitmap.</div></div>
765 <div class="ttc" id="aa00214_html_ga120b8aefb9ce7ef349929656359b1859"><div class="ttname"><a href="a00214.html#ga120b8aefb9ce7ef349929656359b1859">hwloc_bitmap_or</a></div><div class="ttdeci">int hwloc_bitmap_or(hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">Or bitmaps bitmap1 and bitmap2 and store the result in bitmap res.</div></div>
766 <div class="ttc" id="aa00214_html_ga32376b1405e57472b73c3aa53bb39663"><div class="ttname"><a href="a00214.html#ga32376b1405e57472b73c3aa53bb39663">hwloc_bitmap_isequal</a></div><div class="ttdeci">int hwloc_bitmap_isequal(hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">Test whether bitmap bitmap1 is equal to bitmap bitmap2.</div></div>
767 <div class="ttc" id="aa00214_html_ga5b64be28f5a7176ed8ad0d6a90bdf108"><div class="ttname"><a href="a00214.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a></div><div class="ttdeci">int hwloc_bitmap_iszero(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Test whether bitmap bitmap is empty.</div></div>
768 <div class="ttc" id="aa00214_html_gaa3c2bf4c776d603dcebbb61b0c923d84"><div class="ttname"><a href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a></div><div class="ttdeci">struct hwloc_bitmap_s * hwloc_bitmap_t</div><div class="ttdoc">Set of bits represented as an opaque pointer to an internal bitmap.</div><div class="ttdef"><b>Definition:</b> bitmap.h:68</div></div>
769 <div class="ttc" id="aa00214_html_gaa97c5217613c8cae9862287170ea2132"><div class="ttname"><a href="a00214.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a></div><div class="ttdeci">void hwloc_bitmap_zero(hwloc_bitmap_t bitmap)</div><div class="ttdoc">Empty the bitmap bitmap.</div></div>
770 <div class="ttc" id="aa00214_html_gae679434c1a5f41d3560a8a7e2c1b0dee"><div class="ttname"><a href="a00214.html#gae679434c1a5f41d3560a8a7e2c1b0dee">hwloc_bitmap_dup</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_bitmap_dup(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.</div></div>
771 <div class="ttc" id="aa00214_html_gaefa070f9232857ba5a57297ea9a08ea2"><div class="ttname"><a href="a00214.html#gaefa070f9232857ba5a57297ea9a08ea2">hwloc_bitmap_intersects</a></div><div class="ttdeci">int hwloc_bitmap_intersects(hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">Test whether bitmaps bitmap1 and bitmap2 intersects.</div></div>
772 <div class="ttc" id="aa00250_html"><div class="ttname"><a href="a00250.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:395</div></div>
773 <div class="ttc" id="aa00250_html_a04d05403da37bfe17cd63b7c7dd07b1f"><div class="ttname"><a href="a00250.html#a04d05403da37bfe17cd63b7c7dd07b1f">hwloc_obj::children</a></div><div class="ttdeci">struct hwloc_obj ** children</div><div class="ttdoc">Normal children, children[0 .. arity -1].</div><div class="ttdef"><b>Definition:</b> hwloc.h:455</div></div>
774 <div class="ttc" id="aa00250_html_a08f0d0e16c619a6e653526cbee4ffea3"><div class="ttname"><a href="a00250.html#a08f0d0e16c619a6e653526cbee4ffea3">hwloc_obj::nodeset</a></div><div class="ttdeci">hwloc_nodeset_t nodeset</div><div class="ttdoc">NUMA nodes covered by this object or containing this object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:539</div></div>
775 <div class="ttc" id="aa00250_html_a4876fd165b4fff35521f07ebd85355ed"><div class="ttname"><a href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">hwloc_obj::depth</a></div><div class="ttdeci">int depth</div><div class="ttdoc">Vertical index in the hierarchy.</div><div class="ttdef"><b>Definition:</b> hwloc.h:418</div></div>
776 <div class="ttc" id="aa00250_html_a57812a313fe9b1a9500489f47c3011cc"><div class="ttname"><a href="a00250.html#a57812a313fe9b1a9500489f47c3011cc">hwloc_obj::misc_first_child</a></div><div class="ttdeci">struct hwloc_obj * misc_first_child</div><div class="ttdoc">First Misc child. Misc objects are listed here (misc_arity and misc_first_child) instead of in the no...</div><div class="ttdef"><b>Definition:</b> hwloc.h:504</div></div>
777 <div class="ttc" id="aa00250_html_a5d4f97e76723a9ec8d38046f19e00d33"><div class="ttname"><a href="a00250.html#a5d4f97e76723a9ec8d38046f19e00d33">hwloc_obj::subtype</a></div><div class="ttdeci">char * subtype</div><div class="ttdoc">Subtype string to better describe the type field.</div><div class="ttdef"><b>Definition:</b> hwloc.h:398</div></div>
778 <div class="ttc" id="aa00250_html_a61a7a80a68eaccbaaa28269e678c81a9"><div class="ttname"><a href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">hwloc_obj::os_index</a></div><div class="ttdeci">unsigned os_index</div><div class="ttdoc">OS-provided physical index number. It is not guaranteed unique across the entire machine,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:400</div></div>
779 <div class="ttc" id="aa00250_html_a67925e0f2c47f50408fbdb9bddd0790f"><div class="ttname"><a href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">hwloc_obj::cpuset</a></div><div class="ttdeci">hwloc_cpuset_t cpuset</div><div class="ttdoc">CPUs covered by this object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:511</div></div>
780 <div class="ttc" id="aa00250_html_a7f2343ed476fe4942e6fffd4cade1b40"><div class="ttname"><a href="a00250.html#a7f2343ed476fe4942e6fffd4cade1b40">hwloc_obj::next_sibling</a></div><div class="ttdeci">struct hwloc_obj * next_sibling</div><div class="ttdoc">Next object below the same parent (inside the same list of children).</div><div class="ttdef"><b>Definition:</b> hwloc.h:447</div></div>
781 <div class="ttc" id="aa00250_html_a85a788017457129589318b6c39451acf"><div class="ttname"><a href="a00250.html#a85a788017457129589318b6c39451acf">hwloc_obj::next_cousin</a></div><div class="ttdeci">struct hwloc_obj * next_cousin</div><div class="ttdoc">Next object of same type and depth.</div><div class="ttdef"><b>Definition:</b> hwloc.h:441</div></div>
782 <div class="ttc" id="aa00250_html_a8d14c88e1ebc4ae67cc69f9e928558b3"><div class="ttname"><a href="a00250.html#a8d14c88e1ebc4ae67cc69f9e928558b3">hwloc_obj::io_first_child</a></div><div class="ttdeci">struct hwloc_obj * io_first_child</div><div class="ttdoc">First I/O child. Bridges, PCI and OS devices are listed here (io_arity and io_first_child) instead of...</div><div class="ttdef"><b>Definition:</b> hwloc.h:492</div></div>
783 <div class="ttc" id="aa00250_html_aac3f6da35c9b57599909a44ce2b716c1"><div class="ttname"><a href="a00250.html#aac3f6da35c9b57599909a44ce2b716c1">hwloc_obj::arity</a></div><div class="ttdeci">unsigned arity</div><div class="ttdoc">Number of normal children. Memory, Misc and I/O children are not listed here but rather in their dedi...</div><div class="ttdef"><b>Definition:</b> hwloc.h:451</div></div>
784 <div class="ttc" id="aa00250_html_ac0e8200dba25b90d5954bd4ec61f97d3"><div class="ttname"><a href="a00250.html#ac0e8200dba25b90d5954bd4ec61f97d3">hwloc_obj::memory_first_child</a></div><div class="ttdeci">struct hwloc_obj * memory_first_child</div><div class="ttdoc">First Memory child. NUMA nodes and Memory-side caches are listed here (memory_arity and memory_first_...</div><div class="ttdef"><b>Definition:</b> hwloc.h:474</div></div>
785 <div class="ttc" id="aa00250_html_ac715989f55ff5a0eb6be2969ee477ec0"><div class="ttname"><a href="a00250.html#ac715989f55ff5a0eb6be2969ee477ec0">hwloc_obj::prev_cousin</a></div><div class="ttdeci">struct hwloc_obj * prev_cousin</div><div class="ttdoc">Previous object of same type and depth.</div><div class="ttdef"><b>Definition:</b> hwloc.h:442</div></div>
786 <div class="ttc" id="aa00250_html_acc4f0803f244867e68fe0036800be5de"><div class="ttname"><a href="a00250.html#acc4f0803f244867e68fe0036800be5de">hwloc_obj::type</a></div><div class="ttdeci">hwloc_obj_type_t type</div><div class="ttdoc">Type of object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:397</div></div>
787 <div class="ttc" id="aa00250_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:414</div></div>
788 <div class="ttc" id="aa00250_html_adc494f6aed939992be1c55cca5822900"><div class="ttname"><a href="a00250.html#adc494f6aed939992be1c55cca5822900">hwloc_obj::parent</a></div><div class="ttdeci">struct hwloc_obj * parent</div><div class="ttdoc">Parent, NULL if root (Machine object)</div><div class="ttdef"><b>Definition:</b> hwloc.h:445</div></div>
789 <div class="ttc" id="aa00250_html_af51d08a0a79dba517c06c5afedc8d2dc"><div class="ttname"><a href="a00250.html#af51d08a0a79dba517c06c5afedc8d2dc">hwloc_obj::first_child</a></div><div class="ttdeci">struct hwloc_obj * first_child</div><div class="ttdoc">First normal child.</div><div class="ttdef"><b>Definition:</b> hwloc.h:456</div></div>
790 <div class="ttc" id="aa00254_html_a0b66da7ab072f7c016f8ed86701f5a7c"><div class="ttname"><a href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">hwloc_obj_attr_u::pcidev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_pcidev_attr_s pcidev</div></div>
791 <div class="ttc" id="aa00254_html_a207e6359497b7116d6f4baa9e8bbeb43"><div class="ttname"><a href="a00254.html#a207e6359497b7116d6f4baa9e8bbeb43">hwloc_obj_attr_u::bridge</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_bridge_attr_s bridge</div></div>
792 <div class="ttc" id="aa00254_html_a23f553f3252c9d13f2338231cd354ea9"><div class="ttname"><a href="a00254.html#a23f553f3252c9d13f2338231cd354ea9">hwloc_obj_attr_u::cache</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_cache_attr_s cache</div></div>
793 <div class="ttc" id="aa00266_html_a5c8f7f39193736c2187ed626940835d5"><div class="ttname"><a href="a00266.html#a5c8f7f39193736c2187ed626940835d5">hwloc_obj_attr_u::hwloc_cache_attr_s::depth</a></div><div class="ttdeci">unsigned depth</div><div class="ttdoc">Depth of cache (e.g., L1, L2, ...etc.)</div><div class="ttdef"><b>Definition:</b> hwloc.h:617</div></div>
794 <div class="ttc" id="aa00266_html_ad8edc8ded2b7a70d6abbc874801930f4"><div class="ttname"><a href="a00266.html#ad8edc8ded2b7a70d6abbc874801930f4">hwloc_obj_attr_u::hwloc_cache_attr_s::type</a></div><div class="ttdeci">hwloc_obj_cache_type_t type</div><div class="ttdoc">Cache type.</div><div class="ttdef"><b>Definition:</b> hwloc.h:621</div></div>
795 <div class="ttc" id="aa00274_html_a3d70c84a12f7e93d14c8d47bf4fd9dc5"><div class="ttname"><a href="a00274.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">hwloc_obj_attr_u::hwloc_pcidev_attr_s::dev</a></div><div class="ttdeci">unsigned char dev</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
796 <div class="ttc" id="aa00274_html_a695f32df53f4ef728670bfcf31b74e0f"><div class="ttname"><a href="a00274.html#a695f32df53f4ef728670bfcf31b74e0f">hwloc_obj_attr_u::hwloc_pcidev_attr_s::func</a></div><div class="ttdeci">unsigned char func</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
797 <div class="ttc" id="aa00274_html_a8fba44988deb98613c1505a4019a34dc"><div class="ttname"><a href="a00274.html#a8fba44988deb98613c1505a4019a34dc">hwloc_obj_attr_u::hwloc_pcidev_attr_s::domain</a></div><div class="ttdeci">unsigned short domain</div><div class="ttdef"><b>Definition:</b> hwloc.h:634</div></div>
798 <div class="ttc" id="aa00274_html_aae99e035e8d1387d7b8768aaa8eceb0a"><div class="ttname"><a href="a00274.html#aae99e035e8d1387d7b8768aaa8eceb0a">hwloc_obj_attr_u::hwloc_pcidev_attr_s::bus</a></div><div class="ttdeci">unsigned char bus</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
799 <div class="ttc" id="aa00278_html_a7d5db91d655ba23ffe9bda7a2cbcb9a8"><div class="ttname"><a href="a00278.html#a7d5db91d655ba23ffe9bda7a2cbcb9a8">hwloc_obj_attr_u::hwloc_bridge_attr_s::downstream</a></div><div class="ttdeci">union hwloc_obj_attr_u::hwloc_bridge_attr_s::@1 downstream</div></div>
800 <div class="ttc" id="aa00278_html_ab5c564e7c95b747dae9eb84ec0a2c31e"><div class="ttname"><a href="a00278.html#ab5c564e7c95b747dae9eb84ec0a2c31e">hwloc_obj_attr_u::hwloc_bridge_attr_s::pci</a></div><div class="ttdeci">struct hwloc_pcidev_attr_s pci</div><div class="ttdef"><b>Definition:</b> hwloc.h:647</div></div>
801 <div class="ttc" id="aa00278_html_ac6a169b672d0e9f75756fd5665828b93"><div class="ttname"><a href="a00278.html#ac6a169b672d0e9f75756fd5665828b93">hwloc_obj_attr_u::hwloc_bridge_attr_s::downstream_type</a></div><div class="ttdeci">hwloc_obj_bridge_type_t downstream_type</div><div class="ttdef"><b>Definition:</b> hwloc.h:660</div></div>
922802 </div><!-- fragment --></div><!-- contents -->
923803 <!-- start footer part -->
924804 <hr class="footer"/><address class="footer"><small>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): helper.h Source File</title>
7 <title>Hardware Locality (hwloc): bitmap.h Source File</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4343 </div><!-- top -->
4444 <div class="header">
4545 <div class="headertitle">
46 <div class="title">helper.h</div> </div>
46 <div class="title">bitmap.h</div> </div>
4747 </div><!--header-->
4848 <div class="contents">
4949 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
5050 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2009 CNRS</span></div>
5151 <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * Copyright © 2009-2020 Inria. All rights reserved.</span></div>
5252 <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Copyright © 2009-2012 Université Bordeaux</span></div>
53 <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.</span></div>
53 <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.</span></div>
5454 <div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
5555 <div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> */</span></div>
5656 <div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
57 <div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#ifndef HWLOC_HELPER_H</span></div>
58 <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#define HWLOC_HELPER_H</span></div>
57 <div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#ifndef HWLOC_BITMAP_H</span></div>
58 <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#define HWLOC_BITMAP_H</span></div>
5959 <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; </div>
60 <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#ifndef HWLOC_H</span></div>
61 <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#error Please include the main hwloc.h instead</span></div>
62 <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#endif</span></div>
60 <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &quot;hwloc/autogen/config.h&quot;</span></div>
61 <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; </div>
62 <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;assert.h&gt;</span></div>
6363 <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
64 <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;stdlib.h&gt;</span></div>
65 <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;errno.h&gt;</span></div>
66 <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
67 <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
68 <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
69 <div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
70 <div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#endif</span></div>
71 <div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
72 <div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
73 <div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
74 <div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="a00201.html#ga547325a4193dbc215d07c23097519d79"> 42</a></span>&#160;<a class="code" href="a00201.html#ga547325a4193dbc215d07c23097519d79">hwloc_get_first_largest_obj_inside_cpuset</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set)</div>
75 <div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;{</div>
76 <div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> obj = <a class="code" href="a00193.html#ga2d4b12fc187dfc53b35f2fa21d21044d">hwloc_get_root_obj</a>(topology);</div>
77 <div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00211.html#gaefa070f9232857ba5a57297ea9a08ea2">hwloc_bitmap_intersects</a>(obj-&gt;<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, set))</div>
78 <div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordflow">return</span> NULL;</div>
79 <div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">while</span> (!<a class="code" href="a00211.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a>(obj-&gt;<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, set)) {</div>
80 <div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="comment">/* while the object intersects without being included, look at its children */</span></div>
81 <div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> child = obj-&gt;<a class="code" href="a00244.html#af51d08a0a79dba517c06c5afedc8d2dc">first_child</a>;</div>
82 <div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">while</span> (child) {</div>
83 <div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00211.html#gaefa070f9232857ba5a57297ea9a08ea2">hwloc_bitmap_intersects</a>(child-&gt;<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, set))</div>
84 <div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">break</span>;</div>
85 <div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; child = child-&gt;<a class="code" href="a00244.html#a7f2343ed476fe4942e6fffd4cade1b40">next_sibling</a>;</div>
86 <div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; }</div>
87 <div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">if</span> (!child)</div>
88 <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="comment">/* no child intersects, return their father */</span></div>
89 <div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">return</span> obj;</div>
90 <div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="comment">/* found one intersecting child, look at its children */</span></div>
91 <div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; obj = child;</div>
92 <div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; }</div>
93 <div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="comment">/* obj is included, return it */</span></div>
94 <div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">return</span> obj;</div>
95 <div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;}</div>
96 <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; </div>
97 <div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="a00201.html#ga34ca563fa3a6a4e05268f36a87668511"> 69</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00201.html#ga34ca563fa3a6a4e05268f36a87668511">hwloc_get_largest_objs_inside_cpuset</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
98 <div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> * __hwloc_restrict objs, <span class="keywordtype">int</span> max);</div>
64 <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; </div>
65 <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
66 <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
67 <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#endif</span></div>
68 <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
69 <div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; </div>
70 <div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84"> 68</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>hwloc_bitmap_s * <a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>;</div>
71 <div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="a00214.html#gae991a108af01d408be2776c5b2c467b2"> 70</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keyword">struct </span>hwloc_bitmap_s * <a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>;</div>
9972 <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; </div>
100 <div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
101 <div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="a00201.html#ga63e3784e7c60fbae5073428cb98ac787"> 85</a></span>&#160;<a class="code" href="a00201.html#ga63e3784e7c60fbae5073428cb98ac787">hwloc_get_next_obj_inside_cpuset_by_depth</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
102 <div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordtype">int</span> depth, <a class="code" href="a00244.html">hwloc_obj_t</a> prev)</div>
103 <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;{</div>
104 <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> next = <a class="code" href="a00193.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a>(topology, depth, prev);</div>
105 <div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">if</span> (!next)</div>
106 <div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">return</span> NULL;</div>
107 <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">while</span> (next &amp;&amp; (<a class="code" href="a00211.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(next-&gt;<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>) || !<a class="code" href="a00211.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a>(next-&gt;<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, set)))</div>
108 <div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; next = next-&gt;<a class="code" href="a00244.html#a85a788017457129589318b6c39451acf">next_cousin</a>;</div>
109 <div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">return</span> next;</div>
110 <div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;}</div>
111 <div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; </div>
112 <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
113 <div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="a00201.html#gafe859176cf9233f215fea0e87cef47e7"> 109</a></span>&#160;<a class="code" href="a00201.html#gafe859176cf9233f215fea0e87cef47e7">hwloc_get_next_obj_inside_cpuset_by_type</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
114 <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, <a class="code" href="a00244.html">hwloc_obj_t</a> prev)</div>
115 <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;{</div>
116 <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordtype">int</span> depth = <a class="code" href="a00193.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, type);</div>
117 <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">if</span> (depth == <a class="code" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a> || depth == <a class="code" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c">HWLOC_TYPE_DEPTH_MULTIPLE</a>)</div>
118 <div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">return</span> NULL;</div>
119 <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">return</span> <a class="code" href="a00201.html#ga63e3784e7c60fbae5073428cb98ac787">hwloc_get_next_obj_inside_cpuset_by_depth</a>(topology, set, depth, prev);</div>
120 <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;}</div>
121 <div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; </div>
122 <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
123 <div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;<a class="code" href="a00201.html#gaec86f1f88832836e3f9338e246ea5862">hwloc_get_obj_inside_cpuset_by_depth</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
124 <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordtype">int</span> depth, <span class="keywordtype">unsigned</span> idx) __hwloc_attribute_pure;</div>
125 <div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
126 <div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="a00201.html#gaec86f1f88832836e3f9338e246ea5862"> 130</a></span>&#160;<a class="code" href="a00201.html#gaec86f1f88832836e3f9338e246ea5862">hwloc_get_obj_inside_cpuset_by_depth</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
127 <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordtype">int</span> depth, <span class="keywordtype">unsigned</span> idx)</div>
128 <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;{</div>
129 <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> obj = <a class="code" href="a00193.html#ga391f6b2613f0065673eaa4069b93d4e0">hwloc_get_obj_by_depth</a> (topology, depth, 0);</div>
130 <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordtype">unsigned</span> count = 0;</div>
131 <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">if</span> (!obj)</div>
132 <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">return</span> NULL;</div>
133 <div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">while</span> (obj) {</div>
134 <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00211.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(obj-&gt;<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>) &amp;&amp; <a class="code" href="a00211.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a>(obj-&gt;<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, set)) {</div>
135 <div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">if</span> (count == idx)</div>
136 <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">return</span> obj;</div>
137 <div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; count++;</div>
138 <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; }</div>
139 <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; obj = obj-&gt;<a class="code" href="a00244.html#a85a788017457129589318b6c39451acf">next_cousin</a>;</div>
140 <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; }</div>
141 <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">return</span> NULL;</div>
142 <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;}</div>
143 <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; </div>
144 <div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
145 <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;<a class="code" href="a00201.html#ga2edf924e5a0cca9cb22f65cc77c6ddb5">hwloc_get_obj_inside_cpuset_by_type</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
146 <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, <span class="keywordtype">unsigned</span> idx) __hwloc_attribute_pure;</div>
147 <div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
148 <div class="line"><a name="l00164"></a><span class="lineno"><a class="line" href="a00201.html#ga2edf924e5a0cca9cb22f65cc77c6ddb5"> 164</a></span>&#160;<a class="code" href="a00201.html#ga2edf924e5a0cca9cb22f65cc77c6ddb5">hwloc_get_obj_inside_cpuset_by_type</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
149 <div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, <span class="keywordtype">unsigned</span> idx)</div>
150 <div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;{</div>
151 <div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordtype">int</span> depth = <a class="code" href="a00193.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, type);</div>
152 <div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">if</span> (depth == <a class="code" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a> || depth == <a class="code" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c">HWLOC_TYPE_DEPTH_MULTIPLE</a>)</div>
153 <div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">return</span> NULL;</div>
154 <div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">return</span> <a class="code" href="a00201.html#gaec86f1f88832836e3f9338e246ea5862">hwloc_get_obj_inside_cpuset_by_depth</a>(topology, set, depth, idx);</div>
155 <div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;}</div>
156 <div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; </div>
157 <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">unsigned</span></div>
158 <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;<a class="code" href="a00201.html#gaa43c64512ddb33fd181990c4261cec7d">hwloc_get_nbobjs_inside_cpuset_by_depth</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
159 <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordtype">int</span> depth) __hwloc_attribute_pure;</div>
160 <div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">unsigned</span></div>
161 <div class="line"><a name="l00185"></a><span class="lineno"><a class="line" href="a00201.html#gaa43c64512ddb33fd181990c4261cec7d"> 185</a></span>&#160;<a class="code" href="a00201.html#gaa43c64512ddb33fd181990c4261cec7d">hwloc_get_nbobjs_inside_cpuset_by_depth</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
162 <div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keywordtype">int</span> depth)</div>
163 <div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160;{</div>
164 <div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> obj = <a class="code" href="a00193.html#ga391f6b2613f0065673eaa4069b93d4e0">hwloc_get_obj_by_depth</a> (topology, depth, 0);</div>
165 <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keywordtype">unsigned</span> count = 0;</div>
166 <div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">if</span> (!obj)</div>
167 <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordflow">return</span> 0;</div>
168 <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keywordflow">while</span> (obj) {</div>
169 <div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00211.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(obj-&gt;<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>) &amp;&amp; <a class="code" href="a00211.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a>(obj-&gt;<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, set))</div>
170 <div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; count++;</div>
171 <div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; obj = obj-&gt;<a class="code" href="a00244.html#a85a788017457129589318b6c39451acf">next_cousin</a>;</div>
172 <div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; }</div>
173 <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordflow">return</span> count;</div>
174 <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;}</div>
175 <div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; </div>
176 <div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
177 <div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;<a class="code" href="a00201.html#ga133c40415de008518608f8bff52a5ab9">hwloc_get_nbobjs_inside_cpuset_by_type</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
178 <div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type) __hwloc_attribute_pure;</div>
179 <div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
180 <div class="line"><a name="l00216"></a><span class="lineno"><a class="line" href="a00201.html#ga133c40415de008518608f8bff52a5ab9"> 216</a></span>&#160;<a class="code" href="a00201.html#ga133c40415de008518608f8bff52a5ab9">hwloc_get_nbobjs_inside_cpuset_by_type</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
181 <div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</div>
182 <div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;{</div>
183 <div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordtype">int</span> depth = <a class="code" href="a00193.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, type);</div>
184 <div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordflow">if</span> (depth == <a class="code" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a>)</div>
185 <div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordflow">return</span> 0;</div>
186 <div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">if</span> (depth == <a class="code" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c">HWLOC_TYPE_DEPTH_MULTIPLE</a>)</div>
187 <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">return</span> -1; <span class="comment">/* FIXME: agregate nbobjs from different levels? */</span></div>
188 <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">return</span> (<span class="keywordtype">int</span>) <a class="code" href="a00201.html#gaa43c64512ddb33fd181990c4261cec7d">hwloc_get_nbobjs_inside_cpuset_by_depth</a>(topology, set, depth);</div>
189 <div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;}</div>
190 <div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; </div>
191 <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
192 <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;<a class="code" href="a00201.html#ga4c3a20d61e9beb06c667b21688c772c5">hwloc_get_obj_index_inside_cpuset</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
193 <div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> obj) __hwloc_attribute_pure;</div>
194 <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
195 <div class="line"><a name="l00244"></a><span class="lineno"><a class="line" href="a00201.html#ga4c3a20d61e9beb06c667b21688c772c5"> 244</a></span>&#160;<a class="code" href="a00201.html#ga4c3a20d61e9beb06c667b21688c772c5">hwloc_get_obj_index_inside_cpuset</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
196 <div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> obj)</div>
197 <div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;{</div>
198 <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keywordtype">int</span> idx = 0;</div>
199 <div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00211.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a>(obj-&gt;<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, set))</div>
200 <div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keywordflow">return</span> -1;</div>
201 <div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="comment">/* count how many objects are inside the cpuset on the way from us to the beginning of the level */</span></div>
202 <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordflow">while</span> ((obj = obj-&gt;<a class="code" href="a00244.html#ac715989f55ff5a0eb6be2969ee477ec0">prev_cousin</a>) != NULL)</div>
203 <div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00211.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(obj-&gt;<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>) &amp;&amp; <a class="code" href="a00211.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a>(obj-&gt;<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, set))</div>
204 <div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; idx++;</div>
205 <div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keywordflow">return</span> idx;</div>
206 <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;}</div>
73 <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; </div>
74 <div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="comment">/*</span></div>
75 <div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment"> * Bitmap allocation, freeing and copying.</span></div>
76 <div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="comment"> */</span></div>
77 <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; </div>
78 <div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="a00214.html#gadece3d1eb5199fc2fb99bc7dcf1ccc05"> 84</a></span>&#160;HWLOC_DECLSPEC <a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> <a class="code" href="a00214.html#gadece3d1eb5199fc2fb99bc7dcf1ccc05">hwloc_bitmap_alloc</a>(<span class="keywordtype">void</span>) __hwloc_attribute_malloc;</div>
79 <div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; </div>
80 <div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="a00214.html#ga02853b4a224970587b9d7a0e20d857c0"> 87</a></span>&#160;HWLOC_DECLSPEC <a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> <a class="code" href="a00214.html#ga02853b4a224970587b9d7a0e20d857c0">hwloc_bitmap_alloc_full</a>(<span class="keywordtype">void</span>) __hwloc_attribute_malloc;</div>
81 <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; </div>
82 <div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="a00214.html#ga156130d85b3a0674d6e0e6770fe68fbe"> 93</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> <a class="code" href="a00214.html#ga156130d85b3a0674d6e0e6770fe68fbe">hwloc_bitmap_free</a>(<a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap);</div>
83 <div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; </div>
84 <div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="a00214.html#gae679434c1a5f41d3560a8a7e2c1b0dee"> 99</a></span>&#160;HWLOC_DECLSPEC <a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> <a class="code" href="a00214.html#gae679434c1a5f41d3560a8a7e2c1b0dee">hwloc_bitmap_dup</a>(<a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap) __hwloc_attribute_malloc;</div>
85 <div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; </div>
86 <div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="a00214.html#ga72a29824798b48784b8217471ec8f14c"> 102</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(<a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> dst, <a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> src);</div>
87 <div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; </div>
88 <div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; </div>
89 <div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="comment">/*</span></div>
90 <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;<span class="comment"> * Bitmap/String Conversion</span></div>
91 <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="comment"> */</span></div>
92 <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; </div>
93 <div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="a00214.html#ga9511644657030a021dce9941e3cda583"> 118</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#ga9511644657030a021dce9941e3cda583">hwloc_bitmap_snprintf</a>(<span class="keywordtype">char</span> * __hwloc_restrict buf, <span class="keywordtype">size_t</span> buflen, <a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap);</div>
94 <div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; </div>
95 <div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="a00214.html#ga0fece972134fdecf2da9bc7a11dd827e"> 124</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#ga0fece972134fdecf2da9bc7a11dd827e">hwloc_bitmap_asprintf</a>(<span class="keywordtype">char</span> ** strp, <a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap);</div>
96 <div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; </div>
97 <div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="a00214.html#ga064a85c643a364b60acbfa0f3663fc18"> 128</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#ga064a85c643a364b60acbfa0f3663fc18">hwloc_bitmap_sscanf</a>(<a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keyword">const</span> <span class="keywordtype">char</span> * __hwloc_restrict <span class="keywordtype">string</span>);</div>
98 <div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; </div>
99 <div class="line"><a name="l00143"></a><span class="lineno"><a class="line" href="a00214.html#ga3d06e6447edeb61e56a9ad83f31f0a37"> 143</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#ga3d06e6447edeb61e56a9ad83f31f0a37">hwloc_bitmap_list_snprintf</a>(<span class="keywordtype">char</span> * __hwloc_restrict buf, <span class="keywordtype">size_t</span> buflen, <a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap);</div>
100 <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; </div>
101 <div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="a00214.html#ga39c0f1b02053de66d205c9f8260b3665"> 149</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#ga39c0f1b02053de66d205c9f8260b3665">hwloc_bitmap_list_asprintf</a>(<span class="keywordtype">char</span> ** strp, <a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap);</div>
102 <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; </div>
103 <div class="line"><a name="l00153"></a><span class="lineno"><a class="line" href="a00214.html#gaf9314311d482c621e17c6a53a9fe993e"> 153</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#gaf9314311d482c621e17c6a53a9fe993e">hwloc_bitmap_list_sscanf</a>(<a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keyword">const</span> <span class="keywordtype">char</span> * __hwloc_restrict <span class="keywordtype">string</span>);</div>
104 <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; </div>
105 <div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="a00214.html#ga5beb68a987fe48e5c5edef06ab260e14"> 167</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#ga5beb68a987fe48e5c5edef06ab260e14">hwloc_bitmap_taskset_snprintf</a>(<span class="keywordtype">char</span> * __hwloc_restrict buf, <span class="keywordtype">size_t</span> buflen, <a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap);</div>
106 <div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; </div>
107 <div class="line"><a name="l00173"></a><span class="lineno"><a class="line" href="a00214.html#ga391312513f17c985d871f18367c59512"> 173</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#ga391312513f17c985d871f18367c59512">hwloc_bitmap_taskset_asprintf</a>(<span class="keywordtype">char</span> ** strp, <a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap);</div>
108 <div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; </div>
109 <div class="line"><a name="l00177"></a><span class="lineno"><a class="line" href="a00214.html#ga4f23db5041240e03e348752f8bd6ec2d"> 177</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#ga4f23db5041240e03e348752f8bd6ec2d">hwloc_bitmap_taskset_sscanf</a>(<a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keyword">const</span> <span class="keywordtype">char</span> * __hwloc_restrict <span class="keywordtype">string</span>);</div>
110 <div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; </div>
111 <div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; </div>
112 <div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;<span class="comment">/*</span></div>
113 <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;<span class="comment"> * Building bitmaps.</span></div>
114 <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;<span class="comment"> */</span></div>
115 <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; </div>
116 <div class="line"><a name="l00185"></a><span class="lineno"><a class="line" href="a00214.html#gaa97c5217613c8cae9862287170ea2132"> 185</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> <a class="code" href="a00214.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a>(<a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap);</div>
117 <div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; </div>
118 <div class="line"><a name="l00188"></a><span class="lineno"><a class="line" href="a00214.html#ga07b2de8786b3cdb22f21d9dd42588275"> 188</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> <a class="code" href="a00214.html#ga07b2de8786b3cdb22f21d9dd42588275">hwloc_bitmap_fill</a>(<a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap);</div>
119 <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; </div>
120 <div class="line"><a name="l00191"></a><span class="lineno"><a class="line" href="a00214.html#ga10be0840cdeb7ce26d862819dd303baa"> 191</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#ga10be0840cdeb7ce26d862819dd303baa">hwloc_bitmap_only</a>(<a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> <span class="keywordtype">id</span>);</div>
121 <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; </div>
122 <div class="line"><a name="l00194"></a><span class="lineno"><a class="line" href="a00214.html#ga06d505f8a1c0a536614f65f503ee6d93"> 194</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#ga06d505f8a1c0a536614f65f503ee6d93">hwloc_bitmap_allbut</a>(<a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> <span class="keywordtype">id</span>);</div>
123 <div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; </div>
124 <div class="line"><a name="l00197"></a><span class="lineno"><a class="line" href="a00214.html#gad59b0ebeb29c1bfabbb2a379e55c1159"> 197</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#gad59b0ebeb29c1bfabbb2a379e55c1159">hwloc_bitmap_from_ulong</a>(<a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> mask);</div>
125 <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; </div>
126 <div class="line"><a name="l00200"></a><span class="lineno"><a class="line" href="a00214.html#ga4947c46d47bcfcd3faf3f59569be3e37"> 200</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#ga4947c46d47bcfcd3faf3f59569be3e37">hwloc_bitmap_from_ith_ulong</a>(<a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> i, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> mask);</div>
127 <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; </div>
128 <div class="line"><a name="l00203"></a><span class="lineno"><a class="line" href="a00214.html#gabcfef22f6fc4d4b33f068dd91a1c38f5"> 203</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#gabcfef22f6fc4d4b33f068dd91a1c38f5">hwloc_bitmap_from_ulongs</a>(<a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> nr, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *masks);</div>
129 <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; </div>
130 <div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; </div>
131 <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;<span class="comment">/*</span></div>
132 <div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;<span class="comment"> * Modifying bitmaps.</span></div>
133 <div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;<span class="comment"> */</span></div>
134 <div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; </div>
135 <div class="line"><a name="l00211"></a><span class="lineno"><a class="line" href="a00214.html#ga062dbff93baeff3b425a7260c5463646"> 211</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#ga062dbff93baeff3b425a7260c5463646">hwloc_bitmap_set</a>(<a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> <span class="keywordtype">id</span>);</div>
136 <div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; </div>
137 <div class="line"><a name="l00217"></a><span class="lineno"><a class="line" href="a00214.html#ga9c9a8433732fb9f24899e7aa4c014d7e"> 217</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#ga9c9a8433732fb9f24899e7aa4c014d7e">hwloc_bitmap_set_range</a>(<a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> begin, <span class="keywordtype">int</span> end);</div>
138 <div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; </div>
139 <div class="line"><a name="l00220"></a><span class="lineno"><a class="line" href="a00214.html#ga3daeed965c35c6d2fd4820a318219985"> 220</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#ga3daeed965c35c6d2fd4820a318219985">hwloc_bitmap_set_ith_ulong</a>(<a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> i, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> mask);</div>
140 <div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; </div>
141 <div class="line"><a name="l00223"></a><span class="lineno"><a class="line" href="a00214.html#gaf20bb350b6844d08931a064a73f86743"> 223</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#gaf20bb350b6844d08931a064a73f86743">hwloc_bitmap_clr</a>(<a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> <span class="keywordtype">id</span>);</div>
142 <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; </div>
143 <div class="line"><a name="l00229"></a><span class="lineno"><a class="line" href="a00214.html#ga833776709df94d727f8c22304b3388cf"> 229</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#ga833776709df94d727f8c22304b3388cf">hwloc_bitmap_clr_range</a>(<a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> begin, <span class="keywordtype">int</span> end);</div>
144 <div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; </div>
145 <div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="a00214.html#gaa611a77c092e679246afdf9a60d5db8b"> 250</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#gaa611a77c092e679246afdf9a60d5db8b">hwloc_bitmap_singlify</a>(<a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap);</div>
146 <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; </div>
147 <div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; </div>
148 <div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;<span class="comment">/*</span></div>
149 <div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;<span class="comment"> * Consulting bitmaps.</span></div>
150 <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;<span class="comment"> */</span></div>
207151 <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; </div>
208 <div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
209 <div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;<a class="code" href="a00202.html#ga0e66aa2dc6b2527cfd10723af646c9d7">hwloc_get_child_covering_cpuset</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
210 <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> parent) __hwloc_attribute_pure;</div>
211 <div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
212 <div class="line"><a name="l00275"></a><span class="lineno"><a class="line" href="a00202.html#ga0e66aa2dc6b2527cfd10723af646c9d7"> 275</a></span>&#160;<a class="code" href="a00202.html#ga0e66aa2dc6b2527cfd10723af646c9d7">hwloc_get_child_covering_cpuset</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
213 <div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> parent)</div>
214 <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;{</div>
215 <div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> child;</div>
216 <div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00211.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(set))</div>
217 <div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">return</span> NULL;</div>
218 <div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; child = parent-&gt;<a class="code" href="a00244.html#af51d08a0a79dba517c06c5afedc8d2dc">first_child</a>;</div>
219 <div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">while</span> (child) {</div>
220 <div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keywordflow">if</span> (child-&gt;<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a> &amp;&amp; <a class="code" href="a00211.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a>(set, child-&gt;<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>))</div>
221 <div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keywordflow">return</span> child;</div>
222 <div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; child = child-&gt;<a class="code" href="a00244.html#a7f2343ed476fe4942e6fffd4cade1b40">next_sibling</a>;</div>
223 <div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; }</div>
224 <div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordflow">return</span> NULL;</div>
225 <div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;}</div>
226 <div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; </div>
227 <div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
228 <div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;<a class="code" href="a00202.html#ga41acdcdbb8b95d70ecf6c572a3f67dca">hwloc_get_obj_covering_cpuset</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set) __hwloc_attribute_pure;</div>
229 <div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
230 <div class="line"><a name="l00297"></a><span class="lineno"><a class="line" href="a00202.html#ga41acdcdbb8b95d70ecf6c572a3f67dca"> 297</a></span>&#160;<a class="code" href="a00202.html#ga41acdcdbb8b95d70ecf6c572a3f67dca">hwloc_get_obj_covering_cpuset</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set)</div>
231 <div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;{</div>
232 <div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keyword">struct </span><a class="code" href="a00244.html">hwloc_obj</a> *current = <a class="code" href="a00193.html#ga2d4b12fc187dfc53b35f2fa21d21044d">hwloc_get_root_obj</a>(topology);</div>
233 <div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00211.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(set) || !<a class="code" href="a00211.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a>(set, current-&gt;<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>))</div>
234 <div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keywordflow">return</span> NULL;</div>
235 <div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keywordflow">while</span> (1) {</div>
236 <div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> child = <a class="code" href="a00202.html#ga0e66aa2dc6b2527cfd10723af646c9d7">hwloc_get_child_covering_cpuset</a>(topology, set, current);</div>
237 <div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <span class="keywordflow">if</span> (!child)</div>
238 <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keywordflow">return</span> current;</div>
239 <div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; current = child;</div>
240 <div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; }</div>
241 <div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;}</div>
242 <div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; </div>
243 <div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
244 <div class="line"><a name="l00321"></a><span class="lineno"><a class="line" href="a00202.html#gaba4b6d86eba1169ced4b0e941d2bb5f0"> 321</a></span>&#160;<a class="code" href="a00202.html#gaba4b6d86eba1169ced4b0e941d2bb5f0">hwloc_get_next_obj_covering_cpuset_by_depth</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
245 <div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keywordtype">int</span> <a class="code" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>, <a class="code" href="a00244.html">hwloc_obj_t</a> prev)</div>
246 <div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;{</div>
247 <div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> next = <a class="code" href="a00193.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a>(topology, <a class="code" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>, prev);</div>
248 <div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordflow">if</span> (!next)</div>
249 <div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordflow">return</span> NULL;</div>
250 <div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keywordflow">while</span> (next &amp;&amp; !<a class="code" href="a00211.html#gaefa070f9232857ba5a57297ea9a08ea2">hwloc_bitmap_intersects</a>(set, next-&gt;<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>))</div>
251 <div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; next = next-&gt;<a class="code" href="a00244.html#a85a788017457129589318b6c39451acf">next_cousin</a>;</div>
252 <div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keywordflow">return</span> next;</div>
253 <div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160;}</div>
254 <div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; </div>
255 <div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
256 <div class="line"><a name="l00348"></a><span class="lineno"><a class="line" href="a00202.html#ga91cfae08b092e7966002e15d1e987213"> 348</a></span>&#160;<a class="code" href="a00202.html#ga91cfae08b092e7966002e15d1e987213">hwloc_get_next_obj_covering_cpuset_by_type</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set,</div>
257 <div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00244.html#acc4f0803f244867e68fe0036800be5de">type</a>, <a class="code" href="a00244.html">hwloc_obj_t</a> prev)</div>
258 <div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160;{</div>
259 <div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordtype">int</span> <a class="code" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> = <a class="code" href="a00193.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00244.html#acc4f0803f244867e68fe0036800be5de">type</a>);</div>
260 <div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> == <a class="code" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a> || <a class="code" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> == <a class="code" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c">HWLOC_TYPE_DEPTH_MULTIPLE</a>)</div>
261 <div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keywordflow">return</span> NULL;</div>
262 <div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordflow">return</span> <a class="code" href="a00202.html#gaba4b6d86eba1169ced4b0e941d2bb5f0">hwloc_get_next_obj_covering_cpuset_by_depth</a>(topology, set, <a class="code" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>, prev);</div>
263 <div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160;}</div>
264 <div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; </div>
265 <div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
266 <div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160;<a class="code" href="a00203.html#ga9f8c93fde236e9642a96957af01a11cb">hwloc_get_ancestor_obj_by_depth</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <span class="keywordtype">int</span> <a class="code" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>, <a class="code" href="a00244.html">hwloc_obj_t</a> obj) __hwloc_attribute_pure;</div>
267 <div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
268 <div class="line"><a name="l00380"></a><span class="lineno"><a class="line" href="a00203.html#ga9f8c93fde236e9642a96957af01a11cb"> 380</a></span>&#160;<a class="code" href="a00203.html#ga9f8c93fde236e9642a96957af01a11cb">hwloc_get_ancestor_obj_by_depth</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <span class="keywordtype">int</span> <a class="code" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>, <a class="code" href="a00244.html">hwloc_obj_t</a> obj)</div>
269 <div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160;{</div>
270 <div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> ancestor = obj;</div>
271 <div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordflow">if</span> (obj-&gt;<a class="code" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> &lt; <a class="code" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>)</div>
272 <div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keywordflow">return</span> NULL;</div>
273 <div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="keywordflow">while</span> (ancestor &amp;&amp; ancestor-&gt;<a class="code" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> &gt; <a class="code" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>)</div>
274 <div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; ancestor = ancestor-&gt;<a class="code" href="a00244.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
275 <div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keywordflow">return</span> ancestor;</div>
276 <div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160;}</div>
277 <div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; </div>
278 <div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
279 <div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160;<a class="code" href="a00203.html#ga70f0c7583291da707c15ae4daa850f41">hwloc_get_ancestor_obj_by_type</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00244.html#acc4f0803f244867e68fe0036800be5de">type</a>, <a class="code" href="a00244.html">hwloc_obj_t</a> obj) __hwloc_attribute_pure;</div>
280 <div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
281 <div class="line"><a name="l00400"></a><span class="lineno"><a class="line" href="a00203.html#ga70f0c7583291da707c15ae4daa850f41"> 400</a></span>&#160;<a class="code" href="a00203.html#ga70f0c7583291da707c15ae4daa850f41">hwloc_get_ancestor_obj_by_type</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00244.html#acc4f0803f244867e68fe0036800be5de">type</a>, <a class="code" href="a00244.html">hwloc_obj_t</a> obj)</div>
282 <div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160;{</div>
283 <div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> ancestor = obj-&gt;<a class="code" href="a00244.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
284 <div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keywordflow">while</span> (ancestor &amp;&amp; ancestor-&gt;<a class="code" href="a00244.html#acc4f0803f244867e68fe0036800be5de">type</a> != <a class="code" href="a00244.html#acc4f0803f244867e68fe0036800be5de">type</a>)</div>
285 <div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; ancestor = ancestor-&gt;<a class="code" href="a00244.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
286 <div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="keywordflow">return</span> ancestor;</div>
287 <div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160;}</div>
288 <div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; </div>
289 <div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
290 <div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160;<a class="code" href="a00203.html#gab1fa883021928b5c476911c4102e9be3">hwloc_get_common_ancestor_obj</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00244.html">hwloc_obj_t</a> obj1, <a class="code" href="a00244.html">hwloc_obj_t</a> obj2) __hwloc_attribute_pure;</div>
291 <div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
292 <div class="line"><a name="l00412"></a><span class="lineno"><a class="line" href="a00203.html#gab1fa883021928b5c476911c4102e9be3"> 412</a></span>&#160;<a class="code" href="a00203.html#gab1fa883021928b5c476911c4102e9be3">hwloc_get_common_ancestor_obj</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00244.html">hwloc_obj_t</a> obj1, <a class="code" href="a00244.html">hwloc_obj_t</a> obj2)</div>
293 <div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160;{</div>
294 <div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="comment">/* the loop isn&#39;t so easy since intermediate ancestors may have</span></div>
295 <div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;<span class="comment"> * different depth, causing us to alternate between using obj1-&gt;parent</span></div>
296 <div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160;<span class="comment"> * and obj2-&gt;parent. Also, even if at some point we find ancestors of</span></div>
297 <div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160;<span class="comment"> * of the same depth, their ancestors may have different depth again.</span></div>
298 <div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160;<span class="comment"> */</span></div>
299 <div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="keywordflow">while</span> (obj1 != obj2) {</div>
300 <div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="keywordflow">while</span> (obj1-&gt;<a class="code" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> &gt; obj2-&gt;<a class="code" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>)</div>
301 <div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; obj1 = obj1-&gt;<a class="code" href="a00244.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
302 <div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keywordflow">while</span> (obj2-&gt;<a class="code" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> &gt; obj1-&gt;<a class="code" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>)</div>
303 <div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; obj2 = obj2-&gt;<a class="code" href="a00244.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
304 <div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">if</span> (obj1 != obj2 &amp;&amp; obj1-&gt;<a class="code" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> == obj2-&gt;<a class="code" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>) {</div>
305 <div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; obj1 = obj1-&gt;<a class="code" href="a00244.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
306 <div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; obj2 = obj2-&gt;<a class="code" href="a00244.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
307 <div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; }</div>
308 <div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; }</div>
309 <div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="keywordflow">return</span> obj1;</div>
310 <div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160;}</div>
311 <div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; </div>
312 <div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
313 <div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160;<a class="code" href="a00203.html#ga408cf74f5bf9ed497911a320c7f8cc56">hwloc_obj_is_in_subtree</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00244.html">hwloc_obj_t</a> obj, <a class="code" href="a00244.html">hwloc_obj_t</a> subtree_root) __hwloc_attribute_pure;</div>
314 <div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
315 <div class="line"><a name="l00440"></a><span class="lineno"><a class="line" href="a00203.html#ga408cf74f5bf9ed497911a320c7f8cc56"> 440</a></span>&#160;<a class="code" href="a00203.html#ga408cf74f5bf9ed497911a320c7f8cc56">hwloc_obj_is_in_subtree</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00244.html">hwloc_obj_t</a> obj, <a class="code" href="a00244.html">hwloc_obj_t</a> subtree_root)</div>
316 <div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160;{</div>
317 <div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keywordflow">return</span> obj-&gt;<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a> &amp;&amp; subtree_root-&gt;<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a> &amp;&amp; <a class="code" href="a00211.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a>(obj-&gt;<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, subtree_root-&gt;<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>);</div>
318 <div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160;}</div>
319 <div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; </div>
320 <div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
321 <div class="line"><a name="l00456"></a><span class="lineno"><a class="line" href="a00203.html#ga12d8565a3436c565e791ed02a0353621"> 456</a></span>&#160;<a class="code" href="a00203.html#ga12d8565a3436c565e791ed02a0353621">hwloc_get_next_child</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00244.html">hwloc_obj_t</a> <a class="code" href="a00244.html#adc494f6aed939992be1c55cca5822900">parent</a>, <a class="code" href="a00244.html">hwloc_obj_t</a> prev)</div>
322 <div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160;{</div>
323 <div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> obj;</div>
324 <div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <span class="keywordtype">int</span> state = 0;</div>
325 <div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <span class="keywordflow">if</span> (prev) {</div>
326 <div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="keywordflow">if</span> (prev-&gt;<a class="code" href="a00244.html#acc4f0803f244867e68fe0036800be5de">type</a> == <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a19f8a6953fa91efc76bcbcdf2d22de4d">HWLOC_OBJ_MISC</a>)</div>
327 <div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; state = 3;</div>
328 <div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (prev-&gt;<a class="code" href="a00244.html#acc4f0803f244867e68fe0036800be5de">type</a> == <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0">HWLOC_OBJ_BRIDGE</a> || prev-&gt;<a class="code" href="a00244.html#acc4f0803f244867e68fe0036800be5de">type</a> == <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a> || prev-&gt;<a class="code" href="a00244.html#acc4f0803f244867e68fe0036800be5de">type</a> == <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075">HWLOC_OBJ_OS_DEVICE</a>)</div>
329 <div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; state = 2;</div>
330 <div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (prev-&gt;<a class="code" href="a00244.html#acc4f0803f244867e68fe0036800be5de">type</a> == <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>)</div>
331 <div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; state = 1;</div>
332 <div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; obj = prev-&gt;<a class="code" href="a00244.html#a7f2343ed476fe4942e6fffd4cade1b40">next_sibling</a>;</div>
333 <div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; } <span class="keywordflow">else</span> {</div>
334 <div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; obj = <a class="code" href="a00244.html#adc494f6aed939992be1c55cca5822900">parent</a>-&gt;<a class="code" href="a00244.html#af51d08a0a79dba517c06c5afedc8d2dc">first_child</a>;</div>
335 <div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; }</div>
336 <div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="keywordflow">if</span> (!obj &amp;&amp; state == 0) {</div>
337 <div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; obj = <a class="code" href="a00244.html#adc494f6aed939992be1c55cca5822900">parent</a>-&gt;<a class="code" href="a00244.html#ac0e8200dba25b90d5954bd4ec61f97d3">memory_first_child</a>;</div>
338 <div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; state = 1;</div>
339 <div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; }</div>
340 <div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="keywordflow">if</span> (!obj &amp;&amp; state == 1) {</div>
341 <div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; obj = <a class="code" href="a00244.html#adc494f6aed939992be1c55cca5822900">parent</a>-&gt;<a class="code" href="a00244.html#a8d14c88e1ebc4ae67cc69f9e928558b3">io_first_child</a>;</div>
342 <div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; state = 2;</div>
343 <div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; }</div>
344 <div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <span class="keywordflow">if</span> (!obj &amp;&amp; state == 2) {</div>
345 <div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; obj = <a class="code" href="a00244.html#adc494f6aed939992be1c55cca5822900">parent</a>-&gt;<a class="code" href="a00244.html#a57812a313fe9b1a9500489f47c3011cc">misc_first_child</a>;</div>
346 <div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; state = 3;</div>
347 <div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; }</div>
348 <div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <span class="keywordflow">return</span> obj;</div>
349 <div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160;}</div>
152 <div class="line"><a name="l00258"></a><span class="lineno"><a class="line" href="a00214.html#gab6a6bae22a33ec6adfc169a953c13e6c"> 258</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="a00214.html#gab6a6bae22a33ec6adfc169a953c13e6c">hwloc_bitmap_to_ulong</a>(<a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap) __hwloc_attribute_pure;</div>
153 <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; </div>
154 <div class="line"><a name="l00261"></a><span class="lineno"><a class="line" href="a00214.html#gac92e6404f648d6b99d2c626b05b2ffa4"> 261</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="a00214.html#gac92e6404f648d6b99d2c626b05b2ffa4">hwloc_bitmap_to_ith_ulong</a>(<a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> i) __hwloc_attribute_pure;</div>
155 <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; </div>
156 <div class="line"><a name="l00269"></a><span class="lineno"><a class="line" href="a00214.html#gacd215a2348732de25d94a4ecd76d528c"> 269</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#gacd215a2348732de25d94a4ecd76d528c">hwloc_bitmap_to_ulongs</a>(<a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> nr, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *masks);</div>
157 <div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; </div>
158 <div class="line"><a name="l00284"></a><span class="lineno"><a class="line" href="a00214.html#gac0744734d761d65c977aece565364908"> 284</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#gac0744734d761d65c977aece565364908">hwloc_bitmap_nr_ulongs</a>(<a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap) __hwloc_attribute_pure;</div>
159 <div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; </div>
160 <div class="line"><a name="l00290"></a><span class="lineno"><a class="line" href="a00214.html#ga11340dd487f110bb84f0a6e4ae90bd06"> 290</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#ga11340dd487f110bb84f0a6e4ae90bd06">hwloc_bitmap_isset</a>(<a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> <span class="keywordtype">id</span>) __hwloc_attribute_pure;</div>
161 <div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; </div>
162 <div class="line"><a name="l00296"></a><span class="lineno"><a class="line" href="a00214.html#ga5b64be28f5a7176ed8ad0d6a90bdf108"> 296</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(<a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap) __hwloc_attribute_pure;</div>
163 <div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; </div>
164 <div class="line"><a name="l00304"></a><span class="lineno"><a class="line" href="a00214.html#ga5fdcb8c19c336511c37076d649e74af4"> 304</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#ga5fdcb8c19c336511c37076d649e74af4">hwloc_bitmap_isfull</a>(<a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap) __hwloc_attribute_pure;</div>
165 <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; </div>
166 <div class="line"><a name="l00310"></a><span class="lineno"><a class="line" href="a00214.html#ga3ec1ced43afadf8c0a7197320bc016ed"> 310</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#ga3ec1ced43afadf8c0a7197320bc016ed">hwloc_bitmap_first</a>(<a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap) __hwloc_attribute_pure;</div>
167 <div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; </div>
168 <div class="line"><a name="l00318"></a><span class="lineno"><a class="line" href="a00214.html#gaab7240b4b644693b775dad17b44ffd68"> 318</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#gaab7240b4b644693b775dad17b44ffd68">hwloc_bitmap_next</a>(<a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap, <span class="keywordtype">int</span> prev) __hwloc_attribute_pure;</div>
169 <div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; </div>
170 <div class="line"><a name="l00324"></a><span class="lineno"><a class="line" href="a00214.html#ga3d9b08b060a59bbab5a4ea6d0a1ed7a6"> 324</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#ga3d9b08b060a59bbab5a4ea6d0a1ed7a6">hwloc_bitmap_last</a>(<a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap) __hwloc_attribute_pure;</div>
171 <div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; </div>
172 <div class="line"><a name="l00333"></a><span class="lineno"><a class="line" href="a00214.html#ga0200466842c0e1f5da75e84dde460b10"> 333</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#ga0200466842c0e1f5da75e84dde460b10">hwloc_bitmap_weight</a>(<a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap) __hwloc_attribute_pure;</div>
173 <div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; </div>
174 <div class="line"><a name="l00339"></a><span class="lineno"><a class="line" href="a00214.html#gae408841487b288e148a478ba0465c99e"> 339</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#gae408841487b288e148a478ba0465c99e">hwloc_bitmap_first_unset</a>(<a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap) __hwloc_attribute_pure;</div>
175 <div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; </div>
176 <div class="line"><a name="l00347"></a><span class="lineno"><a class="line" href="a00214.html#ga9653af34d1460ef106b7df25af4cdca8"> 347</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#ga9653af34d1460ef106b7df25af4cdca8">hwloc_bitmap_next_unset</a>(<a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap, <span class="keywordtype">int</span> prev) __hwloc_attribute_pure;</div>
177 <div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; </div>
178 <div class="line"><a name="l00353"></a><span class="lineno"><a class="line" href="a00214.html#ga45d49aeb45c7da631b1480a93dc3fc92"> 353</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#ga45d49aeb45c7da631b1480a93dc3fc92">hwloc_bitmap_last_unset</a>(<a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap) __hwloc_attribute_pure;</div>
179 <div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; </div>
180 <div class="line"><a name="l00370"></a><span class="lineno"><a class="line" href="a00214.html#ga3f6861045a8029ade373510ffa727d2a"> 370</a></span>&#160;<span class="preprocessor">#define hwloc_bitmap_foreach_begin(id, bitmap) \</span></div>
181 <div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160;<span class="preprocessor">do { \</span></div>
182 <div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160;<span class="preprocessor"> assert(hwloc_bitmap_weight(bitmap) != -1); \</span></div>
183 <div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;<span class="preprocessor"> for (id = hwloc_bitmap_first(bitmap); \</span></div>
184 <div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160;<span class="preprocessor"> (unsigned) id != (unsigned) -1; \</span></div>
185 <div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;<span class="preprocessor"> id = hwloc_bitmap_next(bitmap, id)) {</span></div>
186 <div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; </div>
187 <div class="line"><a name="l00384"></a><span class="lineno"><a class="line" href="a00214.html#gafcf3246db406218d4e155735b3fa6528"> 384</a></span>&#160;<span class="preprocessor">#define hwloc_bitmap_foreach_end() \</span></div>
188 <div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160;<span class="preprocessor"> } \</span></div>
189 <div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;<span class="preprocessor">} while (0)</span></div>
190 <div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; </div>
191 <div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; </div>
192 <div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;<span class="comment">/*</span></div>
193 <div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160;<span class="comment"> * Combining bitmaps.</span></div>
194 <div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160;<span class="comment"> */</span></div>
195 <div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; </div>
196 <div class="line"><a name="l00397"></a><span class="lineno"><a class="line" href="a00214.html#ga120b8aefb9ce7ef349929656359b1859"> 397</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#ga120b8aefb9ce7ef349929656359b1859">hwloc_bitmap_or</a> (<a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> res, <a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2);</div>
197 <div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; </div>
198 <div class="line"><a name="l00403"></a><span class="lineno"><a class="line" href="a00214.html#ga674533016ffed922a28b4f0b49b82cd4"> 403</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#ga674533016ffed922a28b4f0b49b82cd4">hwloc_bitmap_and</a> (<a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> res, <a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2);</div>
199 <div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; </div>
200 <div class="line"><a name="l00409"></a><span class="lineno"><a class="line" href="a00214.html#ga7ca5c72db65406b85aca032c8a990f9e"> 409</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#ga7ca5c72db65406b85aca032c8a990f9e">hwloc_bitmap_andnot</a> (<a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> res, <a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2);</div>
201 <div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; </div>
202 <div class="line"><a name="l00415"></a><span class="lineno"><a class="line" href="a00214.html#ga205508218e09cb9befd0687f16409f09"> 415</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#ga205508218e09cb9befd0687f16409f09">hwloc_bitmap_xor</a> (<a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> res, <a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2);</div>
203 <div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; </div>
204 <div class="line"><a name="l00421"></a><span class="lineno"><a class="line" href="a00214.html#ga84cfdb4f8ab8c1f7e097728e613a2a3f"> 421</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#ga84cfdb4f8ab8c1f7e097728e613a2a3f">hwloc_bitmap_not</a> (<a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> res, <a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap);</div>
205 <div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; </div>
206 <div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; </div>
207 <div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160;<span class="comment">/*</span></div>
208 <div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160;<span class="comment"> * Comparing bitmaps.</span></div>
209 <div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160;<span class="comment"> */</span></div>
210 <div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; </div>
211 <div class="line"><a name="l00432"></a><span class="lineno"><a class="line" href="a00214.html#gaefa070f9232857ba5a57297ea9a08ea2"> 432</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#gaefa070f9232857ba5a57297ea9a08ea2">hwloc_bitmap_intersects</a> (<a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2) __hwloc_attribute_pure;</div>
212 <div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; </div>
213 <div class="line"><a name="l00440"></a><span class="lineno"><a class="line" href="a00214.html#ga0526e03db81956fb02acc8260b66d6a4"> 440</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a> (<a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> sub_bitmap, <a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> super_bitmap) __hwloc_attribute_pure;</div>
214 <div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; </div>
215 <div class="line"><a name="l00446"></a><span class="lineno"><a class="line" href="a00214.html#ga32376b1405e57472b73c3aa53bb39663"> 446</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#ga32376b1405e57472b73c3aa53bb39663">hwloc_bitmap_isequal</a> (<a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2) __hwloc_attribute_pure;</div>
216 <div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; </div>
217 <div class="line"><a name="l00465"></a><span class="lineno"><a class="line" href="a00214.html#gaa39cda1510ab721b5c012c76ead72365"> 465</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#gaa39cda1510ab721b5c012c76ead72365">hwloc_bitmap_compare_first</a>(<a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2) __hwloc_attribute_pure;</div>
218 <div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; </div>
219 <div class="line"><a name="l00484"></a><span class="lineno"><a class="line" href="a00214.html#ga14cdbc0ef0a705e84999bd48a2e649f3"> 484</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00214.html#ga14cdbc0ef0a705e84999bd48a2e649f3">hwloc_bitmap_compare</a>(<a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2) __hwloc_attribute_pure;</div>
350220 <div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; </div>
351 <div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
352 <div class="line"><a name="l00513"></a><span class="lineno"><a class="line" href="a00204.html#ga52ef38431eba383b048b98c669b59a16"> 513</a></span>&#160;<a class="code" href="a00204.html#ga52ef38431eba383b048b98c669b59a16">hwloc_obj_type_is_normal</a>(<a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00244.html#acc4f0803f244867e68fe0036800be5de">type</a>);</div>
353 <div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; </div>
354 <div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
355 <div class="line"><a name="l00524"></a><span class="lineno"><a class="line" href="a00204.html#gac8a954ed37a4376097234c828068cbef"> 524</a></span>&#160;<a class="code" href="a00204.html#gac8a954ed37a4376097234c828068cbef">hwloc_obj_type_is_io</a>(<a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00244.html#acc4f0803f244867e68fe0036800be5de">type</a>);</div>
356 <div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; </div>
357 <div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
358 <div class="line"><a name="l00535"></a><span class="lineno"><a class="line" href="a00204.html#ga1d074390c8a3dc3088d84f73fb73f966"> 535</a></span>&#160;<a class="code" href="a00204.html#ga1d074390c8a3dc3088d84f73fb73f966">hwloc_obj_type_is_memory</a>(<a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00244.html#acc4f0803f244867e68fe0036800be5de">type</a>);</div>
359 <div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; </div>
360 <div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
361 <div class="line"><a name="l00544"></a><span class="lineno"><a class="line" href="a00204.html#ga2ed589bea28711e80b92066510a5607d"> 544</a></span>&#160;<a class="code" href="a00204.html#ga2ed589bea28711e80b92066510a5607d">hwloc_obj_type_is_cache</a>(<a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00244.html#acc4f0803f244867e68fe0036800be5de">type</a>);</div>
362 <div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; </div>
363 <div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
364 <div class="line"><a name="l00553"></a><span class="lineno"><a class="line" href="a00204.html#ga395e48cd221d107e5891689624e1aec4"> 553</a></span>&#160;<a class="code" href="a00204.html#ga395e48cd221d107e5891689624e1aec4">hwloc_obj_type_is_dcache</a>(<a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00244.html#acc4f0803f244867e68fe0036800be5de">type</a>);</div>
365 <div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; </div>
366 <div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
367 <div class="line"><a name="l00562"></a><span class="lineno"><a class="line" href="a00204.html#ga8abcee67b9b074332c1866405a3648a9"> 562</a></span>&#160;<a class="code" href="a00204.html#ga8abcee67b9b074332c1866405a3648a9">hwloc_obj_type_is_icache</a>(<a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00244.html#acc4f0803f244867e68fe0036800be5de">type</a>);</div>
368 <div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; </div>
369 <div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
370 <div class="line"><a name="l00594"></a><span class="lineno"><a class="line" href="a00205.html#gad108a09ce400222fe45545257d575489"> 594</a></span>&#160;<a class="code" href="a00205.html#gad108a09ce400222fe45545257d575489">hwloc_get_cache_type_depth</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
371 <div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="keywordtype">unsigned</span> cachelevel, <a class="code" href="a00190.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a> cachetype)</div>
372 <div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160;{</div>
373 <div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="keywordtype">int</span> <a class="code" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>;</div>
374 <div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <span class="keywordtype">int</span> found = <a class="code" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a>;</div>
375 <div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>=0; ; <a class="code" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>++) {</div>
376 <div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> obj = <a class="code" href="a00193.html#ga391f6b2613f0065673eaa4069b93d4e0">hwloc_get_obj_by_depth</a>(topology, <a class="code" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>, 0);</div>
377 <div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; <span class="keywordflow">if</span> (!obj)</div>
378 <div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <span class="keywordflow">break</span>;</div>
379 <div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00204.html#ga395e48cd221d107e5891689624e1aec4">hwloc_obj_type_is_dcache</a>(obj-&gt;<a class="code" href="a00244.html#acc4f0803f244867e68fe0036800be5de">type</a>) || obj-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#a23f553f3252c9d13f2338231cd354ea9">cache</a>.<a class="code" href="a00260.html#a5c8f7f39193736c2187ed626940835d5">depth</a> != cachelevel)</div>
380 <div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <span class="comment">/* doesn&#39;t match, try next depth */</span></div>
381 <div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="keywordflow">continue</span>;</div>
382 <div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <span class="keywordflow">if</span> (cachetype == (<a class="code" href="a00190.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a>) -1) {</div>
383 <div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="keywordflow">if</span> (found != <a class="code" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a>) {</div>
384 <div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <span class="comment">/* second match, return MULTIPLE */</span></div>
385 <div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="keywordflow">return</span> <a class="code" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c">HWLOC_TYPE_DEPTH_MULTIPLE</a>;</div>
386 <div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; }</div>
387 <div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <span class="comment">/* first match, mark it as found */</span></div>
388 <div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; found = <a class="code" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>;</div>
389 <div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <span class="keywordflow">continue</span>;</div>
390 <div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; }</div>
391 <div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <span class="keywordflow">if</span> (obj-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#a23f553f3252c9d13f2338231cd354ea9">cache</a>.<a class="code" href="a00260.html#ad8edc8ded2b7a70d6abbc874801930f4">type</a> == cachetype || obj-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#a23f553f3252c9d13f2338231cd354ea9">cache</a>.<a class="code" href="a00260.html#ad8edc8ded2b7a70d6abbc874801930f4">type</a> == <a class="code" href="a00190.html#gga791c9875c8fe20f3e1e5871e0657e59ba3900b3b2db54941aac249e5a638a2d7a">HWLOC_OBJ_CACHE_UNIFIED</a>)</div>
392 <div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; <span class="comment">/* exact match (either unified is alone, or we match instruction or data), return immediately */</span></div>
393 <div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="keywordflow">return</span> <a class="code" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>;</div>
394 <div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; }</div>
395 <div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <span class="comment">/* went to the bottom, return what we found */</span></div>
396 <div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <span class="keywordflow">return</span> found;</div>
397 <div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160;}</div>
398 <div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; </div>
399 <div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
400 <div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160;<a class="code" href="a00205.html#gac4cd480a5deaa4ada047fdd11ae4c070">hwloc_get_cache_covering_cpuset</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set) __hwloc_attribute_pure;</div>
401 <div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
402 <div class="line"><a name="l00630"></a><span class="lineno"><a class="line" href="a00205.html#gac4cd480a5deaa4ada047fdd11ae4c070"> 630</a></span>&#160;<a class="code" href="a00205.html#gac4cd480a5deaa4ada047fdd11ae4c070">hwloc_get_cache_covering_cpuset</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set)</div>
403 <div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160;{</div>
404 <div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> current = <a class="code" href="a00202.html#ga41acdcdbb8b95d70ecf6c572a3f67dca">hwloc_get_obj_covering_cpuset</a>(topology, set);</div>
405 <div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; <span class="keywordflow">while</span> (current) {</div>
406 <div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00204.html#ga395e48cd221d107e5891689624e1aec4">hwloc_obj_type_is_dcache</a>(current-&gt;<a class="code" href="a00244.html#acc4f0803f244867e68fe0036800be5de">type</a>))</div>
407 <div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="keywordflow">return</span> current;</div>
408 <div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; current = current-&gt;<a class="code" href="a00244.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
409 <div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; }</div>
410 <div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <span class="keywordflow">return</span> NULL;</div>
411 <div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160;}</div>
412 <div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; </div>
413 <div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
414 <div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160;<a class="code" href="a00205.html#ga36f48c32837c7a70b424706e213dcd71">hwloc_get_shared_cache_covering_obj</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00244.html">hwloc_obj_t</a> obj) __hwloc_attribute_pure;</div>
415 <div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
416 <div class="line"><a name="l00648"></a><span class="lineno"><a class="line" href="a00205.html#ga36f48c32837c7a70b424706e213dcd71"> 648</a></span>&#160;<a class="code" href="a00205.html#ga36f48c32837c7a70b424706e213dcd71">hwloc_get_shared_cache_covering_obj</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00244.html">hwloc_obj_t</a> obj)</div>
417 <div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160;{</div>
418 <div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> current = obj-&gt;<a class="code" href="a00244.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
419 <div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <span class="keywordflow">if</span> (!obj-&gt;<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>)</div>
420 <div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <span class="keywordflow">return</span> NULL;</div>
421 <div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <span class="keywordflow">while</span> (current) {</div>
422 <div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00211.html#ga32376b1405e57472b73c3aa53bb39663">hwloc_bitmap_isequal</a>(current-&gt;<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, obj-&gt;<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>)</div>
423 <div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; &amp;&amp; <a class="code" href="a00204.html#ga395e48cd221d107e5891689624e1aec4">hwloc_obj_type_is_dcache</a>(current-&gt;<a class="code" href="a00244.html#acc4f0803f244867e68fe0036800be5de">type</a>))</div>
424 <div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="keywordflow">return</span> current;</div>
425 <div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; current = current-&gt;<a class="code" href="a00244.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
426 <div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; }</div>
427 <div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <span class="keywordflow">return</span> NULL;</div>
428 <div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160;}</div>
429 <div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; </div>
430 <div class="line"><a name="l00691"></a><span class="lineno"><a class="line" href="a00206.html#ga050646458efc8ca1120d9f124c5ad861"> 691</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00206.html#ga050646458efc8ca1120d9f124c5ad861">hwloc_bitmap_singlify_per_core</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> <a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, <span class="keywordtype">unsigned</span> which);</div>
431 <div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; </div>
432 <div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
433 <div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160;<a class="code" href="a00206.html#ga751c238a4931db5cc0ca3181b7dd7479">hwloc_get_pu_obj_by_os_index</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">unsigned</span> <a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>) __hwloc_attribute_pure;</div>
434 <div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
435 <div class="line"><a name="l00705"></a><span class="lineno"><a class="line" href="a00206.html#ga751c238a4931db5cc0ca3181b7dd7479"> 705</a></span>&#160;<a class="code" href="a00206.html#ga751c238a4931db5cc0ca3181b7dd7479">hwloc_get_pu_obj_by_os_index</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">unsigned</span> <a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>)</div>
436 <div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160;{</div>
437 <div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> obj = NULL;</div>
438 <div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <span class="keywordflow">while</span> ((obj = <a class="code" href="a00193.html#ga759e88eaf5a230ad283e9d4c42486735">hwloc_get_next_obj_by_type</a>(topology, <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661">HWLOC_OBJ_PU</a>, obj)) != NULL)</div>
439 <div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; <span class="keywordflow">if</span> (obj-&gt;<a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a> == <a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>)</div>
440 <div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; <span class="keywordflow">return</span> obj;</div>
441 <div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; <span class="keywordflow">return</span> NULL;</div>
442 <div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160;}</div>
443 <div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; </div>
444 <div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
445 <div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160;<a class="code" href="a00206.html#gab89d9ed9edfaa3dd526fb6ee1a1618ea">hwloc_get_numanode_obj_by_os_index</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">unsigned</span> <a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>) __hwloc_attribute_pure;</div>
446 <div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
447 <div class="line"><a name="l00726"></a><span class="lineno"><a class="line" href="a00206.html#gab89d9ed9edfaa3dd526fb6ee1a1618ea"> 726</a></span>&#160;<a class="code" href="a00206.html#gab89d9ed9edfaa3dd526fb6ee1a1618ea">hwloc_get_numanode_obj_by_os_index</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">unsigned</span> <a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>)</div>
448 <div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160;{</div>
449 <div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> obj = NULL;</div>
450 <div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; <span class="keywordflow">while</span> ((obj = <a class="code" href="a00193.html#ga759e88eaf5a230ad283e9d4c42486735">hwloc_get_next_obj_by_type</a>(topology, <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>, obj)) != NULL)</div>
451 <div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; <span class="keywordflow">if</span> (obj-&gt;<a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a> == <a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>)</div>
452 <div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <span class="keywordflow">return</span> obj;</div>
453 <div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; <span class="keywordflow">return</span> NULL;</div>
454 <div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160;}</div>
455 <div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; </div>
456 <div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160;<span class="comment">/* TODO: rather provide an iterator? Provide a way to know how much should be allocated? By returning the total number of objects instead? */</span></div>
457 <div class="line"><a name="l00747"></a><span class="lineno"><a class="line" href="a00206.html#ga2cd22a34360643f7f5bad09576dec205"> 747</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">unsigned</span> <a class="code" href="a00206.html#ga2cd22a34360643f7f5bad09576dec205">hwloc_get_closest_objs</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00244.html">hwloc_obj_t</a> src, <a class="code" href="a00244.html">hwloc_obj_t</a> * __hwloc_restrict objs, <span class="keywordtype">unsigned</span> max);</div>
458 <div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; </div>
459 <div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
460 <div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160;<a class="code" href="a00206.html#ga7a0c1046851f7a88bd52f5a1d4ba0a97">hwloc_get_obj_below_by_type</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
461 <div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type1, <span class="keywordtype">unsigned</span> idx1,</div>
462 <div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; <a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type2, <span class="keywordtype">unsigned</span> idx2) __hwloc_attribute_pure;</div>
463 <div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
464 <div class="line"><a name="l00766"></a><span class="lineno"><a class="line" href="a00206.html#ga7a0c1046851f7a88bd52f5a1d4ba0a97"> 766</a></span>&#160;<a class="code" href="a00206.html#ga7a0c1046851f7a88bd52f5a1d4ba0a97">hwloc_get_obj_below_by_type</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
465 <div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; <a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type1, <span class="keywordtype">unsigned</span> idx1,</div>
466 <div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type2, <span class="keywordtype">unsigned</span> idx2)</div>
467 <div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160;{</div>
468 <div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> obj;</div>
469 <div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; obj = <a class="code" href="a00193.html#ga6f414dd80a2b943967a0ac92da3181a2">hwloc_get_obj_by_type</a> (topology, type1, idx1);</div>
470 <div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; <span class="keywordflow">if</span> (!obj)</div>
471 <div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; <span class="keywordflow">return</span> NULL;</div>
472 <div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; <span class="keywordflow">return</span> <a class="code" href="a00201.html#ga2edf924e5a0cca9cb22f65cc77c6ddb5">hwloc_get_obj_inside_cpuset_by_type</a>(topology, obj-&gt;<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, type2, idx2);</div>
473 <div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160;}</div>
474 <div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; </div>
475 <div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
476 <div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160;<a class="code" href="a00206.html#gacb51295ff3fbd3a96f990f20c6492b1d">hwloc_get_obj_below_array_by_type</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">int</span> nr, <a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> *typev, <span class="keywordtype">unsigned</span> *idxv) __hwloc_attribute_pure;</div>
477 <div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
478 <div class="line"><a name="l00798"></a><span class="lineno"><a class="line" href="a00206.html#gacb51295ff3fbd3a96f990f20c6492b1d"> 798</a></span>&#160;<a class="code" href="a00206.html#gacb51295ff3fbd3a96f990f20c6492b1d">hwloc_get_obj_below_array_by_type</a> (<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">int</span> nr, <a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> *typev, <span class="keywordtype">unsigned</span> *idxv)</div>
479 <div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160;{</div>
480 <div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> obj = <a class="code" href="a00193.html#ga2d4b12fc187dfc53b35f2fa21d21044d">hwloc_get_root_obj</a>(topology);</div>
481 <div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; <span class="keywordtype">int</span> i;</div>
482 <div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; <span class="keywordflow">for</span>(i=0; i&lt;nr; i++) {</div>
483 <div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; <span class="keywordflow">if</span> (!obj)</div>
484 <div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; <span class="keywordflow">return</span> NULL;</div>
485 <div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; obj = <a class="code" href="a00201.html#ga2edf924e5a0cca9cb22f65cc77c6ddb5">hwloc_get_obj_inside_cpuset_by_type</a>(topology, obj-&gt;<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, typev[i], idxv[i]);</div>
486 <div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; }</div>
487 <div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; <span class="keywordflow">return</span> obj;</div>
488 <div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160;}</div>
489 <div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; </div>
490 <div class="line"><a name="l00820"></a><span class="lineno"><a class="line" href="a00207.html#ga8b835295a52b6768a5e6c8abb1f9c54d"> 820</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00207.html#ga8b835295a52b6768a5e6c8abb1f9c54d">hwloc_distrib_flags_e</a> {</div>
491 <div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; <a class="code" href="a00207.html#gga8b835295a52b6768a5e6c8abb1f9c54da2ca08404bfbebe9ed5f34c3d7635425a">HWLOC_DISTRIB_FLAG_REVERSE</a> = (1UL&lt;&lt;0)</div>
492 <div class="line"><a name="l00825"></a><span class="lineno"><a class="line" href="a00207.html#gga8b835295a52b6768a5e6c8abb1f9c54da2ca08404bfbebe9ed5f34c3d7635425a"> 825</a></span>&#160;};</div>
493 <div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; </div>
494 <div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
495 <div class="line"><a name="l00851"></a><span class="lineno"><a class="line" href="a00207.html#ga7b0c28f797c2ff17fa2f244ebbd55b33"> 851</a></span>&#160;<a class="code" href="a00207.html#ga7b0c28f797c2ff17fa2f244ebbd55b33">hwloc_distrib</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
496 <div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> *roots, <span class="keywordtype">unsigned</span> n_roots,</div>
497 <div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; <a class="code" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> *set,</div>
498 <div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; <span class="keywordtype">unsigned</span> n,</div>
499 <div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; <span class="keywordtype">int</span> until, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags)</div>
500 <div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160;{</div>
501 <div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; <span class="keywordtype">unsigned</span> i;</div>
502 <div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; <span class="keywordtype">unsigned</span> tot_weight;</div>
503 <div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; <span class="keywordtype">unsigned</span> given, givenweight;</div>
504 <div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; <a class="code" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> *cpusetp = set;</div>
505 <div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; </div>
506 <div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; <span class="keywordflow">if</span> (flags &amp; ~<a class="code" href="a00207.html#gga8b835295a52b6768a5e6c8abb1f9c54da2ca08404bfbebe9ed5f34c3d7635425a">HWLOC_DISTRIB_FLAG_REVERSE</a>) {</div>
507 <div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; errno = EINVAL;</div>
508 <div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; <span class="keywordflow">return</span> -1;</div>
509 <div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; }</div>
510 <div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160; </div>
511 <div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; tot_weight = 0;</div>
512 <div class="line"><a name="l00868"></a><span class="lineno"> 868</span>&#160; <span class="keywordflow">for</span> (i = 0; i &lt; n_roots; i++)</div>
513 <div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; tot_weight += (<span class="keywordtype">unsigned</span>) <a class="code" href="a00211.html#ga0200466842c0e1f5da75e84dde460b10">hwloc_bitmap_weight</a>(roots[i]-&gt;<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>);</div>
514 <div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; </div>
515 <div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; <span class="keywordflow">for</span> (i = 0, given = 0, givenweight = 0; i &lt; n_roots; i++) {</div>
516 <div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; <span class="keywordtype">unsigned</span> chunk, weight;</div>
517 <div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> root = roots[flags &amp; <a class="code" href="a00207.html#gga8b835295a52b6768a5e6c8abb1f9c54da2ca08404bfbebe9ed5f34c3d7635425a">HWLOC_DISTRIB_FLAG_REVERSE</a> ? n_roots-1-i : i];</div>
518 <div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; <a class="code" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> <a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a> = root-&gt;<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>;</div>
519 <div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; <span class="keywordflow">while</span> (!<a class="code" href="a00204.html#ga52ef38431eba383b048b98c669b59a16">hwloc_obj_type_is_normal</a>(root-&gt;<a class="code" href="a00244.html#acc4f0803f244867e68fe0036800be5de">type</a>))</div>
520 <div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; <span class="comment">/* If memory/io/misc, walk up to normal parent */</span></div>
521 <div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; root = root-&gt;<a class="code" href="a00244.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
522 <div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; weight = (unsigned) <a class="code" href="a00211.html#ga0200466842c0e1f5da75e84dde460b10">hwloc_bitmap_weight</a>(<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>);</div>
523 <div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; <span class="keywordflow">if</span> (!weight)</div>
524 <div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; <span class="keywordflow">continue</span>;</div>
525 <div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; <span class="comment">/* Give to root a chunk proportional to its weight.</span></div>
526 <div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160;<span class="comment"> * If previous chunks got rounded-up, we may get a bit less. */</span></div>
527 <div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; chunk = (( (givenweight+weight) * n + tot_weight-1) / tot_weight)</div>
528 <div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; - (( givenweight * n + tot_weight-1) / tot_weight);</div>
529 <div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; <span class="keywordflow">if</span> (!root-&gt;<a class="code" href="a00244.html#aac3f6da35c9b57599909a44ce2b716c1">arity</a> || chunk &lt;= 1 || root-&gt;<a class="code" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> &gt;= until) {</div>
530 <div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; <span class="comment">/* We can&#39;t split any more, put everything there. */</span></div>
531 <div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; <span class="keywordflow">if</span> (chunk) {</div>
532 <div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; <span class="comment">/* Fill cpusets with ours */</span></div>
533 <div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; <span class="keywordtype">unsigned</span> j;</div>
534 <div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; <span class="keywordflow">for</span> (j=0; j &lt; chunk; j++)</div>
535 <div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; cpusetp[j] = <a class="code" href="a00211.html#gae679434c1a5f41d3560a8a7e2c1b0dee">hwloc_bitmap_dup</a>(<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>);</div>
536 <div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; } <span class="keywordflow">else</span> {</div>
537 <div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; <span class="comment">/* We got no chunk, just merge our cpuset to a previous one</span></div>
538 <div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160;<span class="comment"> * (the first chunk cannot be empty)</span></div>
539 <div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160;<span class="comment"> * so that this root doesn&#39;t get ignored.</span></div>
540 <div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160;<span class="comment"> */</span></div>
541 <div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; assert(given);</div>
542 <div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; <a class="code" href="a00211.html#ga120b8aefb9ce7ef349929656359b1859">hwloc_bitmap_or</a>(cpusetp[-1], cpusetp[-1], <a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>);</div>
543 <div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; }</div>
544 <div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160; } <span class="keywordflow">else</span> {</div>
545 <div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160; <span class="comment">/* Still more to distribute, recurse into children */</span></div>
546 <div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; <a class="code" href="a00207.html#ga7b0c28f797c2ff17fa2f244ebbd55b33">hwloc_distrib</a>(topology, root-&gt;<a class="code" href="a00244.html#a04d05403da37bfe17cd63b7c7dd07b1f">children</a>, root-&gt;<a class="code" href="a00244.html#aac3f6da35c9b57599909a44ce2b716c1">arity</a>, cpusetp, chunk, until, flags);</div>
547 <div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; }</div>
548 <div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; cpusetp += chunk;</div>
549 <div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; given += chunk;</div>
550 <div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; givenweight += weight;</div>
551 <div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; }</div>
552 <div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; </div>
553 <div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; <span class="keywordflow">return</span> 0;</div>
554 <div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160;}</div>
555 <div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; </div>
556 <div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160;HWLOC_DECLSPEC <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a></div>
557 <div class="line"><a name="l00930"></a><span class="lineno"><a class="line" href="a00208.html#gaee30e03391c1ed7dfd617fb5c7bbb033"> 930</a></span>&#160;<a class="code" href="a00208.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology) __hwloc_attribute_pure;</div>
558 <div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; </div>
559 <div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160;HWLOC_DECLSPEC <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a></div>
560 <div class="line"><a name="l00944"></a><span class="lineno"><a class="line" href="a00208.html#ga79212faa07b70dd26588941b17d9fa82"> 944</a></span>&#160;<a class="code" href="a00208.html#ga79212faa07b70dd26588941b17d9fa82">hwloc_topology_get_topology_cpuset</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology) __hwloc_attribute_pure;</div>
561 <div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; </div>
562 <div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160;HWLOC_DECLSPEC <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a></div>
563 <div class="line"><a name="l00963"></a><span class="lineno"><a class="line" href="a00208.html#ga517d5d68ec9f24583d8933aab713be8e"> 963</a></span>&#160;<a class="code" href="a00208.html#ga517d5d68ec9f24583d8933aab713be8e">hwloc_topology_get_allowed_cpuset</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology) __hwloc_attribute_pure;</div>
564 <div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; </div>
565 <div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160;HWLOC_DECLSPEC <a class="code" href="a00189.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a></div>
566 <div class="line"><a name="l00975"></a><span class="lineno"><a class="line" href="a00208.html#ga773fd98949461ef4c1e3170bb0c0418f"> 975</a></span>&#160;<a class="code" href="a00208.html#ga773fd98949461ef4c1e3170bb0c0418f">hwloc_topology_get_complete_nodeset</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology) __hwloc_attribute_pure;</div>
567 <div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; </div>
568 <div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160;HWLOC_DECLSPEC <a class="code" href="a00189.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a></div>
569 <div class="line"><a name="l00989"></a><span class="lineno"><a class="line" href="a00208.html#ga3fd37303e99ace8b0d0ea03f95f8c514"> 989</a></span>&#160;<a class="code" href="a00208.html#ga3fd37303e99ace8b0d0ea03f95f8c514">hwloc_topology_get_topology_nodeset</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology) __hwloc_attribute_pure;</div>
570 <div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; </div>
571 <div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160;HWLOC_DECLSPEC <a class="code" href="a00189.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a></div>
572 <div class="line"><a name="l01008"></a><span class="lineno"><a class="line" href="a00208.html#ga21a4d7237a11e76b912ed4524ab78cbd"> 1008</a></span>&#160;<a class="code" href="a00208.html#ga21a4d7237a11e76b912ed4524ab78cbd">hwloc_topology_get_allowed_nodeset</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology) __hwloc_attribute_pure;</div>
573 <div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; </div>
574 <div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
575 <div class="line"><a name="l01031"></a><span class="lineno"><a class="line" href="a00209.html#ga185751c1653fedbeb7cc480840f38cde"> 1031</a></span>&#160;<a class="code" href="a00209.html#ga185751c1653fedbeb7cc480840f38cde">hwloc_cpuset_to_nodeset</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> _cpuset, <a class="code" href="a00189.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a> <a class="code" href="a00244.html#a08f0d0e16c619a6e653526cbee4ffea3">nodeset</a>)</div>
576 <div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;{</div>
577 <div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; <span class="keywordtype">int</span> <a class="code" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> = <a class="code" href="a00193.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>);</div>
578 <div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> obj = NULL;</div>
579 <div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; assert(<a class="code" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> != <a class="code" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a>);</div>
580 <div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; <a class="code" href="a00211.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a>(<a class="code" href="a00244.html#a08f0d0e16c619a6e653526cbee4ffea3">nodeset</a>);</div>
581 <div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; <span class="keywordflow">while</span> ((obj = <a class="code" href="a00202.html#gaba4b6d86eba1169ced4b0e941d2bb5f0">hwloc_get_next_obj_covering_cpuset_by_depth</a>(topology, _cpuset, <a class="code" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>, obj)) != NULL)</div>
582 <div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00211.html#ga062dbff93baeff3b425a7260c5463646">hwloc_bitmap_set</a>(<a class="code" href="a00244.html#a08f0d0e16c619a6e653526cbee4ffea3">nodeset</a>, obj-&gt;<a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>) &lt; 0)</div>
583 <div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; <span class="keywordflow">return</span> -1;</div>
584 <div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; <span class="keywordflow">return</span> 0;</div>
585 <div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;}</div>
586 <div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; </div>
587 <div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
588 <div class="line"><a name="l01055"></a><span class="lineno"><a class="line" href="a00209.html#gad5ee8691e08a3538ea7633344c00456d"> 1055</a></span>&#160;<a class="code" href="a00209.html#gad5ee8691e08a3538ea7633344c00456d">hwloc_cpuset_from_nodeset</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> _cpuset, <a class="code" href="a00189.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> <a class="code" href="a00244.html#a08f0d0e16c619a6e653526cbee4ffea3">nodeset</a>)</div>
589 <div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160;{</div>
590 <div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; <span class="keywordtype">int</span> <a class="code" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> = <a class="code" href="a00193.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>);</div>
591 <div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> obj = NULL;</div>
592 <div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; assert(<a class="code" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">depth</a> != <a class="code" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a>);</div>
593 <div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; <a class="code" href="a00211.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a>(_cpuset);</div>
594 <div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; <span class="keywordflow">while</span> ((obj = <a class="code" href="a00193.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a>(topology, <a class="code" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">depth</a>, obj)) != NULL) {</div>
595 <div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00211.html#ga11340dd487f110bb84f0a6e4ae90bd06">hwloc_bitmap_isset</a>(<a class="code" href="a00244.html#a08f0d0e16c619a6e653526cbee4ffea3">nodeset</a>, obj-&gt;<a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>))</div>
596 <div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; <span class="comment">/* no need to check obj-&gt;cpuset because objects in levels always have a cpuset */</span></div>
597 <div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00211.html#ga120b8aefb9ce7ef349929656359b1859">hwloc_bitmap_or</a>(_cpuset, _cpuset, obj-&gt;<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>) &lt; 0)</div>
598 <div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; <span class="keywordflow">return</span> -1;</div>
599 <div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; }</div>
600 <div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; <span class="keywordflow">return</span> 0;</div>
601 <div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;}</div>
602 <div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; </div>
603 <div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
604 <div class="line"><a name="l01090"></a><span class="lineno"><a class="line" href="a00210.html#gaf139bb61375178e90cc3f1835b452ab6"> 1090</a></span>&#160;<a class="code" href="a00210.html#gaf139bb61375178e90cc3f1835b452ab6">hwloc_get_non_io_ancestor_obj</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused,</div>
605 <div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> ioobj)</div>
606 <div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160;{</div>
607 <div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> obj = ioobj;</div>
608 <div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; <span class="keywordflow">while</span> (obj &amp;&amp; !obj-&gt;<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>) {</div>
609 <div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; obj = obj-&gt;<a class="code" href="a00244.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
610 <div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; }</div>
611 <div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; <span class="keywordflow">return</span> obj;</div>
612 <div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;}</div>
613 <div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; </div>
614 <div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
615 <div class="line"><a name="l01105"></a><span class="lineno"><a class="line" href="a00210.html#ga66470dabce9db19a57c5940a909d0baa"> 1105</a></span>&#160;<a class="code" href="a00210.html#ga66470dabce9db19a57c5940a909d0baa">hwloc_get_next_pcidev</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00244.html">hwloc_obj_t</a> prev)</div>
616 <div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160;{</div>
617 <div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; <span class="keywordflow">return</span> <a class="code" href="a00193.html#ga759e88eaf5a230ad283e9d4c42486735">hwloc_get_next_obj_by_type</a>(topology, <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a>, prev);</div>
618 <div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160;}</div>
619 <div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; </div>
620 <div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
621 <div class="line"><a name="l01114"></a><span class="lineno"><a class="line" href="a00210.html#gacdbaf0db98872e224b7883a84bfb0455"> 1114</a></span>&#160;<a class="code" href="a00210.html#gacdbaf0db98872e224b7883a84bfb0455">hwloc_get_pcidev_by_busid</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
622 <div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; <span class="keywordtype">unsigned</span> domain, <span class="keywordtype">unsigned</span> bus, <span class="keywordtype">unsigned</span> dev, <span class="keywordtype">unsigned</span> func)</div>
623 <div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160;{</div>
624 <div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> obj = NULL;</div>
625 <div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; <span class="keywordflow">while</span> ((obj = <a class="code" href="a00210.html#ga66470dabce9db19a57c5940a909d0baa">hwloc_get_next_pcidev</a>(topology, obj)) != NULL) {</div>
626 <div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160; <span class="keywordflow">if</span> (obj-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00268.html#a8fba44988deb98613c1505a4019a34dc">domain</a> == domain</div>
627 <div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160; &amp;&amp; obj-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00268.html#aae99e035e8d1387d7b8768aaa8eceb0a">bus</a> == bus</div>
628 <div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160; &amp;&amp; obj-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00268.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">dev</a> == dev</div>
629 <div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160; &amp;&amp; obj-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00268.html#a695f32df53f4ef728670bfcf31b74e0f">func</a> == func)</div>
630 <div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; <span class="keywordflow">return</span> obj;</div>
631 <div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160; }</div>
632 <div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; <span class="keywordflow">return</span> NULL;</div>
633 <div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160;}</div>
634 <div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160; </div>
635 <div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
636 <div class="line"><a name="l01132"></a><span class="lineno"><a class="line" href="a00210.html#ga23a978469353134b3104b846fe2efceb"> 1132</a></span>&#160;<a class="code" href="a00210.html#ga23a978469353134b3104b846fe2efceb">hwloc_get_pcidev_by_busidstring</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">const</span> <span class="keywordtype">char</span> *busid)</div>
637 <div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160;{</div>
638 <div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; <span class="keywordtype">unsigned</span> domain = 0; <span class="comment">/* default */</span></div>
639 <div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; <span class="keywordtype">unsigned</span> bus, dev, func;</div>
640 <div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; </div>
641 <div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; <span class="keywordflow">if</span> (sscanf(busid, <span class="stringliteral">&quot;%x:%x.%x&quot;</span>, &amp;bus, &amp;dev, &amp;func) != 3</div>
642 <div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; &amp;&amp; sscanf(busid, <span class="stringliteral">&quot;%x:%x:%x.%x&quot;</span>, &amp;domain, &amp;bus, &amp;dev, &amp;func) != 4) {</div>
643 <div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; errno = EINVAL;</div>
644 <div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; <span class="keywordflow">return</span> NULL;</div>
645 <div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; }</div>
646 <div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; </div>
647 <div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; <span class="keywordflow">return</span> <a class="code" href="a00210.html#gacdbaf0db98872e224b7883a84bfb0455">hwloc_get_pcidev_by_busid</a>(topology, domain, bus, dev, func);</div>
648 <div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160;}</div>
649 <div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; </div>
650 <div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
651 <div class="line"><a name="l01151"></a><span class="lineno"><a class="line" href="a00210.html#ga8b4584c8949e2c5f1c97ba7fe92b8145"> 1151</a></span>&#160;<a class="code" href="a00210.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00244.html">hwloc_obj_t</a> prev)</div>
652 <div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160;{</div>
653 <div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; <span class="keywordflow">return</span> <a class="code" href="a00193.html#ga759e88eaf5a230ad283e9d4c42486735">hwloc_get_next_obj_by_type</a>(topology, <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075">HWLOC_OBJ_OS_DEVICE</a>, prev);</div>
654 <div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160;}</div>
655 <div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; </div>
656 <div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
657 <div class="line"><a name="l01161"></a><span class="lineno"><a class="line" href="a00210.html#ga9dba22a3f4f701f2a46780ba9a0bbbe7"> 1161</a></span>&#160;<a class="code" href="a00210.html#ga9dba22a3f4f701f2a46780ba9a0bbbe7">hwloc_get_next_bridge</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00244.html">hwloc_obj_t</a> prev)</div>
658 <div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160;{</div>
659 <div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; <span class="keywordflow">return</span> <a class="code" href="a00193.html#ga759e88eaf5a230ad283e9d4c42486735">hwloc_get_next_obj_by_type</a>(topology, <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0">HWLOC_OBJ_BRIDGE</a>, prev);</div>
660 <div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160;}</div>
661 <div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160; </div>
662 <div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160;<span class="comment">/* \brief Checks whether a given bridge covers a given PCI bus.</span></div>
663 <div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160;<span class="comment"> */</span></div>
664 <div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
665 <div class="line"><a name="l01169"></a><span class="lineno"><a class="line" href="a00210.html#ga0d92a9462a3d317f29ecb4442a307fb1"> 1169</a></span>&#160;<a class="code" href="a00210.html#ga0d92a9462a3d317f29ecb4442a307fb1">hwloc_bridge_covers_pcibus</a>(<a class="code" href="a00244.html">hwloc_obj_t</a> bridge,</div>
666 <div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; <span class="keywordtype">unsigned</span> domain, <span class="keywordtype">unsigned</span> bus)</div>
667 <div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160;{</div>
668 <div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; <span class="keywordflow">return</span> bridge-&gt;<a class="code" href="a00244.html#acc4f0803f244867e68fe0036800be5de">type</a> == <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0">HWLOC_OBJ_BRIDGE</a></div>
669 <div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; &amp;&amp; bridge-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#a207e6359497b7116d6f4baa9e8bbeb43">bridge</a>.<a class="code" href="a00272.html#ac6a169b672d0e9f75756fd5665828b93">downstream_type</a> == <a class="code" href="a00190.html#gga48a4803c72574191d7ead1c62aaf9860a8f3b4cecf3dab6073d74696d10863c60">HWLOC_OBJ_BRIDGE_PCI</a></div>
670 <div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; &amp;&amp; bridge-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#a207e6359497b7116d6f4baa9e8bbeb43">bridge</a>.<a class="code" href="a00272.html#a7d5db91d655ba23ffe9bda7a2cbcb9a8">downstream</a>.<a class="code" href="a00272.html#ab5c564e7c95b747dae9eb84ec0a2c31e">pci</a>.<a class="code" href="a00268.html#a8fba44988deb98613c1505a4019a34dc">domain</a> == domain</div>
671 <div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; &amp;&amp; bridge-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#a207e6359497b7116d6f4baa9e8bbeb43">bridge</a>.<a class="code" href="a00272.html#a7d5db91d655ba23ffe9bda7a2cbcb9a8">downstream</a>.<a class="code" href="a00272.html#ab5c564e7c95b747dae9eb84ec0a2c31e">pci</a>.secondary_bus &lt;= bus</div>
672 <div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; &amp;&amp; bridge-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#a207e6359497b7116d6f4baa9e8bbeb43">bridge</a>.<a class="code" href="a00272.html#a7d5db91d655ba23ffe9bda7a2cbcb9a8">downstream</a>.<a class="code" href="a00272.html#ab5c564e7c95b747dae9eb84ec0a2c31e">pci</a>.subordinate_bus &gt;= bus;</div>
673 <div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160;}</div>
674 <div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; </div>
675 <div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
676 <div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
677 <div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160;<span class="preprocessor">#endif</span></div>
678 <div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; </div>
679 <div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; </div>
680 <div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_HELPER_H */</span><span class="preprocessor"></span></div>
681 <div class="ttc" id="aa00189_html_ga1f784433e9b606261f62d1134f6a3b25"><div class="ttname"><a href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a></div><div class="ttdeci">hwloc_const_bitmap_t hwloc_const_cpuset_t</div><div class="ttdoc">A non-modifiable hwloc_cpuset_t.</div><div class="ttdef"><b>Definition:</b> hwloc.h:142</div></div>
682 <div class="ttc" id="aa00189_html_ga2f5276235841ad66a79bedad16a5a10c"><div class="ttname"><a href="a00189.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a></div><div class="ttdeci">hwloc_const_bitmap_t hwloc_const_nodeset_t</div><div class="ttdoc">A non-modifiable hwloc_nodeset_t.</div><div class="ttdef"><b>Definition:</b> hwloc.h:160</div></div>
683 <div class="ttc" id="aa00189_html_ga37e35730fa7e775b5bb0afe893d6d508"><div class="ttname"><a href="a00189.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_nodeset_t</div><div class="ttdoc">A node set is a bitmap whose bits are set according to NUMA memory node physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:157</div></div>
684 <div class="ttc" id="aa00189_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
685 <div class="ttc" id="aa00190_html_ga552ec74296a024237f474acec98694c0"><div class="ttname"><a href="a00190.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a></div><div class="ttdeci">enum hwloc_obj_cache_type_e hwloc_obj_cache_type_t</div><div class="ttdoc">Cache type.</div></div>
686 <div class="ttc" id="aa00190_html_gacd37bb612667dc437d66bfb175a8dc55"><div class="ttname"><a href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a></div><div class="ttdeci">hwloc_obj_type_t</div><div class="ttdoc">Type of topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:176</div></div>
687 <div class="ttc" id="aa00190_html_gga48a4803c72574191d7ead1c62aaf9860a8f3b4cecf3dab6073d74696d10863c60"><div class="ttname"><a href="a00190.html#gga48a4803c72574191d7ead1c62aaf9860a8f3b4cecf3dab6073d74696d10863c60">HWLOC_OBJ_BRIDGE_PCI</a></div><div class="ttdeci">@ HWLOC_OBJ_BRIDGE_PCI</div><div class="ttdoc">PCI-side of a bridge.</div><div class="ttdef"><b>Definition:</b> hwloc.h:335</div></div>
688 <div class="ttc" id="aa00190_html_gga791c9875c8fe20f3e1e5871e0657e59ba3900b3b2db54941aac249e5a638a2d7a"><div class="ttname"><a href="a00190.html#gga791c9875c8fe20f3e1e5871e0657e59ba3900b3b2db54941aac249e5a638a2d7a">HWLOC_OBJ_CACHE_UNIFIED</a></div><div class="ttdeci">@ HWLOC_OBJ_CACHE_UNIFIED</div><div class="ttdoc">Unified cache.</div><div class="ttdef"><b>Definition:</b> hwloc.h:327</div></div>
689 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55a19f8a6953fa91efc76bcbcdf2d22de4d"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a19f8a6953fa91efc76bcbcdf2d22de4d">HWLOC_OBJ_MISC</a></div><div class="ttdeci">@ HWLOC_OBJ_MISC</div><div class="ttdoc">Miscellaneous objects (filtered out by default). Objects without particular meaning,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:290</div></div>
690 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075">HWLOC_OBJ_OS_DEVICE</a></div><div class="ttdeci">@ HWLOC_OBJ_OS_DEVICE</div><div class="ttdoc">Operating system device (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:279</div></div>
691 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div><div class="ttdeci">@ HWLOC_OBJ_PCI_DEVICE</div><div class="ttdoc">PCI device (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:269</div></div>
692 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0">HWLOC_OBJ_BRIDGE</a></div><div class="ttdeci">@ HWLOC_OBJ_BRIDGE</div><div class="ttdoc">Bridge (filtered out by default). Any bridge (or PCI switch) that connects the host or an I/O bus,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:257</div></div>
693 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a></div><div class="ttdeci">@ HWLOC_OBJ_NUMANODE</div><div class="ttdoc">NUMA node. An object that contains memory that is directly and byte-accessible to the host processors...</div><div class="ttdef"><b>Definition:</b> hwloc.h:236</div></div>
694 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661">HWLOC_OBJ_PU</a></div><div class="ttdeci">@ HWLOC_OBJ_PU</div><div class="ttdoc">Processing Unit, or (Logical) Processor. An execution unit (may share a core with some other logical ...</div><div class="ttdef"><b>Definition:</b> hwloc.h:201</div></div>
695 <div class="ttc" id="aa00192_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
696 <div class="ttc" id="aa00193_html_ga2d4b12fc187dfc53b35f2fa21d21044d"><div class="ttname"><a href="a00193.html#ga2d4b12fc187dfc53b35f2fa21d21044d">hwloc_get_root_obj</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_root_obj(hwloc_topology_t topology)</div><div class="ttdoc">Returns the top-object of the topology-tree.</div></div>
697 <div class="ttc" id="aa00193_html_ga391f6b2613f0065673eaa4069b93d4e0"><div class="ttname"><a href="a00193.html#ga391f6b2613f0065673eaa4069b93d4e0">hwloc_get_obj_by_depth</a></div><div class="ttdeci">hwloc_obj_t hwloc_get_obj_by_depth(hwloc_topology_t topology, int depth, unsigned idx)</div><div class="ttdoc">Returns the topology object at logical index idx from depth depth.</div></div>
698 <div class="ttc" id="aa00193_html_ga6f414dd80a2b943967a0ac92da3181a2"><div class="ttname"><a href="a00193.html#ga6f414dd80a2b943967a0ac92da3181a2">hwloc_get_obj_by_type</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_obj_by_type(hwloc_topology_t topology, hwloc_obj_type_t type, unsigned idx)</div><div class="ttdoc">Returns the topology object at logical index idx with type type.</div></div>
699 <div class="ttc" id="aa00193_html_ga759e88eaf5a230ad283e9d4c42486735"><div class="ttname"><a href="a00193.html#ga759e88eaf5a230ad283e9d4c42486735">hwloc_get_next_obj_by_type</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_obj_by_type(hwloc_topology_t topology, hwloc_obj_type_t type, hwloc_obj_t prev)</div><div class="ttdoc">Returns the next object of type type.</div></div>
700 <div class="ttc" id="aa00193_html_ga8bec782e21be313750da70cf7428b374"><div class="ttname"><a href="a00193.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a></div><div class="ttdeci">int hwloc_get_type_depth(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Returns the depth of objects of type type.</div></div>
701 <div class="ttc" id="aa00193_html_gac140a9b939d9fa0b30c4a910efcb0656"><div class="ttname"><a href="a00193.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_obj_by_depth(hwloc_topology_t topology, int depth, hwloc_obj_t prev)</div><div class="ttdoc">Returns the next object at depth depth.</div></div>
702 <div class="ttc" id="aa00193_html_ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad"><div class="ttname"><a href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_UNKNOWN</div><div class="ttdoc">No object of given type exists in the topology.</div><div class="ttdef"><b>Definition:</b> hwloc.h:821</div></div>
703 <div class="ttc" id="aa00193_html_ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c"><div class="ttname"><a href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c">HWLOC_TYPE_DEPTH_MULTIPLE</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_MULTIPLE</div><div class="ttdoc">Objects of given type exist at different depth in the topology (only for Groups).</div><div class="ttdef"><b>Definition:</b> hwloc.h:822</div></div>
704 <div class="ttc" id="aa00201_html_ga133c40415de008518608f8bff52a5ab9"><div class="ttname"><a href="a00201.html#ga133c40415de008518608f8bff52a5ab9">hwloc_get_nbobjs_inside_cpuset_by_type</a></div><div class="ttdeci">static int hwloc_get_nbobjs_inside_cpuset_by_type(hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_type_t type)</div><div class="ttdoc">Return the number of objects of type type included in CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:216</div></div>
705 <div class="ttc" id="aa00201_html_ga2edf924e5a0cca9cb22f65cc77c6ddb5"><div class="ttname"><a href="a00201.html#ga2edf924e5a0cca9cb22f65cc77c6ddb5">hwloc_get_obj_inside_cpuset_by_type</a></div><div class="ttdeci">static 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)</div><div class="ttdoc">Return the idx -th object of type type included in CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:164</div></div>
706 <div class="ttc" id="aa00201_html_ga34ca563fa3a6a4e05268f36a87668511"><div class="ttname"><a href="a00201.html#ga34ca563fa3a6a4e05268f36a87668511">hwloc_get_largest_objs_inside_cpuset</a></div><div class="ttdeci">int hwloc_get_largest_objs_inside_cpuset(hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_t *restrict objs, int max)</div><div class="ttdoc">Get the set of largest objects covering exactly a given cpuset set.</div></div>
707 <div class="ttc" id="aa00201_html_ga4c3a20d61e9beb06c667b21688c772c5"><div class="ttname"><a href="a00201.html#ga4c3a20d61e9beb06c667b21688c772c5">hwloc_get_obj_index_inside_cpuset</a></div><div class="ttdeci">static int hwloc_get_obj_index_inside_cpuset(hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_t obj)</div><div class="ttdoc">Return the logical index among the objects included in CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:244</div></div>
708 <div class="ttc" id="aa00201_html_ga547325a4193dbc215d07c23097519d79"><div class="ttname"><a href="a00201.html#ga547325a4193dbc215d07c23097519d79">hwloc_get_first_largest_obj_inside_cpuset</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_first_largest_obj_inside_cpuset(hwloc_topology_t topology, hwloc_const_cpuset_t set)</div><div class="ttdoc">Get the first largest object included in the given cpuset set.</div><div class="ttdef"><b>Definition:</b> helper.h:42</div></div>
709 <div class="ttc" id="aa00201_html_ga63e3784e7c60fbae5073428cb98ac787"><div class="ttname"><a href="a00201.html#ga63e3784e7c60fbae5073428cb98ac787">hwloc_get_next_obj_inside_cpuset_by_depth</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_obj_inside_cpuset_by_depth(hwloc_topology_t topology, hwloc_const_cpuset_t set, int depth, hwloc_obj_t prev)</div><div class="ttdoc">Return the next object at depth depth included in CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:85</div></div>
710 <div class="ttc" id="aa00201_html_gaa43c64512ddb33fd181990c4261cec7d"><div class="ttname"><a href="a00201.html#gaa43c64512ddb33fd181990c4261cec7d">hwloc_get_nbobjs_inside_cpuset_by_depth</a></div><div class="ttdeci">static unsigned hwloc_get_nbobjs_inside_cpuset_by_depth(hwloc_topology_t topology, hwloc_const_cpuset_t set, int depth)</div><div class="ttdoc">Return the number of objects at depth depth included in CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:185</div></div>
711 <div class="ttc" id="aa00201_html_gaec86f1f88832836e3f9338e246ea5862"><div class="ttname"><a href="a00201.html#gaec86f1f88832836e3f9338e246ea5862">hwloc_get_obj_inside_cpuset_by_depth</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_obj_inside_cpuset_by_depth(hwloc_topology_t topology, hwloc_const_cpuset_t set, int depth, unsigned idx)</div><div class="ttdoc">Return the (logically) idx -th object at depth depth included in CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:130</div></div>
712 <div class="ttc" id="aa00201_html_gafe859176cf9233f215fea0e87cef47e7"><div class="ttname"><a href="a00201.html#gafe859176cf9233f215fea0e87cef47e7">hwloc_get_next_obj_inside_cpuset_by_type</a></div><div class="ttdeci">static 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)</div><div class="ttdoc">Return the next object of type type included in CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:109</div></div>
713 <div class="ttc" id="aa00202_html_ga0e66aa2dc6b2527cfd10723af646c9d7"><div class="ttname"><a href="a00202.html#ga0e66aa2dc6b2527cfd10723af646c9d7">hwloc_get_child_covering_cpuset</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_child_covering_cpuset(hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_t parent)</div><div class="ttdoc">Get the child covering at least CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:275</div></div>
714 <div class="ttc" id="aa00202_html_ga41acdcdbb8b95d70ecf6c572a3f67dca"><div class="ttname"><a href="a00202.html#ga41acdcdbb8b95d70ecf6c572a3f67dca">hwloc_get_obj_covering_cpuset</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_obj_covering_cpuset(hwloc_topology_t topology, hwloc_const_cpuset_t set)</div><div class="ttdoc">Get the lowest object covering at least CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:297</div></div>
715 <div class="ttc" id="aa00202_html_ga91cfae08b092e7966002e15d1e987213"><div class="ttname"><a href="a00202.html#ga91cfae08b092e7966002e15d1e987213">hwloc_get_next_obj_covering_cpuset_by_type</a></div><div class="ttdeci">static 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)</div><div class="ttdoc">Iterate through same-type objects covering at least CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:348</div></div>
716 <div class="ttc" id="aa00202_html_gaba4b6d86eba1169ced4b0e941d2bb5f0"><div class="ttname"><a href="a00202.html#gaba4b6d86eba1169ced4b0e941d2bb5f0">hwloc_get_next_obj_covering_cpuset_by_depth</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_obj_covering_cpuset_by_depth(hwloc_topology_t topology, hwloc_const_cpuset_t set, int depth, hwloc_obj_t prev)</div><div class="ttdoc">Iterate through same-depth objects covering at least CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:321</div></div>
717 <div class="ttc" id="aa00203_html_ga12d8565a3436c565e791ed02a0353621"><div class="ttname"><a href="a00203.html#ga12d8565a3436c565e791ed02a0353621">hwloc_get_next_child</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_child(hwloc_topology_t topology, hwloc_obj_t parent, hwloc_obj_t prev)</div><div class="ttdoc">Return the next child.</div><div class="ttdef"><b>Definition:</b> helper.h:456</div></div>
718 <div class="ttc" id="aa00203_html_ga408cf74f5bf9ed497911a320c7f8cc56"><div class="ttname"><a href="a00203.html#ga408cf74f5bf9ed497911a320c7f8cc56">hwloc_obj_is_in_subtree</a></div><div class="ttdeci">static int hwloc_obj_is_in_subtree(hwloc_topology_t topology, hwloc_obj_t obj, hwloc_obj_t subtree_root)</div><div class="ttdoc">Returns true if obj is inside the subtree beginning with ancestor object subtree_root.</div><div class="ttdef"><b>Definition:</b> helper.h:440</div></div>
719 <div class="ttc" id="aa00203_html_ga70f0c7583291da707c15ae4daa850f41"><div class="ttname"><a href="a00203.html#ga70f0c7583291da707c15ae4daa850f41">hwloc_get_ancestor_obj_by_type</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_ancestor_obj_by_type(hwloc_topology_t topology, hwloc_obj_type_t type, hwloc_obj_t obj)</div><div class="ttdoc">Returns the ancestor object of obj with type type.</div><div class="ttdef"><b>Definition:</b> helper.h:400</div></div>
720 <div class="ttc" id="aa00203_html_ga9f8c93fde236e9642a96957af01a11cb"><div class="ttname"><a href="a00203.html#ga9f8c93fde236e9642a96957af01a11cb">hwloc_get_ancestor_obj_by_depth</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_ancestor_obj_by_depth(hwloc_topology_t topology, int depth, hwloc_obj_t obj)</div><div class="ttdoc">Returns the ancestor object of obj at depth depth.</div><div class="ttdef"><b>Definition:</b> helper.h:380</div></div>
721 <div class="ttc" id="aa00203_html_gab1fa883021928b5c476911c4102e9be3"><div class="ttname"><a href="a00203.html#gab1fa883021928b5c476911c4102e9be3">hwloc_get_common_ancestor_obj</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_common_ancestor_obj(hwloc_topology_t topology, hwloc_obj_t obj1, hwloc_obj_t obj2)</div><div class="ttdoc">Returns the common parent object to objects obj1 and obj2.</div><div class="ttdef"><b>Definition:</b> helper.h:412</div></div>
722 <div class="ttc" id="aa00204_html_ga1d074390c8a3dc3088d84f73fb73f966"><div class="ttname"><a href="a00204.html#ga1d074390c8a3dc3088d84f73fb73f966">hwloc_obj_type_is_memory</a></div><div class="ttdeci">int hwloc_obj_type_is_memory(hwloc_obj_type_t type)</div><div class="ttdoc">Check whether an object type is Memory.</div></div>
723 <div class="ttc" id="aa00204_html_ga2ed589bea28711e80b92066510a5607d"><div class="ttname"><a href="a00204.html#ga2ed589bea28711e80b92066510a5607d">hwloc_obj_type_is_cache</a></div><div class="ttdeci">int hwloc_obj_type_is_cache(hwloc_obj_type_t type)</div><div class="ttdoc">Check whether an object type is a CPU Cache (Data, Unified or Instruction).</div></div>
724 <div class="ttc" id="aa00204_html_ga395e48cd221d107e5891689624e1aec4"><div class="ttname"><a href="a00204.html#ga395e48cd221d107e5891689624e1aec4">hwloc_obj_type_is_dcache</a></div><div class="ttdeci">int hwloc_obj_type_is_dcache(hwloc_obj_type_t type)</div><div class="ttdoc">Check whether an object type is a CPU Data or Unified Cache.</div></div>
725 <div class="ttc" id="aa00204_html_ga52ef38431eba383b048b98c669b59a16"><div class="ttname"><a href="a00204.html#ga52ef38431eba383b048b98c669b59a16">hwloc_obj_type_is_normal</a></div><div class="ttdeci">int hwloc_obj_type_is_normal(hwloc_obj_type_t type)</div><div class="ttdoc">Check whether an object type is Normal.</div></div>
726 <div class="ttc" id="aa00204_html_ga8abcee67b9b074332c1866405a3648a9"><div class="ttname"><a href="a00204.html#ga8abcee67b9b074332c1866405a3648a9">hwloc_obj_type_is_icache</a></div><div class="ttdeci">int hwloc_obj_type_is_icache(hwloc_obj_type_t type)</div><div class="ttdoc">Check whether an object type is a CPU Instruction Cache,.</div></div>
727 <div class="ttc" id="aa00204_html_gac8a954ed37a4376097234c828068cbef"><div class="ttname"><a href="a00204.html#gac8a954ed37a4376097234c828068cbef">hwloc_obj_type_is_io</a></div><div class="ttdeci">int hwloc_obj_type_is_io(hwloc_obj_type_t type)</div><div class="ttdoc">Check whether an object type is I/O.</div></div>
728 <div class="ttc" id="aa00205_html_ga36f48c32837c7a70b424706e213dcd71"><div class="ttname"><a href="a00205.html#ga36f48c32837c7a70b424706e213dcd71">hwloc_get_shared_cache_covering_obj</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_shared_cache_covering_obj(hwloc_topology_t topology, hwloc_obj_t obj)</div><div class="ttdoc">Get the first data (or unified) cache shared between an object and somebody else.</div><div class="ttdef"><b>Definition:</b> helper.h:648</div></div>
729 <div class="ttc" id="aa00205_html_gac4cd480a5deaa4ada047fdd11ae4c070"><div class="ttname"><a href="a00205.html#gac4cd480a5deaa4ada047fdd11ae4c070">hwloc_get_cache_covering_cpuset</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_cache_covering_cpuset(hwloc_topology_t topology, hwloc_const_cpuset_t set)</div><div class="ttdoc">Get the first data (or unified) cache covering a cpuset set.</div><div class="ttdef"><b>Definition:</b> helper.h:630</div></div>
730 <div class="ttc" id="aa00205_html_gad108a09ce400222fe45545257d575489"><div class="ttname"><a href="a00205.html#gad108a09ce400222fe45545257d575489">hwloc_get_cache_type_depth</a></div><div class="ttdeci">static int hwloc_get_cache_type_depth(hwloc_topology_t topology, unsigned cachelevel, hwloc_obj_cache_type_t cachetype)</div><div class="ttdoc">Find the depth of cache objects matching cache level and type.</div><div class="ttdef"><b>Definition:</b> helper.h:594</div></div>
731 <div class="ttc" id="aa00206_html_ga050646458efc8ca1120d9f124c5ad861"><div class="ttname"><a href="a00206.html#ga050646458efc8ca1120d9f124c5ad861">hwloc_bitmap_singlify_per_core</a></div><div class="ttdeci">int hwloc_bitmap_singlify_per_core(hwloc_topology_t topology, hwloc_bitmap_t cpuset, unsigned which)</div><div class="ttdoc">Remove simultaneous multithreading PUs from a CPU set.</div></div>
732 <div class="ttc" id="aa00206_html_ga2cd22a34360643f7f5bad09576dec205"><div class="ttname"><a href="a00206.html#ga2cd22a34360643f7f5bad09576dec205">hwloc_get_closest_objs</a></div><div class="ttdeci">unsigned hwloc_get_closest_objs(hwloc_topology_t topology, hwloc_obj_t src, hwloc_obj_t *restrict objs, unsigned max)</div><div class="ttdoc">Do a depth-first traversal of the topology to find and sort.</div></div>
733 <div class="ttc" id="aa00206_html_ga751c238a4931db5cc0ca3181b7dd7479"><div class="ttname"><a href="a00206.html#ga751c238a4931db5cc0ca3181b7dd7479">hwloc_get_pu_obj_by_os_index</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_pu_obj_by_os_index(hwloc_topology_t topology, unsigned os_index)</div><div class="ttdoc">Returns the object of type HWLOC_OBJ_PU with os_index.</div><div class="ttdef"><b>Definition:</b> helper.h:705</div></div>
734 <div class="ttc" id="aa00206_html_ga7a0c1046851f7a88bd52f5a1d4ba0a97"><div class="ttname"><a href="a00206.html#ga7a0c1046851f7a88bd52f5a1d4ba0a97">hwloc_get_obj_below_by_type</a></div><div class="ttdeci">static 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)</div><div class="ttdoc">Find an object below another object, both specified by types and indexes.</div><div class="ttdef"><b>Definition:</b> helper.h:766</div></div>
735 <div class="ttc" id="aa00206_html_gab89d9ed9edfaa3dd526fb6ee1a1618ea"><div class="ttname"><a href="a00206.html#gab89d9ed9edfaa3dd526fb6ee1a1618ea">hwloc_get_numanode_obj_by_os_index</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_numanode_obj_by_os_index(hwloc_topology_t topology, unsigned os_index)</div><div class="ttdoc">Returns the object of type HWLOC_OBJ_NUMANODE with os_index.</div><div class="ttdef"><b>Definition:</b> helper.h:726</div></div>
736 <div class="ttc" id="aa00206_html_gacb51295ff3fbd3a96f990f20c6492b1d"><div class="ttname"><a href="a00206.html#gacb51295ff3fbd3a96f990f20c6492b1d">hwloc_get_obj_below_array_by_type</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_obj_below_array_by_type(hwloc_topology_t topology, int nr, hwloc_obj_type_t *typev, unsigned *idxv)</div><div class="ttdoc">Find an object below a chain of objects specified by types and indexes.</div><div class="ttdef"><b>Definition:</b> helper.h:798</div></div>
737 <div class="ttc" id="aa00207_html_ga7b0c28f797c2ff17fa2f244ebbd55b33"><div class="ttname"><a href="a00207.html#ga7b0c28f797c2ff17fa2f244ebbd55b33">hwloc_distrib</a></div><div class="ttdeci">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)</div><div class="ttdoc">Distribute n items over the topology under roots.</div><div class="ttdef"><b>Definition:</b> helper.h:851</div></div>
738 <div class="ttc" id="aa00207_html_ga8b835295a52b6768a5e6c8abb1f9c54d"><div class="ttname"><a href="a00207.html#ga8b835295a52b6768a5e6c8abb1f9c54d">hwloc_distrib_flags_e</a></div><div class="ttdeci">hwloc_distrib_flags_e</div><div class="ttdoc">Flags to be given to hwloc_distrib().</div><div class="ttdef"><b>Definition:</b> helper.h:820</div></div>
739 <div class="ttc" id="aa00207_html_gga8b835295a52b6768a5e6c8abb1f9c54da2ca08404bfbebe9ed5f34c3d7635425a"><div class="ttname"><a href="a00207.html#gga8b835295a52b6768a5e6c8abb1f9c54da2ca08404bfbebe9ed5f34c3d7635425a">HWLOC_DISTRIB_FLAG_REVERSE</a></div><div class="ttdeci">@ HWLOC_DISTRIB_FLAG_REVERSE</div><div class="ttdoc">Distrib in reverse order, starting from the last objects.</div><div class="ttdef"><b>Definition:</b> helper.h:824</div></div>
740 <div class="ttc" id="aa00208_html_ga21a4d7237a11e76b912ed4524ab78cbd"><div class="ttname"><a href="a00208.html#ga21a4d7237a11e76b912ed4524ab78cbd">hwloc_topology_get_allowed_nodeset</a></div><div class="ttdeci">hwloc_const_nodeset_t hwloc_topology_get_allowed_nodeset(hwloc_topology_t topology)</div><div class="ttdoc">Get allowed node set.</div></div>
741 <div class="ttc" id="aa00208_html_ga3fd37303e99ace8b0d0ea03f95f8c514"><div class="ttname"><a href="a00208.html#ga3fd37303e99ace8b0d0ea03f95f8c514">hwloc_topology_get_topology_nodeset</a></div><div class="ttdeci">hwloc_const_nodeset_t hwloc_topology_get_topology_nodeset(hwloc_topology_t topology)</div><div class="ttdoc">Get topology node set.</div></div>
742 <div class="ttc" id="aa00208_html_ga517d5d68ec9f24583d8933aab713be8e"><div class="ttname"><a href="a00208.html#ga517d5d68ec9f24583d8933aab713be8e">hwloc_topology_get_allowed_cpuset</a></div><div class="ttdeci">hwloc_const_cpuset_t hwloc_topology_get_allowed_cpuset(hwloc_topology_t topology)</div><div class="ttdoc">Get allowed CPU set.</div></div>
743 <div class="ttc" id="aa00208_html_ga773fd98949461ef4c1e3170bb0c0418f"><div class="ttname"><a href="a00208.html#ga773fd98949461ef4c1e3170bb0c0418f">hwloc_topology_get_complete_nodeset</a></div><div class="ttdeci">hwloc_const_nodeset_t hwloc_topology_get_complete_nodeset(hwloc_topology_t topology)</div><div class="ttdoc">Get complete node set.</div></div>
744 <div class="ttc" id="aa00208_html_ga79212faa07b70dd26588941b17d9fa82"><div class="ttname"><a href="a00208.html#ga79212faa07b70dd26588941b17d9fa82">hwloc_topology_get_topology_cpuset</a></div><div class="ttdeci">hwloc_const_cpuset_t hwloc_topology_get_topology_cpuset(hwloc_topology_t topology)</div><div class="ttdoc">Get topology CPU set.</div></div>
745 <div class="ttc" id="aa00208_html_gaee30e03391c1ed7dfd617fb5c7bbb033"><div class="ttname"><a href="a00208.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a></div><div class="ttdeci">hwloc_const_cpuset_t hwloc_topology_get_complete_cpuset(hwloc_topology_t topology)</div><div class="ttdoc">Get complete CPU set.</div></div>
746 <div class="ttc" id="aa00209_html_ga185751c1653fedbeb7cc480840f38cde"><div class="ttname"><a href="a00209.html#ga185751c1653fedbeb7cc480840f38cde">hwloc_cpuset_to_nodeset</a></div><div class="ttdeci">static int hwloc_cpuset_to_nodeset(hwloc_topology_t topology, hwloc_const_cpuset_t _cpuset, hwloc_nodeset_t nodeset)</div><div class="ttdoc">Convert a CPU set into a NUMA node set.</div><div class="ttdef"><b>Definition:</b> helper.h:1031</div></div>
747 <div class="ttc" id="aa00209_html_gad5ee8691e08a3538ea7633344c00456d"><div class="ttname"><a href="a00209.html#gad5ee8691e08a3538ea7633344c00456d">hwloc_cpuset_from_nodeset</a></div><div class="ttdeci">static int hwloc_cpuset_from_nodeset(hwloc_topology_t topology, hwloc_cpuset_t _cpuset, hwloc_const_nodeset_t nodeset)</div><div class="ttdoc">Convert a NUMA node set into a CPU set.</div><div class="ttdef"><b>Definition:</b> helper.h:1055</div></div>
748 <div class="ttc" id="aa00210_html_ga0d92a9462a3d317f29ecb4442a307fb1"><div class="ttname"><a href="a00210.html#ga0d92a9462a3d317f29ecb4442a307fb1">hwloc_bridge_covers_pcibus</a></div><div class="ttdeci">static int hwloc_bridge_covers_pcibus(hwloc_obj_t bridge, unsigned domain, unsigned bus)</div><div class="ttdef"><b>Definition:</b> helper.h:1169</div></div>
749 <div class="ttc" id="aa00210_html_ga23a978469353134b3104b846fe2efceb"><div class="ttname"><a href="a00210.html#ga23a978469353134b3104b846fe2efceb">hwloc_get_pcidev_by_busidstring</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_pcidev_by_busidstring(hwloc_topology_t topology, const char *busid)</div><div class="ttdoc">Find the PCI device object matching the PCI bus id given as a string xxxx:yy:zz.t or yy:zz....</div><div class="ttdef"><b>Definition:</b> helper.h:1132</div></div>
750 <div class="ttc" id="aa00210_html_ga66470dabce9db19a57c5940a909d0baa"><div class="ttname"><a href="a00210.html#ga66470dabce9db19a57c5940a909d0baa">hwloc_get_next_pcidev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_pcidev(hwloc_topology_t topology, hwloc_obj_t prev)</div><div class="ttdoc">Get the next PCI device in the system.</div><div class="ttdef"><b>Definition:</b> helper.h:1105</div></div>
751 <div class="ttc" id="aa00210_html_ga8b4584c8949e2c5f1c97ba7fe92b8145"><div class="ttname"><a href="a00210.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_osdev(hwloc_topology_t topology, hwloc_obj_t prev)</div><div class="ttdoc">Get the next OS device in the system.</div><div class="ttdef"><b>Definition:</b> helper.h:1151</div></div>
752 <div class="ttc" id="aa00210_html_ga9dba22a3f4f701f2a46780ba9a0bbbe7"><div class="ttname"><a href="a00210.html#ga9dba22a3f4f701f2a46780ba9a0bbbe7">hwloc_get_next_bridge</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_bridge(hwloc_topology_t topology, hwloc_obj_t prev)</div><div class="ttdoc">Get the next bridge in the system.</div><div class="ttdef"><b>Definition:</b> helper.h:1161</div></div>
753 <div class="ttc" id="aa00210_html_gacdbaf0db98872e224b7883a84bfb0455"><div class="ttname"><a href="a00210.html#gacdbaf0db98872e224b7883a84bfb0455">hwloc_get_pcidev_by_busid</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_pcidev_by_busid(hwloc_topology_t topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)</div><div class="ttdoc">Find the PCI device object matching the PCI bus id given domain, bus device and function PCI bus id.</div><div class="ttdef"><b>Definition:</b> helper.h:1114</div></div>
754 <div class="ttc" id="aa00210_html_gaf139bb61375178e90cc3f1835b452ab6"><div class="ttname"><a href="a00210.html#gaf139bb61375178e90cc3f1835b452ab6">hwloc_get_non_io_ancestor_obj</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_non_io_ancestor_obj(hwloc_topology_t topology, hwloc_obj_t ioobj)</div><div class="ttdoc">Get the first non-I/O ancestor object.</div><div class="ttdef"><b>Definition:</b> helper.h:1090</div></div>
755 <div class="ttc" id="aa00211_html_ga0200466842c0e1f5da75e84dde460b10"><div class="ttname"><a href="a00211.html#ga0200466842c0e1f5da75e84dde460b10">hwloc_bitmap_weight</a></div><div class="ttdeci">int hwloc_bitmap_weight(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Compute the &quot;weight&quot; of bitmap bitmap (i.e., number of indexes that are in the bitmap).</div></div>
756 <div class="ttc" id="aa00211_html_ga0526e03db81956fb02acc8260b66d6a4"><div class="ttname"><a href="a00211.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a></div><div class="ttdeci">int hwloc_bitmap_isincluded(hwloc_const_bitmap_t sub_bitmap, hwloc_const_bitmap_t super_bitmap)</div><div class="ttdoc">Test whether bitmap sub_bitmap is part of bitmap super_bitmap.</div></div>
757 <div class="ttc" id="aa00211_html_ga062dbff93baeff3b425a7260c5463646"><div class="ttname"><a href="a00211.html#ga062dbff93baeff3b425a7260c5463646">hwloc_bitmap_set</a></div><div class="ttdeci">int hwloc_bitmap_set(hwloc_bitmap_t bitmap, unsigned id)</div><div class="ttdoc">Add index id in bitmap bitmap.</div></div>
758 <div class="ttc" id="aa00211_html_ga11340dd487f110bb84f0a6e4ae90bd06"><div class="ttname"><a href="a00211.html#ga11340dd487f110bb84f0a6e4ae90bd06">hwloc_bitmap_isset</a></div><div class="ttdeci">int hwloc_bitmap_isset(hwloc_const_bitmap_t bitmap, unsigned id)</div><div class="ttdoc">Test whether index id is part of bitmap bitmap.</div></div>
759 <div class="ttc" id="aa00211_html_ga120b8aefb9ce7ef349929656359b1859"><div class="ttname"><a href="a00211.html#ga120b8aefb9ce7ef349929656359b1859">hwloc_bitmap_or</a></div><div class="ttdeci">int hwloc_bitmap_or(hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">Or bitmaps bitmap1 and bitmap2 and store the result in bitmap res.</div></div>
760 <div class="ttc" id="aa00211_html_ga32376b1405e57472b73c3aa53bb39663"><div class="ttname"><a href="a00211.html#ga32376b1405e57472b73c3aa53bb39663">hwloc_bitmap_isequal</a></div><div class="ttdeci">int hwloc_bitmap_isequal(hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">Test whether bitmap bitmap1 is equal to bitmap bitmap2.</div></div>
761 <div class="ttc" id="aa00211_html_ga5b64be28f5a7176ed8ad0d6a90bdf108"><div class="ttname"><a href="a00211.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a></div><div class="ttdeci">int hwloc_bitmap_iszero(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Test whether bitmap bitmap is empty.</div></div>
762 <div class="ttc" id="aa00211_html_gaa3c2bf4c776d603dcebbb61b0c923d84"><div class="ttname"><a href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a></div><div class="ttdeci">struct hwloc_bitmap_s * hwloc_bitmap_t</div><div class="ttdoc">Set of bits represented as an opaque pointer to an internal bitmap.</div><div class="ttdef"><b>Definition:</b> bitmap.h:68</div></div>
763 <div class="ttc" id="aa00211_html_gaa97c5217613c8cae9862287170ea2132"><div class="ttname"><a href="a00211.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a></div><div class="ttdeci">void hwloc_bitmap_zero(hwloc_bitmap_t bitmap)</div><div class="ttdoc">Empty the bitmap bitmap.</div></div>
764 <div class="ttc" id="aa00211_html_gae679434c1a5f41d3560a8a7e2c1b0dee"><div class="ttname"><a href="a00211.html#gae679434c1a5f41d3560a8a7e2c1b0dee">hwloc_bitmap_dup</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_bitmap_dup(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.</div></div>
765 <div class="ttc" id="aa00211_html_gaefa070f9232857ba5a57297ea9a08ea2"><div class="ttname"><a href="a00211.html#gaefa070f9232857ba5a57297ea9a08ea2">hwloc_bitmap_intersects</a></div><div class="ttdeci">int hwloc_bitmap_intersects(hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">Test whether bitmaps bitmap1 and bitmap2 intersects.</div></div>
766 <div class="ttc" id="aa00244_html"><div class="ttname"><a href="a00244.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:395</div></div>
767 <div class="ttc" id="aa00244_html_a04d05403da37bfe17cd63b7c7dd07b1f"><div class="ttname"><a href="a00244.html#a04d05403da37bfe17cd63b7c7dd07b1f">hwloc_obj::children</a></div><div class="ttdeci">struct hwloc_obj ** children</div><div class="ttdoc">Normal children, children[0 .. arity -1].</div><div class="ttdef"><b>Definition:</b> hwloc.h:455</div></div>
768 <div class="ttc" id="aa00244_html_a08f0d0e16c619a6e653526cbee4ffea3"><div class="ttname"><a href="a00244.html#a08f0d0e16c619a6e653526cbee4ffea3">hwloc_obj::nodeset</a></div><div class="ttdeci">hwloc_nodeset_t nodeset</div><div class="ttdoc">NUMA nodes covered by this object or containing this object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:539</div></div>
769 <div class="ttc" id="aa00244_html_a4876fd165b4fff35521f07ebd85355ed"><div class="ttname"><a href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">hwloc_obj::depth</a></div><div class="ttdeci">int depth</div><div class="ttdoc">Vertical index in the hierarchy.</div><div class="ttdef"><b>Definition:</b> hwloc.h:418</div></div>
770 <div class="ttc" id="aa00244_html_a57812a313fe9b1a9500489f47c3011cc"><div class="ttname"><a href="a00244.html#a57812a313fe9b1a9500489f47c3011cc">hwloc_obj::misc_first_child</a></div><div class="ttdeci">struct hwloc_obj * misc_first_child</div><div class="ttdoc">First Misc child. Misc objects are listed here (misc_arity and misc_first_child) instead of in the no...</div><div class="ttdef"><b>Definition:</b> hwloc.h:504</div></div>
771 <div class="ttc" id="aa00244_html_a61a7a80a68eaccbaaa28269e678c81a9"><div class="ttname"><a href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">hwloc_obj::os_index</a></div><div class="ttdeci">unsigned os_index</div><div class="ttdoc">OS-provided physical index number. It is not guaranteed unique across the entire machine,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:400</div></div>
772 <div class="ttc" id="aa00244_html_a67925e0f2c47f50408fbdb9bddd0790f"><div class="ttname"><a href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">hwloc_obj::cpuset</a></div><div class="ttdeci">hwloc_cpuset_t cpuset</div><div class="ttdoc">CPUs covered by this object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:511</div></div>
773 <div class="ttc" id="aa00244_html_a7f2343ed476fe4942e6fffd4cade1b40"><div class="ttname"><a href="a00244.html#a7f2343ed476fe4942e6fffd4cade1b40">hwloc_obj::next_sibling</a></div><div class="ttdeci">struct hwloc_obj * next_sibling</div><div class="ttdoc">Next object below the same parent (inside the same list of children).</div><div class="ttdef"><b>Definition:</b> hwloc.h:447</div></div>
774 <div class="ttc" id="aa00244_html_a85a788017457129589318b6c39451acf"><div class="ttname"><a href="a00244.html#a85a788017457129589318b6c39451acf">hwloc_obj::next_cousin</a></div><div class="ttdeci">struct hwloc_obj * next_cousin</div><div class="ttdoc">Next object of same type and depth.</div><div class="ttdef"><b>Definition:</b> hwloc.h:441</div></div>
775 <div class="ttc" id="aa00244_html_a8d14c88e1ebc4ae67cc69f9e928558b3"><div class="ttname"><a href="a00244.html#a8d14c88e1ebc4ae67cc69f9e928558b3">hwloc_obj::io_first_child</a></div><div class="ttdeci">struct hwloc_obj * io_first_child</div><div class="ttdoc">First I/O child. Bridges, PCI and OS devices are listed here (io_arity and io_first_child) instead of...</div><div class="ttdef"><b>Definition:</b> hwloc.h:492</div></div>
776 <div class="ttc" id="aa00244_html_aac3f6da35c9b57599909a44ce2b716c1"><div class="ttname"><a href="a00244.html#aac3f6da35c9b57599909a44ce2b716c1">hwloc_obj::arity</a></div><div class="ttdeci">unsigned arity</div><div class="ttdoc">Number of normal children. Memory, Misc and I/O children are not listed here but rather in their dedi...</div><div class="ttdef"><b>Definition:</b> hwloc.h:451</div></div>
777 <div class="ttc" id="aa00244_html_ac0e8200dba25b90d5954bd4ec61f97d3"><div class="ttname"><a href="a00244.html#ac0e8200dba25b90d5954bd4ec61f97d3">hwloc_obj::memory_first_child</a></div><div class="ttdeci">struct hwloc_obj * memory_first_child</div><div class="ttdoc">First Memory child. NUMA nodes and Memory-side caches are listed here (memory_arity and memory_first_...</div><div class="ttdef"><b>Definition:</b> hwloc.h:474</div></div>
778 <div class="ttc" id="aa00244_html_ac715989f55ff5a0eb6be2969ee477ec0"><div class="ttname"><a href="a00244.html#ac715989f55ff5a0eb6be2969ee477ec0">hwloc_obj::prev_cousin</a></div><div class="ttdeci">struct hwloc_obj * prev_cousin</div><div class="ttdoc">Previous object of same type and depth.</div><div class="ttdef"><b>Definition:</b> hwloc.h:442</div></div>
779 <div class="ttc" id="aa00244_html_acc4f0803f244867e68fe0036800be5de"><div class="ttname"><a href="a00244.html#acc4f0803f244867e68fe0036800be5de">hwloc_obj::type</a></div><div class="ttdeci">hwloc_obj_type_t type</div><div class="ttdoc">Type of object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:397</div></div>
780 <div class="ttc" id="aa00244_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:414</div></div>
781 <div class="ttc" id="aa00244_html_adc494f6aed939992be1c55cca5822900"><div class="ttname"><a href="a00244.html#adc494f6aed939992be1c55cca5822900">hwloc_obj::parent</a></div><div class="ttdeci">struct hwloc_obj * parent</div><div class="ttdoc">Parent, NULL if root (Machine object)</div><div class="ttdef"><b>Definition:</b> hwloc.h:445</div></div>
782 <div class="ttc" id="aa00244_html_af51d08a0a79dba517c06c5afedc8d2dc"><div class="ttname"><a href="a00244.html#af51d08a0a79dba517c06c5afedc8d2dc">hwloc_obj::first_child</a></div><div class="ttdeci">struct hwloc_obj * first_child</div><div class="ttdoc">First normal child.</div><div class="ttdef"><b>Definition:</b> hwloc.h:456</div></div>
783 <div class="ttc" id="aa00248_html_a0b66da7ab072f7c016f8ed86701f5a7c"><div class="ttname"><a href="a00248.html#a0b66da7ab072f7c016f8ed86701f5a7c">hwloc_obj_attr_u::pcidev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_pcidev_attr_s pcidev</div></div>
784 <div class="ttc" id="aa00248_html_a207e6359497b7116d6f4baa9e8bbeb43"><div class="ttname"><a href="a00248.html#a207e6359497b7116d6f4baa9e8bbeb43">hwloc_obj_attr_u::bridge</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_bridge_attr_s bridge</div></div>
785 <div class="ttc" id="aa00248_html_a23f553f3252c9d13f2338231cd354ea9"><div class="ttname"><a href="a00248.html#a23f553f3252c9d13f2338231cd354ea9">hwloc_obj_attr_u::cache</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_cache_attr_s cache</div></div>
786 <div class="ttc" id="aa00260_html_a5c8f7f39193736c2187ed626940835d5"><div class="ttname"><a href="a00260.html#a5c8f7f39193736c2187ed626940835d5">hwloc_obj_attr_u::hwloc_cache_attr_s::depth</a></div><div class="ttdeci">unsigned depth</div><div class="ttdoc">Depth of cache (e.g., L1, L2, ...etc.)</div><div class="ttdef"><b>Definition:</b> hwloc.h:617</div></div>
787 <div class="ttc" id="aa00260_html_ad8edc8ded2b7a70d6abbc874801930f4"><div class="ttname"><a href="a00260.html#ad8edc8ded2b7a70d6abbc874801930f4">hwloc_obj_attr_u::hwloc_cache_attr_s::type</a></div><div class="ttdeci">hwloc_obj_cache_type_t type</div><div class="ttdoc">Cache type.</div><div class="ttdef"><b>Definition:</b> hwloc.h:621</div></div>
788 <div class="ttc" id="aa00268_html_a3d70c84a12f7e93d14c8d47bf4fd9dc5"><div class="ttname"><a href="a00268.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">hwloc_obj_attr_u::hwloc_pcidev_attr_s::dev</a></div><div class="ttdeci">unsigned char dev</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
789 <div class="ttc" id="aa00268_html_a695f32df53f4ef728670bfcf31b74e0f"><div class="ttname"><a href="a00268.html#a695f32df53f4ef728670bfcf31b74e0f">hwloc_obj_attr_u::hwloc_pcidev_attr_s::func</a></div><div class="ttdeci">unsigned char func</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
790 <div class="ttc" id="aa00268_html_a8fba44988deb98613c1505a4019a34dc"><div class="ttname"><a href="a00268.html#a8fba44988deb98613c1505a4019a34dc">hwloc_obj_attr_u::hwloc_pcidev_attr_s::domain</a></div><div class="ttdeci">unsigned short domain</div><div class="ttdef"><b>Definition:</b> hwloc.h:634</div></div>
791 <div class="ttc" id="aa00268_html_aae99e035e8d1387d7b8768aaa8eceb0a"><div class="ttname"><a href="a00268.html#aae99e035e8d1387d7b8768aaa8eceb0a">hwloc_obj_attr_u::hwloc_pcidev_attr_s::bus</a></div><div class="ttdeci">unsigned char bus</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
792 <div class="ttc" id="aa00272_html_a7d5db91d655ba23ffe9bda7a2cbcb9a8"><div class="ttname"><a href="a00272.html#a7d5db91d655ba23ffe9bda7a2cbcb9a8">hwloc_obj_attr_u::hwloc_bridge_attr_s::downstream</a></div><div class="ttdeci">union hwloc_obj_attr_u::hwloc_bridge_attr_s::@1 downstream</div></div>
793 <div class="ttc" id="aa00272_html_ab5c564e7c95b747dae9eb84ec0a2c31e"><div class="ttname"><a href="a00272.html#ab5c564e7c95b747dae9eb84ec0a2c31e">hwloc_obj_attr_u::hwloc_bridge_attr_s::pci</a></div><div class="ttdeci">struct hwloc_pcidev_attr_s pci</div><div class="ttdef"><b>Definition:</b> hwloc.h:647</div></div>
794 <div class="ttc" id="aa00272_html_ac6a169b672d0e9f75756fd5665828b93"><div class="ttname"><a href="a00272.html#ac6a169b672d0e9f75756fd5665828b93">hwloc_obj_attr_u::hwloc_bridge_attr_s::downstream_type</a></div><div class="ttdeci">hwloc_obj_bridge_type_t downstream_type</div><div class="ttdef"><b>Definition:</b> hwloc.h:660</div></div>
221 <div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
222 <div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
223 <div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160;<span class="preprocessor">#endif</span></div>
224 <div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; </div>
225 <div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; </div>
226 <div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_BITMAP_H */</span><span class="preprocessor"></span></div>
227 <div class="ttc" id="aa00214_html_ga0200466842c0e1f5da75e84dde460b10"><div class="ttname"><a href="a00214.html#ga0200466842c0e1f5da75e84dde460b10">hwloc_bitmap_weight</a></div><div class="ttdeci">int hwloc_bitmap_weight(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Compute the &quot;weight&quot; of bitmap bitmap (i.e., number of indexes that are in the bitmap).</div></div>
228 <div class="ttc" id="aa00214_html_ga02853b4a224970587b9d7a0e20d857c0"><div class="ttname"><a href="a00214.html#ga02853b4a224970587b9d7a0e20d857c0">hwloc_bitmap_alloc_full</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_bitmap_alloc_full(void)</div><div class="ttdoc">Allocate a new full bitmap.</div></div>
229 <div class="ttc" id="aa00214_html_ga0526e03db81956fb02acc8260b66d6a4"><div class="ttname"><a href="a00214.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a></div><div class="ttdeci">int hwloc_bitmap_isincluded(hwloc_const_bitmap_t sub_bitmap, hwloc_const_bitmap_t super_bitmap)</div><div class="ttdoc">Test whether bitmap sub_bitmap is part of bitmap super_bitmap.</div></div>
230 <div class="ttc" id="aa00214_html_ga062dbff93baeff3b425a7260c5463646"><div class="ttname"><a href="a00214.html#ga062dbff93baeff3b425a7260c5463646">hwloc_bitmap_set</a></div><div class="ttdeci">int hwloc_bitmap_set(hwloc_bitmap_t bitmap, unsigned id)</div><div class="ttdoc">Add index id in bitmap bitmap.</div></div>
231 <div class="ttc" id="aa00214_html_ga064a85c643a364b60acbfa0f3663fc18"><div class="ttname"><a href="a00214.html#ga064a85c643a364b60acbfa0f3663fc18">hwloc_bitmap_sscanf</a></div><div class="ttdeci">int hwloc_bitmap_sscanf(hwloc_bitmap_t bitmap, const char *restrict string)</div><div class="ttdoc">Parse a bitmap string and stores it in bitmap bitmap.</div></div>
232 <div class="ttc" id="aa00214_html_ga06d505f8a1c0a536614f65f503ee6d93"><div class="ttname"><a href="a00214.html#ga06d505f8a1c0a536614f65f503ee6d93">hwloc_bitmap_allbut</a></div><div class="ttdeci">int hwloc_bitmap_allbut(hwloc_bitmap_t bitmap, unsigned id)</div><div class="ttdoc">Fill the bitmap and clear the index id.</div></div>
233 <div class="ttc" id="aa00214_html_ga07b2de8786b3cdb22f21d9dd42588275"><div class="ttname"><a href="a00214.html#ga07b2de8786b3cdb22f21d9dd42588275">hwloc_bitmap_fill</a></div><div class="ttdeci">void hwloc_bitmap_fill(hwloc_bitmap_t bitmap)</div><div class="ttdoc">Fill bitmap bitmap with all possible indexes (even if those objects don't exist or are otherwise unav...</div></div>
234 <div class="ttc" id="aa00214_html_ga0fece972134fdecf2da9bc7a11dd827e"><div class="ttname"><a href="a00214.html#ga0fece972134fdecf2da9bc7a11dd827e">hwloc_bitmap_asprintf</a></div><div class="ttdeci">int hwloc_bitmap_asprintf(char **strp, hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Stringify a bitmap into a newly allocated string.</div></div>
235 <div class="ttc" id="aa00214_html_ga10be0840cdeb7ce26d862819dd303baa"><div class="ttname"><a href="a00214.html#ga10be0840cdeb7ce26d862819dd303baa">hwloc_bitmap_only</a></div><div class="ttdeci">int hwloc_bitmap_only(hwloc_bitmap_t bitmap, unsigned id)</div><div class="ttdoc">Empty the bitmap bitmap and add bit id.</div></div>
236 <div class="ttc" id="aa00214_html_ga11340dd487f110bb84f0a6e4ae90bd06"><div class="ttname"><a href="a00214.html#ga11340dd487f110bb84f0a6e4ae90bd06">hwloc_bitmap_isset</a></div><div class="ttdeci">int hwloc_bitmap_isset(hwloc_const_bitmap_t bitmap, unsigned id)</div><div class="ttdoc">Test whether index id is part of bitmap bitmap.</div></div>
237 <div class="ttc" id="aa00214_html_ga120b8aefb9ce7ef349929656359b1859"><div class="ttname"><a href="a00214.html#ga120b8aefb9ce7ef349929656359b1859">hwloc_bitmap_or</a></div><div class="ttdeci">int hwloc_bitmap_or(hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">Or bitmaps bitmap1 and bitmap2 and store the result in bitmap res.</div></div>
238 <div class="ttc" id="aa00214_html_ga14cdbc0ef0a705e84999bd48a2e649f3"><div class="ttname"><a href="a00214.html#ga14cdbc0ef0a705e84999bd48a2e649f3">hwloc_bitmap_compare</a></div><div class="ttdeci">int hwloc_bitmap_compare(hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">Compare bitmaps bitmap1 and bitmap2 in lexicographic order.</div></div>
239 <div class="ttc" id="aa00214_html_ga156130d85b3a0674d6e0e6770fe68fbe"><div class="ttname"><a href="a00214.html#ga156130d85b3a0674d6e0e6770fe68fbe">hwloc_bitmap_free</a></div><div class="ttdeci">void hwloc_bitmap_free(hwloc_bitmap_t bitmap)</div><div class="ttdoc">Free bitmap bitmap.</div></div>
240 <div class="ttc" id="aa00214_html_ga205508218e09cb9befd0687f16409f09"><div class="ttname"><a href="a00214.html#ga205508218e09cb9befd0687f16409f09">hwloc_bitmap_xor</a></div><div class="ttdeci">int hwloc_bitmap_xor(hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">Xor bitmaps bitmap1 and bitmap2 and store the result in bitmap res.</div></div>
241 <div class="ttc" id="aa00214_html_ga32376b1405e57472b73c3aa53bb39663"><div class="ttname"><a href="a00214.html#ga32376b1405e57472b73c3aa53bb39663">hwloc_bitmap_isequal</a></div><div class="ttdeci">int hwloc_bitmap_isequal(hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">Test whether bitmap bitmap1 is equal to bitmap bitmap2.</div></div>
242 <div class="ttc" id="aa00214_html_ga391312513f17c985d871f18367c59512"><div class="ttname"><a href="a00214.html#ga391312513f17c985d871f18367c59512">hwloc_bitmap_taskset_asprintf</a></div><div class="ttdeci">int hwloc_bitmap_taskset_asprintf(char **strp, hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Stringify a bitmap into a newly allocated taskset-specific string.</div></div>
243 <div class="ttc" id="aa00214_html_ga39c0f1b02053de66d205c9f8260b3665"><div class="ttname"><a href="a00214.html#ga39c0f1b02053de66d205c9f8260b3665">hwloc_bitmap_list_asprintf</a></div><div class="ttdeci">int hwloc_bitmap_list_asprintf(char **strp, hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Stringify a bitmap into a newly allocated list string.</div></div>
244 <div class="ttc" id="aa00214_html_ga3d06e6447edeb61e56a9ad83f31f0a37"><div class="ttname"><a href="a00214.html#ga3d06e6447edeb61e56a9ad83f31f0a37">hwloc_bitmap_list_snprintf</a></div><div class="ttdeci">int hwloc_bitmap_list_snprintf(char *restrict buf, size_t buflen, hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Stringify a bitmap in the list format.</div></div>
245 <div class="ttc" id="aa00214_html_ga3d9b08b060a59bbab5a4ea6d0a1ed7a6"><div class="ttname"><a href="a00214.html#ga3d9b08b060a59bbab5a4ea6d0a1ed7a6">hwloc_bitmap_last</a></div><div class="ttdeci">int hwloc_bitmap_last(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Compute the last index (most significant bit) in bitmap bitmap.</div></div>
246 <div class="ttc" id="aa00214_html_ga3daeed965c35c6d2fd4820a318219985"><div class="ttname"><a href="a00214.html#ga3daeed965c35c6d2fd4820a318219985">hwloc_bitmap_set_ith_ulong</a></div><div class="ttdeci">int hwloc_bitmap_set_ith_ulong(hwloc_bitmap_t bitmap, unsigned i, unsigned long mask)</div><div class="ttdoc">Replace i -th subset of bitmap bitmap with unsigned long mask.</div></div>
247 <div class="ttc" id="aa00214_html_ga3ec1ced43afadf8c0a7197320bc016ed"><div class="ttname"><a href="a00214.html#ga3ec1ced43afadf8c0a7197320bc016ed">hwloc_bitmap_first</a></div><div class="ttdeci">int hwloc_bitmap_first(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Compute the first index (least significant bit) in bitmap bitmap.</div></div>
248 <div class="ttc" id="aa00214_html_ga45d49aeb45c7da631b1480a93dc3fc92"><div class="ttname"><a href="a00214.html#ga45d49aeb45c7da631b1480a93dc3fc92">hwloc_bitmap_last_unset</a></div><div class="ttdeci">int hwloc_bitmap_last_unset(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Compute the last unset index (most significant bit) in bitmap bitmap.</div></div>
249 <div class="ttc" id="aa00214_html_ga4947c46d47bcfcd3faf3f59569be3e37"><div class="ttname"><a href="a00214.html#ga4947c46d47bcfcd3faf3f59569be3e37">hwloc_bitmap_from_ith_ulong</a></div><div class="ttdeci">int hwloc_bitmap_from_ith_ulong(hwloc_bitmap_t bitmap, unsigned i, unsigned long mask)</div><div class="ttdoc">Setup bitmap bitmap from unsigned long mask used as i -th subset.</div></div>
250 <div class="ttc" id="aa00214_html_ga4f23db5041240e03e348752f8bd6ec2d"><div class="ttname"><a href="a00214.html#ga4f23db5041240e03e348752f8bd6ec2d">hwloc_bitmap_taskset_sscanf</a></div><div class="ttdeci">int hwloc_bitmap_taskset_sscanf(hwloc_bitmap_t bitmap, const char *restrict string)</div><div class="ttdoc">Parse a taskset-specific bitmap string and stores it in bitmap bitmap.</div></div>
251 <div class="ttc" id="aa00214_html_ga5b64be28f5a7176ed8ad0d6a90bdf108"><div class="ttname"><a href="a00214.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a></div><div class="ttdeci">int hwloc_bitmap_iszero(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Test whether bitmap bitmap is empty.</div></div>
252 <div class="ttc" id="aa00214_html_ga5beb68a987fe48e5c5edef06ab260e14"><div class="ttname"><a href="a00214.html#ga5beb68a987fe48e5c5edef06ab260e14">hwloc_bitmap_taskset_snprintf</a></div><div class="ttdeci">int hwloc_bitmap_taskset_snprintf(char *restrict buf, size_t buflen, hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Stringify a bitmap in the taskset-specific format.</div></div>
253 <div class="ttc" id="aa00214_html_ga5fdcb8c19c336511c37076d649e74af4"><div class="ttname"><a href="a00214.html#ga5fdcb8c19c336511c37076d649e74af4">hwloc_bitmap_isfull</a></div><div class="ttdeci">int hwloc_bitmap_isfull(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Test whether bitmap bitmap is completely full.</div></div>
254 <div class="ttc" id="aa00214_html_ga674533016ffed922a28b4f0b49b82cd4"><div class="ttname"><a href="a00214.html#ga674533016ffed922a28b4f0b49b82cd4">hwloc_bitmap_and</a></div><div class="ttdeci">int hwloc_bitmap_and(hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">And bitmaps bitmap1 and bitmap2 and store the result in bitmap res.</div></div>
255 <div class="ttc" id="aa00214_html_ga72a29824798b48784b8217471ec8f14c"><div class="ttname"><a href="a00214.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a></div><div class="ttdeci">int hwloc_bitmap_copy(hwloc_bitmap_t dst, hwloc_const_bitmap_t src)</div><div class="ttdoc">Copy the contents of bitmap src into the already allocated bitmap dst.</div></div>
256 <div class="ttc" id="aa00214_html_ga7ca5c72db65406b85aca032c8a990f9e"><div class="ttname"><a href="a00214.html#ga7ca5c72db65406b85aca032c8a990f9e">hwloc_bitmap_andnot</a></div><div class="ttdeci">int hwloc_bitmap_andnot(hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">And bitmap bitmap1 and the negation of bitmap2 and store the result in bitmap res.</div></div>
257 <div class="ttc" id="aa00214_html_ga833776709df94d727f8c22304b3388cf"><div class="ttname"><a href="a00214.html#ga833776709df94d727f8c22304b3388cf">hwloc_bitmap_clr_range</a></div><div class="ttdeci">int hwloc_bitmap_clr_range(hwloc_bitmap_t bitmap, unsigned begin, int end)</div><div class="ttdoc">Remove indexes from begin to end in bitmap bitmap.</div></div>
258 <div class="ttc" id="aa00214_html_ga84cfdb4f8ab8c1f7e097728e613a2a3f"><div class="ttname"><a href="a00214.html#ga84cfdb4f8ab8c1f7e097728e613a2a3f">hwloc_bitmap_not</a></div><div class="ttdeci">int hwloc_bitmap_not(hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Negate bitmap bitmap and store the result in bitmap res.</div></div>
259 <div class="ttc" id="aa00214_html_ga9511644657030a021dce9941e3cda583"><div class="ttname"><a href="a00214.html#ga9511644657030a021dce9941e3cda583">hwloc_bitmap_snprintf</a></div><div class="ttdeci">int hwloc_bitmap_snprintf(char *restrict buf, size_t buflen, hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Stringify a bitmap.</div></div>
260 <div class="ttc" id="aa00214_html_ga9653af34d1460ef106b7df25af4cdca8"><div class="ttname"><a href="a00214.html#ga9653af34d1460ef106b7df25af4cdca8">hwloc_bitmap_next_unset</a></div><div class="ttdeci">int hwloc_bitmap_next_unset(hwloc_const_bitmap_t bitmap, int prev)</div><div class="ttdoc">Compute the next unset index in bitmap bitmap which is after index prev.</div></div>
261 <div class="ttc" id="aa00214_html_ga9c9a8433732fb9f24899e7aa4c014d7e"><div class="ttname"><a href="a00214.html#ga9c9a8433732fb9f24899e7aa4c014d7e">hwloc_bitmap_set_range</a></div><div class="ttdeci">int hwloc_bitmap_set_range(hwloc_bitmap_t bitmap, unsigned begin, int end)</div><div class="ttdoc">Add indexes from begin to end in bitmap bitmap.</div></div>
262 <div class="ttc" id="aa00214_html_gaa39cda1510ab721b5c012c76ead72365"><div class="ttname"><a href="a00214.html#gaa39cda1510ab721b5c012c76ead72365">hwloc_bitmap_compare_first</a></div><div class="ttdeci">int hwloc_bitmap_compare_first(hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">Compare bitmaps bitmap1 and bitmap2 using their lowest index.</div></div>
263 <div class="ttc" id="aa00214_html_gaa3c2bf4c776d603dcebbb61b0c923d84"><div class="ttname"><a href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a></div><div class="ttdeci">struct hwloc_bitmap_s * hwloc_bitmap_t</div><div class="ttdoc">Set of bits represented as an opaque pointer to an internal bitmap.</div><div class="ttdef"><b>Definition:</b> bitmap.h:68</div></div>
264 <div class="ttc" id="aa00214_html_gaa611a77c092e679246afdf9a60d5db8b"><div class="ttname"><a href="a00214.html#gaa611a77c092e679246afdf9a60d5db8b">hwloc_bitmap_singlify</a></div><div class="ttdeci">int hwloc_bitmap_singlify(hwloc_bitmap_t bitmap)</div><div class="ttdoc">Keep a single index among those set in bitmap bitmap.</div></div>
265 <div class="ttc" id="aa00214_html_gaa97c5217613c8cae9862287170ea2132"><div class="ttname"><a href="a00214.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a></div><div class="ttdeci">void hwloc_bitmap_zero(hwloc_bitmap_t bitmap)</div><div class="ttdoc">Empty the bitmap bitmap.</div></div>
266 <div class="ttc" id="aa00214_html_gaab7240b4b644693b775dad17b44ffd68"><div class="ttname"><a href="a00214.html#gaab7240b4b644693b775dad17b44ffd68">hwloc_bitmap_next</a></div><div class="ttdeci">int hwloc_bitmap_next(hwloc_const_bitmap_t bitmap, int prev)</div><div class="ttdoc">Compute the next index in bitmap bitmap which is after index prev.</div></div>
267 <div class="ttc" id="aa00214_html_gab6a6bae22a33ec6adfc169a953c13e6c"><div class="ttname"><a href="a00214.html#gab6a6bae22a33ec6adfc169a953c13e6c">hwloc_bitmap_to_ulong</a></div><div class="ttdeci">unsigned long hwloc_bitmap_to_ulong(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Convert the beginning part of bitmap bitmap into unsigned long mask.</div></div>
268 <div class="ttc" id="aa00214_html_gabcfef22f6fc4d4b33f068dd91a1c38f5"><div class="ttname"><a href="a00214.html#gabcfef22f6fc4d4b33f068dd91a1c38f5">hwloc_bitmap_from_ulongs</a></div><div class="ttdeci">int hwloc_bitmap_from_ulongs(hwloc_bitmap_t bitmap, unsigned nr, const unsigned long *masks)</div><div class="ttdoc">Setup bitmap bitmap from unsigned longs masks used as first nr subsets.</div></div>
269 <div class="ttc" id="aa00214_html_gac0744734d761d65c977aece565364908"><div class="ttname"><a href="a00214.html#gac0744734d761d65c977aece565364908">hwloc_bitmap_nr_ulongs</a></div><div class="ttdeci">int hwloc_bitmap_nr_ulongs(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Return the number of unsigned longs required for storing bitmap bitmap entirely.</div></div>
270 <div class="ttc" id="aa00214_html_gac92e6404f648d6b99d2c626b05b2ffa4"><div class="ttname"><a href="a00214.html#gac92e6404f648d6b99d2c626b05b2ffa4">hwloc_bitmap_to_ith_ulong</a></div><div class="ttdeci">unsigned long hwloc_bitmap_to_ith_ulong(hwloc_const_bitmap_t bitmap, unsigned i)</div><div class="ttdoc">Convert the i -th subset of bitmap bitmap into unsigned long mask.</div></div>
271 <div class="ttc" id="aa00214_html_gacd215a2348732de25d94a4ecd76d528c"><div class="ttname"><a href="a00214.html#gacd215a2348732de25d94a4ecd76d528c">hwloc_bitmap_to_ulongs</a></div><div class="ttdeci">int hwloc_bitmap_to_ulongs(hwloc_const_bitmap_t bitmap, unsigned nr, unsigned long *masks)</div><div class="ttdoc">Convert the first nr subsets of bitmap bitmap into the array of nr unsigned long masks.</div></div>
272 <div class="ttc" id="aa00214_html_gad59b0ebeb29c1bfabbb2a379e55c1159"><div class="ttname"><a href="a00214.html#gad59b0ebeb29c1bfabbb2a379e55c1159">hwloc_bitmap_from_ulong</a></div><div class="ttdeci">int hwloc_bitmap_from_ulong(hwloc_bitmap_t bitmap, unsigned long mask)</div><div class="ttdoc">Setup bitmap bitmap from unsigned long mask.</div></div>
273 <div class="ttc" id="aa00214_html_gadece3d1eb5199fc2fb99bc7dcf1ccc05"><div class="ttname"><a href="a00214.html#gadece3d1eb5199fc2fb99bc7dcf1ccc05">hwloc_bitmap_alloc</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_bitmap_alloc(void)</div><div class="ttdoc">Allocate a new empty bitmap.</div></div>
274 <div class="ttc" id="aa00214_html_gae408841487b288e148a478ba0465c99e"><div class="ttname"><a href="a00214.html#gae408841487b288e148a478ba0465c99e">hwloc_bitmap_first_unset</a></div><div class="ttdeci">int hwloc_bitmap_first_unset(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Compute the first unset index (least significant bit) in bitmap bitmap.</div></div>
275 <div class="ttc" id="aa00214_html_gae679434c1a5f41d3560a8a7e2c1b0dee"><div class="ttname"><a href="a00214.html#gae679434c1a5f41d3560a8a7e2c1b0dee">hwloc_bitmap_dup</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_bitmap_dup(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.</div></div>
276 <div class="ttc" id="aa00214_html_gae991a108af01d408be2776c5b2c467b2"><div class="ttname"><a href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a></div><div class="ttdeci">const struct hwloc_bitmap_s * hwloc_const_bitmap_t</div><div class="ttdoc">a non-modifiable hwloc_bitmap_t</div><div class="ttdef"><b>Definition:</b> bitmap.h:70</div></div>
277 <div class="ttc" id="aa00214_html_gaefa070f9232857ba5a57297ea9a08ea2"><div class="ttname"><a href="a00214.html#gaefa070f9232857ba5a57297ea9a08ea2">hwloc_bitmap_intersects</a></div><div class="ttdeci">int hwloc_bitmap_intersects(hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">Test whether bitmaps bitmap1 and bitmap2 intersects.</div></div>
278 <div class="ttc" id="aa00214_html_gaf20bb350b6844d08931a064a73f86743"><div class="ttname"><a href="a00214.html#gaf20bb350b6844d08931a064a73f86743">hwloc_bitmap_clr</a></div><div class="ttdeci">int hwloc_bitmap_clr(hwloc_bitmap_t bitmap, unsigned id)</div><div class="ttdoc">Remove index id from bitmap bitmap.</div></div>
279 <div class="ttc" id="aa00214_html_gaf9314311d482c621e17c6a53a9fe993e"><div class="ttname"><a href="a00214.html#gaf9314311d482c621e17c6a53a9fe993e">hwloc_bitmap_list_sscanf</a></div><div class="ttdeci">int hwloc_bitmap_list_sscanf(hwloc_bitmap_t bitmap, const char *restrict string)</div><div class="ttdoc">Parse a list string and stores it in bitmap bitmap.</div></div>
795280 </div><!-- fragment --></div><!-- contents -->
796281 <!-- start footer part -->
797282 <hr class="footer"/><address class="footer"><small>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): bitmap.h Source File</title>
7 <title>Hardware Locality (hwloc): export.h Source File</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4343 </div><!-- top -->
4444 <div class="header">
4545 <div class="headertitle">
46 <div class="title">bitmap.h</div> </div>
46 <div class="title">export.h</div> </div>
4747 </div><!--header-->
4848 <div class="contents">
4949 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
50 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2009 CNRS</span></div>
51 <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * Copyright © 2009-2020 Inria. All rights reserved.</span></div>
52 <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Copyright © 2009-2012 Université Bordeaux</span></div>
53 <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.</span></div>
54 <div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
55 <div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> */</span></div>
56 <div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
57 <div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#ifndef HWLOC_BITMAP_H</span></div>
58 <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#define HWLOC_BITMAP_H</span></div>
59 <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; </div>
60 <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &quot;hwloc/autogen/config.h&quot;</span></div>
61 <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; </div>
62 <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;assert.h&gt;</span></div>
50 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2009-2018 Inria. All rights reserved.</span></div>
51 <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * Copyright © 2009-2012 Université Bordeaux</span></div>
52 <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.</span></div>
53 <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
54 <div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> */</span></div>
55 <div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; </div>
56 <div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#ifndef HWLOC_EXPORT_H</span></div>
57 <div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#define HWLOC_EXPORT_H</span></div>
58 <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; </div>
59 <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef HWLOC_H</span></div>
60 <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#error Please include the main hwloc.h instead</span></div>
61 <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#endif</span></div>
62 <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; </div>
6363 <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
64 <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; </div>
65 <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
66 <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
67 <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#endif</span></div>
68 <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
64 <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
65 <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
66 <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#elif 0</span></div>
67 <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;}</div>
68 <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#endif</span></div>
6969 <div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; </div>
70 <div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84"> 68</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">struct </span>hwloc_bitmap_s * <a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>;</div>
71 <div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="a00211.html#gae991a108af01d408be2776c5b2c467b2"> 70</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">const</span> <span class="keyword">struct </span>hwloc_bitmap_s * <a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>;</div>
72 <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; </div>
70 <div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
71 <div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="a00215.html#ga0eb99636aff71fe2704e1fa0ffe8c18d"> 35</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00215.html#ga0eb99636aff71fe2704e1fa0ffe8c18d">hwloc_topology_export_xml_flags_e</a> {</div>
72 <div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <a class="code" href="a00215.html#gga0eb99636aff71fe2704e1fa0ffe8c18dae7d6d96546131ef0043867b836b02e0f">HWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1</a> = (1UL&lt;&lt;0)</div>
73 <div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="a00215.html#gga0eb99636aff71fe2704e1fa0ffe8c18dae7d6d96546131ef0043867b836b02e0f"> 41</a></span>&#160;};</div>
74 <div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; </div>
75 <div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="a00215.html#ga333f79975b4eeb28a3d8fad3373583ce"> 71</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00215.html#ga333f79975b4eeb28a3d8fad3373583ce">hwloc_topology_export_xml</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">const</span> <span class="keywordtype">char</span> *xmlpath, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
7376 <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; </div>
74 <div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="comment">/*</span></div>
75 <div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment"> * Bitmap allocation, freeing and copying.</span></div>
76 <div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="comment"> */</span></div>
77 <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; </div>
78 <div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="a00211.html#gadece3d1eb5199fc2fb99bc7dcf1ccc05"> 84</a></span>&#160;HWLOC_DECLSPEC <a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> <a class="code" href="a00211.html#gadece3d1eb5199fc2fb99bc7dcf1ccc05">hwloc_bitmap_alloc</a>(<span class="keywordtype">void</span>) __hwloc_attribute_malloc;</div>
79 <div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; </div>
80 <div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="a00211.html#ga02853b4a224970587b9d7a0e20d857c0"> 87</a></span>&#160;HWLOC_DECLSPEC <a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> <a class="code" href="a00211.html#ga02853b4a224970587b9d7a0e20d857c0">hwloc_bitmap_alloc_full</a>(<span class="keywordtype">void</span>) __hwloc_attribute_malloc;</div>
81 <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; </div>
82 <div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="a00211.html#ga156130d85b3a0674d6e0e6770fe68fbe"> 93</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> <a class="code" href="a00211.html#ga156130d85b3a0674d6e0e6770fe68fbe">hwloc_bitmap_free</a>(<a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap);</div>
83 <div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; </div>
84 <div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="a00211.html#gae679434c1a5f41d3560a8a7e2c1b0dee"> 99</a></span>&#160;HWLOC_DECLSPEC <a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> <a class="code" href="a00211.html#gae679434c1a5f41d3560a8a7e2c1b0dee">hwloc_bitmap_dup</a>(<a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap) __hwloc_attribute_malloc;</div>
85 <div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; </div>
86 <div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="a00211.html#ga72a29824798b48784b8217471ec8f14c"> 102</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(<a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> dst, <a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> src);</div>
87 <div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; </div>
88 <div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; </div>
89 <div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="comment">/*</span></div>
90 <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;<span class="comment"> * Bitmap/String Conversion</span></div>
91 <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;<span class="comment"> */</span></div>
92 <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; </div>
93 <div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="a00211.html#ga9511644657030a021dce9941e3cda583"> 118</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#ga9511644657030a021dce9941e3cda583">hwloc_bitmap_snprintf</a>(<span class="keywordtype">char</span> * __hwloc_restrict buf, <span class="keywordtype">size_t</span> buflen, <a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap);</div>
94 <div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; </div>
95 <div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="a00211.html#ga0fece972134fdecf2da9bc7a11dd827e"> 124</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#ga0fece972134fdecf2da9bc7a11dd827e">hwloc_bitmap_asprintf</a>(<span class="keywordtype">char</span> ** strp, <a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap);</div>
96 <div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; </div>
97 <div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="a00211.html#ga064a85c643a364b60acbfa0f3663fc18"> 128</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#ga064a85c643a364b60acbfa0f3663fc18">hwloc_bitmap_sscanf</a>(<a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keyword">const</span> <span class="keywordtype">char</span> * __hwloc_restrict <span class="keywordtype">string</span>);</div>
98 <div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; </div>
99 <div class="line"><a name="l00143"></a><span class="lineno"><a class="line" href="a00211.html#ga3d06e6447edeb61e56a9ad83f31f0a37"> 143</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#ga3d06e6447edeb61e56a9ad83f31f0a37">hwloc_bitmap_list_snprintf</a>(<span class="keywordtype">char</span> * __hwloc_restrict buf, <span class="keywordtype">size_t</span> buflen, <a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap);</div>
100 <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; </div>
101 <div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="a00211.html#ga39c0f1b02053de66d205c9f8260b3665"> 149</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#ga39c0f1b02053de66d205c9f8260b3665">hwloc_bitmap_list_asprintf</a>(<span class="keywordtype">char</span> ** strp, <a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap);</div>
102 <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; </div>
103 <div class="line"><a name="l00153"></a><span class="lineno"><a class="line" href="a00211.html#gaf9314311d482c621e17c6a53a9fe993e"> 153</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#gaf9314311d482c621e17c6a53a9fe993e">hwloc_bitmap_list_sscanf</a>(<a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keyword">const</span> <span class="keywordtype">char</span> * __hwloc_restrict <span class="keywordtype">string</span>);</div>
104 <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; </div>
105 <div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="a00211.html#ga5beb68a987fe48e5c5edef06ab260e14"> 167</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#ga5beb68a987fe48e5c5edef06ab260e14">hwloc_bitmap_taskset_snprintf</a>(<span class="keywordtype">char</span> * __hwloc_restrict buf, <span class="keywordtype">size_t</span> buflen, <a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap);</div>
106 <div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; </div>
107 <div class="line"><a name="l00173"></a><span class="lineno"><a class="line" href="a00211.html#ga391312513f17c985d871f18367c59512"> 173</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#ga391312513f17c985d871f18367c59512">hwloc_bitmap_taskset_asprintf</a>(<span class="keywordtype">char</span> ** strp, <a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap);</div>
108 <div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; </div>
109 <div class="line"><a name="l00177"></a><span class="lineno"><a class="line" href="a00211.html#ga4f23db5041240e03e348752f8bd6ec2d"> 177</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#ga4f23db5041240e03e348752f8bd6ec2d">hwloc_bitmap_taskset_sscanf</a>(<a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keyword">const</span> <span class="keywordtype">char</span> * __hwloc_restrict <span class="keywordtype">string</span>);</div>
110 <div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; </div>
111 <div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; </div>
112 <div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;<span class="comment">/*</span></div>
113 <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;<span class="comment"> * Building bitmaps.</span></div>
114 <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;<span class="comment"> */</span></div>
115 <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; </div>
116 <div class="line"><a name="l00185"></a><span class="lineno"><a class="line" href="a00211.html#gaa97c5217613c8cae9862287170ea2132"> 185</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> <a class="code" href="a00211.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a>(<a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap);</div>
117 <div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; </div>
118 <div class="line"><a name="l00188"></a><span class="lineno"><a class="line" href="a00211.html#ga07b2de8786b3cdb22f21d9dd42588275"> 188</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> <a class="code" href="a00211.html#ga07b2de8786b3cdb22f21d9dd42588275">hwloc_bitmap_fill</a>(<a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap);</div>
119 <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; </div>
120 <div class="line"><a name="l00191"></a><span class="lineno"><a class="line" href="a00211.html#ga10be0840cdeb7ce26d862819dd303baa"> 191</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#ga10be0840cdeb7ce26d862819dd303baa">hwloc_bitmap_only</a>(<a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> <span class="keywordtype">id</span>);</div>
121 <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; </div>
122 <div class="line"><a name="l00194"></a><span class="lineno"><a class="line" href="a00211.html#ga06d505f8a1c0a536614f65f503ee6d93"> 194</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#ga06d505f8a1c0a536614f65f503ee6d93">hwloc_bitmap_allbut</a>(<a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> <span class="keywordtype">id</span>);</div>
123 <div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; </div>
124 <div class="line"><a name="l00197"></a><span class="lineno"><a class="line" href="a00211.html#gad59b0ebeb29c1bfabbb2a379e55c1159"> 197</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#gad59b0ebeb29c1bfabbb2a379e55c1159">hwloc_bitmap_from_ulong</a>(<a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> mask);</div>
125 <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; </div>
126 <div class="line"><a name="l00200"></a><span class="lineno"><a class="line" href="a00211.html#ga4947c46d47bcfcd3faf3f59569be3e37"> 200</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#ga4947c46d47bcfcd3faf3f59569be3e37">hwloc_bitmap_from_ith_ulong</a>(<a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> i, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> mask);</div>
127 <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; </div>
128 <div class="line"><a name="l00203"></a><span class="lineno"><a class="line" href="a00211.html#gabcfef22f6fc4d4b33f068dd91a1c38f5"> 203</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#gabcfef22f6fc4d4b33f068dd91a1c38f5">hwloc_bitmap_from_ulongs</a>(<a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> nr, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *masks);</div>
129 <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; </div>
130 <div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; </div>
131 <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;<span class="comment">/*</span></div>
132 <div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;<span class="comment"> * Modifying bitmaps.</span></div>
133 <div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;<span class="comment"> */</span></div>
134 <div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; </div>
135 <div class="line"><a name="l00211"></a><span class="lineno"><a class="line" href="a00211.html#ga062dbff93baeff3b425a7260c5463646"> 211</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#ga062dbff93baeff3b425a7260c5463646">hwloc_bitmap_set</a>(<a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> <span class="keywordtype">id</span>);</div>
136 <div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; </div>
137 <div class="line"><a name="l00217"></a><span class="lineno"><a class="line" href="a00211.html#ga9c9a8433732fb9f24899e7aa4c014d7e"> 217</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#ga9c9a8433732fb9f24899e7aa4c014d7e">hwloc_bitmap_set_range</a>(<a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> begin, <span class="keywordtype">int</span> end);</div>
138 <div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; </div>
139 <div class="line"><a name="l00220"></a><span class="lineno"><a class="line" href="a00211.html#ga3daeed965c35c6d2fd4820a318219985"> 220</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#ga3daeed965c35c6d2fd4820a318219985">hwloc_bitmap_set_ith_ulong</a>(<a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> i, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> mask);</div>
140 <div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; </div>
141 <div class="line"><a name="l00223"></a><span class="lineno"><a class="line" href="a00211.html#gaf20bb350b6844d08931a064a73f86743"> 223</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#gaf20bb350b6844d08931a064a73f86743">hwloc_bitmap_clr</a>(<a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> <span class="keywordtype">id</span>);</div>
77 <div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="a00215.html#gad33b7f7c11db10459505a3b1634fd3f1"> 105</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00215.html#gad33b7f7c11db10459505a3b1634fd3f1">hwloc_topology_export_xmlbuffer</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">char</span> **xmlbuffer, <span class="keywordtype">int</span> *buflen, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
78 <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; </div>
79 <div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="a00215.html#ga293e4a6489f15fd16ad22a5734561cf1"> 108</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> <a class="code" href="a00215.html#ga293e4a6489f15fd16ad22a5734561cf1">hwloc_free_xmlbuffer</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">char</span> *xmlbuffer);</div>
80 <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; </div>
81 <div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="a00215.html#ga9d6ff0f7a8dd45be9aa8575ef31978cc"> 128</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> <a class="code" href="a00215.html#ga9d6ff0f7a8dd45be9aa8575ef31978cc">hwloc_topology_set_userdata_export_callback</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
82 <div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordtype">void</span> (*export_cb)(<span class="keywordtype">void</span> *reserved, <a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00250.html">hwloc_obj_t</a> obj));</div>
83 <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; </div>
84 <div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="a00215.html#gaa541bdd628416dbbe97d0df69d3de958"> 156</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00215.html#gaa541bdd628416dbbe97d0df69d3de958">hwloc_export_obj_userdata</a>(<span class="keywordtype">void</span> *reserved, <a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00250.html">hwloc_obj_t</a> obj, <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> <span class="keywordtype">void</span> *buffer, <span class="keywordtype">size_t</span> length);</div>
85 <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; </div>
86 <div class="line"><a name="l00171"></a><span class="lineno"><a class="line" href="a00215.html#ga1b7358137cec27bd073f58a606ecbaba"> 171</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00215.html#ga1b7358137cec27bd073f58a606ecbaba">hwloc_export_obj_userdata_base64</a>(<span class="keywordtype">void</span> *reserved, <a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00250.html">hwloc_obj_t</a> obj, <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> <span class="keywordtype">void</span> *buffer, <span class="keywordtype">size_t</span> length);</div>
87 <div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; </div>
88 <div class="line"><a name="l00195"></a><span class="lineno"><a class="line" href="a00215.html#ga5ac6917ea7289955fb1ffda4353af9b0"> 195</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> <a class="code" href="a00215.html#ga5ac6917ea7289955fb1ffda4353af9b0">hwloc_topology_set_userdata_import_callback</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
89 <div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordtype">void</span> (*import_cb)(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00250.html">hwloc_obj_t</a> obj, <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> <span class="keywordtype">void</span> *buffer, <span class="keywordtype">size_t</span> length));</div>
90 <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; </div>
91 <div class="line"><a name="l00209"></a><span class="lineno"><a class="line" href="a00216.html#ga7ac6f97cc40bd50c40285084f869ba63"> 209</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00216.html#ga7ac6f97cc40bd50c40285084f869ba63">hwloc_topology_export_synthetic_flags_e</a> {</div>
92 <div class="line"><a name="l00215"></a><span class="lineno"><a class="line" href="a00216.html#gga7ac6f97cc40bd50c40285084f869ba63a3b3bd4ba2ef9990810865e561034ccc9"> 215</a></span>&#160; <a class="code" href="a00216.html#gga7ac6f97cc40bd50c40285084f869ba63a3b3bd4ba2ef9990810865e561034ccc9">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_EXTENDED_TYPES</a> = (1UL&lt;&lt;0),</div>
93 <div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; </div>
94 <div class="line"><a name="l00223"></a><span class="lineno"><a class="line" href="a00216.html#gga7ac6f97cc40bd50c40285084f869ba63aaa2702ffba050bab079b3041aec737d4"> 223</a></span>&#160; <a class="code" href="a00216.html#gga7ac6f97cc40bd50c40285084f869ba63aaa2702ffba050bab079b3041aec737d4">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_ATTRS</a> = (1UL&lt;&lt;1),</div>
14295 <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; </div>
143 <div class="line"><a name="l00229"></a><span class="lineno"><a class="line" href="a00211.html#ga833776709df94d727f8c22304b3388cf"> 229</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#ga833776709df94d727f8c22304b3388cf">hwloc_bitmap_clr_range</a>(<a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> begin, <span class="keywordtype">int</span> end);</div>
144 <div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; </div>
145 <div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="a00211.html#gaa611a77c092e679246afdf9a60d5db8b"> 250</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#gaa611a77c092e679246afdf9a60d5db8b">hwloc_bitmap_singlify</a>(<a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap);</div>
146 <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; </div>
147 <div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; </div>
148 <div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;<span class="comment">/*</span></div>
149 <div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;<span class="comment"> * Consulting bitmaps.</span></div>
150 <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;<span class="comment"> */</span></div>
151 <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; </div>
152 <div class="line"><a name="l00258"></a><span class="lineno"><a class="line" href="a00211.html#gab6a6bae22a33ec6adfc169a953c13e6c"> 258</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="a00211.html#gab6a6bae22a33ec6adfc169a953c13e6c">hwloc_bitmap_to_ulong</a>(<a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap) __hwloc_attribute_pure;</div>
153 <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; </div>
154 <div class="line"><a name="l00261"></a><span class="lineno"><a class="line" href="a00211.html#gac92e6404f648d6b99d2c626b05b2ffa4"> 261</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="a00211.html#gac92e6404f648d6b99d2c626b05b2ffa4">hwloc_bitmap_to_ith_ulong</a>(<a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> i) __hwloc_attribute_pure;</div>
155 <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; </div>
156 <div class="line"><a name="l00269"></a><span class="lineno"><a class="line" href="a00211.html#gacd215a2348732de25d94a4ecd76d528c"> 269</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#gacd215a2348732de25d94a4ecd76d528c">hwloc_bitmap_to_ulongs</a>(<a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> nr, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *masks);</div>
157 <div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; </div>
158 <div class="line"><a name="l00284"></a><span class="lineno"><a class="line" href="a00211.html#gac0744734d761d65c977aece565364908"> 284</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#gac0744734d761d65c977aece565364908">hwloc_bitmap_nr_ulongs</a>(<a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap) __hwloc_attribute_pure;</div>
159 <div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; </div>
160 <div class="line"><a name="l00290"></a><span class="lineno"><a class="line" href="a00211.html#ga11340dd487f110bb84f0a6e4ae90bd06"> 290</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#ga11340dd487f110bb84f0a6e4ae90bd06">hwloc_bitmap_isset</a>(<a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap, <span class="keywordtype">unsigned</span> <span class="keywordtype">id</span>) __hwloc_attribute_pure;</div>
161 <div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; </div>
162 <div class="line"><a name="l00296"></a><span class="lineno"><a class="line" href="a00211.html#ga5b64be28f5a7176ed8ad0d6a90bdf108"> 296</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(<a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap) __hwloc_attribute_pure;</div>
163 <div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; </div>
164 <div class="line"><a name="l00304"></a><span class="lineno"><a class="line" href="a00211.html#ga5fdcb8c19c336511c37076d649e74af4"> 304</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#ga5fdcb8c19c336511c37076d649e74af4">hwloc_bitmap_isfull</a>(<a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap) __hwloc_attribute_pure;</div>
165 <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; </div>
166 <div class="line"><a name="l00310"></a><span class="lineno"><a class="line" href="a00211.html#ga3ec1ced43afadf8c0a7197320bc016ed"> 310</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#ga3ec1ced43afadf8c0a7197320bc016ed">hwloc_bitmap_first</a>(<a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap) __hwloc_attribute_pure;</div>
167 <div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; </div>
168 <div class="line"><a name="l00318"></a><span class="lineno"><a class="line" href="a00211.html#gaab7240b4b644693b775dad17b44ffd68"> 318</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#gaab7240b4b644693b775dad17b44ffd68">hwloc_bitmap_next</a>(<a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap, <span class="keywordtype">int</span> prev) __hwloc_attribute_pure;</div>
169 <div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; </div>
170 <div class="line"><a name="l00324"></a><span class="lineno"><a class="line" href="a00211.html#ga3d9b08b060a59bbab5a4ea6d0a1ed7a6"> 324</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#ga3d9b08b060a59bbab5a4ea6d0a1ed7a6">hwloc_bitmap_last</a>(<a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap) __hwloc_attribute_pure;</div>
171 <div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; </div>
172 <div class="line"><a name="l00333"></a><span class="lineno"><a class="line" href="a00211.html#ga0200466842c0e1f5da75e84dde460b10"> 333</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#ga0200466842c0e1f5da75e84dde460b10">hwloc_bitmap_weight</a>(<a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap) __hwloc_attribute_pure;</div>
173 <div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; </div>
174 <div class="line"><a name="l00339"></a><span class="lineno"><a class="line" href="a00211.html#gae408841487b288e148a478ba0465c99e"> 339</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#gae408841487b288e148a478ba0465c99e">hwloc_bitmap_first_unset</a>(<a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap) __hwloc_attribute_pure;</div>
175 <div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; </div>
176 <div class="line"><a name="l00347"></a><span class="lineno"><a class="line" href="a00211.html#ga9653af34d1460ef106b7df25af4cdca8"> 347</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#ga9653af34d1460ef106b7df25af4cdca8">hwloc_bitmap_next_unset</a>(<a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap, <span class="keywordtype">int</span> prev) __hwloc_attribute_pure;</div>
177 <div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; </div>
178 <div class="line"><a name="l00353"></a><span class="lineno"><a class="line" href="a00211.html#ga45d49aeb45c7da631b1480a93dc3fc92"> 353</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#ga45d49aeb45c7da631b1480a93dc3fc92">hwloc_bitmap_last_unset</a>(<a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap) __hwloc_attribute_pure;</div>
179 <div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; </div>
180 <div class="line"><a name="l00370"></a><span class="lineno"><a class="line" href="a00211.html#ga3f6861045a8029ade373510ffa727d2a"> 370</a></span>&#160;<span class="preprocessor">#define hwloc_bitmap_foreach_begin(id, bitmap) \</span></div>
181 <div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160;<span class="preprocessor">do { \</span></div>
182 <div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160;<span class="preprocessor"> assert(hwloc_bitmap_weight(bitmap) != -1); \</span></div>
183 <div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;<span class="preprocessor"> for (id = hwloc_bitmap_first(bitmap); \</span></div>
184 <div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160;<span class="preprocessor"> (unsigned) id != (unsigned) -1; \</span></div>
185 <div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160;<span class="preprocessor"> id = hwloc_bitmap_next(bitmap, id)) {</span></div>
186 <div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; </div>
187 <div class="line"><a name="l00384"></a><span class="lineno"><a class="line" href="a00211.html#gafcf3246db406218d4e155735b3fa6528"> 384</a></span>&#160;<span class="preprocessor">#define hwloc_bitmap_foreach_end() \</span></div>
188 <div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160;<span class="preprocessor"> } \</span></div>
189 <div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160;<span class="preprocessor">} while (0)</span></div>
190 <div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; </div>
191 <div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; </div>
192 <div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160;<span class="comment">/*</span></div>
193 <div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160;<span class="comment"> * Combining bitmaps.</span></div>
194 <div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160;<span class="comment"> */</span></div>
195 <div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; </div>
196 <div class="line"><a name="l00397"></a><span class="lineno"><a class="line" href="a00211.html#ga120b8aefb9ce7ef349929656359b1859"> 397</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#ga120b8aefb9ce7ef349929656359b1859">hwloc_bitmap_or</a> (<a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> res, <a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2);</div>
197 <div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; </div>
198 <div class="line"><a name="l00403"></a><span class="lineno"><a class="line" href="a00211.html#ga674533016ffed922a28b4f0b49b82cd4"> 403</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#ga674533016ffed922a28b4f0b49b82cd4">hwloc_bitmap_and</a> (<a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> res, <a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2);</div>
199 <div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; </div>
200 <div class="line"><a name="l00409"></a><span class="lineno"><a class="line" href="a00211.html#ga7ca5c72db65406b85aca032c8a990f9e"> 409</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#ga7ca5c72db65406b85aca032c8a990f9e">hwloc_bitmap_andnot</a> (<a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> res, <a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2);</div>
201 <div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; </div>
202 <div class="line"><a name="l00415"></a><span class="lineno"><a class="line" href="a00211.html#ga205508218e09cb9befd0687f16409f09"> 415</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#ga205508218e09cb9befd0687f16409f09">hwloc_bitmap_xor</a> (<a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> res, <a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2);</div>
203 <div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; </div>
204 <div class="line"><a name="l00421"></a><span class="lineno"><a class="line" href="a00211.html#ga84cfdb4f8ab8c1f7e097728e613a2a3f"> 421</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#ga84cfdb4f8ab8c1f7e097728e613a2a3f">hwloc_bitmap_not</a> (<a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> res, <a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap);</div>
205 <div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; </div>
206 <div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; </div>
207 <div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160;<span class="comment">/*</span></div>
208 <div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160;<span class="comment"> * Comparing bitmaps.</span></div>
209 <div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160;<span class="comment"> */</span></div>
210 <div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; </div>
211 <div class="line"><a name="l00432"></a><span class="lineno"><a class="line" href="a00211.html#gaefa070f9232857ba5a57297ea9a08ea2"> 432</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#gaefa070f9232857ba5a57297ea9a08ea2">hwloc_bitmap_intersects</a> (<a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2) __hwloc_attribute_pure;</div>
212 <div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; </div>
213 <div class="line"><a name="l00440"></a><span class="lineno"><a class="line" href="a00211.html#ga0526e03db81956fb02acc8260b66d6a4"> 440</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a> (<a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> sub_bitmap, <a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> super_bitmap) __hwloc_attribute_pure;</div>
214 <div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; </div>
215 <div class="line"><a name="l00446"></a><span class="lineno"><a class="line" href="a00211.html#ga32376b1405e57472b73c3aa53bb39663"> 446</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#ga32376b1405e57472b73c3aa53bb39663">hwloc_bitmap_isequal</a> (<a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2) __hwloc_attribute_pure;</div>
216 <div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; </div>
217 <div class="line"><a name="l00465"></a><span class="lineno"><a class="line" href="a00211.html#gaa39cda1510ab721b5c012c76ead72365"> 465</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#gaa39cda1510ab721b5c012c76ead72365">hwloc_bitmap_compare_first</a>(<a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2) __hwloc_attribute_pure;</div>
218 <div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; </div>
219 <div class="line"><a name="l00484"></a><span class="lineno"><a class="line" href="a00211.html#ga14cdbc0ef0a705e84999bd48a2e649f3"> 484</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00211.html#ga14cdbc0ef0a705e84999bd48a2e649f3">hwloc_bitmap_compare</a>(<a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2) __hwloc_attribute_pure;</div>
220 <div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; </div>
221 <div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
222 <div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
223 <div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160;<span class="preprocessor">#endif</span></div>
224 <div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; </div>
225 <div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; </div>
226 <div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_BITMAP_H */</span><span class="preprocessor"></span></div>
227 <div class="ttc" id="aa00211_html_ga0200466842c0e1f5da75e84dde460b10"><div class="ttname"><a href="a00211.html#ga0200466842c0e1f5da75e84dde460b10">hwloc_bitmap_weight</a></div><div class="ttdeci">int hwloc_bitmap_weight(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Compute the &quot;weight&quot; of bitmap bitmap (i.e., number of indexes that are in the bitmap).</div></div>
228 <div class="ttc" id="aa00211_html_ga02853b4a224970587b9d7a0e20d857c0"><div class="ttname"><a href="a00211.html#ga02853b4a224970587b9d7a0e20d857c0">hwloc_bitmap_alloc_full</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_bitmap_alloc_full(void)</div><div class="ttdoc">Allocate a new full bitmap.</div></div>
229 <div class="ttc" id="aa00211_html_ga0526e03db81956fb02acc8260b66d6a4"><div class="ttname"><a href="a00211.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a></div><div class="ttdeci">int hwloc_bitmap_isincluded(hwloc_const_bitmap_t sub_bitmap, hwloc_const_bitmap_t super_bitmap)</div><div class="ttdoc">Test whether bitmap sub_bitmap is part of bitmap super_bitmap.</div></div>
230 <div class="ttc" id="aa00211_html_ga062dbff93baeff3b425a7260c5463646"><div class="ttname"><a href="a00211.html#ga062dbff93baeff3b425a7260c5463646">hwloc_bitmap_set</a></div><div class="ttdeci">int hwloc_bitmap_set(hwloc_bitmap_t bitmap, unsigned id)</div><div class="ttdoc">Add index id in bitmap bitmap.</div></div>
231 <div class="ttc" id="aa00211_html_ga064a85c643a364b60acbfa0f3663fc18"><div class="ttname"><a href="a00211.html#ga064a85c643a364b60acbfa0f3663fc18">hwloc_bitmap_sscanf</a></div><div class="ttdeci">int hwloc_bitmap_sscanf(hwloc_bitmap_t bitmap, const char *restrict string)</div><div class="ttdoc">Parse a bitmap string and stores it in bitmap bitmap.</div></div>
232 <div class="ttc" id="aa00211_html_ga06d505f8a1c0a536614f65f503ee6d93"><div class="ttname"><a href="a00211.html#ga06d505f8a1c0a536614f65f503ee6d93">hwloc_bitmap_allbut</a></div><div class="ttdeci">int hwloc_bitmap_allbut(hwloc_bitmap_t bitmap, unsigned id)</div><div class="ttdoc">Fill the bitmap and clear the index id.</div></div>
233 <div class="ttc" id="aa00211_html_ga07b2de8786b3cdb22f21d9dd42588275"><div class="ttname"><a href="a00211.html#ga07b2de8786b3cdb22f21d9dd42588275">hwloc_bitmap_fill</a></div><div class="ttdeci">void hwloc_bitmap_fill(hwloc_bitmap_t bitmap)</div><div class="ttdoc">Fill bitmap bitmap with all possible indexes (even if those objects don't exist or are otherwise unav...</div></div>
234 <div class="ttc" id="aa00211_html_ga0fece972134fdecf2da9bc7a11dd827e"><div class="ttname"><a href="a00211.html#ga0fece972134fdecf2da9bc7a11dd827e">hwloc_bitmap_asprintf</a></div><div class="ttdeci">int hwloc_bitmap_asprintf(char **strp, hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Stringify a bitmap into a newly allocated string.</div></div>
235 <div class="ttc" id="aa00211_html_ga10be0840cdeb7ce26d862819dd303baa"><div class="ttname"><a href="a00211.html#ga10be0840cdeb7ce26d862819dd303baa">hwloc_bitmap_only</a></div><div class="ttdeci">int hwloc_bitmap_only(hwloc_bitmap_t bitmap, unsigned id)</div><div class="ttdoc">Empty the bitmap bitmap and add bit id.</div></div>
236 <div class="ttc" id="aa00211_html_ga11340dd487f110bb84f0a6e4ae90bd06"><div class="ttname"><a href="a00211.html#ga11340dd487f110bb84f0a6e4ae90bd06">hwloc_bitmap_isset</a></div><div class="ttdeci">int hwloc_bitmap_isset(hwloc_const_bitmap_t bitmap, unsigned id)</div><div class="ttdoc">Test whether index id is part of bitmap bitmap.</div></div>
237 <div class="ttc" id="aa00211_html_ga120b8aefb9ce7ef349929656359b1859"><div class="ttname"><a href="a00211.html#ga120b8aefb9ce7ef349929656359b1859">hwloc_bitmap_or</a></div><div class="ttdeci">int hwloc_bitmap_or(hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">Or bitmaps bitmap1 and bitmap2 and store the result in bitmap res.</div></div>
238 <div class="ttc" id="aa00211_html_ga14cdbc0ef0a705e84999bd48a2e649f3"><div class="ttname"><a href="a00211.html#ga14cdbc0ef0a705e84999bd48a2e649f3">hwloc_bitmap_compare</a></div><div class="ttdeci">int hwloc_bitmap_compare(hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">Compare bitmaps bitmap1 and bitmap2 in lexicographic order.</div></div>
239 <div class="ttc" id="aa00211_html_ga156130d85b3a0674d6e0e6770fe68fbe"><div class="ttname"><a href="a00211.html#ga156130d85b3a0674d6e0e6770fe68fbe">hwloc_bitmap_free</a></div><div class="ttdeci">void hwloc_bitmap_free(hwloc_bitmap_t bitmap)</div><div class="ttdoc">Free bitmap bitmap.</div></div>
240 <div class="ttc" id="aa00211_html_ga205508218e09cb9befd0687f16409f09"><div class="ttname"><a href="a00211.html#ga205508218e09cb9befd0687f16409f09">hwloc_bitmap_xor</a></div><div class="ttdeci">int hwloc_bitmap_xor(hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">Xor bitmaps bitmap1 and bitmap2 and store the result in bitmap res.</div></div>
241 <div class="ttc" id="aa00211_html_ga32376b1405e57472b73c3aa53bb39663"><div class="ttname"><a href="a00211.html#ga32376b1405e57472b73c3aa53bb39663">hwloc_bitmap_isequal</a></div><div class="ttdeci">int hwloc_bitmap_isequal(hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">Test whether bitmap bitmap1 is equal to bitmap bitmap2.</div></div>
242 <div class="ttc" id="aa00211_html_ga391312513f17c985d871f18367c59512"><div class="ttname"><a href="a00211.html#ga391312513f17c985d871f18367c59512">hwloc_bitmap_taskset_asprintf</a></div><div class="ttdeci">int hwloc_bitmap_taskset_asprintf(char **strp, hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Stringify a bitmap into a newly allocated taskset-specific string.</div></div>
243 <div class="ttc" id="aa00211_html_ga39c0f1b02053de66d205c9f8260b3665"><div class="ttname"><a href="a00211.html#ga39c0f1b02053de66d205c9f8260b3665">hwloc_bitmap_list_asprintf</a></div><div class="ttdeci">int hwloc_bitmap_list_asprintf(char **strp, hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Stringify a bitmap into a newly allocated list string.</div></div>
244 <div class="ttc" id="aa00211_html_ga3d06e6447edeb61e56a9ad83f31f0a37"><div class="ttname"><a href="a00211.html#ga3d06e6447edeb61e56a9ad83f31f0a37">hwloc_bitmap_list_snprintf</a></div><div class="ttdeci">int hwloc_bitmap_list_snprintf(char *restrict buf, size_t buflen, hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Stringify a bitmap in the list format.</div></div>
245 <div class="ttc" id="aa00211_html_ga3d9b08b060a59bbab5a4ea6d0a1ed7a6"><div class="ttname"><a href="a00211.html#ga3d9b08b060a59bbab5a4ea6d0a1ed7a6">hwloc_bitmap_last</a></div><div class="ttdeci">int hwloc_bitmap_last(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Compute the last index (most significant bit) in bitmap bitmap.</div></div>
246 <div class="ttc" id="aa00211_html_ga3daeed965c35c6d2fd4820a318219985"><div class="ttname"><a href="a00211.html#ga3daeed965c35c6d2fd4820a318219985">hwloc_bitmap_set_ith_ulong</a></div><div class="ttdeci">int hwloc_bitmap_set_ith_ulong(hwloc_bitmap_t bitmap, unsigned i, unsigned long mask)</div><div class="ttdoc">Replace i -th subset of bitmap bitmap with unsigned long mask.</div></div>
247 <div class="ttc" id="aa00211_html_ga3ec1ced43afadf8c0a7197320bc016ed"><div class="ttname"><a href="a00211.html#ga3ec1ced43afadf8c0a7197320bc016ed">hwloc_bitmap_first</a></div><div class="ttdeci">int hwloc_bitmap_first(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Compute the first index (least significant bit) in bitmap bitmap.</div></div>
248 <div class="ttc" id="aa00211_html_ga45d49aeb45c7da631b1480a93dc3fc92"><div class="ttname"><a href="a00211.html#ga45d49aeb45c7da631b1480a93dc3fc92">hwloc_bitmap_last_unset</a></div><div class="ttdeci">int hwloc_bitmap_last_unset(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Compute the last unset index (most significant bit) in bitmap bitmap.</div></div>
249 <div class="ttc" id="aa00211_html_ga4947c46d47bcfcd3faf3f59569be3e37"><div class="ttname"><a href="a00211.html#ga4947c46d47bcfcd3faf3f59569be3e37">hwloc_bitmap_from_ith_ulong</a></div><div class="ttdeci">int hwloc_bitmap_from_ith_ulong(hwloc_bitmap_t bitmap, unsigned i, unsigned long mask)</div><div class="ttdoc">Setup bitmap bitmap from unsigned long mask used as i -th subset.</div></div>
250 <div class="ttc" id="aa00211_html_ga4f23db5041240e03e348752f8bd6ec2d"><div class="ttname"><a href="a00211.html#ga4f23db5041240e03e348752f8bd6ec2d">hwloc_bitmap_taskset_sscanf</a></div><div class="ttdeci">int hwloc_bitmap_taskset_sscanf(hwloc_bitmap_t bitmap, const char *restrict string)</div><div class="ttdoc">Parse a taskset-specific bitmap string and stores it in bitmap bitmap.</div></div>
251 <div class="ttc" id="aa00211_html_ga5b64be28f5a7176ed8ad0d6a90bdf108"><div class="ttname"><a href="a00211.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a></div><div class="ttdeci">int hwloc_bitmap_iszero(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Test whether bitmap bitmap is empty.</div></div>
252 <div class="ttc" id="aa00211_html_ga5beb68a987fe48e5c5edef06ab260e14"><div class="ttname"><a href="a00211.html#ga5beb68a987fe48e5c5edef06ab260e14">hwloc_bitmap_taskset_snprintf</a></div><div class="ttdeci">int hwloc_bitmap_taskset_snprintf(char *restrict buf, size_t buflen, hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Stringify a bitmap in the taskset-specific format.</div></div>
253 <div class="ttc" id="aa00211_html_ga5fdcb8c19c336511c37076d649e74af4"><div class="ttname"><a href="a00211.html#ga5fdcb8c19c336511c37076d649e74af4">hwloc_bitmap_isfull</a></div><div class="ttdeci">int hwloc_bitmap_isfull(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Test whether bitmap bitmap is completely full.</div></div>
254 <div class="ttc" id="aa00211_html_ga674533016ffed922a28b4f0b49b82cd4"><div class="ttname"><a href="a00211.html#ga674533016ffed922a28b4f0b49b82cd4">hwloc_bitmap_and</a></div><div class="ttdeci">int hwloc_bitmap_and(hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">And bitmaps bitmap1 and bitmap2 and store the result in bitmap res.</div></div>
255 <div class="ttc" id="aa00211_html_ga72a29824798b48784b8217471ec8f14c"><div class="ttname"><a href="a00211.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a></div><div class="ttdeci">int hwloc_bitmap_copy(hwloc_bitmap_t dst, hwloc_const_bitmap_t src)</div><div class="ttdoc">Copy the contents of bitmap src into the already allocated bitmap dst.</div></div>
256 <div class="ttc" id="aa00211_html_ga7ca5c72db65406b85aca032c8a990f9e"><div class="ttname"><a href="a00211.html#ga7ca5c72db65406b85aca032c8a990f9e">hwloc_bitmap_andnot</a></div><div class="ttdeci">int hwloc_bitmap_andnot(hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">And bitmap bitmap1 and the negation of bitmap2 and store the result in bitmap res.</div></div>
257 <div class="ttc" id="aa00211_html_ga833776709df94d727f8c22304b3388cf"><div class="ttname"><a href="a00211.html#ga833776709df94d727f8c22304b3388cf">hwloc_bitmap_clr_range</a></div><div class="ttdeci">int hwloc_bitmap_clr_range(hwloc_bitmap_t bitmap, unsigned begin, int end)</div><div class="ttdoc">Remove indexes from begin to end in bitmap bitmap.</div></div>
258 <div class="ttc" id="aa00211_html_ga84cfdb4f8ab8c1f7e097728e613a2a3f"><div class="ttname"><a href="a00211.html#ga84cfdb4f8ab8c1f7e097728e613a2a3f">hwloc_bitmap_not</a></div><div class="ttdeci">int hwloc_bitmap_not(hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Negate bitmap bitmap and store the result in bitmap res.</div></div>
259 <div class="ttc" id="aa00211_html_ga9511644657030a021dce9941e3cda583"><div class="ttname"><a href="a00211.html#ga9511644657030a021dce9941e3cda583">hwloc_bitmap_snprintf</a></div><div class="ttdeci">int hwloc_bitmap_snprintf(char *restrict buf, size_t buflen, hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Stringify a bitmap.</div></div>
260 <div class="ttc" id="aa00211_html_ga9653af34d1460ef106b7df25af4cdca8"><div class="ttname"><a href="a00211.html#ga9653af34d1460ef106b7df25af4cdca8">hwloc_bitmap_next_unset</a></div><div class="ttdeci">int hwloc_bitmap_next_unset(hwloc_const_bitmap_t bitmap, int prev)</div><div class="ttdoc">Compute the next unset index in bitmap bitmap which is after index prev.</div></div>
261 <div class="ttc" id="aa00211_html_ga9c9a8433732fb9f24899e7aa4c014d7e"><div class="ttname"><a href="a00211.html#ga9c9a8433732fb9f24899e7aa4c014d7e">hwloc_bitmap_set_range</a></div><div class="ttdeci">int hwloc_bitmap_set_range(hwloc_bitmap_t bitmap, unsigned begin, int end)</div><div class="ttdoc">Add indexes from begin to end in bitmap bitmap.</div></div>
262 <div class="ttc" id="aa00211_html_gaa39cda1510ab721b5c012c76ead72365"><div class="ttname"><a href="a00211.html#gaa39cda1510ab721b5c012c76ead72365">hwloc_bitmap_compare_first</a></div><div class="ttdeci">int hwloc_bitmap_compare_first(hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">Compare bitmaps bitmap1 and bitmap2 using their lowest index.</div></div>
263 <div class="ttc" id="aa00211_html_gaa3c2bf4c776d603dcebbb61b0c923d84"><div class="ttname"><a href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a></div><div class="ttdeci">struct hwloc_bitmap_s * hwloc_bitmap_t</div><div class="ttdoc">Set of bits represented as an opaque pointer to an internal bitmap.</div><div class="ttdef"><b>Definition:</b> bitmap.h:68</div></div>
264 <div class="ttc" id="aa00211_html_gaa611a77c092e679246afdf9a60d5db8b"><div class="ttname"><a href="a00211.html#gaa611a77c092e679246afdf9a60d5db8b">hwloc_bitmap_singlify</a></div><div class="ttdeci">int hwloc_bitmap_singlify(hwloc_bitmap_t bitmap)</div><div class="ttdoc">Keep a single index among those set in bitmap bitmap.</div></div>
265 <div class="ttc" id="aa00211_html_gaa97c5217613c8cae9862287170ea2132"><div class="ttname"><a href="a00211.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a></div><div class="ttdeci">void hwloc_bitmap_zero(hwloc_bitmap_t bitmap)</div><div class="ttdoc">Empty the bitmap bitmap.</div></div>
266 <div class="ttc" id="aa00211_html_gaab7240b4b644693b775dad17b44ffd68"><div class="ttname"><a href="a00211.html#gaab7240b4b644693b775dad17b44ffd68">hwloc_bitmap_next</a></div><div class="ttdeci">int hwloc_bitmap_next(hwloc_const_bitmap_t bitmap, int prev)</div><div class="ttdoc">Compute the next index in bitmap bitmap which is after index prev.</div></div>
267 <div class="ttc" id="aa00211_html_gab6a6bae22a33ec6adfc169a953c13e6c"><div class="ttname"><a href="a00211.html#gab6a6bae22a33ec6adfc169a953c13e6c">hwloc_bitmap_to_ulong</a></div><div class="ttdeci">unsigned long hwloc_bitmap_to_ulong(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Convert the beginning part of bitmap bitmap into unsigned long mask.</div></div>
268 <div class="ttc" id="aa00211_html_gabcfef22f6fc4d4b33f068dd91a1c38f5"><div class="ttname"><a href="a00211.html#gabcfef22f6fc4d4b33f068dd91a1c38f5">hwloc_bitmap_from_ulongs</a></div><div class="ttdeci">int hwloc_bitmap_from_ulongs(hwloc_bitmap_t bitmap, unsigned nr, const unsigned long *masks)</div><div class="ttdoc">Setup bitmap bitmap from unsigned longs masks used as first nr subsets.</div></div>
269 <div class="ttc" id="aa00211_html_gac0744734d761d65c977aece565364908"><div class="ttname"><a href="a00211.html#gac0744734d761d65c977aece565364908">hwloc_bitmap_nr_ulongs</a></div><div class="ttdeci">int hwloc_bitmap_nr_ulongs(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Return the number of unsigned longs required for storing bitmap bitmap entirely.</div></div>
270 <div class="ttc" id="aa00211_html_gac92e6404f648d6b99d2c626b05b2ffa4"><div class="ttname"><a href="a00211.html#gac92e6404f648d6b99d2c626b05b2ffa4">hwloc_bitmap_to_ith_ulong</a></div><div class="ttdeci">unsigned long hwloc_bitmap_to_ith_ulong(hwloc_const_bitmap_t bitmap, unsigned i)</div><div class="ttdoc">Convert the i -th subset of bitmap bitmap into unsigned long mask.</div></div>
271 <div class="ttc" id="aa00211_html_gacd215a2348732de25d94a4ecd76d528c"><div class="ttname"><a href="a00211.html#gacd215a2348732de25d94a4ecd76d528c">hwloc_bitmap_to_ulongs</a></div><div class="ttdeci">int hwloc_bitmap_to_ulongs(hwloc_const_bitmap_t bitmap, unsigned nr, unsigned long *masks)</div><div class="ttdoc">Convert the first nr subsets of bitmap bitmap into the array of nr unsigned long masks.</div></div>
272 <div class="ttc" id="aa00211_html_gad59b0ebeb29c1bfabbb2a379e55c1159"><div class="ttname"><a href="a00211.html#gad59b0ebeb29c1bfabbb2a379e55c1159">hwloc_bitmap_from_ulong</a></div><div class="ttdeci">int hwloc_bitmap_from_ulong(hwloc_bitmap_t bitmap, unsigned long mask)</div><div class="ttdoc">Setup bitmap bitmap from unsigned long mask.</div></div>
273 <div class="ttc" id="aa00211_html_gadece3d1eb5199fc2fb99bc7dcf1ccc05"><div class="ttname"><a href="a00211.html#gadece3d1eb5199fc2fb99bc7dcf1ccc05">hwloc_bitmap_alloc</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_bitmap_alloc(void)</div><div class="ttdoc">Allocate a new empty bitmap.</div></div>
274 <div class="ttc" id="aa00211_html_gae408841487b288e148a478ba0465c99e"><div class="ttname"><a href="a00211.html#gae408841487b288e148a478ba0465c99e">hwloc_bitmap_first_unset</a></div><div class="ttdeci">int hwloc_bitmap_first_unset(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Compute the first unset index (least significant bit) in bitmap bitmap.</div></div>
275 <div class="ttc" id="aa00211_html_gae679434c1a5f41d3560a8a7e2c1b0dee"><div class="ttname"><a href="a00211.html#gae679434c1a5f41d3560a8a7e2c1b0dee">hwloc_bitmap_dup</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_bitmap_dup(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.</div></div>
276 <div class="ttc" id="aa00211_html_gae991a108af01d408be2776c5b2c467b2"><div class="ttname"><a href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a></div><div class="ttdeci">const struct hwloc_bitmap_s * hwloc_const_bitmap_t</div><div class="ttdoc">a non-modifiable hwloc_bitmap_t</div><div class="ttdef"><b>Definition:</b> bitmap.h:70</div></div>
277 <div class="ttc" id="aa00211_html_gaefa070f9232857ba5a57297ea9a08ea2"><div class="ttname"><a href="a00211.html#gaefa070f9232857ba5a57297ea9a08ea2">hwloc_bitmap_intersects</a></div><div class="ttdeci">int hwloc_bitmap_intersects(hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">Test whether bitmaps bitmap1 and bitmap2 intersects.</div></div>
278 <div class="ttc" id="aa00211_html_gaf20bb350b6844d08931a064a73f86743"><div class="ttname"><a href="a00211.html#gaf20bb350b6844d08931a064a73f86743">hwloc_bitmap_clr</a></div><div class="ttdeci">int hwloc_bitmap_clr(hwloc_bitmap_t bitmap, unsigned id)</div><div class="ttdoc">Remove index id from bitmap bitmap.</div></div>
279 <div class="ttc" id="aa00211_html_gaf9314311d482c621e17c6a53a9fe993e"><div class="ttname"><a href="a00211.html#gaf9314311d482c621e17c6a53a9fe993e">hwloc_bitmap_list_sscanf</a></div><div class="ttdeci">int hwloc_bitmap_list_sscanf(hwloc_bitmap_t bitmap, const char *restrict string)</div><div class="ttdoc">Parse a list string and stores it in bitmap bitmap.</div></div>
96 <div class="line"><a name="l00233"></a><span class="lineno"><a class="line" href="a00216.html#gga7ac6f97cc40bd50c40285084f869ba63a7896bdf4ccfcdcd09a9f76c0f5e3a5b8"> 233</a></span>&#160; <a class="code" href="a00216.html#gga7ac6f97cc40bd50c40285084f869ba63a7896bdf4ccfcdcd09a9f76c0f5e3a5b8">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_V1</a> = (1UL&lt;&lt;2),</div>
97 <div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; </div>
98 <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <a class="code" href="a00216.html#gga7ac6f97cc40bd50c40285084f869ba63a22c57cf18e1da4a6c584fb783b552f9f">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_IGNORE_MEMORY</a> = (1UL&lt;&lt;3)</div>
99 <div class="line"><a name="l00244"></a><span class="lineno"><a class="line" href="a00216.html#gga7ac6f97cc40bd50c40285084f869ba63a22c57cf18e1da4a6c584fb783b552f9f"> 244</a></span>&#160;};</div>
100 <div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; </div>
101 <div class="line"><a name="l00267"></a><span class="lineno"><a class="line" href="a00216.html#ga24b7864a1c588309c4749f621f03b4c7"> 267</a></span>&#160; HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00216.html#ga24b7864a1c588309c4749f621f03b4c7">hwloc_topology_export_synthetic</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">char</span> *buffer, <span class="keywordtype">size_t</span> buflen, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
102 <div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; </div>
103 <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
104 <div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
105 <div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;<span class="preprocessor">#endif</span></div>
106 <div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; </div>
107 <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; </div>
108 <div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_EXPORT_H */</span><span class="preprocessor"></span></div>
109 <div class="ttc" id="aa00195_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
110 <div class="ttc" id="aa00215_html_ga0eb99636aff71fe2704e1fa0ffe8c18d"><div class="ttname"><a href="a00215.html#ga0eb99636aff71fe2704e1fa0ffe8c18d">hwloc_topology_export_xml_flags_e</a></div><div class="ttdeci">hwloc_topology_export_xml_flags_e</div><div class="ttdoc">Flags for exporting XML topologies.</div><div class="ttdef"><b>Definition:</b> export.h:35</div></div>
111 <div class="ttc" id="aa00215_html_ga1b7358137cec27bd073f58a606ecbaba"><div class="ttname"><a href="a00215.html#ga1b7358137cec27bd073f58a606ecbaba">hwloc_export_obj_userdata_base64</a></div><div class="ttdeci">int hwloc_export_obj_userdata_base64(void *reserved, hwloc_topology_t topology, hwloc_obj_t obj, const char *name, const void *buffer, size_t length)</div><div class="ttdoc">Encode and export some object userdata to XML.</div></div>
112 <div class="ttc" id="aa00215_html_ga293e4a6489f15fd16ad22a5734561cf1"><div class="ttname"><a href="a00215.html#ga293e4a6489f15fd16ad22a5734561cf1">hwloc_free_xmlbuffer</a></div><div class="ttdeci">void hwloc_free_xmlbuffer(hwloc_topology_t topology, char *xmlbuffer)</div><div class="ttdoc">Free a buffer allocated by hwloc_topology_export_xmlbuffer()</div></div>
113 <div class="ttc" id="aa00215_html_ga333f79975b4eeb28a3d8fad3373583ce"><div class="ttname"><a href="a00215.html#ga333f79975b4eeb28a3d8fad3373583ce">hwloc_topology_export_xml</a></div><div class="ttdeci">int hwloc_topology_export_xml(hwloc_topology_t topology, const char *xmlpath, unsigned long flags)</div><div class="ttdoc">Export the topology into an XML file.</div></div>
114 <div class="ttc" id="aa00215_html_ga5ac6917ea7289955fb1ffda4353af9b0"><div class="ttname"><a href="a00215.html#ga5ac6917ea7289955fb1ffda4353af9b0">hwloc_topology_set_userdata_import_callback</a></div><div class="ttdeci">void hwloc_topology_set_userdata_import_callback(hwloc_topology_t topology, void(*import_cb)(hwloc_topology_t topology, hwloc_obj_t obj, const char *name, const void *buffer, size_t length))</div><div class="ttdoc">Set the application-specific callback for importing userdata.</div></div>
115 <div class="ttc" id="aa00215_html_ga9d6ff0f7a8dd45be9aa8575ef31978cc"><div class="ttname"><a href="a00215.html#ga9d6ff0f7a8dd45be9aa8575ef31978cc">hwloc_topology_set_userdata_export_callback</a></div><div class="ttdeci">void hwloc_topology_set_userdata_export_callback(hwloc_topology_t topology, void(*export_cb)(void *reserved, hwloc_topology_t topology, hwloc_obj_t obj))</div><div class="ttdoc">Set the application-specific callback for exporting object userdata.</div></div>
116 <div class="ttc" id="aa00215_html_gaa541bdd628416dbbe97d0df69d3de958"><div class="ttname"><a href="a00215.html#gaa541bdd628416dbbe97d0df69d3de958">hwloc_export_obj_userdata</a></div><div class="ttdeci">int hwloc_export_obj_userdata(void *reserved, hwloc_topology_t topology, hwloc_obj_t obj, const char *name, const void *buffer, size_t length)</div><div class="ttdoc">Export some object userdata to XML.</div></div>
117 <div class="ttc" id="aa00215_html_gad33b7f7c11db10459505a3b1634fd3f1"><div class="ttname"><a href="a00215.html#gad33b7f7c11db10459505a3b1634fd3f1">hwloc_topology_export_xmlbuffer</a></div><div class="ttdeci">int hwloc_topology_export_xmlbuffer(hwloc_topology_t topology, char **xmlbuffer, int *buflen, unsigned long flags)</div><div class="ttdoc">Export the topology into a newly-allocated XML memory buffer.</div></div>
118 <div class="ttc" id="aa00215_html_gga0eb99636aff71fe2704e1fa0ffe8c18dae7d6d96546131ef0043867b836b02e0f"><div class="ttname"><a href="a00215.html#gga0eb99636aff71fe2704e1fa0ffe8c18dae7d6d96546131ef0043867b836b02e0f">HWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1</div><div class="ttdoc">Export XML that is loadable by hwloc v1.x. However, the export may miss some details about the topolo...</div><div class="ttdef"><b>Definition:</b> export.h:40</div></div>
119 <div class="ttc" id="aa00216_html_ga24b7864a1c588309c4749f621f03b4c7"><div class="ttname"><a href="a00216.html#ga24b7864a1c588309c4749f621f03b4c7">hwloc_topology_export_synthetic</a></div><div class="ttdeci">int hwloc_topology_export_synthetic(hwloc_topology_t topology, char *buffer, size_t buflen, unsigned long flags)</div><div class="ttdoc">Export the topology as a synthetic string.</div></div>
120 <div class="ttc" id="aa00216_html_ga7ac6f97cc40bd50c40285084f869ba63"><div class="ttname"><a href="a00216.html#ga7ac6f97cc40bd50c40285084f869ba63">hwloc_topology_export_synthetic_flags_e</a></div><div class="ttdeci">hwloc_topology_export_synthetic_flags_e</div><div class="ttdoc">Flags for exporting synthetic topologies.</div><div class="ttdef"><b>Definition:</b> export.h:209</div></div>
121 <div class="ttc" id="aa00216_html_gga7ac6f97cc40bd50c40285084f869ba63a22c57cf18e1da4a6c584fb783b552f9f"><div class="ttname"><a href="a00216.html#gga7ac6f97cc40bd50c40285084f869ba63a22c57cf18e1da4a6c584fb783b552f9f">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_IGNORE_MEMORY</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_IGNORE_MEMORY</div><div class="ttdoc">Do not export memory information.</div><div class="ttdef"><b>Definition:</b> export.h:243</div></div>
122 <div class="ttc" id="aa00216_html_gga7ac6f97cc40bd50c40285084f869ba63a3b3bd4ba2ef9990810865e561034ccc9"><div class="ttname"><a href="a00216.html#gga7ac6f97cc40bd50c40285084f869ba63a3b3bd4ba2ef9990810865e561034ccc9">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_EXTENDED_TYPES</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_EXTENDED_TYPES</div><div class="ttdoc">Export extended types such as L2dcache as basic types such as Cache.</div><div class="ttdef"><b>Definition:</b> export.h:215</div></div>
123 <div class="ttc" id="aa00216_html_gga7ac6f97cc40bd50c40285084f869ba63a7896bdf4ccfcdcd09a9f76c0f5e3a5b8"><div class="ttname"><a href="a00216.html#gga7ac6f97cc40bd50c40285084f869ba63a7896bdf4ccfcdcd09a9f76c0f5e3a5b8">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_V1</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_V1</div><div class="ttdoc">Export the memory hierarchy as expected in hwloc 1.x.</div><div class="ttdef"><b>Definition:</b> export.h:233</div></div>
124 <div class="ttc" id="aa00216_html_gga7ac6f97cc40bd50c40285084f869ba63aaa2702ffba050bab079b3041aec737d4"><div class="ttname"><a href="a00216.html#gga7ac6f97cc40bd50c40285084f869ba63aaa2702ffba050bab079b3041aec737d4">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_ATTRS</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_ATTRS</div><div class="ttdoc">Do not export level attributes.</div><div class="ttdef"><b>Definition:</b> export.h:223</div></div>
125 <div class="ttc" id="aa00250_html"><div class="ttname"><a href="a00250.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:395</div></div>
280126 </div><!-- fragment --></div><!-- contents -->
281127 <!-- start footer part -->
282128 <hr class="footer"/><address class="footer"><small>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): export.h Source File</title>
7 <title>Hardware Locality (hwloc): distances.h Source File</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4343 </div><!-- top -->
4444 <div class="header">
4545 <div class="headertitle">
46 <div class="title">export.h</div> </div>
46 <div class="title">distances.h</div> </div>
4747 </div><!--header-->
4848 <div class="contents">
4949 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
50 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2009-2018 Inria. All rights reserved.</span></div>
51 <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * Copyright © 2009-2012 Université Bordeaux</span></div>
52 <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.</span></div>
53 <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
54 <div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> */</span></div>
55 <div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; </div>
56 <div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#ifndef HWLOC_EXPORT_H</span></div>
57 <div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#define HWLOC_EXPORT_H</span></div>
58 <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; </div>
59 <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef HWLOC_H</span></div>
60 <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#error Please include the main hwloc.h instead</span></div>
61 <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#endif</span></div>
62 <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; </div>
63 <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
64 <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
65 <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
66 <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#elif 0</span></div>
67 <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;}</div>
68 <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#endif</span></div>
69 <div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; </div>
70 <div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
71 <div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="a00212.html#ga0eb99636aff71fe2704e1fa0ffe8c18d"> 35</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00212.html#ga0eb99636aff71fe2704e1fa0ffe8c18d">hwloc_topology_export_xml_flags_e</a> {</div>
72 <div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; <a class="code" href="a00212.html#gga0eb99636aff71fe2704e1fa0ffe8c18dae7d6d96546131ef0043867b836b02e0f">HWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1</a> = (1UL&lt;&lt;0)</div>
73 <div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="a00212.html#gga0eb99636aff71fe2704e1fa0ffe8c18dae7d6d96546131ef0043867b836b02e0f"> 41</a></span>&#160;};</div>
74 <div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; </div>
75 <div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="a00212.html#ga333f79975b4eeb28a3d8fad3373583ce"> 71</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00212.html#ga333f79975b4eeb28a3d8fad3373583ce">hwloc_topology_export_xml</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">const</span> <span class="keywordtype">char</span> *xmlpath, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
76 <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; </div>
77 <div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="a00212.html#gad33b7f7c11db10459505a3b1634fd3f1"> 105</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00212.html#gad33b7f7c11db10459505a3b1634fd3f1">hwloc_topology_export_xmlbuffer</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">char</span> **xmlbuffer, <span class="keywordtype">int</span> *buflen, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
78 <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; </div>
79 <div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="a00212.html#ga293e4a6489f15fd16ad22a5734561cf1"> 108</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> <a class="code" href="a00212.html#ga293e4a6489f15fd16ad22a5734561cf1">hwloc_free_xmlbuffer</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">char</span> *xmlbuffer);</div>
80 <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; </div>
81 <div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="a00212.html#ga9d6ff0f7a8dd45be9aa8575ef31978cc"> 128</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> <a class="code" href="a00212.html#ga9d6ff0f7a8dd45be9aa8575ef31978cc">hwloc_topology_set_userdata_export_callback</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
82 <div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordtype">void</span> (*export_cb)(<span class="keywordtype">void</span> *reserved, <a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00244.html">hwloc_obj_t</a> obj));</div>
83 <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; </div>
84 <div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="a00212.html#gaa541bdd628416dbbe97d0df69d3de958"> 156</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00212.html#gaa541bdd628416dbbe97d0df69d3de958">hwloc_export_obj_userdata</a>(<span class="keywordtype">void</span> *reserved, <a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00244.html">hwloc_obj_t</a> obj, <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> <span class="keywordtype">void</span> *buffer, <span class="keywordtype">size_t</span> length);</div>
85 <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; </div>
86 <div class="line"><a name="l00171"></a><span class="lineno"><a class="line" href="a00212.html#ga1b7358137cec27bd073f58a606ecbaba"> 171</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00212.html#ga1b7358137cec27bd073f58a606ecbaba">hwloc_export_obj_userdata_base64</a>(<span class="keywordtype">void</span> *reserved, <a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00244.html">hwloc_obj_t</a> obj, <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> <span class="keywordtype">void</span> *buffer, <span class="keywordtype">size_t</span> length);</div>
87 <div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; </div>
88 <div class="line"><a name="l00195"></a><span class="lineno"><a class="line" href="a00212.html#ga5ac6917ea7289955fb1ffda4353af9b0"> 195</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> <a class="code" href="a00212.html#ga5ac6917ea7289955fb1ffda4353af9b0">hwloc_topology_set_userdata_import_callback</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
89 <div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordtype">void</span> (*import_cb)(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00244.html">hwloc_obj_t</a> obj, <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keyword">const</span> <span class="keywordtype">void</span> *buffer, <span class="keywordtype">size_t</span> length));</div>
90 <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; </div>
91 <div class="line"><a name="l00209"></a><span class="lineno"><a class="line" href="a00213.html#ga7ac6f97cc40bd50c40285084f869ba63"> 209</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00213.html#ga7ac6f97cc40bd50c40285084f869ba63">hwloc_topology_export_synthetic_flags_e</a> {</div>
92 <div class="line"><a name="l00215"></a><span class="lineno"><a class="line" href="a00213.html#gga7ac6f97cc40bd50c40285084f869ba63a3b3bd4ba2ef9990810865e561034ccc9"> 215</a></span>&#160; <a class="code" href="a00213.html#gga7ac6f97cc40bd50c40285084f869ba63a3b3bd4ba2ef9990810865e561034ccc9">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_EXTENDED_TYPES</a> = (1UL&lt;&lt;0),</div>
93 <div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; </div>
94 <div class="line"><a name="l00223"></a><span class="lineno"><a class="line" href="a00213.html#gga7ac6f97cc40bd50c40285084f869ba63aaa2702ffba050bab079b3041aec737d4"> 223</a></span>&#160; <a class="code" href="a00213.html#gga7ac6f97cc40bd50c40285084f869ba63aaa2702ffba050bab079b3041aec737d4">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_ATTRS</a> = (1UL&lt;&lt;1),</div>
95 <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; </div>
96 <div class="line"><a name="l00233"></a><span class="lineno"><a class="line" href="a00213.html#gga7ac6f97cc40bd50c40285084f869ba63a7896bdf4ccfcdcd09a9f76c0f5e3a5b8"> 233</a></span>&#160; <a class="code" href="a00213.html#gga7ac6f97cc40bd50c40285084f869ba63a7896bdf4ccfcdcd09a9f76c0f5e3a5b8">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_V1</a> = (1UL&lt;&lt;2),</div>
97 <div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; </div>
98 <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <a class="code" href="a00213.html#gga7ac6f97cc40bd50c40285084f869ba63a22c57cf18e1da4a6c584fb783b552f9f">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_IGNORE_MEMORY</a> = (1UL&lt;&lt;3)</div>
99 <div class="line"><a name="l00244"></a><span class="lineno"><a class="line" href="a00213.html#gga7ac6f97cc40bd50c40285084f869ba63a22c57cf18e1da4a6c584fb783b552f9f"> 244</a></span>&#160;};</div>
100 <div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; </div>
101 <div class="line"><a name="l00267"></a><span class="lineno"><a class="line" href="a00213.html#ga24b7864a1c588309c4749f621f03b4c7"> 267</a></span>&#160; HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00213.html#ga24b7864a1c588309c4749f621f03b4c7">hwloc_topology_export_synthetic</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">char</span> *buffer, <span class="keywordtype">size_t</span> buflen, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
102 <div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; </div>
103 <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
104 <div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
105 <div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;<span class="preprocessor">#endif</span></div>
106 <div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; </div>
107 <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; </div>
108 <div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_EXPORT_H */</span><span class="preprocessor"></span></div>
109 <div class="ttc" id="aa00192_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
110 <div class="ttc" id="aa00212_html_ga0eb99636aff71fe2704e1fa0ffe8c18d"><div class="ttname"><a href="a00212.html#ga0eb99636aff71fe2704e1fa0ffe8c18d">hwloc_topology_export_xml_flags_e</a></div><div class="ttdeci">hwloc_topology_export_xml_flags_e</div><div class="ttdoc">Flags for exporting XML topologies.</div><div class="ttdef"><b>Definition:</b> export.h:35</div></div>
111 <div class="ttc" id="aa00212_html_ga1b7358137cec27bd073f58a606ecbaba"><div class="ttname"><a href="a00212.html#ga1b7358137cec27bd073f58a606ecbaba">hwloc_export_obj_userdata_base64</a></div><div class="ttdeci">int hwloc_export_obj_userdata_base64(void *reserved, hwloc_topology_t topology, hwloc_obj_t obj, const char *name, const void *buffer, size_t length)</div><div class="ttdoc">Encode and export some object userdata to XML.</div></div>
112 <div class="ttc" id="aa00212_html_ga293e4a6489f15fd16ad22a5734561cf1"><div class="ttname"><a href="a00212.html#ga293e4a6489f15fd16ad22a5734561cf1">hwloc_free_xmlbuffer</a></div><div class="ttdeci">void hwloc_free_xmlbuffer(hwloc_topology_t topology, char *xmlbuffer)</div><div class="ttdoc">Free a buffer allocated by hwloc_topology_export_xmlbuffer()</div></div>
113 <div class="ttc" id="aa00212_html_ga333f79975b4eeb28a3d8fad3373583ce"><div class="ttname"><a href="a00212.html#ga333f79975b4eeb28a3d8fad3373583ce">hwloc_topology_export_xml</a></div><div class="ttdeci">int hwloc_topology_export_xml(hwloc_topology_t topology, const char *xmlpath, unsigned long flags)</div><div class="ttdoc">Export the topology into an XML file.</div></div>
114 <div class="ttc" id="aa00212_html_ga5ac6917ea7289955fb1ffda4353af9b0"><div class="ttname"><a href="a00212.html#ga5ac6917ea7289955fb1ffda4353af9b0">hwloc_topology_set_userdata_import_callback</a></div><div class="ttdeci">void hwloc_topology_set_userdata_import_callback(hwloc_topology_t topology, void(*import_cb)(hwloc_topology_t topology, hwloc_obj_t obj, const char *name, const void *buffer, size_t length))</div><div class="ttdoc">Set the application-specific callback for importing userdata.</div></div>
115 <div class="ttc" id="aa00212_html_ga9d6ff0f7a8dd45be9aa8575ef31978cc"><div class="ttname"><a href="a00212.html#ga9d6ff0f7a8dd45be9aa8575ef31978cc">hwloc_topology_set_userdata_export_callback</a></div><div class="ttdeci">void hwloc_topology_set_userdata_export_callback(hwloc_topology_t topology, void(*export_cb)(void *reserved, hwloc_topology_t topology, hwloc_obj_t obj))</div><div class="ttdoc">Set the application-specific callback for exporting object userdata.</div></div>
116 <div class="ttc" id="aa00212_html_gaa541bdd628416dbbe97d0df69d3de958"><div class="ttname"><a href="a00212.html#gaa541bdd628416dbbe97d0df69d3de958">hwloc_export_obj_userdata</a></div><div class="ttdeci">int hwloc_export_obj_userdata(void *reserved, hwloc_topology_t topology, hwloc_obj_t obj, const char *name, const void *buffer, size_t length)</div><div class="ttdoc">Export some object userdata to XML.</div></div>
117 <div class="ttc" id="aa00212_html_gad33b7f7c11db10459505a3b1634fd3f1"><div class="ttname"><a href="a00212.html#gad33b7f7c11db10459505a3b1634fd3f1">hwloc_topology_export_xmlbuffer</a></div><div class="ttdeci">int hwloc_topology_export_xmlbuffer(hwloc_topology_t topology, char **xmlbuffer, int *buflen, unsigned long flags)</div><div class="ttdoc">Export the topology into a newly-allocated XML memory buffer.</div></div>
118 <div class="ttc" id="aa00212_html_gga0eb99636aff71fe2704e1fa0ffe8c18dae7d6d96546131ef0043867b836b02e0f"><div class="ttname"><a href="a00212.html#gga0eb99636aff71fe2704e1fa0ffe8c18dae7d6d96546131ef0043867b836b02e0f">HWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1</div><div class="ttdoc">Export XML that is loadable by hwloc v1.x. However, the export may miss some details about the topolo...</div><div class="ttdef"><b>Definition:</b> export.h:40</div></div>
119 <div class="ttc" id="aa00213_html_ga24b7864a1c588309c4749f621f03b4c7"><div class="ttname"><a href="a00213.html#ga24b7864a1c588309c4749f621f03b4c7">hwloc_topology_export_synthetic</a></div><div class="ttdeci">int hwloc_topology_export_synthetic(hwloc_topology_t topology, char *buffer, size_t buflen, unsigned long flags)</div><div class="ttdoc">Export the topology as a synthetic string.</div></div>
120 <div class="ttc" id="aa00213_html_ga7ac6f97cc40bd50c40285084f869ba63"><div class="ttname"><a href="a00213.html#ga7ac6f97cc40bd50c40285084f869ba63">hwloc_topology_export_synthetic_flags_e</a></div><div class="ttdeci">hwloc_topology_export_synthetic_flags_e</div><div class="ttdoc">Flags for exporting synthetic topologies.</div><div class="ttdef"><b>Definition:</b> export.h:209</div></div>
121 <div class="ttc" id="aa00213_html_gga7ac6f97cc40bd50c40285084f869ba63a22c57cf18e1da4a6c584fb783b552f9f"><div class="ttname"><a href="a00213.html#gga7ac6f97cc40bd50c40285084f869ba63a22c57cf18e1da4a6c584fb783b552f9f">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_IGNORE_MEMORY</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_IGNORE_MEMORY</div><div class="ttdoc">Do not export memory information.</div><div class="ttdef"><b>Definition:</b> export.h:243</div></div>
122 <div class="ttc" id="aa00213_html_gga7ac6f97cc40bd50c40285084f869ba63a3b3bd4ba2ef9990810865e561034ccc9"><div class="ttname"><a href="a00213.html#gga7ac6f97cc40bd50c40285084f869ba63a3b3bd4ba2ef9990810865e561034ccc9">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_EXTENDED_TYPES</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_EXTENDED_TYPES</div><div class="ttdoc">Export extended types such as L2dcache as basic types such as Cache.</div><div class="ttdef"><b>Definition:</b> export.h:215</div></div>
123 <div class="ttc" id="aa00213_html_gga7ac6f97cc40bd50c40285084f869ba63a7896bdf4ccfcdcd09a9f76c0f5e3a5b8"><div class="ttname"><a href="a00213.html#gga7ac6f97cc40bd50c40285084f869ba63a7896bdf4ccfcdcd09a9f76c0f5e3a5b8">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_V1</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_V1</div><div class="ttdoc">Export the memory hierarchy as expected in hwloc 1.x.</div><div class="ttdef"><b>Definition:</b> export.h:233</div></div>
124 <div class="ttc" id="aa00213_html_gga7ac6f97cc40bd50c40285084f869ba63aaa2702ffba050bab079b3041aec737d4"><div class="ttname"><a href="a00213.html#gga7ac6f97cc40bd50c40285084f869ba63aaa2702ffba050bab079b3041aec737d4">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_ATTRS</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_ATTRS</div><div class="ttdoc">Do not export level attributes.</div><div class="ttdef"><b>Definition:</b> export.h:223</div></div>
125 <div class="ttc" id="aa00244_html"><div class="ttname"><a href="a00244.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:395</div></div>
50 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2010-2021 Inria. All rights reserved.</span></div>
51 <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
52 <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> */</span></div>
53 <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; </div>
54 <div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#ifndef HWLOC_DISTANCES_H</span></div>
55 <div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#define HWLOC_DISTANCES_H</span></div>
56 <div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160; </div>
57 <div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#ifndef HWLOC_H</span></div>
58 <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#error Please include the main hwloc.h instead</span></div>
59 <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#endif</span></div>
60 <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; </div>
61 <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; </div>
62 <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
63 <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
64 <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#elif 0</span></div>
65 <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;}</div>
66 <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#endif</span></div>
67 <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
68 <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
69 <div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="a00322.html"> 52</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00322.html">hwloc_distances_s</a> {</div>
70 <div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="a00322.html#a4ca2af858cebbce7324ec49903d09474"> 53</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00322.html#a4ca2af858cebbce7324ec49903d09474">nbobjs</a>; </div>
71 <div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="a00322.html#af1e78b2d628d191fa6cae3fbfe891078"> 54</a></span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> *<a class="code" href="a00322.html#af1e78b2d628d191fa6cae3fbfe891078">objs</a>; </div>
72 <div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="a00322.html#aef9c83cf467da1b1fa4c36493febb3b5"> 59</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="a00322.html#aef9c83cf467da1b1fa4c36493febb3b5">kind</a>; </div>
73 <div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="a00322.html#ae43e19b2c743de05c93d71a30beaca75"> 60</a></span>&#160; hwloc_uint64_t *<a class="code" href="a00322.html#ae43e19b2c743de05c93d71a30beaca75">values</a>; </div>
74 <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;};</div>
75 <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; </div>
76 <div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="a00217.html#gab1bb10d3adb85b52cdc6fe5a7f74f108"> 78</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00217.html#gab1bb10d3adb85b52cdc6fe5a7f74f108">hwloc_distances_kind_e</a> {</div>
77 <div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="a00217.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a90dc38248c8d5392d4dd3e88f391e984"> 82</a></span>&#160; <a class="code" href="a00217.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a90dc38248c8d5392d4dd3e88f391e984">HWLOC_DISTANCES_KIND_FROM_OS</a> = (1UL&lt;&lt;0),</div>
78 <div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="a00217.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a0148d7f9be833a04f5a55455437c227b"> 86</a></span>&#160; <a class="code" href="a00217.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a0148d7f9be833a04f5a55455437c227b">HWLOC_DISTANCES_KIND_FROM_USER</a> = (1UL&lt;&lt;1),</div>
79 <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; </div>
80 <div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="a00217.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108afd6a3503fbc8f7c1a31235373cefc4c6"> 94</a></span>&#160; <a class="code" href="a00217.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108afd6a3503fbc8f7c1a31235373cefc4c6">HWLOC_DISTANCES_KIND_MEANS_LATENCY</a> = (1UL&lt;&lt;2),</div>
81 <div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="a00217.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a41b19f141a3c0ffe85f9affaca4b0293"> 101</a></span>&#160; <a class="code" href="a00217.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a41b19f141a3c0ffe85f9affaca4b0293">HWLOC_DISTANCES_KIND_MEANS_BANDWIDTH</a> = (1UL&lt;&lt;3),</div>
82 <div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; </div>
83 <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <a class="code" href="a00217.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108aa6cf2b6dfcf148b65952f811814efbe1">HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES</a> = (1UL&lt;&lt;4)</div>
84 <div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="a00217.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108aa6cf2b6dfcf148b65952f811814efbe1"> 109</a></span>&#160;};</div>
85 <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; </div>
86 <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
87 <div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="a00217.html#ga613e6b2a5d0f06626ee8d0c12fa46691"> 135</a></span>&#160;<a class="code" href="a00217.html#ga613e6b2a5d0f06626ee8d0c12fa46691">hwloc_distances_get</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
88 <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordtype">unsigned</span> *nr, <span class="keyword">struct</span> <a class="code" href="a00322.html">hwloc_distances_s</a> **distances,</div>
89 <div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> kind, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
90 <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; </div>
91 <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
92 <div class="line"><a name="l00144"></a><span class="lineno"><a class="line" href="a00217.html#ga5d1d35eccfcc2ebcef71a10972ce9b03"> 144</a></span>&#160;<a class="code" href="a00217.html#ga5d1d35eccfcc2ebcef71a10972ce9b03">hwloc_distances_get_by_depth</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">int</span> depth,</div>
93 <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordtype">unsigned</span> *nr, <span class="keyword">struct</span> <a class="code" href="a00322.html">hwloc_distances_s</a> **distances,</div>
94 <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> kind, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
95 <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; </div>
96 <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
97 <div class="line"><a name="l00153"></a><span class="lineno"><a class="line" href="a00217.html#gaaa6bfbc20072a4f4de132eec859067f6"> 153</a></span>&#160;<a class="code" href="a00217.html#gaaa6bfbc20072a4f4de132eec859067f6">hwloc_distances_get_by_type</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type,</div>
98 <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordtype">unsigned</span> *nr, <span class="keyword">struct</span> <a class="code" href="a00322.html">hwloc_distances_s</a> **distances,</div>
99 <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> kind, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
100 <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; </div>
101 <div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
102 <div class="line"><a name="l00165"></a><span class="lineno"><a class="line" href="a00217.html#gaa457f35b8745ca41ec17797c0d7b20f0"> 165</a></span>&#160;<a class="code" href="a00217.html#gaa457f35b8745ca41ec17797c0d7b20f0">hwloc_distances_get_by_name</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">const</span> <span class="keywordtype">char</span> *name,</div>
103 <div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordtype">unsigned</span> *nr, <span class="keyword">struct</span> <a class="code" href="a00322.html">hwloc_distances_s</a> **distances,</div>
104 <div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
105 <div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; </div>
106 <div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;HWLOC_DECLSPEC <span class="keyword">const</span> <span class="keywordtype">char</span> *</div>
107 <div class="line"><a name="l00175"></a><span class="lineno"><a class="line" href="a00217.html#gaa6f9697028c589cef0458edef5fe273f"> 175</a></span>&#160;<a class="code" href="a00217.html#gaa6f9697028c589cef0458edef5fe273f">hwloc_distances_get_name</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">struct</span> <a class="code" href="a00322.html">hwloc_distances_s</a> *distances);</div>
108 <div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; </div>
109 <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span></div>
110 <div class="line"><a name="l00182"></a><span class="lineno"><a class="line" href="a00217.html#ga1dd78c1f9acd54f26aba0e284e97e51d"> 182</a></span>&#160;<a class="code" href="a00217.html#ga1dd78c1f9acd54f26aba0e284e97e51d">hwloc_distances_release</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">struct</span> <a class="code" href="a00322.html">hwloc_distances_s</a> *distances);</div>
111 <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; </div>
112 <div class="line"><a name="l00185"></a><span class="lineno"><a class="line" href="a00217.html#ga42859b651adec5ef0aaacb53ff220b00"> 185</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00217.html#ga42859b651adec5ef0aaacb53ff220b00">hwloc_distances_transform_e</a> {</div>
113 <div class="line"><a name="l00199"></a><span class="lineno"><a class="line" href="a00217.html#gga42859b651adec5ef0aaacb53ff220b00a4b7bdb7e3ccca30e03b7ae671e7f6dc1"> 199</a></span>&#160; <a class="code" href="a00217.html#gga42859b651adec5ef0aaacb53ff220b00a4b7bdb7e3ccca30e03b7ae671e7f6dc1">HWLOC_DISTANCES_TRANSFORM_REMOVE_NULL</a> = 0,</div>
114 <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; </div>
115 <div class="line"><a name="l00213"></a><span class="lineno"><a class="line" href="a00217.html#gga42859b651adec5ef0aaacb53ff220b00a441e6bb393558319af3bb1f89f51f44d"> 213</a></span>&#160; <a class="code" href="a00217.html#gga42859b651adec5ef0aaacb53ff220b00a441e6bb393558319af3bb1f89f51f44d">HWLOC_DISTANCES_TRANSFORM_LINKS</a> = 1,</div>
116 <div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; </div>
117 <div class="line"><a name="l00222"></a><span class="lineno"><a class="line" href="a00217.html#gga42859b651adec5ef0aaacb53ff220b00a3d2aaf03e17be54eddbb94aab327fded"> 222</a></span>&#160; <a class="code" href="a00217.html#gga42859b651adec5ef0aaacb53ff220b00a3d2aaf03e17be54eddbb94aab327fded">HWLOC_DISTANCES_TRANSFORM_MERGE_SWITCH_PORTS</a> = 2,</div>
118 <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; </div>
119 <div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <a class="code" href="a00217.html#gga42859b651adec5ef0aaacb53ff220b00a1264abf9b9463f252995f37eb1057047">HWLOC_DISTANCES_TRANSFORM_TRANSITIVE_CLOSURE</a> = 3</div>
120 <div class="line"><a name="l00230"></a><span class="lineno"><a class="line" href="a00217.html#gga42859b651adec5ef0aaacb53ff220b00a1264abf9b9463f252995f37eb1057047"> 230</a></span>&#160;};</div>
121 <div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; </div>
122 <div class="line"><a name="l00258"></a><span class="lineno"><a class="line" href="a00217.html#gabcadd041f3072999d68f2d94e38670f7"> 258</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00217.html#gabcadd041f3072999d68f2d94e38670f7">hwloc_distances_transform</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">struct</span> <a class="code" href="a00322.html">hwloc_distances_s</a> *distances,</div>
123 <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keyword">enum</span> <a class="code" href="a00217.html#ga42859b651adec5ef0aaacb53ff220b00">hwloc_distances_transform_e</a> transform,</div>
124 <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordtype">void</span> *transform_attr,</div>
125 <div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
126 <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; </div>
127 <div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
128 <div class="line"><a name="l00276"></a><span class="lineno"><a class="line" href="a00218.html#gab9e770c7d56c5d6040f26bd1dc8854cd"> 276</a></span>&#160;<a class="code" href="a00218.html#gab9e770c7d56c5d6040f26bd1dc8854cd">hwloc_distances_obj_index</a>(<span class="keyword">struct</span> <a class="code" href="a00322.html">hwloc_distances_s</a> *distances, <a class="code" href="a00250.html">hwloc_obj_t</a> obj)</div>
129 <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;{</div>
130 <div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keywordtype">unsigned</span> i;</div>
131 <div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordflow">for</span>(i=0; i&lt;distances-&gt;<a class="code" href="a00322.html#a4ca2af858cebbce7324ec49903d09474">nbobjs</a>; i++)</div>
132 <div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">if</span> (distances-&gt;<a class="code" href="a00322.html#af1e78b2d628d191fa6cae3fbfe891078">objs</a>[i] == obj)</div>
133 <div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="keywordflow">return</span> (<span class="keywordtype">int</span>)i;</div>
134 <div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">return</span> -1;</div>
135 <div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;}</div>
136 <div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; </div>
137 <div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
138 <div class="line"><a name="l00293"></a><span class="lineno"><a class="line" href="a00218.html#ga3c665b23056e3269f777b21a67148c82"> 293</a></span>&#160;<a class="code" href="a00218.html#ga3c665b23056e3269f777b21a67148c82">hwloc_distances_obj_pair_values</a>(<span class="keyword">struct</span> <a class="code" href="a00322.html">hwloc_distances_s</a> *distances,</div>
139 <div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> obj1, <a class="code" href="a00250.html">hwloc_obj_t</a> obj2,</div>
140 <div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; hwloc_uint64_t *value1to2, hwloc_uint64_t *value2to1)</div>
141 <div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160;{</div>
142 <div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keywordtype">int</span> i1 = <a class="code" href="a00218.html#gab9e770c7d56c5d6040f26bd1dc8854cd">hwloc_distances_obj_index</a>(distances, obj1);</div>
143 <div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keywordtype">int</span> i2 = <a class="code" href="a00218.html#gab9e770c7d56c5d6040f26bd1dc8854cd">hwloc_distances_obj_index</a>(distances, obj2);</div>
144 <div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keywordflow">if</span> (i1 &lt; 0 || i2 &lt; 0)</div>
145 <div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">return</span> -1;</div>
146 <div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; *value1to2 = distances-&gt;<a class="code" href="a00322.html#ae43e19b2c743de05c93d71a30beaca75">values</a>[i1 * distances-&gt;<a class="code" href="a00322.html#a4ca2af858cebbce7324ec49903d09474">nbobjs</a> + i2];</div>
147 <div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; *value2to1 = distances-&gt;<a class="code" href="a00322.html#ae43e19b2c743de05c93d71a30beaca75">values</a>[i2 * distances-&gt;<a class="code" href="a00322.html#a4ca2af858cebbce7324ec49903d09474">nbobjs</a> + i1];</div>
148 <div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordflow">return</span> 0;</div>
149 <div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;}</div>
150 <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; </div>
151 <div class="line"><a name="l00329"></a><span class="lineno"><a class="line" href="a00219.html#ga554a4c1e315265f961830e2b616e4989"> 329</a></span>&#160;<span class="keyword">typedef</span> <span class="keywordtype">void</span> * <a class="code" href="a00219.html#ga554a4c1e315265f961830e2b616e4989">hwloc_distances_add_handle_t</a>;</div>
152 <div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; </div>
153 <div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;HWLOC_DECLSPEC <a class="code" href="a00219.html#ga554a4c1e315265f961830e2b616e4989">hwloc_distances_add_handle_t</a></div>
154 <div class="line"><a name="l00352"></a><span class="lineno"><a class="line" href="a00219.html#ga823d38fa8d21dc338497fb0f79c96704"> 352</a></span>&#160;<a class="code" href="a00219.html#ga823d38fa8d21dc338497fb0f79c96704">hwloc_distances_add_create</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
155 <div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> kind,</div>
156 <div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
157 <div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; </div>
158 <div class="line"><a name="l00378"></a><span class="lineno"><a class="line" href="a00219.html#ga8c9715481b0bce344c8a33c6e6a56469"> 378</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00219.html#ga8c9715481b0bce344c8a33c6e6a56469">hwloc_distances_add_values</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
159 <div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <a class="code" href="a00219.html#ga554a4c1e315265f961830e2b616e4989">hwloc_distances_add_handle_t</a> handle,</div>
160 <div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="keywordtype">unsigned</span> nbobjs, <a class="code" href="a00250.html">hwloc_obj_t</a> *objs,</div>
161 <div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; hwloc_uint64_t *values,</div>
162 <div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
163 <div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; </div>
164 <div class="line"><a name="l00385"></a><span class="lineno"><a class="line" href="a00219.html#ga22428b6bab271411e3834e6b4ca22e37"> 385</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00219.html#ga22428b6bab271411e3834e6b4ca22e37">hwloc_distances_add_flag_e</a> {</div>
165 <div class="line"><a name="l00390"></a><span class="lineno"><a class="line" href="a00219.html#gga22428b6bab271411e3834e6b4ca22e37a7f6baba797d70538d03c9d13052c62ab"> 390</a></span>&#160; <a class="code" href="a00219.html#gga22428b6bab271411e3834e6b4ca22e37a7f6baba797d70538d03c9d13052c62ab">HWLOC_DISTANCES_ADD_FLAG_GROUP</a> = (1UL&lt;&lt;0),</div>
166 <div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <a class="code" href="a00219.html#gga22428b6bab271411e3834e6b4ca22e37a5233ccf631c3bc53dd5c3e7a5d5c9b77">HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE</a> = (1UL&lt;&lt;1)</div>
167 <div class="line"><a name="l00397"></a><span class="lineno"><a class="line" href="a00219.html#gga22428b6bab271411e3834e6b4ca22e37a5233ccf631c3bc53dd5c3e7a5d5c9b77"> 397</a></span>&#160;};</div>
168 <div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; </div>
169 <div class="line"><a name="l00415"></a><span class="lineno"><a class="line" href="a00219.html#ga1f5a29760ebb8f9af831e645315f553c"> 415</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00219.html#ga1f5a29760ebb8f9af831e645315f553c">hwloc_distances_add_commit</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
170 <div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <a class="code" href="a00219.html#ga554a4c1e315265f961830e2b616e4989">hwloc_distances_add_handle_t</a> handle,</div>
171 <div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
172 <div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; </div>
173 <div class="line"><a name="l00435"></a><span class="lineno"><a class="line" href="a00220.html#gac188d9b64d9560255ce5f6d0a20f9c0a"> 435</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00220.html#gac188d9b64d9560255ce5f6d0a20f9c0a">hwloc_distances_remove</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology);</div>
174 <div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; </div>
175 <div class="line"><a name="l00441"></a><span class="lineno"><a class="line" href="a00220.html#gaa642a4c1a21c84f38ae23fca8a27845d"> 441</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00220.html#gaa642a4c1a21c84f38ae23fca8a27845d">hwloc_distances_remove_by_depth</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">int</span> depth);</div>
176 <div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; </div>
177 <div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
178 <div class="line"><a name="l00448"></a><span class="lineno"><a class="line" href="a00220.html#ga93db53773c96f5b83815e8441e2ebb93"> 448</a></span>&#160;<a class="code" href="a00220.html#ga93db53773c96f5b83815e8441e2ebb93">hwloc_distances_remove_by_type</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</div>
179 <div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160;{</div>
180 <div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="keywordtype">int</span> depth = <a class="code" href="a00196.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, type);</div>
181 <div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="keywordflow">if</span> (depth == <a class="code" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a> || depth == <a class="code" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c">HWLOC_TYPE_DEPTH_MULTIPLE</a>)</div>
182 <div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="keywordflow">return</span> 0;</div>
183 <div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keywordflow">return</span> <a class="code" href="a00220.html#gaa642a4c1a21c84f38ae23fca8a27845d">hwloc_distances_remove_by_depth</a>(topology, depth);</div>
184 <div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160;}</div>
185 <div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; </div>
186 <div class="line"><a name="l00460"></a><span class="lineno"><a class="line" href="a00220.html#ga80bbf6f0db9af48c61780dd5152664c2"> 460</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00220.html#ga80bbf6f0db9af48c61780dd5152664c2">hwloc_distances_release_remove</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">struct</span> <a class="code" href="a00322.html">hwloc_distances_s</a> *distances);</div>
187 <div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; </div>
188 <div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
189 <div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
190 <div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160;<span class="preprocessor">#endif</span></div>
191 <div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; </div>
192 <div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; </div>
193 <div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_DISTANCES_H */</span><span class="preprocessor"></span></div>
194 <div class="ttc" id="aa00193_html_gacd37bb612667dc437d66bfb175a8dc55"><div class="ttname"><a href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a></div><div class="ttdeci">hwloc_obj_type_t</div><div class="ttdoc">Type of topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:176</div></div>
195 <div class="ttc" id="aa00195_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
196 <div class="ttc" id="aa00196_html_ga8bec782e21be313750da70cf7428b374"><div class="ttname"><a href="a00196.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a></div><div class="ttdeci">int hwloc_get_type_depth(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Returns the depth of objects of type type.</div></div>
197 <div class="ttc" id="aa00196_html_ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad"><div class="ttname"><a href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_UNKNOWN</div><div class="ttdoc">No object of given type exists in the topology.</div><div class="ttdef"><b>Definition:</b> hwloc.h:821</div></div>
198 <div class="ttc" id="aa00196_html_ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c"><div class="ttname"><a href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c">HWLOC_TYPE_DEPTH_MULTIPLE</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_MULTIPLE</div><div class="ttdoc">Objects of given type exist at different depth in the topology (only for Groups).</div><div class="ttdef"><b>Definition:</b> hwloc.h:822</div></div>
199 <div class="ttc" id="aa00217_html_ga1dd78c1f9acd54f26aba0e284e97e51d"><div class="ttname"><a href="a00217.html#ga1dd78c1f9acd54f26aba0e284e97e51d">hwloc_distances_release</a></div><div class="ttdeci">void hwloc_distances_release(hwloc_topology_t topology, struct hwloc_distances_s *distances)</div><div class="ttdoc">Release a distance matrix structure previously returned by hwloc_distances_get().</div></div>
200 <div class="ttc" id="aa00217_html_ga42859b651adec5ef0aaacb53ff220b00"><div class="ttname"><a href="a00217.html#ga42859b651adec5ef0aaacb53ff220b00">hwloc_distances_transform_e</a></div><div class="ttdeci">hwloc_distances_transform_e</div><div class="ttdoc">Transformations of distances structures.</div><div class="ttdef"><b>Definition:</b> distances.h:185</div></div>
201 <div class="ttc" id="aa00217_html_ga5d1d35eccfcc2ebcef71a10972ce9b03"><div class="ttname"><a href="a00217.html#ga5d1d35eccfcc2ebcef71a10972ce9b03">hwloc_distances_get_by_depth</a></div><div class="ttdeci">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)</div><div class="ttdoc">Retrieve distance matrices for object at a specific depth in the topology.</div></div>
202 <div class="ttc" id="aa00217_html_ga613e6b2a5d0f06626ee8d0c12fa46691"><div class="ttname"><a href="a00217.html#ga613e6b2a5d0f06626ee8d0c12fa46691">hwloc_distances_get</a></div><div class="ttdeci">int hwloc_distances_get(hwloc_topology_t topology, unsigned *nr, struct hwloc_distances_s **distances, unsigned long kind, unsigned long flags)</div><div class="ttdoc">Retrieve distance matrices.</div></div>
203 <div class="ttc" id="aa00217_html_gaa457f35b8745ca41ec17797c0d7b20f0"><div class="ttname"><a href="a00217.html#gaa457f35b8745ca41ec17797c0d7b20f0">hwloc_distances_get_by_name</a></div><div class="ttdeci">int hwloc_distances_get_by_name(hwloc_topology_t topology, const char *name, unsigned *nr, struct hwloc_distances_s **distances, unsigned long flags)</div><div class="ttdoc">Retrieve a distance matrix with the given name.</div></div>
204 <div class="ttc" id="aa00217_html_gaa6f9697028c589cef0458edef5fe273f"><div class="ttname"><a href="a00217.html#gaa6f9697028c589cef0458edef5fe273f">hwloc_distances_get_name</a></div><div class="ttdeci">const char * hwloc_distances_get_name(hwloc_topology_t topology, struct hwloc_distances_s *distances)</div><div class="ttdoc">Get a description of what a distances structure contains.</div></div>
205 <div class="ttc" id="aa00217_html_gaaa6bfbc20072a4f4de132eec859067f6"><div class="ttname"><a href="a00217.html#gaaa6bfbc20072a4f4de132eec859067f6">hwloc_distances_get_by_type</a></div><div class="ttdeci">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)</div><div class="ttdoc">Retrieve distance matrices for object of a specific type.</div></div>
206 <div class="ttc" id="aa00217_html_gab1bb10d3adb85b52cdc6fe5a7f74f108"><div class="ttname"><a href="a00217.html#gab1bb10d3adb85b52cdc6fe5a7f74f108">hwloc_distances_kind_e</a></div><div class="ttdeci">hwloc_distances_kind_e</div><div class="ttdoc">Kinds of distance matrices.</div><div class="ttdef"><b>Definition:</b> distances.h:78</div></div>
207 <div class="ttc" id="aa00217_html_gabcadd041f3072999d68f2d94e38670f7"><div class="ttname"><a href="a00217.html#gabcadd041f3072999d68f2d94e38670f7">hwloc_distances_transform</a></div><div class="ttdeci">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)</div><div class="ttdoc">Apply a transformation to a distances structure.</div></div>
208 <div class="ttc" id="aa00217_html_gga42859b651adec5ef0aaacb53ff220b00a1264abf9b9463f252995f37eb1057047"><div class="ttname"><a href="a00217.html#gga42859b651adec5ef0aaacb53ff220b00a1264abf9b9463f252995f37eb1057047">HWLOC_DISTANCES_TRANSFORM_TRANSITIVE_CLOSURE</a></div><div class="ttdeci">@ HWLOC_DISTANCES_TRANSFORM_TRANSITIVE_CLOSURE</div><div class="ttdoc">Apply a transitive closure to the matrix to connect objects across switches. This currently only appl...</div><div class="ttdef"><b>Definition:</b> distances.h:229</div></div>
209 <div class="ttc" id="aa00217_html_gga42859b651adec5ef0aaacb53ff220b00a3d2aaf03e17be54eddbb94aab327fded"><div class="ttname"><a href="a00217.html#gga42859b651adec5ef0aaacb53ff220b00a3d2aaf03e17be54eddbb94aab327fded">HWLOC_DISTANCES_TRANSFORM_MERGE_SWITCH_PORTS</a></div><div class="ttdeci">@ HWLOC_DISTANCES_TRANSFORM_MERGE_SWITCH_PORTS</div><div class="ttdoc">Merge switches with multiple ports into a single object. This currently only applies to NVSwitches wh...</div><div class="ttdef"><b>Definition:</b> distances.h:222</div></div>
210 <div class="ttc" id="aa00217_html_gga42859b651adec5ef0aaacb53ff220b00a441e6bb393558319af3bb1f89f51f44d"><div class="ttname"><a href="a00217.html#gga42859b651adec5ef0aaacb53ff220b00a441e6bb393558319af3bb1f89f51f44d">HWLOC_DISTANCES_TRANSFORM_LINKS</a></div><div class="ttdeci">@ HWLOC_DISTANCES_TRANSFORM_LINKS</div><div class="ttdoc">Replace bandwidth values with a number of links.</div><div class="ttdef"><b>Definition:</b> distances.h:213</div></div>
211 <div class="ttc" id="aa00217_html_gga42859b651adec5ef0aaacb53ff220b00a4b7bdb7e3ccca30e03b7ae671e7f6dc1"><div class="ttname"><a href="a00217.html#gga42859b651adec5ef0aaacb53ff220b00a4b7bdb7e3ccca30e03b7ae671e7f6dc1">HWLOC_DISTANCES_TRANSFORM_REMOVE_NULL</a></div><div class="ttdeci">@ HWLOC_DISTANCES_TRANSFORM_REMOVE_NULL</div><div class="ttdoc">Remove NULL objects from the distances structure.</div><div class="ttdef"><b>Definition:</b> distances.h:199</div></div>
212 <div class="ttc" id="aa00217_html_ggab1bb10d3adb85b52cdc6fe5a7f74f108a0148d7f9be833a04f5a55455437c227b"><div class="ttname"><a href="a00217.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a0148d7f9be833a04f5a55455437c227b">HWLOC_DISTANCES_KIND_FROM_USER</a></div><div class="ttdeci">@ HWLOC_DISTANCES_KIND_FROM_USER</div><div class="ttdoc">These distances were provided by the user.</div><div class="ttdef"><b>Definition:</b> distances.h:86</div></div>
213 <div class="ttc" id="aa00217_html_ggab1bb10d3adb85b52cdc6fe5a7f74f108a41b19f141a3c0ffe85f9affaca4b0293"><div class="ttname"><a href="a00217.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a41b19f141a3c0ffe85f9affaca4b0293">HWLOC_DISTANCES_KIND_MEANS_BANDWIDTH</a></div><div class="ttdeci">@ HWLOC_DISTANCES_KIND_MEANS_BANDWIDTH</div><div class="ttdoc">Distance values are similar to bandwidths between objects. Values are higher for closer objects,...</div><div class="ttdef"><b>Definition:</b> distances.h:101</div></div>
214 <div class="ttc" id="aa00217_html_ggab1bb10d3adb85b52cdc6fe5a7f74f108a90dc38248c8d5392d4dd3e88f391e984"><div class="ttname"><a href="a00217.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a90dc38248c8d5392d4dd3e88f391e984">HWLOC_DISTANCES_KIND_FROM_OS</a></div><div class="ttdeci">@ HWLOC_DISTANCES_KIND_FROM_OS</div><div class="ttdoc">These distances were obtained from the operating system or hardware.</div><div class="ttdef"><b>Definition:</b> distances.h:82</div></div>
215 <div class="ttc" id="aa00217_html_ggab1bb10d3adb85b52cdc6fe5a7f74f108aa6cf2b6dfcf148b65952f811814efbe1"><div class="ttname"><a href="a00217.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108aa6cf2b6dfcf148b65952f811814efbe1">HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES</a></div><div class="ttdeci">@ HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES</div><div class="ttdoc">This distances structure covers objects of different types. This may apply to the &quot;NVLinkBandwidth&quot; s...</div><div class="ttdef"><b>Definition:</b> distances.h:108</div></div>
216 <div class="ttc" id="aa00217_html_ggab1bb10d3adb85b52cdc6fe5a7f74f108afd6a3503fbc8f7c1a31235373cefc4c6"><div class="ttname"><a href="a00217.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108afd6a3503fbc8f7c1a31235373cefc4c6">HWLOC_DISTANCES_KIND_MEANS_LATENCY</a></div><div class="ttdeci">@ HWLOC_DISTANCES_KIND_MEANS_LATENCY</div><div class="ttdoc">Distance values are similar to latencies between objects. Values are smaller for closer objects,...</div><div class="ttdef"><b>Definition:</b> distances.h:94</div></div>
217 <div class="ttc" id="aa00218_html_ga3c665b23056e3269f777b21a67148c82"><div class="ttname"><a href="a00218.html#ga3c665b23056e3269f777b21a67148c82">hwloc_distances_obj_pair_values</a></div><div class="ttdeci">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)</div><div class="ttdoc">Find the values between two objects in a distance matrices.</div><div class="ttdef"><b>Definition:</b> distances.h:293</div></div>
218 <div class="ttc" id="aa00218_html_gab9e770c7d56c5d6040f26bd1dc8854cd"><div class="ttname"><a href="a00218.html#gab9e770c7d56c5d6040f26bd1dc8854cd">hwloc_distances_obj_index</a></div><div class="ttdeci">static int hwloc_distances_obj_index(struct hwloc_distances_s *distances, hwloc_obj_t obj)</div><div class="ttdoc">Find the index of an object in a distances structure.</div><div class="ttdef"><b>Definition:</b> distances.h:276</div></div>
219 <div class="ttc" id="aa00219_html_ga1f5a29760ebb8f9af831e645315f553c"><div class="ttname"><a href="a00219.html#ga1f5a29760ebb8f9af831e645315f553c">hwloc_distances_add_commit</a></div><div class="ttdeci">int hwloc_distances_add_commit(hwloc_topology_t topology, hwloc_distances_add_handle_t handle, unsigned long flags)</div><div class="ttdoc">Commit a new distances structure.</div></div>
220 <div class="ttc" id="aa00219_html_ga22428b6bab271411e3834e6b4ca22e37"><div class="ttname"><a href="a00219.html#ga22428b6bab271411e3834e6b4ca22e37">hwloc_distances_add_flag_e</a></div><div class="ttdeci">hwloc_distances_add_flag_e</div><div class="ttdoc">Flags for adding a new distances to a topology.</div><div class="ttdef"><b>Definition:</b> distances.h:385</div></div>
221 <div class="ttc" id="aa00219_html_ga554a4c1e315265f961830e2b616e4989"><div class="ttname"><a href="a00219.html#ga554a4c1e315265f961830e2b616e4989">hwloc_distances_add_handle_t</a></div><div class="ttdeci">void * hwloc_distances_add_handle_t</div><div class="ttdoc">Handle to a new distances structure during its addition to the topology.</div><div class="ttdef"><b>Definition:</b> distances.h:329</div></div>
222 <div class="ttc" id="aa00219_html_ga823d38fa8d21dc338497fb0f79c96704"><div class="ttname"><a href="a00219.html#ga823d38fa8d21dc338497fb0f79c96704">hwloc_distances_add_create</a></div><div class="ttdeci">hwloc_distances_add_handle_t hwloc_distances_add_create(hwloc_topology_t topology, const char *name, unsigned long kind, unsigned long flags)</div><div class="ttdoc">Create a new empty distances structure.</div></div>
223 <div class="ttc" id="aa00219_html_ga8c9715481b0bce344c8a33c6e6a56469"><div class="ttname"><a href="a00219.html#ga8c9715481b0bce344c8a33c6e6a56469">hwloc_distances_add_values</a></div><div class="ttdeci">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)</div><div class="ttdoc">Specify the objects and values in a new empty distances structure.</div></div>
224 <div class="ttc" id="aa00219_html_gga22428b6bab271411e3834e6b4ca22e37a5233ccf631c3bc53dd5c3e7a5d5c9b77"><div class="ttname"><a href="a00219.html#gga22428b6bab271411e3834e6b4ca22e37a5233ccf631c3bc53dd5c3e7a5d5c9b77">HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE</a></div><div class="ttdeci">@ HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE</div><div class="ttdoc">If grouping, consider the distance values as inaccurate and relax the comparisons during the grouping...</div><div class="ttdef"><b>Definition:</b> distances.h:396</div></div>
225 <div class="ttc" id="aa00219_html_gga22428b6bab271411e3834e6b4ca22e37a7f6baba797d70538d03c9d13052c62ab"><div class="ttname"><a href="a00219.html#gga22428b6bab271411e3834e6b4ca22e37a7f6baba797d70538d03c9d13052c62ab">HWLOC_DISTANCES_ADD_FLAG_GROUP</a></div><div class="ttdeci">@ HWLOC_DISTANCES_ADD_FLAG_GROUP</div><div class="ttdoc">Try to group objects based on the newly provided distance information. This is ignored for distances ...</div><div class="ttdef"><b>Definition:</b> distances.h:390</div></div>
226 <div class="ttc" id="aa00220_html_ga80bbf6f0db9af48c61780dd5152664c2"><div class="ttname"><a href="a00220.html#ga80bbf6f0db9af48c61780dd5152664c2">hwloc_distances_release_remove</a></div><div class="ttdeci">int hwloc_distances_release_remove(hwloc_topology_t topology, struct hwloc_distances_s *distances)</div><div class="ttdoc">Release and remove the given distance matrice from the topology.</div></div>
227 <div class="ttc" id="aa00220_html_ga93db53773c96f5b83815e8441e2ebb93"><div class="ttname"><a href="a00220.html#ga93db53773c96f5b83815e8441e2ebb93">hwloc_distances_remove_by_type</a></div><div class="ttdeci">static int hwloc_distances_remove_by_type(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Remove distance matrices for objects of a specific type in the topology.</div><div class="ttdef"><b>Definition:</b> distances.h:448</div></div>
228 <div class="ttc" id="aa00220_html_gaa642a4c1a21c84f38ae23fca8a27845d"><div class="ttname"><a href="a00220.html#gaa642a4c1a21c84f38ae23fca8a27845d">hwloc_distances_remove_by_depth</a></div><div class="ttdeci">int hwloc_distances_remove_by_depth(hwloc_topology_t topology, int depth)</div><div class="ttdoc">Remove distance matrices for objects at a specific depth in the topology.</div></div>
229 <div class="ttc" id="aa00220_html_gac188d9b64d9560255ce5f6d0a20f9c0a"><div class="ttname"><a href="a00220.html#gac188d9b64d9560255ce5f6d0a20f9c0a">hwloc_distances_remove</a></div><div class="ttdeci">int hwloc_distances_remove(hwloc_topology_t topology)</div><div class="ttdoc">Remove all distance matrices from a topology.</div></div>
230 <div class="ttc" id="aa00250_html"><div class="ttname"><a href="a00250.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:395</div></div>
231 <div class="ttc" id="aa00322_html"><div class="ttname"><a href="a00322.html">hwloc_distances_s</a></div><div class="ttdoc">Matrix of distances between a set of objects.</div><div class="ttdef"><b>Definition:</b> distances.h:52</div></div>
232 <div class="ttc" id="aa00322_html_a4ca2af858cebbce7324ec49903d09474"><div class="ttname"><a href="a00322.html#a4ca2af858cebbce7324ec49903d09474">hwloc_distances_s::nbobjs</a></div><div class="ttdeci">unsigned nbobjs</div><div class="ttdoc">Number of objects described by the distance matrix.</div><div class="ttdef"><b>Definition:</b> distances.h:53</div></div>
233 <div class="ttc" id="aa00322_html_ae43e19b2c743de05c93d71a30beaca75"><div class="ttname"><a href="a00322.html#ae43e19b2c743de05c93d71a30beaca75">hwloc_distances_s::values</a></div><div class="ttdeci">hwloc_uint64_t * values</div><div class="ttdoc">Matrix of distances between objects, stored as a one-dimension array.</div><div class="ttdef"><b>Definition:</b> distances.h:60</div></div>
234 <div class="ttc" id="aa00322_html_aef9c83cf467da1b1fa4c36493febb3b5"><div class="ttname"><a href="a00322.html#aef9c83cf467da1b1fa4c36493febb3b5">hwloc_distances_s::kind</a></div><div class="ttdeci">unsigned long kind</div><div class="ttdoc">OR'ed set of hwloc_distances_kind_e.</div><div class="ttdef"><b>Definition:</b> distances.h:59</div></div>
235 <div class="ttc" id="aa00322_html_af1e78b2d628d191fa6cae3fbfe891078"><div class="ttname"><a href="a00322.html#af1e78b2d628d191fa6cae3fbfe891078">hwloc_distances_s::objs</a></div><div class="ttdeci">hwloc_obj_t * objs</div><div class="ttdoc">Array of objects described by the distance matrix. These objects are not in any particular order,...</div><div class="ttdef"><b>Definition:</b> distances.h:54</div></div>
126236 </div><!-- fragment --></div><!-- contents -->
127237 <!-- start footer part -->
128238 <hr class="footer"/><address class="footer"><small>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): distances.h Source File</title>
7 <title>Hardware Locality (hwloc): memattrs.h Source File</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4343 </div><!-- top -->
4444 <div class="header">
4545 <div class="headertitle">
46 <div class="title">distances.h</div> </div>
46 <div class="title">memattrs.h</div> </div>
4747 </div><!--header-->
4848 <div class="contents">
4949 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
50 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2010-2020 Inria. All rights reserved.</span></div>
50 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2019-2020 Inria. All rights reserved.</span></div>
5151 <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
5252 <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> */</span></div>
5353 <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; </div>
54 <div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#ifndef HWLOC_DISTANCES_H</span></div>
55 <div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#define HWLOC_DISTANCES_H</span></div>
54 <div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#ifndef HWLOC_MEMATTR_H</span></div>
55 <div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#define HWLOC_MEMATTR_H</span></div>
5656 <div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160; </div>
57 <div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#ifndef HWLOC_H</span></div>
58 <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#error Please include the main hwloc.h instead</span></div>
59 <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#endif</span></div>
60 <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; </div>
61 <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; </div>
62 <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
63 <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
64 <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#elif 0</span></div>
65 <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;}</div>
66 <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#endif</span></div>
67 <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
68 <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
69 <div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="a00316.html"> 42</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00316.html">hwloc_distances_s</a> {</div>
70 <div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="a00316.html#a4ca2af858cebbce7324ec49903d09474"> 43</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00316.html#a4ca2af858cebbce7324ec49903d09474">nbobjs</a>; </div>
71 <div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="a00316.html#af1e78b2d628d191fa6cae3fbfe891078"> 44</a></span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> *<a class="code" href="a00316.html#af1e78b2d628d191fa6cae3fbfe891078">objs</a>; </div>
72 <div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="a00316.html#aef9c83cf467da1b1fa4c36493febb3b5"> 49</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="a00316.html#aef9c83cf467da1b1fa4c36493febb3b5">kind</a>; </div>
73 <div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="a00316.html#ae43e19b2c743de05c93d71a30beaca75"> 50</a></span>&#160; hwloc_uint64_t *<a class="code" href="a00316.html#ae43e19b2c743de05c93d71a30beaca75">values</a>; </div>
74 <div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;};</div>
75 <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; </div>
76 <div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="a00214.html#gab1bb10d3adb85b52cdc6fe5a7f74f108"> 68</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00214.html#gab1bb10d3adb85b52cdc6fe5a7f74f108">hwloc_distances_kind_e</a> {</div>
77 <div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="a00214.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a90dc38248c8d5392d4dd3e88f391e984"> 72</a></span>&#160; <a class="code" href="a00214.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a90dc38248c8d5392d4dd3e88f391e984">HWLOC_DISTANCES_KIND_FROM_OS</a> = (1UL&lt;&lt;0),</div>
78 <div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="a00214.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a0148d7f9be833a04f5a55455437c227b"> 76</a></span>&#160; <a class="code" href="a00214.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a0148d7f9be833a04f5a55455437c227b">HWLOC_DISTANCES_KIND_FROM_USER</a> = (1UL&lt;&lt;1),</div>
79 <div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; </div>
80 <div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="a00214.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108afd6a3503fbc8f7c1a31235373cefc4c6"> 84</a></span>&#160; <a class="code" href="a00214.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108afd6a3503fbc8f7c1a31235373cefc4c6">HWLOC_DISTANCES_KIND_MEANS_LATENCY</a> = (1UL&lt;&lt;2),</div>
81 <div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="a00214.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a41b19f141a3c0ffe85f9affaca4b0293"> 91</a></span>&#160; <a class="code" href="a00214.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a41b19f141a3c0ffe85f9affaca4b0293">HWLOC_DISTANCES_KIND_MEANS_BANDWIDTH</a> = (1UL&lt;&lt;3),</div>
57 <div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &quot;hwloc.h&quot;</span></div>
58 <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; </div>
59 <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
60 <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
61 <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#elif 0</span></div>
62 <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;}</div>
63 <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#endif</span></div>
64 <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; </div>
65 <div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="a00221.html#gab4bde745db676fc2ea4b47011cd9a80e"> 67</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00221.html#gab4bde745db676fc2ea4b47011cd9a80e">hwloc_memattr_id_e</a> {</div>
66 <div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="a00221.html#ggab4bde745db676fc2ea4b47011cd9a80eaa1cfa3ff3d56ff00ecabf7da4f5642cc"> 77</a></span>&#160; <a class="code" href="a00221.html#ggab4bde745db676fc2ea4b47011cd9a80eaa1cfa3ff3d56ff00ecabf7da4f5642cc">HWLOC_MEMATTR_ID_CAPACITY</a> = 0,</div>
67 <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; </div>
68 <div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="a00221.html#ggab4bde745db676fc2ea4b47011cd9a80ea9334e3a4c30a67f491c6523255134efe"> 91</a></span>&#160; <a class="code" href="a00221.html#ggab4bde745db676fc2ea4b47011cd9a80ea9334e3a4c30a67f491c6523255134efe">HWLOC_MEMATTR_ID_LOCALITY</a> = 1,</div>
8269 <div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; </div>
83 <div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <a class="code" href="a00214.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108aa6cf2b6dfcf148b65952f811814efbe1">HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES</a> = (1UL&lt;&lt;4)</div>
84 <div class="line"><a name="l00097"></a><span class="lineno"><a class="line" href="a00214.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108aa6cf2b6dfcf148b65952f811814efbe1"> 97</a></span>&#160;};</div>
85 <div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; </div>
86 <div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
87 <div class="line"><a name="l00123"></a><span class="lineno"><a class="line" href="a00214.html#ga613e6b2a5d0f06626ee8d0c12fa46691"> 123</a></span>&#160;<a class="code" href="a00214.html#ga613e6b2a5d0f06626ee8d0c12fa46691">hwloc_distances_get</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
88 <div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordtype">unsigned</span> *nr, <span class="keyword">struct</span> <a class="code" href="a00316.html">hwloc_distances_s</a> **distances,</div>
89 <div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> kind, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
90 <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; </div>
91 <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
92 <div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="a00214.html#ga5d1d35eccfcc2ebcef71a10972ce9b03"> 132</a></span>&#160;<a class="code" href="a00214.html#ga5d1d35eccfcc2ebcef71a10972ce9b03">hwloc_distances_get_by_depth</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">int</span> depth,</div>
93 <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordtype">unsigned</span> *nr, <span class="keyword">struct</span> <a class="code" href="a00316.html">hwloc_distances_s</a> **distances,</div>
94 <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> kind, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
95 <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; </div>
96 <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
97 <div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="a00214.html#gaaa6bfbc20072a4f4de132eec859067f6"> 141</a></span>&#160;<a class="code" href="a00214.html#gaaa6bfbc20072a4f4de132eec859067f6">hwloc_distances_get_by_type</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type,</div>
98 <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordtype">unsigned</span> *nr, <span class="keyword">struct</span> <a class="code" href="a00316.html">hwloc_distances_s</a> **distances,</div>
99 <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> kind, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
100 <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; </div>
101 <div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
102 <div class="line"><a name="l00152"></a><span class="lineno"><a class="line" href="a00214.html#gaa457f35b8745ca41ec17797c0d7b20f0"> 152</a></span>&#160;<a class="code" href="a00214.html#gaa457f35b8745ca41ec17797c0d7b20f0">hwloc_distances_get_by_name</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">const</span> <span class="keywordtype">char</span> *name,</div>
103 <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordtype">unsigned</span> *nr, <span class="keyword">struct</span> <a class="code" href="a00316.html">hwloc_distances_s</a> **distances,</div>
104 <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
70 <div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="a00221.html#ggab4bde745db676fc2ea4b47011cd9a80ea25fe3c7376ae6f9b584bacdb039f8c0f"> 99</a></span>&#160; <a class="code" href="a00221.html#ggab4bde745db676fc2ea4b47011cd9a80ea25fe3c7376ae6f9b584bacdb039f8c0f">HWLOC_MEMATTR_ID_BANDWIDTH</a> = 2,</div>
71 <div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; </div>
72 <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <a class="code" href="a00221.html#ggab4bde745db676fc2ea4b47011cd9a80ead1796413759b8b87b61ad195a9349b19">HWLOC_MEMATTR_ID_LATENCY</a> = 3</div>
73 <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; </div>
74 <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="comment">/* TODO read vs write, persistence? */</span></div>
75 <div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="a00221.html#ggab4bde745db676fc2ea4b47011cd9a80ead1796413759b8b87b61ad195a9349b19"> 110</a></span>&#160;};</div>
76 <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; </div>
77 <div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="a00221.html#gacc82003a8610be554615995f0996c888"> 115</a></span>&#160;<span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <a class="code" href="a00221.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a>;</div>
78 <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; </div>
79 <div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
80 <div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="a00221.html#ga79f44f8e1cfd2f97a19171417a75a137"> 120</a></span>&#160;<a class="code" href="a00221.html#ga79f44f8e1cfd2f97a19171417a75a137">hwloc_memattr_get_by_name</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
81 <div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> *name,</div>
82 <div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <a class="code" href="a00221.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> *<span class="keywordtype">id</span>);</div>
83 <div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; </div>
84 <div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; </div>
85 <div class="line"><a name="l00126"></a><span class="lineno"><a class="line" href="a00221.html#ga33099ba58f607fc70925da3777688586"> 126</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00221.html#ga33099ba58f607fc70925da3777688586">hwloc_location_type_e</a> {</div>
86 <div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="a00221.html#gga33099ba58f607fc70925da3777688586a7135318a86361ad75fd1648e6bf6d174"> 128</a></span>&#160; <a class="code" href="a00221.html#gga33099ba58f607fc70925da3777688586a7135318a86361ad75fd1648e6bf6d174">HWLOC_LOCATION_TYPE_CPUSET</a> = 1,</div>
87 <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <a class="code" href="a00221.html#gga33099ba58f607fc70925da3777688586af637c39b23d48cff15ddb008644aaa84">HWLOC_LOCATION_TYPE_OBJECT</a> = 0</div>
88 <div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="a00221.html#gga33099ba58f607fc70925da3777688586af637c39b23d48cff15ddb008644aaa84"> 131</a></span>&#160;};</div>
89 <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; </div>
90 <div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="a00326.html"> 134</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00326.html">hwloc_location</a> {</div>
91 <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keyword">enum</span> <a class="code" href="a00221.html#ga33099ba58f607fc70925da3777688586">hwloc_location_type_e</a> <a class="code" href="a00326.html#aeb9c0ab74a7d3506a76d0b82600a28a7">type</a>;</div>
92 <div class="line"><a name="l00138"></a><span class="lineno"><a class="line" href="a00330.html"> 138</a></span>&#160; <span class="keyword">union </span><a class="code" href="a00330.html">hwloc_location_u</a> {</div>
93 <div class="line"><a name="l00140"></a><span class="lineno"><a class="line" href="a00330.html#a033bad8f6b891992f0c18b85a88c5561"> 140</a></span>&#160; <a class="code" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> <a class="code" href="a00330.html#a033bad8f6b891992f0c18b85a88c5561">cpuset</a>;</div>
94 <div class="line"><a name="l00142"></a><span class="lineno"><a class="line" href="a00330.html#acf2ebf75869f0a53a884ac2ab3374122"> 142</a></span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> <a class="code" href="a00330.html#acf2ebf75869f0a53a884ac2ab3374122">object</a>;</div>
95 <div class="line"><a name="l00143"></a><span class="lineno"><a class="line" href="a00326.html#a707a25a5b65177e4d081be49aa0777a2"> 143</a></span>&#160; } <a class="code" href="a00326.html#a707a25a5b65177e4d081be49aa0777a2">location</a>;</div>
96 <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;};</div>
97 <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; </div>
98 <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; </div>
99 <div class="line"><a name="l00148"></a><span class="lineno"><a class="line" href="a00221.html#gab9c963ca37255da71b00d94e1b106f9d"> 148</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00221.html#gab9c963ca37255da71b00d94e1b106f9d">hwloc_local_numanode_flag_e</a> {</div>
100 <div class="line"><a name="l00154"></a><span class="lineno"><a class="line" href="a00221.html#ggab9c963ca37255da71b00d94e1b106f9da200c6c133bb2125ba36d77ce9ca268cc"> 154</a></span>&#160; <a class="code" href="a00221.html#ggab9c963ca37255da71b00d94e1b106f9da200c6c133bb2125ba36d77ce9ca268cc">HWLOC_LOCAL_NUMANODE_FLAG_LARGER_LOCALITY</a> = (1UL&lt;&lt;0),</div>
105101 <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; </div>
106 <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;HWLOC_DECLSPEC <span class="keyword">const</span> <span class="keywordtype">char</span> *</div>
107 <div class="line"><a name="l00162"></a><span class="lineno"><a class="line" href="a00214.html#gaa6f9697028c589cef0458edef5fe273f"> 162</a></span>&#160;<a class="code" href="a00214.html#gaa6f9697028c589cef0458edef5fe273f">hwloc_distances_get_name</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">struct</span> <a class="code" href="a00316.html">hwloc_distances_s</a> *distances);</div>
108 <div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; </div>
109 <div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span></div>
110 <div class="line"><a name="l00169"></a><span class="lineno"><a class="line" href="a00214.html#ga1dd78c1f9acd54f26aba0e284e97e51d"> 169</a></span>&#160;<a class="code" href="a00214.html#ga1dd78c1f9acd54f26aba0e284e97e51d">hwloc_distances_release</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">struct</span> <a class="code" href="a00316.html">hwloc_distances_s</a> *distances);</div>
111 <div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; </div>
112 <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
113 <div class="line"><a name="l00184"></a><span class="lineno"><a class="line" href="a00215.html#gab9e770c7d56c5d6040f26bd1dc8854cd"> 184</a></span>&#160;<a class="code" href="a00215.html#gab9e770c7d56c5d6040f26bd1dc8854cd">hwloc_distances_obj_index</a>(<span class="keyword">struct</span> <a class="code" href="a00316.html">hwloc_distances_s</a> *distances, <a class="code" href="a00244.html">hwloc_obj_t</a> obj)</div>
114 <div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;{</div>
115 <div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keywordtype">unsigned</span> i;</div>
116 <div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">for</span>(i=0; i&lt;distances-&gt;<a class="code" href="a00316.html#a4ca2af858cebbce7324ec49903d09474">nbobjs</a>; i++)</div>
117 <div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keywordflow">if</span> (distances-&gt;<a class="code" href="a00316.html#af1e78b2d628d191fa6cae3fbfe891078">objs</a>[i] == obj)</div>
118 <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keywordflow">return</span> (<span class="keywordtype">int</span>)i;</div>
119 <div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">return</span> -1;</div>
120 <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;}</div>
121 <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; </div>
122 <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
123 <div class="line"><a name="l00201"></a><span class="lineno"><a class="line" href="a00215.html#ga3c665b23056e3269f777b21a67148c82"> 201</a></span>&#160;<a class="code" href="a00215.html#ga3c665b23056e3269f777b21a67148c82">hwloc_distances_obj_pair_values</a>(<span class="keyword">struct</span> <a class="code" href="a00316.html">hwloc_distances_s</a> *distances,</div>
124 <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> obj1, <a class="code" href="a00244.html">hwloc_obj_t</a> obj2,</div>
125 <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; hwloc_uint64_t *value1to2, hwloc_uint64_t *value2to1)</div>
126 <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160;{</div>
127 <div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordtype">int</span> i1 = <a class="code" href="a00215.html#gab9e770c7d56c5d6040f26bd1dc8854cd">hwloc_distances_obj_index</a>(distances, obj1);</div>
128 <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <span class="keywordtype">int</span> i2 = <a class="code" href="a00215.html#gab9e770c7d56c5d6040f26bd1dc8854cd">hwloc_distances_obj_index</a>(distances, obj2);</div>
129 <div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">if</span> (i1 &lt; 0 || i2 &lt; 0)</div>
130 <div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordflow">return</span> -1;</div>
131 <div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; *value1to2 = distances-&gt;<a class="code" href="a00316.html#ae43e19b2c743de05c93d71a30beaca75">values</a>[i1 * distances-&gt;<a class="code" href="a00316.html#a4ca2af858cebbce7324ec49903d09474">nbobjs</a> + i2];</div>
132 <div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; *value2to1 = distances-&gt;<a class="code" href="a00316.html#ae43e19b2c743de05c93d71a30beaca75">values</a>[i2 * distances-&gt;<a class="code" href="a00316.html#a4ca2af858cebbce7324ec49903d09474">nbobjs</a> + i1];</div>
133 <div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">return</span> 0;</div>
134 <div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160;}</div>
135 <div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; </div>
136 <div class="line"><a name="l00223"></a><span class="lineno"><a class="line" href="a00216.html#ga22428b6bab271411e3834e6b4ca22e37"> 223</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00216.html#ga22428b6bab271411e3834e6b4ca22e37">hwloc_distances_add_flag_e</a> {</div>
137 <div class="line"><a name="l00227"></a><span class="lineno"><a class="line" href="a00216.html#gga22428b6bab271411e3834e6b4ca22e37a7f6baba797d70538d03c9d13052c62ab"> 227</a></span>&#160; <a class="code" href="a00216.html#gga22428b6bab271411e3834e6b4ca22e37a7f6baba797d70538d03c9d13052c62ab">HWLOC_DISTANCES_ADD_FLAG_GROUP</a> = (1UL&lt;&lt;0),</div>
138 <div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <a class="code" href="a00216.html#gga22428b6bab271411e3834e6b4ca22e37a5233ccf631c3bc53dd5c3e7a5d5c9b77">HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE</a> = (1UL&lt;&lt;1)</div>
139 <div class="line"><a name="l00234"></a><span class="lineno"><a class="line" href="a00216.html#gga22428b6bab271411e3834e6b4ca22e37a5233ccf631c3bc53dd5c3e7a5d5c9b77"> 234</a></span>&#160;};</div>
140 <div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; </div>
141 <div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="a00216.html#gac5a71d96cd86efe31d6f8d282aae3d97"> 250</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00216.html#gac5a71d96cd86efe31d6f8d282aae3d97">hwloc_distances_add</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
142 <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordtype">unsigned</span> nbobjs, <a class="code" href="a00244.html">hwloc_obj_t</a> *objs, hwloc_uint64_t *values,</div>
143 <div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> kind, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
144 <div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; </div>
145 <div class="line"><a name="l00262"></a><span class="lineno"><a class="line" href="a00216.html#gac188d9b64d9560255ce5f6d0a20f9c0a"> 262</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00216.html#gac188d9b64d9560255ce5f6d0a20f9c0a">hwloc_distances_remove</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology);</div>
146 <div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; </div>
147 <div class="line"><a name="l00268"></a><span class="lineno"><a class="line" href="a00216.html#gaa642a4c1a21c84f38ae23fca8a27845d"> 268</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00216.html#gaa642a4c1a21c84f38ae23fca8a27845d">hwloc_distances_remove_by_depth</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">int</span> depth);</div>
148 <div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; </div>
149 <div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
150 <div class="line"><a name="l00275"></a><span class="lineno"><a class="line" href="a00216.html#ga93db53773c96f5b83815e8441e2ebb93"> 275</a></span>&#160;<a class="code" href="a00216.html#ga93db53773c96f5b83815e8441e2ebb93">hwloc_distances_remove_by_type</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</div>
151 <div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;{</div>
152 <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keywordtype">int</span> depth = <a class="code" href="a00193.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, type);</div>
153 <div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keywordflow">if</span> (depth == <a class="code" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a> || depth == <a class="code" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c">HWLOC_TYPE_DEPTH_MULTIPLE</a>)</div>
154 <div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordflow">return</span> 0;</div>
155 <div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">return</span> <a class="code" href="a00216.html#gaa642a4c1a21c84f38ae23fca8a27845d">hwloc_distances_remove_by_depth</a>(topology, depth);</div>
156 <div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160;}</div>
157 <div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; </div>
158 <div class="line"><a name="l00287"></a><span class="lineno"><a class="line" href="a00216.html#ga80bbf6f0db9af48c61780dd5152664c2"> 287</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00216.html#ga80bbf6f0db9af48c61780dd5152664c2">hwloc_distances_release_remove</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keyword">struct</span> <a class="code" href="a00316.html">hwloc_distances_s</a> *distances);</div>
159 <div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; </div>
160 <div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
161 <div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
162 <div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;<span class="preprocessor">#endif</span></div>
163 <div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; </div>
164 <div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; </div>
165 <div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_DISTANCES_H */</span><span class="preprocessor"></span></div>
166 <div class="ttc" id="aa00190_html_gacd37bb612667dc437d66bfb175a8dc55"><div class="ttname"><a href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a></div><div class="ttdeci">hwloc_obj_type_t</div><div class="ttdoc">Type of topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:176</div></div>
167 <div class="ttc" id="aa00192_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
168 <div class="ttc" id="aa00193_html_ga8bec782e21be313750da70cf7428b374"><div class="ttname"><a href="a00193.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a></div><div class="ttdeci">int hwloc_get_type_depth(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Returns the depth of objects of type type.</div></div>
169 <div class="ttc" id="aa00193_html_ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad"><div class="ttname"><a href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_UNKNOWN</div><div class="ttdoc">No object of given type exists in the topology.</div><div class="ttdef"><b>Definition:</b> hwloc.h:821</div></div>
170 <div class="ttc" id="aa00193_html_ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c"><div class="ttname"><a href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c">HWLOC_TYPE_DEPTH_MULTIPLE</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_MULTIPLE</div><div class="ttdoc">Objects of given type exist at different depth in the topology (only for Groups).</div><div class="ttdef"><b>Definition:</b> hwloc.h:822</div></div>
171 <div class="ttc" id="aa00214_html_ga1dd78c1f9acd54f26aba0e284e97e51d"><div class="ttname"><a href="a00214.html#ga1dd78c1f9acd54f26aba0e284e97e51d">hwloc_distances_release</a></div><div class="ttdeci">void hwloc_distances_release(hwloc_topology_t topology, struct hwloc_distances_s *distances)</div><div class="ttdoc">Release a distance matrix structure previously returned by hwloc_distances_get().</div></div>
172 <div class="ttc" id="aa00214_html_ga5d1d35eccfcc2ebcef71a10972ce9b03"><div class="ttname"><a href="a00214.html#ga5d1d35eccfcc2ebcef71a10972ce9b03">hwloc_distances_get_by_depth</a></div><div class="ttdeci">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)</div><div class="ttdoc">Retrieve distance matrices for object at a specific depth in the topology.</div></div>
173 <div class="ttc" id="aa00214_html_ga613e6b2a5d0f06626ee8d0c12fa46691"><div class="ttname"><a href="a00214.html#ga613e6b2a5d0f06626ee8d0c12fa46691">hwloc_distances_get</a></div><div class="ttdeci">int hwloc_distances_get(hwloc_topology_t topology, unsigned *nr, struct hwloc_distances_s **distances, unsigned long kind, unsigned long flags)</div><div class="ttdoc">Retrieve distance matrices.</div></div>
174 <div class="ttc" id="aa00214_html_gaa457f35b8745ca41ec17797c0d7b20f0"><div class="ttname"><a href="a00214.html#gaa457f35b8745ca41ec17797c0d7b20f0">hwloc_distances_get_by_name</a></div><div class="ttdeci">int hwloc_distances_get_by_name(hwloc_topology_t topology, const char *name, unsigned *nr, struct hwloc_distances_s **distances, unsigned long flags)</div><div class="ttdoc">Retrieve a distance matrix with the given name.</div></div>
175 <div class="ttc" id="aa00214_html_gaa6f9697028c589cef0458edef5fe273f"><div class="ttname"><a href="a00214.html#gaa6f9697028c589cef0458edef5fe273f">hwloc_distances_get_name</a></div><div class="ttdeci">const char * hwloc_distances_get_name(hwloc_topology_t topology, struct hwloc_distances_s *distances)</div><div class="ttdoc">Get a description of what a distances structure contains.</div></div>
176 <div class="ttc" id="aa00214_html_gaaa6bfbc20072a4f4de132eec859067f6"><div class="ttname"><a href="a00214.html#gaaa6bfbc20072a4f4de132eec859067f6">hwloc_distances_get_by_type</a></div><div class="ttdeci">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)</div><div class="ttdoc">Retrieve distance matrices for object of a specific type.</div></div>
177 <div class="ttc" id="aa00214_html_gab1bb10d3adb85b52cdc6fe5a7f74f108"><div class="ttname"><a href="a00214.html#gab1bb10d3adb85b52cdc6fe5a7f74f108">hwloc_distances_kind_e</a></div><div class="ttdeci">hwloc_distances_kind_e</div><div class="ttdoc">Kinds of distance matrices.</div><div class="ttdef"><b>Definition:</b> distances.h:68</div></div>
178 <div class="ttc" id="aa00214_html_ggab1bb10d3adb85b52cdc6fe5a7f74f108a0148d7f9be833a04f5a55455437c227b"><div class="ttname"><a href="a00214.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a0148d7f9be833a04f5a55455437c227b">HWLOC_DISTANCES_KIND_FROM_USER</a></div><div class="ttdeci">@ HWLOC_DISTANCES_KIND_FROM_USER</div><div class="ttdoc">These distances were provided by the user.</div><div class="ttdef"><b>Definition:</b> distances.h:76</div></div>
179 <div class="ttc" id="aa00214_html_ggab1bb10d3adb85b52cdc6fe5a7f74f108a41b19f141a3c0ffe85f9affaca4b0293"><div class="ttname"><a href="a00214.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a41b19f141a3c0ffe85f9affaca4b0293">HWLOC_DISTANCES_KIND_MEANS_BANDWIDTH</a></div><div class="ttdeci">@ HWLOC_DISTANCES_KIND_MEANS_BANDWIDTH</div><div class="ttdoc">Distance values are similar to bandwidths between objects. Values are higher for closer objects,...</div><div class="ttdef"><b>Definition:</b> distances.h:91</div></div>
180 <div class="ttc" id="aa00214_html_ggab1bb10d3adb85b52cdc6fe5a7f74f108a90dc38248c8d5392d4dd3e88f391e984"><div class="ttname"><a href="a00214.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a90dc38248c8d5392d4dd3e88f391e984">HWLOC_DISTANCES_KIND_FROM_OS</a></div><div class="ttdeci">@ HWLOC_DISTANCES_KIND_FROM_OS</div><div class="ttdoc">These distances were obtained from the operating system or hardware.</div><div class="ttdef"><b>Definition:</b> distances.h:72</div></div>
181 <div class="ttc" id="aa00214_html_ggab1bb10d3adb85b52cdc6fe5a7f74f108aa6cf2b6dfcf148b65952f811814efbe1"><div class="ttname"><a href="a00214.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108aa6cf2b6dfcf148b65952f811814efbe1">HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES</a></div><div class="ttdeci">@ HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES</div><div class="ttdoc">This distances structure covers objects of different types.</div><div class="ttdef"><b>Definition:</b> distances.h:96</div></div>
182 <div class="ttc" id="aa00214_html_ggab1bb10d3adb85b52cdc6fe5a7f74f108afd6a3503fbc8f7c1a31235373cefc4c6"><div class="ttname"><a href="a00214.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108afd6a3503fbc8f7c1a31235373cefc4c6">HWLOC_DISTANCES_KIND_MEANS_LATENCY</a></div><div class="ttdeci">@ HWLOC_DISTANCES_KIND_MEANS_LATENCY</div><div class="ttdoc">Distance values are similar to latencies between objects. Values are smaller for closer objects,...</div><div class="ttdef"><b>Definition:</b> distances.h:84</div></div>
183 <div class="ttc" id="aa00215_html_ga3c665b23056e3269f777b21a67148c82"><div class="ttname"><a href="a00215.html#ga3c665b23056e3269f777b21a67148c82">hwloc_distances_obj_pair_values</a></div><div class="ttdeci">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)</div><div class="ttdoc">Find the values between two objects in a distance matrices.</div><div class="ttdef"><b>Definition:</b> distances.h:201</div></div>
184 <div class="ttc" id="aa00215_html_gab9e770c7d56c5d6040f26bd1dc8854cd"><div class="ttname"><a href="a00215.html#gab9e770c7d56c5d6040f26bd1dc8854cd">hwloc_distances_obj_index</a></div><div class="ttdeci">static int hwloc_distances_obj_index(struct hwloc_distances_s *distances, hwloc_obj_t obj)</div><div class="ttdoc">Find the index of an object in a distances structure.</div><div class="ttdef"><b>Definition:</b> distances.h:184</div></div>
185 <div class="ttc" id="aa00216_html_ga22428b6bab271411e3834e6b4ca22e37"><div class="ttname"><a href="a00216.html#ga22428b6bab271411e3834e6b4ca22e37">hwloc_distances_add_flag_e</a></div><div class="ttdeci">hwloc_distances_add_flag_e</div><div class="ttdoc">Flags for adding a new distances to a topology.</div><div class="ttdef"><b>Definition:</b> distances.h:223</div></div>
186 <div class="ttc" id="aa00216_html_ga80bbf6f0db9af48c61780dd5152664c2"><div class="ttname"><a href="a00216.html#ga80bbf6f0db9af48c61780dd5152664c2">hwloc_distances_release_remove</a></div><div class="ttdeci">int hwloc_distances_release_remove(hwloc_topology_t topology, struct hwloc_distances_s *distances)</div><div class="ttdoc">Release and remove the given distance matrice from the topology.</div></div>
187 <div class="ttc" id="aa00216_html_ga93db53773c96f5b83815e8441e2ebb93"><div class="ttname"><a href="a00216.html#ga93db53773c96f5b83815e8441e2ebb93">hwloc_distances_remove_by_type</a></div><div class="ttdeci">static int hwloc_distances_remove_by_type(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Remove distance matrices for objects of a specific type in the topology.</div><div class="ttdef"><b>Definition:</b> distances.h:275</div></div>
188 <div class="ttc" id="aa00216_html_gaa642a4c1a21c84f38ae23fca8a27845d"><div class="ttname"><a href="a00216.html#gaa642a4c1a21c84f38ae23fca8a27845d">hwloc_distances_remove_by_depth</a></div><div class="ttdeci">int hwloc_distances_remove_by_depth(hwloc_topology_t topology, int depth)</div><div class="ttdoc">Remove distance matrices for objects at a specific depth in the topology.</div></div>
189 <div class="ttc" id="aa00216_html_gac188d9b64d9560255ce5f6d0a20f9c0a"><div class="ttname"><a href="a00216.html#gac188d9b64d9560255ce5f6d0a20f9c0a">hwloc_distances_remove</a></div><div class="ttdeci">int hwloc_distances_remove(hwloc_topology_t topology)</div><div class="ttdoc">Remove all distance matrices from a topology.</div></div>
190 <div class="ttc" id="aa00216_html_gac5a71d96cd86efe31d6f8d282aae3d97"><div class="ttname"><a href="a00216.html#gac5a71d96cd86efe31d6f8d282aae3d97">hwloc_distances_add</a></div><div class="ttdeci">int hwloc_distances_add(hwloc_topology_t topology, unsigned nbobjs, hwloc_obj_t *objs, hwloc_uint64_t *values, unsigned long kind, unsigned long flags)</div><div class="ttdoc">Provide a new distance matrix.</div></div>
191 <div class="ttc" id="aa00216_html_gga22428b6bab271411e3834e6b4ca22e37a5233ccf631c3bc53dd5c3e7a5d5c9b77"><div class="ttname"><a href="a00216.html#gga22428b6bab271411e3834e6b4ca22e37a5233ccf631c3bc53dd5c3e7a5d5c9b77">HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE</a></div><div class="ttdeci">@ HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE</div><div class="ttdoc">If grouping, consider the distance values as inaccurate and relax the comparisons during the grouping...</div><div class="ttdef"><b>Definition:</b> distances.h:233</div></div>
192 <div class="ttc" id="aa00216_html_gga22428b6bab271411e3834e6b4ca22e37a7f6baba797d70538d03c9d13052c62ab"><div class="ttname"><a href="a00216.html#gga22428b6bab271411e3834e6b4ca22e37a7f6baba797d70538d03c9d13052c62ab">HWLOC_DISTANCES_ADD_FLAG_GROUP</a></div><div class="ttdeci">@ HWLOC_DISTANCES_ADD_FLAG_GROUP</div><div class="ttdoc">Try to group objects based on the newly provided distance information.</div><div class="ttdef"><b>Definition:</b> distances.h:227</div></div>
193 <div class="ttc" id="aa00244_html"><div class="ttname"><a href="a00244.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:395</div></div>
194 <div class="ttc" id="aa00316_html"><div class="ttname"><a href="a00316.html">hwloc_distances_s</a></div><div class="ttdoc">Matrix of distances between a set of objects.</div><div class="ttdef"><b>Definition:</b> distances.h:42</div></div>
195 <div class="ttc" id="aa00316_html_a4ca2af858cebbce7324ec49903d09474"><div class="ttname"><a href="a00316.html#a4ca2af858cebbce7324ec49903d09474">hwloc_distances_s::nbobjs</a></div><div class="ttdeci">unsigned nbobjs</div><div class="ttdoc">Number of objects described by the distance matrix.</div><div class="ttdef"><b>Definition:</b> distances.h:43</div></div>
196 <div class="ttc" id="aa00316_html_ae43e19b2c743de05c93d71a30beaca75"><div class="ttname"><a href="a00316.html#ae43e19b2c743de05c93d71a30beaca75">hwloc_distances_s::values</a></div><div class="ttdeci">hwloc_uint64_t * values</div><div class="ttdoc">Matrix of distances between objects, stored as a one-dimension array.</div><div class="ttdef"><b>Definition:</b> distances.h:50</div></div>
197 <div class="ttc" id="aa00316_html_aef9c83cf467da1b1fa4c36493febb3b5"><div class="ttname"><a href="a00316.html#aef9c83cf467da1b1fa4c36493febb3b5">hwloc_distances_s::kind</a></div><div class="ttdeci">unsigned long kind</div><div class="ttdoc">OR'ed set of hwloc_distances_kind_e.</div><div class="ttdef"><b>Definition:</b> distances.h:49</div></div>
198 <div class="ttc" id="aa00316_html_af1e78b2d628d191fa6cae3fbfe891078"><div class="ttname"><a href="a00316.html#af1e78b2d628d191fa6cae3fbfe891078">hwloc_distances_s::objs</a></div><div class="ttdeci">hwloc_obj_t * objs</div><div class="ttdoc">Array of objects described by the distance matrix. These objects are not in any particular order,...</div><div class="ttdef"><b>Definition:</b> distances.h:44</div></div>
102 <div class="line"><a name="l00161"></a><span class="lineno"><a class="line" href="a00221.html#ggab9c963ca37255da71b00d94e1b106f9daac9c5e3a2cfb1b193e4acfceaf3bad57"> 161</a></span>&#160; <a class="code" href="a00221.html#ggab9c963ca37255da71b00d94e1b106f9daac9c5e3a2cfb1b193e4acfceaf3bad57">HWLOC_LOCAL_NUMANODE_FLAG_SMALLER_LOCALITY</a> = (1UL&lt;&lt;1),</div>
103 <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; </div>
104 <div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <a class="code" href="a00221.html#ggab9c963ca37255da71b00d94e1b106f9dab5778b34c961a5d56f98f1549edeaed0">HWLOC_LOCAL_NUMANODE_FLAG_ALL</a> = (1UL&lt;&lt;2)</div>
105 <div class="line"><a name="l00168"></a><span class="lineno"><a class="line" href="a00221.html#ggab9c963ca37255da71b00d94e1b106f9dab5778b34c961a5d56f98f1549edeaed0"> 168</a></span>&#160;};</div>
106 <div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; </div>
107 <div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
108 <div class="line"><a name="l00200"></a><span class="lineno"><a class="line" href="a00221.html#ga569e80c5be7ef27649b0ef5aa52ffcdc"> 200</a></span>&#160;<a class="code" href="a00221.html#ga569e80c5be7ef27649b0ef5aa52ffcdc">hwloc_get_local_numanode_objs</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
109 <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keyword">struct</span> <a class="code" href="a00326.html">hwloc_location</a> *location,</div>
110 <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordtype">unsigned</span> *nr,</div>
111 <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> *nodes,</div>
112 <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
113 <div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; </div>
114 <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; </div>
115 <div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; </div>
116 <div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
117 <div class="line"><a name="l00223"></a><span class="lineno"><a class="line" href="a00221.html#ga297e4a9adc2272446a4c7449dacef0df"> 223</a></span>&#160;<a class="code" href="a00221.html#ga297e4a9adc2272446a4c7449dacef0df">hwloc_memattr_get_value</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
118 <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <a class="code" href="a00221.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute,</div>
119 <div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> target_node,</div>
120 <div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keyword">struct</span> <a class="code" href="a00326.html">hwloc_location</a> *initiator,</div>
121 <div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags,</div>
122 <div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; hwloc_uint64_t *value);</div>
123 <div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; </div>
124 <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
125 <div class="line"><a name="l00256"></a><span class="lineno"><a class="line" href="a00221.html#ga884d1f2ad745c2fa69c1583c82d28f10"> 256</a></span>&#160;<a class="code" href="a00221.html#ga884d1f2ad745c2fa69c1583c82d28f10">hwloc_memattr_get_best_target</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
126 <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <a class="code" href="a00221.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute,</div>
127 <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keyword">struct</span> <a class="code" href="a00326.html">hwloc_location</a> *initiator,</div>
128 <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags,</div>
129 <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> *best_target, hwloc_uint64_t *value);</div>
130 <div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; </div>
131 <div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
132 <div class="line"><a name="l00285"></a><span class="lineno"><a class="line" href="a00221.html#ga9a453879892893cf8a3fcd431ade84cd"> 285</a></span>&#160;<a class="code" href="a00221.html#ga9a453879892893cf8a3fcd431ade84cd">hwloc_memattr_get_best_initiator</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
133 <div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <a class="code" href="a00221.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute,</div>
134 <div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> target,</div>
135 <div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags,</div>
136 <div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keyword">struct</span> <a class="code" href="a00326.html">hwloc_location</a> *best_initiator, hwloc_uint64_t *value);</div>
137 <div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; </div>
138 <div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
139 <div class="line"><a name="l00301"></a><span class="lineno"><a class="line" href="a00222.html#ga5300e9be1abdea2e00c18492148aecd0"> 301</a></span>&#160;<a class="code" href="a00222.html#ga5300e9be1abdea2e00c18492148aecd0">hwloc_memattr_get_name</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
140 <div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <a class="code" href="a00221.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute,</div>
141 <div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> **name);</div>
142 <div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; </div>
143 <div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
144 <div class="line"><a name="l00310"></a><span class="lineno"><a class="line" href="a00222.html#ga4c62b626085adeaffb233e5f2a03a5eb"> 310</a></span>&#160;<a class="code" href="a00222.html#ga4c62b626085adeaffb233e5f2a03a5eb">hwloc_memattr_get_flags</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
145 <div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <a class="code" href="a00221.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute,</div>
146 <div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *flags);</div>
147 <div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; </div>
148 <div class="line"><a name="l00317"></a><span class="lineno"><a class="line" href="a00222.html#ga78aceb4cac4d614c0f5e82dbfeb779e5"> 317</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00222.html#ga78aceb4cac4d614c0f5e82dbfeb779e5">hwloc_memattr_flag_e</a> {</div>
149 <div class="line"><a name="l00321"></a><span class="lineno"><a class="line" href="a00222.html#gga78aceb4cac4d614c0f5e82dbfeb779e5af29e65444a6ed00f5cc246df06f65815"> 321</a></span>&#160; <a class="code" href="a00222.html#gga78aceb4cac4d614c0f5e82dbfeb779e5af29e65444a6ed00f5cc246df06f65815">HWLOC_MEMATTR_FLAG_HIGHER_FIRST</a> = (1UL&lt;&lt;0),</div>
150 <div class="line"><a name="l00325"></a><span class="lineno"><a class="line" href="a00222.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9601b5b0e1e68635e7e9901f28bd93bf"> 325</a></span>&#160; <a class="code" href="a00222.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9601b5b0e1e68635e7e9901f28bd93bf">HWLOC_MEMATTR_FLAG_LOWER_FIRST</a> = (1UL&lt;&lt;1),</div>
151 <div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <a class="code" href="a00222.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a> = (1UL&lt;&lt;2)</div>
152 <div class="line"><a name="l00330"></a><span class="lineno"><a class="line" href="a00222.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96"> 330</a></span>&#160;};</div>
153 <div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; </div>
154 <div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
155 <div class="line"><a name="l00339"></a><span class="lineno"><a class="line" href="a00222.html#ga770657d1e44b09e93e09f623936c1e5f"> 339</a></span>&#160;<a class="code" href="a00222.html#ga770657d1e44b09e93e09f623936c1e5f">hwloc_memattr_register</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
156 <div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> *name,</div>
157 <div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags,</div>
158 <div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <a class="code" href="a00221.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> *<span class="keywordtype">id</span>);</div>
159 <div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; </div>
160 <div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
161 <div class="line"><a name="l00363"></a><span class="lineno"><a class="line" href="a00222.html#ga960529c08b25cf15825e0f72ecceb504"> 363</a></span>&#160;<a class="code" href="a00222.html#ga960529c08b25cf15825e0f72ecceb504">hwloc_memattr_set_value</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
162 <div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <a class="code" href="a00221.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute,</div>
163 <div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> target_node,</div>
164 <div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keyword">struct</span> <a class="code" href="a00326.html">hwloc_location</a> *initiator,</div>
165 <div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags,</div>
166 <div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; hwloc_uint64_t value);</div>
167 <div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; </div>
168 <div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
169 <div class="line"><a name="l00407"></a><span class="lineno"><a class="line" href="a00222.html#ga3177cc0ab47e4dd1fa69ca1df4c7cb1a"> 407</a></span>&#160;<a class="code" href="a00222.html#ga3177cc0ab47e4dd1fa69ca1df4c7cb1a">hwloc_memattr_get_targets</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
170 <div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <a class="code" href="a00221.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute,</div>
171 <div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="keyword">struct</span> <a class="code" href="a00326.html">hwloc_location</a> *initiator,</div>
172 <div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags,</div>
173 <div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keywordtype">unsigned</span> *nrp, <a class="code" href="a00250.html">hwloc_obj_t</a> *targets, hwloc_uint64_t *values);</div>
174 <div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; </div>
175 <div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
176 <div class="line"><a name="l00443"></a><span class="lineno"><a class="line" href="a00326.html#aeb9c0ab74a7d3506a76d0b82600a28a7"> 443</a></span>&#160;<a class="code" href="a00222.html#ga049aaa860dcbbf0792f0fd4251a99ec0">hwloc_memattr_get_initiators</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
177 <div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <a class="code" href="a00221.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute,</div>
178 <div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> target_node,</div>
179 <div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags,</div>
180 <div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keywordtype">unsigned</span> *nr, <span class="keyword">struct</span> <a class="code" href="a00326.html">hwloc_location</a> *initiators, hwloc_uint64_t *values);</div>
181 <div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
182 <div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
183 <div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160;<span class="preprocessor">#endif</span></div>
184 <div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; </div>
185 <div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; </div>
186 <div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_MEMATTR_H */</span><span class="preprocessor"></span></div>
187 <div class="ttc" id="aa00192_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
188 <div class="ttc" id="aa00195_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
189 <div class="ttc" id="aa00221_html_ga297e4a9adc2272446a4c7449dacef0df"><div class="ttname"><a href="a00221.html#ga297e4a9adc2272446a4c7449dacef0df">hwloc_memattr_get_value</a></div><div class="ttdeci">int hwloc_memattr_get_value(hwloc_topology_t topology, hwloc_memattr_id_t attribute, hwloc_obj_t target_node, struct hwloc_location *initiator, unsigned long flags, hwloc_uint64_t *value)</div><div class="ttdoc">Return an attribute value for a specific target NUMA node.</div></div>
190 <div class="ttc" id="aa00221_html_ga33099ba58f607fc70925da3777688586"><div class="ttname"><a href="a00221.html#ga33099ba58f607fc70925da3777688586">hwloc_location_type_e</a></div><div class="ttdeci">hwloc_location_type_e</div><div class="ttdoc">Type of location.</div><div class="ttdef"><b>Definition:</b> memattrs.h:126</div></div>
191 <div class="ttc" id="aa00221_html_ga569e80c5be7ef27649b0ef5aa52ffcdc"><div class="ttname"><a href="a00221.html#ga569e80c5be7ef27649b0ef5aa52ffcdc">hwloc_get_local_numanode_objs</a></div><div class="ttdeci">int hwloc_get_local_numanode_objs(hwloc_topology_t topology, struct hwloc_location *location, unsigned *nr, hwloc_obj_t *nodes, unsigned long flags)</div><div class="ttdoc">Return an array of local NUMA nodes.</div></div>
192 <div class="ttc" id="aa00221_html_ga79f44f8e1cfd2f97a19171417a75a137"><div class="ttname"><a href="a00221.html#ga79f44f8e1cfd2f97a19171417a75a137">hwloc_memattr_get_by_name</a></div><div class="ttdeci">int hwloc_memattr_get_by_name(hwloc_topology_t topology, const char *name, hwloc_memattr_id_t *id)</div><div class="ttdoc">Return the identifier of the memory attribute with the given name.</div></div>
193 <div class="ttc" id="aa00221_html_ga884d1f2ad745c2fa69c1583c82d28f10"><div class="ttname"><a href="a00221.html#ga884d1f2ad745c2fa69c1583c82d28f10">hwloc_memattr_get_best_target</a></div><div class="ttdeci">int hwloc_memattr_get_best_target(hwloc_topology_t topology, hwloc_memattr_id_t attribute, struct hwloc_location *initiator, unsigned long flags, hwloc_obj_t *best_target, hwloc_uint64_t *value)</div><div class="ttdoc">Return the best target NUMA node for the given attribute and initiator.</div></div>
194 <div class="ttc" id="aa00221_html_ga9a453879892893cf8a3fcd431ade84cd"><div class="ttname"><a href="a00221.html#ga9a453879892893cf8a3fcd431ade84cd">hwloc_memattr_get_best_initiator</a></div><div class="ttdeci">int hwloc_memattr_get_best_initiator(hwloc_topology_t topology, hwloc_memattr_id_t attribute, hwloc_obj_t target, unsigned long flags, struct hwloc_location *best_initiator, hwloc_uint64_t *value)</div><div class="ttdoc">Return the best initiator for the given attribute and target NUMA node.</div></div>
195 <div class="ttc" id="aa00221_html_gab4bde745db676fc2ea4b47011cd9a80e"><div class="ttname"><a href="a00221.html#gab4bde745db676fc2ea4b47011cd9a80e">hwloc_memattr_id_e</a></div><div class="ttdeci">hwloc_memattr_id_e</div><div class="ttdoc">Memory node attributes.</div><div class="ttdef"><b>Definition:</b> memattrs.h:67</div></div>
196 <div class="ttc" id="aa00221_html_gab9c963ca37255da71b00d94e1b106f9d"><div class="ttname"><a href="a00221.html#gab9c963ca37255da71b00d94e1b106f9d">hwloc_local_numanode_flag_e</a></div><div class="ttdeci">hwloc_local_numanode_flag_e</div><div class="ttdoc">Flags for selecting target NUMA nodes.</div><div class="ttdef"><b>Definition:</b> memattrs.h:148</div></div>
197 <div class="ttc" id="aa00221_html_gacc82003a8610be554615995f0996c888"><div class="ttname"><a href="a00221.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a></div><div class="ttdeci">unsigned hwloc_memattr_id_t</div><div class="ttdoc">A memory attribute identifier. May be either one of hwloc_memattr_id_e or a new id returned by hwloc_...</div><div class="ttdef"><b>Definition:</b> memattrs.h:115</div></div>
198 <div class="ttc" id="aa00221_html_gga33099ba58f607fc70925da3777688586a7135318a86361ad75fd1648e6bf6d174"><div class="ttname"><a href="a00221.html#gga33099ba58f607fc70925da3777688586a7135318a86361ad75fd1648e6bf6d174">HWLOC_LOCATION_TYPE_CPUSET</a></div><div class="ttdeci">@ HWLOC_LOCATION_TYPE_CPUSET</div><div class="ttdoc">Location is given as a cpuset, in the location cpuset union field.</div><div class="ttdef"><b>Definition:</b> memattrs.h:128</div></div>
199 <div class="ttc" id="aa00221_html_gga33099ba58f607fc70925da3777688586af637c39b23d48cff15ddb008644aaa84"><div class="ttname"><a href="a00221.html#gga33099ba58f607fc70925da3777688586af637c39b23d48cff15ddb008644aaa84">HWLOC_LOCATION_TYPE_OBJECT</a></div><div class="ttdeci">@ HWLOC_LOCATION_TYPE_OBJECT</div><div class="ttdoc">Location is given as an object, in the location object union field.</div><div class="ttdef"><b>Definition:</b> memattrs.h:130</div></div>
200 <div class="ttc" id="aa00221_html_ggab4bde745db676fc2ea4b47011cd9a80ea25fe3c7376ae6f9b584bacdb039f8c0f"><div class="ttname"><a href="a00221.html#ggab4bde745db676fc2ea4b47011cd9a80ea25fe3c7376ae6f9b584bacdb039f8c0f">HWLOC_MEMATTR_ID_BANDWIDTH</a></div><div class="ttdeci">@ HWLOC_MEMATTR_ID_BANDWIDTH</div><div class="ttdoc">&quot;Bandwidth&quot;. The bandwidth is returned in MiB/s, as seen from the given initiator location....</div><div class="ttdef"><b>Definition:</b> memattrs.h:99</div></div>
201 <div class="ttc" id="aa00221_html_ggab4bde745db676fc2ea4b47011cd9a80ea9334e3a4c30a67f491c6523255134efe"><div class="ttname"><a href="a00221.html#ggab4bde745db676fc2ea4b47011cd9a80ea9334e3a4c30a67f491c6523255134efe">HWLOC_MEMATTR_ID_LOCALITY</a></div><div class="ttdeci">@ HWLOC_MEMATTR_ID_LOCALITY</div><div class="ttdoc">&quot;Locality&quot;. The locality is returned as the number of PUs in that locality (e.g. the weight of its cp...</div><div class="ttdef"><b>Definition:</b> memattrs.h:91</div></div>
202 <div class="ttc" id="aa00221_html_ggab4bde745db676fc2ea4b47011cd9a80eaa1cfa3ff3d56ff00ecabf7da4f5642cc"><div class="ttname"><a href="a00221.html#ggab4bde745db676fc2ea4b47011cd9a80eaa1cfa3ff3d56ff00ecabf7da4f5642cc">HWLOC_MEMATTR_ID_CAPACITY</a></div><div class="ttdeci">@ HWLOC_MEMATTR_ID_CAPACITY</div><div class="ttdoc">&quot;Capacity&quot;. The capacity is returned in bytes (local_memory attribute in objects).</div><div class="ttdef"><b>Definition:</b> memattrs.h:77</div></div>
203 <div class="ttc" id="aa00221_html_ggab4bde745db676fc2ea4b47011cd9a80ead1796413759b8b87b61ad195a9349b19"><div class="ttname"><a href="a00221.html#ggab4bde745db676fc2ea4b47011cd9a80ead1796413759b8b87b61ad195a9349b19">HWLOC_MEMATTR_ID_LATENCY</a></div><div class="ttdeci">@ HWLOC_MEMATTR_ID_LATENCY</div><div class="ttdoc">&quot;Latency&quot;. The latency is returned as nanoseconds, as seen from the given initiator location....</div><div class="ttdef"><b>Definition:</b> memattrs.h:107</div></div>
204 <div class="ttc" id="aa00221_html_ggab9c963ca37255da71b00d94e1b106f9da200c6c133bb2125ba36d77ce9ca268cc"><div class="ttname"><a href="a00221.html#ggab9c963ca37255da71b00d94e1b106f9da200c6c133bb2125ba36d77ce9ca268cc">HWLOC_LOCAL_NUMANODE_FLAG_LARGER_LOCALITY</a></div><div class="ttdeci">@ HWLOC_LOCAL_NUMANODE_FLAG_LARGER_LOCALITY</div><div class="ttdoc">Select NUMA nodes whose locality is larger than the given cpuset. For instance, if a single PU (or it...</div><div class="ttdef"><b>Definition:</b> memattrs.h:154</div></div>
205 <div class="ttc" id="aa00221_html_ggab9c963ca37255da71b00d94e1b106f9daac9c5e3a2cfb1b193e4acfceaf3bad57"><div class="ttname"><a href="a00221.html#ggab9c963ca37255da71b00d94e1b106f9daac9c5e3a2cfb1b193e4acfceaf3bad57">HWLOC_LOCAL_NUMANODE_FLAG_SMALLER_LOCALITY</a></div><div class="ttdeci">@ HWLOC_LOCAL_NUMANODE_FLAG_SMALLER_LOCALITY</div><div class="ttdoc">Select NUMA nodes whose locality is smaller than the given cpuset. For instance, if a package (or its...</div><div class="ttdef"><b>Definition:</b> memattrs.h:161</div></div>
206 <div class="ttc" id="aa00221_html_ggab9c963ca37255da71b00d94e1b106f9dab5778b34c961a5d56f98f1549edeaed0"><div class="ttname"><a href="a00221.html#ggab9c963ca37255da71b00d94e1b106f9dab5778b34c961a5d56f98f1549edeaed0">HWLOC_LOCAL_NUMANODE_FLAG_ALL</a></div><div class="ttdeci">@ HWLOC_LOCAL_NUMANODE_FLAG_ALL</div><div class="ttdoc">Select all NUMA nodes in the topology. The initiator initiator is ignored.</div><div class="ttdef"><b>Definition:</b> memattrs.h:167</div></div>
207 <div class="ttc" id="aa00222_html_ga049aaa860dcbbf0792f0fd4251a99ec0"><div class="ttname"><a href="a00222.html#ga049aaa860dcbbf0792f0fd4251a99ec0">hwloc_memattr_get_initiators</a></div><div class="ttdeci">int hwloc_memattr_get_initiators(hwloc_topology_t topology, hwloc_memattr_id_t attribute, hwloc_obj_t target_node, unsigned long flags, unsigned *nr, struct hwloc_location *initiators, hwloc_uint64_t *values)</div><div class="ttdoc">Return the initiators that have values for a given attribute for a specific target NUMA node.</div></div>
208 <div class="ttc" id="aa00222_html_ga3177cc0ab47e4dd1fa69ca1df4c7cb1a"><div class="ttname"><a href="a00222.html#ga3177cc0ab47e4dd1fa69ca1df4c7cb1a">hwloc_memattr_get_targets</a></div><div class="ttdeci">int hwloc_memattr_get_targets(hwloc_topology_t topology, hwloc_memattr_id_t attribute, struct hwloc_location *initiator, unsigned long flags, unsigned *nrp, hwloc_obj_t *targets, hwloc_uint64_t *values)</div><div class="ttdoc">Return the target NUMA nodes that have some values for a given attribute.</div></div>
209 <div class="ttc" id="aa00222_html_ga4c62b626085adeaffb233e5f2a03a5eb"><div class="ttname"><a href="a00222.html#ga4c62b626085adeaffb233e5f2a03a5eb">hwloc_memattr_get_flags</a></div><div class="ttdeci">int hwloc_memattr_get_flags(hwloc_topology_t topology, hwloc_memattr_id_t attribute, unsigned long *flags)</div><div class="ttdoc">Return the flags of the given attribute.</div></div>
210 <div class="ttc" id="aa00222_html_ga5300e9be1abdea2e00c18492148aecd0"><div class="ttname"><a href="a00222.html#ga5300e9be1abdea2e00c18492148aecd0">hwloc_memattr_get_name</a></div><div class="ttdeci">int hwloc_memattr_get_name(hwloc_topology_t topology, hwloc_memattr_id_t attribute, const char **name)</div><div class="ttdoc">Return the name of a memory attribute.</div></div>
211 <div class="ttc" id="aa00222_html_ga770657d1e44b09e93e09f623936c1e5f"><div class="ttname"><a href="a00222.html#ga770657d1e44b09e93e09f623936c1e5f">hwloc_memattr_register</a></div><div class="ttdeci">int hwloc_memattr_register(hwloc_topology_t topology, const char *name, unsigned long flags, hwloc_memattr_id_t *id)</div><div class="ttdoc">Register a new memory attribute.</div></div>
212 <div class="ttc" id="aa00222_html_ga78aceb4cac4d614c0f5e82dbfeb779e5"><div class="ttname"><a href="a00222.html#ga78aceb4cac4d614c0f5e82dbfeb779e5">hwloc_memattr_flag_e</a></div><div class="ttdeci">hwloc_memattr_flag_e</div><div class="ttdoc">Memory attribute flags. Given to hwloc_memattr_register() and returned by hwloc_memattr_get_flags().</div><div class="ttdef"><b>Definition:</b> memattrs.h:317</div></div>
213 <div class="ttc" id="aa00222_html_ga960529c08b25cf15825e0f72ecceb504"><div class="ttname"><a href="a00222.html#ga960529c08b25cf15825e0f72ecceb504">hwloc_memattr_set_value</a></div><div class="ttdeci">int hwloc_memattr_set_value(hwloc_topology_t topology, hwloc_memattr_id_t attribute, hwloc_obj_t target_node, struct hwloc_location *initiator, unsigned long flags, hwloc_uint64_t value)</div><div class="ttdoc">Set an attribute value for a specific target NUMA node.</div></div>
214 <div class="ttc" id="aa00222_html_gga78aceb4cac4d614c0f5e82dbfeb779e5a9601b5b0e1e68635e7e9901f28bd93bf"><div class="ttname"><a href="a00222.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9601b5b0e1e68635e7e9901f28bd93bf">HWLOC_MEMATTR_FLAG_LOWER_FIRST</a></div><div class="ttdeci">@ HWLOC_MEMATTR_FLAG_LOWER_FIRST</div><div class="ttdoc">The best nodes for this memory attribute are those with the lower values. For instance Latency.</div><div class="ttdef"><b>Definition:</b> memattrs.h:325</div></div>
215 <div class="ttc" id="aa00222_html_gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96"><div class="ttname"><a href="a00222.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a></div><div class="ttdeci">@ HWLOC_MEMATTR_FLAG_NEED_INITIATOR</div><div class="ttdoc">The value returned for this memory attribute depends on the given initiator. For instance Bandwidth a...</div><div class="ttdef"><b>Definition:</b> memattrs.h:329</div></div>
216 <div class="ttc" id="aa00222_html_gga78aceb4cac4d614c0f5e82dbfeb779e5af29e65444a6ed00f5cc246df06f65815"><div class="ttname"><a href="a00222.html#gga78aceb4cac4d614c0f5e82dbfeb779e5af29e65444a6ed00f5cc246df06f65815">HWLOC_MEMATTR_FLAG_HIGHER_FIRST</a></div><div class="ttdeci">@ HWLOC_MEMATTR_FLAG_HIGHER_FIRST</div><div class="ttdoc">The best nodes for this memory attribute are those with the higher values. For instance Bandwidth.</div><div class="ttdef"><b>Definition:</b> memattrs.h:321</div></div>
217 <div class="ttc" id="aa00250_html"><div class="ttname"><a href="a00250.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:395</div></div>
218 <div class="ttc" id="aa00326_html"><div class="ttname"><a href="a00326.html">hwloc_location</a></div><div class="ttdoc">Where to measure attributes from.</div><div class="ttdef"><b>Definition:</b> memattrs.h:134</div></div>
219 <div class="ttc" id="aa00326_html_a707a25a5b65177e4d081be49aa0777a2"><div class="ttname"><a href="a00326.html#a707a25a5b65177e4d081be49aa0777a2">hwloc_location::location</a></div><div class="ttdeci">union hwloc_location::hwloc_location_u location</div></div>
220 <div class="ttc" id="aa00326_html_aeb9c0ab74a7d3506a76d0b82600a28a7"><div class="ttname"><a href="a00326.html#aeb9c0ab74a7d3506a76d0b82600a28a7">hwloc_location::type</a></div><div class="ttdeci">enum hwloc_location_type_e type</div><div class="ttdoc">Type of location.</div><div class="ttdef"><b>Definition:</b> memattrs.h:136</div></div>
221 <div class="ttc" id="aa00330_html"><div class="ttname"><a href="a00330.html">hwloc_location::hwloc_location_u</a></div><div class="ttdoc">Actual location.</div><div class="ttdef"><b>Definition:</b> memattrs.h:138</div></div>
222 <div class="ttc" id="aa00330_html_a033bad8f6b891992f0c18b85a88c5561"><div class="ttname"><a href="a00330.html#a033bad8f6b891992f0c18b85a88c5561">hwloc_location::hwloc_location_u::cpuset</a></div><div class="ttdeci">hwloc_cpuset_t cpuset</div><div class="ttdoc">Location as a cpuset, when the location type is HWLOC_LOCATION_TYPE_CPUSET.</div><div class="ttdef"><b>Definition:</b> memattrs.h:140</div></div>
223 <div class="ttc" id="aa00330_html_acf2ebf75869f0a53a884ac2ab3374122"><div class="ttname"><a href="a00330.html#acf2ebf75869f0a53a884ac2ab3374122">hwloc_location::hwloc_location_u::object</a></div><div class="ttdeci">hwloc_obj_t object</div><div class="ttdoc">Location as an object, when the location type is HWLOC_LOCATION_TYPE_OBJECT.</div><div class="ttdef"><b>Definition:</b> memattrs.h:142</div></div>
199224 </div><!-- fragment --></div><!-- contents -->
200225 <!-- start footer part -->
201226 <hr class="footer"/><address class="footer"><small>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): memattrs.h Source File</title>
7 <title>Hardware Locality (hwloc): cpukinds.h Source File</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4343 </div><!-- top -->
4444 <div class="header">
4545 <div class="headertitle">
46 <div class="title">memattrs.h</div> </div>
46 <div class="title">cpukinds.h</div> </div>
4747 </div><!--header-->
4848 <div class="contents">
4949 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
50 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2019-2020 Inria. All rights reserved.</span></div>
50 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2020 Inria. All rights reserved.</span></div>
5151 <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
5252 <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> */</span></div>
5353 <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; </div>
54 <div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#ifndef HWLOC_MEMATTR_H</span></div>
55 <div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#define HWLOC_MEMATTR_H</span></div>
54 <div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#ifndef HWLOC_CPUKINDS_H</span></div>
55 <div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#define HWLOC_CPUKINDS_H</span></div>
5656 <div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160; </div>
5757 <div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &quot;hwloc.h&quot;</span></div>
5858 <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; </div>
6262 <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;}</div>
6363 <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#endif</span></div>
6464 <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; </div>
65 <div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="a00217.html#gab4bde745db676fc2ea4b47011cd9a80e"> 67</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00217.html#gab4bde745db676fc2ea4b47011cd9a80e">hwloc_memattr_id_e</a> {</div>
66 <div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="a00217.html#ggab4bde745db676fc2ea4b47011cd9a80eaa1cfa3ff3d56ff00ecabf7da4f5642cc"> 77</a></span>&#160; <a class="code" href="a00217.html#ggab4bde745db676fc2ea4b47011cd9a80eaa1cfa3ff3d56ff00ecabf7da4f5642cc">HWLOC_MEMATTR_ID_CAPACITY</a> = 0,</div>
67 <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; </div>
68 <div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="a00217.html#ggab4bde745db676fc2ea4b47011cd9a80ea9334e3a4c30a67f491c6523255134efe"> 91</a></span>&#160; <a class="code" href="a00217.html#ggab4bde745db676fc2ea4b47011cd9a80ea9334e3a4c30a67f491c6523255134efe">HWLOC_MEMATTR_ID_LOCALITY</a> = 1,</div>
69 <div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; </div>
70 <div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="a00217.html#ggab4bde745db676fc2ea4b47011cd9a80ea25fe3c7376ae6f9b584bacdb039f8c0f"> 99</a></span>&#160; <a class="code" href="a00217.html#ggab4bde745db676fc2ea4b47011cd9a80ea25fe3c7376ae6f9b584bacdb039f8c0f">HWLOC_MEMATTR_ID_BANDWIDTH</a> = 2,</div>
71 <div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; </div>
72 <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <a class="code" href="a00217.html#ggab4bde745db676fc2ea4b47011cd9a80ead1796413759b8b87b61ad195a9349b19">HWLOC_MEMATTR_ID_LATENCY</a> = 3</div>
73 <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; </div>
74 <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="comment">/* TODO read vs write, persistence? */</span></div>
75 <div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="a00217.html#ggab4bde745db676fc2ea4b47011cd9a80ead1796413759b8b87b61ad195a9349b19"> 110</a></span>&#160;};</div>
76 <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; </div>
77 <div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="a00217.html#gacc82003a8610be554615995f0996c888"> 115</a></span>&#160;<span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <a class="code" href="a00217.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a>;</div>
78 <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; </div>
79 <div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
80 <div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="a00217.html#ga79f44f8e1cfd2f97a19171417a75a137"> 120</a></span>&#160;<a class="code" href="a00217.html#ga79f44f8e1cfd2f97a19171417a75a137">hwloc_memattr_get_by_name</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
81 <div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> *name,</div>
82 <div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <a class="code" href="a00217.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> *<span class="keywordtype">id</span>);</div>
83 <div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; </div>
84 <div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; </div>
85 <div class="line"><a name="l00126"></a><span class="lineno"><a class="line" href="a00217.html#ga33099ba58f607fc70925da3777688586"> 126</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00217.html#ga33099ba58f607fc70925da3777688586">hwloc_location_type_e</a> {</div>
86 <div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="a00217.html#gga33099ba58f607fc70925da3777688586a7135318a86361ad75fd1648e6bf6d174"> 128</a></span>&#160; <a class="code" href="a00217.html#gga33099ba58f607fc70925da3777688586a7135318a86361ad75fd1648e6bf6d174">HWLOC_LOCATION_TYPE_CPUSET</a> = 1,</div>
87 <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <a class="code" href="a00217.html#gga33099ba58f607fc70925da3777688586af637c39b23d48cff15ddb008644aaa84">HWLOC_LOCATION_TYPE_OBJECT</a> = 0</div>
88 <div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="a00217.html#gga33099ba58f607fc70925da3777688586af637c39b23d48cff15ddb008644aaa84"> 131</a></span>&#160;};</div>
89 <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; </div>
90 <div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="a00320.html"> 134</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00320.html">hwloc_location</a> {</div>
91 <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keyword">enum</span> <a class="code" href="a00217.html#ga33099ba58f607fc70925da3777688586">hwloc_location_type_e</a> <a class="code" href="a00320.html#aeb9c0ab74a7d3506a76d0b82600a28a7">type</a>;</div>
92 <div class="line"><a name="l00138"></a><span class="lineno"><a class="line" href="a00324.html"> 138</a></span>&#160; <span class="keyword">union </span><a class="code" href="a00324.html">hwloc_location_u</a> {</div>
93 <div class="line"><a name="l00140"></a><span class="lineno"><a class="line" href="a00324.html#a033bad8f6b891992f0c18b85a88c5561"> 140</a></span>&#160; <a class="code" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> <a class="code" href="a00324.html#a033bad8f6b891992f0c18b85a88c5561">cpuset</a>;</div>
94 <div class="line"><a name="l00142"></a><span class="lineno"><a class="line" href="a00324.html#acf2ebf75869f0a53a884ac2ab3374122"> 142</a></span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> <a class="code" href="a00324.html#acf2ebf75869f0a53a884ac2ab3374122">object</a>;</div>
95 <div class="line"><a name="l00143"></a><span class="lineno"><a class="line" href="a00320.html#a707a25a5b65177e4d081be49aa0777a2"> 143</a></span>&#160; } <a class="code" href="a00320.html#a707a25a5b65177e4d081be49aa0777a2">location</a>;</div>
96 <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;};</div>
97 <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; </div>
98 <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; </div>
99 <div class="line"><a name="l00148"></a><span class="lineno"><a class="line" href="a00217.html#gab9c963ca37255da71b00d94e1b106f9d"> 148</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00217.html#gab9c963ca37255da71b00d94e1b106f9d">hwloc_local_numanode_flag_e</a> {</div>
100 <div class="line"><a name="l00154"></a><span class="lineno"><a class="line" href="a00217.html#ggab9c963ca37255da71b00d94e1b106f9da200c6c133bb2125ba36d77ce9ca268cc"> 154</a></span>&#160; <a class="code" href="a00217.html#ggab9c963ca37255da71b00d94e1b106f9da200c6c133bb2125ba36d77ce9ca268cc">HWLOC_LOCAL_NUMANODE_FLAG_LARGER_LOCALITY</a> = (1UL&lt;&lt;0),</div>
101 <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; </div>
102 <div class="line"><a name="l00161"></a><span class="lineno"><a class="line" href="a00217.html#ggab9c963ca37255da71b00d94e1b106f9daac9c5e3a2cfb1b193e4acfceaf3bad57"> 161</a></span>&#160; <a class="code" href="a00217.html#ggab9c963ca37255da71b00d94e1b106f9daac9c5e3a2cfb1b193e4acfceaf3bad57">HWLOC_LOCAL_NUMANODE_FLAG_SMALLER_LOCALITY</a> = (1UL&lt;&lt;1),</div>
103 <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; </div>
104 <div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <a class="code" href="a00217.html#ggab9c963ca37255da71b00d94e1b106f9dab5778b34c961a5d56f98f1549edeaed0">HWLOC_LOCAL_NUMANODE_FLAG_ALL</a> = (1UL&lt;&lt;2)</div>
105 <div class="line"><a name="l00168"></a><span class="lineno"><a class="line" href="a00217.html#ggab9c963ca37255da71b00d94e1b106f9dab5778b34c961a5d56f98f1549edeaed0"> 168</a></span>&#160;};</div>
106 <div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; </div>
107 <div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
108 <div class="line"><a name="l00200"></a><span class="lineno"><a class="line" href="a00217.html#ga569e80c5be7ef27649b0ef5aa52ffcdc"> 200</a></span>&#160;<a class="code" href="a00217.html#ga569e80c5be7ef27649b0ef5aa52ffcdc">hwloc_get_local_numanode_objs</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
109 <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keyword">struct</span> <a class="code" href="a00320.html">hwloc_location</a> *location,</div>
110 <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordtype">unsigned</span> *nr,</div>
111 <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> *nodes,</div>
112 <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
113 <div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; </div>
114 <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; </div>
115 <div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; </div>
116 <div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
117 <div class="line"><a name="l00223"></a><span class="lineno"><a class="line" href="a00217.html#ga297e4a9adc2272446a4c7449dacef0df"> 223</a></span>&#160;<a class="code" href="a00217.html#ga297e4a9adc2272446a4c7449dacef0df">hwloc_memattr_get_value</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
118 <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <a class="code" href="a00217.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute,</div>
119 <div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> target_node,</div>
120 <div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keyword">struct</span> <a class="code" href="a00320.html">hwloc_location</a> *initiator,</div>
121 <div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags,</div>
122 <div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; hwloc_uint64_t *value);</div>
123 <div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; </div>
124 <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
125 <div class="line"><a name="l00256"></a><span class="lineno"><a class="line" href="a00217.html#ga884d1f2ad745c2fa69c1583c82d28f10"> 256</a></span>&#160;<a class="code" href="a00217.html#ga884d1f2ad745c2fa69c1583c82d28f10">hwloc_memattr_get_best_target</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
126 <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <a class="code" href="a00217.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute,</div>
127 <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="keyword">struct</span> <a class="code" href="a00320.html">hwloc_location</a> *initiator,</div>
128 <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags,</div>
129 <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> *best_target, hwloc_uint64_t *value);</div>
130 <div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; </div>
131 <div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
132 <div class="line"><a name="l00285"></a><span class="lineno"><a class="line" href="a00217.html#ga9a453879892893cf8a3fcd431ade84cd"> 285</a></span>&#160;<a class="code" href="a00217.html#ga9a453879892893cf8a3fcd431ade84cd">hwloc_memattr_get_best_initiator</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
133 <div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <a class="code" href="a00217.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute,</div>
134 <div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> target,</div>
135 <div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags,</div>
136 <div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keyword">struct</span> <a class="code" href="a00320.html">hwloc_location</a> *best_initiator, hwloc_uint64_t *value);</div>
137 <div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; </div>
138 <div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
139 <div class="line"><a name="l00301"></a><span class="lineno"><a class="line" href="a00218.html#ga5300e9be1abdea2e00c18492148aecd0"> 301</a></span>&#160;<a class="code" href="a00218.html#ga5300e9be1abdea2e00c18492148aecd0">hwloc_memattr_get_name</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
140 <div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <a class="code" href="a00217.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute,</div>
141 <div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> **name);</div>
142 <div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; </div>
143 <div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
144 <div class="line"><a name="l00310"></a><span class="lineno"><a class="line" href="a00218.html#ga4c62b626085adeaffb233e5f2a03a5eb"> 310</a></span>&#160;<a class="code" href="a00218.html#ga4c62b626085adeaffb233e5f2a03a5eb">hwloc_memattr_get_flags</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
145 <div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <a class="code" href="a00217.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute,</div>
146 <div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *flags);</div>
147 <div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; </div>
148 <div class="line"><a name="l00317"></a><span class="lineno"><a class="line" href="a00218.html#ga78aceb4cac4d614c0f5e82dbfeb779e5"> 317</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00218.html#ga78aceb4cac4d614c0f5e82dbfeb779e5">hwloc_memattr_flag_e</a> {</div>
149 <div class="line"><a name="l00321"></a><span class="lineno"><a class="line" href="a00218.html#gga78aceb4cac4d614c0f5e82dbfeb779e5af29e65444a6ed00f5cc246df06f65815"> 321</a></span>&#160; <a class="code" href="a00218.html#gga78aceb4cac4d614c0f5e82dbfeb779e5af29e65444a6ed00f5cc246df06f65815">HWLOC_MEMATTR_FLAG_HIGHER_FIRST</a> = (1UL&lt;&lt;0),</div>
150 <div class="line"><a name="l00325"></a><span class="lineno"><a class="line" href="a00218.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9601b5b0e1e68635e7e9901f28bd93bf"> 325</a></span>&#160; <a class="code" href="a00218.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9601b5b0e1e68635e7e9901f28bd93bf">HWLOC_MEMATTR_FLAG_LOWER_FIRST</a> = (1UL&lt;&lt;1),</div>
151 <div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <a class="code" href="a00218.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a> = (1UL&lt;&lt;2)</div>
152 <div class="line"><a name="l00330"></a><span class="lineno"><a class="line" href="a00218.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96"> 330</a></span>&#160;};</div>
153 <div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; </div>
154 <div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
155 <div class="line"><a name="l00339"></a><span class="lineno"><a class="line" href="a00218.html#ga770657d1e44b09e93e09f623936c1e5f"> 339</a></span>&#160;<a class="code" href="a00218.html#ga770657d1e44b09e93e09f623936c1e5f">hwloc_memattr_register</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
156 <div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> *name,</div>
157 <div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags,</div>
158 <div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <a class="code" href="a00217.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> *<span class="keywordtype">id</span>);</div>
159 <div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; </div>
160 <div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
161 <div class="line"><a name="l00363"></a><span class="lineno"><a class="line" href="a00218.html#ga960529c08b25cf15825e0f72ecceb504"> 363</a></span>&#160;<a class="code" href="a00218.html#ga960529c08b25cf15825e0f72ecceb504">hwloc_memattr_set_value</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
162 <div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <a class="code" href="a00217.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute,</div>
163 <div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> target_node,</div>
164 <div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keyword">struct</span> <a class="code" href="a00320.html">hwloc_location</a> *initiator,</div>
165 <div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags,</div>
166 <div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; hwloc_uint64_t value);</div>
167 <div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; </div>
168 <div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
169 <div class="line"><a name="l00407"></a><span class="lineno"><a class="line" href="a00218.html#ga3177cc0ab47e4dd1fa69ca1df4c7cb1a"> 407</a></span>&#160;<a class="code" href="a00218.html#ga3177cc0ab47e4dd1fa69ca1df4c7cb1a">hwloc_memattr_get_targets</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
170 <div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <a class="code" href="a00217.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute,</div>
171 <div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="keyword">struct</span> <a class="code" href="a00320.html">hwloc_location</a> *initiator,</div>
172 <div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags,</div>
173 <div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keywordtype">unsigned</span> *nrp, <a class="code" href="a00244.html">hwloc_obj_t</a> *targets, hwloc_uint64_t *values);</div>
174 <div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; </div>
175 <div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
176 <div class="line"><a name="l00443"></a><span class="lineno"><a class="line" href="a00320.html#aeb9c0ab74a7d3506a76d0b82600a28a7"> 443</a></span>&#160;<a class="code" href="a00218.html#ga049aaa860dcbbf0792f0fd4251a99ec0">hwloc_memattr_get_initiators</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
177 <div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <a class="code" href="a00217.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute,</div>
178 <div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> target_node,</div>
179 <div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags,</div>
180 <div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keywordtype">unsigned</span> *nr, <span class="keyword">struct</span> <a class="code" href="a00320.html">hwloc_location</a> *initiators, hwloc_uint64_t *values);</div>
181 <div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
182 <div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
183 <div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160;<span class="preprocessor">#endif</span></div>
184 <div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; </div>
185 <div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; </div>
186 <div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_MEMATTR_H */</span><span class="preprocessor"></span></div>
187 <div class="ttc" id="aa00189_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
188 <div class="ttc" id="aa00192_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
189 <div class="ttc" id="aa00217_html_ga297e4a9adc2272446a4c7449dacef0df"><div class="ttname"><a href="a00217.html#ga297e4a9adc2272446a4c7449dacef0df">hwloc_memattr_get_value</a></div><div class="ttdeci">int hwloc_memattr_get_value(hwloc_topology_t topology, hwloc_memattr_id_t attribute, hwloc_obj_t target_node, struct hwloc_location *initiator, unsigned long flags, hwloc_uint64_t *value)</div><div class="ttdoc">Return an attribute value for a specific target NUMA node.</div></div>
190 <div class="ttc" id="aa00217_html_ga33099ba58f607fc70925da3777688586"><div class="ttname"><a href="a00217.html#ga33099ba58f607fc70925da3777688586">hwloc_location_type_e</a></div><div class="ttdeci">hwloc_location_type_e</div><div class="ttdoc">Type of location.</div><div class="ttdef"><b>Definition:</b> memattrs.h:126</div></div>
191 <div class="ttc" id="aa00217_html_ga569e80c5be7ef27649b0ef5aa52ffcdc"><div class="ttname"><a href="a00217.html#ga569e80c5be7ef27649b0ef5aa52ffcdc">hwloc_get_local_numanode_objs</a></div><div class="ttdeci">int hwloc_get_local_numanode_objs(hwloc_topology_t topology, struct hwloc_location *location, unsigned *nr, hwloc_obj_t *nodes, unsigned long flags)</div><div class="ttdoc">Return an array of local NUMA nodes.</div></div>
192 <div class="ttc" id="aa00217_html_ga79f44f8e1cfd2f97a19171417a75a137"><div class="ttname"><a href="a00217.html#ga79f44f8e1cfd2f97a19171417a75a137">hwloc_memattr_get_by_name</a></div><div class="ttdeci">int hwloc_memattr_get_by_name(hwloc_topology_t topology, const char *name, hwloc_memattr_id_t *id)</div><div class="ttdoc">Return the identifier of the memory attribute with the given name.</div></div>
193 <div class="ttc" id="aa00217_html_ga884d1f2ad745c2fa69c1583c82d28f10"><div class="ttname"><a href="a00217.html#ga884d1f2ad745c2fa69c1583c82d28f10">hwloc_memattr_get_best_target</a></div><div class="ttdeci">int hwloc_memattr_get_best_target(hwloc_topology_t topology, hwloc_memattr_id_t attribute, struct hwloc_location *initiator, unsigned long flags, hwloc_obj_t *best_target, hwloc_uint64_t *value)</div><div class="ttdoc">Return the best target NUMA node for the given attribute and initiator.</div></div>
194 <div class="ttc" id="aa00217_html_ga9a453879892893cf8a3fcd431ade84cd"><div class="ttname"><a href="a00217.html#ga9a453879892893cf8a3fcd431ade84cd">hwloc_memattr_get_best_initiator</a></div><div class="ttdeci">int hwloc_memattr_get_best_initiator(hwloc_topology_t topology, hwloc_memattr_id_t attribute, hwloc_obj_t target, unsigned long flags, struct hwloc_location *best_initiator, hwloc_uint64_t *value)</div><div class="ttdoc">Return the best initiator for the given attribute and target NUMA node.</div></div>
195 <div class="ttc" id="aa00217_html_gab4bde745db676fc2ea4b47011cd9a80e"><div class="ttname"><a href="a00217.html#gab4bde745db676fc2ea4b47011cd9a80e">hwloc_memattr_id_e</a></div><div class="ttdeci">hwloc_memattr_id_e</div><div class="ttdoc">Memory node attributes.</div><div class="ttdef"><b>Definition:</b> memattrs.h:67</div></div>
196 <div class="ttc" id="aa00217_html_gab9c963ca37255da71b00d94e1b106f9d"><div class="ttname"><a href="a00217.html#gab9c963ca37255da71b00d94e1b106f9d">hwloc_local_numanode_flag_e</a></div><div class="ttdeci">hwloc_local_numanode_flag_e</div><div class="ttdoc">Flags for selecting target NUMA nodes.</div><div class="ttdef"><b>Definition:</b> memattrs.h:148</div></div>
197 <div class="ttc" id="aa00217_html_gacc82003a8610be554615995f0996c888"><div class="ttname"><a href="a00217.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a></div><div class="ttdeci">unsigned hwloc_memattr_id_t</div><div class="ttdoc">A memory attribute identifier. May be either one of hwloc_memattr_id_e or a new id returned by hwloc_...</div><div class="ttdef"><b>Definition:</b> memattrs.h:115</div></div>
198 <div class="ttc" id="aa00217_html_gga33099ba58f607fc70925da3777688586a7135318a86361ad75fd1648e6bf6d174"><div class="ttname"><a href="a00217.html#gga33099ba58f607fc70925da3777688586a7135318a86361ad75fd1648e6bf6d174">HWLOC_LOCATION_TYPE_CPUSET</a></div><div class="ttdeci">@ HWLOC_LOCATION_TYPE_CPUSET</div><div class="ttdoc">Location is given as a cpuset, in the location cpuset union field.</div><div class="ttdef"><b>Definition:</b> memattrs.h:128</div></div>
199 <div class="ttc" id="aa00217_html_gga33099ba58f607fc70925da3777688586af637c39b23d48cff15ddb008644aaa84"><div class="ttname"><a href="a00217.html#gga33099ba58f607fc70925da3777688586af637c39b23d48cff15ddb008644aaa84">HWLOC_LOCATION_TYPE_OBJECT</a></div><div class="ttdeci">@ HWLOC_LOCATION_TYPE_OBJECT</div><div class="ttdoc">Location is given as an object, in the location object union field.</div><div class="ttdef"><b>Definition:</b> memattrs.h:130</div></div>
200 <div class="ttc" id="aa00217_html_ggab4bde745db676fc2ea4b47011cd9a80ea25fe3c7376ae6f9b584bacdb039f8c0f"><div class="ttname"><a href="a00217.html#ggab4bde745db676fc2ea4b47011cd9a80ea25fe3c7376ae6f9b584bacdb039f8c0f">HWLOC_MEMATTR_ID_BANDWIDTH</a></div><div class="ttdeci">@ HWLOC_MEMATTR_ID_BANDWIDTH</div><div class="ttdoc">&quot;Bandwidth&quot;. The bandwidth is returned in MiB/s, as seen from the given initiator location....</div><div class="ttdef"><b>Definition:</b> memattrs.h:99</div></div>
201 <div class="ttc" id="aa00217_html_ggab4bde745db676fc2ea4b47011cd9a80ea9334e3a4c30a67f491c6523255134efe"><div class="ttname"><a href="a00217.html#ggab4bde745db676fc2ea4b47011cd9a80ea9334e3a4c30a67f491c6523255134efe">HWLOC_MEMATTR_ID_LOCALITY</a></div><div class="ttdeci">@ HWLOC_MEMATTR_ID_LOCALITY</div><div class="ttdoc">&quot;Locality&quot;. The locality is returned as the number of PUs in that locality (e.g. the weight of its cp...</div><div class="ttdef"><b>Definition:</b> memattrs.h:91</div></div>
202 <div class="ttc" id="aa00217_html_ggab4bde745db676fc2ea4b47011cd9a80eaa1cfa3ff3d56ff00ecabf7da4f5642cc"><div class="ttname"><a href="a00217.html#ggab4bde745db676fc2ea4b47011cd9a80eaa1cfa3ff3d56ff00ecabf7da4f5642cc">HWLOC_MEMATTR_ID_CAPACITY</a></div><div class="ttdeci">@ HWLOC_MEMATTR_ID_CAPACITY</div><div class="ttdoc">&quot;Capacity&quot;. The capacity is returned in bytes (local_memory attribute in objects).</div><div class="ttdef"><b>Definition:</b> memattrs.h:77</div></div>
203 <div class="ttc" id="aa00217_html_ggab4bde745db676fc2ea4b47011cd9a80ead1796413759b8b87b61ad195a9349b19"><div class="ttname"><a href="a00217.html#ggab4bde745db676fc2ea4b47011cd9a80ead1796413759b8b87b61ad195a9349b19">HWLOC_MEMATTR_ID_LATENCY</a></div><div class="ttdeci">@ HWLOC_MEMATTR_ID_LATENCY</div><div class="ttdoc">&quot;Latency&quot;. The latency is returned as nanoseconds, as seen from the given initiator location....</div><div class="ttdef"><b>Definition:</b> memattrs.h:107</div></div>
204 <div class="ttc" id="aa00217_html_ggab9c963ca37255da71b00d94e1b106f9da200c6c133bb2125ba36d77ce9ca268cc"><div class="ttname"><a href="a00217.html#ggab9c963ca37255da71b00d94e1b106f9da200c6c133bb2125ba36d77ce9ca268cc">HWLOC_LOCAL_NUMANODE_FLAG_LARGER_LOCALITY</a></div><div class="ttdeci">@ HWLOC_LOCAL_NUMANODE_FLAG_LARGER_LOCALITY</div><div class="ttdoc">Select NUMA nodes whose locality is larger than the given cpuset. For instance, if a single PU (or it...</div><div class="ttdef"><b>Definition:</b> memattrs.h:154</div></div>
205 <div class="ttc" id="aa00217_html_ggab9c963ca37255da71b00d94e1b106f9daac9c5e3a2cfb1b193e4acfceaf3bad57"><div class="ttname"><a href="a00217.html#ggab9c963ca37255da71b00d94e1b106f9daac9c5e3a2cfb1b193e4acfceaf3bad57">HWLOC_LOCAL_NUMANODE_FLAG_SMALLER_LOCALITY</a></div><div class="ttdeci">@ HWLOC_LOCAL_NUMANODE_FLAG_SMALLER_LOCALITY</div><div class="ttdoc">Select NUMA nodes whose locality is smaller than the given cpuset. For instance, if a package (or its...</div><div class="ttdef"><b>Definition:</b> memattrs.h:161</div></div>
206 <div class="ttc" id="aa00217_html_ggab9c963ca37255da71b00d94e1b106f9dab5778b34c961a5d56f98f1549edeaed0"><div class="ttname"><a href="a00217.html#ggab9c963ca37255da71b00d94e1b106f9dab5778b34c961a5d56f98f1549edeaed0">HWLOC_LOCAL_NUMANODE_FLAG_ALL</a></div><div class="ttdeci">@ HWLOC_LOCAL_NUMANODE_FLAG_ALL</div><div class="ttdoc">Select all NUMA nodes in the topology. The initiator initiator is ignored.</div><div class="ttdef"><b>Definition:</b> memattrs.h:167</div></div>
207 <div class="ttc" id="aa00218_html_ga049aaa860dcbbf0792f0fd4251a99ec0"><div class="ttname"><a href="a00218.html#ga049aaa860dcbbf0792f0fd4251a99ec0">hwloc_memattr_get_initiators</a></div><div class="ttdeci">int hwloc_memattr_get_initiators(hwloc_topology_t topology, hwloc_memattr_id_t attribute, hwloc_obj_t target_node, unsigned long flags, unsigned *nr, struct hwloc_location *initiators, hwloc_uint64_t *values)</div><div class="ttdoc">Return the initiators that have values for a given attribute for a specific target NUMA node.</div></div>
208 <div class="ttc" id="aa00218_html_ga3177cc0ab47e4dd1fa69ca1df4c7cb1a"><div class="ttname"><a href="a00218.html#ga3177cc0ab47e4dd1fa69ca1df4c7cb1a">hwloc_memattr_get_targets</a></div><div class="ttdeci">int hwloc_memattr_get_targets(hwloc_topology_t topology, hwloc_memattr_id_t attribute, struct hwloc_location *initiator, unsigned long flags, unsigned *nrp, hwloc_obj_t *targets, hwloc_uint64_t *values)</div><div class="ttdoc">Return the target NUMA nodes that have some values for a given attribute.</div></div>
209 <div class="ttc" id="aa00218_html_ga4c62b626085adeaffb233e5f2a03a5eb"><div class="ttname"><a href="a00218.html#ga4c62b626085adeaffb233e5f2a03a5eb">hwloc_memattr_get_flags</a></div><div class="ttdeci">int hwloc_memattr_get_flags(hwloc_topology_t topology, hwloc_memattr_id_t attribute, unsigned long *flags)</div><div class="ttdoc">Return the flags of the given attribute.</div></div>
210 <div class="ttc" id="aa00218_html_ga5300e9be1abdea2e00c18492148aecd0"><div class="ttname"><a href="a00218.html#ga5300e9be1abdea2e00c18492148aecd0">hwloc_memattr_get_name</a></div><div class="ttdeci">int hwloc_memattr_get_name(hwloc_topology_t topology, hwloc_memattr_id_t attribute, const char **name)</div><div class="ttdoc">Return the name of a memory attribute.</div></div>
211 <div class="ttc" id="aa00218_html_ga770657d1e44b09e93e09f623936c1e5f"><div class="ttname"><a href="a00218.html#ga770657d1e44b09e93e09f623936c1e5f">hwloc_memattr_register</a></div><div class="ttdeci">int hwloc_memattr_register(hwloc_topology_t topology, const char *name, unsigned long flags, hwloc_memattr_id_t *id)</div><div class="ttdoc">Register a new memory attribute.</div></div>
212 <div class="ttc" id="aa00218_html_ga78aceb4cac4d614c0f5e82dbfeb779e5"><div class="ttname"><a href="a00218.html#ga78aceb4cac4d614c0f5e82dbfeb779e5">hwloc_memattr_flag_e</a></div><div class="ttdeci">hwloc_memattr_flag_e</div><div class="ttdoc">Memory attribute flags. Given to hwloc_memattr_register() and returned by hwloc_memattr_get_flags().</div><div class="ttdef"><b>Definition:</b> memattrs.h:317</div></div>
213 <div class="ttc" id="aa00218_html_ga960529c08b25cf15825e0f72ecceb504"><div class="ttname"><a href="a00218.html#ga960529c08b25cf15825e0f72ecceb504">hwloc_memattr_set_value</a></div><div class="ttdeci">int hwloc_memattr_set_value(hwloc_topology_t topology, hwloc_memattr_id_t attribute, hwloc_obj_t target_node, struct hwloc_location *initiator, unsigned long flags, hwloc_uint64_t value)</div><div class="ttdoc">Set an attribute value for a specific target NUMA node.</div></div>
214 <div class="ttc" id="aa00218_html_gga78aceb4cac4d614c0f5e82dbfeb779e5a9601b5b0e1e68635e7e9901f28bd93bf"><div class="ttname"><a href="a00218.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9601b5b0e1e68635e7e9901f28bd93bf">HWLOC_MEMATTR_FLAG_LOWER_FIRST</a></div><div class="ttdeci">@ HWLOC_MEMATTR_FLAG_LOWER_FIRST</div><div class="ttdoc">The best nodes for this memory attribute are those with the lower values. For instance Latency.</div><div class="ttdef"><b>Definition:</b> memattrs.h:325</div></div>
215 <div class="ttc" id="aa00218_html_gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96"><div class="ttname"><a href="a00218.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a></div><div class="ttdeci">@ HWLOC_MEMATTR_FLAG_NEED_INITIATOR</div><div class="ttdoc">The value returned for this memory attribute depends on the given initiator. For instance Bandwidth a...</div><div class="ttdef"><b>Definition:</b> memattrs.h:329</div></div>
216 <div class="ttc" id="aa00218_html_gga78aceb4cac4d614c0f5e82dbfeb779e5af29e65444a6ed00f5cc246df06f65815"><div class="ttname"><a href="a00218.html#gga78aceb4cac4d614c0f5e82dbfeb779e5af29e65444a6ed00f5cc246df06f65815">HWLOC_MEMATTR_FLAG_HIGHER_FIRST</a></div><div class="ttdeci">@ HWLOC_MEMATTR_FLAG_HIGHER_FIRST</div><div class="ttdoc">The best nodes for this memory attribute are those with the higher values. For instance Bandwidth.</div><div class="ttdef"><b>Definition:</b> memattrs.h:321</div></div>
217 <div class="ttc" id="aa00244_html"><div class="ttname"><a href="a00244.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:395</div></div>
218 <div class="ttc" id="aa00320_html"><div class="ttname"><a href="a00320.html">hwloc_location</a></div><div class="ttdoc">Where to measure attributes from.</div><div class="ttdef"><b>Definition:</b> memattrs.h:134</div></div>
219 <div class="ttc" id="aa00320_html_a707a25a5b65177e4d081be49aa0777a2"><div class="ttname"><a href="a00320.html#a707a25a5b65177e4d081be49aa0777a2">hwloc_location::location</a></div><div class="ttdeci">union hwloc_location::hwloc_location_u location</div></div>
220 <div class="ttc" id="aa00320_html_aeb9c0ab74a7d3506a76d0b82600a28a7"><div class="ttname"><a href="a00320.html#aeb9c0ab74a7d3506a76d0b82600a28a7">hwloc_location::type</a></div><div class="ttdeci">enum hwloc_location_type_e type</div><div class="ttdoc">Type of location.</div><div class="ttdef"><b>Definition:</b> memattrs.h:136</div></div>
221 <div class="ttc" id="aa00324_html"><div class="ttname"><a href="a00324.html">hwloc_location::hwloc_location_u</a></div><div class="ttdoc">Actual location.</div><div class="ttdef"><b>Definition:</b> memattrs.h:138</div></div>
222 <div class="ttc" id="aa00324_html_a033bad8f6b891992f0c18b85a88c5561"><div class="ttname"><a href="a00324.html#a033bad8f6b891992f0c18b85a88c5561">hwloc_location::hwloc_location_u::cpuset</a></div><div class="ttdeci">hwloc_cpuset_t cpuset</div><div class="ttdoc">Location as a cpuset, when the location type is HWLOC_LOCATION_TYPE_CPUSET.</div><div class="ttdef"><b>Definition:</b> memattrs.h:140</div></div>
223 <div class="ttc" id="aa00324_html_acf2ebf75869f0a53a884ac2ab3374122"><div class="ttname"><a href="a00324.html#acf2ebf75869f0a53a884ac2ab3374122">hwloc_location::hwloc_location_u::object</a></div><div class="ttdeci">hwloc_obj_t object</div><div class="ttdoc">Location as an object, when the location type is HWLOC_LOCATION_TYPE_OBJECT.</div><div class="ttdef"><b>Definition:</b> memattrs.h:142</div></div>
65 <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
66 <div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="a00223.html#ga7553f7c6d3920b169f3fc18dfe6a33e3"> 77</a></span>&#160;<a class="code" href="a00223.html#ga7553f7c6d3920b169f3fc18dfe6a33e3">hwloc_cpukinds_get_nr</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
67 <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
68 <div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; </div>
69 <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
70 <div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="a00223.html#gaf979833aab18d2e7f4b17c932cbcf5d8"> 92</a></span>&#160;<a class="code" href="a00223.html#gaf979833aab18d2e7f4b17c932cbcf5d8">hwloc_cpukinds_get_by_cpuset</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
71 <div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <a class="code" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> cpuset,</div>
72 <div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
73 <div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; </div>
74 <div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
75 <div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="a00223.html#gae1b38fbe9c645583fc16052ce6fbb275"> 130</a></span>&#160;<a class="code" href="a00223.html#gae1b38fbe9c645583fc16052ce6fbb275">hwloc_cpukinds_get_info</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
76 <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordtype">unsigned</span> kind_index,</div>
77 <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> cpuset,</div>
78 <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordtype">int</span> *efficiency,</div>
79 <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordtype">unsigned</span> *nr_infos, <span class="keyword">struct</span> <a class="code" href="a00298.html">hwloc_info_s</a> **infos,</div>
80 <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
81 <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; </div>
82 <div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
83 <div class="line"><a name="l00175"></a><span class="lineno"><a class="line" href="a00223.html#ga6164ba92cfd06f530ec2c4a18a0dd5a9"> 175</a></span>&#160;<a class="code" href="a00223.html#ga6164ba92cfd06f530ec2c4a18a0dd5a9">hwloc_cpukinds_register</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
84 <div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> cpuset,</div>
85 <div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordtype">int</span> forced_efficiency,</div>
86 <div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordtype">unsigned</span> nr_infos, <span class="keyword">struct</span> <a class="code" href="a00298.html">hwloc_info_s</a> *infos,</div>
87 <div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
88 <div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; </div>
89 <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
90 <div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
91 <div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;<span class="preprocessor">#endif</span></div>
92 <div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; </div>
93 <div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; </div>
94 <div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_CPUKINDS_H */</span><span class="preprocessor"></span></div>
95 <div class="ttc" id="aa00195_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
96 <div class="ttc" id="aa00214_html_gaa3c2bf4c776d603dcebbb61b0c923d84"><div class="ttname"><a href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a></div><div class="ttdeci">struct hwloc_bitmap_s * hwloc_bitmap_t</div><div class="ttdoc">Set of bits represented as an opaque pointer to an internal bitmap.</div><div class="ttdef"><b>Definition:</b> bitmap.h:68</div></div>
97 <div class="ttc" id="aa00214_html_gae991a108af01d408be2776c5b2c467b2"><div class="ttname"><a href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a></div><div class="ttdeci">const struct hwloc_bitmap_s * hwloc_const_bitmap_t</div><div class="ttdoc">a non-modifiable hwloc_bitmap_t</div><div class="ttdef"><b>Definition:</b> bitmap.h:70</div></div>
98 <div class="ttc" id="aa00223_html_ga6164ba92cfd06f530ec2c4a18a0dd5a9"><div class="ttname"><a href="a00223.html#ga6164ba92cfd06f530ec2c4a18a0dd5a9">hwloc_cpukinds_register</a></div><div class="ttdeci">int hwloc_cpukinds_register(hwloc_topology_t topology, hwloc_bitmap_t cpuset, int forced_efficiency, unsigned nr_infos, struct hwloc_info_s *infos, unsigned long flags)</div><div class="ttdoc">Register a kind of CPU in the topology.</div></div>
99 <div class="ttc" id="aa00223_html_ga7553f7c6d3920b169f3fc18dfe6a33e3"><div class="ttname"><a href="a00223.html#ga7553f7c6d3920b169f3fc18dfe6a33e3">hwloc_cpukinds_get_nr</a></div><div class="ttdeci">int hwloc_cpukinds_get_nr(hwloc_topology_t topology, unsigned long flags)</div><div class="ttdoc">Get the number of different kinds of CPU cores in the topology.</div></div>
100 <div class="ttc" id="aa00223_html_gae1b38fbe9c645583fc16052ce6fbb275"><div class="ttname"><a href="a00223.html#gae1b38fbe9c645583fc16052ce6fbb275">hwloc_cpukinds_get_info</a></div><div class="ttdeci">int hwloc_cpukinds_get_info(hwloc_topology_t topology, unsigned kind_index, hwloc_bitmap_t cpuset, int *efficiency, unsigned *nr_infos, struct hwloc_info_s **infos, unsigned long flags)</div><div class="ttdoc">Get the CPU set and infos about a CPU kind in the topology.</div></div>
101 <div class="ttc" id="aa00223_html_gaf979833aab18d2e7f4b17c932cbcf5d8"><div class="ttname"><a href="a00223.html#gaf979833aab18d2e7f4b17c932cbcf5d8">hwloc_cpukinds_get_by_cpuset</a></div><div class="ttdeci">int hwloc_cpukinds_get_by_cpuset(hwloc_topology_t topology, hwloc_const_bitmap_t cpuset, unsigned long flags)</div><div class="ttdoc">Get the index of the CPU kind that contains CPUs listed in cpuset.</div></div>
102 <div class="ttc" id="aa00298_html"><div class="ttname"><a href="a00298.html">hwloc_info_s</a></div><div class="ttdoc">Object info.</div><div class="ttdef"><b>Definition:</b> hwloc.h:673</div></div>
224103 </div><!-- fragment --></div><!-- contents -->
225104 <!-- start footer part -->
226105 <hr class="footer"/><address class="footer"><small>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): cpukinds.h Source File</title>
7 <title>Hardware Locality (hwloc): linux.h Source File</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4343 </div><!-- top -->
4444 <div class="header">
4545 <div class="headertitle">
46 <div class="title">cpukinds.h</div> </div>
46 <div class="title">linux.h</div> </div>
4747 </div><!--header-->
4848 <div class="contents">
4949 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
50 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2020 Inria. All rights reserved.</span></div>
51 <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
52 <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> */</span></div>
53 <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; </div>
54 <div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#ifndef HWLOC_CPUKINDS_H</span></div>
55 <div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#define HWLOC_CPUKINDS_H</span></div>
56 <div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160; </div>
57 <div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &quot;hwloc.h&quot;</span></div>
58 <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; </div>
59 <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
60 <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
61 <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#elif 0</span></div>
62 <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;}</div>
63 <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#endif</span></div>
64 <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; </div>
65 <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
66 <div class="line"><a name="l00077"></a><span class="lineno"><a class="line" href="a00219.html#ga7553f7c6d3920b169f3fc18dfe6a33e3"> 77</a></span>&#160;<a class="code" href="a00219.html#ga7553f7c6d3920b169f3fc18dfe6a33e3">hwloc_cpukinds_get_nr</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
67 <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
50 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2009 CNRS</span></div>
51 <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * Copyright © 2009-2016 Inria. All rights reserved.</span></div>
52 <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Copyright © 2009-2011 Université Bordeaux</span></div>
53 <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
54 <div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> */</span></div>
55 <div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; </div>
56 <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef HWLOC_LINUX_H</span></div>
57 <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define HWLOC_LINUX_H</span></div>
58 <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; </div>
59 <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &quot;hwloc.h&quot;</span></div>
60 <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
61 <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;stdio.h&gt;</span></div>
62 <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
63 <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
64 <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
65 <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
66 <div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#endif</span></div>
67 <div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
68 <div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
69 <div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="a00224.html#ga630e699c56b5f3d2e534b475944c216e"> 44</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00224.html#ga630e699c56b5f3d2e534b475944c216e">hwloc_linux_set_tid_cpubind</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, pid_t tid, <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set);</div>
70 <div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; </div>
71 <div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="a00224.html#gaddcb985cb56337a4d6693cee72e7bf94"> 54</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00224.html#gaddcb985cb56337a4d6693cee72e7bf94">hwloc_linux_get_tid_cpubind</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, pid_t tid, <a class="code" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set);</div>
72 <div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; </div>
73 <div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="a00224.html#gacc7945c2d06c6db1e58f8fd953009134"> 61</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00224.html#gacc7945c2d06c6db1e58f8fd953009134">hwloc_linux_get_tid_last_cpu_location</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, pid_t tid, <a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set);</div>
74 <div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; </div>
75 <div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="a00224.html#gaf72d83e273803226ce772973e37b85de"> 70</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00224.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *path, <a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set);</div>
76 <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; </div>
77 <div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
78 <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
79 <div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="preprocessor">#endif</span></div>
80 <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; </div>
6881 <div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; </div>
69 <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
70 <div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="a00219.html#gaf979833aab18d2e7f4b17c932cbcf5d8"> 92</a></span>&#160;<a class="code" href="a00219.html#gaf979833aab18d2e7f4b17c932cbcf5d8">hwloc_cpukinds_get_by_cpuset</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
71 <div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <a class="code" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> cpuset,</div>
72 <div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
73 <div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; </div>
74 <div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
75 <div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="a00219.html#gae1b38fbe9c645583fc16052ce6fbb275"> 130</a></span>&#160;<a class="code" href="a00219.html#gae1b38fbe9c645583fc16052ce6fbb275">hwloc_cpukinds_get_info</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
76 <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordtype">unsigned</span> kind_index,</div>
77 <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> cpuset,</div>
78 <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordtype">int</span> *efficiency,</div>
79 <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordtype">unsigned</span> *nr_infos, <span class="keyword">struct</span> <a class="code" href="a00292.html">hwloc_info_s</a> **infos,</div>
80 <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
81 <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; </div>
82 <div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
83 <div class="line"><a name="l00175"></a><span class="lineno"><a class="line" href="a00219.html#ga6164ba92cfd06f530ec2c4a18a0dd5a9"> 175</a></span>&#160;<a class="code" href="a00219.html#ga6164ba92cfd06f530ec2c4a18a0dd5a9">hwloc_cpukinds_register</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
84 <div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> cpuset,</div>
85 <div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordtype">int</span> forced_efficiency,</div>
86 <div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordtype">unsigned</span> nr_infos, <span class="keyword">struct</span> <a class="code" href="a00292.html">hwloc_info_s</a> *infos,</div>
87 <div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
88 <div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; </div>
89 <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
90 <div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
91 <div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160;<span class="preprocessor">#endif</span></div>
92 <div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; </div>
93 <div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; </div>
94 <div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_CPUKINDS_H */</span><span class="preprocessor"></span></div>
95 <div class="ttc" id="aa00192_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
96 <div class="ttc" id="aa00211_html_gaa3c2bf4c776d603dcebbb61b0c923d84"><div class="ttname"><a href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a></div><div class="ttdeci">struct hwloc_bitmap_s * hwloc_bitmap_t</div><div class="ttdoc">Set of bits represented as an opaque pointer to an internal bitmap.</div><div class="ttdef"><b>Definition:</b> bitmap.h:68</div></div>
97 <div class="ttc" id="aa00211_html_gae991a108af01d408be2776c5b2c467b2"><div class="ttname"><a href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a></div><div class="ttdeci">const struct hwloc_bitmap_s * hwloc_const_bitmap_t</div><div class="ttdoc">a non-modifiable hwloc_bitmap_t</div><div class="ttdef"><b>Definition:</b> bitmap.h:70</div></div>
98 <div class="ttc" id="aa00219_html_ga6164ba92cfd06f530ec2c4a18a0dd5a9"><div class="ttname"><a href="a00219.html#ga6164ba92cfd06f530ec2c4a18a0dd5a9">hwloc_cpukinds_register</a></div><div class="ttdeci">int hwloc_cpukinds_register(hwloc_topology_t topology, hwloc_bitmap_t cpuset, int forced_efficiency, unsigned nr_infos, struct hwloc_info_s *infos, unsigned long flags)</div><div class="ttdoc">Register a kind of CPU in the topology.</div></div>
99 <div class="ttc" id="aa00219_html_ga7553f7c6d3920b169f3fc18dfe6a33e3"><div class="ttname"><a href="a00219.html#ga7553f7c6d3920b169f3fc18dfe6a33e3">hwloc_cpukinds_get_nr</a></div><div class="ttdeci">int hwloc_cpukinds_get_nr(hwloc_topology_t topology, unsigned long flags)</div><div class="ttdoc">Get the number of different kinds of CPU cores in the topology.</div></div>
100 <div class="ttc" id="aa00219_html_gae1b38fbe9c645583fc16052ce6fbb275"><div class="ttname"><a href="a00219.html#gae1b38fbe9c645583fc16052ce6fbb275">hwloc_cpukinds_get_info</a></div><div class="ttdeci">int hwloc_cpukinds_get_info(hwloc_topology_t topology, unsigned kind_index, hwloc_bitmap_t cpuset, int *efficiency, unsigned *nr_infos, struct hwloc_info_s **infos, unsigned long flags)</div><div class="ttdoc">Get the CPU set and infos about a CPU kind in the topology.</div></div>
101 <div class="ttc" id="aa00219_html_gaf979833aab18d2e7f4b17c932cbcf5d8"><div class="ttname"><a href="a00219.html#gaf979833aab18d2e7f4b17c932cbcf5d8">hwloc_cpukinds_get_by_cpuset</a></div><div class="ttdeci">int hwloc_cpukinds_get_by_cpuset(hwloc_topology_t topology, hwloc_const_bitmap_t cpuset, unsigned long flags)</div><div class="ttdoc">Get the index of the CPU kind that contains CPUs listed in cpuset.</div></div>
102 <div class="ttc" id="aa00292_html"><div class="ttname"><a href="a00292.html">hwloc_info_s</a></div><div class="ttdoc">Object info.</div><div class="ttdef"><b>Definition:</b> hwloc.h:673</div></div>
82 <div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_LINUX_H */</span><span class="preprocessor"></span></div>
83 <div class="ttc" id="aa00192_html_ga1f784433e9b606261f62d1134f6a3b25"><div class="ttname"><a href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a></div><div class="ttdeci">hwloc_const_bitmap_t hwloc_const_cpuset_t</div><div class="ttdoc">A non-modifiable hwloc_cpuset_t.</div><div class="ttdef"><b>Definition:</b> hwloc.h:142</div></div>
84 <div class="ttc" id="aa00192_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
85 <div class="ttc" id="aa00195_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
86 <div class="ttc" id="aa00214_html_gaa3c2bf4c776d603dcebbb61b0c923d84"><div class="ttname"><a href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a></div><div class="ttdeci">struct hwloc_bitmap_s * hwloc_bitmap_t</div><div class="ttdoc">Set of bits represented as an opaque pointer to an internal bitmap.</div><div class="ttdef"><b>Definition:</b> bitmap.h:68</div></div>
87 <div class="ttc" id="aa00224_html_ga630e699c56b5f3d2e534b475944c216e"><div class="ttname"><a href="a00224.html#ga630e699c56b5f3d2e534b475944c216e">hwloc_linux_set_tid_cpubind</a></div><div class="ttdeci">int hwloc_linux_set_tid_cpubind(hwloc_topology_t topology, pid_t tid, hwloc_const_cpuset_t set)</div><div class="ttdoc">Bind a thread tid on cpus given in cpuset set.</div></div>
88 <div class="ttc" id="aa00224_html_gacc7945c2d06c6db1e58f8fd953009134"><div class="ttname"><a href="a00224.html#gacc7945c2d06c6db1e58f8fd953009134">hwloc_linux_get_tid_last_cpu_location</a></div><div class="ttdeci">int hwloc_linux_get_tid_last_cpu_location(hwloc_topology_t topology, pid_t tid, hwloc_bitmap_t set)</div><div class="ttdoc">Get the last physical CPU where thread tid ran.</div></div>
89 <div class="ttc" id="aa00224_html_gaddcb985cb56337a4d6693cee72e7bf94"><div class="ttname"><a href="a00224.html#gaddcb985cb56337a4d6693cee72e7bf94">hwloc_linux_get_tid_cpubind</a></div><div class="ttdeci">int hwloc_linux_get_tid_cpubind(hwloc_topology_t topology, pid_t tid, hwloc_cpuset_t set)</div><div class="ttdoc">Get the current binding of thread tid.</div></div>
90 <div class="ttc" id="aa00224_html_gaf72d83e273803226ce772973e37b85de"><div class="ttname"><a href="a00224.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a></div><div class="ttdeci">int hwloc_linux_read_path_as_cpumask(const char *path, hwloc_bitmap_t set)</div><div class="ttdoc">Convert a linux kernel cpumask file path into a hwloc bitmap set.</div></div>
10391 </div><!-- fragment --></div><!-- contents -->
10492 <!-- start footer part -->
10593 <hr class="footer"/><address class="footer"><small>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): linux.h Source File</title>
7 <title>Hardware Locality (hwloc): linux-libnuma.h Source File</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4343 </div><!-- top -->
4444 <div class="header">
4545 <div class="headertitle">
46 <div class="title">linux.h</div> </div>
46 <div class="title">linux-libnuma.h</div> </div>
4747 </div><!--header-->
4848 <div class="contents">
4949 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
5050 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2009 CNRS</span></div>
51 <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * Copyright © 2009-2016 Inria. All rights reserved.</span></div>
52 <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Copyright © 2009-2011 Université Bordeaux</span></div>
51 <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * Copyright © 2009-2017 Inria. All rights reserved.</span></div>
52 <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Copyright © 2009-2010, 2012 Université Bordeaux</span></div>
5353 <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
5454 <div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> */</span></div>
5555 <div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; </div>
56 <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef HWLOC_LINUX_H</span></div>
57 <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define HWLOC_LINUX_H</span></div>
56 <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef HWLOC_LINUX_LIBNUMA_H</span></div>
57 <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define HWLOC_LINUX_LIBNUMA_H</span></div>
5858 <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; </div>
5959 <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &quot;hwloc.h&quot;</span></div>
6060 <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
61 <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;stdio.h&gt;</span></div>
61 <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;numa.h&gt;</span></div>
6262 <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
6363 <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
6464 <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
6666 <div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#endif</span></div>
6767 <div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
6868 <div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
69 <div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="a00220.html#ga630e699c56b5f3d2e534b475944c216e"> 44</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00220.html#ga630e699c56b5f3d2e534b475944c216e">hwloc_linux_set_tid_cpubind</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, pid_t tid, <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set);</div>
70 <div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; </div>
71 <div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="a00220.html#gaddcb985cb56337a4d6693cee72e7bf94"> 54</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00220.html#gaddcb985cb56337a4d6693cee72e7bf94">hwloc_linux_get_tid_cpubind</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, pid_t tid, <a class="code" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set);</div>
72 <div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; </div>
73 <div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="a00220.html#gacc7945c2d06c6db1e58f8fd953009134"> 61</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00220.html#gacc7945c2d06c6db1e58f8fd953009134">hwloc_linux_get_tid_last_cpu_location</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, pid_t tid, <a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set);</div>
74 <div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; </div>
75 <div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="a00220.html#gaf72d83e273803226ce772973e37b85de"> 70</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00220.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *path, <a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set);</div>
76 <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; </div>
77 <div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
78 <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
79 <div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="preprocessor">#endif</span></div>
80 <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; </div>
81 <div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; </div>
82 <div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_LINUX_H */</span><span class="preprocessor"></span></div>
83 <div class="ttc" id="aa00189_html_ga1f784433e9b606261f62d1134f6a3b25"><div class="ttname"><a href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a></div><div class="ttdeci">hwloc_const_bitmap_t hwloc_const_cpuset_t</div><div class="ttdoc">A non-modifiable hwloc_cpuset_t.</div><div class="ttdef"><b>Definition:</b> hwloc.h:142</div></div>
84 <div class="ttc" id="aa00189_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
85 <div class="ttc" id="aa00192_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
86 <div class="ttc" id="aa00211_html_gaa3c2bf4c776d603dcebbb61b0c923d84"><div class="ttname"><a href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a></div><div class="ttdeci">struct hwloc_bitmap_s * hwloc_bitmap_t</div><div class="ttdoc">Set of bits represented as an opaque pointer to an internal bitmap.</div><div class="ttdef"><b>Definition:</b> bitmap.h:68</div></div>
87 <div class="ttc" id="aa00220_html_ga630e699c56b5f3d2e534b475944c216e"><div class="ttname"><a href="a00220.html#ga630e699c56b5f3d2e534b475944c216e">hwloc_linux_set_tid_cpubind</a></div><div class="ttdeci">int hwloc_linux_set_tid_cpubind(hwloc_topology_t topology, pid_t tid, hwloc_const_cpuset_t set)</div><div class="ttdoc">Bind a thread tid on cpus given in cpuset set.</div></div>
88 <div class="ttc" id="aa00220_html_gacc7945c2d06c6db1e58f8fd953009134"><div class="ttname"><a href="a00220.html#gacc7945c2d06c6db1e58f8fd953009134">hwloc_linux_get_tid_last_cpu_location</a></div><div class="ttdeci">int hwloc_linux_get_tid_last_cpu_location(hwloc_topology_t topology, pid_t tid, hwloc_bitmap_t set)</div><div class="ttdoc">Get the last physical CPU where thread tid ran.</div></div>
89 <div class="ttc" id="aa00220_html_gaddcb985cb56337a4d6693cee72e7bf94"><div class="ttname"><a href="a00220.html#gaddcb985cb56337a4d6693cee72e7bf94">hwloc_linux_get_tid_cpubind</a></div><div class="ttdeci">int hwloc_linux_get_tid_cpubind(hwloc_topology_t topology, pid_t tid, hwloc_cpuset_t set)</div><div class="ttdoc">Get the current binding of thread tid.</div></div>
90 <div class="ttc" id="aa00220_html_gaf72d83e273803226ce772973e37b85de"><div class="ttname"><a href="a00220.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a></div><div class="ttdeci">int hwloc_linux_read_path_as_cpumask(const char *path, hwloc_bitmap_t set)</div><div class="ttdoc">Convert a linux kernel cpumask file path into a hwloc bitmap set.</div></div>
69 <div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
70 <div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="a00225.html#gae577962390f84b0b12f503314ab0f972"> 55</a></span>&#160;<a class="code" href="a00225.html#gae577962390f84b0b12f503314ab0f972">hwloc_cpuset_to_linux_libnuma_ulongs</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> cpuset,</div>
71 <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *mask, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *maxnode)</div>
72 <div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;{</div>
73 <div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordtype">int</span> depth = <a class="code" href="a00196.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>);</div>
74 <div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> outmaxnode = -1;</div>
75 <div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> node = NULL;</div>
76 <div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; </div>
77 <div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="comment">/* round-up to the next ulong and clear all bytes */</span></div>
78 <div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; *maxnode = (*maxnode + 8*<span class="keyword">sizeof</span>(*mask) - 1) &amp; ~(8*<span class="keyword">sizeof</span>(*mask) - 1);</div>
79 <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; memset(mask, 0, *maxnode/8);</div>
80 <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; </div>
81 <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">while</span> ((node = <a class="code" href="a00205.html#gaba4b6d86eba1169ced4b0e941d2bb5f0">hwloc_get_next_obj_covering_cpuset_by_depth</a>(topology, cpuset, depth, node)) != NULL) {</div>
82 <div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">if</span> (node-&gt;<a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a> &gt;= *maxnode)</div>
83 <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">continue</span>;</div>
84 <div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; mask[node-&gt;<a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>/<span class="keyword">sizeof</span>(*mask)/8] |= 1UL &lt;&lt; (node-&gt;<a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a> % (<span class="keyword">sizeof</span>(*mask)*8));</div>
85 <div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">if</span> (outmaxnode == (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>) -1 || outmaxnode &lt; node-&gt;<a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>)</div>
86 <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; outmaxnode = node-&gt;<a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>;</div>
87 <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; }</div>
88 <div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; </div>
89 <div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; *maxnode = outmaxnode+1;</div>
90 <div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">return</span> 0;</div>
91 <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;}</div>
92 <div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; </div>
93 <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
94 <div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="a00225.html#ga585ccf818d2f217f4e53f9c6506c3128"> 89</a></span>&#160;<a class="code" href="a00225.html#ga585ccf818d2f217f4e53f9c6506c3128">hwloc_nodeset_to_linux_libnuma_ulongs</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00192.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> nodeset,</div>
95 <div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *mask, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *maxnode)</div>
96 <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;{</div>
97 <div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordtype">int</span> depth = <a class="code" href="a00196.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>);</div>
98 <div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> outmaxnode = -1;</div>
99 <div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> node = NULL;</div>
100 <div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; </div>
101 <div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="comment">/* round-up to the next ulong and clear all bytes */</span></div>
102 <div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; *maxnode = (*maxnode + 8*<span class="keyword">sizeof</span>(*mask) - 1) &amp; ~(8*<span class="keyword">sizeof</span>(*mask) - 1);</div>
103 <div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; memset(mask, 0, *maxnode/8);</div>
104 <div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; </div>
105 <div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordflow">while</span> ((node = <a class="code" href="a00196.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a>(topology, depth, node)) != NULL) {</div>
106 <div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">if</span> (node-&gt;<a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a> &gt;= *maxnode)</div>
107 <div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">continue</span>;</div>
108 <div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00214.html#ga11340dd487f110bb84f0a6e4ae90bd06">hwloc_bitmap_isset</a>(nodeset, node-&gt;<a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>))</div>
109 <div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">continue</span>;</div>
110 <div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; mask[node-&gt;<a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>/<span class="keyword">sizeof</span>(*mask)/8] |= 1UL &lt;&lt; (node-&gt;<a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a> % (<span class="keyword">sizeof</span>(*mask)*8));</div>
111 <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">if</span> (outmaxnode == (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>) -1 || outmaxnode &lt; node-&gt;<a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>)</div>
112 <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; outmaxnode = node-&gt;<a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>;</div>
113 <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; }</div>
114 <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; </div>
115 <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; *maxnode = outmaxnode+1;</div>
116 <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">return</span> 0;</div>
117 <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;}</div>
118 <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; </div>
119 <div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
120 <div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="a00225.html#ga0e9d051e068940f722f6fdc61814149d"> 124</a></span>&#160;<a class="code" href="a00225.html#ga0e9d051e068940f722f6fdc61814149d">hwloc_cpuset_from_linux_libnuma_ulongs</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> cpuset,</div>
121 <div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *mask, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> maxnode)</div>
122 <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;{</div>
123 <div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordtype">int</span> depth = <a class="code" href="a00196.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>);</div>
124 <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> node = NULL;</div>
125 <div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <a class="code" href="a00214.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a>(cpuset);</div>
126 <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">while</span> ((node = <a class="code" href="a00196.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a>(topology, depth, node)) != NULL)</div>
127 <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">if</span> (node-&gt;<a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a> &lt; maxnode</div>
128 <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; &amp;&amp; (mask[node-&gt;<a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>/<span class="keyword">sizeof</span>(*mask)/8] &amp; (1UL &lt;&lt; (node-&gt;<a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a> % (<span class="keyword">sizeof</span>(*mask)*8)))))</div>
129 <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <a class="code" href="a00214.html#ga120b8aefb9ce7ef349929656359b1859">hwloc_bitmap_or</a>(cpuset, cpuset, node-&gt;<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>);</div>
130 <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">return</span> 0;</div>
131 <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;}</div>
132 <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; </div>
133 <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
134 <div class="line"><a name="l00147"></a><span class="lineno"><a class="line" href="a00225.html#gad8491c672eb2594cc5e7b0a026867192"> 147</a></span>&#160;<a class="code" href="a00225.html#gad8491c672eb2594cc5e7b0a026867192">hwloc_nodeset_from_linux_libnuma_ulongs</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00192.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a> nodeset,</div>
135 <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *mask, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> maxnode)</div>
136 <div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;{</div>
137 <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordtype">int</span> depth = <a class="code" href="a00196.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>);</div>
138 <div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> node = NULL;</div>
139 <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <a class="code" href="a00214.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a>(nodeset);</div>
140 <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">while</span> ((node = <a class="code" href="a00196.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a>(topology, depth, node)) != NULL)</div>
141 <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">if</span> (node-&gt;<a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a> &lt; maxnode</div>
142 <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; &amp;&amp; (mask[node-&gt;<a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>/<span class="keyword">sizeof</span>(*mask)/8] &amp; (1UL &lt;&lt; (node-&gt;<a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a> % (<span class="keyword">sizeof</span>(*mask)*8)))))</div>
143 <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <a class="code" href="a00214.html#ga062dbff93baeff3b425a7260c5463646">hwloc_bitmap_set</a>(nodeset, node-&gt;<a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>);</div>
144 <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keywordflow">return</span> 0;</div>
145 <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;}</div>
146 <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; </div>
147 <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keyword">struct </span>bitmask *</div>
148 <div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;<a class="code" href="a00226.html#gad8769b4544c0aeef154fc8223144e343">hwloc_cpuset_to_linux_libnuma_bitmask</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> cpuset) __hwloc_attribute_malloc;</div>
149 <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keyword">struct </span>bitmask *</div>
150 <div class="line"><a name="l00192"></a><span class="lineno"><a class="line" href="a00226.html#gad8769b4544c0aeef154fc8223144e343"> 192</a></span>&#160;<a class="code" href="a00226.html#gad8769b4544c0aeef154fc8223144e343">hwloc_cpuset_to_linux_libnuma_bitmask</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> cpuset)</div>
151 <div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;{</div>
152 <div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordtype">int</span> depth = <a class="code" href="a00196.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>);</div>
153 <div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> node = NULL;</div>
154 <div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keyword">struct </span>bitmask *bitmask = numa_allocate_cpumask();</div>
155 <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordflow">if</span> (!bitmask)</div>
156 <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordflow">return</span> NULL;</div>
157 <div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">while</span> ((node = <a class="code" href="a00205.html#gaba4b6d86eba1169ced4b0e941d2bb5f0">hwloc_get_next_obj_covering_cpuset_by_depth</a>(topology, cpuset, depth, node)) != NULL)</div>
158 <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">if</span> (node-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#ad066b9612802ffa01e132dc3a8e6cc86">numanode</a>.<a class="code" href="a00258.html#a6703cbf2afbf63c9d60c5ff4dc0c73aa">local_memory</a>)</div>
159 <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; numa_bitmask_setbit(bitmask, node-&gt;<a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>);</div>
160 <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">return</span> bitmask;</div>
161 <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;}</div>
162 <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; </div>
163 <div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keyword">struct </span>bitmask *</div>
164 <div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;<a class="code" href="a00226.html#gadfaa14c1bec76965ac2e05f0c3f3473b">hwloc_nodeset_to_linux_libnuma_bitmask</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00192.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> nodeset) __hwloc_attribute_malloc;</div>
165 <div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keyword">struct </span>bitmask *</div>
166 <div class="line"><a name="l00217"></a><span class="lineno"><a class="line" href="a00226.html#gadfaa14c1bec76965ac2e05f0c3f3473b"> 217</a></span>&#160;<a class="code" href="a00226.html#gadfaa14c1bec76965ac2e05f0c3f3473b">hwloc_nodeset_to_linux_libnuma_bitmask</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00192.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> nodeset)</div>
167 <div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;{</div>
168 <div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordtype">int</span> depth = <a class="code" href="a00196.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>);</div>
169 <div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> node = NULL;</div>
170 <div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keyword">struct </span>bitmask *bitmask = numa_allocate_cpumask();</div>
171 <div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">if</span> (!bitmask)</div>
172 <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">return</span> NULL;</div>
173 <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">while</span> ((node = <a class="code" href="a00196.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a>(topology, depth, node)) != NULL)</div>
174 <div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00214.html#ga11340dd487f110bb84f0a6e4ae90bd06">hwloc_bitmap_isset</a>(nodeset, node-&gt;<a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>) &amp;&amp; node-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#ad066b9612802ffa01e132dc3a8e6cc86">numanode</a>.<a class="code" href="a00258.html#a6703cbf2afbf63c9d60c5ff4dc0c73aa">local_memory</a>)</div>
175 <div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; numa_bitmask_setbit(bitmask, node-&gt;<a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>);</div>
176 <div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">return</span> bitmask;</div>
177 <div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;}</div>
178 <div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; </div>
179 <div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
180 <div class="line"><a name="l00236"></a><span class="lineno"><a class="line" href="a00226.html#ga37c8421110b1842414809019098794ef"> 236</a></span>&#160;<a class="code" href="a00226.html#ga37c8421110b1842414809019098794ef">hwloc_cpuset_from_linux_libnuma_bitmask</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> cpuset,</div>
181 <div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keyword">const</span> <span class="keyword">struct</span> bitmask *bitmask)</div>
182 <div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;{</div>
183 <div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordtype">int</span> depth = <a class="code" href="a00196.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>);</div>
184 <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> node = NULL;</div>
185 <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <a class="code" href="a00214.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a>(cpuset);</div>
186 <div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordflow">while</span> ((node = <a class="code" href="a00196.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a>(topology, depth, node)) != NULL)</div>
187 <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">if</span> (numa_bitmask_isbitset(bitmask, node-&gt;<a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>))</div>
188 <div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <a class="code" href="a00214.html#ga120b8aefb9ce7ef349929656359b1859">hwloc_bitmap_or</a>(cpuset, cpuset, node-&gt;<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>);</div>
189 <div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">return</span> 0;</div>
190 <div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;}</div>
191 <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; </div>
192 <div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
193 <div class="line"><a name="l00254"></a><span class="lineno"><a class="line" href="a00226.html#gaaca6bff3086aad5bdbd2f4c5f0ad14cc"> 254</a></span>&#160;<a class="code" href="a00226.html#gaaca6bff3086aad5bdbd2f4c5f0ad14cc">hwloc_nodeset_from_linux_libnuma_bitmask</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00192.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a> nodeset,</div>
194 <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keyword">const</span> <span class="keyword">struct</span> bitmask *bitmask)</div>
195 <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;{</div>
196 <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordtype">int</span> depth = <a class="code" href="a00196.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>);</div>
197 <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> node = NULL;</div>
198 <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <a class="code" href="a00214.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a>(nodeset);</div>
199 <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">while</span> ((node = <a class="code" href="a00196.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a>(topology, depth, node)) != NULL)</div>
200 <div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keywordflow">if</span> (numa_bitmask_isbitset(bitmask, node-&gt;<a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>))</div>
201 <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <a class="code" href="a00214.html#ga062dbff93baeff3b425a7260c5463646">hwloc_bitmap_set</a>(nodeset, node-&gt;<a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>);</div>
202 <div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">return</span> 0;</div>
203 <div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;}</div>
204 <div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; </div>
205 <div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
206 <div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
207 <div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;<span class="preprocessor">#endif</span></div>
208 <div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; </div>
209 <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; </div>
210 <div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_LINUX_NUMA_H */</span><span class="preprocessor"></span></div>
211 <div class="ttc" id="aa00192_html_ga1f784433e9b606261f62d1134f6a3b25"><div class="ttname"><a href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a></div><div class="ttdeci">hwloc_const_bitmap_t hwloc_const_cpuset_t</div><div class="ttdoc">A non-modifiable hwloc_cpuset_t.</div><div class="ttdef"><b>Definition:</b> hwloc.h:142</div></div>
212 <div class="ttc" id="aa00192_html_ga2f5276235841ad66a79bedad16a5a10c"><div class="ttname"><a href="a00192.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a></div><div class="ttdeci">hwloc_const_bitmap_t hwloc_const_nodeset_t</div><div class="ttdoc">A non-modifiable hwloc_nodeset_t.</div><div class="ttdef"><b>Definition:</b> hwloc.h:160</div></div>
213 <div class="ttc" id="aa00192_html_ga37e35730fa7e775b5bb0afe893d6d508"><div class="ttname"><a href="a00192.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_nodeset_t</div><div class="ttdoc">A node set is a bitmap whose bits are set according to NUMA memory node physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:157</div></div>
214 <div class="ttc" id="aa00192_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
215 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a></div><div class="ttdeci">@ HWLOC_OBJ_NUMANODE</div><div class="ttdoc">NUMA node. An object that contains memory that is directly and byte-accessible to the host processors...</div><div class="ttdef"><b>Definition:</b> hwloc.h:236</div></div>
216 <div class="ttc" id="aa00195_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
217 <div class="ttc" id="aa00196_html_ga8bec782e21be313750da70cf7428b374"><div class="ttname"><a href="a00196.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a></div><div class="ttdeci">int hwloc_get_type_depth(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Returns the depth of objects of type type.</div></div>
218 <div class="ttc" id="aa00196_html_gac140a9b939d9fa0b30c4a910efcb0656"><div class="ttname"><a href="a00196.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_obj_by_depth(hwloc_topology_t topology, int depth, hwloc_obj_t prev)</div><div class="ttdoc">Returns the next object at depth depth.</div></div>
219 <div class="ttc" id="aa00205_html_gaba4b6d86eba1169ced4b0e941d2bb5f0"><div class="ttname"><a href="a00205.html#gaba4b6d86eba1169ced4b0e941d2bb5f0">hwloc_get_next_obj_covering_cpuset_by_depth</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_obj_covering_cpuset_by_depth(hwloc_topology_t topology, hwloc_const_cpuset_t set, int depth, hwloc_obj_t prev)</div><div class="ttdoc">Iterate through same-depth objects covering at least CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:321</div></div>
220 <div class="ttc" id="aa00214_html_ga062dbff93baeff3b425a7260c5463646"><div class="ttname"><a href="a00214.html#ga062dbff93baeff3b425a7260c5463646">hwloc_bitmap_set</a></div><div class="ttdeci">int hwloc_bitmap_set(hwloc_bitmap_t bitmap, unsigned id)</div><div class="ttdoc">Add index id in bitmap bitmap.</div></div>
221 <div class="ttc" id="aa00214_html_ga11340dd487f110bb84f0a6e4ae90bd06"><div class="ttname"><a href="a00214.html#ga11340dd487f110bb84f0a6e4ae90bd06">hwloc_bitmap_isset</a></div><div class="ttdeci">int hwloc_bitmap_isset(hwloc_const_bitmap_t bitmap, unsigned id)</div><div class="ttdoc">Test whether index id is part of bitmap bitmap.</div></div>
222 <div class="ttc" id="aa00214_html_ga120b8aefb9ce7ef349929656359b1859"><div class="ttname"><a href="a00214.html#ga120b8aefb9ce7ef349929656359b1859">hwloc_bitmap_or</a></div><div class="ttdeci">int hwloc_bitmap_or(hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">Or bitmaps bitmap1 and bitmap2 and store the result in bitmap res.</div></div>
223 <div class="ttc" id="aa00214_html_gaa97c5217613c8cae9862287170ea2132"><div class="ttname"><a href="a00214.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a></div><div class="ttdeci">void hwloc_bitmap_zero(hwloc_bitmap_t bitmap)</div><div class="ttdoc">Empty the bitmap bitmap.</div></div>
224 <div class="ttc" id="aa00225_html_ga0e9d051e068940f722f6fdc61814149d"><div class="ttname"><a href="a00225.html#ga0e9d051e068940f722f6fdc61814149d">hwloc_cpuset_from_linux_libnuma_ulongs</a></div><div class="ttdeci">static int hwloc_cpuset_from_linux_libnuma_ulongs(hwloc_topology_t topology, hwloc_cpuset_t cpuset, const unsigned long *mask, unsigned long maxnode)</div><div class="ttdoc">Convert the array of unsigned long mask into hwloc CPU set.</div><div class="ttdef"><b>Definition:</b> linux-libnuma.h:124</div></div>
225 <div class="ttc" id="aa00225_html_ga585ccf818d2f217f4e53f9c6506c3128"><div class="ttname"><a href="a00225.html#ga585ccf818d2f217f4e53f9c6506c3128">hwloc_nodeset_to_linux_libnuma_ulongs</a></div><div class="ttdeci">static int hwloc_nodeset_to_linux_libnuma_ulongs(hwloc_topology_t topology, hwloc_const_nodeset_t nodeset, unsigned long *mask, unsigned long *maxnode)</div><div class="ttdoc">Convert hwloc NUMA node set nodeset into the array of unsigned long mask.</div><div class="ttdef"><b>Definition:</b> linux-libnuma.h:89</div></div>
226 <div class="ttc" id="aa00225_html_gad8491c672eb2594cc5e7b0a026867192"><div class="ttname"><a href="a00225.html#gad8491c672eb2594cc5e7b0a026867192">hwloc_nodeset_from_linux_libnuma_ulongs</a></div><div class="ttdeci">static int hwloc_nodeset_from_linux_libnuma_ulongs(hwloc_topology_t topology, hwloc_nodeset_t nodeset, const unsigned long *mask, unsigned long maxnode)</div><div class="ttdoc">Convert the array of unsigned long mask into hwloc NUMA node set.</div><div class="ttdef"><b>Definition:</b> linux-libnuma.h:147</div></div>
227 <div class="ttc" id="aa00225_html_gae577962390f84b0b12f503314ab0f972"><div class="ttname"><a href="a00225.html#gae577962390f84b0b12f503314ab0f972">hwloc_cpuset_to_linux_libnuma_ulongs</a></div><div class="ttdeci">static int hwloc_cpuset_to_linux_libnuma_ulongs(hwloc_topology_t topology, hwloc_const_cpuset_t cpuset, unsigned long *mask, unsigned long *maxnode)</div><div class="ttdoc">Convert hwloc CPU set cpuset into the array of unsigned long mask.</div><div class="ttdef"><b>Definition:</b> linux-libnuma.h:55</div></div>
228 <div class="ttc" id="aa00226_html_ga37c8421110b1842414809019098794ef"><div class="ttname"><a href="a00226.html#ga37c8421110b1842414809019098794ef">hwloc_cpuset_from_linux_libnuma_bitmask</a></div><div class="ttdeci">static int hwloc_cpuset_from_linux_libnuma_bitmask(hwloc_topology_t topology, hwloc_cpuset_t cpuset, const struct bitmask *bitmask)</div><div class="ttdoc">Convert libnuma bitmask bitmask into hwloc CPU set cpuset.</div><div class="ttdef"><b>Definition:</b> linux-libnuma.h:236</div></div>
229 <div class="ttc" id="aa00226_html_gaaca6bff3086aad5bdbd2f4c5f0ad14cc"><div class="ttname"><a href="a00226.html#gaaca6bff3086aad5bdbd2f4c5f0ad14cc">hwloc_nodeset_from_linux_libnuma_bitmask</a></div><div class="ttdeci">static int hwloc_nodeset_from_linux_libnuma_bitmask(hwloc_topology_t topology, hwloc_nodeset_t nodeset, const struct bitmask *bitmask)</div><div class="ttdoc">Convert libnuma bitmask bitmask into hwloc NUMA node set nodeset.</div><div class="ttdef"><b>Definition:</b> linux-libnuma.h:254</div></div>
230 <div class="ttc" id="aa00226_html_gad8769b4544c0aeef154fc8223144e343"><div class="ttname"><a href="a00226.html#gad8769b4544c0aeef154fc8223144e343">hwloc_cpuset_to_linux_libnuma_bitmask</a></div><div class="ttdeci">static struct bitmask * hwloc_cpuset_to_linux_libnuma_bitmask(hwloc_topology_t topology, hwloc_const_cpuset_t cpuset)</div><div class="ttdoc">Convert hwloc CPU set cpuset into the returned libnuma bitmask.</div><div class="ttdef"><b>Definition:</b> linux-libnuma.h:192</div></div>
231 <div class="ttc" id="aa00226_html_gadfaa14c1bec76965ac2e05f0c3f3473b"><div class="ttname"><a href="a00226.html#gadfaa14c1bec76965ac2e05f0c3f3473b">hwloc_nodeset_to_linux_libnuma_bitmask</a></div><div class="ttdeci">static struct bitmask * hwloc_nodeset_to_linux_libnuma_bitmask(hwloc_topology_t topology, hwloc_const_nodeset_t nodeset)</div><div class="ttdoc">Convert hwloc NUMA node set nodeset into the returned libnuma bitmask.</div><div class="ttdef"><b>Definition:</b> linux-libnuma.h:217</div></div>
232 <div class="ttc" id="aa00250_html"><div class="ttname"><a href="a00250.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:395</div></div>
233 <div class="ttc" id="aa00250_html_a61a7a80a68eaccbaaa28269e678c81a9"><div class="ttname"><a href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">hwloc_obj::os_index</a></div><div class="ttdeci">unsigned os_index</div><div class="ttdoc">OS-provided physical index number. It is not guaranteed unique across the entire machine,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:400</div></div>
234 <div class="ttc" id="aa00250_html_a67925e0f2c47f50408fbdb9bddd0790f"><div class="ttname"><a href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">hwloc_obj::cpuset</a></div><div class="ttdeci">hwloc_cpuset_t cpuset</div><div class="ttdoc">CPUs covered by this object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:511</div></div>
235 <div class="ttc" id="aa00250_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:414</div></div>
236 <div class="ttc" id="aa00254_html_ad066b9612802ffa01e132dc3a8e6cc86"><div class="ttname"><a href="a00254.html#ad066b9612802ffa01e132dc3a8e6cc86">hwloc_obj_attr_u::numanode</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_numanode_attr_s numanode</div></div>
237 <div class="ttc" id="aa00258_html_a6703cbf2afbf63c9d60c5ff4dc0c73aa"><div class="ttname"><a href="a00258.html#a6703cbf2afbf63c9d60c5ff4dc0c73aa">hwloc_obj_attr_u::hwloc_numanode_attr_s::local_memory</a></div><div class="ttdeci">hwloc_uint64_t local_memory</div><div class="ttdoc">Local memory (in bytes)</div><div class="ttdef"><b>Definition:</b> hwloc.h:601</div></div>
91238 </div><!-- fragment --></div><!-- contents -->
92239 <!-- start footer part -->
93240 <hr class="footer"/><address class="footer"><small>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): linux-libnuma.h Source File</title>
7 <title>Hardware Locality (hwloc): windows.h Source File</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4343 </div><!-- top -->
4444 <div class="header">
4545 <div class="headertitle">
46 <div class="title">linux-libnuma.h</div> </div>
46 <div class="title">windows.h</div> </div>
4747 </div><!--header-->
4848 <div class="contents">
4949 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
50 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2009 CNRS</span></div>
51 <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * Copyright © 2009-2017 Inria. All rights reserved.</span></div>
52 <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Copyright © 2009-2010, 2012 Université Bordeaux</span></div>
53 <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
54 <div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> */</span></div>
55 <div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160; </div>
56 <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef HWLOC_LINUX_LIBNUMA_H</span></div>
57 <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define HWLOC_LINUX_LIBNUMA_H</span></div>
50 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2021 Inria. All rights reserved.</span></div>
51 <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
52 <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> */</span></div>
53 <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; </div>
54 <div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#ifndef HWLOC_WINDOWS_H</span></div>
55 <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#define HWLOC_WINDOWS_H</span></div>
56 <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; </div>
57 <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &quot;hwloc.h&quot;</span></div>
5858 <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; </div>
59 <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &quot;hwloc.h&quot;</span></div>
60 <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160; </div>
61 <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;numa.h&gt;</span></div>
62 <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
59 <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; </div>
60 <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
61 <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
62 <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#endif</span></div>
6363 <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
64 <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
65 <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
66 <div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#endif</span></div>
67 <div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
68 <div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
69 <div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
70 <div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="a00221.html#gae577962390f84b0b12f503314ab0f972"> 55</a></span>&#160;<a class="code" href="a00221.html#gae577962390f84b0b12f503314ab0f972">hwloc_cpuset_to_linux_libnuma_ulongs</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> cpuset,</div>
71 <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *mask, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *maxnode)</div>
72 <div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;{</div>
73 <div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordtype">int</span> depth = <a class="code" href="a00193.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>);</div>
74 <div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> outmaxnode = -1;</div>
75 <div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> node = NULL;</div>
76 <div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; </div>
77 <div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="comment">/* round-up to the next ulong and clear all bytes */</span></div>
78 <div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; *maxnode = (*maxnode + 8*<span class="keyword">sizeof</span>(*mask) - 1) &amp; ~(8*<span class="keyword">sizeof</span>(*mask) - 1);</div>
79 <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; memset(mask, 0, *maxnode/8);</div>
80 <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; </div>
81 <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">while</span> ((node = <a class="code" href="a00202.html#gaba4b6d86eba1169ced4b0e941d2bb5f0">hwloc_get_next_obj_covering_cpuset_by_depth</a>(topology, cpuset, depth, node)) != NULL) {</div>
82 <div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">if</span> (node-&gt;<a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a> &gt;= *maxnode)</div>
83 <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">continue</span>;</div>
84 <div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; mask[node-&gt;<a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>/<span class="keyword">sizeof</span>(*mask)/8] |= 1UL &lt;&lt; (node-&gt;<a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a> % (<span class="keyword">sizeof</span>(*mask)*8));</div>
85 <div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">if</span> (outmaxnode == (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>) -1 || outmaxnode &lt; node-&gt;<a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>)</div>
86 <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; outmaxnode = node-&gt;<a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>;</div>
87 <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; }</div>
88 <div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; </div>
89 <div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; *maxnode = outmaxnode+1;</div>
90 <div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">return</span> 0;</div>
91 <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;}</div>
92 <div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; </div>
93 <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
94 <div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="a00221.html#ga585ccf818d2f217f4e53f9c6506c3128"> 89</a></span>&#160;<a class="code" href="a00221.html#ga585ccf818d2f217f4e53f9c6506c3128">hwloc_nodeset_to_linux_libnuma_ulongs</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00189.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> nodeset,</div>
95 <div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *mask, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *maxnode)</div>
96 <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;{</div>
97 <div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordtype">int</span> depth = <a class="code" href="a00193.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>);</div>
98 <div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> outmaxnode = -1;</div>
99 <div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> node = NULL;</div>
100 <div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; </div>
101 <div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="comment">/* round-up to the next ulong and clear all bytes */</span></div>
102 <div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; *maxnode = (*maxnode + 8*<span class="keyword">sizeof</span>(*mask) - 1) &amp; ~(8*<span class="keyword">sizeof</span>(*mask) - 1);</div>
103 <div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; memset(mask, 0, *maxnode/8);</div>
104 <div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; </div>
105 <div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="keywordflow">while</span> ((node = <a class="code" href="a00193.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a>(topology, depth, node)) != NULL) {</div>
106 <div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">if</span> (node-&gt;<a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a> &gt;= *maxnode)</div>
107 <div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">continue</span>;</div>
108 <div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00211.html#ga11340dd487f110bb84f0a6e4ae90bd06">hwloc_bitmap_isset</a>(nodeset, node-&gt;<a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>))</div>
109 <div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">continue</span>;</div>
110 <div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; mask[node-&gt;<a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>/<span class="keyword">sizeof</span>(*mask)/8] |= 1UL &lt;&lt; (node-&gt;<a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a> % (<span class="keyword">sizeof</span>(*mask)*8));</div>
111 <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">if</span> (outmaxnode == (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>) -1 || outmaxnode &lt; node-&gt;<a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>)</div>
112 <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; outmaxnode = node-&gt;<a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>;</div>
113 <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; }</div>
114 <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; </div>
115 <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; *maxnode = outmaxnode+1;</div>
116 <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">return</span> 0;</div>
117 <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;}</div>
118 <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; </div>
119 <div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
120 <div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="a00221.html#ga0e9d051e068940f722f6fdc61814149d"> 124</a></span>&#160;<a class="code" href="a00221.html#ga0e9d051e068940f722f6fdc61814149d">hwloc_cpuset_from_linux_libnuma_ulongs</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> cpuset,</div>
121 <div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *mask, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> maxnode)</div>
122 <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;{</div>
123 <div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordtype">int</span> depth = <a class="code" href="a00193.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>);</div>
124 <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> node = NULL;</div>
125 <div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <a class="code" href="a00211.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a>(cpuset);</div>
126 <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">while</span> ((node = <a class="code" href="a00193.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a>(topology, depth, node)) != NULL)</div>
127 <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">if</span> (node-&gt;<a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a> &lt; maxnode</div>
128 <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; &amp;&amp; (mask[node-&gt;<a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>/<span class="keyword">sizeof</span>(*mask)/8] &amp; (1UL &lt;&lt; (node-&gt;<a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a> % (<span class="keyword">sizeof</span>(*mask)*8)))))</div>
129 <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <a class="code" href="a00211.html#ga120b8aefb9ce7ef349929656359b1859">hwloc_bitmap_or</a>(cpuset, cpuset, node-&gt;<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>);</div>
130 <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">return</span> 0;</div>
131 <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;}</div>
132 <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; </div>
133 <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
134 <div class="line"><a name="l00147"></a><span class="lineno"><a class="line" href="a00221.html#gad8491c672eb2594cc5e7b0a026867192"> 147</a></span>&#160;<a class="code" href="a00221.html#gad8491c672eb2594cc5e7b0a026867192">hwloc_nodeset_from_linux_libnuma_ulongs</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00189.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a> nodeset,</div>
135 <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> *mask, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> maxnode)</div>
136 <div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;{</div>
137 <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordtype">int</span> depth = <a class="code" href="a00193.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>);</div>
138 <div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> node = NULL;</div>
139 <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <a class="code" href="a00211.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a>(nodeset);</div>
140 <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">while</span> ((node = <a class="code" href="a00193.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a>(topology, depth, node)) != NULL)</div>
141 <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">if</span> (node-&gt;<a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a> &lt; maxnode</div>
142 <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; &amp;&amp; (mask[node-&gt;<a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>/<span class="keyword">sizeof</span>(*mask)/8] &amp; (1UL &lt;&lt; (node-&gt;<a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a> % (<span class="keyword">sizeof</span>(*mask)*8)))))</div>
143 <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <a class="code" href="a00211.html#ga062dbff93baeff3b425a7260c5463646">hwloc_bitmap_set</a>(nodeset, node-&gt;<a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>);</div>
144 <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keywordflow">return</span> 0;</div>
145 <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;}</div>
146 <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; </div>
147 <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keyword">struct </span>bitmask *</div>
148 <div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160;<a class="code" href="a00222.html#gad8769b4544c0aeef154fc8223144e343">hwloc_cpuset_to_linux_libnuma_bitmask</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> cpuset) __hwloc_attribute_malloc;</div>
149 <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keyword">struct </span>bitmask *</div>
150 <div class="line"><a name="l00192"></a><span class="lineno"><a class="line" href="a00222.html#gad8769b4544c0aeef154fc8223144e343"> 192</a></span>&#160;<a class="code" href="a00222.html#gad8769b4544c0aeef154fc8223144e343">hwloc_cpuset_to_linux_libnuma_bitmask</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> cpuset)</div>
151 <div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;{</div>
152 <div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordtype">int</span> depth = <a class="code" href="a00193.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>);</div>
153 <div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> node = NULL;</div>
154 <div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keyword">struct </span>bitmask *bitmask = numa_allocate_cpumask();</div>
155 <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keywordflow">if</span> (!bitmask)</div>
156 <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordflow">return</span> NULL;</div>
157 <div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">while</span> ((node = <a class="code" href="a00202.html#gaba4b6d86eba1169ced4b0e941d2bb5f0">hwloc_get_next_obj_covering_cpuset_by_depth</a>(topology, cpuset, depth, node)) != NULL)</div>
158 <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">if</span> (node-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#ad066b9612802ffa01e132dc3a8e6cc86">numanode</a>.<a class="code" href="a00252.html#a6703cbf2afbf63c9d60c5ff4dc0c73aa">local_memory</a>)</div>
159 <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; numa_bitmask_setbit(bitmask, node-&gt;<a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>);</div>
160 <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">return</span> bitmask;</div>
161 <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;}</div>
162 <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; </div>
163 <div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keyword">struct </span>bitmask *</div>
164 <div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160;<a class="code" href="a00222.html#gadfaa14c1bec76965ac2e05f0c3f3473b">hwloc_nodeset_to_linux_libnuma_bitmask</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00189.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> nodeset) __hwloc_attribute_malloc;</div>
165 <div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keyword">struct </span>bitmask *</div>
166 <div class="line"><a name="l00217"></a><span class="lineno"><a class="line" href="a00222.html#gadfaa14c1bec76965ac2e05f0c3f3473b"> 217</a></span>&#160;<a class="code" href="a00222.html#gadfaa14c1bec76965ac2e05f0c3f3473b">hwloc_nodeset_to_linux_libnuma_bitmask</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00189.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> nodeset)</div>
167 <div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;{</div>
168 <div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordtype">int</span> depth = <a class="code" href="a00193.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>);</div>
169 <div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> node = NULL;</div>
170 <div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keyword">struct </span>bitmask *bitmask = numa_allocate_cpumask();</div>
171 <div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">if</span> (!bitmask)</div>
172 <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">return</span> NULL;</div>
173 <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">while</span> ((node = <a class="code" href="a00193.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a>(topology, depth, node)) != NULL)</div>
174 <div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00211.html#ga11340dd487f110bb84f0a6e4ae90bd06">hwloc_bitmap_isset</a>(nodeset, node-&gt;<a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>) &amp;&amp; node-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#ad066b9612802ffa01e132dc3a8e6cc86">numanode</a>.<a class="code" href="a00252.html#a6703cbf2afbf63c9d60c5ff4dc0c73aa">local_memory</a>)</div>
175 <div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; numa_bitmask_setbit(bitmask, node-&gt;<a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>);</div>
176 <div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">return</span> bitmask;</div>
177 <div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;}</div>
178 <div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; </div>
179 <div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
180 <div class="line"><a name="l00236"></a><span class="lineno"><a class="line" href="a00222.html#ga37c8421110b1842414809019098794ef"> 236</a></span>&#160;<a class="code" href="a00222.html#ga37c8421110b1842414809019098794ef">hwloc_cpuset_from_linux_libnuma_bitmask</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> cpuset,</div>
181 <div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keyword">const</span> <span class="keyword">struct</span> bitmask *bitmask)</div>
182 <div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;{</div>
183 <div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordtype">int</span> depth = <a class="code" href="a00193.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>);</div>
184 <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> node = NULL;</div>
185 <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <a class="code" href="a00211.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a>(cpuset);</div>
186 <div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordflow">while</span> ((node = <a class="code" href="a00193.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a>(topology, depth, node)) != NULL)</div>
187 <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">if</span> (numa_bitmask_isbitset(bitmask, node-&gt;<a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>))</div>
188 <div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <a class="code" href="a00211.html#ga120b8aefb9ce7ef349929656359b1859">hwloc_bitmap_or</a>(cpuset, cpuset, node-&gt;<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>);</div>
189 <div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">return</span> 0;</div>
190 <div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;}</div>
191 <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; </div>
192 <div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
193 <div class="line"><a name="l00254"></a><span class="lineno"><a class="line" href="a00222.html#gaaca6bff3086aad5bdbd2f4c5f0ad14cc"> 254</a></span>&#160;<a class="code" href="a00222.html#gaaca6bff3086aad5bdbd2f4c5f0ad14cc">hwloc_nodeset_from_linux_libnuma_bitmask</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00189.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a> nodeset,</div>
194 <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keyword">const</span> <span class="keyword">struct</span> bitmask *bitmask)</div>
195 <div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;{</div>
196 <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordtype">int</span> depth = <a class="code" href="a00193.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>);</div>
197 <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> node = NULL;</div>
198 <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <a class="code" href="a00211.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a>(nodeset);</div>
199 <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">while</span> ((node = <a class="code" href="a00193.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a>(topology, depth, node)) != NULL)</div>
200 <div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keywordflow">if</span> (numa_bitmask_isbitset(bitmask, node-&gt;<a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>))</div>
201 <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <a class="code" href="a00211.html#ga062dbff93baeff3b425a7260c5463646">hwloc_bitmap_set</a>(nodeset, node-&gt;<a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>);</div>
202 <div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">return</span> 0;</div>
203 <div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;}</div>
204 <div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; </div>
205 <div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
206 <div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
207 <div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160;<span class="preprocessor">#endif</span></div>
208 <div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; </div>
209 <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; </div>
210 <div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_LINUX_NUMA_H */</span><span class="preprocessor"></span></div>
211 <div class="ttc" id="aa00189_html_ga1f784433e9b606261f62d1134f6a3b25"><div class="ttname"><a href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a></div><div class="ttdeci">hwloc_const_bitmap_t hwloc_const_cpuset_t</div><div class="ttdoc">A non-modifiable hwloc_cpuset_t.</div><div class="ttdef"><b>Definition:</b> hwloc.h:142</div></div>
212 <div class="ttc" id="aa00189_html_ga2f5276235841ad66a79bedad16a5a10c"><div class="ttname"><a href="a00189.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a></div><div class="ttdeci">hwloc_const_bitmap_t hwloc_const_nodeset_t</div><div class="ttdoc">A non-modifiable hwloc_nodeset_t.</div><div class="ttdef"><b>Definition:</b> hwloc.h:160</div></div>
213 <div class="ttc" id="aa00189_html_ga37e35730fa7e775b5bb0afe893d6d508"><div class="ttname"><a href="a00189.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_nodeset_t</div><div class="ttdoc">A node set is a bitmap whose bits are set according to NUMA memory node physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:157</div></div>
214 <div class="ttc" id="aa00189_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
215 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a></div><div class="ttdeci">@ HWLOC_OBJ_NUMANODE</div><div class="ttdoc">NUMA node. An object that contains memory that is directly and byte-accessible to the host processors...</div><div class="ttdef"><b>Definition:</b> hwloc.h:236</div></div>
216 <div class="ttc" id="aa00192_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
217 <div class="ttc" id="aa00193_html_ga8bec782e21be313750da70cf7428b374"><div class="ttname"><a href="a00193.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a></div><div class="ttdeci">int hwloc_get_type_depth(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Returns the depth of objects of type type.</div></div>
218 <div class="ttc" id="aa00193_html_gac140a9b939d9fa0b30c4a910efcb0656"><div class="ttname"><a href="a00193.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_obj_by_depth(hwloc_topology_t topology, int depth, hwloc_obj_t prev)</div><div class="ttdoc">Returns the next object at depth depth.</div></div>
219 <div class="ttc" id="aa00202_html_gaba4b6d86eba1169ced4b0e941d2bb5f0"><div class="ttname"><a href="a00202.html#gaba4b6d86eba1169ced4b0e941d2bb5f0">hwloc_get_next_obj_covering_cpuset_by_depth</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_obj_covering_cpuset_by_depth(hwloc_topology_t topology, hwloc_const_cpuset_t set, int depth, hwloc_obj_t prev)</div><div class="ttdoc">Iterate through same-depth objects covering at least CPU set set.</div><div class="ttdef"><b>Definition:</b> helper.h:321</div></div>
220 <div class="ttc" id="aa00211_html_ga062dbff93baeff3b425a7260c5463646"><div class="ttname"><a href="a00211.html#ga062dbff93baeff3b425a7260c5463646">hwloc_bitmap_set</a></div><div class="ttdeci">int hwloc_bitmap_set(hwloc_bitmap_t bitmap, unsigned id)</div><div class="ttdoc">Add index id in bitmap bitmap.</div></div>
221 <div class="ttc" id="aa00211_html_ga11340dd487f110bb84f0a6e4ae90bd06"><div class="ttname"><a href="a00211.html#ga11340dd487f110bb84f0a6e4ae90bd06">hwloc_bitmap_isset</a></div><div class="ttdeci">int hwloc_bitmap_isset(hwloc_const_bitmap_t bitmap, unsigned id)</div><div class="ttdoc">Test whether index id is part of bitmap bitmap.</div></div>
222 <div class="ttc" id="aa00211_html_ga120b8aefb9ce7ef349929656359b1859"><div class="ttname"><a href="a00211.html#ga120b8aefb9ce7ef349929656359b1859">hwloc_bitmap_or</a></div><div class="ttdeci">int hwloc_bitmap_or(hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">Or bitmaps bitmap1 and bitmap2 and store the result in bitmap res.</div></div>
223 <div class="ttc" id="aa00211_html_gaa97c5217613c8cae9862287170ea2132"><div class="ttname"><a href="a00211.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a></div><div class="ttdeci">void hwloc_bitmap_zero(hwloc_bitmap_t bitmap)</div><div class="ttdoc">Empty the bitmap bitmap.</div></div>
224 <div class="ttc" id="aa00221_html_ga0e9d051e068940f722f6fdc61814149d"><div class="ttname"><a href="a00221.html#ga0e9d051e068940f722f6fdc61814149d">hwloc_cpuset_from_linux_libnuma_ulongs</a></div><div class="ttdeci">static int hwloc_cpuset_from_linux_libnuma_ulongs(hwloc_topology_t topology, hwloc_cpuset_t cpuset, const unsigned long *mask, unsigned long maxnode)</div><div class="ttdoc">Convert the array of unsigned long mask into hwloc CPU set.</div><div class="ttdef"><b>Definition:</b> linux-libnuma.h:124</div></div>
225 <div class="ttc" id="aa00221_html_ga585ccf818d2f217f4e53f9c6506c3128"><div class="ttname"><a href="a00221.html#ga585ccf818d2f217f4e53f9c6506c3128">hwloc_nodeset_to_linux_libnuma_ulongs</a></div><div class="ttdeci">static int hwloc_nodeset_to_linux_libnuma_ulongs(hwloc_topology_t topology, hwloc_const_nodeset_t nodeset, unsigned long *mask, unsigned long *maxnode)</div><div class="ttdoc">Convert hwloc NUMA node set nodeset into the array of unsigned long mask.</div><div class="ttdef"><b>Definition:</b> linux-libnuma.h:89</div></div>
226 <div class="ttc" id="aa00221_html_gad8491c672eb2594cc5e7b0a026867192"><div class="ttname"><a href="a00221.html#gad8491c672eb2594cc5e7b0a026867192">hwloc_nodeset_from_linux_libnuma_ulongs</a></div><div class="ttdeci">static int hwloc_nodeset_from_linux_libnuma_ulongs(hwloc_topology_t topology, hwloc_nodeset_t nodeset, const unsigned long *mask, unsigned long maxnode)</div><div class="ttdoc">Convert the array of unsigned long mask into hwloc NUMA node set.</div><div class="ttdef"><b>Definition:</b> linux-libnuma.h:147</div></div>
227 <div class="ttc" id="aa00221_html_gae577962390f84b0b12f503314ab0f972"><div class="ttname"><a href="a00221.html#gae577962390f84b0b12f503314ab0f972">hwloc_cpuset_to_linux_libnuma_ulongs</a></div><div class="ttdeci">static int hwloc_cpuset_to_linux_libnuma_ulongs(hwloc_topology_t topology, hwloc_const_cpuset_t cpuset, unsigned long *mask, unsigned long *maxnode)</div><div class="ttdoc">Convert hwloc CPU set cpuset into the array of unsigned long mask.</div><div class="ttdef"><b>Definition:</b> linux-libnuma.h:55</div></div>
228 <div class="ttc" id="aa00222_html_ga37c8421110b1842414809019098794ef"><div class="ttname"><a href="a00222.html#ga37c8421110b1842414809019098794ef">hwloc_cpuset_from_linux_libnuma_bitmask</a></div><div class="ttdeci">static int hwloc_cpuset_from_linux_libnuma_bitmask(hwloc_topology_t topology, hwloc_cpuset_t cpuset, const struct bitmask *bitmask)</div><div class="ttdoc">Convert libnuma bitmask bitmask into hwloc CPU set cpuset.</div><div class="ttdef"><b>Definition:</b> linux-libnuma.h:236</div></div>
229 <div class="ttc" id="aa00222_html_gaaca6bff3086aad5bdbd2f4c5f0ad14cc"><div class="ttname"><a href="a00222.html#gaaca6bff3086aad5bdbd2f4c5f0ad14cc">hwloc_nodeset_from_linux_libnuma_bitmask</a></div><div class="ttdeci">static int hwloc_nodeset_from_linux_libnuma_bitmask(hwloc_topology_t topology, hwloc_nodeset_t nodeset, const struct bitmask *bitmask)</div><div class="ttdoc">Convert libnuma bitmask bitmask into hwloc NUMA node set nodeset.</div><div class="ttdef"><b>Definition:</b> linux-libnuma.h:254</div></div>
230 <div class="ttc" id="aa00222_html_gad8769b4544c0aeef154fc8223144e343"><div class="ttname"><a href="a00222.html#gad8769b4544c0aeef154fc8223144e343">hwloc_cpuset_to_linux_libnuma_bitmask</a></div><div class="ttdeci">static struct bitmask * hwloc_cpuset_to_linux_libnuma_bitmask(hwloc_topology_t topology, hwloc_const_cpuset_t cpuset)</div><div class="ttdoc">Convert hwloc CPU set cpuset into the returned libnuma bitmask.</div><div class="ttdef"><b>Definition:</b> linux-libnuma.h:192</div></div>
231 <div class="ttc" id="aa00222_html_gadfaa14c1bec76965ac2e05f0c3f3473b"><div class="ttname"><a href="a00222.html#gadfaa14c1bec76965ac2e05f0c3f3473b">hwloc_nodeset_to_linux_libnuma_bitmask</a></div><div class="ttdeci">static struct bitmask * hwloc_nodeset_to_linux_libnuma_bitmask(hwloc_topology_t topology, hwloc_const_nodeset_t nodeset)</div><div class="ttdoc">Convert hwloc NUMA node set nodeset into the returned libnuma bitmask.</div><div class="ttdef"><b>Definition:</b> linux-libnuma.h:217</div></div>
232 <div class="ttc" id="aa00244_html"><div class="ttname"><a href="a00244.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:395</div></div>
233 <div class="ttc" id="aa00244_html_a61a7a80a68eaccbaaa28269e678c81a9"><div class="ttname"><a href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">hwloc_obj::os_index</a></div><div class="ttdeci">unsigned os_index</div><div class="ttdoc">OS-provided physical index number. It is not guaranteed unique across the entire machine,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:400</div></div>
234 <div class="ttc" id="aa00244_html_a67925e0f2c47f50408fbdb9bddd0790f"><div class="ttname"><a href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">hwloc_obj::cpuset</a></div><div class="ttdeci">hwloc_cpuset_t cpuset</div><div class="ttdoc">CPUs covered by this object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:511</div></div>
235 <div class="ttc" id="aa00244_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:414</div></div>
236 <div class="ttc" id="aa00248_html_ad066b9612802ffa01e132dc3a8e6cc86"><div class="ttname"><a href="a00248.html#ad066b9612802ffa01e132dc3a8e6cc86">hwloc_obj_attr_u::numanode</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_numanode_attr_s numanode</div></div>
237 <div class="ttc" id="aa00252_html_a6703cbf2afbf63c9d60c5ff4dc0c73aa"><div class="ttname"><a href="a00252.html#a6703cbf2afbf63c9d60c5ff4dc0c73aa">hwloc_obj_attr_u::hwloc_numanode_attr_s::local_memory</a></div><div class="ttdeci">hwloc_uint64_t local_memory</div><div class="ttdoc">Local memory (in bytes)</div><div class="ttdef"><b>Definition:</b> hwloc.h:601</div></div>
64 <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
65 <div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="a00227.html#gaa4376a1969660a344911d117f645d3dd"> 50</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00227.html#gaa4376a1969660a344911d117f645d3dd">hwloc_windows_get_nr_processor_groups</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
66 <div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; </div>
67 <div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="a00227.html#ga167d1f28d3bd9defe1ffa940c14e8dd1"> 66</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00227.html#ga167d1f28d3bd9defe1ffa940c14e8dd1">hwloc_windows_get_processor_group_cpuset</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">unsigned</span> pg_index, <a class="code" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> cpuset, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
68 <div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; </div>
69 <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
70 <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
71 <div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="preprocessor">#endif</span></div>
72 <div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; </div>
73 <div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; </div>
74 <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_WINDOWS_H */</span><span class="preprocessor"></span></div>
75 <div class="ttc" id="aa00192_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
76 <div class="ttc" id="aa00195_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
77 <div class="ttc" id="aa00227_html_ga167d1f28d3bd9defe1ffa940c14e8dd1"><div class="ttname"><a href="a00227.html#ga167d1f28d3bd9defe1ffa940c14e8dd1">hwloc_windows_get_processor_group_cpuset</a></div><div class="ttdeci">int hwloc_windows_get_processor_group_cpuset(hwloc_topology_t topology, unsigned pg_index, hwloc_cpuset_t cpuset, unsigned long flags)</div><div class="ttdoc">Get the CPU-set of a Windows processor group.</div></div>
78 <div class="ttc" id="aa00227_html_gaa4376a1969660a344911d117f645d3dd"><div class="ttname"><a href="a00227.html#gaa4376a1969660a344911d117f645d3dd">hwloc_windows_get_nr_processor_groups</a></div><div class="ttdeci">int hwloc_windows_get_nr_processor_groups(hwloc_topology_t topology, unsigned long flags)</div><div class="ttdoc">Get the number of Windows processor groups.</div></div>
23879 </div><!-- fragment --></div><!-- contents -->
23980 <!-- start footer part -->
24081 <hr class="footer"/><address class="footer"><small>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
7676 <div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; </div>
7777 <div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160; </div>
7878 <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
79 <div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="a00223.html#ga88699a0c86c66a9b7baa3468cd9d24c3"> 57</a></span>&#160;<a class="code" href="a00223.html#ga88699a0c86c66a9b7baa3468cd9d24c3">hwloc_cpuset_to_glibc_sched_affinity</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> hwlocset,</div>
79 <div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="a00228.html#ga88699a0c86c66a9b7baa3468cd9d24c3"> 57</a></span>&#160;<a class="code" href="a00228.html#ga88699a0c86c66a9b7baa3468cd9d24c3">hwloc_cpuset_to_glibc_sched_affinity</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> hwlocset,</div>
8080 <div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; cpu_set_t *schedset, <span class="keywordtype">size_t</span> schedsetsize)</div>
8181 <div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;{</div>
8282 <div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="preprocessor">#ifdef CPU_ZERO_S</span></div>
8383 <div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keywordtype">unsigned</span> cpu;</div>
8484 <div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; CPU_ZERO_S(schedsetsize, schedset);</div>
85 <div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <a class="code" href="a00211.html#ga3f6861045a8029ade373510ffa727d2a">hwloc_bitmap_foreach_begin</a>(cpu, hwlocset)</div>
85 <div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <a class="code" href="a00214.html#ga3f6861045a8029ade373510ffa727d2a">hwloc_bitmap_foreach_begin</a>(cpu, hwlocset)</div>
8686 <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; CPU_SET_S(cpu, schedsetsize, schedset);</div>
87 <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <a class="code" href="a00211.html#gafcf3246db406218d4e155735b3fa6528">hwloc_bitmap_foreach_end</a>();</div>
87 <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <a class="code" href="a00214.html#gafcf3246db406218d4e155735b3fa6528">hwloc_bitmap_foreach_end</a>();</div>
8888 <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="preprocessor">#else </span><span class="comment">/* !CPU_ZERO_S */</span><span class="preprocessor"></span></div>
8989 <div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordtype">unsigned</span> cpu;</div>
9090 <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; CPU_ZERO(schedset);</div>
9191 <div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; assert(schedsetsize == <span class="keyword">sizeof</span>(cpu_set_t));</div>
92 <div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <a class="code" href="a00211.html#ga3f6861045a8029ade373510ffa727d2a">hwloc_bitmap_foreach_begin</a>(cpu, hwlocset)</div>
92 <div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <a class="code" href="a00214.html#ga3f6861045a8029ade373510ffa727d2a">hwloc_bitmap_foreach_begin</a>(cpu, hwlocset)</div>
9393 <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; CPU_SET(cpu, schedset);</div>
94 <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <a class="code" href="a00211.html#gafcf3246db406218d4e155735b3fa6528">hwloc_bitmap_foreach_end</a>();</div>
94 <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <a class="code" href="a00214.html#gafcf3246db406218d4e155735b3fa6528">hwloc_bitmap_foreach_end</a>();</div>
9595 <div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* !CPU_ZERO_S */</span><span class="preprocessor"></span></div>
9696 <div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">return</span> 0;</div>
9797 <div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;}</div>
9898 <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; </div>
9999 <div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
100 <div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="a00223.html#ga8ec807ec17de57fa77aa5cfd6c8e4bfb"> 85</a></span>&#160;<a class="code" href="a00223.html#ga8ec807ec17de57fa77aa5cfd6c8e4bfb">hwloc_cpuset_from_glibc_sched_affinity</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> hwlocset,</div>
100 <div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="a00228.html#ga8ec807ec17de57fa77aa5cfd6c8e4bfb"> 85</a></span>&#160;<a class="code" href="a00228.html#ga8ec807ec17de57fa77aa5cfd6c8e4bfb">hwloc_cpuset_from_glibc_sched_affinity</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused, <a class="code" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> hwlocset,</div>
101101 <div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keyword">const</span> cpu_set_t *schedset, <span class="keywordtype">size_t</span> schedsetsize)</div>
102102 <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;{</div>
103103 <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordtype">int</span> cpu;</div>
104104 <div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="preprocessor">#ifdef CPU_ZERO_S</span></div>
105105 <div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordtype">int</span> count;</div>
106106 <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="preprocessor">#endif</span></div>
107 <div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <a class="code" href="a00211.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a>(hwlocset);</div>
107 <div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <a class="code" href="a00214.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a>(hwlocset);</div>
108108 <div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="preprocessor">#ifdef CPU_ZERO_S</span></div>
109109 <div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; count = CPU_COUNT_S(schedsetsize, schedset);</div>
110110 <div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; cpu = 0;</div>
111111 <div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">while</span> (count) {</div>
112112 <div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">if</span> (CPU_ISSET_S(cpu, schedsetsize, schedset)) {</div>
113 <div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <a class="code" href="a00211.html#ga062dbff93baeff3b425a7260c5463646">hwloc_bitmap_set</a>(hwlocset, cpu);</div>
113 <div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <a class="code" href="a00214.html#ga062dbff93baeff3b425a7260c5463646">hwloc_bitmap_set</a>(hwlocset, cpu);</div>
114114 <div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; count--;</div>
115115 <div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; }</div>
116116 <div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; cpu++;</div>
122122 <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; assert(schedsetsize == <span class="keyword">sizeof</span>(cpu_set_t));</div>
123123 <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">for</span>(cpu=0; cpu&lt;CPU_SETSIZE; cpu++)</div>
124124 <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">if</span> (CPU_ISSET(cpu, schedset))</div>
125 <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <a class="code" href="a00211.html#ga062dbff93baeff3b425a7260c5463646">hwloc_bitmap_set</a>(hwlocset, cpu);</div>
125 <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <a class="code" href="a00214.html#ga062dbff93baeff3b425a7260c5463646">hwloc_bitmap_set</a>(hwlocset, cpu);</div>
126126 <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* !CPU_ZERO_S */</span><span class="preprocessor"></span></div>
127127 <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">return</span> 0;</div>
128128 <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;}</div>
136136 <div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; </div>
137137 <div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; </div>
138138 <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_GLIBC_SCHED_H */</span><span class="preprocessor"></span></div>
139 <div class="ttc" id="aa00189_html_ga1f784433e9b606261f62d1134f6a3b25"><div class="ttname"><a href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a></div><div class="ttdeci">hwloc_const_bitmap_t hwloc_const_cpuset_t</div><div class="ttdoc">A non-modifiable hwloc_cpuset_t.</div><div class="ttdef"><b>Definition:</b> hwloc.h:142</div></div>
140 <div class="ttc" id="aa00189_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
141 <div class="ttc" id="aa00192_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
142 <div class="ttc" id="aa00211_html_ga062dbff93baeff3b425a7260c5463646"><div class="ttname"><a href="a00211.html#ga062dbff93baeff3b425a7260c5463646">hwloc_bitmap_set</a></div><div class="ttdeci">int hwloc_bitmap_set(hwloc_bitmap_t bitmap, unsigned id)</div><div class="ttdoc">Add index id in bitmap bitmap.</div></div>
143 <div class="ttc" id="aa00211_html_ga3f6861045a8029ade373510ffa727d2a"><div class="ttname"><a href="a00211.html#ga3f6861045a8029ade373510ffa727d2a">hwloc_bitmap_foreach_begin</a></div><div class="ttdeci">#define hwloc_bitmap_foreach_begin(id, bitmap)</div><div class="ttdoc">Loop macro iterating on bitmap bitmap.</div><div class="ttdef"><b>Definition:</b> bitmap.h:370</div></div>
144 <div class="ttc" id="aa00211_html_gaa97c5217613c8cae9862287170ea2132"><div class="ttname"><a href="a00211.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a></div><div class="ttdeci">void hwloc_bitmap_zero(hwloc_bitmap_t bitmap)</div><div class="ttdoc">Empty the bitmap bitmap.</div></div>
145 <div class="ttc" id="aa00211_html_gafcf3246db406218d4e155735b3fa6528"><div class="ttname"><a href="a00211.html#gafcf3246db406218d4e155735b3fa6528">hwloc_bitmap_foreach_end</a></div><div class="ttdeci">#define hwloc_bitmap_foreach_end()</div><div class="ttdoc">End of loop macro iterating on a bitmap.</div><div class="ttdef"><b>Definition:</b> bitmap.h:384</div></div>
146 <div class="ttc" id="aa00223_html_ga88699a0c86c66a9b7baa3468cd9d24c3"><div class="ttname"><a href="a00223.html#ga88699a0c86c66a9b7baa3468cd9d24c3">hwloc_cpuset_to_glibc_sched_affinity</a></div><div class="ttdeci">static int hwloc_cpuset_to_glibc_sched_affinity(hwloc_topology_t topology, hwloc_const_cpuset_t hwlocset, cpu_set_t *schedset, size_t schedsetsize)</div><div class="ttdoc">Convert hwloc CPU set toposet into glibc sched affinity CPU set schedset.</div><div class="ttdef"><b>Definition:</b> glibc-sched.h:57</div></div>
147 <div class="ttc" id="aa00223_html_ga8ec807ec17de57fa77aa5cfd6c8e4bfb"><div class="ttname"><a href="a00223.html#ga8ec807ec17de57fa77aa5cfd6c8e4bfb">hwloc_cpuset_from_glibc_sched_affinity</a></div><div class="ttdeci">static int hwloc_cpuset_from_glibc_sched_affinity(hwloc_topology_t topology, hwloc_cpuset_t hwlocset, const cpu_set_t *schedset, size_t schedsetsize)</div><div class="ttdoc">Convert glibc sched affinity CPU set schedset into hwloc CPU set.</div><div class="ttdef"><b>Definition:</b> glibc-sched.h:85</div></div>
139 <div class="ttc" id="aa00192_html_ga1f784433e9b606261f62d1134f6a3b25"><div class="ttname"><a href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a></div><div class="ttdeci">hwloc_const_bitmap_t hwloc_const_cpuset_t</div><div class="ttdoc">A non-modifiable hwloc_cpuset_t.</div><div class="ttdef"><b>Definition:</b> hwloc.h:142</div></div>
140 <div class="ttc" id="aa00192_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
141 <div class="ttc" id="aa00195_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
142 <div class="ttc" id="aa00214_html_ga062dbff93baeff3b425a7260c5463646"><div class="ttname"><a href="a00214.html#ga062dbff93baeff3b425a7260c5463646">hwloc_bitmap_set</a></div><div class="ttdeci">int hwloc_bitmap_set(hwloc_bitmap_t bitmap, unsigned id)</div><div class="ttdoc">Add index id in bitmap bitmap.</div></div>
143 <div class="ttc" id="aa00214_html_ga3f6861045a8029ade373510ffa727d2a"><div class="ttname"><a href="a00214.html#ga3f6861045a8029ade373510ffa727d2a">hwloc_bitmap_foreach_begin</a></div><div class="ttdeci">#define hwloc_bitmap_foreach_begin(id, bitmap)</div><div class="ttdoc">Loop macro iterating on bitmap bitmap.</div><div class="ttdef"><b>Definition:</b> bitmap.h:370</div></div>
144 <div class="ttc" id="aa00214_html_gaa97c5217613c8cae9862287170ea2132"><div class="ttname"><a href="a00214.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a></div><div class="ttdeci">void hwloc_bitmap_zero(hwloc_bitmap_t bitmap)</div><div class="ttdoc">Empty the bitmap bitmap.</div></div>
145 <div class="ttc" id="aa00214_html_gafcf3246db406218d4e155735b3fa6528"><div class="ttname"><a href="a00214.html#gafcf3246db406218d4e155735b3fa6528">hwloc_bitmap_foreach_end</a></div><div class="ttdeci">#define hwloc_bitmap_foreach_end()</div><div class="ttdoc">End of loop macro iterating on a bitmap.</div><div class="ttdef"><b>Definition:</b> bitmap.h:384</div></div>
146 <div class="ttc" id="aa00228_html_ga88699a0c86c66a9b7baa3468cd9d24c3"><div class="ttname"><a href="a00228.html#ga88699a0c86c66a9b7baa3468cd9d24c3">hwloc_cpuset_to_glibc_sched_affinity</a></div><div class="ttdeci">static int hwloc_cpuset_to_glibc_sched_affinity(hwloc_topology_t topology, hwloc_const_cpuset_t hwlocset, cpu_set_t *schedset, size_t schedsetsize)</div><div class="ttdoc">Convert hwloc CPU set toposet into glibc sched affinity CPU set schedset.</div><div class="ttdef"><b>Definition:</b> glibc-sched.h:57</div></div>
147 <div class="ttc" id="aa00228_html_ga8ec807ec17de57fa77aa5cfd6c8e4bfb"><div class="ttname"><a href="a00228.html#ga8ec807ec17de57fa77aa5cfd6c8e4bfb">hwloc_cpuset_from_glibc_sched_affinity</a></div><div class="ttdeci">static int hwloc_cpuset_from_glibc_sched_affinity(hwloc_topology_t topology, hwloc_cpuset_t hwlocset, const cpu_set_t *schedset, size_t schedsetsize)</div><div class="ttdoc">Convert glibc sched affinity CPU set schedset into hwloc CPU set.</div><div class="ttdef"><b>Definition:</b> glibc-sched.h:85</div></div>
148148 </div><!-- fragment --></div><!-- contents -->
149149 <!-- start footer part -->
150150 <hr class="footer"/><address class="footer"><small>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
8484 <div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; </div>
8585 <div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;<span class="comment">/* needs &quot;cl_amd_device_attribute_query&quot; device extension, but not strictly required for clGetDeviceInfo() */</span></div>
8686 <div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;<span class="preprocessor">#define HWLOC_CL_DEVICE_TOPOLOGY_AMD 0x4037</span></div>
87 <div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="a00328.html"> 46</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">union </span>{</div>
88 <div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="a00328.html#afbd6b814607b06fc5b2f36ad14420398"> 47</a></span>&#160; <span class="keyword">struct </span>{ cl_uint type; cl_uint data[5]; } raw;</div>
89 <div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="a00328.html#a4a23e3cc034b7ab105cab0e863dcab69"> 48</a></span>&#160; <span class="keyword">struct </span>{ cl_uint type; cl_char unused[17]; cl_char <a class="code" href="a00328.html#a4a23e3cc034b7ab105cab0e863dcab69">bus</a>; cl_char device; cl_char <span class="keyword">function</span>; } pcie;</div>
90 <div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;} <a class="code" href="a00328.html">hwloc_cl_device_topology_amd</a>;</div>
87 <div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="a00334.html"> 46</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">union </span>{</div>
88 <div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="a00334.html#afbd6b814607b06fc5b2f36ad14420398"> 47</a></span>&#160; <span class="keyword">struct </span>{ cl_uint type; cl_uint data[5]; } raw;</div>
89 <div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="a00334.html#a4a23e3cc034b7ab105cab0e863dcab69"> 48</a></span>&#160; <span class="keyword">struct </span>{ cl_uint type; cl_char unused[17]; cl_char <a class="code" href="a00334.html#a4a23e3cc034b7ab105cab0e863dcab69">bus</a>; cl_char device; cl_char <span class="keyword">function</span>; } pcie;</div>
90 <div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;} <a class="code" href="a00334.html">hwloc_cl_device_topology_amd</a>;</div>
9191 <div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="preprocessor">#define HWLOC_CL_DEVICE_TOPOLOGY_TYPE_PCIE_AMD 1</span></div>
9292 <div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; </div>
9393 <div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="comment">/* needs &quot;cl_nv_device_attribute_query&quot; device extension, but not strictly required for clGetDeviceInfo() */</span></div>
9797 <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; </div>
9898 <div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; </div>
9999 <div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
100 <div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="a00224.html#gab89e4d20f8a353299351b41849e35ac9"> 74</a></span>&#160;<a class="code" href="a00224.html#gab89e4d20f8a353299351b41849e35ac9">hwloc_opencl_get_device_pci_busid</a>(cl_device_id device,</div>
100 <div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="a00229.html#gab89e4d20f8a353299351b41849e35ac9"> 74</a></span>&#160;<a class="code" href="a00229.html#gab89e4d20f8a353299351b41849e35ac9">hwloc_opencl_get_device_pci_busid</a>(cl_device_id device,</div>
101101 <div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordtype">unsigned</span> *domain, <span class="keywordtype">unsigned</span> *bus, <span class="keywordtype">unsigned</span> *dev, <span class="keywordtype">unsigned</span> *func)</div>
102102 <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;{</div>
103 <div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <a class="code" href="a00328.html">hwloc_cl_device_topology_amd</a> amdtopo;</div>
103 <div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <a class="code" href="a00334.html">hwloc_cl_device_topology_amd</a> amdtopo;</div>
104104 <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; cl_uint nvbus, nvslot, nvdomain;</div>
105105 <div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; cl_int clret;</div>
106106 <div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; </div>
107107 <div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; clret = clGetDeviceInfo(device, HWLOC_CL_DEVICE_TOPOLOGY_AMD, <span class="keyword">sizeof</span>(amdtopo), &amp;amdtopo, NULL);</div>
108108 <div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordflow">if</span> (CL_SUCCESS == clret</div>
109 <div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; &amp;&amp; HWLOC_CL_DEVICE_TOPOLOGY_TYPE_PCIE_AMD == amdtopo.<a class="code" href="a00328.html#a7bba6ab297b6f44e43c5937b80b4cfb6">raw</a>.<a class="code" href="a00328.html#a8ec4ea89b862bb271845b48063f332b4">type</a>) {</div>
109 <div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; &amp;&amp; HWLOC_CL_DEVICE_TOPOLOGY_TYPE_PCIE_AMD == amdtopo.<a class="code" href="a00334.html#a7bba6ab297b6f44e43c5937b80b4cfb6">raw</a>.<a class="code" href="a00334.html#a8ec4ea89b862bb271845b48063f332b4">type</a>) {</div>
110110 <div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; *domain = 0; <span class="comment">/* can&#39;t do anything better */</span></div>
111111 <div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="comment">/* cl_device_topology_amd stores bus ID in cl_char, dont convert those signed char directly to unsigned int */</span></div>
112 <div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; *bus = (unsigned) (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>) amdtopo.<a class="code" href="a00328.html#a05e9a845012cd9d1f13a39cc35ab40a1">pcie</a>.<a class="code" href="a00328.html#a4a23e3cc034b7ab105cab0e863dcab69">bus</a>;</div>
113 <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; *dev = (unsigned) (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>) amdtopo.<a class="code" href="a00328.html#a05e9a845012cd9d1f13a39cc35ab40a1">pcie</a>.<a class="code" href="a00328.html#a017033a953d71455b067007cabb92e9c">device</a>;</div>
114 <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; *func = (unsigned) (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>) amdtopo.<a class="code" href="a00328.html#a05e9a845012cd9d1f13a39cc35ab40a1">pcie</a>.<a class="code" href="a00328.html#a77a67ac73cff98d330ef7258b240bac3">function</a>;</div>
112 <div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; *bus = (unsigned) (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>) amdtopo.<a class="code" href="a00334.html#a05e9a845012cd9d1f13a39cc35ab40a1">pcie</a>.<a class="code" href="a00334.html#a4a23e3cc034b7ab105cab0e863dcab69">bus</a>;</div>
113 <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; *dev = (unsigned) (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>) amdtopo.<a class="code" href="a00334.html#a05e9a845012cd9d1f13a39cc35ab40a1">pcie</a>.<a class="code" href="a00334.html#a017033a953d71455b067007cabb92e9c">device</a>;</div>
114 <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; *func = (unsigned) (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>) amdtopo.<a class="code" href="a00334.html#a05e9a845012cd9d1f13a39cc35ab40a1">pcie</a>.<a class="code" href="a00334.html#a77a67ac73cff98d330ef7258b240bac3">function</a>;</div>
115115 <div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">return</span> 0;</div>
116116 <div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; }</div>
117117 <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; </div>
137137 <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;}</div>
138138 <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; </div>
139139 <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
140 <div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="a00224.html#gacc32737d4648d16b0d292438f210ec90"> 131</a></span>&#160;<a class="code" href="a00224.html#gacc32737d4648d16b0d292438f210ec90">hwloc_opencl_get_device_cpuset</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused,</div>
140 <div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="a00229.html#gacc32737d4648d16b0d292438f210ec90"> 131</a></span>&#160;<a class="code" href="a00229.html#gacc32737d4648d16b0d292438f210ec90">hwloc_opencl_get_device_cpuset</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused,</div>
141141 <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; cl_device_id device __hwloc_attribute_unused,</div>
142 <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <a class="code" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</div>
142 <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <a class="code" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</div>
143143 <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;{</div>
144144 <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;<span class="preprocessor">#if (defined HWLOC_LINUX_SYS)</span></div>
145145 <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="comment">/* If we&#39;re on Linux, try AMD/NVIDIA extensions + the sysfs mechanism to get the local cpus */</span></div>
147147 <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordtype">char</span> path[HWLOC_OPENCL_DEVICE_SYSFS_PATH_MAX];</div>
148148 <div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordtype">unsigned</span> pcidomain, pcibus, pcidev, pcifunc;</div>
149149 <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; </div>
150 <div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00199.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a>(topology)) {</div>
150 <div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00202.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a>(topology)) {</div>
151151 <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; errno = EINVAL;</div>
152152 <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordflow">return</span> -1;</div>
153153 <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; }</div>
154154 <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; </div>
155 <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00224.html#gab89e4d20f8a353299351b41849e35ac9">hwloc_opencl_get_device_pci_busid</a>(device, &amp;pcidomain, &amp;pcibus, &amp;pcidev, &amp;pcifunc) &lt; 0) {</div>
156 <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <a class="code" href="a00211.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00208.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
155 <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00229.html#gab89e4d20f8a353299351b41849e35ac9">hwloc_opencl_get_device_pci_busid</a>(device, &amp;pcidomain, &amp;pcibus, &amp;pcidev, &amp;pcifunc) &lt; 0) {</div>
156 <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <a class="code" href="a00214.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00211.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
157157 <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">return</span> 0;</div>
158158 <div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; }</div>
159159 <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; </div>
160160 <div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; sprintf(path, <span class="stringliteral">&quot;/sys/bus/pci/devices/%04x:%02x:%02x.%01x/local_cpus&quot;</span>, pcidomain, pcibus, pcidev, pcifunc);</div>
161 <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00220.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a>(path, set) &lt; 0</div>
162 <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; || <a class="code" href="a00211.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(set))</div>
163 <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <a class="code" href="a00211.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00208.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
161 <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00224.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a>(path, set) &lt; 0</div>
162 <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; || <a class="code" href="a00214.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(set))</div>
163 <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <a class="code" href="a00214.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00211.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
164164 <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;<span class="preprocessor">#else</span></div>
165165 <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="comment">/* Non-Linux systems simply get a full cpuset */</span></div>
166 <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <a class="code" href="a00211.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00208.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
166 <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <a class="code" href="a00214.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00211.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
167167 <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;<span class="preprocessor">#endif</span></div>
168168 <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">return</span> 0;</div>
169169 <div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160;}</div>
170170 <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; </div>
171 <div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
172 <div class="line"><a name="l00178"></a><span class="lineno"><a class="line" href="a00224.html#gae39352d124cb330eb37b84b418ed6cc5"> 178</a></span>&#160;<a class="code" href="a00224.html#gae39352d124cb330eb37b84b418ed6cc5">hwloc_opencl_get_device_osdev_by_index</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
171 <div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
172 <div class="line"><a name="l00178"></a><span class="lineno"><a class="line" href="a00229.html#gae39352d124cb330eb37b84b418ed6cc5"> 178</a></span>&#160;<a class="code" href="a00229.html#gae39352d124cb330eb37b84b418ed6cc5">hwloc_opencl_get_device_osdev_by_index</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
173173 <div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordtype">unsigned</span> platform_index, <span class="keywordtype">unsigned</span> device_index)</div>
174174 <div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;{</div>
175175 <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordtype">unsigned</span> x = (unsigned) -1, y = (<span class="keywordtype">unsigned</span>) -1;</div>
176 <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> osdev = NULL;</div>
177 <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00210.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
178 <div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83">HWLOC_OBJ_OSDEV_COPROC</a> == osdev-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a>.<a class="code" href="a00288.html#a31e019e27e54ac6138d04be639bb96f9">type</a></div>
179 <div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; &amp;&amp; osdev-&gt;<a class="code" href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">name</a></div>
180 <div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; &amp;&amp; sscanf(osdev-&gt;<a class="code" href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, <span class="stringliteral">&quot;opencl%ud%u&quot;</span>, &amp;x, &amp;y) == 2</div>
176 <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> osdev = NULL;</div>
177 <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00213.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
178 <div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83">HWLOC_OBJ_OSDEV_COPROC</a> == osdev-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a>.<a class="code" href="a00294.html#a31e019e27e54ac6138d04be639bb96f9">type</a></div>
179 <div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; &amp;&amp; osdev-&gt;<a class="code" href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">name</a></div>
180 <div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; &amp;&amp; sscanf(osdev-&gt;<a class="code" href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, <span class="stringliteral">&quot;opencl%ud%u&quot;</span>, &amp;x, &amp;y) == 2</div>
181181 <div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; &amp;&amp; platform_index == x &amp;&amp; device_index == y)</div>
182182 <div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keywordflow">return</span> osdev;</div>
183183 <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; }</div>
184184 <div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">return</span> NULL;</div>
185185 <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;}</div>
186186 <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; </div>
187 <div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
188 <div class="line"><a name="l00214"></a><span class="lineno"><a class="line" href="a00224.html#gadabfa6516aa12e5d8f79b9b4dd9f3cf8"> 214</a></span>&#160;<a class="code" href="a00224.html#gadabfa6516aa12e5d8f79b9b4dd9f3cf8">hwloc_opencl_get_device_osdev</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused,</div>
189 <div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; cl_device_id device __hwloc_attribute_unused)</div>
190 <div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;{</div>
191 <div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> osdev;</div>
192 <div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordtype">unsigned</span> pcidomain, pcibus, pcidevice, pcifunc;</div>
193 <div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; </div>
194 <div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00224.html#gab89e4d20f8a353299351b41849e35ac9">hwloc_opencl_get_device_pci_busid</a>(device, &amp;pcidomain, &amp;pcibus, &amp;pcidevice, &amp;pcifunc) &lt; 0) {</div>
195 <div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; errno = EINVAL;</div>
196 <div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">return</span> NULL;</div>
197 <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; }</div>
198 <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; </div>
199 <div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; osdev = NULL;</div>
200 <div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00210.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
201 <div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> pcidev = osdev-&gt;<a class="code" href="a00244.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
202 <div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">if</span> (strncmp(osdev-&gt;<a class="code" href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, <span class="stringliteral">&quot;opencl&quot;</span>, 6))</div>
203 <div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">continue</span>;</div>
204 <div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">if</span> (pcidev</div>
205 <div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00244.html#acc4f0803f244867e68fe0036800be5de">type</a> == <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div>
206 <div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00268.html#a8fba44988deb98613c1505a4019a34dc">domain</a> == pcidomain</div>
207 <div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00268.html#aae99e035e8d1387d7b8768aaa8eceb0a">bus</a> == pcibus</div>
208 <div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00268.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">dev</a> == pcidevice</div>
209 <div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00268.html#a695f32df53f4ef728670bfcf31b74e0f">func</a> == pcifunc)</div>
210 <div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keywordflow">return</span> osdev;</div>
211 <div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="comment">/* if PCI are filtered out, we need a info attr to match on */</span></div>
212 <div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; }</div>
213 <div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; </div>
214 <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordflow">return</span> NULL;</div>
215 <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;}</div>
216 <div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; </div>
217 <div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
218 <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
219 <div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;<span class="preprocessor">#endif</span></div>
220 <div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; </div>
187 <div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
188 <div class="line"><a name="l00215"></a><span class="lineno"><a class="line" href="a00229.html#gadabfa6516aa12e5d8f79b9b4dd9f3cf8"> 215</a></span>&#160;<a class="code" href="a00229.html#gadabfa6516aa12e5d8f79b9b4dd9f3cf8">hwloc_opencl_get_device_osdev</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused,</div>
189 <div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; cl_device_id device __hwloc_attribute_unused)</div>
190 <div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;{</div>
191 <div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> osdev;</div>
192 <div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <span class="keywordtype">unsigned</span> pcidomain, pcibus, pcidevice, pcifunc;</div>
193 <div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; </div>
194 <div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00229.html#gab89e4d20f8a353299351b41849e35ac9">hwloc_opencl_get_device_pci_busid</a>(device, &amp;pcidomain, &amp;pcibus, &amp;pcidevice, &amp;pcifunc) &lt; 0) {</div>
195 <div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; errno = EINVAL;</div>
196 <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="keywordflow">return</span> NULL;</div>
197 <div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; }</div>
198 <div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; </div>
199 <div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; osdev = NULL;</div>
200 <div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00213.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
201 <div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> pcidev = osdev-&gt;<a class="code" href="a00250.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
202 <div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">if</span> (strncmp(osdev-&gt;<a class="code" href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, <span class="stringliteral">&quot;opencl&quot;</span>, 6))</div>
203 <div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="keywordflow">continue</span>;</div>
204 <div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keywordflow">if</span> (pcidev</div>
205 <div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00250.html#acc4f0803f244867e68fe0036800be5de">type</a> == <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div>
206 <div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00274.html#a8fba44988deb98613c1505a4019a34dc">domain</a> == pcidomain</div>
207 <div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00274.html#aae99e035e8d1387d7b8768aaa8eceb0a">bus</a> == pcibus</div>
208 <div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00274.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">dev</a> == pcidevice</div>
209 <div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00274.html#a695f32df53f4ef728670bfcf31b74e0f">func</a> == pcifunc)</div>
210 <div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">return</span> osdev;</div>
211 <div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="comment">/* if PCI are filtered out, we need a info attr to match on */</span></div>
212 <div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; }</div>
213 <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; </div>
214 <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordflow">return</span> NULL;</div>
215 <div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160;}</div>
216 <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; </div>
217 <div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
218 <div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
219 <div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160;<span class="preprocessor">#endif</span></div>
221220 <div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; </div>
222 <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_OPENCL_H */</span><span class="preprocessor"></span></div>
223 <div class="ttc" id="aa00189_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
224 <div class="ttc" id="aa00190_html_gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83"><div class="ttname"><a href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83">HWLOC_OBJ_OSDEV_COPROC</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_COPROC</div><div class="ttdoc">Operating system co-processor device. For instance &quot;opencl0d0&quot; for a OpenCL device,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:352</div></div>
225 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div><div class="ttdeci">@ HWLOC_OBJ_PCI_DEVICE</div><div class="ttdoc">PCI device (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:269</div></div>
226 <div class="ttc" id="aa00192_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
227 <div class="ttc" id="aa00199_html_ga68ffdcfd9175cdf40709801092f18017"><div class="ttname"><a href="a00199.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a></div><div class="ttdeci">int hwloc_topology_is_thissystem(hwloc_topology_t restrict topology)</div><div class="ttdoc">Does the topology context come from this system?</div></div>
228 <div class="ttc" id="aa00208_html_gaee30e03391c1ed7dfd617fb5c7bbb033"><div class="ttname"><a href="a00208.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a></div><div class="ttdeci">hwloc_const_cpuset_t hwloc_topology_get_complete_cpuset(hwloc_topology_t topology)</div><div class="ttdoc">Get complete CPU set.</div></div>
229 <div class="ttc" id="aa00210_html_ga8b4584c8949e2c5f1c97ba7fe92b8145"><div class="ttname"><a href="a00210.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_osdev(hwloc_topology_t topology, hwloc_obj_t prev)</div><div class="ttdoc">Get the next OS device in the system.</div><div class="ttdef"><b>Definition:</b> helper.h:1151</div></div>
230 <div class="ttc" id="aa00211_html_ga5b64be28f5a7176ed8ad0d6a90bdf108"><div class="ttname"><a href="a00211.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a></div><div class="ttdeci">int hwloc_bitmap_iszero(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Test whether bitmap bitmap is empty.</div></div>
231 <div class="ttc" id="aa00211_html_ga72a29824798b48784b8217471ec8f14c"><div class="ttname"><a href="a00211.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a></div><div class="ttdeci">int hwloc_bitmap_copy(hwloc_bitmap_t dst, hwloc_const_bitmap_t src)</div><div class="ttdoc">Copy the contents of bitmap src into the already allocated bitmap dst.</div></div>
232 <div class="ttc" id="aa00220_html_gaf72d83e273803226ce772973e37b85de"><div class="ttname"><a href="a00220.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a></div><div class="ttdeci">int hwloc_linux_read_path_as_cpumask(const char *path, hwloc_bitmap_t set)</div><div class="ttdoc">Convert a linux kernel cpumask file path into a hwloc bitmap set.</div></div>
233 <div class="ttc" id="aa00224_html_gab89e4d20f8a353299351b41849e35ac9"><div class="ttname"><a href="a00224.html#gab89e4d20f8a353299351b41849e35ac9">hwloc_opencl_get_device_pci_busid</a></div><div class="ttdeci">static int hwloc_opencl_get_device_pci_busid(cl_device_id device, unsigned *domain, unsigned *bus, unsigned *dev, unsigned *func)</div><div class="ttdoc">Return the domain, bus and device IDs of the OpenCL device device.</div><div class="ttdef"><b>Definition:</b> opencl.h:74</div></div>
234 <div class="ttc" id="aa00224_html_gacc32737d4648d16b0d292438f210ec90"><div class="ttname"><a href="a00224.html#gacc32737d4648d16b0d292438f210ec90">hwloc_opencl_get_device_cpuset</a></div><div class="ttdeci">static int hwloc_opencl_get_device_cpuset(hwloc_topology_t topology, cl_device_id device, hwloc_cpuset_t set)</div><div class="ttdoc">Get the CPU set of processors that are physically close to OpenCL device device.</div><div class="ttdef"><b>Definition:</b> opencl.h:131</div></div>
235 <div class="ttc" id="aa00224_html_gadabfa6516aa12e5d8f79b9b4dd9f3cf8"><div class="ttname"><a href="a00224.html#gadabfa6516aa12e5d8f79b9b4dd9f3cf8">hwloc_opencl_get_device_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_opencl_get_device_osdev(hwloc_topology_t topology, cl_device_id device)</div><div class="ttdoc">Get the hwloc OS device object corresponding to OpenCL device deviceX.</div><div class="ttdef"><b>Definition:</b> opencl.h:214</div></div>
236 <div class="ttc" id="aa00224_html_gae39352d124cb330eb37b84b418ed6cc5"><div class="ttname"><a href="a00224.html#gae39352d124cb330eb37b84b418ed6cc5">hwloc_opencl_get_device_osdev_by_index</a></div><div class="ttdeci">static hwloc_obj_t hwloc_opencl_get_device_osdev_by_index(hwloc_topology_t topology, unsigned platform_index, unsigned device_index)</div><div class="ttdoc">Get the hwloc OS device object corresponding to the OpenCL device for the given indexes.</div><div class="ttdef"><b>Definition:</b> opencl.h:178</div></div>
237 <div class="ttc" id="aa00244_html"><div class="ttname"><a href="a00244.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:395</div></div>
238 <div class="ttc" id="aa00244_html_abb709ec38f2970677e4e57d1d30be96d"><div class="ttname"><a href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">hwloc_obj::name</a></div><div class="ttdeci">char * name</div><div class="ttdoc">Object-specific name if any. Mostly used for identifying OS devices and Misc objects where a name str...</div><div class="ttdef"><b>Definition:</b> hwloc.h:407</div></div>
239 <div class="ttc" id="aa00244_html_acc4f0803f244867e68fe0036800be5de"><div class="ttname"><a href="a00244.html#acc4f0803f244867e68fe0036800be5de">hwloc_obj::type</a></div><div class="ttdeci">hwloc_obj_type_t type</div><div class="ttdoc">Type of object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:397</div></div>
240 <div class="ttc" id="aa00244_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:414</div></div>
241 <div class="ttc" id="aa00244_html_adc494f6aed939992be1c55cca5822900"><div class="ttname"><a href="a00244.html#adc494f6aed939992be1c55cca5822900">hwloc_obj::parent</a></div><div class="ttdeci">struct hwloc_obj * parent</div><div class="ttdoc">Parent, NULL if root (Machine object)</div><div class="ttdef"><b>Definition:</b> hwloc.h:445</div></div>
242 <div class="ttc" id="aa00248_html_a0b66da7ab072f7c016f8ed86701f5a7c"><div class="ttname"><a href="a00248.html#a0b66da7ab072f7c016f8ed86701f5a7c">hwloc_obj_attr_u::pcidev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_pcidev_attr_s pcidev</div></div>
243 <div class="ttc" id="aa00248_html_aaf7a5c38b5185703ff18c46ad2761dcf"><div class="ttname"><a href="a00248.html#aaf7a5c38b5185703ff18c46ad2761dcf">hwloc_obj_attr_u::osdev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_osdev_attr_s osdev</div></div>
244 <div class="ttc" id="aa00268_html_a3d70c84a12f7e93d14c8d47bf4fd9dc5"><div class="ttname"><a href="a00268.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">hwloc_obj_attr_u::hwloc_pcidev_attr_s::dev</a></div><div class="ttdeci">unsigned char dev</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
245 <div class="ttc" id="aa00268_html_a695f32df53f4ef728670bfcf31b74e0f"><div class="ttname"><a href="a00268.html#a695f32df53f4ef728670bfcf31b74e0f">hwloc_obj_attr_u::hwloc_pcidev_attr_s::func</a></div><div class="ttdeci">unsigned char func</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
246 <div class="ttc" id="aa00268_html_a8fba44988deb98613c1505a4019a34dc"><div class="ttname"><a href="a00268.html#a8fba44988deb98613c1505a4019a34dc">hwloc_obj_attr_u::hwloc_pcidev_attr_s::domain</a></div><div class="ttdeci">unsigned short domain</div><div class="ttdef"><b>Definition:</b> hwloc.h:634</div></div>
247 <div class="ttc" id="aa00268_html_aae99e035e8d1387d7b8768aaa8eceb0a"><div class="ttname"><a href="a00268.html#aae99e035e8d1387d7b8768aaa8eceb0a">hwloc_obj_attr_u::hwloc_pcidev_attr_s::bus</a></div><div class="ttdeci">unsigned char bus</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
248 <div class="ttc" id="aa00288_html_a31e019e27e54ac6138d04be639bb96f9"><div class="ttname"><a href="a00288.html#a31e019e27e54ac6138d04be639bb96f9">hwloc_obj_attr_u::hwloc_osdev_attr_s::type</a></div><div class="ttdeci">hwloc_obj_osdev_type_t type</div><div class="ttdef"><b>Definition:</b> hwloc.h:665</div></div>
249 <div class="ttc" id="aa00328_html"><div class="ttname"><a href="a00328.html">hwloc_cl_device_topology_amd</a></div><div class="ttdef"><b>Definition:</b> opencl.h:46</div></div>
250 <div class="ttc" id="aa00328_html_a017033a953d71455b067007cabb92e9c"><div class="ttname"><a href="a00328.html#a017033a953d71455b067007cabb92e9c">hwloc_cl_device_topology_amd::device</a></div><div class="ttdeci">cl_char device</div><div class="ttdef"><b>Definition:</b> opencl.h:48</div></div>
251 <div class="ttc" id="aa00328_html_a05e9a845012cd9d1f13a39cc35ab40a1"><div class="ttname"><a href="a00328.html#a05e9a845012cd9d1f13a39cc35ab40a1">hwloc_cl_device_topology_amd::pcie</a></div><div class="ttdeci">struct hwloc_cl_device_topology_amd::@4 pcie</div></div>
252 <div class="ttc" id="aa00328_html_a4a23e3cc034b7ab105cab0e863dcab69"><div class="ttname"><a href="a00328.html#a4a23e3cc034b7ab105cab0e863dcab69">hwloc_cl_device_topology_amd::bus</a></div><div class="ttdeci">cl_char bus</div><div class="ttdef"><b>Definition:</b> opencl.h:48</div></div>
253 <div class="ttc" id="aa00328_html_a77a67ac73cff98d330ef7258b240bac3"><div class="ttname"><a href="a00328.html#a77a67ac73cff98d330ef7258b240bac3">hwloc_cl_device_topology_amd::function</a></div><div class="ttdeci">cl_char function</div><div class="ttdef"><b>Definition:</b> opencl.h:48</div></div>
254 <div class="ttc" id="aa00328_html_a7bba6ab297b6f44e43c5937b80b4cfb6"><div class="ttname"><a href="a00328.html#a7bba6ab297b6f44e43c5937b80b4cfb6">hwloc_cl_device_topology_amd::raw</a></div><div class="ttdeci">struct hwloc_cl_device_topology_amd::@3 raw</div></div>
255 <div class="ttc" id="aa00328_html_a8ec4ea89b862bb271845b48063f332b4"><div class="ttname"><a href="a00328.html#a8ec4ea89b862bb271845b48063f332b4">hwloc_cl_device_topology_amd::type</a></div><div class="ttdeci">cl_uint type</div><div class="ttdef"><b>Definition:</b> opencl.h:47</div></div>
221 <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; </div>
222 <div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_OPENCL_H */</span><span class="preprocessor"></span></div>
223 <div class="ttc" id="aa00192_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
224 <div class="ttc" id="aa00193_html_gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83"><div class="ttname"><a href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83">HWLOC_OBJ_OSDEV_COPROC</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_COPROC</div><div class="ttdoc">Operating system co-processor device. For instance &quot;opencl0d0&quot; for a OpenCL device,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:352</div></div>
225 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div><div class="ttdeci">@ HWLOC_OBJ_PCI_DEVICE</div><div class="ttdoc">PCI device (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:269</div></div>
226 <div class="ttc" id="aa00195_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
227 <div class="ttc" id="aa00202_html_ga68ffdcfd9175cdf40709801092f18017"><div class="ttname"><a href="a00202.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a></div><div class="ttdeci">int hwloc_topology_is_thissystem(hwloc_topology_t restrict topology)</div><div class="ttdoc">Does the topology context come from this system?</div></div>
228 <div class="ttc" id="aa00211_html_gaee30e03391c1ed7dfd617fb5c7bbb033"><div class="ttname"><a href="a00211.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a></div><div class="ttdeci">hwloc_const_cpuset_t hwloc_topology_get_complete_cpuset(hwloc_topology_t topology)</div><div class="ttdoc">Get complete CPU set.</div></div>
229 <div class="ttc" id="aa00213_html_ga8b4584c8949e2c5f1c97ba7fe92b8145"><div class="ttname"><a href="a00213.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_osdev(hwloc_topology_t topology, hwloc_obj_t prev)</div><div class="ttdoc">Get the next OS device in the system.</div><div class="ttdef"><b>Definition:</b> helper.h:1194</div></div>
230 <div class="ttc" id="aa00214_html_ga5b64be28f5a7176ed8ad0d6a90bdf108"><div class="ttname"><a href="a00214.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a></div><div class="ttdeci">int hwloc_bitmap_iszero(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Test whether bitmap bitmap is empty.</div></div>
231 <div class="ttc" id="aa00214_html_ga72a29824798b48784b8217471ec8f14c"><div class="ttname"><a href="a00214.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a></div><div class="ttdeci">int hwloc_bitmap_copy(hwloc_bitmap_t dst, hwloc_const_bitmap_t src)</div><div class="ttdoc">Copy the contents of bitmap src into the already allocated bitmap dst.</div></div>
232 <div class="ttc" id="aa00224_html_gaf72d83e273803226ce772973e37b85de"><div class="ttname"><a href="a00224.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a></div><div class="ttdeci">int hwloc_linux_read_path_as_cpumask(const char *path, hwloc_bitmap_t set)</div><div class="ttdoc">Convert a linux kernel cpumask file path into a hwloc bitmap set.</div></div>
233 <div class="ttc" id="aa00229_html_gab89e4d20f8a353299351b41849e35ac9"><div class="ttname"><a href="a00229.html#gab89e4d20f8a353299351b41849e35ac9">hwloc_opencl_get_device_pci_busid</a></div><div class="ttdeci">static int hwloc_opencl_get_device_pci_busid(cl_device_id device, unsigned *domain, unsigned *bus, unsigned *dev, unsigned *func)</div><div class="ttdoc">Return the domain, bus and device IDs of the OpenCL device device.</div><div class="ttdef"><b>Definition:</b> opencl.h:74</div></div>
234 <div class="ttc" id="aa00229_html_gacc32737d4648d16b0d292438f210ec90"><div class="ttname"><a href="a00229.html#gacc32737d4648d16b0d292438f210ec90">hwloc_opencl_get_device_cpuset</a></div><div class="ttdeci">static int hwloc_opencl_get_device_cpuset(hwloc_topology_t topology, cl_device_id device, hwloc_cpuset_t set)</div><div class="ttdoc">Get the CPU set of processors that are physically close to OpenCL device device.</div><div class="ttdef"><b>Definition:</b> opencl.h:131</div></div>
235 <div class="ttc" id="aa00229_html_gadabfa6516aa12e5d8f79b9b4dd9f3cf8"><div class="ttname"><a href="a00229.html#gadabfa6516aa12e5d8f79b9b4dd9f3cf8">hwloc_opencl_get_device_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_opencl_get_device_osdev(hwloc_topology_t topology, cl_device_id device)</div><div class="ttdoc">Get the hwloc OS device object corresponding to OpenCL device deviceX.</div><div class="ttdef"><b>Definition:</b> opencl.h:215</div></div>
236 <div class="ttc" id="aa00229_html_gae39352d124cb330eb37b84b418ed6cc5"><div class="ttname"><a href="a00229.html#gae39352d124cb330eb37b84b418ed6cc5">hwloc_opencl_get_device_osdev_by_index</a></div><div class="ttdeci">static hwloc_obj_t hwloc_opencl_get_device_osdev_by_index(hwloc_topology_t topology, unsigned platform_index, unsigned device_index)</div><div class="ttdoc">Get the hwloc OS device object corresponding to the OpenCL device for the given indexes.</div><div class="ttdef"><b>Definition:</b> opencl.h:178</div></div>
237 <div class="ttc" id="aa00250_html"><div class="ttname"><a href="a00250.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:395</div></div>
238 <div class="ttc" id="aa00250_html_abb709ec38f2970677e4e57d1d30be96d"><div class="ttname"><a href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">hwloc_obj::name</a></div><div class="ttdeci">char * name</div><div class="ttdoc">Object-specific name if any. Mostly used for identifying OS devices and Misc objects where a name str...</div><div class="ttdef"><b>Definition:</b> hwloc.h:407</div></div>
239 <div class="ttc" id="aa00250_html_acc4f0803f244867e68fe0036800be5de"><div class="ttname"><a href="a00250.html#acc4f0803f244867e68fe0036800be5de">hwloc_obj::type</a></div><div class="ttdeci">hwloc_obj_type_t type</div><div class="ttdoc">Type of object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:397</div></div>
240 <div class="ttc" id="aa00250_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:414</div></div>
241 <div class="ttc" id="aa00250_html_adc494f6aed939992be1c55cca5822900"><div class="ttname"><a href="a00250.html#adc494f6aed939992be1c55cca5822900">hwloc_obj::parent</a></div><div class="ttdeci">struct hwloc_obj * parent</div><div class="ttdoc">Parent, NULL if root (Machine object)</div><div class="ttdef"><b>Definition:</b> hwloc.h:445</div></div>
242 <div class="ttc" id="aa00254_html_a0b66da7ab072f7c016f8ed86701f5a7c"><div class="ttname"><a href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">hwloc_obj_attr_u::pcidev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_pcidev_attr_s pcidev</div></div>
243 <div class="ttc" id="aa00254_html_aaf7a5c38b5185703ff18c46ad2761dcf"><div class="ttname"><a href="a00254.html#aaf7a5c38b5185703ff18c46ad2761dcf">hwloc_obj_attr_u::osdev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_osdev_attr_s osdev</div></div>
244 <div class="ttc" id="aa00274_html_a3d70c84a12f7e93d14c8d47bf4fd9dc5"><div class="ttname"><a href="a00274.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">hwloc_obj_attr_u::hwloc_pcidev_attr_s::dev</a></div><div class="ttdeci">unsigned char dev</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
245 <div class="ttc" id="aa00274_html_a695f32df53f4ef728670bfcf31b74e0f"><div class="ttname"><a href="a00274.html#a695f32df53f4ef728670bfcf31b74e0f">hwloc_obj_attr_u::hwloc_pcidev_attr_s::func</a></div><div class="ttdeci">unsigned char func</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
246 <div class="ttc" id="aa00274_html_a8fba44988deb98613c1505a4019a34dc"><div class="ttname"><a href="a00274.html#a8fba44988deb98613c1505a4019a34dc">hwloc_obj_attr_u::hwloc_pcidev_attr_s::domain</a></div><div class="ttdeci">unsigned short domain</div><div class="ttdef"><b>Definition:</b> hwloc.h:634</div></div>
247 <div class="ttc" id="aa00274_html_aae99e035e8d1387d7b8768aaa8eceb0a"><div class="ttname"><a href="a00274.html#aae99e035e8d1387d7b8768aaa8eceb0a">hwloc_obj_attr_u::hwloc_pcidev_attr_s::bus</a></div><div class="ttdeci">unsigned char bus</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
248 <div class="ttc" id="aa00294_html_a31e019e27e54ac6138d04be639bb96f9"><div class="ttname"><a href="a00294.html#a31e019e27e54ac6138d04be639bb96f9">hwloc_obj_attr_u::hwloc_osdev_attr_s::type</a></div><div class="ttdeci">hwloc_obj_osdev_type_t type</div><div class="ttdef"><b>Definition:</b> hwloc.h:665</div></div>
249 <div class="ttc" id="aa00334_html"><div class="ttname"><a href="a00334.html">hwloc_cl_device_topology_amd</a></div><div class="ttdef"><b>Definition:</b> opencl.h:46</div></div>
250 <div class="ttc" id="aa00334_html_a017033a953d71455b067007cabb92e9c"><div class="ttname"><a href="a00334.html#a017033a953d71455b067007cabb92e9c">hwloc_cl_device_topology_amd::device</a></div><div class="ttdeci">cl_char device</div><div class="ttdef"><b>Definition:</b> opencl.h:48</div></div>
251 <div class="ttc" id="aa00334_html_a05e9a845012cd9d1f13a39cc35ab40a1"><div class="ttname"><a href="a00334.html#a05e9a845012cd9d1f13a39cc35ab40a1">hwloc_cl_device_topology_amd::pcie</a></div><div class="ttdeci">struct hwloc_cl_device_topology_amd::@4 pcie</div></div>
252 <div class="ttc" id="aa00334_html_a4a23e3cc034b7ab105cab0e863dcab69"><div class="ttname"><a href="a00334.html#a4a23e3cc034b7ab105cab0e863dcab69">hwloc_cl_device_topology_amd::bus</a></div><div class="ttdeci">cl_char bus</div><div class="ttdef"><b>Definition:</b> opencl.h:48</div></div>
253 <div class="ttc" id="aa00334_html_a77a67ac73cff98d330ef7258b240bac3"><div class="ttname"><a href="a00334.html#a77a67ac73cff98d330ef7258b240bac3">hwloc_cl_device_topology_amd::function</a></div><div class="ttdeci">cl_char function</div><div class="ttdef"><b>Definition:</b> opencl.h:48</div></div>
254 <div class="ttc" id="aa00334_html_a7bba6ab297b6f44e43c5937b80b4cfb6"><div class="ttname"><a href="a00334.html#a7bba6ab297b6f44e43c5937b80b4cfb6">hwloc_cl_device_topology_amd::raw</a></div><div class="ttdeci">struct hwloc_cl_device_topology_amd::@3 raw</div></div>
255 <div class="ttc" id="aa00334_html_a8ec4ea89b862bb271845b48063f332b4"><div class="ttname"><a href="a00334.html#a8ec4ea89b862bb271845b48063f332b4">hwloc_cl_device_topology_amd::type</a></div><div class="ttdeci">cl_uint type</div><div class="ttdef"><b>Definition:</b> opencl.h:47</div></div>
256256 </div><!-- fragment --></div><!-- contents -->
257257 <!-- start footer part -->
258258 <hr class="footer"/><address class="footer"><small>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4747 </div><!--header-->
4848 <div class="contents">
4949 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
50 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2010-2020 Inria. All rights reserved.</span></div>
50 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2010-2021 Inria. All rights reserved.</span></div>
5151 <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * Copyright © 2010-2011 Université Bordeaux</span></div>
5252 <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Copyright © 2011 Cisco Systems, Inc. All rights reserved.</span></div>
5353 <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
7272 <div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
7373 <div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
7474 <div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
75 <div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="a00225.html#ga1084285e8ff8b7df91c28917637481c6"> 47</a></span>&#160;<a class="code" href="a00225.html#ga1084285e8ff8b7df91c28917637481c6">hwloc_cuda_get_device_pci_ids</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused,</div>
75 <div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="a00230.html#ga1084285e8ff8b7df91c28917637481c6"> 47</a></span>&#160;<a class="code" href="a00230.html#ga1084285e8ff8b7df91c28917637481c6">hwloc_cuda_get_device_pci_ids</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused,</div>
7676 <div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; CUdevice cudevice, <span class="keywordtype">int</span> *domain, <span class="keywordtype">int</span> *bus, <span class="keywordtype">int</span> *dev)</div>
7777 <div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;{</div>
7878 <div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; CUresult cres;</div>
101101 <div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;}</div>
102102 <div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; </div>
103103 <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
104 <div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="a00225.html#gaec41c6b4dc3361156beb7dea2a74f5a3"> 92</a></span>&#160;<a class="code" href="a00225.html#gaec41c6b4dc3361156beb7dea2a74f5a3">hwloc_cuda_get_device_cpuset</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused,</div>
105 <div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; CUdevice cudevice, <a class="code" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</div>
104 <div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="a00230.html#gaec41c6b4dc3361156beb7dea2a74f5a3"> 92</a></span>&#160;<a class="code" href="a00230.html#gaec41c6b4dc3361156beb7dea2a74f5a3">hwloc_cuda_get_device_cpuset</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused,</div>
105 <div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; CUdevice cudevice, <a class="code" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</div>
106106 <div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;{</div>
107107 <div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="preprocessor">#ifdef HWLOC_LINUX_SYS</span></div>
108108 <div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="comment">/* If we&#39;re on Linux, use the sysfs mechanism to get the local cpus */</span></div>
110110 <div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordtype">char</span> path[HWLOC_CUDA_DEVICE_SYSFS_PATH_MAX];</div>
111111 <div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordtype">int</span> domainid, busid, deviceid;</div>
112112 <div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; </div>
113 <div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00225.html#ga1084285e8ff8b7df91c28917637481c6">hwloc_cuda_get_device_pci_ids</a>(topology, cudevice, &amp;domainid, &amp;busid, &amp;deviceid))</div>
113 <div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00230.html#ga1084285e8ff8b7df91c28917637481c6">hwloc_cuda_get_device_pci_ids</a>(topology, cudevice, &amp;domainid, &amp;busid, &amp;deviceid))</div>
114114 <div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">return</span> -1;</div>
115115 <div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; </div>
116 <div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00199.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a>(topology)) {</div>
116 <div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00202.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a>(topology)) {</div>
117117 <div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; errno = EINVAL;</div>
118118 <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">return</span> -1;</div>
119119 <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; }</div>
120120 <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; </div>
121121 <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; sprintf(path, <span class="stringliteral">&quot;/sys/bus/pci/devices/%04x:%02x:%02x.0/local_cpus&quot;</span>, domainid, busid, deviceid);</div>
122 <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00220.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a>(path, set) &lt; 0</div>
123 <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; || <a class="code" href="a00211.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(set))</div>
124 <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <a class="code" href="a00211.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00208.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
122 <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00224.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a>(path, set) &lt; 0</div>
123 <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; || <a class="code" href="a00214.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(set))</div>
124 <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <a class="code" href="a00214.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00211.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
125125 <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="preprocessor">#else</span></div>
126126 <div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="comment">/* Non-Linux systems simply get a full cpuset */</span></div>
127 <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <a class="code" href="a00211.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00208.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
127 <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <a class="code" href="a00214.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00211.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
128128 <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;<span class="preprocessor">#endif</span></div>
129129 <div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">return</span> 0;</div>
130130 <div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;}</div>
131131 <div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; </div>
132 <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
133 <div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="a00225.html#ga11fed607fa404e29e8da010f3ec128e4"> 131</a></span>&#160;<a class="code" href="a00225.html#ga11fed607fa404e29e8da010f3ec128e4">hwloc_cuda_get_device_pcidev</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, CUdevice cudevice)</div>
132 <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
133 <div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="a00230.html#ga11fed607fa404e29e8da010f3ec128e4"> 131</a></span>&#160;<a class="code" href="a00230.html#ga11fed607fa404e29e8da010f3ec128e4">hwloc_cuda_get_device_pcidev</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, CUdevice cudevice)</div>
134134 <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;{</div>
135135 <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordtype">int</span> domain, bus, dev;</div>
136136 <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; </div>
137 <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00225.html#ga1084285e8ff8b7df91c28917637481c6">hwloc_cuda_get_device_pci_ids</a>(topology, cudevice, &amp;domain, &amp;bus, &amp;dev))</div>
137 <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00230.html#ga1084285e8ff8b7df91c28917637481c6">hwloc_cuda_get_device_pci_ids</a>(topology, cudevice, &amp;domain, &amp;bus, &amp;dev))</div>
138138 <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">return</span> NULL;</div>
139139 <div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; </div>
140 <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">return</span> <a class="code" href="a00210.html#gacdbaf0db98872e224b7883a84bfb0455">hwloc_get_pcidev_by_busid</a>(topology, domain, bus, dev, 0);</div>
140 <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">return</span> <a class="code" href="a00213.html#gacdbaf0db98872e224b7883a84bfb0455">hwloc_get_pcidev_by_busid</a>(topology, domain, bus, dev, 0);</div>
141141 <div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;}</div>
142142 <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; </div>
143 <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
144 <div class="line"><a name="l00157"></a><span class="lineno"><a class="line" href="a00225.html#ga252cb72175f1a2d682f883a0add80a66"> 157</a></span>&#160;<a class="code" href="a00225.html#ga252cb72175f1a2d682f883a0add80a66">hwloc_cuda_get_device_osdev</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, CUdevice cudevice)</div>
143 <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
144 <div class="line"><a name="l00157"></a><span class="lineno"><a class="line" href="a00230.html#ga252cb72175f1a2d682f883a0add80a66"> 157</a></span>&#160;<a class="code" href="a00230.html#ga252cb72175f1a2d682f883a0add80a66">hwloc_cuda_get_device_osdev</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, CUdevice cudevice)</div>
145145 <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;{</div>
146 <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> osdev = NULL;</div>
146 <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> osdev = NULL;</div>
147147 <div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordtype">int</span> domain, bus, dev;</div>
148148 <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; </div>
149 <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00225.html#ga1084285e8ff8b7df91c28917637481c6">hwloc_cuda_get_device_pci_ids</a>(topology, cudevice, &amp;domain, &amp;bus, &amp;dev))</div>
149 <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00230.html#ga1084285e8ff8b7df91c28917637481c6">hwloc_cuda_get_device_pci_ids</a>(topology, cudevice, &amp;domain, &amp;bus, &amp;dev))</div>
150150 <div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">return</span> NULL;</div>
151151 <div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; </div>
152152 <div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; osdev = NULL;</div>
153 <div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00210.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
154 <div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> pcidev = osdev-&gt;<a class="code" href="a00244.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
155 <div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">if</span> (strncmp(osdev-&gt;<a class="code" href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, <span class="stringliteral">&quot;cuda&quot;</span>, 4))</div>
153 <div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00213.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
154 <div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> pcidev = osdev-&gt;<a class="code" href="a00250.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
155 <div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">if</span> (strncmp(osdev-&gt;<a class="code" href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, <span class="stringliteral">&quot;cuda&quot;</span>, 4))</div>
156156 <div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">continue</span>;</div>
157157 <div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">if</span> (pcidev</div>
158 <div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00244.html#acc4f0803f244867e68fe0036800be5de">type</a> == <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div>
159 <div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; &amp;&amp; (<span class="keywordtype">int</span>) pcidev-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00268.html#a8fba44988deb98613c1505a4019a34dc">domain</a> == domain</div>
160 <div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; &amp;&amp; (<span class="keywordtype">int</span>) pcidev-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00268.html#aae99e035e8d1387d7b8768aaa8eceb0a">bus</a> == bus</div>
161 <div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; &amp;&amp; (<span class="keywordtype">int</span>) pcidev-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00268.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">dev</a> == dev</div>
162 <div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00268.html#a695f32df53f4ef728670bfcf31b74e0f">func</a> == 0)</div>
158 <div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00250.html#acc4f0803f244867e68fe0036800be5de">type</a> == <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div>
159 <div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; &amp;&amp; (<span class="keywordtype">int</span>) pcidev-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00274.html#a8fba44988deb98613c1505a4019a34dc">domain</a> == domain</div>
160 <div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; &amp;&amp; (<span class="keywordtype">int</span>) pcidev-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00274.html#aae99e035e8d1387d7b8768aaa8eceb0a">bus</a> == bus</div>
161 <div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; &amp;&amp; (<span class="keywordtype">int</span>) pcidev-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00274.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">dev</a> == dev</div>
162 <div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00274.html#a695f32df53f4ef728670bfcf31b74e0f">func</a> == 0)</div>
163163 <div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordflow">return</span> osdev;</div>
164164 <div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="comment">/* if PCI are filtered out, we need a info attr to match on */</span></div>
165165 <div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; }</div>
167167 <div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="keywordflow">return</span> NULL;</div>
168168 <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;}</div>
169169 <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; </div>
170 <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
171 <div class="line"><a name="l00199"></a><span class="lineno"><a class="line" href="a00225.html#ga12ee892994ed037e8f64bbffda02cf2e"> 199</a></span>&#160;<a class="code" href="a00225.html#ga12ee892994ed037e8f64bbffda02cf2e">hwloc_cuda_get_device_osdev_by_index</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">unsigned</span> idx)</div>
170 <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
171 <div class="line"><a name="l00199"></a><span class="lineno"><a class="line" href="a00230.html#ga12ee892994ed037e8f64bbffda02cf2e"> 199</a></span>&#160;<a class="code" href="a00230.html#ga12ee892994ed037e8f64bbffda02cf2e">hwloc_cuda_get_device_osdev_by_index</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">unsigned</span> idx)</div>
172172 <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;{</div>
173 <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> osdev = NULL;</div>
174 <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00210.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
175 <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83">HWLOC_OBJ_OSDEV_COPROC</a> == osdev-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a>.<a class="code" href="a00288.html#a31e019e27e54ac6138d04be639bb96f9">type</a></div>
176 <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; &amp;&amp; osdev-&gt;<a class="code" href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">name</a></div>
177 <div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; &amp;&amp; !strncmp(<span class="stringliteral">&quot;cuda&quot;</span>, osdev-&gt;<a class="code" href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, 4)</div>
178 <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; &amp;&amp; atoi(osdev-&gt;<a class="code" href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">name</a> + 4) == (<span class="keywordtype">int</span>) idx)</div>
173 <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> osdev = NULL;</div>
174 <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00213.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
175 <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83">HWLOC_OBJ_OSDEV_COPROC</a> == osdev-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a>.<a class="code" href="a00294.html#a31e019e27e54ac6138d04be639bb96f9">type</a></div>
176 <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; &amp;&amp; osdev-&gt;<a class="code" href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">name</a></div>
177 <div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; &amp;&amp; !strncmp(<span class="stringliteral">&quot;cuda&quot;</span>, osdev-&gt;<a class="code" href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, 4)</div>
178 <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; &amp;&amp; atoi(osdev-&gt;<a class="code" href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">name</a> + 4) == (<span class="keywordtype">int</span>) idx)</div>
179179 <div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">return</span> osdev;</div>
180180 <div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; }</div>
181181 <div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">return</span> NULL;</div>
187187 <div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; </div>
188188 <div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; </div>
189189 <div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_CUDA_H */</span><span class="preprocessor"></span></div>
190 <div class="ttc" id="aa00189_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
191 <div class="ttc" id="aa00190_html_gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83"><div class="ttname"><a href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83">HWLOC_OBJ_OSDEV_COPROC</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_COPROC</div><div class="ttdoc">Operating system co-processor device. For instance &quot;opencl0d0&quot; for a OpenCL device,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:352</div></div>
192 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div><div class="ttdeci">@ HWLOC_OBJ_PCI_DEVICE</div><div class="ttdoc">PCI device (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:269</div></div>
193 <div class="ttc" id="aa00192_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
194 <div class="ttc" id="aa00199_html_ga68ffdcfd9175cdf40709801092f18017"><div class="ttname"><a href="a00199.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a></div><div class="ttdeci">int hwloc_topology_is_thissystem(hwloc_topology_t restrict topology)</div><div class="ttdoc">Does the topology context come from this system?</div></div>
195 <div class="ttc" id="aa00208_html_gaee30e03391c1ed7dfd617fb5c7bbb033"><div class="ttname"><a href="a00208.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a></div><div class="ttdeci">hwloc_const_cpuset_t hwloc_topology_get_complete_cpuset(hwloc_topology_t topology)</div><div class="ttdoc">Get complete CPU set.</div></div>
196 <div class="ttc" id="aa00210_html_ga8b4584c8949e2c5f1c97ba7fe92b8145"><div class="ttname"><a href="a00210.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_osdev(hwloc_topology_t topology, hwloc_obj_t prev)</div><div class="ttdoc">Get the next OS device in the system.</div><div class="ttdef"><b>Definition:</b> helper.h:1151</div></div>
197 <div class="ttc" id="aa00210_html_gacdbaf0db98872e224b7883a84bfb0455"><div class="ttname"><a href="a00210.html#gacdbaf0db98872e224b7883a84bfb0455">hwloc_get_pcidev_by_busid</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_pcidev_by_busid(hwloc_topology_t topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)</div><div class="ttdoc">Find the PCI device object matching the PCI bus id given domain, bus device and function PCI bus id.</div><div class="ttdef"><b>Definition:</b> helper.h:1114</div></div>
198 <div class="ttc" id="aa00211_html_ga5b64be28f5a7176ed8ad0d6a90bdf108"><div class="ttname"><a href="a00211.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a></div><div class="ttdeci">int hwloc_bitmap_iszero(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Test whether bitmap bitmap is empty.</div></div>
199 <div class="ttc" id="aa00211_html_ga72a29824798b48784b8217471ec8f14c"><div class="ttname"><a href="a00211.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a></div><div class="ttdeci">int hwloc_bitmap_copy(hwloc_bitmap_t dst, hwloc_const_bitmap_t src)</div><div class="ttdoc">Copy the contents of bitmap src into the already allocated bitmap dst.</div></div>
200 <div class="ttc" id="aa00220_html_gaf72d83e273803226ce772973e37b85de"><div class="ttname"><a href="a00220.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a></div><div class="ttdeci">int hwloc_linux_read_path_as_cpumask(const char *path, hwloc_bitmap_t set)</div><div class="ttdoc">Convert a linux kernel cpumask file path into a hwloc bitmap set.</div></div>
201 <div class="ttc" id="aa00225_html_ga1084285e8ff8b7df91c28917637481c6"><div class="ttname"><a href="a00225.html#ga1084285e8ff8b7df91c28917637481c6">hwloc_cuda_get_device_pci_ids</a></div><div class="ttdeci">static int hwloc_cuda_get_device_pci_ids(hwloc_topology_t topology, CUdevice cudevice, int *domain, int *bus, int *dev)</div><div class="ttdoc">Return the domain, bus and device IDs of the CUDA device cudevice.</div><div class="ttdef"><b>Definition:</b> cuda.h:47</div></div>
202 <div class="ttc" id="aa00225_html_ga11fed607fa404e29e8da010f3ec128e4"><div class="ttname"><a href="a00225.html#ga11fed607fa404e29e8da010f3ec128e4">hwloc_cuda_get_device_pcidev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_cuda_get_device_pcidev(hwloc_topology_t topology, CUdevice cudevice)</div><div class="ttdoc">Get the hwloc PCI device object corresponding to the CUDA device cudevice.</div><div class="ttdef"><b>Definition:</b> cuda.h:131</div></div>
203 <div class="ttc" id="aa00225_html_ga12ee892994ed037e8f64bbffda02cf2e"><div class="ttname"><a href="a00225.html#ga12ee892994ed037e8f64bbffda02cf2e">hwloc_cuda_get_device_osdev_by_index</a></div><div class="ttdeci">static hwloc_obj_t hwloc_cuda_get_device_osdev_by_index(hwloc_topology_t topology, unsigned idx)</div><div class="ttdoc">Get the hwloc OS device object corresponding to the CUDA device whose index is idx.</div><div class="ttdef"><b>Definition:</b> cuda.h:199</div></div>
204 <div class="ttc" id="aa00225_html_ga252cb72175f1a2d682f883a0add80a66"><div class="ttname"><a href="a00225.html#ga252cb72175f1a2d682f883a0add80a66">hwloc_cuda_get_device_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_cuda_get_device_osdev(hwloc_topology_t topology, CUdevice cudevice)</div><div class="ttdoc">Get the hwloc OS device object corresponding to CUDA device cudevice.</div><div class="ttdef"><b>Definition:</b> cuda.h:157</div></div>
205 <div class="ttc" id="aa00225_html_gaec41c6b4dc3361156beb7dea2a74f5a3"><div class="ttname"><a href="a00225.html#gaec41c6b4dc3361156beb7dea2a74f5a3">hwloc_cuda_get_device_cpuset</a></div><div class="ttdeci">static int hwloc_cuda_get_device_cpuset(hwloc_topology_t topology, CUdevice cudevice, hwloc_cpuset_t set)</div><div class="ttdoc">Get the CPU set of processors that are physically close to device cudevice.</div><div class="ttdef"><b>Definition:</b> cuda.h:92</div></div>
206 <div class="ttc" id="aa00244_html"><div class="ttname"><a href="a00244.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:395</div></div>
207 <div class="ttc" id="aa00244_html_abb709ec38f2970677e4e57d1d30be96d"><div class="ttname"><a href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">hwloc_obj::name</a></div><div class="ttdeci">char * name</div><div class="ttdoc">Object-specific name if any. Mostly used for identifying OS devices and Misc objects where a name str...</div><div class="ttdef"><b>Definition:</b> hwloc.h:407</div></div>
208 <div class="ttc" id="aa00244_html_acc4f0803f244867e68fe0036800be5de"><div class="ttname"><a href="a00244.html#acc4f0803f244867e68fe0036800be5de">hwloc_obj::type</a></div><div class="ttdeci">hwloc_obj_type_t type</div><div class="ttdoc">Type of object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:397</div></div>
209 <div class="ttc" id="aa00244_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:414</div></div>
210 <div class="ttc" id="aa00244_html_adc494f6aed939992be1c55cca5822900"><div class="ttname"><a href="a00244.html#adc494f6aed939992be1c55cca5822900">hwloc_obj::parent</a></div><div class="ttdeci">struct hwloc_obj * parent</div><div class="ttdoc">Parent, NULL if root (Machine object)</div><div class="ttdef"><b>Definition:</b> hwloc.h:445</div></div>
211 <div class="ttc" id="aa00248_html_a0b66da7ab072f7c016f8ed86701f5a7c"><div class="ttname"><a href="a00248.html#a0b66da7ab072f7c016f8ed86701f5a7c">hwloc_obj_attr_u::pcidev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_pcidev_attr_s pcidev</div></div>
212 <div class="ttc" id="aa00248_html_aaf7a5c38b5185703ff18c46ad2761dcf"><div class="ttname"><a href="a00248.html#aaf7a5c38b5185703ff18c46ad2761dcf">hwloc_obj_attr_u::osdev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_osdev_attr_s osdev</div></div>
213 <div class="ttc" id="aa00268_html_a3d70c84a12f7e93d14c8d47bf4fd9dc5"><div class="ttname"><a href="a00268.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">hwloc_obj_attr_u::hwloc_pcidev_attr_s::dev</a></div><div class="ttdeci">unsigned char dev</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
214 <div class="ttc" id="aa00268_html_a695f32df53f4ef728670bfcf31b74e0f"><div class="ttname"><a href="a00268.html#a695f32df53f4ef728670bfcf31b74e0f">hwloc_obj_attr_u::hwloc_pcidev_attr_s::func</a></div><div class="ttdeci">unsigned char func</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
215 <div class="ttc" id="aa00268_html_a8fba44988deb98613c1505a4019a34dc"><div class="ttname"><a href="a00268.html#a8fba44988deb98613c1505a4019a34dc">hwloc_obj_attr_u::hwloc_pcidev_attr_s::domain</a></div><div class="ttdeci">unsigned short domain</div><div class="ttdef"><b>Definition:</b> hwloc.h:634</div></div>
216 <div class="ttc" id="aa00268_html_aae99e035e8d1387d7b8768aaa8eceb0a"><div class="ttname"><a href="a00268.html#aae99e035e8d1387d7b8768aaa8eceb0a">hwloc_obj_attr_u::hwloc_pcidev_attr_s::bus</a></div><div class="ttdeci">unsigned char bus</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
217 <div class="ttc" id="aa00288_html_a31e019e27e54ac6138d04be639bb96f9"><div class="ttname"><a href="a00288.html#a31e019e27e54ac6138d04be639bb96f9">hwloc_obj_attr_u::hwloc_osdev_attr_s::type</a></div><div class="ttdeci">hwloc_obj_osdev_type_t type</div><div class="ttdef"><b>Definition:</b> hwloc.h:665</div></div>
190 <div class="ttc" id="aa00192_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
191 <div class="ttc" id="aa00193_html_gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83"><div class="ttname"><a href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83">HWLOC_OBJ_OSDEV_COPROC</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_COPROC</div><div class="ttdoc">Operating system co-processor device. For instance &quot;opencl0d0&quot; for a OpenCL device,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:352</div></div>
192 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div><div class="ttdeci">@ HWLOC_OBJ_PCI_DEVICE</div><div class="ttdoc">PCI device (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:269</div></div>
193 <div class="ttc" id="aa00195_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
194 <div class="ttc" id="aa00202_html_ga68ffdcfd9175cdf40709801092f18017"><div class="ttname"><a href="a00202.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a></div><div class="ttdeci">int hwloc_topology_is_thissystem(hwloc_topology_t restrict topology)</div><div class="ttdoc">Does the topology context come from this system?</div></div>
195 <div class="ttc" id="aa00211_html_gaee30e03391c1ed7dfd617fb5c7bbb033"><div class="ttname"><a href="a00211.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a></div><div class="ttdeci">hwloc_const_cpuset_t hwloc_topology_get_complete_cpuset(hwloc_topology_t topology)</div><div class="ttdoc">Get complete CPU set.</div></div>
196 <div class="ttc" id="aa00213_html_ga8b4584c8949e2c5f1c97ba7fe92b8145"><div class="ttname"><a href="a00213.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_osdev(hwloc_topology_t topology, hwloc_obj_t prev)</div><div class="ttdoc">Get the next OS device in the system.</div><div class="ttdef"><b>Definition:</b> helper.h:1194</div></div>
197 <div class="ttc" id="aa00213_html_gacdbaf0db98872e224b7883a84bfb0455"><div class="ttname"><a href="a00213.html#gacdbaf0db98872e224b7883a84bfb0455">hwloc_get_pcidev_by_busid</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_pcidev_by_busid(hwloc_topology_t topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)</div><div class="ttdoc">Find the PCI device object matching the PCI bus id given domain, bus device and function PCI bus id.</div><div class="ttdef"><b>Definition:</b> helper.h:1157</div></div>
198 <div class="ttc" id="aa00214_html_ga5b64be28f5a7176ed8ad0d6a90bdf108"><div class="ttname"><a href="a00214.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a></div><div class="ttdeci">int hwloc_bitmap_iszero(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Test whether bitmap bitmap is empty.</div></div>
199 <div class="ttc" id="aa00214_html_ga72a29824798b48784b8217471ec8f14c"><div class="ttname"><a href="a00214.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a></div><div class="ttdeci">int hwloc_bitmap_copy(hwloc_bitmap_t dst, hwloc_const_bitmap_t src)</div><div class="ttdoc">Copy the contents of bitmap src into the already allocated bitmap dst.</div></div>
200 <div class="ttc" id="aa00224_html_gaf72d83e273803226ce772973e37b85de"><div class="ttname"><a href="a00224.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a></div><div class="ttdeci">int hwloc_linux_read_path_as_cpumask(const char *path, hwloc_bitmap_t set)</div><div class="ttdoc">Convert a linux kernel cpumask file path into a hwloc bitmap set.</div></div>
201 <div class="ttc" id="aa00230_html_ga1084285e8ff8b7df91c28917637481c6"><div class="ttname"><a href="a00230.html#ga1084285e8ff8b7df91c28917637481c6">hwloc_cuda_get_device_pci_ids</a></div><div class="ttdeci">static int hwloc_cuda_get_device_pci_ids(hwloc_topology_t topology, CUdevice cudevice, int *domain, int *bus, int *dev)</div><div class="ttdoc">Return the domain, bus and device IDs of the CUDA device cudevice.</div><div class="ttdef"><b>Definition:</b> cuda.h:47</div></div>
202 <div class="ttc" id="aa00230_html_ga11fed607fa404e29e8da010f3ec128e4"><div class="ttname"><a href="a00230.html#ga11fed607fa404e29e8da010f3ec128e4">hwloc_cuda_get_device_pcidev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_cuda_get_device_pcidev(hwloc_topology_t topology, CUdevice cudevice)</div><div class="ttdoc">Get the hwloc PCI device object corresponding to the CUDA device cudevice.</div><div class="ttdef"><b>Definition:</b> cuda.h:131</div></div>
203 <div class="ttc" id="aa00230_html_ga12ee892994ed037e8f64bbffda02cf2e"><div class="ttname"><a href="a00230.html#ga12ee892994ed037e8f64bbffda02cf2e">hwloc_cuda_get_device_osdev_by_index</a></div><div class="ttdeci">static hwloc_obj_t hwloc_cuda_get_device_osdev_by_index(hwloc_topology_t topology, unsigned idx)</div><div class="ttdoc">Get the hwloc OS device object corresponding to the CUDA device whose index is idx.</div><div class="ttdef"><b>Definition:</b> cuda.h:199</div></div>
204 <div class="ttc" id="aa00230_html_ga252cb72175f1a2d682f883a0add80a66"><div class="ttname"><a href="a00230.html#ga252cb72175f1a2d682f883a0add80a66">hwloc_cuda_get_device_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_cuda_get_device_osdev(hwloc_topology_t topology, CUdevice cudevice)</div><div class="ttdoc">Get the hwloc OS device object corresponding to CUDA device cudevice.</div><div class="ttdef"><b>Definition:</b> cuda.h:157</div></div>
205 <div class="ttc" id="aa00230_html_gaec41c6b4dc3361156beb7dea2a74f5a3"><div class="ttname"><a href="a00230.html#gaec41c6b4dc3361156beb7dea2a74f5a3">hwloc_cuda_get_device_cpuset</a></div><div class="ttdeci">static int hwloc_cuda_get_device_cpuset(hwloc_topology_t topology, CUdevice cudevice, hwloc_cpuset_t set)</div><div class="ttdoc">Get the CPU set of processors that are physically close to device cudevice.</div><div class="ttdef"><b>Definition:</b> cuda.h:92</div></div>
206 <div class="ttc" id="aa00250_html"><div class="ttname"><a href="a00250.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:395</div></div>
207 <div class="ttc" id="aa00250_html_abb709ec38f2970677e4e57d1d30be96d"><div class="ttname"><a href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">hwloc_obj::name</a></div><div class="ttdeci">char * name</div><div class="ttdoc">Object-specific name if any. Mostly used for identifying OS devices and Misc objects where a name str...</div><div class="ttdef"><b>Definition:</b> hwloc.h:407</div></div>
208 <div class="ttc" id="aa00250_html_acc4f0803f244867e68fe0036800be5de"><div class="ttname"><a href="a00250.html#acc4f0803f244867e68fe0036800be5de">hwloc_obj::type</a></div><div class="ttdeci">hwloc_obj_type_t type</div><div class="ttdoc">Type of object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:397</div></div>
209 <div class="ttc" id="aa00250_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:414</div></div>
210 <div class="ttc" id="aa00250_html_adc494f6aed939992be1c55cca5822900"><div class="ttname"><a href="a00250.html#adc494f6aed939992be1c55cca5822900">hwloc_obj::parent</a></div><div class="ttdeci">struct hwloc_obj * parent</div><div class="ttdoc">Parent, NULL if root (Machine object)</div><div class="ttdef"><b>Definition:</b> hwloc.h:445</div></div>
211 <div class="ttc" id="aa00254_html_a0b66da7ab072f7c016f8ed86701f5a7c"><div class="ttname"><a href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">hwloc_obj_attr_u::pcidev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_pcidev_attr_s pcidev</div></div>
212 <div class="ttc" id="aa00254_html_aaf7a5c38b5185703ff18c46ad2761dcf"><div class="ttname"><a href="a00254.html#aaf7a5c38b5185703ff18c46ad2761dcf">hwloc_obj_attr_u::osdev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_osdev_attr_s osdev</div></div>
213 <div class="ttc" id="aa00274_html_a3d70c84a12f7e93d14c8d47bf4fd9dc5"><div class="ttname"><a href="a00274.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">hwloc_obj_attr_u::hwloc_pcidev_attr_s::dev</a></div><div class="ttdeci">unsigned char dev</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
214 <div class="ttc" id="aa00274_html_a695f32df53f4ef728670bfcf31b74e0f"><div class="ttname"><a href="a00274.html#a695f32df53f4ef728670bfcf31b74e0f">hwloc_obj_attr_u::hwloc_pcidev_attr_s::func</a></div><div class="ttdeci">unsigned char func</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
215 <div class="ttc" id="aa00274_html_a8fba44988deb98613c1505a4019a34dc"><div class="ttname"><a href="a00274.html#a8fba44988deb98613c1505a4019a34dc">hwloc_obj_attr_u::hwloc_pcidev_attr_s::domain</a></div><div class="ttdeci">unsigned short domain</div><div class="ttdef"><b>Definition:</b> hwloc.h:634</div></div>
216 <div class="ttc" id="aa00274_html_aae99e035e8d1387d7b8768aaa8eceb0a"><div class="ttname"><a href="a00274.html#aae99e035e8d1387d7b8768aaa8eceb0a">hwloc_obj_attr_u::hwloc_pcidev_attr_s::bus</a></div><div class="ttdeci">unsigned char bus</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
217 <div class="ttc" id="aa00294_html_a31e019e27e54ac6138d04be639bb96f9"><div class="ttname"><a href="a00294.html#a31e019e27e54ac6138d04be639bb96f9">hwloc_obj_attr_u::hwloc_osdev_attr_s::type</a></div><div class="ttdeci">hwloc_obj_osdev_type_t type</div><div class="ttdef"><b>Definition:</b> hwloc.h:665</div></div>
218218 </div><!-- fragment --></div><!-- contents -->
219219 <!-- start footer part -->
220220 <hr class="footer"/><address class="footer"><small>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4747 </div><!--header-->
4848 <div class="contents">
4949 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
50 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2010-2020 Inria. All rights reserved.</span></div>
50 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2010-2021 Inria. All rights reserved.</span></div>
5151 <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * Copyright © 2010-2011 Université Bordeaux</span></div>
5252 <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Copyright © 2011 Cisco Systems, Inc. All rights reserved.</span></div>
5353 <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
7373 <div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; </div>
7474 <div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; </div>
7575 <div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
76 <div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="a00226.html#gad8b701d9a34923e34bd58defd4c1e704"> 48</a></span>&#160;<a class="code" href="a00226.html#gad8b701d9a34923e34bd58defd4c1e704">hwloc_cudart_get_device_pci_ids</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused,</div>
76 <div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="a00231.html#gad8b701d9a34923e34bd58defd4c1e704"> 48</a></span>&#160;<a class="code" href="a00231.html#gad8b701d9a34923e34bd58defd4c1e704">hwloc_cudart_get_device_pci_ids</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused,</div>
7777 <div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordtype">int</span> idx, <span class="keywordtype">int</span> *domain, <span class="keywordtype">int</span> *bus, <span class="keywordtype">int</span> *dev)</div>
7878 <div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;{</div>
7979 <div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; cudaError_t cerr;</div>
9898 <div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;}</div>
9999 <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; </div>
100100 <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
101 <div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="a00226.html#ga187ca00c6e12800a25151ce331620980"> 89</a></span>&#160;<a class="code" href="a00226.html#ga187ca00c6e12800a25151ce331620980">hwloc_cudart_get_device_cpuset</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused,</div>
102 <div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordtype">int</span> idx, <a class="code" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</div>
101 <div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="a00231.html#ga187ca00c6e12800a25151ce331620980"> 89</a></span>&#160;<a class="code" href="a00231.html#ga187ca00c6e12800a25151ce331620980">hwloc_cudart_get_device_cpuset</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused,</div>
102 <div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordtype">int</span> idx, <a class="code" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</div>
103103 <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;{</div>
104104 <div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="preprocessor">#ifdef HWLOC_LINUX_SYS</span></div>
105105 <div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="comment">/* If we&#39;re on Linux, use the sysfs mechanism to get the local cpus */</span></div>
107107 <div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordtype">char</span> path[HWLOC_CUDART_DEVICE_SYSFS_PATH_MAX];</div>
108108 <div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordtype">int</span> domain, bus, dev;</div>
109109 <div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; </div>
110 <div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00226.html#gad8b701d9a34923e34bd58defd4c1e704">hwloc_cudart_get_device_pci_ids</a>(topology, idx, &amp;domain, &amp;bus, &amp;dev))</div>
110 <div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00231.html#gad8b701d9a34923e34bd58defd4c1e704">hwloc_cudart_get_device_pci_ids</a>(topology, idx, &amp;domain, &amp;bus, &amp;dev))</div>
111111 <div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">return</span> -1;</div>
112112 <div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; </div>
113 <div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00199.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a>(topology)) {</div>
113 <div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00202.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a>(topology)) {</div>
114114 <div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; errno = EINVAL;</div>
115115 <div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">return</span> -1;</div>
116116 <div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; }</div>
117117 <div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; </div>
118118 <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; sprintf(path, <span class="stringliteral">&quot;/sys/bus/pci/devices/%04x:%02x:%02x.0/local_cpus&quot;</span>, (<span class="keywordtype">unsigned</span>) domain, (<span class="keywordtype">unsigned</span>) bus, (<span class="keywordtype">unsigned</span>) dev);</div>
119 <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00220.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a>(path, set) &lt; 0</div>
120 <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; || <a class="code" href="a00211.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(set))</div>
121 <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <a class="code" href="a00211.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00208.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
119 <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00224.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a>(path, set) &lt; 0</div>
120 <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; || <a class="code" href="a00214.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(set))</div>
121 <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <a class="code" href="a00214.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00211.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
122122 <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;<span class="preprocessor">#else</span></div>
123123 <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="comment">/* Non-Linux systems simply get a full cpuset */</span></div>
124 <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <a class="code" href="a00211.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00208.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
124 <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <a class="code" href="a00214.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00211.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
125125 <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;<span class="preprocessor">#endif</span></div>
126126 <div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">return</span> 0;</div>
127127 <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;}</div>
128128 <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; </div>
129 <div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
130 <div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="a00226.html#gaeda4e6efbb36b518b2c286434ad23bb2"> 128</a></span>&#160;<a class="code" href="a00226.html#gaeda4e6efbb36b518b2c286434ad23bb2">hwloc_cudart_get_device_pcidev</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">int</span> idx)</div>
129 <div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
130 <div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="a00231.html#gaeda4e6efbb36b518b2c286434ad23bb2"> 128</a></span>&#160;<a class="code" href="a00231.html#gaeda4e6efbb36b518b2c286434ad23bb2">hwloc_cudart_get_device_pcidev</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">int</span> idx)</div>
131131 <div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;{</div>
132132 <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordtype">int</span> domain, bus, dev;</div>
133133 <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; </div>
134 <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00226.html#gad8b701d9a34923e34bd58defd4c1e704">hwloc_cudart_get_device_pci_ids</a>(topology, idx, &amp;domain, &amp;bus, &amp;dev))</div>
134 <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00231.html#gad8b701d9a34923e34bd58defd4c1e704">hwloc_cudart_get_device_pci_ids</a>(topology, idx, &amp;domain, &amp;bus, &amp;dev))</div>
135135 <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">return</span> NULL;</div>
136136 <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; </div>
137 <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">return</span> <a class="code" href="a00210.html#gacdbaf0db98872e224b7883a84bfb0455">hwloc_get_pcidev_by_busid</a>(topology, domain, bus, dev, 0);</div>
137 <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">return</span> <a class="code" href="a00213.html#gacdbaf0db98872e224b7883a84bfb0455">hwloc_get_pcidev_by_busid</a>(topology, domain, bus, dev, 0);</div>
138138 <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;}</div>
139139 <div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; </div>
140 <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
141 <div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="a00226.html#gac0f3eeaf7712919f298097b1a21307b0"> 156</a></span>&#160;<a class="code" href="a00226.html#gac0f3eeaf7712919f298097b1a21307b0">hwloc_cudart_get_device_osdev_by_index</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">unsigned</span> idx)</div>
140 <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
141 <div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="a00231.html#gac0f3eeaf7712919f298097b1a21307b0"> 156</a></span>&#160;<a class="code" href="a00231.html#gac0f3eeaf7712919f298097b1a21307b0">hwloc_cudart_get_device_osdev_by_index</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">unsigned</span> idx)</div>
142142 <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;{</div>
143 <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> osdev = NULL;</div>
144 <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00210.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
145 <div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83">HWLOC_OBJ_OSDEV_COPROC</a> == osdev-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a>.<a class="code" href="a00288.html#a31e019e27e54ac6138d04be639bb96f9">type</a></div>
146 <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; &amp;&amp; osdev-&gt;<a class="code" href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">name</a></div>
147 <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; &amp;&amp; !strncmp(<span class="stringliteral">&quot;cuda&quot;</span>, osdev-&gt;<a class="code" href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, 4)</div>
148 <div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; &amp;&amp; atoi(osdev-&gt;<a class="code" href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">name</a> + 4) == (<span class="keywordtype">int</span>) idx)</div>
143 <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> osdev = NULL;</div>
144 <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00213.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
145 <div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83">HWLOC_OBJ_OSDEV_COPROC</a> == osdev-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a>.<a class="code" href="a00294.html#a31e019e27e54ac6138d04be639bb96f9">type</a></div>
146 <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; &amp;&amp; osdev-&gt;<a class="code" href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">name</a></div>
147 <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; &amp;&amp; !strncmp(<span class="stringliteral">&quot;cuda&quot;</span>, osdev-&gt;<a class="code" href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, 4)</div>
148 <div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; &amp;&amp; atoi(osdev-&gt;<a class="code" href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">name</a> + 4) == (<span class="keywordtype">int</span>) idx)</div>
149149 <div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">return</span> osdev;</div>
150150 <div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; }</div>
151151 <div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">return</span> NULL;</div>
157157 <div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; </div>
158158 <div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; </div>
159159 <div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_CUDART_H */</span><span class="preprocessor"></span></div>
160 <div class="ttc" id="aa00189_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
161 <div class="ttc" id="aa00190_html_gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83"><div class="ttname"><a href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83">HWLOC_OBJ_OSDEV_COPROC</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_COPROC</div><div class="ttdoc">Operating system co-processor device. For instance &quot;opencl0d0&quot; for a OpenCL device,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:352</div></div>
162 <div class="ttc" id="aa00192_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
163 <div class="ttc" id="aa00199_html_ga68ffdcfd9175cdf40709801092f18017"><div class="ttname"><a href="a00199.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a></div><div class="ttdeci">int hwloc_topology_is_thissystem(hwloc_topology_t restrict topology)</div><div class="ttdoc">Does the topology context come from this system?</div></div>
164 <div class="ttc" id="aa00208_html_gaee30e03391c1ed7dfd617fb5c7bbb033"><div class="ttname"><a href="a00208.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a></div><div class="ttdeci">hwloc_const_cpuset_t hwloc_topology_get_complete_cpuset(hwloc_topology_t topology)</div><div class="ttdoc">Get complete CPU set.</div></div>
165 <div class="ttc" id="aa00210_html_ga8b4584c8949e2c5f1c97ba7fe92b8145"><div class="ttname"><a href="a00210.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_osdev(hwloc_topology_t topology, hwloc_obj_t prev)</div><div class="ttdoc">Get the next OS device in the system.</div><div class="ttdef"><b>Definition:</b> helper.h:1151</div></div>
166 <div class="ttc" id="aa00210_html_gacdbaf0db98872e224b7883a84bfb0455"><div class="ttname"><a href="a00210.html#gacdbaf0db98872e224b7883a84bfb0455">hwloc_get_pcidev_by_busid</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_pcidev_by_busid(hwloc_topology_t topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)</div><div class="ttdoc">Find the PCI device object matching the PCI bus id given domain, bus device and function PCI bus id.</div><div class="ttdef"><b>Definition:</b> helper.h:1114</div></div>
167 <div class="ttc" id="aa00211_html_ga5b64be28f5a7176ed8ad0d6a90bdf108"><div class="ttname"><a href="a00211.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a></div><div class="ttdeci">int hwloc_bitmap_iszero(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Test whether bitmap bitmap is empty.</div></div>
168 <div class="ttc" id="aa00211_html_ga72a29824798b48784b8217471ec8f14c"><div class="ttname"><a href="a00211.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a></div><div class="ttdeci">int hwloc_bitmap_copy(hwloc_bitmap_t dst, hwloc_const_bitmap_t src)</div><div class="ttdoc">Copy the contents of bitmap src into the already allocated bitmap dst.</div></div>
169 <div class="ttc" id="aa00220_html_gaf72d83e273803226ce772973e37b85de"><div class="ttname"><a href="a00220.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a></div><div class="ttdeci">int hwloc_linux_read_path_as_cpumask(const char *path, hwloc_bitmap_t set)</div><div class="ttdoc">Convert a linux kernel cpumask file path into a hwloc bitmap set.</div></div>
170 <div class="ttc" id="aa00226_html_ga187ca00c6e12800a25151ce331620980"><div class="ttname"><a href="a00226.html#ga187ca00c6e12800a25151ce331620980">hwloc_cudart_get_device_cpuset</a></div><div class="ttdeci">static int hwloc_cudart_get_device_cpuset(hwloc_topology_t topology, int idx, hwloc_cpuset_t set)</div><div class="ttdoc">Get the CPU set of processors that are physically close to device idx.</div><div class="ttdef"><b>Definition:</b> cudart.h:89</div></div>
171 <div class="ttc" id="aa00226_html_gac0f3eeaf7712919f298097b1a21307b0"><div class="ttname"><a href="a00226.html#gac0f3eeaf7712919f298097b1a21307b0">hwloc_cudart_get_device_osdev_by_index</a></div><div class="ttdeci">static hwloc_obj_t hwloc_cudart_get_device_osdev_by_index(hwloc_topology_t topology, unsigned idx)</div><div class="ttdoc">Get the hwloc OS device object corresponding to the CUDA device whose index is idx.</div><div class="ttdef"><b>Definition:</b> cudart.h:156</div></div>
172 <div class="ttc" id="aa00226_html_gad8b701d9a34923e34bd58defd4c1e704"><div class="ttname"><a href="a00226.html#gad8b701d9a34923e34bd58defd4c1e704">hwloc_cudart_get_device_pci_ids</a></div><div class="ttdeci">static int hwloc_cudart_get_device_pci_ids(hwloc_topology_t topology, int idx, int *domain, int *bus, int *dev)</div><div class="ttdoc">Return the domain, bus and device IDs of the CUDA device whose index is idx.</div><div class="ttdef"><b>Definition:</b> cudart.h:48</div></div>
173 <div class="ttc" id="aa00226_html_gaeda4e6efbb36b518b2c286434ad23bb2"><div class="ttname"><a href="a00226.html#gaeda4e6efbb36b518b2c286434ad23bb2">hwloc_cudart_get_device_pcidev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_cudart_get_device_pcidev(hwloc_topology_t topology, int idx)</div><div class="ttdoc">Get the hwloc PCI device object corresponding to the CUDA device whose index is idx.</div><div class="ttdef"><b>Definition:</b> cudart.h:128</div></div>
174 <div class="ttc" id="aa00244_html"><div class="ttname"><a href="a00244.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:395</div></div>
175 <div class="ttc" id="aa00244_html_abb709ec38f2970677e4e57d1d30be96d"><div class="ttname"><a href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">hwloc_obj::name</a></div><div class="ttdeci">char * name</div><div class="ttdoc">Object-specific name if any. Mostly used for identifying OS devices and Misc objects where a name str...</div><div class="ttdef"><b>Definition:</b> hwloc.h:407</div></div>
176 <div class="ttc" id="aa00244_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:414</div></div>
177 <div class="ttc" id="aa00248_html_aaf7a5c38b5185703ff18c46ad2761dcf"><div class="ttname"><a href="a00248.html#aaf7a5c38b5185703ff18c46ad2761dcf">hwloc_obj_attr_u::osdev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_osdev_attr_s osdev</div></div>
178 <div class="ttc" id="aa00288_html_a31e019e27e54ac6138d04be639bb96f9"><div class="ttname"><a href="a00288.html#a31e019e27e54ac6138d04be639bb96f9">hwloc_obj_attr_u::hwloc_osdev_attr_s::type</a></div><div class="ttdeci">hwloc_obj_osdev_type_t type</div><div class="ttdef"><b>Definition:</b> hwloc.h:665</div></div>
160 <div class="ttc" id="aa00192_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
161 <div class="ttc" id="aa00193_html_gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83"><div class="ttname"><a href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83">HWLOC_OBJ_OSDEV_COPROC</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_COPROC</div><div class="ttdoc">Operating system co-processor device. For instance &quot;opencl0d0&quot; for a OpenCL device,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:352</div></div>
162 <div class="ttc" id="aa00195_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
163 <div class="ttc" id="aa00202_html_ga68ffdcfd9175cdf40709801092f18017"><div class="ttname"><a href="a00202.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a></div><div class="ttdeci">int hwloc_topology_is_thissystem(hwloc_topology_t restrict topology)</div><div class="ttdoc">Does the topology context come from this system?</div></div>
164 <div class="ttc" id="aa00211_html_gaee30e03391c1ed7dfd617fb5c7bbb033"><div class="ttname"><a href="a00211.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a></div><div class="ttdeci">hwloc_const_cpuset_t hwloc_topology_get_complete_cpuset(hwloc_topology_t topology)</div><div class="ttdoc">Get complete CPU set.</div></div>
165 <div class="ttc" id="aa00213_html_ga8b4584c8949e2c5f1c97ba7fe92b8145"><div class="ttname"><a href="a00213.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_osdev(hwloc_topology_t topology, hwloc_obj_t prev)</div><div class="ttdoc">Get the next OS device in the system.</div><div class="ttdef"><b>Definition:</b> helper.h:1194</div></div>
166 <div class="ttc" id="aa00213_html_gacdbaf0db98872e224b7883a84bfb0455"><div class="ttname"><a href="a00213.html#gacdbaf0db98872e224b7883a84bfb0455">hwloc_get_pcidev_by_busid</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_pcidev_by_busid(hwloc_topology_t topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)</div><div class="ttdoc">Find the PCI device object matching the PCI bus id given domain, bus device and function PCI bus id.</div><div class="ttdef"><b>Definition:</b> helper.h:1157</div></div>
167 <div class="ttc" id="aa00214_html_ga5b64be28f5a7176ed8ad0d6a90bdf108"><div class="ttname"><a href="a00214.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a></div><div class="ttdeci">int hwloc_bitmap_iszero(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Test whether bitmap bitmap is empty.</div></div>
168 <div class="ttc" id="aa00214_html_ga72a29824798b48784b8217471ec8f14c"><div class="ttname"><a href="a00214.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a></div><div class="ttdeci">int hwloc_bitmap_copy(hwloc_bitmap_t dst, hwloc_const_bitmap_t src)</div><div class="ttdoc">Copy the contents of bitmap src into the already allocated bitmap dst.</div></div>
169 <div class="ttc" id="aa00224_html_gaf72d83e273803226ce772973e37b85de"><div class="ttname"><a href="a00224.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a></div><div class="ttdeci">int hwloc_linux_read_path_as_cpumask(const char *path, hwloc_bitmap_t set)</div><div class="ttdoc">Convert a linux kernel cpumask file path into a hwloc bitmap set.</div></div>
170 <div class="ttc" id="aa00231_html_ga187ca00c6e12800a25151ce331620980"><div class="ttname"><a href="a00231.html#ga187ca00c6e12800a25151ce331620980">hwloc_cudart_get_device_cpuset</a></div><div class="ttdeci">static int hwloc_cudart_get_device_cpuset(hwloc_topology_t topology, int idx, hwloc_cpuset_t set)</div><div class="ttdoc">Get the CPU set of processors that are physically close to device idx.</div><div class="ttdef"><b>Definition:</b> cudart.h:89</div></div>
171 <div class="ttc" id="aa00231_html_gac0f3eeaf7712919f298097b1a21307b0"><div class="ttname"><a href="a00231.html#gac0f3eeaf7712919f298097b1a21307b0">hwloc_cudart_get_device_osdev_by_index</a></div><div class="ttdeci">static hwloc_obj_t hwloc_cudart_get_device_osdev_by_index(hwloc_topology_t topology, unsigned idx)</div><div class="ttdoc">Get the hwloc OS device object corresponding to the CUDA device whose index is idx.</div><div class="ttdef"><b>Definition:</b> cudart.h:156</div></div>
172 <div class="ttc" id="aa00231_html_gad8b701d9a34923e34bd58defd4c1e704"><div class="ttname"><a href="a00231.html#gad8b701d9a34923e34bd58defd4c1e704">hwloc_cudart_get_device_pci_ids</a></div><div class="ttdeci">static int hwloc_cudart_get_device_pci_ids(hwloc_topology_t topology, int idx, int *domain, int *bus, int *dev)</div><div class="ttdoc">Return the domain, bus and device IDs of the CUDA device whose index is idx.</div><div class="ttdef"><b>Definition:</b> cudart.h:48</div></div>
173 <div class="ttc" id="aa00231_html_gaeda4e6efbb36b518b2c286434ad23bb2"><div class="ttname"><a href="a00231.html#gaeda4e6efbb36b518b2c286434ad23bb2">hwloc_cudart_get_device_pcidev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_cudart_get_device_pcidev(hwloc_topology_t topology, int idx)</div><div class="ttdoc">Get the hwloc PCI device object corresponding to the CUDA device whose index is idx.</div><div class="ttdef"><b>Definition:</b> cudart.h:128</div></div>
174 <div class="ttc" id="aa00250_html"><div class="ttname"><a href="a00250.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:395</div></div>
175 <div class="ttc" id="aa00250_html_abb709ec38f2970677e4e57d1d30be96d"><div class="ttname"><a href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">hwloc_obj::name</a></div><div class="ttdeci">char * name</div><div class="ttdoc">Object-specific name if any. Mostly used for identifying OS devices and Misc objects where a name str...</div><div class="ttdef"><b>Definition:</b> hwloc.h:407</div></div>
176 <div class="ttc" id="aa00250_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:414</div></div>
177 <div class="ttc" id="aa00254_html_aaf7a5c38b5185703ff18c46ad2761dcf"><div class="ttname"><a href="a00254.html#aaf7a5c38b5185703ff18c46ad2761dcf">hwloc_obj_attr_u::osdev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_osdev_attr_s osdev</div></div>
178 <div class="ttc" id="aa00294_html_a31e019e27e54ac6138d04be639bb96f9"><div class="ttname"><a href="a00294.html#a31e019e27e54ac6138d04be639bb96f9">hwloc_obj_attr_u::hwloc_osdev_attr_s::type</a></div><div class="ttdeci">hwloc_obj_osdev_type_t type</div><div class="ttdef"><b>Definition:</b> hwloc.h:665</div></div>
179179 </div><!-- fragment --></div><!-- contents -->
180180 <!-- start footer part -->
181181 <hr class="footer"/><address class="footer"><small>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4747 </div><!--header-->
4848 <div class="contents">
4949 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
50 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2012-2020 Inria. All rights reserved.</span></div>
50 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2012-2021 Inria. All rights reserved.</span></div>
5151 <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
5252 <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> */</span></div>
5353 <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; </div>
7070 <div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
7171 <div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; </div>
7272 <div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
73 <div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="a00227.html#ga26cf0036d09ec4d7cb692380fac9659d"> 56</a></span>&#160;<a class="code" href="a00227.html#ga26cf0036d09ec4d7cb692380fac9659d">hwloc_nvml_get_device_cpuset</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused,</div>
74 <div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; nvmlDevice_t device, <a class="code" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</div>
73 <div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="a00232.html#ga26cf0036d09ec4d7cb692380fac9659d"> 56</a></span>&#160;<a class="code" href="a00232.html#ga26cf0036d09ec4d7cb692380fac9659d">hwloc_nvml_get_device_cpuset</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused,</div>
74 <div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; nvmlDevice_t device, <a class="code" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</div>
7575 <div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;{</div>
7676 <div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="preprocessor">#ifdef HWLOC_LINUX_SYS</span></div>
7777 <div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="comment">/* If we&#39;re on Linux, use the sysfs mechanism to get the local cpus */</span></div>
8080 <div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; nvmlReturn_t nvres;</div>
8181 <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; nvmlPciInfo_t pci;</div>
8282 <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; </div>
83 <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00199.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a>(topology)) {</div>
83 <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00202.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a>(topology)) {</div>
8484 <div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; errno = EINVAL;</div>
8585 <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <span class="keywordflow">return</span> -1;</div>
8686 <div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; }</div>
9292 <div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; }</div>
9393 <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; </div>
9494 <div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; sprintf(path, <span class="stringliteral">&quot;/sys/bus/pci/devices/%04x:%02x:%02x.0/local_cpus&quot;</span>, pci.domain, pci.bus, pci.device);</div>
95 <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00220.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a>(path, set) &lt; 0</div>
96 <div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; || <a class="code" href="a00211.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(set))</div>
97 <div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <a class="code" href="a00211.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00208.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
95 <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00224.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a>(path, set) &lt; 0</div>
96 <div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; || <a class="code" href="a00214.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(set))</div>
97 <div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <a class="code" href="a00214.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00211.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
9898 <div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="preprocessor">#else</span></div>
9999 <div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="comment">/* Non-Linux systems simply get a full cpuset */</span></div>
100 <div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <a class="code" href="a00211.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00208.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
100 <div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <a class="code" href="a00214.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00211.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
101101 <div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="preprocessor">#endif</span></div>
102102 <div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">return</span> 0;</div>
103103 <div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;}</div>
104104 <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; </div>
105 <div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
106 <div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="a00227.html#gacd50fd0e2766ee05bc13234b46714756"> 102</a></span>&#160;<a class="code" href="a00227.html#gacd50fd0e2766ee05bc13234b46714756">hwloc_nvml_get_device_osdev_by_index</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">unsigned</span> idx)</div>
105 <div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
106 <div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="a00232.html#gacd50fd0e2766ee05bc13234b46714756"> 102</a></span>&#160;<a class="code" href="a00232.html#gacd50fd0e2766ee05bc13234b46714756">hwloc_nvml_get_device_osdev_by_index</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">unsigned</span> idx)</div>
107107 <div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;{</div>
108 <div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> osdev = NULL;</div>
109 <div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00210.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
110 <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90">HWLOC_OBJ_OSDEV_GPU</a> == osdev-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a>.<a class="code" href="a00288.html#a31e019e27e54ac6138d04be639bb96f9">type</a></div>
111 <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; &amp;&amp; osdev-&gt;<a class="code" href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">name</a></div>
112 <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; &amp;&amp; !strncmp(<span class="stringliteral">&quot;nvml&quot;</span>, osdev-&gt;<a class="code" href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, 4)</div>
113 <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; &amp;&amp; atoi(osdev-&gt;<a class="code" href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">name</a> + 4) == (<span class="keywordtype">int</span>) idx)</div>
108 <div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> osdev = NULL;</div>
109 <div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00213.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
110 <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90">HWLOC_OBJ_OSDEV_GPU</a> == osdev-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a>.<a class="code" href="a00294.html#a31e019e27e54ac6138d04be639bb96f9">type</a></div>
111 <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; &amp;&amp; osdev-&gt;<a class="code" href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">name</a></div>
112 <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; &amp;&amp; !strncmp(<span class="stringliteral">&quot;nvml&quot;</span>, osdev-&gt;<a class="code" href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, 4)</div>
113 <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; &amp;&amp; atoi(osdev-&gt;<a class="code" href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">name</a> + 4) == (<span class="keywordtype">int</span>) idx)</div>
114114 <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">return</span> osdev;</div>
115115 <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; }</div>
116116 <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">return</span> NULL;</div>
117117 <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;}</div>
118118 <div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; </div>
119 <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
120 <div class="line"><a name="l00129"></a><span class="lineno"><a class="line" href="a00227.html#gaf176159b5760a191871eff23f5a69ee9"> 129</a></span>&#160;<a class="code" href="a00227.html#gaf176159b5760a191871eff23f5a69ee9">hwloc_nvml_get_device_osdev</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, nvmlDevice_t device)</div>
119 <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
120 <div class="line"><a name="l00129"></a><span class="lineno"><a class="line" href="a00232.html#gaf176159b5760a191871eff23f5a69ee9"> 129</a></span>&#160;<a class="code" href="a00232.html#gaf176159b5760a191871eff23f5a69ee9">hwloc_nvml_get_device_osdev</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, nvmlDevice_t device)</div>
121121 <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;{</div>
122 <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> osdev;</div>
122 <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> osdev;</div>
123123 <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; nvmlReturn_t nvres;</div>
124124 <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; nvmlPciInfo_t pci;</div>
125125 <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordtype">char</span> uuid[64];</div>
126126 <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; </div>
127 <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00199.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a>(topology)) {</div>
127 <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00202.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a>(topology)) {</div>
128128 <div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; errno = EINVAL;</div>
129129 <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="keywordflow">return</span> NULL;</div>
130130 <div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; }</div>
138138 <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; uuid[0] = <span class="charliteral">&#39;\0&#39;</span>;</div>
139139 <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; </div>
140140 <div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; osdev = NULL;</div>
141 <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00210.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
142 <div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> pcidev = osdev-&gt;<a class="code" href="a00244.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
141 <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00213.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
142 <div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> pcidev = osdev-&gt;<a class="code" href="a00250.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
143143 <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> *info;</div>
144144 <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; </div>
145 <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">if</span> (strncmp(osdev-&gt;<a class="code" href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, <span class="stringliteral">&quot;nvml&quot;</span>, 4))</div>
145 <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">if</span> (strncmp(osdev-&gt;<a class="code" href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, <span class="stringliteral">&quot;nvml&quot;</span>, 4))</div>
146146 <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">continue</span>;</div>
147147 <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; </div>
148148 <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keywordflow">if</span> (pcidev</div>
149 <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00244.html#acc4f0803f244867e68fe0036800be5de">type</a> == <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div>
150 <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00268.html#a8fba44988deb98613c1505a4019a34dc">domain</a> == pci.domain</div>
151 <div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00268.html#aae99e035e8d1387d7b8768aaa8eceb0a">bus</a> == pci.bus</div>
152 <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00268.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">dev</a> == pci.device</div>
153 <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00268.html#a695f32df53f4ef728670bfcf31b74e0f">func</a> == 0)</div>
149 <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00250.html#acc4f0803f244867e68fe0036800be5de">type</a> == <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div>
150 <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00274.html#a8fba44988deb98613c1505a4019a34dc">domain</a> == pci.domain</div>
151 <div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00274.html#aae99e035e8d1387d7b8768aaa8eceb0a">bus</a> == pci.bus</div>
152 <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00274.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">dev</a> == pci.device</div>
153 <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00274.html#a695f32df53f4ef728670bfcf31b74e0f">func</a> == 0)</div>
154154 <div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <span class="keywordflow">return</span> osdev;</div>
155155 <div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; </div>
156 <div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; info = <a class="code" href="a00195.html#gab358661a92bb27d8542b255cc9f6f25e">hwloc_obj_get_info_by_name</a>(osdev, <span class="stringliteral">&quot;NVIDIAUUID&quot;</span>);</div>
156 <div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; info = <a class="code" href="a00198.html#gab358661a92bb27d8542b255cc9f6f25e">hwloc_obj_get_info_by_name</a>(osdev, <span class="stringliteral">&quot;NVIDIAUUID&quot;</span>);</div>
157157 <div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">if</span> (info &amp;&amp; !strcmp(info, uuid))</div>
158158 <div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordflow">return</span> osdev;</div>
159159 <div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; }</div>
167167 <div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; </div>
168168 <div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; </div>
169169 <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_NVML_H */</span><span class="preprocessor"></span></div>
170 <div class="ttc" id="aa00189_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
171 <div class="ttc" id="aa00190_html_gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90"><div class="ttname"><a href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90">HWLOC_OBJ_OSDEV_GPU</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_GPU</div><div class="ttdoc">Operating system GPU device. For instance &quot;:0.0&quot; for a GL display, &quot;card0&quot; for a Linux DRM device.</div><div class="ttdef"><b>Definition:</b> hwloc.h:342</div></div>
172 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div><div class="ttdeci">@ HWLOC_OBJ_PCI_DEVICE</div><div class="ttdoc">PCI device (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:269</div></div>
173 <div class="ttc" id="aa00192_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
174 <div class="ttc" id="aa00195_html_gab358661a92bb27d8542b255cc9f6f25e"><div class="ttname"><a href="a00195.html#gab358661a92bb27d8542b255cc9f6f25e">hwloc_obj_get_info_by_name</a></div><div class="ttdeci">static const char * hwloc_obj_get_info_by_name(hwloc_obj_t obj, const char *name)</div><div class="ttdoc">Search the given key name in object infos and return the corresponding value.</div></div>
175 <div class="ttc" id="aa00199_html_ga68ffdcfd9175cdf40709801092f18017"><div class="ttname"><a href="a00199.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a></div><div class="ttdeci">int hwloc_topology_is_thissystem(hwloc_topology_t restrict topology)</div><div class="ttdoc">Does the topology context come from this system?</div></div>
176 <div class="ttc" id="aa00208_html_gaee30e03391c1ed7dfd617fb5c7bbb033"><div class="ttname"><a href="a00208.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a></div><div class="ttdeci">hwloc_const_cpuset_t hwloc_topology_get_complete_cpuset(hwloc_topology_t topology)</div><div class="ttdoc">Get complete CPU set.</div></div>
177 <div class="ttc" id="aa00210_html_ga8b4584c8949e2c5f1c97ba7fe92b8145"><div class="ttname"><a href="a00210.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_osdev(hwloc_topology_t topology, hwloc_obj_t prev)</div><div class="ttdoc">Get the next OS device in the system.</div><div class="ttdef"><b>Definition:</b> helper.h:1151</div></div>
178 <div class="ttc" id="aa00211_html_ga5b64be28f5a7176ed8ad0d6a90bdf108"><div class="ttname"><a href="a00211.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a></div><div class="ttdeci">int hwloc_bitmap_iszero(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Test whether bitmap bitmap is empty.</div></div>
179 <div class="ttc" id="aa00211_html_ga72a29824798b48784b8217471ec8f14c"><div class="ttname"><a href="a00211.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a></div><div class="ttdeci">int hwloc_bitmap_copy(hwloc_bitmap_t dst, hwloc_const_bitmap_t src)</div><div class="ttdoc">Copy the contents of bitmap src into the already allocated bitmap dst.</div></div>
180 <div class="ttc" id="aa00220_html_gaf72d83e273803226ce772973e37b85de"><div class="ttname"><a href="a00220.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a></div><div class="ttdeci">int hwloc_linux_read_path_as_cpumask(const char *path, hwloc_bitmap_t set)</div><div class="ttdoc">Convert a linux kernel cpumask file path into a hwloc bitmap set.</div></div>
181 <div class="ttc" id="aa00227_html_ga26cf0036d09ec4d7cb692380fac9659d"><div class="ttname"><a href="a00227.html#ga26cf0036d09ec4d7cb692380fac9659d">hwloc_nvml_get_device_cpuset</a></div><div class="ttdeci">static int hwloc_nvml_get_device_cpuset(hwloc_topology_t topology, nvmlDevice_t device, hwloc_cpuset_t set)</div><div class="ttdoc">Get the CPU set of processors that are physically close to NVML device device.</div><div class="ttdef"><b>Definition:</b> nvml.h:56</div></div>
182 <div class="ttc" id="aa00227_html_gacd50fd0e2766ee05bc13234b46714756"><div class="ttname"><a href="a00227.html#gacd50fd0e2766ee05bc13234b46714756">hwloc_nvml_get_device_osdev_by_index</a></div><div class="ttdeci">static hwloc_obj_t hwloc_nvml_get_device_osdev_by_index(hwloc_topology_t topology, unsigned idx)</div><div class="ttdoc">Get the hwloc OS device object corresponding to the NVML device whose index is idx.</div><div class="ttdef"><b>Definition:</b> nvml.h:102</div></div>
183 <div class="ttc" id="aa00227_html_gaf176159b5760a191871eff23f5a69ee9"><div class="ttname"><a href="a00227.html#gaf176159b5760a191871eff23f5a69ee9">hwloc_nvml_get_device_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_nvml_get_device_osdev(hwloc_topology_t topology, nvmlDevice_t device)</div><div class="ttdoc">Get the hwloc OS device object corresponding to NVML device device.</div><div class="ttdef"><b>Definition:</b> nvml.h:129</div></div>
184 <div class="ttc" id="aa00244_html"><div class="ttname"><a href="a00244.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:395</div></div>
185 <div class="ttc" id="aa00244_html_abb709ec38f2970677e4e57d1d30be96d"><div class="ttname"><a href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">hwloc_obj::name</a></div><div class="ttdeci">char * name</div><div class="ttdoc">Object-specific name if any. Mostly used for identifying OS devices and Misc objects where a name str...</div><div class="ttdef"><b>Definition:</b> hwloc.h:407</div></div>
186 <div class="ttc" id="aa00244_html_acc4f0803f244867e68fe0036800be5de"><div class="ttname"><a href="a00244.html#acc4f0803f244867e68fe0036800be5de">hwloc_obj::type</a></div><div class="ttdeci">hwloc_obj_type_t type</div><div class="ttdoc">Type of object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:397</div></div>
187 <div class="ttc" id="aa00244_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:414</div></div>
188 <div class="ttc" id="aa00244_html_adc494f6aed939992be1c55cca5822900"><div class="ttname"><a href="a00244.html#adc494f6aed939992be1c55cca5822900">hwloc_obj::parent</a></div><div class="ttdeci">struct hwloc_obj * parent</div><div class="ttdoc">Parent, NULL if root (Machine object)</div><div class="ttdef"><b>Definition:</b> hwloc.h:445</div></div>
189 <div class="ttc" id="aa00248_html_a0b66da7ab072f7c016f8ed86701f5a7c"><div class="ttname"><a href="a00248.html#a0b66da7ab072f7c016f8ed86701f5a7c">hwloc_obj_attr_u::pcidev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_pcidev_attr_s pcidev</div></div>
190 <div class="ttc" id="aa00248_html_aaf7a5c38b5185703ff18c46ad2761dcf"><div class="ttname"><a href="a00248.html#aaf7a5c38b5185703ff18c46ad2761dcf">hwloc_obj_attr_u::osdev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_osdev_attr_s osdev</div></div>
191 <div class="ttc" id="aa00268_html_a3d70c84a12f7e93d14c8d47bf4fd9dc5"><div class="ttname"><a href="a00268.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">hwloc_obj_attr_u::hwloc_pcidev_attr_s::dev</a></div><div class="ttdeci">unsigned char dev</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
192 <div class="ttc" id="aa00268_html_a695f32df53f4ef728670bfcf31b74e0f"><div class="ttname"><a href="a00268.html#a695f32df53f4ef728670bfcf31b74e0f">hwloc_obj_attr_u::hwloc_pcidev_attr_s::func</a></div><div class="ttdeci">unsigned char func</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
193 <div class="ttc" id="aa00268_html_a8fba44988deb98613c1505a4019a34dc"><div class="ttname"><a href="a00268.html#a8fba44988deb98613c1505a4019a34dc">hwloc_obj_attr_u::hwloc_pcidev_attr_s::domain</a></div><div class="ttdeci">unsigned short domain</div><div class="ttdef"><b>Definition:</b> hwloc.h:634</div></div>
194 <div class="ttc" id="aa00268_html_aae99e035e8d1387d7b8768aaa8eceb0a"><div class="ttname"><a href="a00268.html#aae99e035e8d1387d7b8768aaa8eceb0a">hwloc_obj_attr_u::hwloc_pcidev_attr_s::bus</a></div><div class="ttdeci">unsigned char bus</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
195 <div class="ttc" id="aa00288_html_a31e019e27e54ac6138d04be639bb96f9"><div class="ttname"><a href="a00288.html#a31e019e27e54ac6138d04be639bb96f9">hwloc_obj_attr_u::hwloc_osdev_attr_s::type</a></div><div class="ttdeci">hwloc_obj_osdev_type_t type</div><div class="ttdef"><b>Definition:</b> hwloc.h:665</div></div>
170 <div class="ttc" id="aa00192_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
171 <div class="ttc" id="aa00193_html_gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90"><div class="ttname"><a href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90">HWLOC_OBJ_OSDEV_GPU</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_GPU</div><div class="ttdoc">Operating system GPU device. For instance &quot;:0.0&quot; for a GL display, &quot;card0&quot; for a Linux DRM device.</div><div class="ttdef"><b>Definition:</b> hwloc.h:342</div></div>
172 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div><div class="ttdeci">@ HWLOC_OBJ_PCI_DEVICE</div><div class="ttdoc">PCI device (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:269</div></div>
173 <div class="ttc" id="aa00195_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
174 <div class="ttc" id="aa00198_html_gab358661a92bb27d8542b255cc9f6f25e"><div class="ttname"><a href="a00198.html#gab358661a92bb27d8542b255cc9f6f25e">hwloc_obj_get_info_by_name</a></div><div class="ttdeci">static const char * hwloc_obj_get_info_by_name(hwloc_obj_t obj, const char *name)</div><div class="ttdoc">Search the given key name in object infos and return the corresponding value.</div></div>
175 <div class="ttc" id="aa00202_html_ga68ffdcfd9175cdf40709801092f18017"><div class="ttname"><a href="a00202.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a></div><div class="ttdeci">int hwloc_topology_is_thissystem(hwloc_topology_t restrict topology)</div><div class="ttdoc">Does the topology context come from this system?</div></div>
176 <div class="ttc" id="aa00211_html_gaee30e03391c1ed7dfd617fb5c7bbb033"><div class="ttname"><a href="a00211.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a></div><div class="ttdeci">hwloc_const_cpuset_t hwloc_topology_get_complete_cpuset(hwloc_topology_t topology)</div><div class="ttdoc">Get complete CPU set.</div></div>
177 <div class="ttc" id="aa00213_html_ga8b4584c8949e2c5f1c97ba7fe92b8145"><div class="ttname"><a href="a00213.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_osdev(hwloc_topology_t topology, hwloc_obj_t prev)</div><div class="ttdoc">Get the next OS device in the system.</div><div class="ttdef"><b>Definition:</b> helper.h:1194</div></div>
178 <div class="ttc" id="aa00214_html_ga5b64be28f5a7176ed8ad0d6a90bdf108"><div class="ttname"><a href="a00214.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a></div><div class="ttdeci">int hwloc_bitmap_iszero(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Test whether bitmap bitmap is empty.</div></div>
179 <div class="ttc" id="aa00214_html_ga72a29824798b48784b8217471ec8f14c"><div class="ttname"><a href="a00214.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a></div><div class="ttdeci">int hwloc_bitmap_copy(hwloc_bitmap_t dst, hwloc_const_bitmap_t src)</div><div class="ttdoc">Copy the contents of bitmap src into the already allocated bitmap dst.</div></div>
180 <div class="ttc" id="aa00224_html_gaf72d83e273803226ce772973e37b85de"><div class="ttname"><a href="a00224.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a></div><div class="ttdeci">int hwloc_linux_read_path_as_cpumask(const char *path, hwloc_bitmap_t set)</div><div class="ttdoc">Convert a linux kernel cpumask file path into a hwloc bitmap set.</div></div>
181 <div class="ttc" id="aa00232_html_ga26cf0036d09ec4d7cb692380fac9659d"><div class="ttname"><a href="a00232.html#ga26cf0036d09ec4d7cb692380fac9659d">hwloc_nvml_get_device_cpuset</a></div><div class="ttdeci">static int hwloc_nvml_get_device_cpuset(hwloc_topology_t topology, nvmlDevice_t device, hwloc_cpuset_t set)</div><div class="ttdoc">Get the CPU set of processors that are physically close to NVML device device.</div><div class="ttdef"><b>Definition:</b> nvml.h:56</div></div>
182 <div class="ttc" id="aa00232_html_gacd50fd0e2766ee05bc13234b46714756"><div class="ttname"><a href="a00232.html#gacd50fd0e2766ee05bc13234b46714756">hwloc_nvml_get_device_osdev_by_index</a></div><div class="ttdeci">static hwloc_obj_t hwloc_nvml_get_device_osdev_by_index(hwloc_topology_t topology, unsigned idx)</div><div class="ttdoc">Get the hwloc OS device object corresponding to the NVML device whose index is idx.</div><div class="ttdef"><b>Definition:</b> nvml.h:102</div></div>
183 <div class="ttc" id="aa00232_html_gaf176159b5760a191871eff23f5a69ee9"><div class="ttname"><a href="a00232.html#gaf176159b5760a191871eff23f5a69ee9">hwloc_nvml_get_device_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_nvml_get_device_osdev(hwloc_topology_t topology, nvmlDevice_t device)</div><div class="ttdoc">Get the hwloc OS device object corresponding to NVML device device.</div><div class="ttdef"><b>Definition:</b> nvml.h:129</div></div>
184 <div class="ttc" id="aa00250_html"><div class="ttname"><a href="a00250.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:395</div></div>
185 <div class="ttc" id="aa00250_html_abb709ec38f2970677e4e57d1d30be96d"><div class="ttname"><a href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">hwloc_obj::name</a></div><div class="ttdeci">char * name</div><div class="ttdoc">Object-specific name if any. Mostly used for identifying OS devices and Misc objects where a name str...</div><div class="ttdef"><b>Definition:</b> hwloc.h:407</div></div>
186 <div class="ttc" id="aa00250_html_acc4f0803f244867e68fe0036800be5de"><div class="ttname"><a href="a00250.html#acc4f0803f244867e68fe0036800be5de">hwloc_obj::type</a></div><div class="ttdeci">hwloc_obj_type_t type</div><div class="ttdoc">Type of object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:397</div></div>
187 <div class="ttc" id="aa00250_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:414</div></div>
188 <div class="ttc" id="aa00250_html_adc494f6aed939992be1c55cca5822900"><div class="ttname"><a href="a00250.html#adc494f6aed939992be1c55cca5822900">hwloc_obj::parent</a></div><div class="ttdeci">struct hwloc_obj * parent</div><div class="ttdoc">Parent, NULL if root (Machine object)</div><div class="ttdef"><b>Definition:</b> hwloc.h:445</div></div>
189 <div class="ttc" id="aa00254_html_a0b66da7ab072f7c016f8ed86701f5a7c"><div class="ttname"><a href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">hwloc_obj_attr_u::pcidev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_pcidev_attr_s pcidev</div></div>
190 <div class="ttc" id="aa00254_html_aaf7a5c38b5185703ff18c46ad2761dcf"><div class="ttname"><a href="a00254.html#aaf7a5c38b5185703ff18c46ad2761dcf">hwloc_obj_attr_u::osdev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_osdev_attr_s osdev</div></div>
191 <div class="ttc" id="aa00274_html_a3d70c84a12f7e93d14c8d47bf4fd9dc5"><div class="ttname"><a href="a00274.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">hwloc_obj_attr_u::hwloc_pcidev_attr_s::dev</a></div><div class="ttdeci">unsigned char dev</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
192 <div class="ttc" id="aa00274_html_a695f32df53f4ef728670bfcf31b74e0f"><div class="ttname"><a href="a00274.html#a695f32df53f4ef728670bfcf31b74e0f">hwloc_obj_attr_u::hwloc_pcidev_attr_s::func</a></div><div class="ttdeci">unsigned char func</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
193 <div class="ttc" id="aa00274_html_a8fba44988deb98613c1505a4019a34dc"><div class="ttname"><a href="a00274.html#a8fba44988deb98613c1505a4019a34dc">hwloc_obj_attr_u::hwloc_pcidev_attr_s::domain</a></div><div class="ttdeci">unsigned short domain</div><div class="ttdef"><b>Definition:</b> hwloc.h:634</div></div>
194 <div class="ttc" id="aa00274_html_aae99e035e8d1387d7b8768aaa8eceb0a"><div class="ttname"><a href="a00274.html#aae99e035e8d1387d7b8768aaa8eceb0a">hwloc_obj_attr_u::hwloc_pcidev_attr_s::bus</a></div><div class="ttdeci">unsigned char bus</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
195 <div class="ttc" id="aa00294_html_a31e019e27e54ac6138d04be639bb96f9"><div class="ttname"><a href="a00294.html#a31e019e27e54ac6138d04be639bb96f9">hwloc_obj_attr_u::hwloc_osdev_attr_s::type</a></div><div class="ttdeci">hwloc_obj_osdev_type_t type</div><div class="ttdef"><b>Definition:</b> hwloc.h:665</div></div>
196196 </div><!-- fragment --></div><!-- contents -->
197197 <!-- start footer part -->
198198 <hr class="footer"/><address class="footer"><small>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4747 </div><!--header-->
4848 <div class="contents">
4949 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
50 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2012-2020 Inria. All rights reserved.</span></div>
50 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2012-2021 Inria. All rights reserved.</span></div>
5151 <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * Copyright (c) 2020, Advanced Micro Devices, Inc. All rights reserved.</span></div>
5252 <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Written by Advanced Micro Devices,</span></div>
5353 <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
7272 <div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
7373 <div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160; </div>
7474 <div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
75 <div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="a00228.html#gaf939e697e3769c3524255318262b9c29"> 60</a></span>&#160;<a class="code" href="a00228.html#gaf939e697e3769c3524255318262b9c29">hwloc_rsmi_get_device_cpuset</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused,</div>
76 <div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; uint32_t dv_ind, <a class="code" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</div>
75 <div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="a00233.html#gaf939e697e3769c3524255318262b9c29"> 60</a></span>&#160;<a class="code" href="a00233.html#gaf939e697e3769c3524255318262b9c29">hwloc_rsmi_get_device_cpuset</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused,</div>
76 <div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; uint32_t dv_ind, <a class="code" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</div>
7777 <div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;{</div>
7878 <div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="preprocessor">#ifdef HWLOC_LINUX_SYS</span></div>
7979 <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="comment">/* If we&#39;re on Linux, use the sysfs mechanism to get the local cpus */</span></div>
8383 <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; uint64_t bdfid = 0;</div>
8484 <div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordtype">unsigned</span> domain, device, bus;</div>
8585 <div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; </div>
86 <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00199.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a>(topology)) {</div>
86 <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00202.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a>(topology)) {</div>
8787 <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; errno = EINVAL;</div>
8888 <div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">return</span> -1;</div>
8989 <div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; }</div>
9898 <div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; device = ((bdfid &amp; 0xff)&gt;&gt;3) &amp; 0x1f;</div>
9999 <div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; </div>
100100 <div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; sprintf(path, <span class="stringliteral">&quot;/sys/bus/pci/devices/%04x:%02x:%02x.0/local_cpus&quot;</span>, domain, bus, device);</div>
101 <div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00220.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a>(path, set) &lt; 0</div>
102 <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; || <a class="code" href="a00211.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(set))</div>
103 <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="a00211.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00208.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
101 <div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00224.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a>(path, set) &lt; 0</div>
102 <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; || <a class="code" href="a00214.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(set))</div>
103 <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="a00214.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00211.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
104104 <div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="preprocessor">#else</span></div>
105105 <div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="comment">/* Non-Linux systems simply get a full cpuset */</span></div>
106 <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <a class="code" href="a00211.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00208.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
106 <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <a class="code" href="a00214.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00211.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
107107 <div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="preprocessor">#endif</span></div>
108108 <div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">return</span> 0;</div>
109109 <div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;}</div>
110110 <div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; </div>
111 <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
112 <div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="a00228.html#ga507d0acdd5e9ac374a8d120d59604c80"> 111</a></span>&#160;<a class="code" href="a00228.html#ga507d0acdd5e9ac374a8d120d59604c80">hwloc_rsmi_get_device_osdev_by_index</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, uint32_t dv_ind)</div>
113 <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160;{</div>
114 <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> osdev = NULL;</div>
115 <div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00210.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
116 <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90">HWLOC_OBJ_OSDEV_GPU</a> == osdev-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a>.<a class="code" href="a00288.html#a31e019e27e54ac6138d04be639bb96f9">type</a></div>
117 <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; &amp;&amp; osdev-&gt;<a class="code" href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">name</a></div>
118 <div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; &amp;&amp; !strncmp(<span class="stringliteral">&quot;rsmi&quot;</span>, osdev-&gt;<a class="code" href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, 4)</div>
119 <div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; &amp;&amp; atoi(osdev-&gt;<a class="code" href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">name</a> + 4) == (<span class="keywordtype">int</span>) dv_ind)</div>
120 <div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">return</span> osdev;</div>
121 <div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; }</div>
122 <div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">return</span> NULL;</div>
123 <div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;}</div>
124 <div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; </div>
125 <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
126 <div class="line"><a name="l00139"></a><span class="lineno"><a class="line" href="a00228.html#gaba05bf9710655bb5b1439bee654340ba"> 139</a></span>&#160;<a class="code" href="a00228.html#gaba05bf9710655bb5b1439bee654340ba">hwloc_rsmi_get_device_osdev</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, uint32_t dv_ind)</div>
127 <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;{</div>
128 <div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> osdev;</div>
129 <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; rsmi_status_t ret;</div>
130 <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; uint64_t bdfid = 0;</div>
131 <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordtype">unsigned</span> domain, device, bus, func;</div>
132 <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; uint64_t id;</div>
133 <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordtype">char</span> uuid[64];</div>
134 <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; </div>
135 <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00199.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a>(topology)) {</div>
136 <div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; errno = EINVAL;</div>
137 <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">return</span> NULL;</div>
138 <div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; }</div>
139 <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; </div>
140 <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; ret = rsmi_dev_pci_id_get(dv_ind, &amp;bdfid);</div>
141 <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">if</span> (RSMI_STATUS_SUCCESS != ret) {</div>
142 <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; errno = EINVAL;</div>
143 <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">return</span> NULL;</div>
144 <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; }</div>
145 <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; domain = (bdfid&gt;&gt;32) &amp; 0xffffffff;</div>
146 <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; bus = ((bdfid &amp; 0xffff)&gt;&gt;8) &amp; 0xff;</div>
147 <div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; device = ((bdfid &amp; 0xff)&gt;&gt;3) &amp; 0x1f;</div>
148 <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; func = bdfid &amp; 0x7;</div>
149 <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; </div>
150 <div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; ret = rsmi_dev_unique_id_get(dv_ind, &amp;<span class="keywordtype">id</span>);</div>
151 <div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">if</span> (RSMI_STATUS_SUCCESS != ret)</div>
152 <div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; uuid[0] = <span class="charliteral">&#39;\0&#39;</span>;</div>
153 <div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">else</span></div>
154 <div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; sprintf(uuid, <span class="stringliteral">&quot;%lx&quot;</span>, <span class="keywordtype">id</span>);</div>
155 <div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; </div>
156 <div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; osdev = NULL;</div>
157 <div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00210.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
158 <div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> pcidev = osdev-&gt;<a class="code" href="a00244.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
159 <div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> *info;</div>
160 <div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; </div>
161 <div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">if</span> (strncmp(osdev-&gt;<a class="code" href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, <span class="stringliteral">&quot;rsmi&quot;</span>, 4))</div>
162 <div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <span class="keywordflow">continue</span>;</div>
163 <div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; </div>
164 <div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">if</span> (pcidev</div>
165 <div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00244.html#acc4f0803f244867e68fe0036800be5de">type</a> == <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div>
166 <div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00268.html#a8fba44988deb98613c1505a4019a34dc">domain</a> == domain</div>
167 <div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00268.html#aae99e035e8d1387d7b8768aaa8eceb0a">bus</a> == bus</div>
168 <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00268.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">dev</a> == device</div>
169 <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00268.html#a695f32df53f4ef728670bfcf31b74e0f">func</a> == func)</div>
170 <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">return</span> osdev;</div>
171 <div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; </div>
172 <div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; info = <a class="code" href="a00195.html#gab358661a92bb27d8542b255cc9f6f25e">hwloc_obj_get_info_by_name</a>(osdev, <span class="stringliteral">&quot;AMDUUID&quot;</span>);</div>
173 <div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keywordflow">if</span> (info &amp;&amp; !strcmp(info, uuid))</div>
174 <div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">return</span> osdev;</div>
175 <div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; }</div>
176 <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; </div>
177 <div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">return</span> NULL;</div>
178 <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160;}</div>
179 <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; </div>
180 <div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
181 <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
182 <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;<span class="preprocessor">#endif</span></div>
183 <div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; </div>
184 <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; </div>
185 <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_RSMI_H */</span><span class="preprocessor"></span></div>
186 <div class="ttc" id="aa00189_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
187 <div class="ttc" id="aa00190_html_gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90"><div class="ttname"><a href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90">HWLOC_OBJ_OSDEV_GPU</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_GPU</div><div class="ttdoc">Operating system GPU device. For instance &quot;:0.0&quot; for a GL display, &quot;card0&quot; for a Linux DRM device.</div><div class="ttdef"><b>Definition:</b> hwloc.h:342</div></div>
188 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div><div class="ttdeci">@ HWLOC_OBJ_PCI_DEVICE</div><div class="ttdoc">PCI device (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:269</div></div>
189 <div class="ttc" id="aa00192_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
190 <div class="ttc" id="aa00195_html_gab358661a92bb27d8542b255cc9f6f25e"><div class="ttname"><a href="a00195.html#gab358661a92bb27d8542b255cc9f6f25e">hwloc_obj_get_info_by_name</a></div><div class="ttdeci">static const char * hwloc_obj_get_info_by_name(hwloc_obj_t obj, const char *name)</div><div class="ttdoc">Search the given key name in object infos and return the corresponding value.</div></div>
191 <div class="ttc" id="aa00199_html_ga68ffdcfd9175cdf40709801092f18017"><div class="ttname"><a href="a00199.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a></div><div class="ttdeci">int hwloc_topology_is_thissystem(hwloc_topology_t restrict topology)</div><div class="ttdoc">Does the topology context come from this system?</div></div>
192 <div class="ttc" id="aa00208_html_gaee30e03391c1ed7dfd617fb5c7bbb033"><div class="ttname"><a href="a00208.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a></div><div class="ttdeci">hwloc_const_cpuset_t hwloc_topology_get_complete_cpuset(hwloc_topology_t topology)</div><div class="ttdoc">Get complete CPU set.</div></div>
193 <div class="ttc" id="aa00210_html_ga8b4584c8949e2c5f1c97ba7fe92b8145"><div class="ttname"><a href="a00210.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_osdev(hwloc_topology_t topology, hwloc_obj_t prev)</div><div class="ttdoc">Get the next OS device in the system.</div><div class="ttdef"><b>Definition:</b> helper.h:1151</div></div>
194 <div class="ttc" id="aa00211_html_ga5b64be28f5a7176ed8ad0d6a90bdf108"><div class="ttname"><a href="a00211.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a></div><div class="ttdeci">int hwloc_bitmap_iszero(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Test whether bitmap bitmap is empty.</div></div>
195 <div class="ttc" id="aa00211_html_ga72a29824798b48784b8217471ec8f14c"><div class="ttname"><a href="a00211.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a></div><div class="ttdeci">int hwloc_bitmap_copy(hwloc_bitmap_t dst, hwloc_const_bitmap_t src)</div><div class="ttdoc">Copy the contents of bitmap src into the already allocated bitmap dst.</div></div>
196 <div class="ttc" id="aa00220_html_gaf72d83e273803226ce772973e37b85de"><div class="ttname"><a href="a00220.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a></div><div class="ttdeci">int hwloc_linux_read_path_as_cpumask(const char *path, hwloc_bitmap_t set)</div><div class="ttdoc">Convert a linux kernel cpumask file path into a hwloc bitmap set.</div></div>
197 <div class="ttc" id="aa00228_html_ga507d0acdd5e9ac374a8d120d59604c80"><div class="ttname"><a href="a00228.html#ga507d0acdd5e9ac374a8d120d59604c80">hwloc_rsmi_get_device_osdev_by_index</a></div><div class="ttdeci">static hwloc_obj_t hwloc_rsmi_get_device_osdev_by_index(hwloc_topology_t topology, uint32_t dv_ind)</div><div class="ttdoc">Get the hwloc OS device object corresponding to the AMD GPU device whose index is dv_ind.</div><div class="ttdef"><b>Definition:</b> rsmi.h:111</div></div>
198 <div class="ttc" id="aa00228_html_gaba05bf9710655bb5b1439bee654340ba"><div class="ttname"><a href="a00228.html#gaba05bf9710655bb5b1439bee654340ba">hwloc_rsmi_get_device_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_rsmi_get_device_osdev(hwloc_topology_t topology, uint32_t dv_ind)</div><div class="ttdoc">Get the hwloc OS device object corresponding to AMD GPU device, whose index is dv_ind.</div><div class="ttdef"><b>Definition:</b> rsmi.h:139</div></div>
199 <div class="ttc" id="aa00228_html_gaf939e697e3769c3524255318262b9c29"><div class="ttname"><a href="a00228.html#gaf939e697e3769c3524255318262b9c29">hwloc_rsmi_get_device_cpuset</a></div><div class="ttdeci">static int hwloc_rsmi_get_device_cpuset(hwloc_topology_t topology, uint32_t dv_ind, hwloc_cpuset_t set)</div><div class="ttdoc">Get the CPU set of logical processors that are physically close to AMD GPU device whose index is dv_i...</div><div class="ttdef"><b>Definition:</b> rsmi.h:60</div></div>
200 <div class="ttc" id="aa00244_html"><div class="ttname"><a href="a00244.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:395</div></div>
201 <div class="ttc" id="aa00244_html_abb709ec38f2970677e4e57d1d30be96d"><div class="ttname"><a href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">hwloc_obj::name</a></div><div class="ttdeci">char * name</div><div class="ttdoc">Object-specific name if any. Mostly used for identifying OS devices and Misc objects where a name str...</div><div class="ttdef"><b>Definition:</b> hwloc.h:407</div></div>
202 <div class="ttc" id="aa00244_html_acc4f0803f244867e68fe0036800be5de"><div class="ttname"><a href="a00244.html#acc4f0803f244867e68fe0036800be5de">hwloc_obj::type</a></div><div class="ttdeci">hwloc_obj_type_t type</div><div class="ttdoc">Type of object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:397</div></div>
203 <div class="ttc" id="aa00244_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:414</div></div>
204 <div class="ttc" id="aa00244_html_adc494f6aed939992be1c55cca5822900"><div class="ttname"><a href="a00244.html#adc494f6aed939992be1c55cca5822900">hwloc_obj::parent</a></div><div class="ttdeci">struct hwloc_obj * parent</div><div class="ttdoc">Parent, NULL if root (Machine object)</div><div class="ttdef"><b>Definition:</b> hwloc.h:445</div></div>
205 <div class="ttc" id="aa00248_html_a0b66da7ab072f7c016f8ed86701f5a7c"><div class="ttname"><a href="a00248.html#a0b66da7ab072f7c016f8ed86701f5a7c">hwloc_obj_attr_u::pcidev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_pcidev_attr_s pcidev</div></div>
206 <div class="ttc" id="aa00248_html_aaf7a5c38b5185703ff18c46ad2761dcf"><div class="ttname"><a href="a00248.html#aaf7a5c38b5185703ff18c46ad2761dcf">hwloc_obj_attr_u::osdev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_osdev_attr_s osdev</div></div>
207 <div class="ttc" id="aa00268_html_a3d70c84a12f7e93d14c8d47bf4fd9dc5"><div class="ttname"><a href="a00268.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">hwloc_obj_attr_u::hwloc_pcidev_attr_s::dev</a></div><div class="ttdeci">unsigned char dev</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
208 <div class="ttc" id="aa00268_html_a695f32df53f4ef728670bfcf31b74e0f"><div class="ttname"><a href="a00268.html#a695f32df53f4ef728670bfcf31b74e0f">hwloc_obj_attr_u::hwloc_pcidev_attr_s::func</a></div><div class="ttdeci">unsigned char func</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
209 <div class="ttc" id="aa00268_html_a8fba44988deb98613c1505a4019a34dc"><div class="ttname"><a href="a00268.html#a8fba44988deb98613c1505a4019a34dc">hwloc_obj_attr_u::hwloc_pcidev_attr_s::domain</a></div><div class="ttdeci">unsigned short domain</div><div class="ttdef"><b>Definition:</b> hwloc.h:634</div></div>
210 <div class="ttc" id="aa00268_html_aae99e035e8d1387d7b8768aaa8eceb0a"><div class="ttname"><a href="a00268.html#aae99e035e8d1387d7b8768aaa8eceb0a">hwloc_obj_attr_u::hwloc_pcidev_attr_s::bus</a></div><div class="ttdeci">unsigned char bus</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
211 <div class="ttc" id="aa00288_html_a31e019e27e54ac6138d04be639bb96f9"><div class="ttname"><a href="a00288.html#a31e019e27e54ac6138d04be639bb96f9">hwloc_obj_attr_u::hwloc_osdev_attr_s::type</a></div><div class="ttdeci">hwloc_obj_osdev_type_t type</div><div class="ttdef"><b>Definition:</b> hwloc.h:665</div></div>
111 <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
112 <div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="a00233.html#ga507d0acdd5e9ac374a8d120d59604c80"> 112</a></span>&#160;<a class="code" href="a00233.html#ga507d0acdd5e9ac374a8d120d59604c80">hwloc_rsmi_get_device_osdev_by_index</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, uint32_t dv_ind)</div>
113 <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160;{</div>
114 <div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> osdev = NULL;</div>
115 <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00213.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
116 <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90">HWLOC_OBJ_OSDEV_GPU</a> == osdev-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a>.<a class="code" href="a00294.html#a31e019e27e54ac6138d04be639bb96f9">type</a></div>
117 <div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; &amp;&amp; osdev-&gt;<a class="code" href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">name</a></div>
118 <div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; &amp;&amp; !strncmp(<span class="stringliteral">&quot;rsmi&quot;</span>, osdev-&gt;<a class="code" href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, 4)</div>
119 <div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; &amp;&amp; atoi(osdev-&gt;<a class="code" href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">name</a> + 4) == (<span class="keywordtype">int</span>) dv_ind)</div>
120 <div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">return</span> osdev;</div>
121 <div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; }</div>
122 <div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">return</span> NULL;</div>
123 <div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;}</div>
124 <div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; </div>
125 <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
126 <div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="a00233.html#gaba05bf9710655bb5b1439bee654340ba"> 141</a></span>&#160;<a class="code" href="a00233.html#gaba05bf9710655bb5b1439bee654340ba">hwloc_rsmi_get_device_osdev</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, uint32_t dv_ind)</div>
127 <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;{</div>
128 <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> osdev;</div>
129 <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; rsmi_status_t ret;</div>
130 <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; uint64_t bdfid = 0;</div>
131 <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordtype">unsigned</span> domain, device, bus, func;</div>
132 <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; uint64_t id;</div>
133 <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordtype">char</span> uuid[64];</div>
134 <div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; </div>
135 <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00202.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a>(topology)) {</div>
136 <div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; errno = EINVAL;</div>
137 <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">return</span> NULL;</div>
138 <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; }</div>
139 <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; </div>
140 <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; ret = rsmi_dev_pci_id_get(dv_ind, &amp;bdfid);</div>
141 <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="keywordflow">if</span> (RSMI_STATUS_SUCCESS != ret) {</div>
142 <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; errno = EINVAL;</div>
143 <div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordflow">return</span> NULL;</div>
144 <div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; }</div>
145 <div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; domain = (bdfid&gt;&gt;32) &amp; 0xffffffff;</div>
146 <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; bus = ((bdfid &amp; 0xffff)&gt;&gt;8) &amp; 0xff;</div>
147 <div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; device = ((bdfid &amp; 0xff)&gt;&gt;3) &amp; 0x1f;</div>
148 <div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; func = bdfid &amp; 0x7;</div>
149 <div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; </div>
150 <div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; ret = rsmi_dev_unique_id_get(dv_ind, &amp;<span class="keywordtype">id</span>);</div>
151 <div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <span class="keywordflow">if</span> (RSMI_STATUS_SUCCESS != ret)</div>
152 <div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; uuid[0] = <span class="charliteral">&#39;\0&#39;</span>;</div>
153 <div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">else</span></div>
154 <div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; sprintf(uuid, <span class="stringliteral">&quot;%lx&quot;</span>, <span class="keywordtype">id</span>);</div>
155 <div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; </div>
156 <div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; osdev = NULL;</div>
157 <div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00213.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
158 <div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> pcidev = osdev-&gt;<a class="code" href="a00250.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
159 <div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> *info;</div>
160 <div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; </div>
161 <div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <span class="keywordflow">if</span> (strncmp(osdev-&gt;<a class="code" href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, <span class="stringliteral">&quot;rsmi&quot;</span>, 4))</div>
162 <div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keywordflow">continue</span>;</div>
163 <div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; </div>
164 <div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordflow">if</span> (pcidev</div>
165 <div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00250.html#acc4f0803f244867e68fe0036800be5de">type</a> == <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div>
166 <div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00274.html#a8fba44988deb98613c1505a4019a34dc">domain</a> == domain</div>
167 <div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00274.html#aae99e035e8d1387d7b8768aaa8eceb0a">bus</a> == bus</div>
168 <div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00274.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">dev</a> == device</div>
169 <div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00274.html#a695f32df53f4ef728670bfcf31b74e0f">func</a> == func)</div>
170 <div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keywordflow">return</span> osdev;</div>
171 <div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; </div>
172 <div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; info = <a class="code" href="a00198.html#gab358661a92bb27d8542b255cc9f6f25e">hwloc_obj_get_info_by_name</a>(osdev, <span class="stringliteral">&quot;AMDUUID&quot;</span>);</div>
173 <div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <span class="keywordflow">if</span> (info &amp;&amp; !strcmp(info, uuid))</div>
174 <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keywordflow">return</span> osdev;</div>
175 <div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; }</div>
176 <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; </div>
177 <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keywordflow">return</span> NULL;</div>
178 <div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;}</div>
179 <div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; </div>
180 <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
181 <div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
182 <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;<span class="preprocessor">#endif</span></div>
183 <div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; </div>
184 <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; </div>
185 <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_RSMI_H */</span><span class="preprocessor"></span></div>
186 <div class="ttc" id="aa00192_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
187 <div class="ttc" id="aa00193_html_gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90"><div class="ttname"><a href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90">HWLOC_OBJ_OSDEV_GPU</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_GPU</div><div class="ttdoc">Operating system GPU device. For instance &quot;:0.0&quot; for a GL display, &quot;card0&quot; for a Linux DRM device.</div><div class="ttdef"><b>Definition:</b> hwloc.h:342</div></div>
188 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div><div class="ttdeci">@ HWLOC_OBJ_PCI_DEVICE</div><div class="ttdoc">PCI device (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:269</div></div>
189 <div class="ttc" id="aa00195_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
190 <div class="ttc" id="aa00198_html_gab358661a92bb27d8542b255cc9f6f25e"><div class="ttname"><a href="a00198.html#gab358661a92bb27d8542b255cc9f6f25e">hwloc_obj_get_info_by_name</a></div><div class="ttdeci">static const char * hwloc_obj_get_info_by_name(hwloc_obj_t obj, const char *name)</div><div class="ttdoc">Search the given key name in object infos and return the corresponding value.</div></div>
191 <div class="ttc" id="aa00202_html_ga68ffdcfd9175cdf40709801092f18017"><div class="ttname"><a href="a00202.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a></div><div class="ttdeci">int hwloc_topology_is_thissystem(hwloc_topology_t restrict topology)</div><div class="ttdoc">Does the topology context come from this system?</div></div>
192 <div class="ttc" id="aa00211_html_gaee30e03391c1ed7dfd617fb5c7bbb033"><div class="ttname"><a href="a00211.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a></div><div class="ttdeci">hwloc_const_cpuset_t hwloc_topology_get_complete_cpuset(hwloc_topology_t topology)</div><div class="ttdoc">Get complete CPU set.</div></div>
193 <div class="ttc" id="aa00213_html_ga8b4584c8949e2c5f1c97ba7fe92b8145"><div class="ttname"><a href="a00213.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_osdev(hwloc_topology_t topology, hwloc_obj_t prev)</div><div class="ttdoc">Get the next OS device in the system.</div><div class="ttdef"><b>Definition:</b> helper.h:1194</div></div>
194 <div class="ttc" id="aa00214_html_ga5b64be28f5a7176ed8ad0d6a90bdf108"><div class="ttname"><a href="a00214.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a></div><div class="ttdeci">int hwloc_bitmap_iszero(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Test whether bitmap bitmap is empty.</div></div>
195 <div class="ttc" id="aa00214_html_ga72a29824798b48784b8217471ec8f14c"><div class="ttname"><a href="a00214.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a></div><div class="ttdeci">int hwloc_bitmap_copy(hwloc_bitmap_t dst, hwloc_const_bitmap_t src)</div><div class="ttdoc">Copy the contents of bitmap src into the already allocated bitmap dst.</div></div>
196 <div class="ttc" id="aa00224_html_gaf72d83e273803226ce772973e37b85de"><div class="ttname"><a href="a00224.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a></div><div class="ttdeci">int hwloc_linux_read_path_as_cpumask(const char *path, hwloc_bitmap_t set)</div><div class="ttdoc">Convert a linux kernel cpumask file path into a hwloc bitmap set.</div></div>
197 <div class="ttc" id="aa00233_html_ga507d0acdd5e9ac374a8d120d59604c80"><div class="ttname"><a href="a00233.html#ga507d0acdd5e9ac374a8d120d59604c80">hwloc_rsmi_get_device_osdev_by_index</a></div><div class="ttdeci">static hwloc_obj_t hwloc_rsmi_get_device_osdev_by_index(hwloc_topology_t topology, uint32_t dv_ind)</div><div class="ttdoc">Get the hwloc OS device object corresponding to the AMD GPU device whose index is dv_ind.</div><div class="ttdef"><b>Definition:</b> rsmi.h:112</div></div>
198 <div class="ttc" id="aa00233_html_gaba05bf9710655bb5b1439bee654340ba"><div class="ttname"><a href="a00233.html#gaba05bf9710655bb5b1439bee654340ba">hwloc_rsmi_get_device_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_rsmi_get_device_osdev(hwloc_topology_t topology, uint32_t dv_ind)</div><div class="ttdoc">Get the hwloc OS device object corresponding to AMD GPU device, whose index is dv_ind.</div><div class="ttdef"><b>Definition:</b> rsmi.h:141</div></div>
199 <div class="ttc" id="aa00233_html_gaf939e697e3769c3524255318262b9c29"><div class="ttname"><a href="a00233.html#gaf939e697e3769c3524255318262b9c29">hwloc_rsmi_get_device_cpuset</a></div><div class="ttdeci">static int hwloc_rsmi_get_device_cpuset(hwloc_topology_t topology, uint32_t dv_ind, hwloc_cpuset_t set)</div><div class="ttdoc">Get the CPU set of logical processors that are physically close to AMD GPU device whose index is dv_i...</div><div class="ttdef"><b>Definition:</b> rsmi.h:60</div></div>
200 <div class="ttc" id="aa00250_html"><div class="ttname"><a href="a00250.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:395</div></div>
201 <div class="ttc" id="aa00250_html_abb709ec38f2970677e4e57d1d30be96d"><div class="ttname"><a href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">hwloc_obj::name</a></div><div class="ttdeci">char * name</div><div class="ttdoc">Object-specific name if any. Mostly used for identifying OS devices and Misc objects where a name str...</div><div class="ttdef"><b>Definition:</b> hwloc.h:407</div></div>
202 <div class="ttc" id="aa00250_html_acc4f0803f244867e68fe0036800be5de"><div class="ttname"><a href="a00250.html#acc4f0803f244867e68fe0036800be5de">hwloc_obj::type</a></div><div class="ttdeci">hwloc_obj_type_t type</div><div class="ttdoc">Type of object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:397</div></div>
203 <div class="ttc" id="aa00250_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:414</div></div>
204 <div class="ttc" id="aa00250_html_adc494f6aed939992be1c55cca5822900"><div class="ttname"><a href="a00250.html#adc494f6aed939992be1c55cca5822900">hwloc_obj::parent</a></div><div class="ttdeci">struct hwloc_obj * parent</div><div class="ttdoc">Parent, NULL if root (Machine object)</div><div class="ttdef"><b>Definition:</b> hwloc.h:445</div></div>
205 <div class="ttc" id="aa00254_html_a0b66da7ab072f7c016f8ed86701f5a7c"><div class="ttname"><a href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">hwloc_obj_attr_u::pcidev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_pcidev_attr_s pcidev</div></div>
206 <div class="ttc" id="aa00254_html_aaf7a5c38b5185703ff18c46ad2761dcf"><div class="ttname"><a href="a00254.html#aaf7a5c38b5185703ff18c46ad2761dcf">hwloc_obj_attr_u::osdev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_osdev_attr_s osdev</div></div>
207 <div class="ttc" id="aa00274_html_a3d70c84a12f7e93d14c8d47bf4fd9dc5"><div class="ttname"><a href="a00274.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">hwloc_obj_attr_u::hwloc_pcidev_attr_s::dev</a></div><div class="ttdeci">unsigned char dev</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
208 <div class="ttc" id="aa00274_html_a695f32df53f4ef728670bfcf31b74e0f"><div class="ttname"><a href="a00274.html#a695f32df53f4ef728670bfcf31b74e0f">hwloc_obj_attr_u::hwloc_pcidev_attr_s::func</a></div><div class="ttdeci">unsigned char func</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
209 <div class="ttc" id="aa00274_html_a8fba44988deb98613c1505a4019a34dc"><div class="ttname"><a href="a00274.html#a8fba44988deb98613c1505a4019a34dc">hwloc_obj_attr_u::hwloc_pcidev_attr_s::domain</a></div><div class="ttdeci">unsigned short domain</div><div class="ttdef"><b>Definition:</b> hwloc.h:634</div></div>
210 <div class="ttc" id="aa00274_html_aae99e035e8d1387d7b8768aaa8eceb0a"><div class="ttname"><a href="a00274.html#aae99e035e8d1387d7b8768aaa8eceb0a">hwloc_obj_attr_u::hwloc_pcidev_attr_s::bus</a></div><div class="ttdeci">unsigned char bus</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
211 <div class="ttc" id="aa00294_html_a31e019e27e54ac6138d04be639bb96f9"><div class="ttname"><a href="a00294.html#a31e019e27e54ac6138d04be639bb96f9">hwloc_obj_attr_u::hwloc_osdev_attr_s::type</a></div><div class="ttdeci">hwloc_obj_osdev_type_t type</div><div class="ttdef"><b>Definition:</b> hwloc.h:665</div></div>
212212 </div><!-- fragment --></div><!-- contents -->
213213 <!-- start footer part -->
214214 <hr class="footer"/><address class="footer"><small>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): gl.h Source File</title>
7 <title>Hardware Locality (hwloc): levelzero.h Source File</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4343 </div><!-- top -->
4444 <div class="header">
4545 <div class="headertitle">
46 <div class="title">gl.h</div> </div>
46 <div class="title">levelzero.h</div> </div>
4747 </div><!--header-->
4848 <div class="contents">
4949 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
50 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2012 Blue Brain Project, EPFL. All rights reserved.</span></div>
51 <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * Copyright © 2012-2013 Inria. All rights reserved.</span></div>
52 <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
53 <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> */</span></div>
54 <div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160; </div>
55 <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#ifndef HWLOC_GL_H</span></div>
56 <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#define HWLOC_GL_H</span></div>
57 <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; </div>
58 <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &quot;hwloc.h&quot;</span></div>
59 <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; </div>
60 <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;stdio.h&gt;</span></div>
61 <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div>
62 <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
50 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2021 Inria. All rights reserved.</span></div>
51 <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
52 <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> */</span></div>
53 <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; </div>
54 <div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#ifndef HWLOC_LEVELZERO_H</span></div>
55 <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#define HWLOC_LEVELZERO_H</span></div>
56 <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; </div>
57 <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &quot;hwloc.h&quot;</span></div>
58 <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &quot;hwloc/autogen/config.h&quot;</span></div>
59 <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &quot;hwloc/helper.h&quot;</span></div>
60 <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#ifdef HWLOC_LINUX_SYS</span></div>
61 <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &quot;hwloc/linux.h&quot;</span></div>
62 <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#endif</span></div>
6363 <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
64 <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
65 <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
66 <div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#endif</span></div>
64 <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;level_zero/ze_api.h&gt;</span></div>
65 <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &lt;level_zero/zes_api.h&gt;</span></div>
66 <div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; </div>
6767 <div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
68 <div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
69 <div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
70 <div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="a00229.html#ga4d66a77e4fe4051d6e5b772c1b8fcec5"> 54</a></span>&#160;<a class="code" href="a00229.html#ga4d66a77e4fe4051d6e5b772c1b8fcec5">hwloc_gl_get_display_osdev_by_port_device</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
71 <div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordtype">unsigned</span> port, <span class="keywordtype">unsigned</span> device)</div>
72 <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;{</div>
73 <div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordtype">unsigned</span> x = (unsigned) -1, y = (<span class="keywordtype">unsigned</span>) -1;</div>
74 <div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> osdev = NULL;</div>
75 <div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00210.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
76 <div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90">HWLOC_OBJ_OSDEV_GPU</a> == osdev-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a>.<a class="code" href="a00288.html#a31e019e27e54ac6138d04be639bb96f9">type</a></div>
77 <div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; &amp;&amp; osdev-&gt;<a class="code" href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">name</a></div>
78 <div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; &amp;&amp; sscanf(osdev-&gt;<a class="code" href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, <span class="stringliteral">&quot;:%u.%u&quot;</span>, &amp;x, &amp;y) == 2</div>
79 <div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; &amp;&amp; port == x &amp;&amp; device == y)</div>
80 <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">return</span> osdev;</div>
81 <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; }</div>
82 <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; errno = EINVAL;</div>
83 <div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">return</span> NULL;</div>
84 <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;}</div>
85 <div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; </div>
86 <div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
87 <div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="a00229.html#ga2d36ef441d1dfddf49cfb5c01bd58d8e"> 85</a></span>&#160;<a class="code" href="a00229.html#ga2d36ef441d1dfddf49cfb5c01bd58d8e">hwloc_gl_get_display_osdev_by_name</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
88 <div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> *name)</div>
89 <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;{</div>
90 <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> osdev = NULL;</div>
91 <div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00210.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
92 <div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90">HWLOC_OBJ_OSDEV_GPU</a> == osdev-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a>.<a class="code" href="a00288.html#a31e019e27e54ac6138d04be639bb96f9">type</a></div>
93 <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; &amp;&amp; osdev-&gt;<a class="code" href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">name</a></div>
94 <div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; &amp;&amp; !strcmp(name, osdev-&gt;<a class="code" href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">name</a>))</div>
95 <div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">return</span> osdev;</div>
96 <div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; }</div>
97 <div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; errno = EINVAL;</div>
98 <div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">return</span> NULL;</div>
99 <div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;}</div>
100 <div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; </div>
101 <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
102 <div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="a00229.html#ga936665ab5f0d29a081c4b78d11f4ad07"> 111</a></span>&#160;<a class="code" href="a00229.html#ga936665ab5f0d29a081c4b78d11f4ad07">hwloc_gl_get_display_by_osdev</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused,</div>
103 <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> osdev,</div>
104 <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordtype">unsigned</span> *port, <span class="keywordtype">unsigned</span> *device)</div>
105 <div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160;{</div>
106 <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordtype">unsigned</span> x = -1, y = -1;</div>
107 <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90">HWLOC_OBJ_OSDEV_GPU</a> == osdev-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a>.<a class="code" href="a00288.html#a31e019e27e54ac6138d04be639bb96f9">type</a></div>
108 <div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; &amp;&amp; sscanf(osdev-&gt;<a class="code" href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, <span class="stringliteral">&quot;:%u.%u&quot;</span>, &amp;x, &amp;y) == 2) {</div>
109 <div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; *port = x;</div>
110 <div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; *device = y;</div>
111 <div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">return</span> 0;</div>
112 <div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; }</div>
113 <div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; errno = EINVAL;</div>
114 <div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">return</span> -1;</div>
115 <div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;}</div>
116 <div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; </div>
117 <div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
118 <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
119 <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;<span class="preprocessor">#endif</span></div>
120 <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; </div>
121 <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; </div>
122 <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_GL_H */</span><span class="preprocessor"></span></div>
123 <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; </div>
124 <div class="ttc" id="aa00190_html_gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90"><div class="ttname"><a href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90">HWLOC_OBJ_OSDEV_GPU</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_GPU</div><div class="ttdoc">Operating system GPU device. For instance &quot;:0.0&quot; for a GL display, &quot;card0&quot; for a Linux DRM device.</div><div class="ttdef"><b>Definition:</b> hwloc.h:342</div></div>
125 <div class="ttc" id="aa00192_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
126 <div class="ttc" id="aa00210_html_ga8b4584c8949e2c5f1c97ba7fe92b8145"><div class="ttname"><a href="a00210.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_osdev(hwloc_topology_t topology, hwloc_obj_t prev)</div><div class="ttdoc">Get the next OS device in the system.</div><div class="ttdef"><b>Definition:</b> helper.h:1151</div></div>
127 <div class="ttc" id="aa00229_html_ga2d36ef441d1dfddf49cfb5c01bd58d8e"><div class="ttname"><a href="a00229.html#ga2d36ef441d1dfddf49cfb5c01bd58d8e">hwloc_gl_get_display_osdev_by_name</a></div><div class="ttdeci">static hwloc_obj_t hwloc_gl_get_display_osdev_by_name(hwloc_topology_t topology, const char *name)</div><div class="ttdoc">Get the hwloc OS device object corresponding to the OpenGL display given by name.</div><div class="ttdef"><b>Definition:</b> gl.h:85</div></div>
128 <div class="ttc" id="aa00229_html_ga4d66a77e4fe4051d6e5b772c1b8fcec5"><div class="ttname"><a href="a00229.html#ga4d66a77e4fe4051d6e5b772c1b8fcec5">hwloc_gl_get_display_osdev_by_port_device</a></div><div class="ttdeci">static hwloc_obj_t hwloc_gl_get_display_osdev_by_port_device(hwloc_topology_t topology, unsigned port, unsigned device)</div><div class="ttdoc">Get the hwloc OS device object corresponding to the OpenGL display given by port and device index.</div><div class="ttdef"><b>Definition:</b> gl.h:54</div></div>
129 <div class="ttc" id="aa00229_html_ga936665ab5f0d29a081c4b78d11f4ad07"><div class="ttname"><a href="a00229.html#ga936665ab5f0d29a081c4b78d11f4ad07">hwloc_gl_get_display_by_osdev</a></div><div class="ttdeci">static int hwloc_gl_get_display_by_osdev(hwloc_topology_t topology, hwloc_obj_t osdev, unsigned *port, unsigned *device)</div><div class="ttdoc">Get the OpenGL display port and device corresponding to the given hwloc OS object.</div><div class="ttdef"><b>Definition:</b> gl.h:111</div></div>
130 <div class="ttc" id="aa00244_html"><div class="ttname"><a href="a00244.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:395</div></div>
131 <div class="ttc" id="aa00244_html_abb709ec38f2970677e4e57d1d30be96d"><div class="ttname"><a href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">hwloc_obj::name</a></div><div class="ttdeci">char * name</div><div class="ttdoc">Object-specific name if any. Mostly used for identifying OS devices and Misc objects where a name str...</div><div class="ttdef"><b>Definition:</b> hwloc.h:407</div></div>
132 <div class="ttc" id="aa00244_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:414</div></div>
133 <div class="ttc" id="aa00248_html_aaf7a5c38b5185703ff18c46ad2761dcf"><div class="ttname"><a href="a00248.html#aaf7a5c38b5185703ff18c46ad2761dcf">hwloc_obj_attr_u::osdev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_osdev_attr_s osdev</div></div>
134 <div class="ttc" id="aa00288_html_a31e019e27e54ac6138d04be639bb96f9"><div class="ttname"><a href="a00288.html#a31e019e27e54ac6138d04be639bb96f9">hwloc_obj_attr_u::hwloc_osdev_attr_s::type</a></div><div class="ttdeci">hwloc_obj_osdev_type_t type</div><div class="ttdef"><b>Definition:</b> hwloc.h:665</div></div>
68 <div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
69 <div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
70 <div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="preprocessor">#endif</span></div>
71 <div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; </div>
72 <div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160; </div>
73 <div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
74 <div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="a00234.html#ga66281a9ba621357b1c7070b4fa19b5b8"> 60</a></span>&#160;<a class="code" href="a00234.html#ga66281a9ba621357b1c7070b4fa19b5b8">hwloc_levelzero_get_device_cpuset</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused,</div>
75 <div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; ze_device_handle_t device, <a class="code" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</div>
76 <div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;{</div>
77 <div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="preprocessor">#ifdef HWLOC_LINUX_SYS</span></div>
78 <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="comment">/* If we&#39;re on Linux, use the sysfs mechanism to get the local cpus */</span></div>
79 <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="preprocessor">#define HWLOC_LEVELZERO_DEVICE_SYSFS_PATH_MAX 128</span></div>
80 <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordtype">char</span> path[HWLOC_LEVELZERO_DEVICE_SYSFS_PATH_MAX];</div>
81 <div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; zes_pci_properties_t pci;</div>
82 <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; zes_device_handle_t sdevice = device;</div>
83 <div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; ze_result_t res;</div>
84 <div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; </div>
85 <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00202.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a>(topology)) {</div>
86 <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; errno = EINVAL;</div>
87 <div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">return</span> -1;</div>
88 <div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; }</div>
89 <div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; </div>
90 <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; res = zesDevicePciGetProperties(sdevice, &amp;pci);</div>
91 <div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">if</span> (res != ZE_RESULT_SUCCESS) {</div>
92 <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; errno = EINVAL;</div>
93 <div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keywordflow">return</span> -1;</div>
94 <div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; }</div>
95 <div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; </div>
96 <div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; sprintf(path, <span class="stringliteral">&quot;/sys/bus/pci/devices/%04x:%02x:%02x.%01x/local_cpus&quot;</span>,</div>
97 <div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; pci.address.domain, pci.address.bus, pci.address.device, pci.address.function);</div>
98 <div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00224.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a>(path, set) &lt; 0</div>
99 <div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; || <a class="code" href="a00214.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(set))</div>
100 <div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <a class="code" href="a00214.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00211.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
101 <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="preprocessor">#else</span></div>
102 <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="comment">/* Non-Linux systems simply get a full cpuset */</span></div>
103 <div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <a class="code" href="a00214.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00211.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
104 <div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="preprocessor">#endif</span></div>
105 <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">return</span> 0;</div>
106 <div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;}</div>
107 <div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; </div>
108 <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
109 <div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="a00234.html#gaf06cb737abcd2dc6db894c8914302d85"> 109</a></span>&#160;<a class="code" href="a00234.html#gaf06cb737abcd2dc6db894c8914302d85">hwloc_levelzero_get_device_osdev</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, ze_device_handle_t device)</div>
110 <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160;{</div>
111 <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; zes_device_handle_t sdevice = device;</div>
112 <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; zes_pci_properties_t pci;</div>
113 <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; ze_result_t res;</div>
114 <div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> osdev;</div>
115 <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; </div>
116 <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00202.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a>(topology)) {</div>
117 <div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; errno = EINVAL;</div>
118 <div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">return</span> NULL;</div>
119 <div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; }</div>
120 <div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; </div>
121 <div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; res = zesDevicePciGetProperties(sdevice, &amp;pci);</div>
122 <div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">if</span> (res != ZE_RESULT_SUCCESS) {</div>
123 <div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="comment">/* L0 was likely initialized without sysman, don&#39;t bother */</span></div>
124 <div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; errno = EINVAL;</div>
125 <div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">return</span> NULL;</div>
126 <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; }</div>
127 <div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; </div>
128 <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; osdev = NULL;</div>
129 <div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00213.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
130 <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> pcidev = osdev-&gt;<a class="code" href="a00250.html#adc494f6aed939992be1c55cca5822900">parent</a>;</div>
131 <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; </div>
132 <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">if</span> (strncmp(osdev-&gt;<a class="code" href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, <span class="stringliteral">&quot;ze&quot;</span>, 2))</div>
133 <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">continue</span>;</div>
134 <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; </div>
135 <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">if</span> (pcidev</div>
136 <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00250.html#acc4f0803f244867e68fe0036800be5de">type</a> == <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div>
137 <div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00274.html#a8fba44988deb98613c1505a4019a34dc">domain</a> == pci.address.domain</div>
138 <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00274.html#aae99e035e8d1387d7b8768aaa8eceb0a">bus</a> == pci.address.bus</div>
139 <div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00274.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">dev</a> == pci.address.device</div>
140 <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; &amp;&amp; pcidev-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00274.html#a695f32df53f4ef728670bfcf31b74e0f">func</a> == pci.address.function)</div>
141 <div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">return</span> osdev;</div>
142 <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; </div>
143 <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="comment">/* FIXME: when we&#39;ll have serialnumber, try it in case PCI is filtered-out */</span></div>
144 <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; }</div>
145 <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; </div>
146 <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="keywordflow">return</span> NULL;</div>
147 <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;}</div>
148 <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; </div>
149 <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
150 <div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
151 <div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160;<span class="preprocessor">#endif</span></div>
152 <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; </div>
153 <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; </div>
154 <div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_LEVELZERO_H */</span><span class="preprocessor"></span></div>
155 <div class="ttc" id="aa00192_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
156 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div><div class="ttdeci">@ HWLOC_OBJ_PCI_DEVICE</div><div class="ttdoc">PCI device (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:269</div></div>
157 <div class="ttc" id="aa00195_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
158 <div class="ttc" id="aa00202_html_ga68ffdcfd9175cdf40709801092f18017"><div class="ttname"><a href="a00202.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a></div><div class="ttdeci">int hwloc_topology_is_thissystem(hwloc_topology_t restrict topology)</div><div class="ttdoc">Does the topology context come from this system?</div></div>
159 <div class="ttc" id="aa00211_html_gaee30e03391c1ed7dfd617fb5c7bbb033"><div class="ttname"><a href="a00211.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a></div><div class="ttdeci">hwloc_const_cpuset_t hwloc_topology_get_complete_cpuset(hwloc_topology_t topology)</div><div class="ttdoc">Get complete CPU set.</div></div>
160 <div class="ttc" id="aa00213_html_ga8b4584c8949e2c5f1c97ba7fe92b8145"><div class="ttname"><a href="a00213.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_osdev(hwloc_topology_t topology, hwloc_obj_t prev)</div><div class="ttdoc">Get the next OS device in the system.</div><div class="ttdef"><b>Definition:</b> helper.h:1194</div></div>
161 <div class="ttc" id="aa00214_html_ga5b64be28f5a7176ed8ad0d6a90bdf108"><div class="ttname"><a href="a00214.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a></div><div class="ttdeci">int hwloc_bitmap_iszero(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Test whether bitmap bitmap is empty.</div></div>
162 <div class="ttc" id="aa00214_html_ga72a29824798b48784b8217471ec8f14c"><div class="ttname"><a href="a00214.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a></div><div class="ttdeci">int hwloc_bitmap_copy(hwloc_bitmap_t dst, hwloc_const_bitmap_t src)</div><div class="ttdoc">Copy the contents of bitmap src into the already allocated bitmap dst.</div></div>
163 <div class="ttc" id="aa00224_html_gaf72d83e273803226ce772973e37b85de"><div class="ttname"><a href="a00224.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a></div><div class="ttdeci">int hwloc_linux_read_path_as_cpumask(const char *path, hwloc_bitmap_t set)</div><div class="ttdoc">Convert a linux kernel cpumask file path into a hwloc bitmap set.</div></div>
164 <div class="ttc" id="aa00234_html_ga66281a9ba621357b1c7070b4fa19b5b8"><div class="ttname"><a href="a00234.html#ga66281a9ba621357b1c7070b4fa19b5b8">hwloc_levelzero_get_device_cpuset</a></div><div class="ttdeci">static int hwloc_levelzero_get_device_cpuset(hwloc_topology_t topology, ze_device_handle_t device, hwloc_cpuset_t set)</div><div class="ttdoc">Get the CPU set of logical processors that are physically close to the Level Zero device device.</div><div class="ttdef"><b>Definition:</b> levelzero.h:60</div></div>
165 <div class="ttc" id="aa00234_html_gaf06cb737abcd2dc6db894c8914302d85"><div class="ttname"><a href="a00234.html#gaf06cb737abcd2dc6db894c8914302d85">hwloc_levelzero_get_device_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_levelzero_get_device_osdev(hwloc_topology_t topology, ze_device_handle_t device)</div><div class="ttdoc">Get the hwloc OS device object corresponding to Level Zero device device.</div><div class="ttdef"><b>Definition:</b> levelzero.h:109</div></div>
166 <div class="ttc" id="aa00250_html"><div class="ttname"><a href="a00250.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:395</div></div>
167 <div class="ttc" id="aa00250_html_abb709ec38f2970677e4e57d1d30be96d"><div class="ttname"><a href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">hwloc_obj::name</a></div><div class="ttdeci">char * name</div><div class="ttdoc">Object-specific name if any. Mostly used for identifying OS devices and Misc objects where a name str...</div><div class="ttdef"><b>Definition:</b> hwloc.h:407</div></div>
168 <div class="ttc" id="aa00250_html_acc4f0803f244867e68fe0036800be5de"><div class="ttname"><a href="a00250.html#acc4f0803f244867e68fe0036800be5de">hwloc_obj::type</a></div><div class="ttdeci">hwloc_obj_type_t type</div><div class="ttdoc">Type of object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:397</div></div>
169 <div class="ttc" id="aa00250_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:414</div></div>
170 <div class="ttc" id="aa00250_html_adc494f6aed939992be1c55cca5822900"><div class="ttname"><a href="a00250.html#adc494f6aed939992be1c55cca5822900">hwloc_obj::parent</a></div><div class="ttdeci">struct hwloc_obj * parent</div><div class="ttdoc">Parent, NULL if root (Machine object)</div><div class="ttdef"><b>Definition:</b> hwloc.h:445</div></div>
171 <div class="ttc" id="aa00254_html_a0b66da7ab072f7c016f8ed86701f5a7c"><div class="ttname"><a href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">hwloc_obj_attr_u::pcidev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_pcidev_attr_s pcidev</div></div>
172 <div class="ttc" id="aa00274_html_a3d70c84a12f7e93d14c8d47bf4fd9dc5"><div class="ttname"><a href="a00274.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">hwloc_obj_attr_u::hwloc_pcidev_attr_s::dev</a></div><div class="ttdeci">unsigned char dev</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
173 <div class="ttc" id="aa00274_html_a695f32df53f4ef728670bfcf31b74e0f"><div class="ttname"><a href="a00274.html#a695f32df53f4ef728670bfcf31b74e0f">hwloc_obj_attr_u::hwloc_pcidev_attr_s::func</a></div><div class="ttdeci">unsigned char func</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
174 <div class="ttc" id="aa00274_html_a8fba44988deb98613c1505a4019a34dc"><div class="ttname"><a href="a00274.html#a8fba44988deb98613c1505a4019a34dc">hwloc_obj_attr_u::hwloc_pcidev_attr_s::domain</a></div><div class="ttdeci">unsigned short domain</div><div class="ttdef"><b>Definition:</b> hwloc.h:634</div></div>
175 <div class="ttc" id="aa00274_html_aae99e035e8d1387d7b8768aaa8eceb0a"><div class="ttname"><a href="a00274.html#aae99e035e8d1387d7b8768aaa8eceb0a">hwloc_obj_attr_u::hwloc_pcidev_attr_s::bus</a></div><div class="ttdeci">unsigned char bus</div><div class="ttdef"><b>Definition:</b> hwloc.h:638</div></div>
135176 </div><!-- fragment --></div><!-- contents -->
136177 <!-- start footer part -->
137178 <hr class="footer"/><address class="footer"><small>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): openfabrics-verbs.h Source File</title>
7 <title>Hardware Locality (hwloc): gl.h Source File</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4343 </div><!-- top -->
4444 <div class="header">
4545 <div class="headertitle">
46 <div class="title">openfabrics-verbs.h</div> </div>
46 <div class="title">gl.h</div> </div>
4747 </div><!--header-->
4848 <div class="contents">
4949 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
50 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2009 CNRS</span></div>
51 <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * Copyright © 2009-2020 Inria. All rights reserved.</span></div>
52 <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Copyright © 2009-2010 Université Bordeaux</span></div>
53 <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.</span></div>
54 <div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
55 <div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> */</span></div>
56 <div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
57 <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#ifndef HWLOC_OPENFABRICS_VERBS_H</span></div>
58 <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#define HWLOC_OPENFABRICS_VERBS_H</span></div>
50 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2012 Blue Brain Project, EPFL. All rights reserved.</span></div>
51 <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * Copyright © 2012-2021 Inria. All rights reserved.</span></div>
52 <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
53 <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> */</span></div>
54 <div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160; </div>
55 <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#ifndef HWLOC_GL_H</span></div>
56 <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#define HWLOC_GL_H</span></div>
57 <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; </div>
58 <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &quot;hwloc.h&quot;</span></div>
59 <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160; </div>
60 <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;stdio.h&gt;</span></div>
61 <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;string.h&gt;</span></div>
5962 <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
60 <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &quot;hwloc.h&quot;</span></div>
61 <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;hwloc/autogen/config.h&quot;</span></div>
62 <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#ifdef HWLOC_LINUX_SYS</span></div>
63 <div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &quot;hwloc/linux.h&quot;</span></div>
64 <div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#endif</span></div>
63 <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160; </div>
64 <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
65 <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
66 <div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#endif</span></div>
67 <div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
6568 <div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
66 <div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &lt;infiniband/verbs.h&gt;</span></div>
67 <div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
68 <div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; </div>
69 <div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
70 <div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
71 <div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#endif</span></div>
72 <div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; </div>
73 <div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; </div>
74 <div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
75 <div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="a00230.html#ga3ea0d838c1e7f1671b35687aae2da6ae"> 62</a></span>&#160;<a class="code" href="a00230.html#ga3ea0d838c1e7f1671b35687aae2da6ae">hwloc_ibv_get_device_cpuset</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused,</div>
76 <div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keyword">struct</span> ibv_device *ibdev, <a class="code" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</div>
77 <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;{</div>
78 <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="preprocessor">#ifdef HWLOC_LINUX_SYS</span></div>
79 <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="comment">/* If we&#39;re on Linux, use the verbs-provided sysfs mechanism to</span></div>
80 <div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="comment"> get the local cpus */</span></div>
81 <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="preprocessor">#define HWLOC_OPENFABRICS_VERBS_SYSFS_PATH_MAX 128</span></div>
82 <div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordtype">char</span> path[HWLOC_OPENFABRICS_VERBS_SYSFS_PATH_MAX];</div>
83 <div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; </div>
84 <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00199.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a>(topology)) {</div>
85 <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; errno = EINVAL;</div>
86 <div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">return</span> -1;</div>
87 <div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; }</div>
88 <div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; </div>
89 <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; sprintf(path, <span class="stringliteral">&quot;/sys/class/infiniband/%s/device/local_cpus&quot;</span>,</div>
90 <div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; ibv_get_device_name(ibdev));</div>
91 <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00220.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a>(path, set) &lt; 0</div>
92 <div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; || <a class="code" href="a00211.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(set))</div>
93 <div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <a class="code" href="a00211.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00208.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
94 <div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="preprocessor">#else</span></div>
95 <div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="comment">/* Non-Linux systems simply get a full cpuset */</span></div>
96 <div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <a class="code" href="a00211.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00208.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
97 <div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="preprocessor">#endif</span></div>
98 <div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">return</span> 0;</div>
99 <div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;}</div>
100 <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; </div>
101 <div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
102 <div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="a00230.html#ga31d794567f4420bbdc8baa7bf8bf6138"> 105</a></span>&#160;<a class="code" href="a00230.html#ga31d794567f4420bbdc8baa7bf8bf6138">hwloc_ibv_get_device_osdev_by_name</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
103 <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> *ibname)</div>
104 <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;{</div>
105 <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> osdev = NULL;</div>
106 <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00210.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
107 <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0a52157d03694fdae82dddd57ca8c973b6">HWLOC_OBJ_OSDEV_OPENFABRICS</a> == osdev-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a>.<a class="code" href="a00288.html#a31e019e27e54ac6138d04be639bb96f9">type</a></div>
108 <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; &amp;&amp; osdev-&gt;<a class="code" href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">name</a> &amp;&amp; !strcmp(ibname, osdev-&gt;<a class="code" href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">name</a>))</div>
109 <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordflow">return</span> osdev;</div>
110 <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; }</div>
111 <div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">return</span> NULL;</div>
112 <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;}</div>
113 <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; </div>
114 <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00244.html">hwloc_obj_t</a></div>
115 <div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="a00230.html#ga7324cdfd5db6ed2669c051ef7e1b64e1"> 132</a></span>&#160;<a class="code" href="a00230.html#ga7324cdfd5db6ed2669c051ef7e1b64e1">hwloc_ibv_get_device_osdev</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
116 <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keyword">struct</span> ibv_device *ibdev)</div>
117 <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;{</div>
118 <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00199.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a>(topology)) {</div>
119 <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; errno = EINVAL;</div>
120 <div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">return</span> NULL;</div>
121 <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; }</div>
122 <div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">return</span> <a class="code" href="a00230.html#ga31d794567f4420bbdc8baa7bf8bf6138">hwloc_ibv_get_device_osdev_by_name</a>(topology, ibv_get_device_name(ibdev));</div>
123 <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160;}</div>
124 <div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; </div>
125 <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
126 <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
127 <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;<span class="preprocessor">#endif</span></div>
128 <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; </div>
129 <div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; </div>
130 <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_OPENFABRICS_VERBS_H */</span><span class="preprocessor"></span></div>
131 <div class="ttc" id="aa00189_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
132 <div class="ttc" id="aa00190_html_gga64f5d539df299c97ae80ce53fc4b56c0a52157d03694fdae82dddd57ca8c973b6"><div class="ttname"><a href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0a52157d03694fdae82dddd57ca8c973b6">HWLOC_OBJ_OSDEV_OPENFABRICS</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_OPENFABRICS</div><div class="ttdoc">Operating system openfabrics device. For instance the &quot;mlx4_0&quot; InfiniBand HCA, or &quot;hfi1_0&quot; Omni-Path ...</div><div class="ttdef"><b>Definition:</b> hwloc.h:347</div></div>
133 <div class="ttc" id="aa00192_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
134 <div class="ttc" id="aa00199_html_ga68ffdcfd9175cdf40709801092f18017"><div class="ttname"><a href="a00199.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a></div><div class="ttdeci">int hwloc_topology_is_thissystem(hwloc_topology_t restrict topology)</div><div class="ttdoc">Does the topology context come from this system?</div></div>
135 <div class="ttc" id="aa00208_html_gaee30e03391c1ed7dfd617fb5c7bbb033"><div class="ttname"><a href="a00208.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a></div><div class="ttdeci">hwloc_const_cpuset_t hwloc_topology_get_complete_cpuset(hwloc_topology_t topology)</div><div class="ttdoc">Get complete CPU set.</div></div>
136 <div class="ttc" id="aa00210_html_ga8b4584c8949e2c5f1c97ba7fe92b8145"><div class="ttname"><a href="a00210.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_osdev(hwloc_topology_t topology, hwloc_obj_t prev)</div><div class="ttdoc">Get the next OS device in the system.</div><div class="ttdef"><b>Definition:</b> helper.h:1151</div></div>
137 <div class="ttc" id="aa00211_html_ga5b64be28f5a7176ed8ad0d6a90bdf108"><div class="ttname"><a href="a00211.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a></div><div class="ttdeci">int hwloc_bitmap_iszero(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Test whether bitmap bitmap is empty.</div></div>
138 <div class="ttc" id="aa00211_html_ga72a29824798b48784b8217471ec8f14c"><div class="ttname"><a href="a00211.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a></div><div class="ttdeci">int hwloc_bitmap_copy(hwloc_bitmap_t dst, hwloc_const_bitmap_t src)</div><div class="ttdoc">Copy the contents of bitmap src into the already allocated bitmap dst.</div></div>
139 <div class="ttc" id="aa00220_html_gaf72d83e273803226ce772973e37b85de"><div class="ttname"><a href="a00220.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a></div><div class="ttdeci">int hwloc_linux_read_path_as_cpumask(const char *path, hwloc_bitmap_t set)</div><div class="ttdoc">Convert a linux kernel cpumask file path into a hwloc bitmap set.</div></div>
140 <div class="ttc" id="aa00230_html_ga31d794567f4420bbdc8baa7bf8bf6138"><div class="ttname"><a href="a00230.html#ga31d794567f4420bbdc8baa7bf8bf6138">hwloc_ibv_get_device_osdev_by_name</a></div><div class="ttdeci">static hwloc_obj_t hwloc_ibv_get_device_osdev_by_name(hwloc_topology_t topology, const char *ibname)</div><div class="ttdoc">Get the hwloc OS device object corresponding to the OpenFabrics device named ibname.</div><div class="ttdef"><b>Definition:</b> openfabrics-verbs.h:105</div></div>
141 <div class="ttc" id="aa00230_html_ga3ea0d838c1e7f1671b35687aae2da6ae"><div class="ttname"><a href="a00230.html#ga3ea0d838c1e7f1671b35687aae2da6ae">hwloc_ibv_get_device_cpuset</a></div><div class="ttdeci">static int hwloc_ibv_get_device_cpuset(hwloc_topology_t topology, struct ibv_device *ibdev, hwloc_cpuset_t set)</div><div class="ttdoc">Get the CPU set of processors that are physically close to device ibdev.</div><div class="ttdef"><b>Definition:</b> openfabrics-verbs.h:62</div></div>
142 <div class="ttc" id="aa00230_html_ga7324cdfd5db6ed2669c051ef7e1b64e1"><div class="ttname"><a href="a00230.html#ga7324cdfd5db6ed2669c051ef7e1b64e1">hwloc_ibv_get_device_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_ibv_get_device_osdev(hwloc_topology_t topology, struct ibv_device *ibdev)</div><div class="ttdoc">Get the hwloc OS device object corresponding to the OpenFabrics device ibdev.</div><div class="ttdef"><b>Definition:</b> openfabrics-verbs.h:132</div></div>
143 <div class="ttc" id="aa00244_html"><div class="ttname"><a href="a00244.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:395</div></div>
144 <div class="ttc" id="aa00244_html_abb709ec38f2970677e4e57d1d30be96d"><div class="ttname"><a href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">hwloc_obj::name</a></div><div class="ttdeci">char * name</div><div class="ttdoc">Object-specific name if any. Mostly used for identifying OS devices and Misc objects where a name str...</div><div class="ttdef"><b>Definition:</b> hwloc.h:407</div></div>
145 <div class="ttc" id="aa00244_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:414</div></div>
146 <div class="ttc" id="aa00248_html_aaf7a5c38b5185703ff18c46ad2761dcf"><div class="ttname"><a href="a00248.html#aaf7a5c38b5185703ff18c46ad2761dcf">hwloc_obj_attr_u::osdev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_osdev_attr_s osdev</div></div>
147 <div class="ttc" id="aa00288_html_a31e019e27e54ac6138d04be639bb96f9"><div class="ttname"><a href="a00288.html#a31e019e27e54ac6138d04be639bb96f9">hwloc_obj_attr_u::hwloc_osdev_attr_s::type</a></div><div class="ttdeci">hwloc_obj_osdev_type_t type</div><div class="ttdef"><b>Definition:</b> hwloc.h:665</div></div>
69 <div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
70 <div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="a00235.html#ga4d66a77e4fe4051d6e5b772c1b8fcec5"> 54</a></span>&#160;<a class="code" href="a00235.html#ga4d66a77e4fe4051d6e5b772c1b8fcec5">hwloc_gl_get_display_osdev_by_port_device</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
71 <div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordtype">unsigned</span> port, <span class="keywordtype">unsigned</span> device)</div>
72 <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;{</div>
73 <div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordtype">unsigned</span> x = (unsigned) -1, y = (<span class="keywordtype">unsigned</span>) -1;</div>
74 <div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> osdev = NULL;</div>
75 <div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00213.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
76 <div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90">HWLOC_OBJ_OSDEV_GPU</a> == osdev-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a>.<a class="code" href="a00294.html#a31e019e27e54ac6138d04be639bb96f9">type</a></div>
77 <div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; &amp;&amp; osdev-&gt;<a class="code" href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">name</a></div>
78 <div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; &amp;&amp; sscanf(osdev-&gt;<a class="code" href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, <span class="stringliteral">&quot;:%u.%u&quot;</span>, &amp;x, &amp;y) == 2</div>
79 <div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; &amp;&amp; port == x &amp;&amp; device == y)</div>
80 <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="keywordflow">return</span> osdev;</div>
81 <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; }</div>
82 <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; errno = EINVAL;</div>
83 <div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">return</span> NULL;</div>
84 <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;}</div>
85 <div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; </div>
86 <div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
87 <div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="a00235.html#ga2d36ef441d1dfddf49cfb5c01bd58d8e"> 85</a></span>&#160;<a class="code" href="a00235.html#ga2d36ef441d1dfddf49cfb5c01bd58d8e">hwloc_gl_get_display_osdev_by_name</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
88 <div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> *name)</div>
89 <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;{</div>
90 <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> osdev = NULL;</div>
91 <div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00213.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
92 <div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90">HWLOC_OBJ_OSDEV_GPU</a> == osdev-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a>.<a class="code" href="a00294.html#a31e019e27e54ac6138d04be639bb96f9">type</a></div>
93 <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; &amp;&amp; osdev-&gt;<a class="code" href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">name</a></div>
94 <div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; &amp;&amp; !strcmp(name, osdev-&gt;<a class="code" href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">name</a>))</div>
95 <div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">return</span> osdev;</div>
96 <div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; }</div>
97 <div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; errno = EINVAL;</div>
98 <div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="keywordflow">return</span> NULL;</div>
99 <div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;}</div>
100 <div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; </div>
101 <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
102 <div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="a00235.html#ga936665ab5f0d29a081c4b78d11f4ad07"> 112</a></span>&#160;<a class="code" href="a00235.html#ga936665ab5f0d29a081c4b78d11f4ad07">hwloc_gl_get_display_by_osdev</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused,</div>
103 <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> osdev,</div>
104 <div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordtype">unsigned</span> *port, <span class="keywordtype">unsigned</span> *device)</div>
105 <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;{</div>
106 <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordtype">unsigned</span> x = -1, y = -1;</div>
107 <div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90">HWLOC_OBJ_OSDEV_GPU</a> == osdev-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a>.<a class="code" href="a00294.html#a31e019e27e54ac6138d04be639bb96f9">type</a></div>
108 <div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; &amp;&amp; sscanf(osdev-&gt;<a class="code" href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, <span class="stringliteral">&quot;:%u.%u&quot;</span>, &amp;x, &amp;y) == 2) {</div>
109 <div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; *port = x;</div>
110 <div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; *device = y;</div>
111 <div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">return</span> 0;</div>
112 <div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; }</div>
113 <div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; errno = EINVAL;</div>
114 <div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">return</span> -1;</div>
115 <div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;}</div>
116 <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; </div>
117 <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
118 <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
119 <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;<span class="preprocessor">#endif</span></div>
120 <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; </div>
121 <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; </div>
122 <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_GL_H */</span><span class="preprocessor"></span></div>
123 <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; </div>
124 <div class="ttc" id="aa00193_html_gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90"><div class="ttname"><a href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90">HWLOC_OBJ_OSDEV_GPU</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_GPU</div><div class="ttdoc">Operating system GPU device. For instance &quot;:0.0&quot; for a GL display, &quot;card0&quot; for a Linux DRM device.</div><div class="ttdef"><b>Definition:</b> hwloc.h:342</div></div>
125 <div class="ttc" id="aa00195_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
126 <div class="ttc" id="aa00213_html_ga8b4584c8949e2c5f1c97ba7fe92b8145"><div class="ttname"><a href="a00213.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_osdev(hwloc_topology_t topology, hwloc_obj_t prev)</div><div class="ttdoc">Get the next OS device in the system.</div><div class="ttdef"><b>Definition:</b> helper.h:1194</div></div>
127 <div class="ttc" id="aa00235_html_ga2d36ef441d1dfddf49cfb5c01bd58d8e"><div class="ttname"><a href="a00235.html#ga2d36ef441d1dfddf49cfb5c01bd58d8e">hwloc_gl_get_display_osdev_by_name</a></div><div class="ttdeci">static hwloc_obj_t hwloc_gl_get_display_osdev_by_name(hwloc_topology_t topology, const char *name)</div><div class="ttdoc">Get the hwloc OS device object corresponding to the OpenGL display given by name.</div><div class="ttdef"><b>Definition:</b> gl.h:85</div></div>
128 <div class="ttc" id="aa00235_html_ga4d66a77e4fe4051d6e5b772c1b8fcec5"><div class="ttname"><a href="a00235.html#ga4d66a77e4fe4051d6e5b772c1b8fcec5">hwloc_gl_get_display_osdev_by_port_device</a></div><div class="ttdeci">static hwloc_obj_t hwloc_gl_get_display_osdev_by_port_device(hwloc_topology_t topology, unsigned port, unsigned device)</div><div class="ttdoc">Get the hwloc OS device object corresponding to the OpenGL display given by port and device index.</div><div class="ttdef"><b>Definition:</b> gl.h:54</div></div>
129 <div class="ttc" id="aa00235_html_ga936665ab5f0d29a081c4b78d11f4ad07"><div class="ttname"><a href="a00235.html#ga936665ab5f0d29a081c4b78d11f4ad07">hwloc_gl_get_display_by_osdev</a></div><div class="ttdeci">static int hwloc_gl_get_display_by_osdev(hwloc_topology_t topology, hwloc_obj_t osdev, unsigned *port, unsigned *device)</div><div class="ttdoc">Get the OpenGL display port and device corresponding to the given hwloc OS object.</div><div class="ttdef"><b>Definition:</b> gl.h:112</div></div>
130 <div class="ttc" id="aa00250_html"><div class="ttname"><a href="a00250.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:395</div></div>
131 <div class="ttc" id="aa00250_html_abb709ec38f2970677e4e57d1d30be96d"><div class="ttname"><a href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">hwloc_obj::name</a></div><div class="ttdeci">char * name</div><div class="ttdoc">Object-specific name if any. Mostly used for identifying OS devices and Misc objects where a name str...</div><div class="ttdef"><b>Definition:</b> hwloc.h:407</div></div>
132 <div class="ttc" id="aa00250_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:414</div></div>
133 <div class="ttc" id="aa00254_html_aaf7a5c38b5185703ff18c46ad2761dcf"><div class="ttname"><a href="a00254.html#aaf7a5c38b5185703ff18c46ad2761dcf">hwloc_obj_attr_u::osdev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_osdev_attr_s osdev</div></div>
134 <div class="ttc" id="aa00294_html_a31e019e27e54ac6138d04be639bb96f9"><div class="ttname"><a href="a00294.html#a31e019e27e54ac6138d04be639bb96f9">hwloc_obj_attr_u::hwloc_osdev_attr_s::type</a></div><div class="ttdeci">hwloc_obj_osdev_type_t type</div><div class="ttdef"><b>Definition:</b> hwloc.h:665</div></div>
148135 </div><!-- fragment --></div><!-- contents -->
149136 <!-- start footer part -->
150137 <hr class="footer"/><address class="footer"><small>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): diff.h Source File</title>
7 <title>Hardware Locality (hwloc): openfabrics-verbs.h Source File</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4343 </div><!-- top -->
4444 <div class="header">
4545 <div class="headertitle">
46 <div class="title">diff.h</div> </div>
46 <div class="title">openfabrics-verbs.h</div> </div>
4747 </div><!--header-->
4848 <div class="contents">
4949 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
50 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2013-2020 Inria. All rights reserved.</span></div>
51 <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
52 <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> */</span></div>
53 <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; </div>
54 <div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#ifndef HWLOC_DIFF_H</span></div>
55 <div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#define HWLOC_DIFF_H</span></div>
56 <div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160; </div>
57 <div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#ifndef HWLOC_H</span></div>
58 <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#error Please include the main hwloc.h instead</span></div>
59 <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#endif</span></div>
60 <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; </div>
61 <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; </div>
62 <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
63 <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
64 <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#elif 0</span></div>
65 <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;}</div>
66 <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#endif</span></div>
67 <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
68 <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
69 <div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="a00231.html#ga86f044210b0a9e9fa83acbdbbf7e05fd"> 62</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="a00231.html#ga86f044210b0a9e9fa83acbdbbf7e05fd">hwloc_topology_diff_obj_attr_type_e</a> {</div>
70 <div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="a00231.html#gga86f044210b0a9e9fa83acbdbbf7e05fdabc7f0c7ed0b6864e902f4b70f2c7bc94"> 67</a></span>&#160; <a class="code" href="a00231.html#gga86f044210b0a9e9fa83acbdbbf7e05fdabc7f0c7ed0b6864e902f4b70f2c7bc94">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_SIZE</a>,</div>
71 <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; </div>
72 <div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="a00231.html#gga86f044210b0a9e9fa83acbdbbf7e05fda94a8f37c51d62d15ac6192665dd49310"> 74</a></span>&#160; <a class="code" href="a00231.html#gga86f044210b0a9e9fa83acbdbbf7e05fda94a8f37c51d62d15ac6192665dd49310">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_NAME</a>,</div>
73 <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <a class="code" href="a00231.html#gga86f044210b0a9e9fa83acbdbbf7e05fda63430bf932434bc456282f636d39c2c2">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_INFO</a></div>
74 <div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="a00231.html#gga86f044210b0a9e9fa83acbdbbf7e05fda63430bf932434bc456282f636d39c2c2"> 79</a></span>&#160;} <a class="code" href="a00231.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a>;</div>
75 <div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; </div>
76 <div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="a00340.html"> 83</a></span>&#160;<span class="keyword">union </span><a class="code" href="a00340.html">hwloc_topology_diff_obj_attr_u</a> {</div>
77 <div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="a00344.html"> 84</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00344.html">hwloc_topology_diff_obj_attr_generic_s</a> {</div>
78 <div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="comment">/* each part of the union must start with these */</span></div>
79 <div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="a00344.html#a43f8133b7c30129b002c2d295e6580fc"> 86</a></span>&#160; <a class="code" href="a00231.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a> <a class="code" href="a00344.html#a43f8133b7c30129b002c2d295e6580fc">type</a>;</div>
80 <div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="a00340.html#aeb449c0e04b14ebf8c3126756b6364f9"> 87</a></span>&#160; } <span class="keyword">generic</span>;</div>
81 <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; </div>
82 <div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="a00348.html"> 90</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00348.html">hwloc_topology_diff_obj_attr_uint64_s</a> {</div>
83 <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="comment">/* used for storing integer attributes */</span></div>
84 <div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="a00348.html#afe262b9aa558fe7bfecbd37a7a129197"> 92</a></span>&#160; <a class="code" href="a00231.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a> <a class="code" href="a00348.html#afe262b9aa558fe7bfecbd37a7a129197">type</a>;</div>
85 <div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="a00348.html#adb772c3f1761ecadf496c80ae14afce3"> 93</a></span>&#160; hwloc_uint64_t <a class="code" href="a00348.html#adb772c3f1761ecadf496c80ae14afce3">index</a>; <span class="comment">/* not used for SIZE */</span></div>
86 <div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="a00348.html#a44c0894dce563335d347fde6595c49c9"> 94</a></span>&#160; hwloc_uint64_t <a class="code" href="a00348.html#a44c0894dce563335d347fde6595c49c9">oldvalue</a>;</div>
87 <div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="a00348.html#ae63aa59ad65aa783b730a4f213304eb4"> 95</a></span>&#160; hwloc_uint64_t <a class="code" href="a00348.html#ae63aa59ad65aa783b730a4f213304eb4">newvalue</a>;</div>
88 <div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="a00340.html#a4608ade88460f5f208887775e5a69a0a"> 96</a></span>&#160; } <a class="code" href="a00340.html#a4608ade88460f5f208887775e5a69a0a">uint64</a>;</div>
89 <div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; </div>
90 <div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="a00352.html"> 99</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00352.html">hwloc_topology_diff_obj_attr_string_s</a> {</div>
91 <div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="comment">/* used for storing name and info pairs */</span></div>
92 <div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="a00352.html#a784ab5827c1bf531b86d1f02f199d04d"> 101</a></span>&#160; <a class="code" href="a00231.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a> <a class="code" href="a00352.html#a784ab5827c1bf531b86d1f02f199d04d">type</a>;</div>
93 <div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="a00352.html#a7ef48c66ccddf34d90edb4e4314b41c6"> 102</a></span>&#160; <span class="keywordtype">char</span> *<a class="code" href="a00352.html#a7ef48c66ccddf34d90edb4e4314b41c6">name</a>; <span class="comment">/* not used for NAME */</span></div>
94 <div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="a00352.html#a33cc281d4417129064295a6ae7b79818"> 103</a></span>&#160; <span class="keywordtype">char</span> *<a class="code" href="a00352.html#a33cc281d4417129064295a6ae7b79818">oldvalue</a>;</div>
95 <div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="a00352.html#a75f37f4add21cece50fee2701c3b77db"> 104</a></span>&#160; <span class="keywordtype">char</span> *<a class="code" href="a00352.html#a75f37f4add21cece50fee2701c3b77db">newvalue</a>;</div>
96 <div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="a00340.html#a42fa15c37f1f59ef638066c4c62c3154"> 105</a></span>&#160; } <a class="code" href="a00340.html#a42fa15c37f1f59ef638066c4c62c3154">string</a>;</div>
97 <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;};</div>
98 <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; </div>
99 <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; </div>
100 <div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="a00231.html#ga38b28b7423b85a3321e6d0062d5f83d0"> 111</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="a00231.html#ga38b28b7423b85a3321e6d0062d5f83d0">hwloc_topology_diff_type_e</a> {</div>
101 <div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="a00231.html#gga38b28b7423b85a3321e6d0062d5f83d0accbcaee230f79989debb284c8626f0c0"> 115</a></span>&#160; <a class="code" href="a00231.html#gga38b28b7423b85a3321e6d0062d5f83d0accbcaee230f79989debb284c8626f0c0">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR</a>,</div>
102 <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; </div>
103 <div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <a class="code" href="a00231.html#gga38b28b7423b85a3321e6d0062d5f83d0a3dc01fdeff355efe3fb2516bb454a147">HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX</a></div>
104 <div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="a00231.html#gga38b28b7423b85a3321e6d0062d5f83d0a3dc01fdeff355efe3fb2516bb454a147"> 125</a></span>&#160;} <a class="code" href="a00231.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a>;</div>
105 <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; </div>
106 <div class="line"><a name="l00129"></a><span class="lineno"><a class="line" href="a00356.html"> 129</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">union </span><a class="code" href="a00356.html">hwloc_topology_diff_u</a> {</div>
107 <div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="a00360.html"> 130</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00360.html">hwloc_topology_diff_generic_s</a> {</div>
108 <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="comment">/* each part of the union must start with these */</span></div>
109 <div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="a00360.html#a373005489fcddeba6319163e60263ae8"> 132</a></span>&#160; <a class="code" href="a00231.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a> <a class="code" href="a00360.html#a373005489fcddeba6319163e60263ae8">type</a>;</div>
110 <div class="line"><a name="l00133"></a><span class="lineno"><a class="line" href="a00360.html#a720aa94eb73cddfd8d6bf9fcbbfc035e"> 133</a></span>&#160; <span class="keyword">union </span><a class="code" href="a00356.html">hwloc_topology_diff_u</a> * <a class="code" href="a00360.html#a720aa94eb73cddfd8d6bf9fcbbfc035e">next</a>; <span class="comment">/* pointer to the next element of the list, or NULL */</span></div>
111 <div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="a00356.html#a0dd2cbfba0eca2fc7a2645668bcae0f8"> 134</a></span>&#160; } <span class="keyword">generic</span>;</div>
112 <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; </div>
113 <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="comment">/* A difference in an object attribute. */</span></div>
114 <div class="line"><a name="l00137"></a><span class="lineno"><a class="line" href="a00364.html"> 137</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00364.html">hwloc_topology_diff_obj_attr_s</a> {</div>
115 <div class="line"><a name="l00138"></a><span class="lineno"><a class="line" href="a00364.html#a70a118ad288bd98f18c8ce6dc52e2d10"> 138</a></span>&#160; <a class="code" href="a00231.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a> <a class="code" href="a00364.html#a70a118ad288bd98f18c8ce6dc52e2d10">type</a>; <span class="comment">/* must be ::HWLOC_TOPOLOGY_DIFF_OBJ_ATTR */</span></div>
116 <div class="line"><a name="l00139"></a><span class="lineno"><a class="line" href="a00364.html#acb9170a8eb3392656d70f7f3ef3e3eed"> 139</a></span>&#160; <span class="keyword">union </span><a class="code" href="a00356.html">hwloc_topology_diff_u</a> * <a class="code" href="a00364.html#acb9170a8eb3392656d70f7f3ef3e3eed">next</a>;</div>
117 <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="comment">/* List of attribute differences for a single object */</span></div>
118 <div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="a00364.html#a82c1d4bab80b9e0bf301a9d8291893e0"> 141</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="a00364.html#a82c1d4bab80b9e0bf301a9d8291893e0">obj_depth</a>;</div>
119 <div class="line"><a name="l00142"></a><span class="lineno"><a class="line" href="a00364.html#a91f0645f9062e892652357cd141c8ebb"> 142</a></span>&#160; <span class="keywordtype">unsigned</span> obj_index;</div>
120 <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keyword">union </span><a class="code" href="a00340.html">hwloc_topology_diff_obj_attr_u</a> diff;</div>
121 <div class="line"><a name="l00144"></a><span class="lineno"><a class="line" href="a00356.html#a01dca644feea48448b36baa60cf4c07f"> 144</a></span>&#160; } obj_attr;</div>
122 <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; </div>
123 <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="comment">/* A difference that is too complex. */</span></div>
124 <div class="line"><a name="l00147"></a><span class="lineno"><a class="line" href="a00368.html"> 147</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00368.html">hwloc_topology_diff_too_complex_s</a> {</div>
125 <div class="line"><a name="l00148"></a><span class="lineno"><a class="line" href="a00368.html#a92084295a4d6faf17a95a7eea526ddbd"> 148</a></span>&#160; <a class="code" href="a00231.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a> <a class="code" href="a00368.html#a92084295a4d6faf17a95a7eea526ddbd">type</a>; <span class="comment">/* must be ::HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX */</span></div>
126 <div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="a00368.html#a375afbaa043b109be689a7d9a3c7d153"> 149</a></span>&#160; <span class="keyword">union </span><a class="code" href="a00356.html">hwloc_topology_diff_u</a> * <a class="code" href="a00368.html#a375afbaa043b109be689a7d9a3c7d153">next</a>;</div>
127 <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="comment">/* Where we had to stop computing the diff in the first topology */</span></div>
128 <div class="line"><a name="l00151"></a><span class="lineno"><a class="line" href="a00368.html#a94c6498caeaafbb79927395d918d6cb3"> 151</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="a00368.html#a94c6498caeaafbb79927395d918d6cb3">obj_depth</a>;</div>
129 <div class="line"><a name="l00152"></a><span class="lineno"><a class="line" href="a00368.html#a6dc6b3c4adb10db74d993e37afaa0580"> 152</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00368.html#a6dc6b3c4adb10db74d993e37afaa0580">obj_index</a>;</div>
130 <div class="line"><a name="l00153"></a><span class="lineno"><a class="line" href="a00356.html#af7dc1148eb656c56e9678218cafd027b"> 153</a></span>&#160; } too_complex;</div>
131 <div class="line"><a name="l00154"></a><span class="lineno"><a class="line" href="a00231.html#ga1bd6363f26f7961f83153aaa484a9b85"> 154</a></span>&#160;} * <a class="code" href="a00231.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a>;</div>
132 <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; </div>
133 <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; </div>
134 <div class="line"><a name="l00194"></a><span class="lineno"><a class="line" href="a00231.html#ga8a1754f69fbb31364ea3ea2c39827c9f"> 194</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00231.html#ga8a1754f69fbb31364ea3ea2c39827c9f">hwloc_topology_diff_build</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> newtopology, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags, <a class="code" href="a00356.html">hwloc_topology_diff_t</a> *diff);</div>
135 <div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; </div>
136 <div class="line"><a name="l00198"></a><span class="lineno"><a class="line" href="a00231.html#gada4c1273ce020afaf02b649496f7edf5"> 198</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00231.html#gada4c1273ce020afaf02b649496f7edf5">hwloc_topology_diff_apply_flags_e</a> {</div>
137 <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <a class="code" href="a00231.html#ggada4c1273ce020afaf02b649496f7edf5a821a160512d67ea0dd05dab873d2fc54">HWLOC_TOPOLOGY_DIFF_APPLY_REVERSE</a> = (1UL&lt;&lt;0)</div>
138 <div class="line"><a name="l00203"></a><span class="lineno"><a class="line" href="a00231.html#ggada4c1273ce020afaf02b649496f7edf5a821a160512d67ea0dd05dab873d2fc54"> 203</a></span>&#160;};</div>
139 <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; </div>
140 <div class="line"><a name="l00222"></a><span class="lineno"><a class="line" href="a00231.html#gae7b350d7e7478a4c6047b08aa6544f40"> 222</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00231.html#gae7b350d7e7478a4c6047b08aa6544f40">hwloc_topology_diff_apply</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00356.html">hwloc_topology_diff_t</a> diff, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
141 <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; </div>
142 <div class="line"><a name="l00226"></a><span class="lineno"><a class="line" href="a00231.html#ga5dcff18f80583ac6505a94ba2877fd1b"> 226</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00231.html#ga5dcff18f80583ac6505a94ba2877fd1b">hwloc_topology_diff_destroy</a>(<a class="code" href="a00356.html">hwloc_topology_diff_t</a> diff);</div>
143 <div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; </div>
144 <div class="line"><a name="l00239"></a><span class="lineno"><a class="line" href="a00231.html#ga2cd902ce8766e90d4f2523a8e87640e9"> 239</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00231.html#ga2cd902ce8766e90d4f2523a8e87640e9">hwloc_topology_diff_load_xml</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *xmlpath, <a class="code" href="a00356.html">hwloc_topology_diff_t</a> *diff, <span class="keywordtype">char</span> **refname);</div>
145 <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; </div>
146 <div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="a00231.html#ga8a14dd7d01efbdd97af7fe85e8b84b20"> 250</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00231.html#ga8a14dd7d01efbdd97af7fe85e8b84b20">hwloc_topology_diff_export_xml</a>(<a class="code" href="a00356.html">hwloc_topology_diff_t</a> diff, <span class="keyword">const</span> <span class="keywordtype">char</span> *refname, <span class="keyword">const</span> <span class="keywordtype">char</span> *xmlpath);</div>
147 <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; </div>
148 <div class="line"><a name="l00263"></a><span class="lineno"><a class="line" href="a00231.html#gad693810a5c51628529b9dd56f040fb81"> 263</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00231.html#gad693810a5c51628529b9dd56f040fb81">hwloc_topology_diff_load_xmlbuffer</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *xmlbuffer, <span class="keywordtype">int</span> buflen, <a class="code" href="a00356.html">hwloc_topology_diff_t</a> *diff, <span class="keywordtype">char</span> **refname);</div>
149 <div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; </div>
150 <div class="line"><a name="l00279"></a><span class="lineno"><a class="line" href="a00231.html#gaa2f0918df60c1c4a0bef9411f7d92a13"> 279</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00231.html#gaa2f0918df60c1c4a0bef9411f7d92a13">hwloc_topology_diff_export_xmlbuffer</a>(<a class="code" href="a00356.html">hwloc_topology_diff_t</a> diff, <span class="keyword">const</span> <span class="keywordtype">char</span> *refname, <span class="keywordtype">char</span> **xmlbuffer, <span class="keywordtype">int</span> *buflen);</div>
151 <div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; </div>
152 <div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
153 <div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
154 <div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;<span class="preprocessor">#endif</span></div>
155 <div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; </div>
156 <div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; </div>
157 <div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_DIFF_H */</span><span class="preprocessor"></span></div>
158 <div class="ttc" id="aa00192_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
159 <div class="ttc" id="aa00231_html_ga1bd6363f26f7961f83153aaa484a9b85"><div class="ttname"><a href="a00231.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a></div><div class="ttdeci">union hwloc_topology_diff_u * hwloc_topology_diff_t</div><div class="ttdoc">One element of a difference list between two topologies.</div></div>
160 <div class="ttc" id="aa00231_html_ga2cd902ce8766e90d4f2523a8e87640e9"><div class="ttname"><a href="a00231.html#ga2cd902ce8766e90d4f2523a8e87640e9">hwloc_topology_diff_load_xml</a></div><div class="ttdeci">int hwloc_topology_diff_load_xml(const char *xmlpath, hwloc_topology_diff_t *diff, char **refname)</div><div class="ttdoc">Load a list of topology differences from a XML file.</div></div>
161 <div class="ttc" id="aa00231_html_ga38b28b7423b85a3321e6d0062d5f83d0"><div class="ttname"><a href="a00231.html#ga38b28b7423b85a3321e6d0062d5f83d0">hwloc_topology_diff_type_e</a></div><div class="ttdeci">hwloc_topology_diff_type_e</div><div class="ttdoc">Type of one element of a difference list.</div><div class="ttdef"><b>Definition:</b> diff.h:111</div></div>
162 <div class="ttc" id="aa00231_html_ga5dcff18f80583ac6505a94ba2877fd1b"><div class="ttname"><a href="a00231.html#ga5dcff18f80583ac6505a94ba2877fd1b">hwloc_topology_diff_destroy</a></div><div class="ttdeci">int hwloc_topology_diff_destroy(hwloc_topology_diff_t diff)</div><div class="ttdoc">Destroy a list of topology differences.</div></div>
163 <div class="ttc" id="aa00231_html_ga74a3fefbaa17582fea86d76b312d6254"><div class="ttname"><a href="a00231.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a></div><div class="ttdeci">enum hwloc_topology_diff_obj_attr_type_e hwloc_topology_diff_obj_attr_type_t</div><div class="ttdoc">Type of one object attribute difference.</div></div>
164 <div class="ttc" id="aa00231_html_ga8470f631b7365c839d3e40d38c5b6291"><div class="ttname"><a href="a00231.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a></div><div class="ttdeci">enum hwloc_topology_diff_type_e hwloc_topology_diff_type_t</div><div class="ttdoc">Type of one element of a difference list.</div></div>
165 <div class="ttc" id="aa00231_html_ga86f044210b0a9e9fa83acbdbbf7e05fd"><div class="ttname"><a href="a00231.html#ga86f044210b0a9e9fa83acbdbbf7e05fd">hwloc_topology_diff_obj_attr_type_e</a></div><div class="ttdeci">hwloc_topology_diff_obj_attr_type_e</div><div class="ttdoc">Type of one object attribute difference.</div><div class="ttdef"><b>Definition:</b> diff.h:62</div></div>
166 <div class="ttc" id="aa00231_html_ga8a14dd7d01efbdd97af7fe85e8b84b20"><div class="ttname"><a href="a00231.html#ga8a14dd7d01efbdd97af7fe85e8b84b20">hwloc_topology_diff_export_xml</a></div><div class="ttdeci">int hwloc_topology_diff_export_xml(hwloc_topology_diff_t diff, const char *refname, const char *xmlpath)</div><div class="ttdoc">Export a list of topology differences to a XML file.</div></div>
167 <div class="ttc" id="aa00231_html_ga8a1754f69fbb31364ea3ea2c39827c9f"><div class="ttname"><a href="a00231.html#ga8a1754f69fbb31364ea3ea2c39827c9f">hwloc_topology_diff_build</a></div><div class="ttdeci">int hwloc_topology_diff_build(hwloc_topology_t topology, hwloc_topology_t newtopology, unsigned long flags, hwloc_topology_diff_t *diff)</div><div class="ttdoc">Compute the difference between 2 topologies.</div></div>
168 <div class="ttc" id="aa00231_html_gaa2f0918df60c1c4a0bef9411f7d92a13"><div class="ttname"><a href="a00231.html#gaa2f0918df60c1c4a0bef9411f7d92a13">hwloc_topology_diff_export_xmlbuffer</a></div><div class="ttdeci">int hwloc_topology_diff_export_xmlbuffer(hwloc_topology_diff_t diff, const char *refname, char **xmlbuffer, int *buflen)</div><div class="ttdoc">Export a list of topology differences to a XML buffer.</div></div>
169 <div class="ttc" id="aa00231_html_gad693810a5c51628529b9dd56f040fb81"><div class="ttname"><a href="a00231.html#gad693810a5c51628529b9dd56f040fb81">hwloc_topology_diff_load_xmlbuffer</a></div><div class="ttdeci">int hwloc_topology_diff_load_xmlbuffer(const char *xmlbuffer, int buflen, hwloc_topology_diff_t *diff, char **refname)</div><div class="ttdoc">Load a list of topology differences from a XML buffer.</div></div>
170 <div class="ttc" id="aa00231_html_gada4c1273ce020afaf02b649496f7edf5"><div class="ttname"><a href="a00231.html#gada4c1273ce020afaf02b649496f7edf5">hwloc_topology_diff_apply_flags_e</a></div><div class="ttdeci">hwloc_topology_diff_apply_flags_e</div><div class="ttdoc">Flags to be given to hwloc_topology_diff_apply().</div><div class="ttdef"><b>Definition:</b> diff.h:198</div></div>
171 <div class="ttc" id="aa00231_html_gae7b350d7e7478a4c6047b08aa6544f40"><div class="ttname"><a href="a00231.html#gae7b350d7e7478a4c6047b08aa6544f40">hwloc_topology_diff_apply</a></div><div class="ttdeci">int hwloc_topology_diff_apply(hwloc_topology_t topology, hwloc_topology_diff_t diff, unsigned long flags)</div><div class="ttdoc">Apply a topology diff to an existing topology.</div></div>
172 <div class="ttc" id="aa00231_html_gga38b28b7423b85a3321e6d0062d5f83d0a3dc01fdeff355efe3fb2516bb454a147"><div class="ttname"><a href="a00231.html#gga38b28b7423b85a3321e6d0062d5f83d0a3dc01fdeff355efe3fb2516bb454a147">HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX</div><div class="ttdoc">The difference is too complex, it cannot be represented. The difference below this object has not bee...</div><div class="ttdef"><b>Definition:</b> diff.h:124</div></div>
173 <div class="ttc" id="aa00231_html_gga38b28b7423b85a3321e6d0062d5f83d0accbcaee230f79989debb284c8626f0c0"><div class="ttname"><a href="a00231.html#gga38b28b7423b85a3321e6d0062d5f83d0accbcaee230f79989debb284c8626f0c0">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_DIFF_OBJ_ATTR</div><div class="ttdoc">An object attribute was changed. The union is a hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s...</div><div class="ttdef"><b>Definition:</b> diff.h:115</div></div>
174 <div class="ttc" id="aa00231_html_gga86f044210b0a9e9fa83acbdbbf7e05fda63430bf932434bc456282f636d39c2c2"><div class="ttname"><a href="a00231.html#gga86f044210b0a9e9fa83acbdbbf7e05fda63430bf932434bc456282f636d39c2c2">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_INFO</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_INFO</div><div class="ttdoc">the value of an info attribute is modified. The union is a hwloc_topology_diff_obj_attr_u::hwloc_topo...</div><div class="ttdef"><b>Definition:</b> diff.h:78</div></div>
175 <div class="ttc" id="aa00231_html_gga86f044210b0a9e9fa83acbdbbf7e05fda94a8f37c51d62d15ac6192665dd49310"><div class="ttname"><a href="a00231.html#gga86f044210b0a9e9fa83acbdbbf7e05fda94a8f37c51d62d15ac6192665dd49310">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_NAME</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_NAME</div><div class="ttdoc">The object name is modified. The union is a hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_a...</div><div class="ttdef"><b>Definition:</b> diff.h:74</div></div>
176 <div class="ttc" id="aa00231_html_gga86f044210b0a9e9fa83acbdbbf7e05fdabc7f0c7ed0b6864e902f4b70f2c7bc94"><div class="ttname"><a href="a00231.html#gga86f044210b0a9e9fa83acbdbbf7e05fdabc7f0c7ed0b6864e902f4b70f2c7bc94">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_SIZE</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_SIZE</div><div class="ttdoc">The object local memory is modified. The union is a hwloc_topology_diff_obj_attr_u::hwloc_topology_di...</div><div class="ttdef"><b>Definition:</b> diff.h:67</div></div>
177 <div class="ttc" id="aa00231_html_ggada4c1273ce020afaf02b649496f7edf5a821a160512d67ea0dd05dab873d2fc54"><div class="ttname"><a href="a00231.html#ggada4c1273ce020afaf02b649496f7edf5a821a160512d67ea0dd05dab873d2fc54">HWLOC_TOPOLOGY_DIFF_APPLY_REVERSE</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_DIFF_APPLY_REVERSE</div><div class="ttdoc">Apply topology diff in reverse direction.</div><div class="ttdef"><b>Definition:</b> diff.h:202</div></div>
178 <div class="ttc" id="aa00340_html"><div class="ttname"><a href="a00340.html">hwloc_topology_diff_obj_attr_u</a></div><div class="ttdoc">One object attribute difference.</div><div class="ttdef"><b>Definition:</b> diff.h:83</div></div>
179 <div class="ttc" id="aa00340_html_a42fa15c37f1f59ef638066c4c62c3154"><div class="ttname"><a href="a00340.html#a42fa15c37f1f59ef638066c4c62c3154">hwloc_topology_diff_obj_attr_u::string</a></div><div class="ttdeci">struct hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s string</div></div>
180 <div class="ttc" id="aa00340_html_a4608ade88460f5f208887775e5a69a0a"><div class="ttname"><a href="a00340.html#a4608ade88460f5f208887775e5a69a0a">hwloc_topology_diff_obj_attr_u::uint64</a></div><div class="ttdeci">struct hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s uint64</div></div>
181 <div class="ttc" id="aa00344_html"><div class="ttname"><a href="a00344.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s</a></div><div class="ttdef"><b>Definition:</b> diff.h:84</div></div>
182 <div class="ttc" id="aa00344_html_a43f8133b7c30129b002c2d295e6580fc"><div class="ttname"><a href="a00344.html#a43f8133b7c30129b002c2d295e6580fc">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s::type</a></div><div class="ttdeci">hwloc_topology_diff_obj_attr_type_t type</div><div class="ttdef"><b>Definition:</b> diff.h:86</div></div>
183 <div class="ttc" id="aa00348_html"><div class="ttname"><a href="a00348.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a></div><div class="ttdoc">Integer attribute modification with an optional index.</div><div class="ttdef"><b>Definition:</b> diff.h:90</div></div>
184 <div class="ttc" id="aa00348_html_a44c0894dce563335d347fde6595c49c9"><div class="ttname"><a href="a00348.html#a44c0894dce563335d347fde6595c49c9">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s::oldvalue</a></div><div class="ttdeci">hwloc_uint64_t oldvalue</div><div class="ttdef"><b>Definition:</b> diff.h:94</div></div>
185 <div class="ttc" id="aa00348_html_adb772c3f1761ecadf496c80ae14afce3"><div class="ttname"><a href="a00348.html#adb772c3f1761ecadf496c80ae14afce3">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s::index</a></div><div class="ttdeci">hwloc_uint64_t index</div><div class="ttdef"><b>Definition:</b> diff.h:93</div></div>
186 <div class="ttc" id="aa00348_html_ae63aa59ad65aa783b730a4f213304eb4"><div class="ttname"><a href="a00348.html#ae63aa59ad65aa783b730a4f213304eb4">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s::newvalue</a></div><div class="ttdeci">hwloc_uint64_t newvalue</div><div class="ttdef"><b>Definition:</b> diff.h:95</div></div>
187 <div class="ttc" id="aa00348_html_afe262b9aa558fe7bfecbd37a7a129197"><div class="ttname"><a href="a00348.html#afe262b9aa558fe7bfecbd37a7a129197">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s::type</a></div><div class="ttdeci">hwloc_topology_diff_obj_attr_type_t type</div><div class="ttdef"><b>Definition:</b> diff.h:92</div></div>
188 <div class="ttc" id="aa00352_html"><div class="ttname"><a href="a00352.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a></div><div class="ttdoc">String attribute modification with an optional name.</div><div class="ttdef"><b>Definition:</b> diff.h:99</div></div>
189 <div class="ttc" id="aa00352_html_a33cc281d4417129064295a6ae7b79818"><div class="ttname"><a href="a00352.html#a33cc281d4417129064295a6ae7b79818">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s::oldvalue</a></div><div class="ttdeci">char * oldvalue</div><div class="ttdef"><b>Definition:</b> diff.h:103</div></div>
190 <div class="ttc" id="aa00352_html_a75f37f4add21cece50fee2701c3b77db"><div class="ttname"><a href="a00352.html#a75f37f4add21cece50fee2701c3b77db">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s::newvalue</a></div><div class="ttdeci">char * newvalue</div><div class="ttdef"><b>Definition:</b> diff.h:104</div></div>
191 <div class="ttc" id="aa00352_html_a784ab5827c1bf531b86d1f02f199d04d"><div class="ttname"><a href="a00352.html#a784ab5827c1bf531b86d1f02f199d04d">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s::type</a></div><div class="ttdeci">hwloc_topology_diff_obj_attr_type_t type</div><div class="ttdef"><b>Definition:</b> diff.h:101</div></div>
192 <div class="ttc" id="aa00352_html_a7ef48c66ccddf34d90edb4e4314b41c6"><div class="ttname"><a href="a00352.html#a7ef48c66ccddf34d90edb4e4314b41c6">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s::name</a></div><div class="ttdeci">char * name</div><div class="ttdef"><b>Definition:</b> diff.h:102</div></div>
193 <div class="ttc" id="aa00356_html"><div class="ttname"><a href="a00356.html">hwloc_topology_diff_u</a></div><div class="ttdoc">One element of a difference list between two topologies.</div><div class="ttdef"><b>Definition:</b> diff.h:129</div></div>
194 <div class="ttc" id="aa00360_html"><div class="ttname"><a href="a00360.html">hwloc_topology_diff_u::hwloc_topology_diff_generic_s</a></div><div class="ttdef"><b>Definition:</b> diff.h:130</div></div>
195 <div class="ttc" id="aa00360_html_a373005489fcddeba6319163e60263ae8"><div class="ttname"><a href="a00360.html#a373005489fcddeba6319163e60263ae8">hwloc_topology_diff_u::hwloc_topology_diff_generic_s::type</a></div><div class="ttdeci">hwloc_topology_diff_type_t type</div><div class="ttdef"><b>Definition:</b> diff.h:132</div></div>
196 <div class="ttc" id="aa00360_html_a720aa94eb73cddfd8d6bf9fcbbfc035e"><div class="ttname"><a href="a00360.html#a720aa94eb73cddfd8d6bf9fcbbfc035e">hwloc_topology_diff_u::hwloc_topology_diff_generic_s::next</a></div><div class="ttdeci">union hwloc_topology_diff_u * next</div><div class="ttdef"><b>Definition:</b> diff.h:133</div></div>
197 <div class="ttc" id="aa00364_html"><div class="ttname"><a href="a00364.html">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a></div><div class="ttdef"><b>Definition:</b> diff.h:137</div></div>
198 <div class="ttc" id="aa00364_html_a70a118ad288bd98f18c8ce6dc52e2d10"><div class="ttname"><a href="a00364.html#a70a118ad288bd98f18c8ce6dc52e2d10">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s::type</a></div><div class="ttdeci">hwloc_topology_diff_type_t type</div><div class="ttdef"><b>Definition:</b> diff.h:138</div></div>
199 <div class="ttc" id="aa00364_html_a82c1d4bab80b9e0bf301a9d8291893e0"><div class="ttname"><a href="a00364.html#a82c1d4bab80b9e0bf301a9d8291893e0">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s::obj_depth</a></div><div class="ttdeci">int obj_depth</div><div class="ttdef"><b>Definition:</b> diff.h:141</div></div>
200 <div class="ttc" id="aa00364_html_acb9170a8eb3392656d70f7f3ef3e3eed"><div class="ttname"><a href="a00364.html#acb9170a8eb3392656d70f7f3ef3e3eed">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s::next</a></div><div class="ttdeci">union hwloc_topology_diff_u * next</div><div class="ttdef"><b>Definition:</b> diff.h:139</div></div>
201 <div class="ttc" id="aa00368_html"><div class="ttname"><a href="a00368.html">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a></div><div class="ttdef"><b>Definition:</b> diff.h:147</div></div>
202 <div class="ttc" id="aa00368_html_a375afbaa043b109be689a7d9a3c7d153"><div class="ttname"><a href="a00368.html#a375afbaa043b109be689a7d9a3c7d153">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s::next</a></div><div class="ttdeci">union hwloc_topology_diff_u * next</div><div class="ttdef"><b>Definition:</b> diff.h:149</div></div>
203 <div class="ttc" id="aa00368_html_a6dc6b3c4adb10db74d993e37afaa0580"><div class="ttname"><a href="a00368.html#a6dc6b3c4adb10db74d993e37afaa0580">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s::obj_index</a></div><div class="ttdeci">unsigned obj_index</div><div class="ttdef"><b>Definition:</b> diff.h:152</div></div>
204 <div class="ttc" id="aa00368_html_a92084295a4d6faf17a95a7eea526ddbd"><div class="ttname"><a href="a00368.html#a92084295a4d6faf17a95a7eea526ddbd">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s::type</a></div><div class="ttdeci">hwloc_topology_diff_type_t type</div><div class="ttdef"><b>Definition:</b> diff.h:148</div></div>
205 <div class="ttc" id="aa00368_html_a94c6498caeaafbb79927395d918d6cb3"><div class="ttname"><a href="a00368.html#a94c6498caeaafbb79927395d918d6cb3">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s::obj_depth</a></div><div class="ttdeci">int obj_depth</div><div class="ttdef"><b>Definition:</b> diff.h:151</div></div>
50 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2009 CNRS</span></div>
51 <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * Copyright © 2009-2021 Inria. All rights reserved.</span></div>
52 <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Copyright © 2009-2010 Université Bordeaux</span></div>
53 <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.</span></div>
54 <div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
55 <div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> */</span></div>
56 <div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160; </div>
57 <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#ifndef HWLOC_OPENFABRICS_VERBS_H</span></div>
58 <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#define HWLOC_OPENFABRICS_VERBS_H</span></div>
59 <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
60 <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &quot;hwloc.h&quot;</span></div>
61 <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;hwloc/autogen/config.h&quot;</span></div>
62 <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#ifdef HWLOC_LINUX_SYS</span></div>
63 <div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &quot;hwloc/linux.h&quot;</span></div>
64 <div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#endif</span></div>
65 <div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
66 <div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#include &lt;infiniband/verbs.h&gt;</span></div>
67 <div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
68 <div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160; </div>
69 <div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
70 <div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
71 <div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#endif</span></div>
72 <div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; </div>
73 <div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; </div>
74 <div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
75 <div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="a00236.html#ga3ea0d838c1e7f1671b35687aae2da6ae"> 62</a></span>&#160;<a class="code" href="a00236.html#ga3ea0d838c1e7f1671b35687aae2da6ae">hwloc_ibv_get_device_cpuset</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology __hwloc_attribute_unused,</div>
76 <div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keyword">struct</span> ibv_device *ibdev, <a class="code" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</div>
77 <div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;{</div>
78 <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="preprocessor">#ifdef HWLOC_LINUX_SYS</span></div>
79 <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="comment">/* If we&#39;re on Linux, use the verbs-provided sysfs mechanism to</span></div>
80 <div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="comment"> get the local cpus */</span></div>
81 <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="preprocessor">#define HWLOC_OPENFABRICS_VERBS_SYSFS_PATH_MAX 128</span></div>
82 <div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordtype">char</span> path[HWLOC_OPENFABRICS_VERBS_SYSFS_PATH_MAX];</div>
83 <div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; </div>
84 <div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00202.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a>(topology)) {</div>
85 <div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; errno = EINVAL;</div>
86 <div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">return</span> -1;</div>
87 <div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; }</div>
88 <div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; </div>
89 <div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; sprintf(path, <span class="stringliteral">&quot;/sys/class/infiniband/%s/device/local_cpus&quot;</span>,</div>
90 <div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; ibv_get_device_name(ibdev));</div>
91 <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00224.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a>(path, set) &lt; 0</div>
92 <div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; || <a class="code" href="a00214.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a>(set))</div>
93 <div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <a class="code" href="a00214.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00211.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
94 <div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="preprocessor">#else</span></div>
95 <div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="comment">/* Non-Linux systems simply get a full cpuset */</span></div>
96 <div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <a class="code" href="a00214.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a>(set, <a class="code" href="a00211.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a>(topology));</div>
97 <div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="preprocessor">#endif</span></div>
98 <div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordflow">return</span> 0;</div>
99 <div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;}</div>
100 <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; </div>
101 <div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
102 <div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="a00236.html#ga31d794567f4420bbdc8baa7bf8bf6138"> 106</a></span>&#160;<a class="code" href="a00236.html#ga31d794567f4420bbdc8baa7bf8bf6138">hwloc_ibv_get_device_osdev_by_name</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
103 <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> *ibname)</div>
104 <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;{</div>
105 <div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> osdev = NULL;</div>
106 <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <span class="keywordflow">while</span> ((osdev = <a class="code" href="a00213.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a>(topology, osdev)) != NULL) {</div>
107 <div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0a52157d03694fdae82dddd57ca8c973b6">HWLOC_OBJ_OSDEV_OPENFABRICS</a> == osdev-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a>.<a class="code" href="a00294.html#a31e019e27e54ac6138d04be639bb96f9">type</a></div>
108 <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; &amp;&amp; osdev-&gt;<a class="code" href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">name</a> &amp;&amp; !strcmp(ibname, osdev-&gt;<a class="code" href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">name</a>))</div>
109 <div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">return</span> osdev;</div>
110 <div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; }</div>
111 <div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">return</span> NULL;</div>
112 <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;}</div>
113 <div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; </div>
114 <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;<span class="keyword">static</span> __hwloc_inline <a class="code" href="a00250.html">hwloc_obj_t</a></div>
115 <div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="a00236.html#ga7324cdfd5db6ed2669c051ef7e1b64e1"> 134</a></span>&#160;<a class="code" href="a00236.html#ga7324cdfd5db6ed2669c051ef7e1b64e1">hwloc_ibv_get_device_osdev</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
116 <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keyword">struct</span> ibv_device *ibdev)</div>
117 <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;{</div>
118 <div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="a00202.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a>(topology)) {</div>
119 <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; errno = EINVAL;</div>
120 <div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">return</span> NULL;</div>
121 <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; }</div>
122 <div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <span class="keywordflow">return</span> <a class="code" href="a00236.html#ga31d794567f4420bbdc8baa7bf8bf6138">hwloc_ibv_get_device_osdev_by_name</a>(topology, ibv_get_device_name(ibdev));</div>
123 <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;}</div>
124 <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; </div>
125 <div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
126 <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
127 <div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160;<span class="preprocessor">#endif</span></div>
128 <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; </div>
129 <div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; </div>
130 <div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_OPENFABRICS_VERBS_H */</span><span class="preprocessor"></span></div>
131 <div class="ttc" id="aa00192_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
132 <div class="ttc" id="aa00193_html_gga64f5d539df299c97ae80ce53fc4b56c0a52157d03694fdae82dddd57ca8c973b6"><div class="ttname"><a href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0a52157d03694fdae82dddd57ca8c973b6">HWLOC_OBJ_OSDEV_OPENFABRICS</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_OPENFABRICS</div><div class="ttdoc">Operating system openfabrics device. For instance the &quot;mlx4_0&quot; InfiniBand HCA, or &quot;hfi1_0&quot; Omni-Path ...</div><div class="ttdef"><b>Definition:</b> hwloc.h:347</div></div>
133 <div class="ttc" id="aa00195_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
134 <div class="ttc" id="aa00202_html_ga68ffdcfd9175cdf40709801092f18017"><div class="ttname"><a href="a00202.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a></div><div class="ttdeci">int hwloc_topology_is_thissystem(hwloc_topology_t restrict topology)</div><div class="ttdoc">Does the topology context come from this system?</div></div>
135 <div class="ttc" id="aa00211_html_gaee30e03391c1ed7dfd617fb5c7bbb033"><div class="ttname"><a href="a00211.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a></div><div class="ttdeci">hwloc_const_cpuset_t hwloc_topology_get_complete_cpuset(hwloc_topology_t topology)</div><div class="ttdoc">Get complete CPU set.</div></div>
136 <div class="ttc" id="aa00213_html_ga8b4584c8949e2c5f1c97ba7fe92b8145"><div class="ttname"><a href="a00213.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_next_osdev(hwloc_topology_t topology, hwloc_obj_t prev)</div><div class="ttdoc">Get the next OS device in the system.</div><div class="ttdef"><b>Definition:</b> helper.h:1194</div></div>
137 <div class="ttc" id="aa00214_html_ga5b64be28f5a7176ed8ad0d6a90bdf108"><div class="ttname"><a href="a00214.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a></div><div class="ttdeci">int hwloc_bitmap_iszero(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Test whether bitmap bitmap is empty.</div></div>
138 <div class="ttc" id="aa00214_html_ga72a29824798b48784b8217471ec8f14c"><div class="ttname"><a href="a00214.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a></div><div class="ttdeci">int hwloc_bitmap_copy(hwloc_bitmap_t dst, hwloc_const_bitmap_t src)</div><div class="ttdoc">Copy the contents of bitmap src into the already allocated bitmap dst.</div></div>
139 <div class="ttc" id="aa00224_html_gaf72d83e273803226ce772973e37b85de"><div class="ttname"><a href="a00224.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a></div><div class="ttdeci">int hwloc_linux_read_path_as_cpumask(const char *path, hwloc_bitmap_t set)</div><div class="ttdoc">Convert a linux kernel cpumask file path into a hwloc bitmap set.</div></div>
140 <div class="ttc" id="aa00236_html_ga31d794567f4420bbdc8baa7bf8bf6138"><div class="ttname"><a href="a00236.html#ga31d794567f4420bbdc8baa7bf8bf6138">hwloc_ibv_get_device_osdev_by_name</a></div><div class="ttdeci">static hwloc_obj_t hwloc_ibv_get_device_osdev_by_name(hwloc_topology_t topology, const char *ibname)</div><div class="ttdoc">Get the hwloc OS device object corresponding to the OpenFabrics device named ibname.</div><div class="ttdef"><b>Definition:</b> openfabrics-verbs.h:106</div></div>
141 <div class="ttc" id="aa00236_html_ga3ea0d838c1e7f1671b35687aae2da6ae"><div class="ttname"><a href="a00236.html#ga3ea0d838c1e7f1671b35687aae2da6ae">hwloc_ibv_get_device_cpuset</a></div><div class="ttdeci">static int hwloc_ibv_get_device_cpuset(hwloc_topology_t topology, struct ibv_device *ibdev, hwloc_cpuset_t set)</div><div class="ttdoc">Get the CPU set of processors that are physically close to device ibdev.</div><div class="ttdef"><b>Definition:</b> openfabrics-verbs.h:62</div></div>
142 <div class="ttc" id="aa00236_html_ga7324cdfd5db6ed2669c051ef7e1b64e1"><div class="ttname"><a href="a00236.html#ga7324cdfd5db6ed2669c051ef7e1b64e1">hwloc_ibv_get_device_osdev</a></div><div class="ttdeci">static hwloc_obj_t hwloc_ibv_get_device_osdev(hwloc_topology_t topology, struct ibv_device *ibdev)</div><div class="ttdoc">Get the hwloc OS device object corresponding to the OpenFabrics device ibdev.</div><div class="ttdef"><b>Definition:</b> openfabrics-verbs.h:134</div></div>
143 <div class="ttc" id="aa00250_html"><div class="ttname"><a href="a00250.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:395</div></div>
144 <div class="ttc" id="aa00250_html_abb709ec38f2970677e4e57d1d30be96d"><div class="ttname"><a href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">hwloc_obj::name</a></div><div class="ttdeci">char * name</div><div class="ttdoc">Object-specific name if any. Mostly used for identifying OS devices and Misc objects where a name str...</div><div class="ttdef"><b>Definition:</b> hwloc.h:407</div></div>
145 <div class="ttc" id="aa00250_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:414</div></div>
146 <div class="ttc" id="aa00254_html_aaf7a5c38b5185703ff18c46ad2761dcf"><div class="ttname"><a href="a00254.html#aaf7a5c38b5185703ff18c46ad2761dcf">hwloc_obj_attr_u::osdev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_osdev_attr_s osdev</div></div>
147 <div class="ttc" id="aa00294_html_a31e019e27e54ac6138d04be639bb96f9"><div class="ttname"><a href="a00294.html#a31e019e27e54ac6138d04be639bb96f9">hwloc_obj_attr_u::hwloc_osdev_attr_s::type</a></div><div class="ttdeci">hwloc_obj_osdev_type_t type</div><div class="ttdef"><b>Definition:</b> hwloc.h:665</div></div>
206148 </div><!-- fragment --></div><!-- contents -->
207149 <!-- start footer part -->
208150 <hr class="footer"/><address class="footer"><small>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): shmem.h Source File</title>
7 <title>Hardware Locality (hwloc): diff.h Source File</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4343 </div><!-- top -->
4444 <div class="header">
4545 <div class="headertitle">
46 <div class="title">shmem.h</div> </div>
46 <div class="title">diff.h</div> </div>
4747 </div><!--header-->
4848 <div class="contents">
4949 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
50 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2013-2018 Inria. All rights reserved.</span></div>
50 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2013-2020 Inria. All rights reserved.</span></div>
5151 <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
5252 <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> */</span></div>
5353 <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; </div>
54 <div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#ifndef HWLOC_SHMEM_H</span></div>
55 <div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#define HWLOC_SHMEM_H</span></div>
54 <div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#ifndef HWLOC_DIFF_H</span></div>
55 <div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#define HWLOC_DIFF_H</span></div>
5656 <div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160; </div>
57 <div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &quot;hwloc.h&quot;</span></div>
58 <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; </div>
59 <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
60 <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
61 <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#elif 0</span></div>
62 <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;}</div>
63 <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#endif</span></div>
64 <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; </div>
65 <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
66 <div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="a00232.html#ga772ab52750cdd0eec85128df24888001"> 53</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00232.html#ga772ab52750cdd0eec85128df24888001">hwloc_shmem_topology_get_length</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
67 <div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordtype">size_t</span> *lengthp,</div>
68 <div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
69 <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; </div>
70 <div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="a00232.html#ga61b20e346fc76f76420e3a88cc80a671"> 82</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00232.html#ga61b20e346fc76f76420e3a88cc80a671">hwloc_shmem_topology_write</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
71 <div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordtype">int</span> fd, hwloc_uint64_t fileoffset,</div>
72 <div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordtype">void</span> *mmap_address, <span class="keywordtype">size_t</span> length,</div>
73 <div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
74 <div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; </div>
75 <div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="a00232.html#ga21545bd0f09d9b554c8e60a630e0e629"> 125</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00232.html#ga21545bd0f09d9b554c8e60a630e0e629">hwloc_shmem_topology_adopt</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> *topologyp,</div>
76 <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordtype">int</span> fd, hwloc_uint64_t fileoffset,</div>
77 <div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordtype">void</span> *mmap_address, <span class="keywordtype">size_t</span> length,</div>
78 <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
79 <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
80 <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
81 <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;<span class="preprocessor">#endif</span></div>
57 <div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#ifndef HWLOC_H</span></div>
58 <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#error Please include the main hwloc.h instead</span></div>
59 <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#endif</span></div>
60 <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160; </div>
61 <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; </div>
62 <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
63 <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
64 <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#elif 0</span></div>
65 <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;}</div>
66 <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#endif</span></div>
67 <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
68 <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160; </div>
69 <div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="a00237.html#ga86f044210b0a9e9fa83acbdbbf7e05fd"> 62</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="a00237.html#ga86f044210b0a9e9fa83acbdbbf7e05fd">hwloc_topology_diff_obj_attr_type_e</a> {</div>
70 <div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="a00237.html#gga86f044210b0a9e9fa83acbdbbf7e05fdabc7f0c7ed0b6864e902f4b70f2c7bc94"> 67</a></span>&#160; <a class="code" href="a00237.html#gga86f044210b0a9e9fa83acbdbbf7e05fdabc7f0c7ed0b6864e902f4b70f2c7bc94">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_SIZE</a>,</div>
71 <div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; </div>
72 <div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="a00237.html#gga86f044210b0a9e9fa83acbdbbf7e05fda94a8f37c51d62d15ac6192665dd49310"> 74</a></span>&#160; <a class="code" href="a00237.html#gga86f044210b0a9e9fa83acbdbbf7e05fda94a8f37c51d62d15ac6192665dd49310">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_NAME</a>,</div>
73 <div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <a class="code" href="a00237.html#gga86f044210b0a9e9fa83acbdbbf7e05fda63430bf932434bc456282f636d39c2c2">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_INFO</a></div>
74 <div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="a00237.html#gga86f044210b0a9e9fa83acbdbbf7e05fda63430bf932434bc456282f636d39c2c2"> 79</a></span>&#160;} <a class="code" href="a00237.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a>;</div>
75 <div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; </div>
76 <div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="a00346.html"> 83</a></span>&#160;<span class="keyword">union </span><a class="code" href="a00346.html">hwloc_topology_diff_obj_attr_u</a> {</div>
77 <div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="a00350.html"> 84</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00350.html">hwloc_topology_diff_obj_attr_generic_s</a> {</div>
78 <div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="comment">/* each part of the union must start with these */</span></div>
79 <div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="a00350.html#a43f8133b7c30129b002c2d295e6580fc"> 86</a></span>&#160; <a class="code" href="a00237.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a> <a class="code" href="a00350.html#a43f8133b7c30129b002c2d295e6580fc">type</a>;</div>
80 <div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="a00346.html#aeb449c0e04b14ebf8c3126756b6364f9"> 87</a></span>&#160; } <span class="keyword">generic</span>;</div>
81 <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; </div>
82 <div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="a00354.html"> 90</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00354.html">hwloc_topology_diff_obj_attr_uint64_s</a> {</div>
83 <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="comment">/* used for storing integer attributes */</span></div>
84 <div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="a00354.html#afe262b9aa558fe7bfecbd37a7a129197"> 92</a></span>&#160; <a class="code" href="a00237.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a> <a class="code" href="a00354.html#afe262b9aa558fe7bfecbd37a7a129197">type</a>;</div>
85 <div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="a00354.html#adb772c3f1761ecadf496c80ae14afce3"> 93</a></span>&#160; hwloc_uint64_t <a class="code" href="a00354.html#adb772c3f1761ecadf496c80ae14afce3">index</a>; <span class="comment">/* not used for SIZE */</span></div>
86 <div class="line"><a name="l00094"></a><span class="lineno"><a class="line" href="a00354.html#a44c0894dce563335d347fde6595c49c9"> 94</a></span>&#160; hwloc_uint64_t <a class="code" href="a00354.html#a44c0894dce563335d347fde6595c49c9">oldvalue</a>;</div>
87 <div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="a00354.html#ae63aa59ad65aa783b730a4f213304eb4"> 95</a></span>&#160; hwloc_uint64_t <a class="code" href="a00354.html#ae63aa59ad65aa783b730a4f213304eb4">newvalue</a>;</div>
88 <div class="line"><a name="l00096"></a><span class="lineno"><a class="line" href="a00346.html#a4608ade88460f5f208887775e5a69a0a"> 96</a></span>&#160; } <a class="code" href="a00346.html#a4608ade88460f5f208887775e5a69a0a">uint64</a>;</div>
89 <div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; </div>
90 <div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="a00358.html"> 99</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00358.html">hwloc_topology_diff_obj_attr_string_s</a> {</div>
91 <div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="comment">/* used for storing name and info pairs */</span></div>
92 <div class="line"><a name="l00101"></a><span class="lineno"><a class="line" href="a00358.html#a784ab5827c1bf531b86d1f02f199d04d"> 101</a></span>&#160; <a class="code" href="a00237.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a> <a class="code" href="a00358.html#a784ab5827c1bf531b86d1f02f199d04d">type</a>;</div>
93 <div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="a00358.html#a7ef48c66ccddf34d90edb4e4314b41c6"> 102</a></span>&#160; <span class="keywordtype">char</span> *<a class="code" href="a00358.html#a7ef48c66ccddf34d90edb4e4314b41c6">name</a>; <span class="comment">/* not used for NAME */</span></div>
94 <div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="a00358.html#a33cc281d4417129064295a6ae7b79818"> 103</a></span>&#160; <span class="keywordtype">char</span> *<a class="code" href="a00358.html#a33cc281d4417129064295a6ae7b79818">oldvalue</a>;</div>
95 <div class="line"><a name="l00104"></a><span class="lineno"><a class="line" href="a00358.html#a75f37f4add21cece50fee2701c3b77db"> 104</a></span>&#160; <span class="keywordtype">char</span> *<a class="code" href="a00358.html#a75f37f4add21cece50fee2701c3b77db">newvalue</a>;</div>
96 <div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="a00346.html#a42fa15c37f1f59ef638066c4c62c3154"> 105</a></span>&#160; } <a class="code" href="a00346.html#a42fa15c37f1f59ef638066c4c62c3154">string</a>;</div>
97 <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;};</div>
98 <div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; </div>
99 <div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; </div>
100 <div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="a00237.html#ga38b28b7423b85a3321e6d0062d5f83d0"> 111</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="a00237.html#ga38b28b7423b85a3321e6d0062d5f83d0">hwloc_topology_diff_type_e</a> {</div>
101 <div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="a00237.html#gga38b28b7423b85a3321e6d0062d5f83d0accbcaee230f79989debb284c8626f0c0"> 115</a></span>&#160; <a class="code" href="a00237.html#gga38b28b7423b85a3321e6d0062d5f83d0accbcaee230f79989debb284c8626f0c0">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR</a>,</div>
102 <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; </div>
103 <div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <a class="code" href="a00237.html#gga38b28b7423b85a3321e6d0062d5f83d0a3dc01fdeff355efe3fb2516bb454a147">HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX</a></div>
104 <div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="a00237.html#gga38b28b7423b85a3321e6d0062d5f83d0a3dc01fdeff355efe3fb2516bb454a147"> 125</a></span>&#160;} <a class="code" href="a00237.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a>;</div>
105 <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; </div>
106 <div class="line"><a name="l00129"></a><span class="lineno"><a class="line" href="a00362.html"> 129</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">union </span><a class="code" href="a00362.html">hwloc_topology_diff_u</a> {</div>
107 <div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="a00366.html"> 130</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00366.html">hwloc_topology_diff_generic_s</a> {</div>
108 <div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="comment">/* each part of the union must start with these */</span></div>
109 <div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="a00366.html#a373005489fcddeba6319163e60263ae8"> 132</a></span>&#160; <a class="code" href="a00237.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a> <a class="code" href="a00366.html#a373005489fcddeba6319163e60263ae8">type</a>;</div>
110 <div class="line"><a name="l00133"></a><span class="lineno"><a class="line" href="a00366.html#a720aa94eb73cddfd8d6bf9fcbbfc035e"> 133</a></span>&#160; <span class="keyword">union </span><a class="code" href="a00362.html">hwloc_topology_diff_u</a> * <a class="code" href="a00366.html#a720aa94eb73cddfd8d6bf9fcbbfc035e">next</a>; <span class="comment">/* pointer to the next element of the list, or NULL */</span></div>
111 <div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="a00362.html#a0dd2cbfba0eca2fc7a2645668bcae0f8"> 134</a></span>&#160; } <span class="keyword">generic</span>;</div>
82112 <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; </div>
83 <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; </div>
84 <div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_SHMEM_H */</span><span class="preprocessor"></span></div>
85 <div class="ttc" id="aa00192_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
86 <div class="ttc" id="aa00232_html_ga21545bd0f09d9b554c8e60a630e0e629"><div class="ttname"><a href="a00232.html#ga21545bd0f09d9b554c8e60a630e0e629">hwloc_shmem_topology_adopt</a></div><div class="ttdeci">int hwloc_shmem_topology_adopt(hwloc_topology_t *topologyp, int fd, hwloc_uint64_t fileoffset, void *mmap_address, size_t length, unsigned long flags)</div><div class="ttdoc">Adopt a shared memory topology stored in a file.</div></div>
87 <div class="ttc" id="aa00232_html_ga61b20e346fc76f76420e3a88cc80a671"><div class="ttname"><a href="a00232.html#ga61b20e346fc76f76420e3a88cc80a671">hwloc_shmem_topology_write</a></div><div class="ttdeci">int hwloc_shmem_topology_write(hwloc_topology_t topology, int fd, hwloc_uint64_t fileoffset, void *mmap_address, size_t length, unsigned long flags)</div><div class="ttdoc">Duplicate a topology to a shared memory file.</div></div>
88 <div class="ttc" id="aa00232_html_ga772ab52750cdd0eec85128df24888001"><div class="ttname"><a href="a00232.html#ga772ab52750cdd0eec85128df24888001">hwloc_shmem_topology_get_length</a></div><div class="ttdeci">int hwloc_shmem_topology_get_length(hwloc_topology_t topology, size_t *lengthp, unsigned long flags)</div><div class="ttdoc">Get the required shared memory length for storing a topology.</div></div>
113 <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="comment">/* A difference in an object attribute. */</span></div>
114 <div class="line"><a name="l00137"></a><span class="lineno"><a class="line" href="a00370.html"> 137</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00370.html">hwloc_topology_diff_obj_attr_s</a> {</div>
115 <div class="line"><a name="l00138"></a><span class="lineno"><a class="line" href="a00370.html#a70a118ad288bd98f18c8ce6dc52e2d10"> 138</a></span>&#160; <a class="code" href="a00237.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a> <a class="code" href="a00370.html#a70a118ad288bd98f18c8ce6dc52e2d10">type</a>; <span class="comment">/* must be ::HWLOC_TOPOLOGY_DIFF_OBJ_ATTR */</span></div>
116 <div class="line"><a name="l00139"></a><span class="lineno"><a class="line" href="a00370.html#acb9170a8eb3392656d70f7f3ef3e3eed"> 139</a></span>&#160; <span class="keyword">union </span><a class="code" href="a00362.html">hwloc_topology_diff_u</a> * <a class="code" href="a00370.html#acb9170a8eb3392656d70f7f3ef3e3eed">next</a>;</div>
117 <div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="comment">/* List of attribute differences for a single object */</span></div>
118 <div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="a00370.html#a82c1d4bab80b9e0bf301a9d8291893e0"> 141</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="a00370.html#a82c1d4bab80b9e0bf301a9d8291893e0">obj_depth</a>;</div>
119 <div class="line"><a name="l00142"></a><span class="lineno"><a class="line" href="a00370.html#a91f0645f9062e892652357cd141c8ebb"> 142</a></span>&#160; <span class="keywordtype">unsigned</span> obj_index;</div>
120 <div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keyword">union </span><a class="code" href="a00346.html">hwloc_topology_diff_obj_attr_u</a> diff;</div>
121 <div class="line"><a name="l00144"></a><span class="lineno"><a class="line" href="a00362.html#a01dca644feea48448b36baa60cf4c07f"> 144</a></span>&#160; } obj_attr;</div>
122 <div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; </div>
123 <div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <span class="comment">/* A difference that is too complex. */</span></div>
124 <div class="line"><a name="l00147"></a><span class="lineno"><a class="line" href="a00374.html"> 147</a></span>&#160; <span class="keyword">struct </span><a class="code" href="a00374.html">hwloc_topology_diff_too_complex_s</a> {</div>
125 <div class="line"><a name="l00148"></a><span class="lineno"><a class="line" href="a00374.html#a92084295a4d6faf17a95a7eea526ddbd"> 148</a></span>&#160; <a class="code" href="a00237.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a> <a class="code" href="a00374.html#a92084295a4d6faf17a95a7eea526ddbd">type</a>; <span class="comment">/* must be ::HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX */</span></div>
126 <div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="a00374.html#a375afbaa043b109be689a7d9a3c7d153"> 149</a></span>&#160; <span class="keyword">union </span><a class="code" href="a00362.html">hwloc_topology_diff_u</a> * <a class="code" href="a00374.html#a375afbaa043b109be689a7d9a3c7d153">next</a>;</div>
127 <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="comment">/* Where we had to stop computing the diff in the first topology */</span></div>
128 <div class="line"><a name="l00151"></a><span class="lineno"><a class="line" href="a00374.html#a94c6498caeaafbb79927395d918d6cb3"> 151</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="a00374.html#a94c6498caeaafbb79927395d918d6cb3">obj_depth</a>;</div>
129 <div class="line"><a name="l00152"></a><span class="lineno"><a class="line" href="a00374.html#a6dc6b3c4adb10db74d993e37afaa0580"> 152</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00374.html#a6dc6b3c4adb10db74d993e37afaa0580">obj_index</a>;</div>
130 <div class="line"><a name="l00153"></a><span class="lineno"><a class="line" href="a00362.html#af7dc1148eb656c56e9678218cafd027b"> 153</a></span>&#160; } too_complex;</div>
131 <div class="line"><a name="l00154"></a><span class="lineno"><a class="line" href="a00237.html#ga1bd6363f26f7961f83153aaa484a9b85"> 154</a></span>&#160;} * <a class="code" href="a00237.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a>;</div>
132 <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; </div>
133 <div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; </div>
134 <div class="line"><a name="l00194"></a><span class="lineno"><a class="line" href="a00237.html#ga8a1754f69fbb31364ea3ea2c39827c9f"> 194</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00237.html#ga8a1754f69fbb31364ea3ea2c39827c9f">hwloc_topology_diff_build</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> newtopology, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags, <a class="code" href="a00362.html">hwloc_topology_diff_t</a> *diff);</div>
135 <div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; </div>
136 <div class="line"><a name="l00198"></a><span class="lineno"><a class="line" href="a00237.html#gada4c1273ce020afaf02b649496f7edf5"> 198</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00237.html#gada4c1273ce020afaf02b649496f7edf5">hwloc_topology_diff_apply_flags_e</a> {</div>
137 <div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <a class="code" href="a00237.html#ggada4c1273ce020afaf02b649496f7edf5a821a160512d67ea0dd05dab873d2fc54">HWLOC_TOPOLOGY_DIFF_APPLY_REVERSE</a> = (1UL&lt;&lt;0)</div>
138 <div class="line"><a name="l00203"></a><span class="lineno"><a class="line" href="a00237.html#ggada4c1273ce020afaf02b649496f7edf5a821a160512d67ea0dd05dab873d2fc54"> 203</a></span>&#160;};</div>
139 <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; </div>
140 <div class="line"><a name="l00222"></a><span class="lineno"><a class="line" href="a00237.html#gae7b350d7e7478a4c6047b08aa6544f40"> 222</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00237.html#gae7b350d7e7478a4c6047b08aa6544f40">hwloc_topology_diff_apply</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00362.html">hwloc_topology_diff_t</a> diff, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
141 <div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; </div>
142 <div class="line"><a name="l00226"></a><span class="lineno"><a class="line" href="a00237.html#ga5dcff18f80583ac6505a94ba2877fd1b"> 226</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00237.html#ga5dcff18f80583ac6505a94ba2877fd1b">hwloc_topology_diff_destroy</a>(<a class="code" href="a00362.html">hwloc_topology_diff_t</a> diff);</div>
143 <div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; </div>
144 <div class="line"><a name="l00239"></a><span class="lineno"><a class="line" href="a00237.html#ga2cd902ce8766e90d4f2523a8e87640e9"> 239</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00237.html#ga2cd902ce8766e90d4f2523a8e87640e9">hwloc_topology_diff_load_xml</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *xmlpath, <a class="code" href="a00362.html">hwloc_topology_diff_t</a> *diff, <span class="keywordtype">char</span> **refname);</div>
145 <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; </div>
146 <div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="a00237.html#ga8a14dd7d01efbdd97af7fe85e8b84b20"> 250</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00237.html#ga8a14dd7d01efbdd97af7fe85e8b84b20">hwloc_topology_diff_export_xml</a>(<a class="code" href="a00362.html">hwloc_topology_diff_t</a> diff, <span class="keyword">const</span> <span class="keywordtype">char</span> *refname, <span class="keyword">const</span> <span class="keywordtype">char</span> *xmlpath);</div>
147 <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; </div>
148 <div class="line"><a name="l00263"></a><span class="lineno"><a class="line" href="a00237.html#gad693810a5c51628529b9dd56f040fb81"> 263</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00237.html#gad693810a5c51628529b9dd56f040fb81">hwloc_topology_diff_load_xmlbuffer</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *xmlbuffer, <span class="keywordtype">int</span> buflen, <a class="code" href="a00362.html">hwloc_topology_diff_t</a> *diff, <span class="keywordtype">char</span> **refname);</div>
149 <div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; </div>
150 <div class="line"><a name="l00279"></a><span class="lineno"><a class="line" href="a00237.html#gaa2f0918df60c1c4a0bef9411f7d92a13"> 279</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00237.html#gaa2f0918df60c1c4a0bef9411f7d92a13">hwloc_topology_diff_export_xmlbuffer</a>(<a class="code" href="a00362.html">hwloc_topology_diff_t</a> diff, <span class="keyword">const</span> <span class="keywordtype">char</span> *refname, <span class="keywordtype">char</span> **xmlbuffer, <span class="keywordtype">int</span> *buflen);</div>
151 <div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; </div>
152 <div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
153 <div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
154 <div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;<span class="preprocessor">#endif</span></div>
155 <div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; </div>
156 <div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; </div>
157 <div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_DIFF_H */</span><span class="preprocessor"></span></div>
158 <div class="ttc" id="aa00195_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
159 <div class="ttc" id="aa00237_html_ga1bd6363f26f7961f83153aaa484a9b85"><div class="ttname"><a href="a00237.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a></div><div class="ttdeci">union hwloc_topology_diff_u * hwloc_topology_diff_t</div><div class="ttdoc">One element of a difference list between two topologies.</div></div>
160 <div class="ttc" id="aa00237_html_ga2cd902ce8766e90d4f2523a8e87640e9"><div class="ttname"><a href="a00237.html#ga2cd902ce8766e90d4f2523a8e87640e9">hwloc_topology_diff_load_xml</a></div><div class="ttdeci">int hwloc_topology_diff_load_xml(const char *xmlpath, hwloc_topology_diff_t *diff, char **refname)</div><div class="ttdoc">Load a list of topology differences from a XML file.</div></div>
161 <div class="ttc" id="aa00237_html_ga38b28b7423b85a3321e6d0062d5f83d0"><div class="ttname"><a href="a00237.html#ga38b28b7423b85a3321e6d0062d5f83d0">hwloc_topology_diff_type_e</a></div><div class="ttdeci">hwloc_topology_diff_type_e</div><div class="ttdoc">Type of one element of a difference list.</div><div class="ttdef"><b>Definition:</b> diff.h:111</div></div>
162 <div class="ttc" id="aa00237_html_ga5dcff18f80583ac6505a94ba2877fd1b"><div class="ttname"><a href="a00237.html#ga5dcff18f80583ac6505a94ba2877fd1b">hwloc_topology_diff_destroy</a></div><div class="ttdeci">int hwloc_topology_diff_destroy(hwloc_topology_diff_t diff)</div><div class="ttdoc">Destroy a list of topology differences.</div></div>
163 <div class="ttc" id="aa00237_html_ga74a3fefbaa17582fea86d76b312d6254"><div class="ttname"><a href="a00237.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a></div><div class="ttdeci">enum hwloc_topology_diff_obj_attr_type_e hwloc_topology_diff_obj_attr_type_t</div><div class="ttdoc">Type of one object attribute difference.</div></div>
164 <div class="ttc" id="aa00237_html_ga8470f631b7365c839d3e40d38c5b6291"><div class="ttname"><a href="a00237.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a></div><div class="ttdeci">enum hwloc_topology_diff_type_e hwloc_topology_diff_type_t</div><div class="ttdoc">Type of one element of a difference list.</div></div>
165 <div class="ttc" id="aa00237_html_ga86f044210b0a9e9fa83acbdbbf7e05fd"><div class="ttname"><a href="a00237.html#ga86f044210b0a9e9fa83acbdbbf7e05fd">hwloc_topology_diff_obj_attr_type_e</a></div><div class="ttdeci">hwloc_topology_diff_obj_attr_type_e</div><div class="ttdoc">Type of one object attribute difference.</div><div class="ttdef"><b>Definition:</b> diff.h:62</div></div>
166 <div class="ttc" id="aa00237_html_ga8a14dd7d01efbdd97af7fe85e8b84b20"><div class="ttname"><a href="a00237.html#ga8a14dd7d01efbdd97af7fe85e8b84b20">hwloc_topology_diff_export_xml</a></div><div class="ttdeci">int hwloc_topology_diff_export_xml(hwloc_topology_diff_t diff, const char *refname, const char *xmlpath)</div><div class="ttdoc">Export a list of topology differences to a XML file.</div></div>
167 <div class="ttc" id="aa00237_html_ga8a1754f69fbb31364ea3ea2c39827c9f"><div class="ttname"><a href="a00237.html#ga8a1754f69fbb31364ea3ea2c39827c9f">hwloc_topology_diff_build</a></div><div class="ttdeci">int hwloc_topology_diff_build(hwloc_topology_t topology, hwloc_topology_t newtopology, unsigned long flags, hwloc_topology_diff_t *diff)</div><div class="ttdoc">Compute the difference between 2 topologies.</div></div>
168 <div class="ttc" id="aa00237_html_gaa2f0918df60c1c4a0bef9411f7d92a13"><div class="ttname"><a href="a00237.html#gaa2f0918df60c1c4a0bef9411f7d92a13">hwloc_topology_diff_export_xmlbuffer</a></div><div class="ttdeci">int hwloc_topology_diff_export_xmlbuffer(hwloc_topology_diff_t diff, const char *refname, char **xmlbuffer, int *buflen)</div><div class="ttdoc">Export a list of topology differences to a XML buffer.</div></div>
169 <div class="ttc" id="aa00237_html_gad693810a5c51628529b9dd56f040fb81"><div class="ttname"><a href="a00237.html#gad693810a5c51628529b9dd56f040fb81">hwloc_topology_diff_load_xmlbuffer</a></div><div class="ttdeci">int hwloc_topology_diff_load_xmlbuffer(const char *xmlbuffer, int buflen, hwloc_topology_diff_t *diff, char **refname)</div><div class="ttdoc">Load a list of topology differences from a XML buffer.</div></div>
170 <div class="ttc" id="aa00237_html_gada4c1273ce020afaf02b649496f7edf5"><div class="ttname"><a href="a00237.html#gada4c1273ce020afaf02b649496f7edf5">hwloc_topology_diff_apply_flags_e</a></div><div class="ttdeci">hwloc_topology_diff_apply_flags_e</div><div class="ttdoc">Flags to be given to hwloc_topology_diff_apply().</div><div class="ttdef"><b>Definition:</b> diff.h:198</div></div>
171 <div class="ttc" id="aa00237_html_gae7b350d7e7478a4c6047b08aa6544f40"><div class="ttname"><a href="a00237.html#gae7b350d7e7478a4c6047b08aa6544f40">hwloc_topology_diff_apply</a></div><div class="ttdeci">int hwloc_topology_diff_apply(hwloc_topology_t topology, hwloc_topology_diff_t diff, unsigned long flags)</div><div class="ttdoc">Apply a topology diff to an existing topology.</div></div>
172 <div class="ttc" id="aa00237_html_gga38b28b7423b85a3321e6d0062d5f83d0a3dc01fdeff355efe3fb2516bb454a147"><div class="ttname"><a href="a00237.html#gga38b28b7423b85a3321e6d0062d5f83d0a3dc01fdeff355efe3fb2516bb454a147">HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX</div><div class="ttdoc">The difference is too complex, it cannot be represented. The difference below this object has not bee...</div><div class="ttdef"><b>Definition:</b> diff.h:124</div></div>
173 <div class="ttc" id="aa00237_html_gga38b28b7423b85a3321e6d0062d5f83d0accbcaee230f79989debb284c8626f0c0"><div class="ttname"><a href="a00237.html#gga38b28b7423b85a3321e6d0062d5f83d0accbcaee230f79989debb284c8626f0c0">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_DIFF_OBJ_ATTR</div><div class="ttdoc">An object attribute was changed. The union is a hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s...</div><div class="ttdef"><b>Definition:</b> diff.h:115</div></div>
174 <div class="ttc" id="aa00237_html_gga86f044210b0a9e9fa83acbdbbf7e05fda63430bf932434bc456282f636d39c2c2"><div class="ttname"><a href="a00237.html#gga86f044210b0a9e9fa83acbdbbf7e05fda63430bf932434bc456282f636d39c2c2">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_INFO</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_INFO</div><div class="ttdoc">the value of an info attribute is modified. The union is a hwloc_topology_diff_obj_attr_u::hwloc_topo...</div><div class="ttdef"><b>Definition:</b> diff.h:78</div></div>
175 <div class="ttc" id="aa00237_html_gga86f044210b0a9e9fa83acbdbbf7e05fda94a8f37c51d62d15ac6192665dd49310"><div class="ttname"><a href="a00237.html#gga86f044210b0a9e9fa83acbdbbf7e05fda94a8f37c51d62d15ac6192665dd49310">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_NAME</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_NAME</div><div class="ttdoc">The object name is modified. The union is a hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_a...</div><div class="ttdef"><b>Definition:</b> diff.h:74</div></div>
176 <div class="ttc" id="aa00237_html_gga86f044210b0a9e9fa83acbdbbf7e05fdabc7f0c7ed0b6864e902f4b70f2c7bc94"><div class="ttname"><a href="a00237.html#gga86f044210b0a9e9fa83acbdbbf7e05fdabc7f0c7ed0b6864e902f4b70f2c7bc94">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_SIZE</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_SIZE</div><div class="ttdoc">The object local memory is modified. The union is a hwloc_topology_diff_obj_attr_u::hwloc_topology_di...</div><div class="ttdef"><b>Definition:</b> diff.h:67</div></div>
177 <div class="ttc" id="aa00237_html_ggada4c1273ce020afaf02b649496f7edf5a821a160512d67ea0dd05dab873d2fc54"><div class="ttname"><a href="a00237.html#ggada4c1273ce020afaf02b649496f7edf5a821a160512d67ea0dd05dab873d2fc54">HWLOC_TOPOLOGY_DIFF_APPLY_REVERSE</a></div><div class="ttdeci">@ HWLOC_TOPOLOGY_DIFF_APPLY_REVERSE</div><div class="ttdoc">Apply topology diff in reverse direction.</div><div class="ttdef"><b>Definition:</b> diff.h:202</div></div>
178 <div class="ttc" id="aa00346_html"><div class="ttname"><a href="a00346.html">hwloc_topology_diff_obj_attr_u</a></div><div class="ttdoc">One object attribute difference.</div><div class="ttdef"><b>Definition:</b> diff.h:83</div></div>
179 <div class="ttc" id="aa00346_html_a42fa15c37f1f59ef638066c4c62c3154"><div class="ttname"><a href="a00346.html#a42fa15c37f1f59ef638066c4c62c3154">hwloc_topology_diff_obj_attr_u::string</a></div><div class="ttdeci">struct hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s string</div></div>
180 <div class="ttc" id="aa00346_html_a4608ade88460f5f208887775e5a69a0a"><div class="ttname"><a href="a00346.html#a4608ade88460f5f208887775e5a69a0a">hwloc_topology_diff_obj_attr_u::uint64</a></div><div class="ttdeci">struct hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s uint64</div></div>
181 <div class="ttc" id="aa00350_html"><div class="ttname"><a href="a00350.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s</a></div><div class="ttdef"><b>Definition:</b> diff.h:84</div></div>
182 <div class="ttc" id="aa00350_html_a43f8133b7c30129b002c2d295e6580fc"><div class="ttname"><a href="a00350.html#a43f8133b7c30129b002c2d295e6580fc">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s::type</a></div><div class="ttdeci">hwloc_topology_diff_obj_attr_type_t type</div><div class="ttdef"><b>Definition:</b> diff.h:86</div></div>
183 <div class="ttc" id="aa00354_html"><div class="ttname"><a href="a00354.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a></div><div class="ttdoc">Integer attribute modification with an optional index.</div><div class="ttdef"><b>Definition:</b> diff.h:90</div></div>
184 <div class="ttc" id="aa00354_html_a44c0894dce563335d347fde6595c49c9"><div class="ttname"><a href="a00354.html#a44c0894dce563335d347fde6595c49c9">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s::oldvalue</a></div><div class="ttdeci">hwloc_uint64_t oldvalue</div><div class="ttdef"><b>Definition:</b> diff.h:94</div></div>
185 <div class="ttc" id="aa00354_html_adb772c3f1761ecadf496c80ae14afce3"><div class="ttname"><a href="a00354.html#adb772c3f1761ecadf496c80ae14afce3">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s::index</a></div><div class="ttdeci">hwloc_uint64_t index</div><div class="ttdef"><b>Definition:</b> diff.h:93</div></div>
186 <div class="ttc" id="aa00354_html_ae63aa59ad65aa783b730a4f213304eb4"><div class="ttname"><a href="a00354.html#ae63aa59ad65aa783b730a4f213304eb4">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s::newvalue</a></div><div class="ttdeci">hwloc_uint64_t newvalue</div><div class="ttdef"><b>Definition:</b> diff.h:95</div></div>
187 <div class="ttc" id="aa00354_html_afe262b9aa558fe7bfecbd37a7a129197"><div class="ttname"><a href="a00354.html#afe262b9aa558fe7bfecbd37a7a129197">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s::type</a></div><div class="ttdeci">hwloc_topology_diff_obj_attr_type_t type</div><div class="ttdef"><b>Definition:</b> diff.h:92</div></div>
188 <div class="ttc" id="aa00358_html"><div class="ttname"><a href="a00358.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a></div><div class="ttdoc">String attribute modification with an optional name.</div><div class="ttdef"><b>Definition:</b> diff.h:99</div></div>
189 <div class="ttc" id="aa00358_html_a33cc281d4417129064295a6ae7b79818"><div class="ttname"><a href="a00358.html#a33cc281d4417129064295a6ae7b79818">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s::oldvalue</a></div><div class="ttdeci">char * oldvalue</div><div class="ttdef"><b>Definition:</b> diff.h:103</div></div>
190 <div class="ttc" id="aa00358_html_a75f37f4add21cece50fee2701c3b77db"><div class="ttname"><a href="a00358.html#a75f37f4add21cece50fee2701c3b77db">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s::newvalue</a></div><div class="ttdeci">char * newvalue</div><div class="ttdef"><b>Definition:</b> diff.h:104</div></div>
191 <div class="ttc" id="aa00358_html_a784ab5827c1bf531b86d1f02f199d04d"><div class="ttname"><a href="a00358.html#a784ab5827c1bf531b86d1f02f199d04d">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s::type</a></div><div class="ttdeci">hwloc_topology_diff_obj_attr_type_t type</div><div class="ttdef"><b>Definition:</b> diff.h:101</div></div>
192 <div class="ttc" id="aa00358_html_a7ef48c66ccddf34d90edb4e4314b41c6"><div class="ttname"><a href="a00358.html#a7ef48c66ccddf34d90edb4e4314b41c6">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s::name</a></div><div class="ttdeci">char * name</div><div class="ttdef"><b>Definition:</b> diff.h:102</div></div>
193 <div class="ttc" id="aa00362_html"><div class="ttname"><a href="a00362.html">hwloc_topology_diff_u</a></div><div class="ttdoc">One element of a difference list between two topologies.</div><div class="ttdef"><b>Definition:</b> diff.h:129</div></div>
194 <div class="ttc" id="aa00366_html"><div class="ttname"><a href="a00366.html">hwloc_topology_diff_u::hwloc_topology_diff_generic_s</a></div><div class="ttdef"><b>Definition:</b> diff.h:130</div></div>
195 <div class="ttc" id="aa00366_html_a373005489fcddeba6319163e60263ae8"><div class="ttname"><a href="a00366.html#a373005489fcddeba6319163e60263ae8">hwloc_topology_diff_u::hwloc_topology_diff_generic_s::type</a></div><div class="ttdeci">hwloc_topology_diff_type_t type</div><div class="ttdef"><b>Definition:</b> diff.h:132</div></div>
196 <div class="ttc" id="aa00366_html_a720aa94eb73cddfd8d6bf9fcbbfc035e"><div class="ttname"><a href="a00366.html#a720aa94eb73cddfd8d6bf9fcbbfc035e">hwloc_topology_diff_u::hwloc_topology_diff_generic_s::next</a></div><div class="ttdeci">union hwloc_topology_diff_u * next</div><div class="ttdef"><b>Definition:</b> diff.h:133</div></div>
197 <div class="ttc" id="aa00370_html"><div class="ttname"><a href="a00370.html">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a></div><div class="ttdef"><b>Definition:</b> diff.h:137</div></div>
198 <div class="ttc" id="aa00370_html_a70a118ad288bd98f18c8ce6dc52e2d10"><div class="ttname"><a href="a00370.html#a70a118ad288bd98f18c8ce6dc52e2d10">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s::type</a></div><div class="ttdeci">hwloc_topology_diff_type_t type</div><div class="ttdef"><b>Definition:</b> diff.h:138</div></div>
199 <div class="ttc" id="aa00370_html_a82c1d4bab80b9e0bf301a9d8291893e0"><div class="ttname"><a href="a00370.html#a82c1d4bab80b9e0bf301a9d8291893e0">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s::obj_depth</a></div><div class="ttdeci">int obj_depth</div><div class="ttdef"><b>Definition:</b> diff.h:141</div></div>
200 <div class="ttc" id="aa00370_html_acb9170a8eb3392656d70f7f3ef3e3eed"><div class="ttname"><a href="a00370.html#acb9170a8eb3392656d70f7f3ef3e3eed">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s::next</a></div><div class="ttdeci">union hwloc_topology_diff_u * next</div><div class="ttdef"><b>Definition:</b> diff.h:139</div></div>
201 <div class="ttc" id="aa00374_html"><div class="ttname"><a href="a00374.html">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a></div><div class="ttdef"><b>Definition:</b> diff.h:147</div></div>
202 <div class="ttc" id="aa00374_html_a375afbaa043b109be689a7d9a3c7d153"><div class="ttname"><a href="a00374.html#a375afbaa043b109be689a7d9a3c7d153">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s::next</a></div><div class="ttdeci">union hwloc_topology_diff_u * next</div><div class="ttdef"><b>Definition:</b> diff.h:149</div></div>
203 <div class="ttc" id="aa00374_html_a6dc6b3c4adb10db74d993e37afaa0580"><div class="ttname"><a href="a00374.html#a6dc6b3c4adb10db74d993e37afaa0580">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s::obj_index</a></div><div class="ttdeci">unsigned obj_index</div><div class="ttdef"><b>Definition:</b> diff.h:152</div></div>
204 <div class="ttc" id="aa00374_html_a92084295a4d6faf17a95a7eea526ddbd"><div class="ttname"><a href="a00374.html#a92084295a4d6faf17a95a7eea526ddbd">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s::type</a></div><div class="ttdeci">hwloc_topology_diff_type_t type</div><div class="ttdef"><b>Definition:</b> diff.h:148</div></div>
205 <div class="ttc" id="aa00374_html_a94c6498caeaafbb79927395d918d6cb3"><div class="ttname"><a href="a00374.html#a94c6498caeaafbb79927395d918d6cb3">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s::obj_depth</a></div><div class="ttdeci">int obj_depth</div><div class="ttdef"><b>Definition:</b> diff.h:151</div></div>
89206 </div><!-- fragment --></div><!-- contents -->
90207 <!-- start footer part -->
91208 <hr class="footer"/><address class="footer"><small>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): plugins.h Source File</title>
7 <title>Hardware Locality (hwloc): shmem.h Source File</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4343 </div><!-- top -->
4444 <div class="header">
4545 <div class="headertitle">
46 <div class="title">plugins.h</div> </div>
46 <div class="title">shmem.h</div> </div>
4747 </div><!--header-->
4848 <div class="contents">
4949 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
50 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2013-2020 Inria. All rights reserved.</span></div>
51 <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * Copyright © 2016 Cisco Systems, Inc. All rights reserved.</span></div>
52 <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
53 <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> */</span></div>
54 <div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160; </div>
55 <div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="preprocessor">#ifndef HWLOC_PLUGINS_H</span></div>
56 <div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#define HWLOC_PLUGINS_H</span></div>
57 <div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160; </div>
58 <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="keyword">struct </span><a class="code" href="a00380.html">hwloc_backend</a>;</div>
59 <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; </div>
60 <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &quot;hwloc.h&quot;</span></div>
61 <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; </div>
62 <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#ifdef HWLOC_INSIDE_PLUGIN</span></div>
63 <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">/* needed for hwloc_plugin_check_namespace() */</span></div>
64 <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#ifdef HWLOC_HAVE_LTDL</span></div>
65 <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;ltdl.h&gt;</span></div>
66 <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#else</span></div>
67 <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;dlfcn.h&gt;</span></div>
68 <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#endif</span></div>
69 <div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#endif</span></div>
70 <div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
71 <div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
72 <div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
73 <div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="a00372.html"> 38</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00372.html">hwloc_disc_component</a> {</div>
74 <div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="a00372.html#a4064c3b5d9213027e87caebef380a840"> 42</a></span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="a00372.html#a4064c3b5d9213027e87caebef380a840">name</a>;</div>
75 <div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; </div>
76 <div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="a00372.html#a61ad3151efa02e3dbad5d919758f9c90"> 47</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00372.html#a61ad3151efa02e3dbad5d919758f9c90">phases</a>;</div>
77 <div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; </div>
78 <div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="a00372.html#acbb9957914dbf7b8f504215aa0c8d3fe"> 57</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00372.html#acbb9957914dbf7b8f504215aa0c8d3fe">excluded_phases</a>;</div>
79 <div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; </div>
80 <div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keyword">struct </span><a class="code" href="a00380.html">hwloc_backend</a> * (*instantiate)(<span class="keyword">struct </span>hwloc_topology *topology, <span class="keyword">struct </span><a class="code" href="a00372.html">hwloc_disc_component</a> *component, <span class="keywordtype">unsigned</span> <a class="code" href="a00372.html#acbb9957914dbf7b8f504215aa0c8d3fe">excluded_phases</a>, <span class="keyword">const</span> <span class="keywordtype">void</span> *data1, <span class="keyword">const</span> <span class="keywordtype">void</span> *data2, <span class="keyword">const</span> <span class="keywordtype">void</span> *data3);</div>
81 <div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; </div>
82 <div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="a00372.html#ae86d283c272c5ae24073a235efbf6b59"> 76</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00372.html#ae86d283c272c5ae24073a235efbf6b59">priority</a>;</div>
83 <div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; </div>
84 <div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="a00372.html#ace80cafe2b1732b047b3fc3da47e6517"> 81</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00372.html#ace80cafe2b1732b047b3fc3da47e6517">enabled_by_default</a>;</div>
85 <div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; </div>
86 <div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keyword">struct </span><a class="code" href="a00372.html">hwloc_disc_component</a> * next;</div>
87 <div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;};</div>
88 <div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; </div>
89 <div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="a00234.html#ga8c314121c2fc478161bcce758688b9a1"> 100</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="a00234.html#ga8c314121c2fc478161bcce758688b9a1">hwloc_disc_phase_e</a> {</div>
90 <div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="a00234.html#gga8c314121c2fc478161bcce758688b9a1ab41c626c79e9ccb1e7d41e7076972283"> 105</a></span>&#160; <a class="code" href="a00234.html#gga8c314121c2fc478161bcce758688b9a1ab41c626c79e9ccb1e7d41e7076972283">HWLOC_DISC_PHASE_GLOBAL</a> = (1U&lt;&lt;0),</div>
91 <div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; </div>
92 <div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="a00234.html#gga8c314121c2fc478161bcce758688b9a1a6360474df197027761a69bd5fc620250"> 109</a></span>&#160; <a class="code" href="a00234.html#gga8c314121c2fc478161bcce758688b9a1a6360474df197027761a69bd5fc620250">HWLOC_DISC_PHASE_CPU</a> = (1U&lt;&lt;1),</div>
93 <div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; </div>
94 <div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="a00234.html#gga8c314121c2fc478161bcce758688b9a1ac4264a243844c5fbbff495cdb1b4d51d"> 113</a></span>&#160; <a class="code" href="a00234.html#gga8c314121c2fc478161bcce758688b9a1ac4264a243844c5fbbff495cdb1b4d51d">HWLOC_DISC_PHASE_MEMORY</a> = (1U&lt;&lt;2),</div>
95 <div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; </div>
96 <div class="line"><a name="l00117"></a><span class="lineno"><a class="line" href="a00234.html#gga8c314121c2fc478161bcce758688b9a1a677c52064dd987af4988346319b3675a"> 117</a></span>&#160; <a class="code" href="a00234.html#gga8c314121c2fc478161bcce758688b9a1a677c52064dd987af4988346319b3675a">HWLOC_DISC_PHASE_PCI</a> = (1U&lt;&lt;3),</div>
97 <div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; </div>
98 <div class="line"><a name="l00121"></a><span class="lineno"><a class="line" href="a00234.html#gga8c314121c2fc478161bcce758688b9a1aa8e10626cba9af72f5605a1acbdc0015"> 121</a></span>&#160; <a class="code" href="a00234.html#gga8c314121c2fc478161bcce758688b9a1aa8e10626cba9af72f5605a1acbdc0015">HWLOC_DISC_PHASE_IO</a> = (1U&lt;&lt;4),</div>
99 <div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; </div>
100 <div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="a00234.html#gga8c314121c2fc478161bcce758688b9a1a8a7cde9bff0ab0d085b102a3e934939b"> 125</a></span>&#160; <a class="code" href="a00234.html#gga8c314121c2fc478161bcce758688b9a1a8a7cde9bff0ab0d085b102a3e934939b">HWLOC_DISC_PHASE_MISC</a> = (1U&lt;&lt;5),</div>
101 <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; </div>
102 <div class="line"><a name="l00129"></a><span class="lineno"><a class="line" href="a00234.html#gga8c314121c2fc478161bcce758688b9a1a68ca5c7ad75a6d9e5355689411621773"> 129</a></span>&#160; <a class="code" href="a00234.html#gga8c314121c2fc478161bcce758688b9a1a68ca5c7ad75a6d9e5355689411621773">HWLOC_DISC_PHASE_ANNOTATE</a> = (1U&lt;&lt;6),</div>
103 <div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; </div>
104 <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <a class="code" href="a00234.html#gga8c314121c2fc478161bcce758688b9a1ada3ed3f00e74909353d6ea4a96cde5ad">HWLOC_DISC_PHASE_TWEAK</a> = (1U&lt;&lt;7)</div>
105 <div class="line"><a name="l00137"></a><span class="lineno"><a class="line" href="a00234.html#ga600bba1a62022d5f516800649b1edb61"> 137</a></span>&#160;} <a class="code" href="a00234.html#ga600bba1a62022d5f516800649b1edb61">hwloc_disc_phase_t</a>;</div>
106 <div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; </div>
107 <div class="line"><a name="l00140"></a><span class="lineno"><a class="line" href="a00234.html#gaae1b38cf9b12e489884ce2a07275964b"> 140</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00234.html#gaae1b38cf9b12e489884ce2a07275964b">hwloc_disc_status_flag_e</a> {</div>
108 <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <a class="code" href="a00234.html#ggaae1b38cf9b12e489884ce2a07275964ba205d644d54a0840bd9165fce7d19e6b1">HWLOC_DISC_STATUS_FLAG_GOT_ALLOWED_RESOURCES</a> = (1UL&lt;&lt;1)</div>
109 <div class="line"><a name="l00143"></a><span class="lineno"><a class="line" href="a00234.html#ggaae1b38cf9b12e489884ce2a07275964ba205d644d54a0840bd9165fce7d19e6b1"> 143</a></span>&#160;};</div>
110 <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; </div>
111 <div class="line"><a name="l00150"></a><span class="lineno"><a class="line" href="a00376.html"> 150</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00376.html">hwloc_disc_status</a> {</div>
112 <div class="line"><a name="l00154"></a><span class="lineno"><a class="line" href="a00376.html#abaf7c8c082d43e133171f0723dbf824b"> 154</a></span>&#160; <a class="code" href="a00234.html#ga600bba1a62022d5f516800649b1edb61">hwloc_disc_phase_t</a> <a class="code" href="a00376.html#abaf7c8c082d43e133171f0723dbf824b">phase</a>;</div>
113 <div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; </div>
114 <div class="line"><a name="l00159"></a><span class="lineno"><a class="line" href="a00376.html#a0f95fa42d46a6e7cf8dee8af12afee3a"> 159</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00376.html#a0f95fa42d46a6e7cf8dee8af12afee3a">excluded_phases</a>;</div>
115 <div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; </div>
116 <div class="line"><a name="l00162"></a><span class="lineno"><a class="line" href="a00376.html#ad8b123cecb945a9182eb824ccf8ef9d7"> 162</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="a00376.html#ad8b123cecb945a9182eb824ccf8ef9d7">flags</a>;</div>
117 <div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;};</div>
118 <div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; </div>
119 <div class="line"><a name="l00183"></a><span class="lineno"><a class="line" href="a00380.html"> 183</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00380.html">hwloc_backend</a> {</div>
120 <div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <span class="keyword">struct </span><a class="code" href="a00372.html">hwloc_disc_component</a> * component;</div>
121 <div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keyword">struct </span>hwloc_topology * topology;</div>
122 <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keywordtype">int</span> envvar_forced;</div>
123 <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keyword">struct </span><a class="code" href="a00380.html">hwloc_backend</a> * next;</div>
124 <div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; </div>
125 <div class="line"><a name="l00196"></a><span class="lineno"><a class="line" href="a00380.html#aeca769840a6ff03e96462a9533adbccd"> 196</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00380.html#aeca769840a6ff03e96462a9533adbccd">phases</a>;</div>
126 <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; </div>
127 <div class="line"><a name="l00199"></a><span class="lineno"><a class="line" href="a00380.html#aaa8eafe495aadd81c2e3c4ec527c10ba"> 199</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="a00380.html#aaa8eafe495aadd81c2e3c4ec527c10ba">flags</a>;</div>
128 <div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; </div>
129 <div class="line"><a name="l00207"></a><span class="lineno"><a class="line" href="a00380.html#ab8806f6db077f1bb2e9d63ec99223f7a"> 207</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="a00380.html#ab8806f6db077f1bb2e9d63ec99223f7a">is_thissystem</a>;</div>
130 <div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; </div>
131 <div class="line"><a name="l00210"></a><span class="lineno"><a class="line" href="a00380.html#a2ea5bd36b7f06efdb65b98b32af16c68"> 210</a></span>&#160; <span class="keywordtype">void</span> * <a class="code" href="a00380.html#a2ea5bd36b7f06efdb65b98b32af16c68">private_data</a>;</div>
132 <div class="line"><a name="l00214"></a><span class="lineno"><a class="line" href="a00380.html#a36c4fa86350525b46340c67b802c69c7"> 214</a></span>&#160; void (*<a class="code" href="a00380.html#a36c4fa86350525b46340c67b802c69c7">disable</a>)(<span class="keyword">struct </span><a class="code" href="a00380.html">hwloc_backend</a> *backend);</div>
133 <div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; </div>
134 <div class="line"><a name="l00221"></a><span class="lineno"><a class="line" href="a00380.html#accff2cd8404be43c3b44cec05e6f609b"> 221</a></span>&#160; int (*<a class="code" href="a00380.html#accff2cd8404be43c3b44cec05e6f609b">discover</a>)(<span class="keyword">struct </span><a class="code" href="a00380.html">hwloc_backend</a> *backend, <span class="keyword">struct </span><a class="code" href="a00376.html">hwloc_disc_status</a> *status);</div>
135 <div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; </div>
136 <div class="line"><a name="l00227"></a><span class="lineno"><a class="line" href="a00380.html#aaac253491264c20930f44817270bc502"> 227</a></span>&#160; int (*<a class="code" href="a00380.html#aaac253491264c20930f44817270bc502">get_pci_busid_cpuset</a>)(<span class="keyword">struct </span><a class="code" href="a00380.html">hwloc_backend</a> *backend, <span class="keyword">struct </span>hwloc_pcidev_attr_s *busid, <a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> cpuset);</div>
137 <div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;};</div>
138 <div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; </div>
139 <div class="line"><a name="l00233"></a><span class="lineno"><a class="line" href="a00234.html#gadb068565ab6043cbe4d16bfcce067a61"> 233</a></span>&#160;HWLOC_DECLSPEC <span class="keyword">struct </span><a class="code" href="a00380.html">hwloc_backend</a> * <a class="code" href="a00234.html#gadb068565ab6043cbe4d16bfcce067a61">hwloc_backend_alloc</a>(<span class="keyword">struct</span> hwloc_topology *topology, <span class="keyword">struct</span> <a class="code" href="a00372.html">hwloc_disc_component</a> *component);</div>
140 <div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; </div>
141 <div class="line"><a name="l00236"></a><span class="lineno"><a class="line" href="a00234.html#ga4715779d7191833e9b1a7490989a7497"> 236</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00234.html#ga4715779d7191833e9b1a7490989a7497">hwloc_backend_enable</a>(<span class="keyword">struct</span> <a class="code" href="a00380.html">hwloc_backend</a> *backend);</div>
142 <div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; </div>
143 <div class="line"><a name="l00248"></a><span class="lineno"><a class="line" href="a00235.html#ga397a1bf7d21dd073320ad0045340f463"> 248</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="a00235.html#ga397a1bf7d21dd073320ad0045340f463">hwloc_component_type_e</a> {</div>
144 <div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="a00235.html#gga397a1bf7d21dd073320ad0045340f463a5d6e561f467fe9795a29e7368b613900"> 250</a></span>&#160; <a class="code" href="a00235.html#gga397a1bf7d21dd073320ad0045340f463a5d6e561f467fe9795a29e7368b613900">HWLOC_COMPONENT_TYPE_DISC</a>,</div>
145 <div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; </div>
146 <div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <a class="code" href="a00235.html#gga397a1bf7d21dd073320ad0045340f463adea00cd839c2141c032e1569fd5592bd">HWLOC_COMPONENT_TYPE_XML</a></div>
147 <div class="line"><a name="l00254"></a><span class="lineno"><a class="line" href="a00235.html#ga31a5a455f4e666b936f0a9e8fb9a0f47"> 254</a></span>&#160;} <a class="code" href="a00235.html#ga31a5a455f4e666b936f0a9e8fb9a0f47">hwloc_component_type_t</a>;</div>
148 <div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; </div>
149 <div class="line"><a name="l00261"></a><span class="lineno"><a class="line" href="a00384.html"> 261</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00384.html">hwloc_component</a> {</div>
150 <div class="line"><a name="l00263"></a><span class="lineno"><a class="line" href="a00384.html#a3250bd6fc9713946991d805e48091b2e"> 263</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00384.html#a3250bd6fc9713946991d805e48091b2e">abi</a>;</div>
151 <div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; </div>
152 <div class="line"><a name="l00282"></a><span class="lineno"><a class="line" href="a00384.html#aea613546886d9b8221cadba920fe3ebc"> 282</a></span>&#160; int (*<a class="code" href="a00384.html#aea613546886d9b8221cadba920fe3ebc">init</a>)(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="a00384.html#ab8043c5b4cc0e81aabba586ccb194335">flags</a>);</div>
153 <div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; </div>
154 <div class="line"><a name="l00295"></a><span class="lineno"><a class="line" href="a00384.html#a4612015451a1c706e8ba19114cb8baae"> 295</a></span>&#160; void (*<a class="code" href="a00384.html#a4612015451a1c706e8ba19114cb8baae">finalize</a>)(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="a00384.html#ab8043c5b4cc0e81aabba586ccb194335">flags</a>);</div>
155 <div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; </div>
156 <div class="line"><a name="l00298"></a><span class="lineno"><a class="line" href="a00384.html#a789208ada7e17492cfd3a5a88a6bb0ee"> 298</a></span>&#160; <a class="code" href="a00235.html#ga31a5a455f4e666b936f0a9e8fb9a0f47">hwloc_component_type_t</a> <a class="code" href="a00384.html#a789208ada7e17492cfd3a5a88a6bb0ee">type</a>;</div>
157 <div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; </div>
158 <div class="line"><a name="l00301"></a><span class="lineno"><a class="line" href="a00384.html#ab8043c5b4cc0e81aabba586ccb194335"> 301</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="a00384.html#ab8043c5b4cc0e81aabba586ccb194335">flags</a>;</div>
159 <div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; </div>
160 <div class="line"><a name="l00304"></a><span class="lineno"><a class="line" href="a00384.html#a4b8cffd1d943c29fdc102b841b8598d4"> 304</a></span>&#160; <span class="keywordtype">void</span> * <a class="code" href="a00384.html#a4b8cffd1d943c29fdc102b841b8598d4">data</a>;</div>
161 <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160;};</div>
162 <div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; </div>
163 <div class="line"><a name="l00317"></a><span class="lineno"><a class="line" href="a00236.html#gab527c1e0f243f057d31a724794ad9f88"> 317</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00236.html#gab527c1e0f243f057d31a724794ad9f88">hwloc_hide_errors</a>(<span class="keywordtype">void</span>);</div>
164 <div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; </div>
165 <div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;HWLOC_DECLSPEC <a class="code" href="a00244.html">hwloc_obj_t</a></div>
166 <div class="line"><a name="l00348"></a><span class="lineno"><a class="line" href="a00236.html#ga1e105cfe3c8e77f34cc6df3841deebbc"> 348</a></span>&#160;<a class="code" href="a00236.html#ga1e105cfe3c8e77f34cc6df3841deebbc">hwloc__insert_object_by_cpuset</a>(<span class="keyword">struct</span> hwloc_topology *topology, <a class="code" href="a00244.html">hwloc_obj_t</a> root,</div>
167 <div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <a class="code" href="a00244.html">hwloc_obj_t</a> obj, <span class="keyword">const</span> <span class="keywordtype">char</span> *reason);</div>
168 <div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; </div>
169 <div class="line"><a name="l00367"></a><span class="lineno"><a class="line" href="a00236.html#ga0ef97debde503b56367689b07bb3e901"> 367</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> <a class="code" href="a00236.html#ga0ef97debde503b56367689b07bb3e901">hwloc_insert_object_by_parent</a>(<span class="keyword">struct</span> hwloc_topology *topology, <a class="code" href="a00244.html">hwloc_obj_t</a> parent, <a class="code" href="a00244.html">hwloc_obj_t</a> obj);</div>
170 <div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; </div>
171 <div class="line"><a name="l00373"></a><span class="lineno"><a class="line" href="a00236.html#ga0b5c75b2dc37cea2e8a29c4812baf4b3"> 373</a></span>&#160;HWLOC_DECLSPEC <a class="code" href="a00244.html">hwloc_obj_t</a> <a class="code" href="a00236.html#ga0b5c75b2dc37cea2e8a29c4812baf4b3">hwloc_alloc_setup_object</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, <span class="keywordtype">unsigned</span> os_index);</div>
172 <div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; </div>
173 <div class="line"><a name="l00383"></a><span class="lineno"><a class="line" href="a00236.html#ga754b61041ceee9685534a2c5d3cd0156"> 383</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00236.html#ga754b61041ceee9685534a2c5d3cd0156">hwloc_obj_add_children_sets</a>(<a class="code" href="a00244.html">hwloc_obj_t</a> obj);</div>
174 <div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; </div>
175 <div class="line"><a name="l00392"></a><span class="lineno"><a class="line" href="a00236.html#ga120d8bd74922e1030b621409a6b0be61"> 392</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00236.html#ga120d8bd74922e1030b621409a6b0be61">hwloc_topology_reconnect</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags __hwloc_attribute_unused);</div>
176 <div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; </div>
177 <div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
178 <div class="line"><a name="l00416"></a><span class="lineno"><a class="line" href="a00236.html#gac2eaed287bb215cf0bd33014e9e1d374"> 416</a></span>&#160;<a class="code" href="a00236.html#gac2eaed287bb215cf0bd33014e9e1d374">hwloc_plugin_check_namespace</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *pluginname __hwloc_attribute_unused, <span class="keyword">const</span> <span class="keywordtype">char</span> *symbol __hwloc_attribute_unused)</div>
179 <div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160;{</div>
180 <div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160;<span class="preprocessor">#ifdef HWLOC_INSIDE_PLUGIN</span></div>
181 <div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="keywordtype">void</span> *sym;</div>
182 <div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160;<span class="preprocessor">#ifdef HWLOC_HAVE_LTDL</span></div>
183 <div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; lt_dlhandle handle = lt_dlopen(NULL);</div>
184 <div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160;<span class="preprocessor">#else</span></div>
185 <div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordtype">void</span> *handle = dlopen(NULL, RTLD_NOW|RTLD_LOCAL);</div>
186 <div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160;<span class="preprocessor">#endif</span></div>
187 <div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <span class="keywordflow">if</span> (!handle)</div>
188 <div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="comment">/* cannot check, assume things will work */</span></div>
189 <div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="keywordflow">return</span> 0;</div>
190 <div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160;<span class="preprocessor">#ifdef HWLOC_HAVE_LTDL</span></div>
191 <div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; sym = lt_dlsym(handle, symbol);</div>
192 <div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; lt_dlclose(handle);</div>
193 <div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160;<span class="preprocessor">#else</span></div>
194 <div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; sym = dlsym(handle, symbol);</div>
195 <div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; dlclose(handle);</div>
196 <div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160;<span class="preprocessor">#endif</span></div>
197 <div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="keywordflow">if</span> (!sym) {</div>
198 <div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keyword">static</span> <span class="keywordtype">int</span> verboseenv_checked = 0;</div>
199 <div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="keyword">static</span> <span class="keywordtype">int</span> verboseenv_value = 0;</div>
200 <div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordflow">if</span> (!verboseenv_checked) {</div>
201 <div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> *verboseenv = getenv(<span class="stringliteral">&quot;HWLOC_PLUGINS_VERBOSE&quot;</span>);</div>
202 <div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; verboseenv_value = verboseenv ? atoi(verboseenv) : 0;</div>
203 <div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; verboseenv_checked = 1;</div>
204 <div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; }</div>
205 <div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <span class="keywordflow">if</span> (verboseenv_value)</div>
206 <div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; fprintf(stderr, <span class="stringliteral">&quot;Plugin `%s&#39; disabling itself because it cannot find the `%s&#39; core symbol.\n&quot;</span>,</div>
207 <div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; pluginname, symbol);</div>
208 <div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keywordflow">return</span> -1;</div>
209 <div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; }</div>
210 <div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_INSIDE_PLUGIN */</span><span class="preprocessor"></span></div>
211 <div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <span class="keywordflow">return</span> 0;</div>
212 <div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160;}</div>
213 <div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; </div>
214 <div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
215 <div class="line"><a name="l00466"></a><span class="lineno"><a class="line" href="a00237.html#ga60203db6459ebf275bf48c40a37661a0"> 466</a></span>&#160;<a class="code" href="a00237.html#ga60203db6459ebf275bf48c40a37661a0">hwloc_filter_check_pcidev_subtype_important</a>(<span class="keywordtype">unsigned</span> classid)</div>
216 <div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160;{</div>
217 <div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="keywordtype">unsigned</span> baseclass = classid &gt;&gt; 8;</div>
218 <div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="keywordflow">return</span> (baseclass == 0x03 <span class="comment">/* PCI_BASE_CLASS_DISPLAY */</span></div>
219 <div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; || baseclass == 0x02 <span class="comment">/* PCI_BASE_CLASS_NETWORK */</span></div>
220 <div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; || baseclass == 0x01 <span class="comment">/* PCI_BASE_CLASS_STORAGE */</span></div>
221 <div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; || baseclass == 0x0b <span class="comment">/* PCI_BASE_CLASS_PROCESSOR */</span></div>
222 <div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; || classid == 0x0c04 <span class="comment">/* PCI_CLASS_SERIAL_FIBER */</span></div>
223 <div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; || classid == 0x0c06 <span class="comment">/* PCI_CLASS_SERIAL_INFINIBAND */</span></div>
224 <div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; || baseclass == 0x12 <span class="comment">/* Processing Accelerators */</span>);</div>
225 <div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160;}</div>
226 <div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; </div>
227 <div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
228 <div class="line"><a name="l00483"></a><span class="lineno"><a class="line" href="a00237.html#gac7d57a6d669820f360cf2a070a396560"> 483</a></span>&#160;<a class="code" href="a00237.html#gac7d57a6d669820f360cf2a070a396560">hwloc_filter_check_osdev_subtype_important</a>(<a class="code" href="a00190.html#gaa9a6941ef7b1c169412518d7ef71b3d2">hwloc_obj_osdev_type_t</a> subtype)</div>
229 <div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160;{</div>
230 <div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="keywordflow">return</span> (subtype != <a class="code" href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0a827ad1643360711a8b6c6af671366791">HWLOC_OBJ_OSDEV_DMA</a>);</div>
231 <div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160;}</div>
232 <div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; </div>
233 <div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
234 <div class="line"><a name="l00495"></a><span class="lineno"><a class="line" href="a00237.html#ga2f402a43025a8a91e8513be1a15e4635"> 495</a></span>&#160;<a class="code" href="a00237.html#ga2f402a43025a8a91e8513be1a15e4635">hwloc_filter_check_keep_object_type</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</div>
235 <div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160;{</div>
236 <div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="keyword">enum</span> <a class="code" href="a00199.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter = <a class="code" href="a00199.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a">HWLOC_TYPE_FILTER_KEEP_NONE</a>;</div>
237 <div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <a class="code" href="a00199.html#ga137ad1178f7a79f2383974d983083401">hwloc_topology_get_type_filter</a>(topology, type, &amp;filter);</div>
238 <div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; assert(filter != <a class="code" href="a00199.html#gga9a5a1f0140cd1952544477833733195ba63fd24954e18c83ff7eae9588759adb5">HWLOC_TYPE_FILTER_KEEP_IMPORTANT</a>); <span class="comment">/* IMPORTANT only used for I/O */</span></div>
239 <div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="keywordflow">return</span> filter == <a class="code" href="a00199.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a">HWLOC_TYPE_FILTER_KEEP_NONE</a> ? 0 : 1;</div>
240 <div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160;}</div>
241 <div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; </div>
242 <div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
243 <div class="line"><a name="l00508"></a><span class="lineno"><a class="line" href="a00237.html#ga4d2fdce071e5646ef147c9ff1539d1c9"> 508</a></span>&#160;<a class="code" href="a00237.html#ga4d2fdce071e5646ef147c9ff1539d1c9">hwloc_filter_check_keep_object</a>(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00244.html">hwloc_obj_t</a> obj)</div>
244 <div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160;{</div>
245 <div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type = obj-&gt;<a class="code" href="a00244.html#acc4f0803f244867e68fe0036800be5de">type</a>;</div>
246 <div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keyword">enum</span> <a class="code" href="a00199.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter = <a class="code" href="a00199.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a">HWLOC_TYPE_FILTER_KEEP_NONE</a>;</div>
247 <div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <a class="code" href="a00199.html#ga137ad1178f7a79f2383974d983083401">hwloc_topology_get_type_filter</a>(topology, type, &amp;filter);</div>
248 <div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="keywordflow">if</span> (filter == <a class="code" href="a00199.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a">HWLOC_TYPE_FILTER_KEEP_NONE</a>)</div>
249 <div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="keywordflow">return</span> 0;</div>
250 <div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="keywordflow">if</span> (filter == <a class="code" href="a00199.html#gga9a5a1f0140cd1952544477833733195ba63fd24954e18c83ff7eae9588759adb5">HWLOC_TYPE_FILTER_KEEP_IMPORTANT</a>) {</div>
251 <div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="keywordflow">if</span> (type == <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a>)</div>
252 <div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <span class="keywordflow">return</span> <a class="code" href="a00237.html#ga60203db6459ebf275bf48c40a37661a0">hwloc_filter_check_pcidev_subtype_important</a>(obj-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00268.html#aee735352d9f1686fd290fc6d6397c334">class_id</a>);</div>
253 <div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <span class="keywordflow">if</span> (type == <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075">HWLOC_OBJ_OS_DEVICE</a>)</div>
254 <div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <span class="keywordflow">return</span> <a class="code" href="a00237.html#gac7d57a6d669820f360cf2a070a396560">hwloc_filter_check_osdev_subtype_important</a>(obj-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a>.<a class="code" href="a00288.html#a31e019e27e54ac6138d04be639bb96f9">type</a>);</div>
255 <div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; }</div>
256 <div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="keywordflow">return</span> 1;</div>
257 <div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160;}</div>
258 <div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; </div>
259 <div class="line"><a name="l00537"></a><span class="lineno"><a class="line" href="a00238.html#ga706f71cfea09d547d2cbafa642d6e03b"> 537</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">unsigned</span> <a class="code" href="a00238.html#ga706f71cfea09d547d2cbafa642d6e03b">hwloc_pcidisc_find_cap</a>(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *config, <span class="keywordtype">unsigned</span> cap);</div>
260 <div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; </div>
261 <div class="line"><a name="l00544"></a><span class="lineno"><a class="line" href="a00238.html#ga51d1ebcbf9729987c9d17df3aa57d209"> 544</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00238.html#ga51d1ebcbf9729987c9d17df3aa57d209">hwloc_pcidisc_find_linkspeed</a>(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *config, <span class="keywordtype">unsigned</span> offset, <span class="keywordtype">float</span> *linkspeed);</div>
262 <div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; </div>
263 <div class="line"><a name="l00550"></a><span class="lineno"><a class="line" href="a00238.html#ga6c55fb80c3d0c8c8e61078b3f38adde8"> 550</a></span>&#160;HWLOC_DECLSPEC <a class="code" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00238.html#ga6c55fb80c3d0c8c8e61078b3f38adde8">hwloc_pcidisc_check_bridge_type</a>(<span class="keywordtype">unsigned</span> device_class, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *config);</div>
264 <div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; </div>
265 <div class="line"><a name="l00558"></a><span class="lineno"><a class="line" href="a00238.html#ga95acf6822a49447c11067d0b843965ba"> 558</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00238.html#ga95acf6822a49447c11067d0b843965ba">hwloc_pcidisc_find_bridge_buses</a>(<span class="keywordtype">unsigned</span> domain, <span class="keywordtype">unsigned</span> bus, <span class="keywordtype">unsigned</span> dev, <span class="keywordtype">unsigned</span> func,</div>
266 <div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; <span class="keywordtype">unsigned</span> *secondary_busp, <span class="keywordtype">unsigned</span> *subordinate_busp,</div>
267 <div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *config);</div>
268 <div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; </div>
269 <div class="line"><a name="l00566"></a><span class="lineno"><a class="line" href="a00238.html#gab76ddc4f55db8101ef0d44317965128c"> 566</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> <a class="code" href="a00238.html#gab76ddc4f55db8101ef0d44317965128c">hwloc_pcidisc_tree_insert_by_busid</a>(<span class="keyword">struct</span> <a class="code" href="a00244.html">hwloc_obj</a> **treep, <span class="keyword">struct</span> <a class="code" href="a00244.html">hwloc_obj</a> *obj);</div>
270 <div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; </div>
271 <div class="line"><a name="l00573"></a><span class="lineno"><a class="line" href="a00238.html#gabda1d6c1799e50b9226f8a4da9bd29ea"> 573</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00238.html#gabda1d6c1799e50b9226f8a4da9bd29ea">hwloc_pcidisc_tree_attach</a>(<span class="keyword">struct</span> hwloc_topology *topology, <span class="keyword">struct</span> <a class="code" href="a00244.html">hwloc_obj</a> *tree);</div>
272 <div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; </div>
273 <div class="line"><a name="l00591"></a><span class="lineno"><a class="line" href="a00239.html#ga7964833550947636ab8975909de3fa98"> 591</a></span>&#160;HWLOC_DECLSPEC <span class="keyword">struct </span><a class="code" href="a00244.html">hwloc_obj</a> * <a class="code" href="a00239.html#ga7964833550947636ab8975909de3fa98">hwloc_pci_find_parent_by_busid</a>(<span class="keyword">struct</span> hwloc_topology *topology, <span class="keywordtype">unsigned</span> domain, <span class="keywordtype">unsigned</span> bus, <span class="keywordtype">unsigned</span> dev, <span class="keywordtype">unsigned</span> func);</div>
274 <div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; </div>
275 <div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_PLUGINS_H */</span><span class="preprocessor"></span></div>
276 <div class="ttc" id="aa00190_html_gaa9a6941ef7b1c169412518d7ef71b3d2"><div class="ttname"><a href="a00190.html#gaa9a6941ef7b1c169412518d7ef71b3d2">hwloc_obj_osdev_type_t</a></div><div class="ttdeci">enum hwloc_obj_osdev_type_e hwloc_obj_osdev_type_t</div><div class="ttdoc">Type of a OS device.</div></div>
277 <div class="ttc" id="aa00190_html_gacd37bb612667dc437d66bfb175a8dc55"><div class="ttname"><a href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a></div><div class="ttdeci">hwloc_obj_type_t</div><div class="ttdoc">Type of topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:176</div></div>
278 <div class="ttc" id="aa00190_html_gga64f5d539df299c97ae80ce53fc4b56c0a827ad1643360711a8b6c6af671366791"><div class="ttname"><a href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0a827ad1643360711a8b6c6af671366791">HWLOC_OBJ_OSDEV_DMA</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_DMA</div><div class="ttdoc">Operating system dma engine device. For instance the &quot;dma0chan0&quot; DMA channel on Linux.</div><div class="ttdef"><b>Definition:</b> hwloc.h:350</div></div>
279 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075">HWLOC_OBJ_OS_DEVICE</a></div><div class="ttdeci">@ HWLOC_OBJ_OS_DEVICE</div><div class="ttdoc">Operating system device (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:279</div></div>
280 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div><div class="ttdeci">@ HWLOC_OBJ_PCI_DEVICE</div><div class="ttdoc">PCI device (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:269</div></div>
281 <div class="ttc" id="aa00192_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
282 <div class="ttc" id="aa00199_html_ga137ad1178f7a79f2383974d983083401"><div class="ttname"><a href="a00199.html#ga137ad1178f7a79f2383974d983083401">hwloc_topology_get_type_filter</a></div><div class="ttdeci">int hwloc_topology_get_type_filter(hwloc_topology_t topology, hwloc_obj_type_t type, enum hwloc_type_filter_e *filter)</div><div class="ttdoc">Get the current filtering for the given object type.</div></div>
283 <div class="ttc" id="aa00199_html_ga9a5a1f0140cd1952544477833733195b"><div class="ttname"><a href="a00199.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a></div><div class="ttdeci">hwloc_type_filter_e</div><div class="ttdoc">Type filtering flags.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2136</div></div>
284 <div class="ttc" id="aa00199_html_gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a"><div class="ttname"><a href="a00199.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a">HWLOC_TYPE_FILTER_KEEP_NONE</a></div><div class="ttdeci">@ HWLOC_TYPE_FILTER_KEEP_NONE</div><div class="ttdoc">Ignore all objects of this type.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2150</div></div>
285 <div class="ttc" id="aa00199_html_gga9a5a1f0140cd1952544477833733195ba63fd24954e18c83ff7eae9588759adb5"><div class="ttname"><a href="a00199.html#gga9a5a1f0140cd1952544477833733195ba63fd24954e18c83ff7eae9588759adb5">HWLOC_TYPE_FILTER_KEEP_IMPORTANT</a></div><div class="ttdeci">@ HWLOC_TYPE_FILTER_KEEP_IMPORTANT</div><div class="ttdoc">Only keep likely-important objects of the given type.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2179</div></div>
286 <div class="ttc" id="aa00211_html_gaa3c2bf4c776d603dcebbb61b0c923d84"><div class="ttname"><a href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a></div><div class="ttdeci">struct hwloc_bitmap_s * hwloc_bitmap_t</div><div class="ttdoc">Set of bits represented as an opaque pointer to an internal bitmap.</div><div class="ttdef"><b>Definition:</b> bitmap.h:68</div></div>
287 <div class="ttc" id="aa00234_html_ga4715779d7191833e9b1a7490989a7497"><div class="ttname"><a href="a00234.html#ga4715779d7191833e9b1a7490989a7497">hwloc_backend_enable</a></div><div class="ttdeci">int hwloc_backend_enable(struct hwloc_backend *backend)</div><div class="ttdoc">Enable a previously allocated and setup backend.</div></div>
288 <div class="ttc" id="aa00234_html_ga600bba1a62022d5f516800649b1edb61"><div class="ttname"><a href="a00234.html#ga600bba1a62022d5f516800649b1edb61">hwloc_disc_phase_t</a></div><div class="ttdeci">enum hwloc_disc_phase_e hwloc_disc_phase_t</div><div class="ttdoc">Discovery phase.</div></div>
289 <div class="ttc" id="aa00234_html_ga8c314121c2fc478161bcce758688b9a1"><div class="ttname"><a href="a00234.html#ga8c314121c2fc478161bcce758688b9a1">hwloc_disc_phase_e</a></div><div class="ttdeci">hwloc_disc_phase_e</div><div class="ttdoc">Discovery phase.</div><div class="ttdef"><b>Definition:</b> plugins.h:100</div></div>
290 <div class="ttc" id="aa00234_html_gaae1b38cf9b12e489884ce2a07275964b"><div class="ttname"><a href="a00234.html#gaae1b38cf9b12e489884ce2a07275964b">hwloc_disc_status_flag_e</a></div><div class="ttdeci">hwloc_disc_status_flag_e</div><div class="ttdoc">Discovery status flags.</div><div class="ttdef"><b>Definition:</b> plugins.h:140</div></div>
291 <div class="ttc" id="aa00234_html_gadb068565ab6043cbe4d16bfcce067a61"><div class="ttname"><a href="a00234.html#gadb068565ab6043cbe4d16bfcce067a61">hwloc_backend_alloc</a></div><div class="ttdeci">struct hwloc_backend * hwloc_backend_alloc(struct hwloc_topology *topology, struct hwloc_disc_component *component)</div><div class="ttdoc">Allocate a backend structure, set good default values, initialize backend-&gt;component and topology,...</div></div>
292 <div class="ttc" id="aa00234_html_gga8c314121c2fc478161bcce758688b9a1a6360474df197027761a69bd5fc620250"><div class="ttname"><a href="a00234.html#gga8c314121c2fc478161bcce758688b9a1a6360474df197027761a69bd5fc620250">HWLOC_DISC_PHASE_CPU</a></div><div class="ttdeci">@ HWLOC_DISC_PHASE_CPU</div><div class="ttdoc">CPU discovery.</div><div class="ttdef"><b>Definition:</b> plugins.h:109</div></div>
293 <div class="ttc" id="aa00234_html_gga8c314121c2fc478161bcce758688b9a1a677c52064dd987af4988346319b3675a"><div class="ttname"><a href="a00234.html#gga8c314121c2fc478161bcce758688b9a1a677c52064dd987af4988346319b3675a">HWLOC_DISC_PHASE_PCI</a></div><div class="ttdeci">@ HWLOC_DISC_PHASE_PCI</div><div class="ttdoc">Attach PCI devices and bridges to existing CPU objects.</div><div class="ttdef"><b>Definition:</b> plugins.h:117</div></div>
294 <div class="ttc" id="aa00234_html_gga8c314121c2fc478161bcce758688b9a1a68ca5c7ad75a6d9e5355689411621773"><div class="ttname"><a href="a00234.html#gga8c314121c2fc478161bcce758688b9a1a68ca5c7ad75a6d9e5355689411621773">HWLOC_DISC_PHASE_ANNOTATE</a></div><div class="ttdeci">@ HWLOC_DISC_PHASE_ANNOTATE</div><div class="ttdoc">Annotating existing objects, adding distances, etc.</div><div class="ttdef"><b>Definition:</b> plugins.h:129</div></div>
295 <div class="ttc" id="aa00234_html_gga8c314121c2fc478161bcce758688b9a1a8a7cde9bff0ab0d085b102a3e934939b"><div class="ttname"><a href="a00234.html#gga8c314121c2fc478161bcce758688b9a1a8a7cde9bff0ab0d085b102a3e934939b">HWLOC_DISC_PHASE_MISC</a></div><div class="ttdeci">@ HWLOC_DISC_PHASE_MISC</div><div class="ttdoc">Misc objects that gets added below anything else.</div><div class="ttdef"><b>Definition:</b> plugins.h:125</div></div>
296 <div class="ttc" id="aa00234_html_gga8c314121c2fc478161bcce758688b9a1aa8e10626cba9af72f5605a1acbdc0015"><div class="ttname"><a href="a00234.html#gga8c314121c2fc478161bcce758688b9a1aa8e10626cba9af72f5605a1acbdc0015">HWLOC_DISC_PHASE_IO</a></div><div class="ttdeci">@ HWLOC_DISC_PHASE_IO</div><div class="ttdoc">I/O discovery that requires PCI devices (OS devices such as OpenCL, CUDA, etc.).</div><div class="ttdef"><b>Definition:</b> plugins.h:121</div></div>
297 <div class="ttc" id="aa00234_html_gga8c314121c2fc478161bcce758688b9a1ab41c626c79e9ccb1e7d41e7076972283"><div class="ttname"><a href="a00234.html#gga8c314121c2fc478161bcce758688b9a1ab41c626c79e9ccb1e7d41e7076972283">HWLOC_DISC_PHASE_GLOBAL</a></div><div class="ttdeci">@ HWLOC_DISC_PHASE_GLOBAL</div><div class="ttdoc">xml or synthetic, platform-specific components such as bgq. Discovers everything including CPU,...</div><div class="ttdef"><b>Definition:</b> plugins.h:105</div></div>
298 <div class="ttc" id="aa00234_html_gga8c314121c2fc478161bcce758688b9a1ac4264a243844c5fbbff495cdb1b4d51d"><div class="ttname"><a href="a00234.html#gga8c314121c2fc478161bcce758688b9a1ac4264a243844c5fbbff495cdb1b4d51d">HWLOC_DISC_PHASE_MEMORY</a></div><div class="ttdeci">@ HWLOC_DISC_PHASE_MEMORY</div><div class="ttdoc">Attach memory to existing CPU objects.</div><div class="ttdef"><b>Definition:</b> plugins.h:113</div></div>
299 <div class="ttc" id="aa00234_html_gga8c314121c2fc478161bcce758688b9a1ada3ed3f00e74909353d6ea4a96cde5ad"><div class="ttname"><a href="a00234.html#gga8c314121c2fc478161bcce758688b9a1ada3ed3f00e74909353d6ea4a96cde5ad">HWLOC_DISC_PHASE_TWEAK</a></div><div class="ttdeci">@ HWLOC_DISC_PHASE_TWEAK</div><div class="ttdoc">Final tweaks to a ready-to-use topology. This phase runs once the topology is loaded,...</div><div class="ttdef"><b>Definition:</b> plugins.h:136</div></div>
300 <div class="ttc" id="aa00234_html_ggaae1b38cf9b12e489884ce2a07275964ba205d644d54a0840bd9165fce7d19e6b1"><div class="ttname"><a href="a00234.html#ggaae1b38cf9b12e489884ce2a07275964ba205d644d54a0840bd9165fce7d19e6b1">HWLOC_DISC_STATUS_FLAG_GOT_ALLOWED_RESOURCES</a></div><div class="ttdeci">@ HWLOC_DISC_STATUS_FLAG_GOT_ALLOWED_RESOURCES</div><div class="ttdoc">The sets of allowed resources were already retrieved.</div><div class="ttdef"><b>Definition:</b> plugins.h:142</div></div>
301 <div class="ttc" id="aa00235_html_ga31a5a455f4e666b936f0a9e8fb9a0f47"><div class="ttname"><a href="a00235.html#ga31a5a455f4e666b936f0a9e8fb9a0f47">hwloc_component_type_t</a></div><div class="ttdeci">enum hwloc_component_type_e hwloc_component_type_t</div><div class="ttdoc">Generic component type.</div></div>
302 <div class="ttc" id="aa00235_html_ga397a1bf7d21dd073320ad0045340f463"><div class="ttname"><a href="a00235.html#ga397a1bf7d21dd073320ad0045340f463">hwloc_component_type_e</a></div><div class="ttdeci">hwloc_component_type_e</div><div class="ttdoc">Generic component type.</div><div class="ttdef"><b>Definition:</b> plugins.h:248</div></div>
303 <div class="ttc" id="aa00235_html_gga397a1bf7d21dd073320ad0045340f463a5d6e561f467fe9795a29e7368b613900"><div class="ttname"><a href="a00235.html#gga397a1bf7d21dd073320ad0045340f463a5d6e561f467fe9795a29e7368b613900">HWLOC_COMPONENT_TYPE_DISC</a></div><div class="ttdeci">@ HWLOC_COMPONENT_TYPE_DISC</div><div class="ttdoc">The data field must point to a struct hwloc_disc_component.</div><div class="ttdef"><b>Definition:</b> plugins.h:250</div></div>
304 <div class="ttc" id="aa00235_html_gga397a1bf7d21dd073320ad0045340f463adea00cd839c2141c032e1569fd5592bd"><div class="ttname"><a href="a00235.html#gga397a1bf7d21dd073320ad0045340f463adea00cd839c2141c032e1569fd5592bd">HWLOC_COMPONENT_TYPE_XML</a></div><div class="ttdeci">@ HWLOC_COMPONENT_TYPE_XML</div><div class="ttdoc">The data field must point to a struct hwloc_xml_component.</div><div class="ttdef"><b>Definition:</b> plugins.h:253</div></div>
305 <div class="ttc" id="aa00236_html_ga0b5c75b2dc37cea2e8a29c4812baf4b3"><div class="ttname"><a href="a00236.html#ga0b5c75b2dc37cea2e8a29c4812baf4b3">hwloc_alloc_setup_object</a></div><div class="ttdeci">hwloc_obj_t hwloc_alloc_setup_object(hwloc_topology_t topology, hwloc_obj_type_t type, unsigned os_index)</div><div class="ttdoc">Allocate and initialize an object of the given type and physical index.</div></div>
306 <div class="ttc" id="aa00236_html_ga0ef97debde503b56367689b07bb3e901"><div class="ttname"><a href="a00236.html#ga0ef97debde503b56367689b07bb3e901">hwloc_insert_object_by_parent</a></div><div class="ttdeci">void hwloc_insert_object_by_parent(struct hwloc_topology *topology, hwloc_obj_t parent, hwloc_obj_t obj)</div><div class="ttdoc">Insert an object somewhere in the topology.</div></div>
307 <div class="ttc" id="aa00236_html_ga120d8bd74922e1030b621409a6b0be61"><div class="ttname"><a href="a00236.html#ga120d8bd74922e1030b621409a6b0be61">hwloc_topology_reconnect</a></div><div class="ttdeci">int hwloc_topology_reconnect(hwloc_topology_t topology, unsigned long flags)</div><div class="ttdoc">Request a reconnection of children and levels in the topology.</div></div>
308 <div class="ttc" id="aa00236_html_ga1e105cfe3c8e77f34cc6df3841deebbc"><div class="ttname"><a href="a00236.html#ga1e105cfe3c8e77f34cc6df3841deebbc">hwloc__insert_object_by_cpuset</a></div><div class="ttdeci">hwloc_obj_t hwloc__insert_object_by_cpuset(struct hwloc_topology *topology, hwloc_obj_t root, hwloc_obj_t obj, const char *reason)</div><div class="ttdoc">Add an object to the topology.</div></div>
309 <div class="ttc" id="aa00236_html_ga754b61041ceee9685534a2c5d3cd0156"><div class="ttname"><a href="a00236.html#ga754b61041ceee9685534a2c5d3cd0156">hwloc_obj_add_children_sets</a></div><div class="ttdeci">int hwloc_obj_add_children_sets(hwloc_obj_t obj)</div><div class="ttdoc">Setup object cpusets/nodesets by OR'ing its children.</div></div>
310 <div class="ttc" id="aa00236_html_gab527c1e0f243f057d31a724794ad9f88"><div class="ttname"><a href="a00236.html#gab527c1e0f243f057d31a724794ad9f88">hwloc_hide_errors</a></div><div class="ttdeci">int hwloc_hide_errors(void)</div><div class="ttdoc">Check whether insertion errors are hidden.</div></div>
311 <div class="ttc" id="aa00236_html_gac2eaed287bb215cf0bd33014e9e1d374"><div class="ttname"><a href="a00236.html#gac2eaed287bb215cf0bd33014e9e1d374">hwloc_plugin_check_namespace</a></div><div class="ttdeci">static int hwloc_plugin_check_namespace(const char *pluginname, const char *symbol)</div><div class="ttdoc">Make sure that plugins can lookup core symbols.</div><div class="ttdef"><b>Definition:</b> plugins.h:416</div></div>
312 <div class="ttc" id="aa00237_html_ga2f402a43025a8a91e8513be1a15e4635"><div class="ttname"><a href="a00237.html#ga2f402a43025a8a91e8513be1a15e4635">hwloc_filter_check_keep_object_type</a></div><div class="ttdeci">static int hwloc_filter_check_keep_object_type(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Check whether a non-I/O object type should be filtered-out.</div><div class="ttdef"><b>Definition:</b> plugins.h:495</div></div>
313 <div class="ttc" id="aa00237_html_ga4d2fdce071e5646ef147c9ff1539d1c9"><div class="ttname"><a href="a00237.html#ga4d2fdce071e5646ef147c9ff1539d1c9">hwloc_filter_check_keep_object</a></div><div class="ttdeci">static int hwloc_filter_check_keep_object(hwloc_topology_t topology, hwloc_obj_t obj)</div><div class="ttdoc">Check whether the given object should be filtered-out.</div><div class="ttdef"><b>Definition:</b> plugins.h:508</div></div>
314 <div class="ttc" id="aa00237_html_ga60203db6459ebf275bf48c40a37661a0"><div class="ttname"><a href="a00237.html#ga60203db6459ebf275bf48c40a37661a0">hwloc_filter_check_pcidev_subtype_important</a></div><div class="ttdeci">static int hwloc_filter_check_pcidev_subtype_important(unsigned classid)</div><div class="ttdoc">Check whether the given PCI device classid is important.</div><div class="ttdef"><b>Definition:</b> plugins.h:466</div></div>
315 <div class="ttc" id="aa00237_html_gac7d57a6d669820f360cf2a070a396560"><div class="ttname"><a href="a00237.html#gac7d57a6d669820f360cf2a070a396560">hwloc_filter_check_osdev_subtype_important</a></div><div class="ttdeci">static int hwloc_filter_check_osdev_subtype_important(hwloc_obj_osdev_type_t subtype)</div><div class="ttdoc">Check whether the given OS device subtype is important.</div><div class="ttdef"><b>Definition:</b> plugins.h:483</div></div>
316 <div class="ttc" id="aa00238_html_ga51d1ebcbf9729987c9d17df3aa57d209"><div class="ttname"><a href="a00238.html#ga51d1ebcbf9729987c9d17df3aa57d209">hwloc_pcidisc_find_linkspeed</a></div><div class="ttdeci">int hwloc_pcidisc_find_linkspeed(const unsigned char *config, unsigned offset, float *linkspeed)</div><div class="ttdoc">Fill linkspeed by reading the PCI config space where PCI_CAP_ID_EXP is at position offset.</div></div>
317 <div class="ttc" id="aa00238_html_ga6c55fb80c3d0c8c8e61078b3f38adde8"><div class="ttname"><a href="a00238.html#ga6c55fb80c3d0c8c8e61078b3f38adde8">hwloc_pcidisc_check_bridge_type</a></div><div class="ttdeci">hwloc_obj_type_t hwloc_pcidisc_check_bridge_type(unsigned device_class, const unsigned char *config)</div><div class="ttdoc">Return the hwloc object type (PCI device or Bridge) for the given class and configuration space.</div></div>
318 <div class="ttc" id="aa00238_html_ga706f71cfea09d547d2cbafa642d6e03b"><div class="ttname"><a href="a00238.html#ga706f71cfea09d547d2cbafa642d6e03b">hwloc_pcidisc_find_cap</a></div><div class="ttdeci">unsigned hwloc_pcidisc_find_cap(const unsigned char *config, unsigned cap)</div><div class="ttdoc">Return the offset of the given capability in the PCI config space buffer.</div></div>
319 <div class="ttc" id="aa00238_html_ga95acf6822a49447c11067d0b843965ba"><div class="ttname"><a href="a00238.html#ga95acf6822a49447c11067d0b843965ba">hwloc_pcidisc_find_bridge_buses</a></div><div class="ttdeci">int hwloc_pcidisc_find_bridge_buses(unsigned domain, unsigned bus, unsigned dev, unsigned func, unsigned *secondary_busp, unsigned *subordinate_busp, const unsigned char *config)</div><div class="ttdoc">Fills the attributes of the given PCI bridge using the given PCI config space.</div></div>
320 <div class="ttc" id="aa00238_html_gab76ddc4f55db8101ef0d44317965128c"><div class="ttname"><a href="a00238.html#gab76ddc4f55db8101ef0d44317965128c">hwloc_pcidisc_tree_insert_by_busid</a></div><div class="ttdeci">void hwloc_pcidisc_tree_insert_by_busid(struct hwloc_obj **treep, struct hwloc_obj *obj)</div><div class="ttdoc">Insert a PCI object in the given PCI tree by looking at PCI bus IDs.</div></div>
321 <div class="ttc" id="aa00238_html_gabda1d6c1799e50b9226f8a4da9bd29ea"><div class="ttname"><a href="a00238.html#gabda1d6c1799e50b9226f8a4da9bd29ea">hwloc_pcidisc_tree_attach</a></div><div class="ttdeci">int hwloc_pcidisc_tree_attach(struct hwloc_topology *topology, struct hwloc_obj *tree)</div><div class="ttdoc">Add some hostbridges on top of the given tree of PCI objects and attach them to the topology.</div></div>
322 <div class="ttc" id="aa00239_html_ga7964833550947636ab8975909de3fa98"><div class="ttname"><a href="a00239.html#ga7964833550947636ab8975909de3fa98">hwloc_pci_find_parent_by_busid</a></div><div class="ttdeci">struct hwloc_obj * hwloc_pci_find_parent_by_busid(struct hwloc_topology *topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)</div><div class="ttdoc">Find the normal parent of a PCI bus ID.</div></div>
323 <div class="ttc" id="aa00244_html"><div class="ttname"><a href="a00244.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:395</div></div>
324 <div class="ttc" id="aa00244_html_acc4f0803f244867e68fe0036800be5de"><div class="ttname"><a href="a00244.html#acc4f0803f244867e68fe0036800be5de">hwloc_obj::type</a></div><div class="ttdeci">hwloc_obj_type_t type</div><div class="ttdoc">Type of object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:397</div></div>
325 <div class="ttc" id="aa00244_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:414</div></div>
326 <div class="ttc" id="aa00248_html_a0b66da7ab072f7c016f8ed86701f5a7c"><div class="ttname"><a href="a00248.html#a0b66da7ab072f7c016f8ed86701f5a7c">hwloc_obj_attr_u::pcidev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_pcidev_attr_s pcidev</div></div>
327 <div class="ttc" id="aa00248_html_aaf7a5c38b5185703ff18c46ad2761dcf"><div class="ttname"><a href="a00248.html#aaf7a5c38b5185703ff18c46ad2761dcf">hwloc_obj_attr_u::osdev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_osdev_attr_s osdev</div></div>
328 <div class="ttc" id="aa00268_html_aee735352d9f1686fd290fc6d6397c334"><div class="ttname"><a href="a00268.html#aee735352d9f1686fd290fc6d6397c334">hwloc_obj_attr_u::hwloc_pcidev_attr_s::class_id</a></div><div class="ttdeci">unsigned short class_id</div><div class="ttdef"><b>Definition:</b> hwloc.h:639</div></div>
329 <div class="ttc" id="aa00288_html_a31e019e27e54ac6138d04be639bb96f9"><div class="ttname"><a href="a00288.html#a31e019e27e54ac6138d04be639bb96f9">hwloc_obj_attr_u::hwloc_osdev_attr_s::type</a></div><div class="ttdeci">hwloc_obj_osdev_type_t type</div><div class="ttdef"><b>Definition:</b> hwloc.h:665</div></div>
330 <div class="ttc" id="aa00372_html"><div class="ttname"><a href="a00372.html">hwloc_disc_component</a></div><div class="ttdoc">Discovery component structure.</div><div class="ttdef"><b>Definition:</b> plugins.h:38</div></div>
331 <div class="ttc" id="aa00372_html_a4064c3b5d9213027e87caebef380a840"><div class="ttname"><a href="a00372.html#a4064c3b5d9213027e87caebef380a840">hwloc_disc_component::name</a></div><div class="ttdeci">const char * name</div><div class="ttdoc">Name. If this component is built as a plugin, this name does not have to match the plugin filename.</div><div class="ttdef"><b>Definition:</b> plugins.h:42</div></div>
332 <div class="ttc" id="aa00372_html_a61ad3151efa02e3dbad5d919758f9c90"><div class="ttname"><a href="a00372.html#a61ad3151efa02e3dbad5d919758f9c90">hwloc_disc_component::phases</a></div><div class="ttdeci">unsigned phases</div><div class="ttdoc">Discovery phases performed by this component. OR'ed set of hwloc_disc_phase_t.</div><div class="ttdef"><b>Definition:</b> plugins.h:47</div></div>
333 <div class="ttc" id="aa00372_html_acbb9957914dbf7b8f504215aa0c8d3fe"><div class="ttname"><a href="a00372.html#acbb9957914dbf7b8f504215aa0c8d3fe">hwloc_disc_component::excluded_phases</a></div><div class="ttdeci">unsigned excluded_phases</div><div class="ttdoc">Component phases to exclude, as an OR'ed set of hwloc_disc_phase_t.</div><div class="ttdef"><b>Definition:</b> plugins.h:57</div></div>
334 <div class="ttc" id="aa00372_html_ace80cafe2b1732b047b3fc3da47e6517"><div class="ttname"><a href="a00372.html#ace80cafe2b1732b047b3fc3da47e6517">hwloc_disc_component::enabled_by_default</a></div><div class="ttdeci">unsigned enabled_by_default</div><div class="ttdoc">Enabled by default. If unset, if will be disabled unless explicitly requested.</div><div class="ttdef"><b>Definition:</b> plugins.h:81</div></div>
335 <div class="ttc" id="aa00372_html_ae86d283c272c5ae24073a235efbf6b59"><div class="ttname"><a href="a00372.html#ae86d283c272c5ae24073a235efbf6b59">hwloc_disc_component::priority</a></div><div class="ttdeci">unsigned priority</div><div class="ttdoc">Component priority. Used to sort topology-&gt;components, higher priority first. Also used to decide bet...</div><div class="ttdef"><b>Definition:</b> plugins.h:76</div></div>
336 <div class="ttc" id="aa00376_html"><div class="ttname"><a href="a00376.html">hwloc_disc_status</a></div><div class="ttdoc">Discovery status structure.</div><div class="ttdef"><b>Definition:</b> plugins.h:150</div></div>
337 <div class="ttc" id="aa00376_html_a0f95fa42d46a6e7cf8dee8af12afee3a"><div class="ttname"><a href="a00376.html#a0f95fa42d46a6e7cf8dee8af12afee3a">hwloc_disc_status::excluded_phases</a></div><div class="ttdeci">unsigned excluded_phases</div><div class="ttdoc">Dynamically excluded phases. If a component decides during discovery that some phases are no longer n...</div><div class="ttdef"><b>Definition:</b> plugins.h:159</div></div>
338 <div class="ttc" id="aa00376_html_abaf7c8c082d43e133171f0723dbf824b"><div class="ttname"><a href="a00376.html#abaf7c8c082d43e133171f0723dbf824b">hwloc_disc_status::phase</a></div><div class="ttdeci">hwloc_disc_phase_t phase</div><div class="ttdoc">The current discovery phase that is performed. Must match one of the phases in the component phases f...</div><div class="ttdef"><b>Definition:</b> plugins.h:154</div></div>
339 <div class="ttc" id="aa00376_html_ad8b123cecb945a9182eb824ccf8ef9d7"><div class="ttname"><a href="a00376.html#ad8b123cecb945a9182eb824ccf8ef9d7">hwloc_disc_status::flags</a></div><div class="ttdeci">unsigned long flags</div><div class="ttdoc">OR'ed set of hwloc_disc_status_flag_e.</div><div class="ttdef"><b>Definition:</b> plugins.h:162</div></div>
340 <div class="ttc" id="aa00380_html"><div class="ttname"><a href="a00380.html">hwloc_backend</a></div><div class="ttdoc">Discovery backend structure.</div><div class="ttdef"><b>Definition:</b> plugins.h:183</div></div>
341 <div class="ttc" id="aa00380_html_a2ea5bd36b7f06efdb65b98b32af16c68"><div class="ttname"><a href="a00380.html#a2ea5bd36b7f06efdb65b98b32af16c68">hwloc_backend::private_data</a></div><div class="ttdeci">void * private_data</div><div class="ttdoc">Backend private data, or NULL if none.</div><div class="ttdef"><b>Definition:</b> plugins.h:210</div></div>
342 <div class="ttc" id="aa00380_html_a36c4fa86350525b46340c67b802c69c7"><div class="ttname"><a href="a00380.html#a36c4fa86350525b46340c67b802c69c7">hwloc_backend::disable</a></div><div class="ttdeci">void(* disable)(struct hwloc_backend *backend)</div><div class="ttdoc">Callback for freeing the private_data. May be NULL.</div><div class="ttdef"><b>Definition:</b> plugins.h:214</div></div>
343 <div class="ttc" id="aa00380_html_aaa8eafe495aadd81c2e3c4ec527c10ba"><div class="ttname"><a href="a00380.html#aaa8eafe495aadd81c2e3c4ec527c10ba">hwloc_backend::flags</a></div><div class="ttdeci">unsigned long flags</div><div class="ttdoc">Backend flags, currently always 0.</div><div class="ttdef"><b>Definition:</b> plugins.h:199</div></div>
344 <div class="ttc" id="aa00380_html_aaac253491264c20930f44817270bc502"><div class="ttname"><a href="a00380.html#aaac253491264c20930f44817270bc502">hwloc_backend::get_pci_busid_cpuset</a></div><div class="ttdeci">int(* get_pci_busid_cpuset)(struct hwloc_backend *backend, struct hwloc_pcidev_attr_s *busid, hwloc_bitmap_t cpuset)</div><div class="ttdoc">Callback to retrieve the locality of a PCI object. Called by the PCI core when attaching PCI hierarch...</div><div class="ttdef"><b>Definition:</b> plugins.h:227</div></div>
345 <div class="ttc" id="aa00380_html_ab8806f6db077f1bb2e9d63ec99223f7a"><div class="ttname"><a href="a00380.html#ab8806f6db077f1bb2e9d63ec99223f7a">hwloc_backend::is_thissystem</a></div><div class="ttdeci">int is_thissystem</div><div class="ttdoc">Backend-specific 'is_thissystem' property. Set to 0 if the backend disables the thissystem flag for t...</div><div class="ttdef"><b>Definition:</b> plugins.h:207</div></div>
346 <div class="ttc" id="aa00380_html_accff2cd8404be43c3b44cec05e6f609b"><div class="ttname"><a href="a00380.html#accff2cd8404be43c3b44cec05e6f609b">hwloc_backend::discover</a></div><div class="ttdeci">int(* discover)(struct hwloc_backend *backend, struct hwloc_disc_status *status)</div><div class="ttdoc">Main discovery callback. returns -1 on error, either because it couldn't add its objects ot the exist...</div><div class="ttdef"><b>Definition:</b> plugins.h:221</div></div>
347 <div class="ttc" id="aa00380_html_aeca769840a6ff03e96462a9533adbccd"><div class="ttname"><a href="a00380.html#aeca769840a6ff03e96462a9533adbccd">hwloc_backend::phases</a></div><div class="ttdeci">unsigned phases</div><div class="ttdoc">Discovery phases performed by this component, possibly without some of them if excluded by other comp...</div><div class="ttdef"><b>Definition:</b> plugins.h:196</div></div>
348 <div class="ttc" id="aa00384_html"><div class="ttname"><a href="a00384.html">hwloc_component</a></div><div class="ttdoc">Generic component structure.</div><div class="ttdef"><b>Definition:</b> plugins.h:261</div></div>
349 <div class="ttc" id="aa00384_html_a3250bd6fc9713946991d805e48091b2e"><div class="ttname"><a href="a00384.html#a3250bd6fc9713946991d805e48091b2e">hwloc_component::abi</a></div><div class="ttdeci">unsigned abi</div><div class="ttdoc">Component ABI version, set to HWLOC_COMPONENT_ABI.</div><div class="ttdef"><b>Definition:</b> plugins.h:263</div></div>
350 <div class="ttc" id="aa00384_html_a4612015451a1c706e8ba19114cb8baae"><div class="ttname"><a href="a00384.html#a4612015451a1c706e8ba19114cb8baae">hwloc_component::finalize</a></div><div class="ttdeci">void(* finalize)(unsigned long flags)</div><div class="ttdoc">Process-wide component termination callback.</div><div class="ttdef"><b>Definition:</b> plugins.h:295</div></div>
351 <div class="ttc" id="aa00384_html_a4b8cffd1d943c29fdc102b841b8598d4"><div class="ttname"><a href="a00384.html#a4b8cffd1d943c29fdc102b841b8598d4">hwloc_component::data</a></div><div class="ttdeci">void * data</div><div class="ttdoc">Component data, pointing to a struct hwloc_disc_component or struct hwloc_xml_component.</div><div class="ttdef"><b>Definition:</b> plugins.h:304</div></div>
352 <div class="ttc" id="aa00384_html_a789208ada7e17492cfd3a5a88a6bb0ee"><div class="ttname"><a href="a00384.html#a789208ada7e17492cfd3a5a88a6bb0ee">hwloc_component::type</a></div><div class="ttdeci">hwloc_component_type_t type</div><div class="ttdoc">Component type.</div><div class="ttdef"><b>Definition:</b> plugins.h:298</div></div>
353 <div class="ttc" id="aa00384_html_ab8043c5b4cc0e81aabba586ccb194335"><div class="ttname"><a href="a00384.html#ab8043c5b4cc0e81aabba586ccb194335">hwloc_component::flags</a></div><div class="ttdeci">unsigned long flags</div><div class="ttdoc">Component flags, unused for now.</div><div class="ttdef"><b>Definition:</b> plugins.h:301</div></div>
354 <div class="ttc" id="aa00384_html_aea613546886d9b8221cadba920fe3ebc"><div class="ttname"><a href="a00384.html#aea613546886d9b8221cadba920fe3ebc">hwloc_component::init</a></div><div class="ttdeci">int(* init)(unsigned long flags)</div><div class="ttdoc">Process-wide component initialization callback.</div><div class="ttdef"><b>Definition:</b> plugins.h:282</div></div>
50 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2013-2018 Inria. All rights reserved.</span></div>
51 <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
52 <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> */</span></div>
53 <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160; </div>
54 <div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="preprocessor">#ifndef HWLOC_SHMEM_H</span></div>
55 <div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#define HWLOC_SHMEM_H</span></div>
56 <div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160; </div>
57 <div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &quot;hwloc.h&quot;</span></div>
58 <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; </div>
59 <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
60 <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
61 <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#elif 0</span></div>
62 <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;}</div>
63 <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#endif</span></div>
64 <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160; </div>
65 <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
66 <div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="a00238.html#ga772ab52750cdd0eec85128df24888001"> 53</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00238.html#ga772ab52750cdd0eec85128df24888001">hwloc_shmem_topology_get_length</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
67 <div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordtype">size_t</span> *lengthp,</div>
68 <div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
69 <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; </div>
70 <div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="a00238.html#ga61b20e346fc76f76420e3a88cc80a671"> 82</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00238.html#ga61b20e346fc76f76420e3a88cc80a671">hwloc_shmem_topology_write</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
71 <div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordtype">int</span> fd, hwloc_uint64_t fileoffset,</div>
72 <div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordtype">void</span> *mmap_address, <span class="keywordtype">size_t</span> length,</div>
73 <div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
74 <div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; </div>
75 <div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="a00238.html#ga21545bd0f09d9b554c8e60a630e0e629"> 125</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00238.html#ga21545bd0f09d9b554c8e60a630e0e629">hwloc_shmem_topology_adopt</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> *topologyp,</div>
76 <div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="keywordtype">int</span> fd, hwloc_uint64_t fileoffset,</div>
77 <div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="keywordtype">void</span> *mmap_address, <span class="keywordtype">size_t</span> length,</div>
78 <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
79 <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
80 <div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
81 <div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;<span class="preprocessor">#endif</span></div>
82 <div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; </div>
83 <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; </div>
84 <div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_SHMEM_H */</span><span class="preprocessor"></span></div>
85 <div class="ttc" id="aa00195_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
86 <div class="ttc" id="aa00238_html_ga21545bd0f09d9b554c8e60a630e0e629"><div class="ttname"><a href="a00238.html#ga21545bd0f09d9b554c8e60a630e0e629">hwloc_shmem_topology_adopt</a></div><div class="ttdeci">int hwloc_shmem_topology_adopt(hwloc_topology_t *topologyp, int fd, hwloc_uint64_t fileoffset, void *mmap_address, size_t length, unsigned long flags)</div><div class="ttdoc">Adopt a shared memory topology stored in a file.</div></div>
87 <div class="ttc" id="aa00238_html_ga61b20e346fc76f76420e3a88cc80a671"><div class="ttname"><a href="a00238.html#ga61b20e346fc76f76420e3a88cc80a671">hwloc_shmem_topology_write</a></div><div class="ttdeci">int hwloc_shmem_topology_write(hwloc_topology_t topology, int fd, hwloc_uint64_t fileoffset, void *mmap_address, size_t length, unsigned long flags)</div><div class="ttdoc">Duplicate a topology to a shared memory file.</div></div>
88 <div class="ttc" id="aa00238_html_ga772ab52750cdd0eec85128df24888001"><div class="ttname"><a href="a00238.html#ga772ab52750cdd0eec85128df24888001">hwloc_shmem_topology_get_length</a></div><div class="ttdeci">int hwloc_shmem_topology_get_length(hwloc_topology_t topology, size_t *lengthp, unsigned long flags)</div><div class="ttdoc">Get the required shared memory length for storing a topology.</div></div>
35589 </div><!-- fragment --></div><!-- contents -->
35690 <!-- start footer part -->
35791 <hr class="footer"/><address class="footer"><small>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): netloc.h Source File</title>
7 <title>Hardware Locality (hwloc): plugins.h Source File</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3838 <div id="main-nav"></div>
3939 <div id="nav-path" class="navpath">
4040 <ul>
41 <li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li> </ul>
41 <li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a class="el" href="dir_5cb306d949c7931a3b6c77517393dd34.html">hwloc</a></li> </ul>
4242 </div>
4343 </div><!-- top -->
4444 <div class="header">
4545 <div class="headertitle">
46 <div class="title">netloc.h</div> </div>
46 <div class="title">plugins.h</div> </div>
4747 </div><!--header-->
4848 <div class="contents">
4949 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
50 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2013-2014 Cisco Systems, Inc. All rights reserved.</span></div>
51 <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * Copyright © 2013-2014 University of Wisconsin-La Crosse.</span></div>
52 <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * All rights reserved.</span></div>
53 <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * Copyright © 2015-2016 Inria. All rights reserved.</span></div>
54 <div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> *</span></div>
55 <div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * $COPYRIGHT$</span></div>
56 <div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> *</span></div>
57 <div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Additional copyrights may follow</span></div>
58 <div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
59 <div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> *</span></div>
60 <div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * $HEADER$</span></div>
61 <div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> */</span></div>
62 <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; </div>
63 <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef _NETLOC_H_</span></div>
64 <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define _NETLOC_H_</span></div>
50 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2013-2021 Inria. All rights reserved.</span></div>
51 <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * Copyright © 2016 Cisco Systems, Inc. All rights reserved.</span></div>
52 <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
53 <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> */</span></div>
54 <div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160; </div>
55 <div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="preprocessor">#ifndef HWLOC_PLUGINS_H</span></div>
56 <div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#define HWLOC_PLUGINS_H</span></div>
57 <div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160; </div>
58 <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="keyword">struct </span><a class="code" href="a00386.html">hwloc_backend</a>;</div>
59 <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160; </div>
60 <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &quot;hwloc.h&quot;</span></div>
6561 <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; </div>
66 <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#ifndef _GNU_SOURCE</span></div>
67 <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#define _GNU_SOURCE </span><span class="comment">// for asprintf</span></div>
68 <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#endif</span></div>
69 <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
70 <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;hwloc/autogen/config.h&gt;</span></div>
71 <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
72 <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &lt;hwloc.h&gt;</span></div>
73 <div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; </div>
74 <div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
75 <div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
76 <div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#endif</span></div>
77 <div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
78 <div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="keyword">enum</span> {</div>
79 <div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea4deb864e4b46fe70b83c3220442a627c"> 37</a></span>&#160; <a class="code" href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea4deb864e4b46fe70b83c3220442a627c">NETLOC_SUCCESS</a> = 0, </div>
80 <div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea4b33f8da6efc963562a93569ac8b349a"> 38</a></span>&#160; <a class="code" href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea4b33f8da6efc963562a93569ac8b349a">NETLOC_ERROR</a> = -1, </div>
81 <div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea6e4322619d38dec18dbd16a606b14aa8"> 39</a></span>&#160; <a class="code" href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea6e4322619d38dec18dbd16a606b14aa8">NETLOC_ERROR_NOTDIR</a> = -2, </div>
82 <div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea81bc77a77d1a42054dc64b11a4cc8612"> 40</a></span>&#160; <a class="code" href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea81bc77a77d1a42054dc64b11a4cc8612">NETLOC_ERROR_NOENT</a> = -3, </div>
83 <div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea0dc7c18a5a3d027bf3f835eacdbed932"> 41</a></span>&#160; <a class="code" href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea0dc7c18a5a3d027bf3f835eacdbed932">NETLOC_ERROR_EMPTY</a> = -4, </div>
84 <div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea4485021555c6cb24d5f6e391b1bd6dee"> 42</a></span>&#160; <a class="code" href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea4485021555c6cb24d5f6e391b1bd6dee">NETLOC_ERROR_MULTIPLE</a> = -5, </div>
85 <div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea4a55d10dfc1eb5c84027de7d48dfac4d"> 43</a></span>&#160; <a class="code" href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea4a55d10dfc1eb5c84027de7d48dfac4d">NETLOC_ERROR_NOT_IMPL</a> = -6, </div>
86 <div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea67dfc8498fa899900e2231fad4538556"> 44</a></span>&#160; <a class="code" href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea67dfc8498fa899900e2231fad4538556">NETLOC_ERROR_EXISTS</a> = -7, </div>
87 <div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea61b43e2553779d3610f894fd6698a6ee"> 45</a></span>&#160; <a class="code" href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea61b43e2553779d3610f894fd6698a6ee">NETLOC_ERROR_NOT_FOUND</a> = -8, </div>
88 <div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <a class="code" href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea39974c6110bed527cb7658672b8eeeb9">NETLOC_ERROR_MAX</a> = -9 </div>
89 <div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea39974c6110bed527cb7658672b8eeeb9"> 47</a></span>&#160;};</div>
90 <div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; </div>
91 <div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; </div>
92 <div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
93 <div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
94 <div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="preprocessor">#endif</span></div>
95 <div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; </div>
96 <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// _NETLOC_H_</span></div>
97 <div class="ttc" id="aa00240_html_gga61dadd085c1777f559549e05962b2c9ea0dc7c18a5a3d027bf3f835eacdbed932"><div class="ttname"><a href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea0dc7c18a5a3d027bf3f835eacdbed932">NETLOC_ERROR_EMPTY</a></div><div class="ttdeci">@ NETLOC_ERROR_EMPTY</div><div class="ttdef"><b>Definition:</b> netloc.h:41</div></div>
98 <div class="ttc" id="aa00240_html_gga61dadd085c1777f559549e05962b2c9ea39974c6110bed527cb7658672b8eeeb9"><div class="ttname"><a href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea39974c6110bed527cb7658672b8eeeb9">NETLOC_ERROR_MAX</a></div><div class="ttdeci">@ NETLOC_ERROR_MAX</div><div class="ttdef"><b>Definition:</b> netloc.h:46</div></div>
99 <div class="ttc" id="aa00240_html_gga61dadd085c1777f559549e05962b2c9ea4485021555c6cb24d5f6e391b1bd6dee"><div class="ttname"><a href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea4485021555c6cb24d5f6e391b1bd6dee">NETLOC_ERROR_MULTIPLE</a></div><div class="ttdeci">@ NETLOC_ERROR_MULTIPLE</div><div class="ttdef"><b>Definition:</b> netloc.h:42</div></div>
100 <div class="ttc" id="aa00240_html_gga61dadd085c1777f559549e05962b2c9ea4a55d10dfc1eb5c84027de7d48dfac4d"><div class="ttname"><a href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea4a55d10dfc1eb5c84027de7d48dfac4d">NETLOC_ERROR_NOT_IMPL</a></div><div class="ttdeci">@ NETLOC_ERROR_NOT_IMPL</div><div class="ttdef"><b>Definition:</b> netloc.h:43</div></div>
101 <div class="ttc" id="aa00240_html_gga61dadd085c1777f559549e05962b2c9ea4b33f8da6efc963562a93569ac8b349a"><div class="ttname"><a href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea4b33f8da6efc963562a93569ac8b349a">NETLOC_ERROR</a></div><div class="ttdeci">@ NETLOC_ERROR</div><div class="ttdef"><b>Definition:</b> netloc.h:38</div></div>
102 <div class="ttc" id="aa00240_html_gga61dadd085c1777f559549e05962b2c9ea4deb864e4b46fe70b83c3220442a627c"><div class="ttname"><a href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea4deb864e4b46fe70b83c3220442a627c">NETLOC_SUCCESS</a></div><div class="ttdeci">@ NETLOC_SUCCESS</div><div class="ttdef"><b>Definition:</b> netloc.h:37</div></div>
103 <div class="ttc" id="aa00240_html_gga61dadd085c1777f559549e05962b2c9ea61b43e2553779d3610f894fd6698a6ee"><div class="ttname"><a href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea61b43e2553779d3610f894fd6698a6ee">NETLOC_ERROR_NOT_FOUND</a></div><div class="ttdeci">@ NETLOC_ERROR_NOT_FOUND</div><div class="ttdef"><b>Definition:</b> netloc.h:45</div></div>
104 <div class="ttc" id="aa00240_html_gga61dadd085c1777f559549e05962b2c9ea67dfc8498fa899900e2231fad4538556"><div class="ttname"><a href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea67dfc8498fa899900e2231fad4538556">NETLOC_ERROR_EXISTS</a></div><div class="ttdeci">@ NETLOC_ERROR_EXISTS</div><div class="ttdef"><b>Definition:</b> netloc.h:44</div></div>
105 <div class="ttc" id="aa00240_html_gga61dadd085c1777f559549e05962b2c9ea6e4322619d38dec18dbd16a606b14aa8"><div class="ttname"><a href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea6e4322619d38dec18dbd16a606b14aa8">NETLOC_ERROR_NOTDIR</a></div><div class="ttdeci">@ NETLOC_ERROR_NOTDIR</div><div class="ttdef"><b>Definition:</b> netloc.h:39</div></div>
106 <div class="ttc" id="aa00240_html_gga61dadd085c1777f559549e05962b2c9ea81bc77a77d1a42054dc64b11a4cc8612"><div class="ttname"><a href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea81bc77a77d1a42054dc64b11a4cc8612">NETLOC_ERROR_NOENT</a></div><div class="ttdeci">@ NETLOC_ERROR_NOENT</div><div class="ttdef"><b>Definition:</b> netloc.h:40</div></div>
62 <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#ifdef HWLOC_INSIDE_PLUGIN</span></div>
63 <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">/* needed for hwloc_plugin_check_namespace() */</span></div>
64 <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#ifdef HWLOC_HAVE_LTDL</span></div>
65 <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &lt;ltdl.h&gt;</span></div>
66 <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#else</span></div>
67 <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &lt;dlfcn.h&gt;</span></div>
68 <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#endif</span></div>
69 <div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#endif</span></div>
70 <div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160; </div>
71 <div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160; </div>
72 <div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160; </div>
73 <div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="a00378.html"> 41</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00378.html">hwloc_disc_component</a> {</div>
74 <div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="a00378.html#a4064c3b5d9213027e87caebef380a840"> 45</a></span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="a00378.html#a4064c3b5d9213027e87caebef380a840">name</a>;</div>
75 <div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; </div>
76 <div class="line"><a name="l00050"></a><span class="lineno"><a class="line" href="a00378.html#a61ad3151efa02e3dbad5d919758f9c90"> 50</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00378.html#a61ad3151efa02e3dbad5d919758f9c90">phases</a>;</div>
77 <div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; </div>
78 <div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="a00378.html#acbb9957914dbf7b8f504215aa0c8d3fe"> 60</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00378.html#acbb9957914dbf7b8f504215aa0c8d3fe">excluded_phases</a>;</div>
79 <div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; </div>
80 <div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keyword">struct </span><a class="code" href="a00386.html">hwloc_backend</a> * (*instantiate)(<span class="keyword">struct </span>hwloc_topology *topology, <span class="keyword">struct </span><a class="code" href="a00378.html">hwloc_disc_component</a> *component, <span class="keywordtype">unsigned</span> <a class="code" href="a00378.html#acbb9957914dbf7b8f504215aa0c8d3fe">excluded_phases</a>, <span class="keyword">const</span> <span class="keywordtype">void</span> *data1, <span class="keyword">const</span> <span class="keywordtype">void</span> *data2, <span class="keyword">const</span> <span class="keywordtype">void</span> *data3);</div>
81 <div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; </div>
82 <div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="a00378.html#ae86d283c272c5ae24073a235efbf6b59"> 79</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00378.html#ae86d283c272c5ae24073a235efbf6b59">priority</a>;</div>
83 <div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; </div>
84 <div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="a00378.html#ace80cafe2b1732b047b3fc3da47e6517"> 84</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00378.html#ace80cafe2b1732b047b3fc3da47e6517">enabled_by_default</a>;</div>
85 <div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; </div>
86 <div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="keyword">struct </span><a class="code" href="a00378.html">hwloc_disc_component</a> * next;</div>
87 <div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;};</div>
88 <div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; </div>
89 <div class="line"><a name="l00106"></a><span class="lineno"><a class="line" href="a00240.html#ga8c314121c2fc478161bcce758688b9a1"> 106</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="a00240.html#ga8c314121c2fc478161bcce758688b9a1">hwloc_disc_phase_e</a> {</div>
90 <div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="a00240.html#gga8c314121c2fc478161bcce758688b9a1ab41c626c79e9ccb1e7d41e7076972283"> 111</a></span>&#160; <a class="code" href="a00240.html#gga8c314121c2fc478161bcce758688b9a1ab41c626c79e9ccb1e7d41e7076972283">HWLOC_DISC_PHASE_GLOBAL</a> = (1U&lt;&lt;0),</div>
91 <div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; </div>
92 <div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="a00240.html#gga8c314121c2fc478161bcce758688b9a1a6360474df197027761a69bd5fc620250"> 115</a></span>&#160; <a class="code" href="a00240.html#gga8c314121c2fc478161bcce758688b9a1a6360474df197027761a69bd5fc620250">HWLOC_DISC_PHASE_CPU</a> = (1U&lt;&lt;1),</div>
93 <div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; </div>
94 <div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="a00240.html#gga8c314121c2fc478161bcce758688b9a1ac4264a243844c5fbbff495cdb1b4d51d"> 119</a></span>&#160; <a class="code" href="a00240.html#gga8c314121c2fc478161bcce758688b9a1ac4264a243844c5fbbff495cdb1b4d51d">HWLOC_DISC_PHASE_MEMORY</a> = (1U&lt;&lt;2),</div>
95 <div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; </div>
96 <div class="line"><a name="l00123"></a><span class="lineno"><a class="line" href="a00240.html#gga8c314121c2fc478161bcce758688b9a1a677c52064dd987af4988346319b3675a"> 123</a></span>&#160; <a class="code" href="a00240.html#gga8c314121c2fc478161bcce758688b9a1a677c52064dd987af4988346319b3675a">HWLOC_DISC_PHASE_PCI</a> = (1U&lt;&lt;3),</div>
97 <div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; </div>
98 <div class="line"><a name="l00127"></a><span class="lineno"><a class="line" href="a00240.html#gga8c314121c2fc478161bcce758688b9a1aa8e10626cba9af72f5605a1acbdc0015"> 127</a></span>&#160; <a class="code" href="a00240.html#gga8c314121c2fc478161bcce758688b9a1aa8e10626cba9af72f5605a1acbdc0015">HWLOC_DISC_PHASE_IO</a> = (1U&lt;&lt;4),</div>
99 <div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; </div>
100 <div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="a00240.html#gga8c314121c2fc478161bcce758688b9a1a8a7cde9bff0ab0d085b102a3e934939b"> 131</a></span>&#160; <a class="code" href="a00240.html#gga8c314121c2fc478161bcce758688b9a1a8a7cde9bff0ab0d085b102a3e934939b">HWLOC_DISC_PHASE_MISC</a> = (1U&lt;&lt;5),</div>
101 <div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; </div>
102 <div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="a00240.html#gga8c314121c2fc478161bcce758688b9a1a68ca5c7ad75a6d9e5355689411621773"> 135</a></span>&#160; <a class="code" href="a00240.html#gga8c314121c2fc478161bcce758688b9a1a68ca5c7ad75a6d9e5355689411621773">HWLOC_DISC_PHASE_ANNOTATE</a> = (1U&lt;&lt;6),</div>
103 <div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; </div>
104 <div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <a class="code" href="a00240.html#gga8c314121c2fc478161bcce758688b9a1ada3ed3f00e74909353d6ea4a96cde5ad">HWLOC_DISC_PHASE_TWEAK</a> = (1U&lt;&lt;7)</div>
105 <div class="line"><a name="l00143"></a><span class="lineno"><a class="line" href="a00240.html#ga600bba1a62022d5f516800649b1edb61"> 143</a></span>&#160;} <a class="code" href="a00240.html#ga600bba1a62022d5f516800649b1edb61">hwloc_disc_phase_t</a>;</div>
106 <div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; </div>
107 <div class="line"><a name="l00146"></a><span class="lineno"><a class="line" href="a00240.html#gaae1b38cf9b12e489884ce2a07275964b"> 146</a></span>&#160;<span class="keyword">enum</span> <a class="code" href="a00240.html#gaae1b38cf9b12e489884ce2a07275964b">hwloc_disc_status_flag_e</a> {</div>
108 <div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <a class="code" href="a00240.html#ggaae1b38cf9b12e489884ce2a07275964ba205d644d54a0840bd9165fce7d19e6b1">HWLOC_DISC_STATUS_FLAG_GOT_ALLOWED_RESOURCES</a> = (1UL&lt;&lt;1)</div>
109 <div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="a00240.html#ggaae1b38cf9b12e489884ce2a07275964ba205d644d54a0840bd9165fce7d19e6b1"> 149</a></span>&#160;};</div>
110 <div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; </div>
111 <div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="a00382.html"> 156</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00382.html">hwloc_disc_status</a> {</div>
112 <div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="a00382.html#abaf7c8c082d43e133171f0723dbf824b"> 160</a></span>&#160; <a class="code" href="a00240.html#ga600bba1a62022d5f516800649b1edb61">hwloc_disc_phase_t</a> <a class="code" href="a00382.html#abaf7c8c082d43e133171f0723dbf824b">phase</a>;</div>
113 <div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; </div>
114 <div class="line"><a name="l00165"></a><span class="lineno"><a class="line" href="a00382.html#a0f95fa42d46a6e7cf8dee8af12afee3a"> 165</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00382.html#a0f95fa42d46a6e7cf8dee8af12afee3a">excluded_phases</a>;</div>
115 <div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; </div>
116 <div class="line"><a name="l00168"></a><span class="lineno"><a class="line" href="a00382.html#ad8b123cecb945a9182eb824ccf8ef9d7"> 168</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="a00382.html#ad8b123cecb945a9182eb824ccf8ef9d7">flags</a>;</div>
117 <div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;};</div>
118 <div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; </div>
119 <div class="line"><a name="l00189"></a><span class="lineno"><a class="line" href="a00386.html"> 189</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00386.html">hwloc_backend</a> {</div>
120 <div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keyword">struct </span><a class="code" href="a00378.html">hwloc_disc_component</a> * component;</div>
121 <div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="keyword">struct </span>hwloc_topology * topology;</div>
122 <div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keywordtype">int</span> envvar_forced;</div>
123 <div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <span class="keyword">struct </span><a class="code" href="a00386.html">hwloc_backend</a> * next;</div>
124 <div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; </div>
125 <div class="line"><a name="l00202"></a><span class="lineno"><a class="line" href="a00386.html#aeca769840a6ff03e96462a9533adbccd"> 202</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00386.html#aeca769840a6ff03e96462a9533adbccd">phases</a>;</div>
126 <div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; </div>
127 <div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="a00386.html#aaa8eafe495aadd81c2e3c4ec527c10ba"> 205</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="a00386.html#aaa8eafe495aadd81c2e3c4ec527c10ba">flags</a>;</div>
128 <div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; </div>
129 <div class="line"><a name="l00213"></a><span class="lineno"><a class="line" href="a00386.html#ab8806f6db077f1bb2e9d63ec99223f7a"> 213</a></span>&#160; <span class="keywordtype">int</span> <a class="code" href="a00386.html#ab8806f6db077f1bb2e9d63ec99223f7a">is_thissystem</a>;</div>
130 <div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; </div>
131 <div class="line"><a name="l00216"></a><span class="lineno"><a class="line" href="a00386.html#a2ea5bd36b7f06efdb65b98b32af16c68"> 216</a></span>&#160; <span class="keywordtype">void</span> * <a class="code" href="a00386.html#a2ea5bd36b7f06efdb65b98b32af16c68">private_data</a>;</div>
132 <div class="line"><a name="l00220"></a><span class="lineno"><a class="line" href="a00386.html#a36c4fa86350525b46340c67b802c69c7"> 220</a></span>&#160; void (*<a class="code" href="a00386.html#a36c4fa86350525b46340c67b802c69c7">disable</a>)(<span class="keyword">struct </span><a class="code" href="a00386.html">hwloc_backend</a> *backend);</div>
133 <div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; </div>
134 <div class="line"><a name="l00227"></a><span class="lineno"><a class="line" href="a00386.html#accff2cd8404be43c3b44cec05e6f609b"> 227</a></span>&#160; int (*<a class="code" href="a00386.html#accff2cd8404be43c3b44cec05e6f609b">discover</a>)(<span class="keyword">struct </span><a class="code" href="a00386.html">hwloc_backend</a> *backend, <span class="keyword">struct </span><a class="code" href="a00382.html">hwloc_disc_status</a> *status);</div>
135 <div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; </div>
136 <div class="line"><a name="l00233"></a><span class="lineno"><a class="line" href="a00386.html#aaac253491264c20930f44817270bc502"> 233</a></span>&#160; int (*<a class="code" href="a00386.html#aaac253491264c20930f44817270bc502">get_pci_busid_cpuset</a>)(<span class="keyword">struct </span><a class="code" href="a00386.html">hwloc_backend</a> *backend, <span class="keyword">struct </span>hwloc_pcidev_attr_s *busid, <a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> cpuset);</div>
137 <div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;};</div>
138 <div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; </div>
139 <div class="line"><a name="l00239"></a><span class="lineno"><a class="line" href="a00240.html#gadb068565ab6043cbe4d16bfcce067a61"> 239</a></span>&#160;HWLOC_DECLSPEC <span class="keyword">struct </span><a class="code" href="a00386.html">hwloc_backend</a> * <a class="code" href="a00240.html#gadb068565ab6043cbe4d16bfcce067a61">hwloc_backend_alloc</a>(<span class="keyword">struct</span> hwloc_topology *topology, <span class="keyword">struct</span> <a class="code" href="a00378.html">hwloc_disc_component</a> *component);</div>
140 <div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; </div>
141 <div class="line"><a name="l00242"></a><span class="lineno"><a class="line" href="a00240.html#ga4715779d7191833e9b1a7490989a7497"> 242</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00240.html#ga4715779d7191833e9b1a7490989a7497">hwloc_backend_enable</a>(<span class="keyword">struct</span> <a class="code" href="a00386.html">hwloc_backend</a> *backend);</div>
142 <div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; </div>
143 <div class="line"><a name="l00257"></a><span class="lineno"><a class="line" href="a00241.html#ga397a1bf7d21dd073320ad0045340f463"> 257</a></span>&#160;<span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="a00241.html#ga397a1bf7d21dd073320ad0045340f463">hwloc_component_type_e</a> {</div>
144 <div class="line"><a name="l00259"></a><span class="lineno"><a class="line" href="a00241.html#gga397a1bf7d21dd073320ad0045340f463a5d6e561f467fe9795a29e7368b613900"> 259</a></span>&#160; <a class="code" href="a00241.html#gga397a1bf7d21dd073320ad0045340f463a5d6e561f467fe9795a29e7368b613900">HWLOC_COMPONENT_TYPE_DISC</a>,</div>
145 <div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; </div>
146 <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <a class="code" href="a00241.html#gga397a1bf7d21dd073320ad0045340f463adea00cd839c2141c032e1569fd5592bd">HWLOC_COMPONENT_TYPE_XML</a></div>
147 <div class="line"><a name="l00263"></a><span class="lineno"><a class="line" href="a00241.html#ga31a5a455f4e666b936f0a9e8fb9a0f47"> 263</a></span>&#160;} <a class="code" href="a00241.html#ga31a5a455f4e666b936f0a9e8fb9a0f47">hwloc_component_type_t</a>;</div>
148 <div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; </div>
149 <div class="line"><a name="l00270"></a><span class="lineno"><a class="line" href="a00390.html"> 270</a></span>&#160;<span class="keyword">struct </span><a class="code" href="a00390.html">hwloc_component</a> {</div>
150 <div class="line"><a name="l00272"></a><span class="lineno"><a class="line" href="a00390.html#a3250bd6fc9713946991d805e48091b2e"> 272</a></span>&#160; <span class="keywordtype">unsigned</span> <a class="code" href="a00390.html#a3250bd6fc9713946991d805e48091b2e">abi</a>;</div>
151 <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; </div>
152 <div class="line"><a name="l00291"></a><span class="lineno"><a class="line" href="a00390.html#aea613546886d9b8221cadba920fe3ebc"> 291</a></span>&#160; int (*<a class="code" href="a00390.html#aea613546886d9b8221cadba920fe3ebc">init</a>)(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="a00390.html#ab8043c5b4cc0e81aabba586ccb194335">flags</a>);</div>
153 <div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; </div>
154 <div class="line"><a name="l00304"></a><span class="lineno"><a class="line" href="a00390.html#a4612015451a1c706e8ba19114cb8baae"> 304</a></span>&#160; void (*<a class="code" href="a00390.html#a4612015451a1c706e8ba19114cb8baae">finalize</a>)(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="a00390.html#ab8043c5b4cc0e81aabba586ccb194335">flags</a>);</div>
155 <div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; </div>
156 <div class="line"><a name="l00307"></a><span class="lineno"><a class="line" href="a00390.html#a789208ada7e17492cfd3a5a88a6bb0ee"> 307</a></span>&#160; <a class="code" href="a00241.html#ga31a5a455f4e666b936f0a9e8fb9a0f47">hwloc_component_type_t</a> <a class="code" href="a00390.html#a789208ada7e17492cfd3a5a88a6bb0ee">type</a>;</div>
157 <div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; </div>
158 <div class="line"><a name="l00310"></a><span class="lineno"><a class="line" href="a00390.html#ab8043c5b4cc0e81aabba586ccb194335"> 310</a></span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="a00390.html#ab8043c5b4cc0e81aabba586ccb194335">flags</a>;</div>
159 <div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; </div>
160 <div class="line"><a name="l00313"></a><span class="lineno"><a class="line" href="a00390.html#a4b8cffd1d943c29fdc102b841b8598d4"> 313</a></span>&#160; <span class="keywordtype">void</span> * <a class="code" href="a00390.html#a4b8cffd1d943c29fdc102b841b8598d4">data</a>;</div>
161 <div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;};</div>
162 <div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; </div>
163 <div class="line"><a name="l00342"></a><span class="lineno"><a class="line" href="a00242.html#gab527c1e0f243f057d31a724794ad9f88"> 342</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00242.html#gab527c1e0f243f057d31a724794ad9f88">hwloc_hide_errors</a>(<span class="keywordtype">void</span>);</div>
164 <div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; </div>
165 <div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160;HWLOC_DECLSPEC <a class="code" href="a00250.html">hwloc_obj_t</a></div>
166 <div class="line"><a name="l00373"></a><span class="lineno"><a class="line" href="a00242.html#ga1e105cfe3c8e77f34cc6df3841deebbc"> 373</a></span>&#160;<a class="code" href="a00242.html#ga1e105cfe3c8e77f34cc6df3841deebbc">hwloc__insert_object_by_cpuset</a>(<span class="keyword">struct</span> hwloc_topology *topology, <a class="code" href="a00250.html">hwloc_obj_t</a> root,</div>
167 <div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <a class="code" href="a00250.html">hwloc_obj_t</a> obj, <span class="keyword">const</span> <span class="keywordtype">char</span> *reason);</div>
168 <div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; </div>
169 <div class="line"><a name="l00392"></a><span class="lineno"><a class="line" href="a00242.html#ga0ef97debde503b56367689b07bb3e901"> 392</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> <a class="code" href="a00242.html#ga0ef97debde503b56367689b07bb3e901">hwloc_insert_object_by_parent</a>(<span class="keyword">struct</span> hwloc_topology *topology, <a class="code" href="a00250.html">hwloc_obj_t</a> parent, <a class="code" href="a00250.html">hwloc_obj_t</a> obj);</div>
170 <div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; </div>
171 <div class="line"><a name="l00398"></a><span class="lineno"><a class="line" href="a00242.html#ga0b5c75b2dc37cea2e8a29c4812baf4b3"> 398</a></span>&#160;HWLOC_DECLSPEC <a class="code" href="a00250.html">hwloc_obj_t</a> <a class="code" href="a00242.html#ga0b5c75b2dc37cea2e8a29c4812baf4b3">hwloc_alloc_setup_object</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, <span class="keywordtype">unsigned</span> os_index);</div>
172 <div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; </div>
173 <div class="line"><a name="l00408"></a><span class="lineno"><a class="line" href="a00242.html#ga754b61041ceee9685534a2c5d3cd0156"> 408</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00242.html#ga754b61041ceee9685534a2c5d3cd0156">hwloc_obj_add_children_sets</a>(<a class="code" href="a00250.html">hwloc_obj_t</a> obj);</div>
174 <div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; </div>
175 <div class="line"><a name="l00417"></a><span class="lineno"><a class="line" href="a00242.html#ga120d8bd74922e1030b621409a6b0be61"> 417</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00242.html#ga120d8bd74922e1030b621409a6b0be61">hwloc_topology_reconnect</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags __hwloc_attribute_unused);</div>
176 <div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; </div>
177 <div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
178 <div class="line"><a name="l00441"></a><span class="lineno"><a class="line" href="a00242.html#gac2eaed287bb215cf0bd33014e9e1d374"> 441</a></span>&#160;<a class="code" href="a00242.html#gac2eaed287bb215cf0bd33014e9e1d374">hwloc_plugin_check_namespace</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *pluginname __hwloc_attribute_unused, <span class="keyword">const</span> <span class="keywordtype">char</span> *symbol __hwloc_attribute_unused)</div>
179 <div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160;{</div>
180 <div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160;<span class="preprocessor">#ifdef HWLOC_INSIDE_PLUGIN</span></div>
181 <div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keywordtype">void</span> *sym;</div>
182 <div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160;<span class="preprocessor">#ifdef HWLOC_HAVE_LTDL</span></div>
183 <div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; lt_dlhandle handle = lt_dlopen(NULL);</div>
184 <div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160;<span class="preprocessor">#else</span></div>
185 <div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keywordtype">void</span> *handle = dlopen(NULL, RTLD_NOW|RTLD_LOCAL);</div>
186 <div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160;<span class="preprocessor">#endif</span></div>
187 <div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="keywordflow">if</span> (!handle)</div>
188 <div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="comment">/* cannot check, assume things will work */</span></div>
189 <div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="keywordflow">return</span> 0;</div>
190 <div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160;<span class="preprocessor">#ifdef HWLOC_HAVE_LTDL</span></div>
191 <div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; sym = lt_dlsym(handle, symbol);</div>
192 <div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; lt_dlclose(handle);</div>
193 <div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160;<span class="preprocessor">#else</span></div>
194 <div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; sym = dlsym(handle, symbol);</div>
195 <div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; dlclose(handle);</div>
196 <div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;<span class="preprocessor">#endif</span></div>
197 <div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <span class="keywordflow">if</span> (!sym) {</div>
198 <div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="keyword">static</span> <span class="keywordtype">int</span> verboseenv_checked = 0;</div>
199 <div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="keyword">static</span> <span class="keywordtype">int</span> verboseenv_value = 0;</div>
200 <div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <span class="keywordflow">if</span> (!verboseenv_checked) {</div>
201 <div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> *verboseenv = getenv(<span class="stringliteral">&quot;HWLOC_PLUGINS_VERBOSE&quot;</span>);</div>
202 <div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; verboseenv_value = verboseenv ? atoi(verboseenv) : 0;</div>
203 <div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; verboseenv_checked = 1;</div>
204 <div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; }</div>
205 <div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="keywordflow">if</span> (verboseenv_value)</div>
206 <div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; fprintf(stderr, <span class="stringliteral">&quot;Plugin `%s&#39; disabling itself because it cannot find the `%s&#39; core symbol.\n&quot;</span>,</div>
207 <div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; pluginname, symbol);</div>
208 <div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="keywordflow">return</span> -1;</div>
209 <div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; }</div>
210 <div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_INSIDE_PLUGIN */</span><span class="preprocessor"></span></div>
211 <div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <span class="keywordflow">return</span> 0;</div>
212 <div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160;}</div>
213 <div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; </div>
214 <div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
215 <div class="line"><a name="l00494"></a><span class="lineno"><a class="line" href="a00243.html#ga60203db6459ebf275bf48c40a37661a0"> 494</a></span>&#160;<a class="code" href="a00243.html#ga60203db6459ebf275bf48c40a37661a0">hwloc_filter_check_pcidev_subtype_important</a>(<span class="keywordtype">unsigned</span> classid)</div>
216 <div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160;{</div>
217 <div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <span class="keywordtype">unsigned</span> baseclass = classid &gt;&gt; 8;</div>
218 <div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="keywordflow">return</span> (baseclass == 0x03 <span class="comment">/* PCI_BASE_CLASS_DISPLAY */</span></div>
219 <div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; || baseclass == 0x02 <span class="comment">/* PCI_BASE_CLASS_NETWORK */</span></div>
220 <div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; || baseclass == 0x01 <span class="comment">/* PCI_BASE_CLASS_STORAGE */</span></div>
221 <div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; || baseclass == 0x0b <span class="comment">/* PCI_BASE_CLASS_PROCESSOR */</span></div>
222 <div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; || classid == 0x0c04 <span class="comment">/* PCI_CLASS_SERIAL_FIBER */</span></div>
223 <div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; || classid == 0x0c06 <span class="comment">/* PCI_CLASS_SERIAL_INFINIBAND */</span></div>
224 <div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; || baseclass == 0x06 <span class="comment">/* PCI_BASE_CLASS_BRIDGE with non-PCI downstream. the core will drop the useless ones later */</span></div>
225 <div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; || baseclass == 0x12 <span class="comment">/* Processing Accelerators */</span>);</div>
226 <div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160;}</div>
227 <div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; </div>
228 <div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
229 <div class="line"><a name="l00512"></a><span class="lineno"><a class="line" href="a00243.html#gac7d57a6d669820f360cf2a070a396560"> 512</a></span>&#160;<a class="code" href="a00243.html#gac7d57a6d669820f360cf2a070a396560">hwloc_filter_check_osdev_subtype_important</a>(<a class="code" href="a00193.html#gaa9a6941ef7b1c169412518d7ef71b3d2">hwloc_obj_osdev_type_t</a> subtype)</div>
230 <div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160;{</div>
231 <div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="keywordflow">return</span> (subtype != <a class="code" href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0a827ad1643360711a8b6c6af671366791">HWLOC_OBJ_OSDEV_DMA</a>);</div>
232 <div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160;}</div>
233 <div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; </div>
234 <div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
235 <div class="line"><a name="l00524"></a><span class="lineno"><a class="line" href="a00243.html#ga2f402a43025a8a91e8513be1a15e4635"> 524</a></span>&#160;<a class="code" href="a00243.html#ga2f402a43025a8a91e8513be1a15e4635">hwloc_filter_check_keep_object_type</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</div>
236 <div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160;{</div>
237 <div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="keyword">enum</span> <a class="code" href="a00202.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter = <a class="code" href="a00202.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a">HWLOC_TYPE_FILTER_KEEP_NONE</a>;</div>
238 <div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <a class="code" href="a00202.html#ga137ad1178f7a79f2383974d983083401">hwloc_topology_get_type_filter</a>(topology, type, &amp;filter);</div>
239 <div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; assert(filter != <a class="code" href="a00202.html#gga9a5a1f0140cd1952544477833733195ba63fd24954e18c83ff7eae9588759adb5">HWLOC_TYPE_FILTER_KEEP_IMPORTANT</a>); <span class="comment">/* IMPORTANT only used for I/O */</span></div>
240 <div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="keywordflow">return</span> filter == <a class="code" href="a00202.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a">HWLOC_TYPE_FILTER_KEEP_NONE</a> ? 0 : 1;</div>
241 <div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160;}</div>
242 <div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; </div>
243 <div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160;<span class="keyword">static</span> __hwloc_inline <span class="keywordtype">int</span></div>
244 <div class="line"><a name="l00537"></a><span class="lineno"><a class="line" href="a00243.html#ga4d2fdce071e5646ef147c9ff1539d1c9"> 537</a></span>&#160;<a class="code" href="a00243.html#ga4d2fdce071e5646ef147c9ff1539d1c9">hwloc_filter_check_keep_object</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00250.html">hwloc_obj_t</a> obj)</div>
245 <div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160;{</div>
246 <div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type = obj-&gt;<a class="code" href="a00250.html#acc4f0803f244867e68fe0036800be5de">type</a>;</div>
247 <div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="keyword">enum</span> <a class="code" href="a00202.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter = <a class="code" href="a00202.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a">HWLOC_TYPE_FILTER_KEEP_NONE</a>;</div>
248 <div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <a class="code" href="a00202.html#ga137ad1178f7a79f2383974d983083401">hwloc_topology_get_type_filter</a>(topology, type, &amp;filter);</div>
249 <div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="keywordflow">if</span> (filter == <a class="code" href="a00202.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a">HWLOC_TYPE_FILTER_KEEP_NONE</a>)</div>
250 <div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; <span class="keywordflow">return</span> 0;</div>
251 <div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="keywordflow">if</span> (filter == <a class="code" href="a00202.html#gga9a5a1f0140cd1952544477833733195ba63fd24954e18c83ff7eae9588759adb5">HWLOC_TYPE_FILTER_KEEP_IMPORTANT</a>) {</div>
252 <div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; <span class="keywordflow">if</span> (type == <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a>)</div>
253 <div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <span class="keywordflow">return</span> <a class="code" href="a00243.html#ga60203db6459ebf275bf48c40a37661a0">hwloc_filter_check_pcidev_subtype_important</a>(obj-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a>.<a class="code" href="a00274.html#aee735352d9f1686fd290fc6d6397c334">class_id</a>);</div>
254 <div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <span class="keywordflow">if</span> (type == <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075">HWLOC_OBJ_OS_DEVICE</a>)</div>
255 <div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <span class="keywordflow">return</span> <a class="code" href="a00243.html#gac7d57a6d669820f360cf2a070a396560">hwloc_filter_check_osdev_subtype_important</a>(obj-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a>.<a class="code" href="a00294.html#a31e019e27e54ac6138d04be639bb96f9">type</a>);</div>
256 <div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; }</div>
257 <div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <span class="keywordflow">return</span> 1;</div>
258 <div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160;}</div>
259 <div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; </div>
260 <div class="line"><a name="l00569"></a><span class="lineno"><a class="line" href="a00244.html#ga706f71cfea09d547d2cbafa642d6e03b"> 569</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">unsigned</span> <a class="code" href="a00244.html#ga706f71cfea09d547d2cbafa642d6e03b">hwloc_pcidisc_find_cap</a>(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *config, <span class="keywordtype">unsigned</span> cap);</div>
261 <div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; </div>
262 <div class="line"><a name="l00576"></a><span class="lineno"><a class="line" href="a00244.html#ga51d1ebcbf9729987c9d17df3aa57d209"> 576</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00244.html#ga51d1ebcbf9729987c9d17df3aa57d209">hwloc_pcidisc_find_linkspeed</a>(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *config, <span class="keywordtype">unsigned</span> offset, <span class="keywordtype">float</span> *linkspeed);</div>
263 <div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; </div>
264 <div class="line"><a name="l00582"></a><span class="lineno"><a class="line" href="a00244.html#ga6c55fb80c3d0c8c8e61078b3f38adde8"> 582</a></span>&#160;HWLOC_DECLSPEC <a class="code" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> <a class="code" href="a00244.html#ga6c55fb80c3d0c8c8e61078b3f38adde8">hwloc_pcidisc_check_bridge_type</a>(<span class="keywordtype">unsigned</span> device_class, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *config);</div>
265 <div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; </div>
266 <div class="line"><a name="l00590"></a><span class="lineno"><a class="line" href="a00244.html#ga95acf6822a49447c11067d0b843965ba"> 590</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00244.html#ga95acf6822a49447c11067d0b843965ba">hwloc_pcidisc_find_bridge_buses</a>(<span class="keywordtype">unsigned</span> domain, <span class="keywordtype">unsigned</span> bus, <span class="keywordtype">unsigned</span> dev, <span class="keywordtype">unsigned</span> func,</div>
267 <div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="keywordtype">unsigned</span> *secondary_busp, <span class="keywordtype">unsigned</span> *subordinate_busp,</div>
268 <div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> *config);</div>
269 <div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; </div>
270 <div class="line"><a name="l00598"></a><span class="lineno"><a class="line" href="a00244.html#gab76ddc4f55db8101ef0d44317965128c"> 598</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">void</span> <a class="code" href="a00244.html#gab76ddc4f55db8101ef0d44317965128c">hwloc_pcidisc_tree_insert_by_busid</a>(<span class="keyword">struct</span> <a class="code" href="a00250.html">hwloc_obj</a> **treep, <span class="keyword">struct</span> <a class="code" href="a00250.html">hwloc_obj</a> *obj);</div>
271 <div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; </div>
272 <div class="line"><a name="l00605"></a><span class="lineno"><a class="line" href="a00244.html#gabda1d6c1799e50b9226f8a4da9bd29ea"> 605</a></span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span> <a class="code" href="a00244.html#gabda1d6c1799e50b9226f8a4da9bd29ea">hwloc_pcidisc_tree_attach</a>(<span class="keyword">struct</span> hwloc_topology *topology, <span class="keyword">struct</span> <a class="code" href="a00250.html">hwloc_obj</a> *tree);</div>
273 <div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; </div>
274 <div class="line"><a name="l00630"></a><span class="lineno"><a class="line" href="a00245.html#ga7964833550947636ab8975909de3fa98"> 630</a></span>&#160;HWLOC_DECLSPEC <span class="keyword">struct </span><a class="code" href="a00250.html">hwloc_obj</a> * <a class="code" href="a00245.html#ga7964833550947636ab8975909de3fa98">hwloc_pci_find_parent_by_busid</a>(<span class="keyword">struct</span> hwloc_topology *topology, <span class="keywordtype">unsigned</span> domain, <span class="keywordtype">unsigned</span> bus, <span class="keywordtype">unsigned</span> dev, <span class="keywordtype">unsigned</span> func);</div>
275 <div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; </div>
276 <div class="line"><a name="l00638"></a><span class="lineno"><a class="line" href="a00245.html#ga1cc465a010c5f75e0f280cdc8e27197d"> 638</a></span>&#160;HWLOC_DECLSPEC <span class="keyword">struct </span><a class="code" href="a00250.html">hwloc_obj</a> * <a class="code" href="a00245.html#ga1cc465a010c5f75e0f280cdc8e27197d">hwloc_pci_find_by_busid</a>(<span class="keyword">struct</span> hwloc_topology *topology, <span class="keywordtype">unsigned</span> domain, <span class="keywordtype">unsigned</span> bus, <span class="keywordtype">unsigned</span> dev, <span class="keywordtype">unsigned</span> func);</div>
277 <div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; </div>
278 <div class="line"><a name="l00641"></a><span class="lineno"><a class="line" href="a00245.html#gafe5e49d32dd0a28ead94b6e31048e042"> 641</a></span>&#160;<span class="keyword">typedef</span> <span class="keywordtype">void</span> * <a class="code" href="a00245.html#gafe5e49d32dd0a28ead94b6e31048e042">hwloc_backend_distances_add_handle_t</a>;</div>
279 <div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; </div>
280 <div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160;HWLOC_DECLSPEC <a class="code" href="a00245.html#gafe5e49d32dd0a28ead94b6e31048e042">hwloc_backend_distances_add_handle_t</a></div>
281 <div class="line"><a name="l00650"></a><span class="lineno"><a class="line" href="a00245.html#gaa66a0bd519a5b1183a3e9b0c35a7f6cc"> 650</a></span>&#160;<a class="code" href="a00245.html#gaa66a0bd519a5b1183a3e9b0c35a7f6cc">hwloc_backend_distances_add_create</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
282 <div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">name</a>, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> kind,</div>
283 <div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
284 <div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; </div>
285 <div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
286 <div class="line"><a name="l00666"></a><span class="lineno"><a class="line" href="a00245.html#gaa27036bd83102f8e406f1051d560da6c"> 666</a></span>&#160;<a class="code" href="a00245.html#gaa27036bd83102f8e406f1051d560da6c">hwloc_backend_distances_add_values</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
287 <div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <a class="code" href="a00245.html#gafe5e49d32dd0a28ead94b6e31048e042">hwloc_backend_distances_add_handle_t</a> handle,</div>
288 <div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; <span class="keywordtype">unsigned</span> nbobjs, <a class="code" href="a00250.html">hwloc_obj_t</a> *objs,</div>
289 <div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; hwloc_uint64_t *values,</div>
290 <div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
291 <div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; </div>
292 <div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160;HWLOC_DECLSPEC <span class="keywordtype">int</span></div>
293 <div class="line"><a name="l00679"></a><span class="lineno"><a class="line" href="a00245.html#ga1468ac5f0bfb0e18bfc04c9ce5a5a4a3"> 679</a></span>&#160;<a class="code" href="a00245.html#ga1468ac5f0bfb0e18bfc04c9ce5a5a4a3">hwloc_backend_distances_add_commit</a>(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology,</div>
294 <div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; <a class="code" href="a00245.html#gafe5e49d32dd0a28ead94b6e31048e042">hwloc_backend_distances_add_handle_t</a> handle,</div>
295 <div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> flags);</div>
296 <div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; </div>
297 <div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* HWLOC_PLUGINS_H */</span><span class="preprocessor"></span></div>
298 <div class="ttc" id="aa00193_html_gaa9a6941ef7b1c169412518d7ef71b3d2"><div class="ttname"><a href="a00193.html#gaa9a6941ef7b1c169412518d7ef71b3d2">hwloc_obj_osdev_type_t</a></div><div class="ttdeci">enum hwloc_obj_osdev_type_e hwloc_obj_osdev_type_t</div><div class="ttdoc">Type of a OS device.</div></div>
299 <div class="ttc" id="aa00193_html_gacd37bb612667dc437d66bfb175a8dc55"><div class="ttname"><a href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a></div><div class="ttdeci">hwloc_obj_type_t</div><div class="ttdoc">Type of topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:176</div></div>
300 <div class="ttc" id="aa00193_html_gga64f5d539df299c97ae80ce53fc4b56c0a827ad1643360711a8b6c6af671366791"><div class="ttname"><a href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0a827ad1643360711a8b6c6af671366791">HWLOC_OBJ_OSDEV_DMA</a></div><div class="ttdeci">@ HWLOC_OBJ_OSDEV_DMA</div><div class="ttdoc">Operating system dma engine device. For instance the &quot;dma0chan0&quot; DMA channel on Linux.</div><div class="ttdef"><b>Definition:</b> hwloc.h:350</div></div>
301 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075">HWLOC_OBJ_OS_DEVICE</a></div><div class="ttdeci">@ HWLOC_OBJ_OS_DEVICE</div><div class="ttdoc">Operating system device (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:279</div></div>
302 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a></div><div class="ttdeci">@ HWLOC_OBJ_PCI_DEVICE</div><div class="ttdoc">PCI device (filtered out by default).</div><div class="ttdef"><b>Definition:</b> hwloc.h:269</div></div>
303 <div class="ttc" id="aa00195_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
304 <div class="ttc" id="aa00202_html_ga137ad1178f7a79f2383974d983083401"><div class="ttname"><a href="a00202.html#ga137ad1178f7a79f2383974d983083401">hwloc_topology_get_type_filter</a></div><div class="ttdeci">int hwloc_topology_get_type_filter(hwloc_topology_t topology, hwloc_obj_type_t type, enum hwloc_type_filter_e *filter)</div><div class="ttdoc">Get the current filtering for the given object type.</div></div>
305 <div class="ttc" id="aa00202_html_ga9a5a1f0140cd1952544477833733195b"><div class="ttname"><a href="a00202.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a></div><div class="ttdeci">hwloc_type_filter_e</div><div class="ttdoc">Type filtering flags.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2195</div></div>
306 <div class="ttc" id="aa00202_html_gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a"><div class="ttname"><a href="a00202.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a">HWLOC_TYPE_FILTER_KEEP_NONE</a></div><div class="ttdeci">@ HWLOC_TYPE_FILTER_KEEP_NONE</div><div class="ttdoc">Ignore all objects of this type.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2209</div></div>
307 <div class="ttc" id="aa00202_html_gga9a5a1f0140cd1952544477833733195ba63fd24954e18c83ff7eae9588759adb5"><div class="ttname"><a href="a00202.html#gga9a5a1f0140cd1952544477833733195ba63fd24954e18c83ff7eae9588759adb5">HWLOC_TYPE_FILTER_KEEP_IMPORTANT</a></div><div class="ttdeci">@ HWLOC_TYPE_FILTER_KEEP_IMPORTANT</div><div class="ttdoc">Only keep likely-important objects of the given type.</div><div class="ttdef"><b>Definition:</b> hwloc.h:2238</div></div>
308 <div class="ttc" id="aa00214_html_gaa3c2bf4c776d603dcebbb61b0c923d84"><div class="ttname"><a href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a></div><div class="ttdeci">struct hwloc_bitmap_s * hwloc_bitmap_t</div><div class="ttdoc">Set of bits represented as an opaque pointer to an internal bitmap.</div><div class="ttdef"><b>Definition:</b> bitmap.h:68</div></div>
309 <div class="ttc" id="aa00240_html_ga4715779d7191833e9b1a7490989a7497"><div class="ttname"><a href="a00240.html#ga4715779d7191833e9b1a7490989a7497">hwloc_backend_enable</a></div><div class="ttdeci">int hwloc_backend_enable(struct hwloc_backend *backend)</div><div class="ttdoc">Enable a previously allocated and setup backend.</div></div>
310 <div class="ttc" id="aa00240_html_ga600bba1a62022d5f516800649b1edb61"><div class="ttname"><a href="a00240.html#ga600bba1a62022d5f516800649b1edb61">hwloc_disc_phase_t</a></div><div class="ttdeci">enum hwloc_disc_phase_e hwloc_disc_phase_t</div><div class="ttdoc">Discovery phase.</div></div>
311 <div class="ttc" id="aa00240_html_ga8c314121c2fc478161bcce758688b9a1"><div class="ttname"><a href="a00240.html#ga8c314121c2fc478161bcce758688b9a1">hwloc_disc_phase_e</a></div><div class="ttdeci">hwloc_disc_phase_e</div><div class="ttdoc">Discovery phase.</div><div class="ttdef"><b>Definition:</b> plugins.h:106</div></div>
312 <div class="ttc" id="aa00240_html_gaae1b38cf9b12e489884ce2a07275964b"><div class="ttname"><a href="a00240.html#gaae1b38cf9b12e489884ce2a07275964b">hwloc_disc_status_flag_e</a></div><div class="ttdeci">hwloc_disc_status_flag_e</div><div class="ttdoc">Discovery status flags.</div><div class="ttdef"><b>Definition:</b> plugins.h:146</div></div>
313 <div class="ttc" id="aa00240_html_gadb068565ab6043cbe4d16bfcce067a61"><div class="ttname"><a href="a00240.html#gadb068565ab6043cbe4d16bfcce067a61">hwloc_backend_alloc</a></div><div class="ttdeci">struct hwloc_backend * hwloc_backend_alloc(struct hwloc_topology *topology, struct hwloc_disc_component *component)</div><div class="ttdoc">Allocate a backend structure, set good default values, initialize backend-&gt;component and topology,...</div></div>
314 <div class="ttc" id="aa00240_html_gga8c314121c2fc478161bcce758688b9a1a6360474df197027761a69bd5fc620250"><div class="ttname"><a href="a00240.html#gga8c314121c2fc478161bcce758688b9a1a6360474df197027761a69bd5fc620250">HWLOC_DISC_PHASE_CPU</a></div><div class="ttdeci">@ HWLOC_DISC_PHASE_CPU</div><div class="ttdoc">CPU discovery.</div><div class="ttdef"><b>Definition:</b> plugins.h:115</div></div>
315 <div class="ttc" id="aa00240_html_gga8c314121c2fc478161bcce758688b9a1a677c52064dd987af4988346319b3675a"><div class="ttname"><a href="a00240.html#gga8c314121c2fc478161bcce758688b9a1a677c52064dd987af4988346319b3675a">HWLOC_DISC_PHASE_PCI</a></div><div class="ttdeci">@ HWLOC_DISC_PHASE_PCI</div><div class="ttdoc">Attach PCI devices and bridges to existing CPU objects.</div><div class="ttdef"><b>Definition:</b> plugins.h:123</div></div>
316 <div class="ttc" id="aa00240_html_gga8c314121c2fc478161bcce758688b9a1a68ca5c7ad75a6d9e5355689411621773"><div class="ttname"><a href="a00240.html#gga8c314121c2fc478161bcce758688b9a1a68ca5c7ad75a6d9e5355689411621773">HWLOC_DISC_PHASE_ANNOTATE</a></div><div class="ttdeci">@ HWLOC_DISC_PHASE_ANNOTATE</div><div class="ttdoc">Annotating existing objects, adding distances, etc.</div><div class="ttdef"><b>Definition:</b> plugins.h:135</div></div>
317 <div class="ttc" id="aa00240_html_gga8c314121c2fc478161bcce758688b9a1a8a7cde9bff0ab0d085b102a3e934939b"><div class="ttname"><a href="a00240.html#gga8c314121c2fc478161bcce758688b9a1a8a7cde9bff0ab0d085b102a3e934939b">HWLOC_DISC_PHASE_MISC</a></div><div class="ttdeci">@ HWLOC_DISC_PHASE_MISC</div><div class="ttdoc">Misc objects that gets added below anything else.</div><div class="ttdef"><b>Definition:</b> plugins.h:131</div></div>
318 <div class="ttc" id="aa00240_html_gga8c314121c2fc478161bcce758688b9a1aa8e10626cba9af72f5605a1acbdc0015"><div class="ttname"><a href="a00240.html#gga8c314121c2fc478161bcce758688b9a1aa8e10626cba9af72f5605a1acbdc0015">HWLOC_DISC_PHASE_IO</a></div><div class="ttdeci">@ HWLOC_DISC_PHASE_IO</div><div class="ttdoc">I/O discovery that requires PCI devices (OS devices such as OpenCL, CUDA, etc.).</div><div class="ttdef"><b>Definition:</b> plugins.h:127</div></div>
319 <div class="ttc" id="aa00240_html_gga8c314121c2fc478161bcce758688b9a1ab41c626c79e9ccb1e7d41e7076972283"><div class="ttname"><a href="a00240.html#gga8c314121c2fc478161bcce758688b9a1ab41c626c79e9ccb1e7d41e7076972283">HWLOC_DISC_PHASE_GLOBAL</a></div><div class="ttdeci">@ HWLOC_DISC_PHASE_GLOBAL</div><div class="ttdoc">xml or synthetic, platform-specific components such as bgq. Discovers everything including CPU,...</div><div class="ttdef"><b>Definition:</b> plugins.h:111</div></div>
320 <div class="ttc" id="aa00240_html_gga8c314121c2fc478161bcce758688b9a1ac4264a243844c5fbbff495cdb1b4d51d"><div class="ttname"><a href="a00240.html#gga8c314121c2fc478161bcce758688b9a1ac4264a243844c5fbbff495cdb1b4d51d">HWLOC_DISC_PHASE_MEMORY</a></div><div class="ttdeci">@ HWLOC_DISC_PHASE_MEMORY</div><div class="ttdoc">Attach memory to existing CPU objects.</div><div class="ttdef"><b>Definition:</b> plugins.h:119</div></div>
321 <div class="ttc" id="aa00240_html_gga8c314121c2fc478161bcce758688b9a1ada3ed3f00e74909353d6ea4a96cde5ad"><div class="ttname"><a href="a00240.html#gga8c314121c2fc478161bcce758688b9a1ada3ed3f00e74909353d6ea4a96cde5ad">HWLOC_DISC_PHASE_TWEAK</a></div><div class="ttdeci">@ HWLOC_DISC_PHASE_TWEAK</div><div class="ttdoc">Final tweaks to a ready-to-use topology. This phase runs once the topology is loaded,...</div><div class="ttdef"><b>Definition:</b> plugins.h:142</div></div>
322 <div class="ttc" id="aa00240_html_ggaae1b38cf9b12e489884ce2a07275964ba205d644d54a0840bd9165fce7d19e6b1"><div class="ttname"><a href="a00240.html#ggaae1b38cf9b12e489884ce2a07275964ba205d644d54a0840bd9165fce7d19e6b1">HWLOC_DISC_STATUS_FLAG_GOT_ALLOWED_RESOURCES</a></div><div class="ttdeci">@ HWLOC_DISC_STATUS_FLAG_GOT_ALLOWED_RESOURCES</div><div class="ttdoc">The sets of allowed resources were already retrieved.</div><div class="ttdef"><b>Definition:</b> plugins.h:148</div></div>
323 <div class="ttc" id="aa00241_html_ga31a5a455f4e666b936f0a9e8fb9a0f47"><div class="ttname"><a href="a00241.html#ga31a5a455f4e666b936f0a9e8fb9a0f47">hwloc_component_type_t</a></div><div class="ttdeci">enum hwloc_component_type_e hwloc_component_type_t</div><div class="ttdoc">Generic component type.</div></div>
324 <div class="ttc" id="aa00241_html_ga397a1bf7d21dd073320ad0045340f463"><div class="ttname"><a href="a00241.html#ga397a1bf7d21dd073320ad0045340f463">hwloc_component_type_e</a></div><div class="ttdeci">hwloc_component_type_e</div><div class="ttdoc">Generic component type.</div><div class="ttdef"><b>Definition:</b> plugins.h:257</div></div>
325 <div class="ttc" id="aa00241_html_gga397a1bf7d21dd073320ad0045340f463a5d6e561f467fe9795a29e7368b613900"><div class="ttname"><a href="a00241.html#gga397a1bf7d21dd073320ad0045340f463a5d6e561f467fe9795a29e7368b613900">HWLOC_COMPONENT_TYPE_DISC</a></div><div class="ttdeci">@ HWLOC_COMPONENT_TYPE_DISC</div><div class="ttdoc">The data field must point to a struct hwloc_disc_component.</div><div class="ttdef"><b>Definition:</b> plugins.h:259</div></div>
326 <div class="ttc" id="aa00241_html_gga397a1bf7d21dd073320ad0045340f463adea00cd839c2141c032e1569fd5592bd"><div class="ttname"><a href="a00241.html#gga397a1bf7d21dd073320ad0045340f463adea00cd839c2141c032e1569fd5592bd">HWLOC_COMPONENT_TYPE_XML</a></div><div class="ttdeci">@ HWLOC_COMPONENT_TYPE_XML</div><div class="ttdoc">The data field must point to a struct hwloc_xml_component.</div><div class="ttdef"><b>Definition:</b> plugins.h:262</div></div>
327 <div class="ttc" id="aa00242_html_ga0b5c75b2dc37cea2e8a29c4812baf4b3"><div class="ttname"><a href="a00242.html#ga0b5c75b2dc37cea2e8a29c4812baf4b3">hwloc_alloc_setup_object</a></div><div class="ttdeci">hwloc_obj_t hwloc_alloc_setup_object(hwloc_topology_t topology, hwloc_obj_type_t type, unsigned os_index)</div><div class="ttdoc">Allocate and initialize an object of the given type and physical index.</div></div>
328 <div class="ttc" id="aa00242_html_ga0ef97debde503b56367689b07bb3e901"><div class="ttname"><a href="a00242.html#ga0ef97debde503b56367689b07bb3e901">hwloc_insert_object_by_parent</a></div><div class="ttdeci">void hwloc_insert_object_by_parent(struct hwloc_topology *topology, hwloc_obj_t parent, hwloc_obj_t obj)</div><div class="ttdoc">Insert an object somewhere in the topology.</div></div>
329 <div class="ttc" id="aa00242_html_ga120d8bd74922e1030b621409a6b0be61"><div class="ttname"><a href="a00242.html#ga120d8bd74922e1030b621409a6b0be61">hwloc_topology_reconnect</a></div><div class="ttdeci">int hwloc_topology_reconnect(hwloc_topology_t topology, unsigned long flags)</div><div class="ttdoc">Request a reconnection of children and levels in the topology.</div></div>
330 <div class="ttc" id="aa00242_html_ga1e105cfe3c8e77f34cc6df3841deebbc"><div class="ttname"><a href="a00242.html#ga1e105cfe3c8e77f34cc6df3841deebbc">hwloc__insert_object_by_cpuset</a></div><div class="ttdeci">hwloc_obj_t hwloc__insert_object_by_cpuset(struct hwloc_topology *topology, hwloc_obj_t root, hwloc_obj_t obj, const char *reason)</div><div class="ttdoc">Add an object to the topology.</div></div>
331 <div class="ttc" id="aa00242_html_ga754b61041ceee9685534a2c5d3cd0156"><div class="ttname"><a href="a00242.html#ga754b61041ceee9685534a2c5d3cd0156">hwloc_obj_add_children_sets</a></div><div class="ttdeci">int hwloc_obj_add_children_sets(hwloc_obj_t obj)</div><div class="ttdoc">Setup object cpusets/nodesets by OR'ing its children.</div></div>
332 <div class="ttc" id="aa00242_html_gab527c1e0f243f057d31a724794ad9f88"><div class="ttname"><a href="a00242.html#gab527c1e0f243f057d31a724794ad9f88">hwloc_hide_errors</a></div><div class="ttdeci">int hwloc_hide_errors(void)</div><div class="ttdoc">Check whether error messages are hidden.</div></div>
333 <div class="ttc" id="aa00242_html_gac2eaed287bb215cf0bd33014e9e1d374"><div class="ttname"><a href="a00242.html#gac2eaed287bb215cf0bd33014e9e1d374">hwloc_plugin_check_namespace</a></div><div class="ttdeci">static int hwloc_plugin_check_namespace(const char *pluginname, const char *symbol)</div><div class="ttdoc">Make sure that plugins can lookup core symbols.</div><div class="ttdef"><b>Definition:</b> plugins.h:441</div></div>
334 <div class="ttc" id="aa00243_html_ga2f402a43025a8a91e8513be1a15e4635"><div class="ttname"><a href="a00243.html#ga2f402a43025a8a91e8513be1a15e4635">hwloc_filter_check_keep_object_type</a></div><div class="ttdeci">static int hwloc_filter_check_keep_object_type(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Check whether a non-I/O object type should be filtered-out.</div><div class="ttdef"><b>Definition:</b> plugins.h:524</div></div>
335 <div class="ttc" id="aa00243_html_ga4d2fdce071e5646ef147c9ff1539d1c9"><div class="ttname"><a href="a00243.html#ga4d2fdce071e5646ef147c9ff1539d1c9">hwloc_filter_check_keep_object</a></div><div class="ttdeci">static int hwloc_filter_check_keep_object(hwloc_topology_t topology, hwloc_obj_t obj)</div><div class="ttdoc">Check whether the given object should be filtered-out.</div><div class="ttdef"><b>Definition:</b> plugins.h:537</div></div>
336 <div class="ttc" id="aa00243_html_ga60203db6459ebf275bf48c40a37661a0"><div class="ttname"><a href="a00243.html#ga60203db6459ebf275bf48c40a37661a0">hwloc_filter_check_pcidev_subtype_important</a></div><div class="ttdeci">static int hwloc_filter_check_pcidev_subtype_important(unsigned classid)</div><div class="ttdoc">Check whether the given PCI device classid is important.</div><div class="ttdef"><b>Definition:</b> plugins.h:494</div></div>
337 <div class="ttc" id="aa00243_html_gac7d57a6d669820f360cf2a070a396560"><div class="ttname"><a href="a00243.html#gac7d57a6d669820f360cf2a070a396560">hwloc_filter_check_osdev_subtype_important</a></div><div class="ttdeci">static int hwloc_filter_check_osdev_subtype_important(hwloc_obj_osdev_type_t subtype)</div><div class="ttdoc">Check whether the given OS device subtype is important.</div><div class="ttdef"><b>Definition:</b> plugins.h:512</div></div>
338 <div class="ttc" id="aa00244_html_ga51d1ebcbf9729987c9d17df3aa57d209"><div class="ttname"><a href="a00244.html#ga51d1ebcbf9729987c9d17df3aa57d209">hwloc_pcidisc_find_linkspeed</a></div><div class="ttdeci">int hwloc_pcidisc_find_linkspeed(const unsigned char *config, unsigned offset, float *linkspeed)</div><div class="ttdoc">Fill linkspeed by reading the PCI config space where PCI_CAP_ID_EXP is at position offset.</div></div>
339 <div class="ttc" id="aa00244_html_ga6c55fb80c3d0c8c8e61078b3f38adde8"><div class="ttname"><a href="a00244.html#ga6c55fb80c3d0c8c8e61078b3f38adde8">hwloc_pcidisc_check_bridge_type</a></div><div class="ttdeci">hwloc_obj_type_t hwloc_pcidisc_check_bridge_type(unsigned device_class, const unsigned char *config)</div><div class="ttdoc">Return the hwloc object type (PCI device or Bridge) for the given class and configuration space.</div></div>
340 <div class="ttc" id="aa00244_html_ga706f71cfea09d547d2cbafa642d6e03b"><div class="ttname"><a href="a00244.html#ga706f71cfea09d547d2cbafa642d6e03b">hwloc_pcidisc_find_cap</a></div><div class="ttdeci">unsigned hwloc_pcidisc_find_cap(const unsigned char *config, unsigned cap)</div><div class="ttdoc">Return the offset of the given capability in the PCI config space buffer.</div></div>
341 <div class="ttc" id="aa00244_html_ga95acf6822a49447c11067d0b843965ba"><div class="ttname"><a href="a00244.html#ga95acf6822a49447c11067d0b843965ba">hwloc_pcidisc_find_bridge_buses</a></div><div class="ttdeci">int hwloc_pcidisc_find_bridge_buses(unsigned domain, unsigned bus, unsigned dev, unsigned func, unsigned *secondary_busp, unsigned *subordinate_busp, const unsigned char *config)</div><div class="ttdoc">Fills the attributes of the given PCI bridge using the given PCI config space.</div></div>
342 <div class="ttc" id="aa00244_html_gab76ddc4f55db8101ef0d44317965128c"><div class="ttname"><a href="a00244.html#gab76ddc4f55db8101ef0d44317965128c">hwloc_pcidisc_tree_insert_by_busid</a></div><div class="ttdeci">void hwloc_pcidisc_tree_insert_by_busid(struct hwloc_obj **treep, struct hwloc_obj *obj)</div><div class="ttdoc">Insert a PCI object in the given PCI tree by looking at PCI bus IDs.</div></div>
343 <div class="ttc" id="aa00244_html_gabda1d6c1799e50b9226f8a4da9bd29ea"><div class="ttname"><a href="a00244.html#gabda1d6c1799e50b9226f8a4da9bd29ea">hwloc_pcidisc_tree_attach</a></div><div class="ttdeci">int hwloc_pcidisc_tree_attach(struct hwloc_topology *topology, struct hwloc_obj *tree)</div><div class="ttdoc">Add some hostbridges on top of the given tree of PCI objects and attach them to the topology.</div></div>
344 <div class="ttc" id="aa00245_html_ga1468ac5f0bfb0e18bfc04c9ce5a5a4a3"><div class="ttname"><a href="a00245.html#ga1468ac5f0bfb0e18bfc04c9ce5a5a4a3">hwloc_backend_distances_add_commit</a></div><div class="ttdeci">int hwloc_backend_distances_add_commit(hwloc_topology_t topology, hwloc_backend_distances_add_handle_t handle, unsigned long flags)</div><div class="ttdoc">Commit a new distances structure.</div></div>
345 <div class="ttc" id="aa00245_html_ga1cc465a010c5f75e0f280cdc8e27197d"><div class="ttname"><a href="a00245.html#ga1cc465a010c5f75e0f280cdc8e27197d">hwloc_pci_find_by_busid</a></div><div class="ttdeci">struct hwloc_obj * hwloc_pci_find_by_busid(struct hwloc_topology *topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)</div><div class="ttdoc">Find the PCI device or bridge matching a PCI bus ID exactly.</div></div>
346 <div class="ttc" id="aa00245_html_ga7964833550947636ab8975909de3fa98"><div class="ttname"><a href="a00245.html#ga7964833550947636ab8975909de3fa98">hwloc_pci_find_parent_by_busid</a></div><div class="ttdeci">struct hwloc_obj * hwloc_pci_find_parent_by_busid(struct hwloc_topology *topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)</div><div class="ttdoc">Find the object or a parent of a PCI bus ID.</div></div>
347 <div class="ttc" id="aa00245_html_gaa27036bd83102f8e406f1051d560da6c"><div class="ttname"><a href="a00245.html#gaa27036bd83102f8e406f1051d560da6c">hwloc_backend_distances_add_values</a></div><div class="ttdeci">int hwloc_backend_distances_add_values(hwloc_topology_t topology, hwloc_backend_distances_add_handle_t handle, unsigned nbobjs, hwloc_obj_t *objs, hwloc_uint64_t *values, unsigned long flags)</div><div class="ttdoc">Specify the objects and values in a new empty distances structure.</div></div>
348 <div class="ttc" id="aa00245_html_gaa66a0bd519a5b1183a3e9b0c35a7f6cc"><div class="ttname"><a href="a00245.html#gaa66a0bd519a5b1183a3e9b0c35a7f6cc">hwloc_backend_distances_add_create</a></div><div class="ttdeci">hwloc_backend_distances_add_handle_t hwloc_backend_distances_add_create(hwloc_topology_t topology, const char *name, unsigned long kind, unsigned long flags)</div><div class="ttdoc">Create a new empty distances structure.</div></div>
349 <div class="ttc" id="aa00245_html_gafe5e49d32dd0a28ead94b6e31048e042"><div class="ttname"><a href="a00245.html#gafe5e49d32dd0a28ead94b6e31048e042">hwloc_backend_distances_add_handle_t</a></div><div class="ttdeci">void * hwloc_backend_distances_add_handle_t</div><div class="ttdoc">Handle to a new distances structure during its addition to the topology.</div><div class="ttdef"><b>Definition:</b> plugins.h:641</div></div>
350 <div class="ttc" id="aa00250_html"><div class="ttname"><a href="a00250.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:395</div></div>
351 <div class="ttc" id="aa00250_html_abb709ec38f2970677e4e57d1d30be96d"><div class="ttname"><a href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">hwloc_obj::name</a></div><div class="ttdeci">char * name</div><div class="ttdoc">Object-specific name if any. Mostly used for identifying OS devices and Misc objects where a name str...</div><div class="ttdef"><b>Definition:</b> hwloc.h:407</div></div>
352 <div class="ttc" id="aa00250_html_acc4f0803f244867e68fe0036800be5de"><div class="ttname"><a href="a00250.html#acc4f0803f244867e68fe0036800be5de">hwloc_obj::type</a></div><div class="ttdeci">hwloc_obj_type_t type</div><div class="ttdoc">Type of object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:397</div></div>
353 <div class="ttc" id="aa00250_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:414</div></div>
354 <div class="ttc" id="aa00254_html_a0b66da7ab072f7c016f8ed86701f5a7c"><div class="ttname"><a href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">hwloc_obj_attr_u::pcidev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_pcidev_attr_s pcidev</div></div>
355 <div class="ttc" id="aa00254_html_aaf7a5c38b5185703ff18c46ad2761dcf"><div class="ttname"><a href="a00254.html#aaf7a5c38b5185703ff18c46ad2761dcf">hwloc_obj_attr_u::osdev</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_osdev_attr_s osdev</div></div>
356 <div class="ttc" id="aa00274_html_aee735352d9f1686fd290fc6d6397c334"><div class="ttname"><a href="a00274.html#aee735352d9f1686fd290fc6d6397c334">hwloc_obj_attr_u::hwloc_pcidev_attr_s::class_id</a></div><div class="ttdeci">unsigned short class_id</div><div class="ttdef"><b>Definition:</b> hwloc.h:639</div></div>
357 <div class="ttc" id="aa00294_html_a31e019e27e54ac6138d04be639bb96f9"><div class="ttname"><a href="a00294.html#a31e019e27e54ac6138d04be639bb96f9">hwloc_obj_attr_u::hwloc_osdev_attr_s::type</a></div><div class="ttdeci">hwloc_obj_osdev_type_t type</div><div class="ttdef"><b>Definition:</b> hwloc.h:665</div></div>
358 <div class="ttc" id="aa00378_html"><div class="ttname"><a href="a00378.html">hwloc_disc_component</a></div><div class="ttdoc">Discovery component structure.</div><div class="ttdef"><b>Definition:</b> plugins.h:41</div></div>
359 <div class="ttc" id="aa00378_html_a4064c3b5d9213027e87caebef380a840"><div class="ttname"><a href="a00378.html#a4064c3b5d9213027e87caebef380a840">hwloc_disc_component::name</a></div><div class="ttdeci">const char * name</div><div class="ttdoc">Name. If this component is built as a plugin, this name does not have to match the plugin filename.</div><div class="ttdef"><b>Definition:</b> plugins.h:45</div></div>
360 <div class="ttc" id="aa00378_html_a61ad3151efa02e3dbad5d919758f9c90"><div class="ttname"><a href="a00378.html#a61ad3151efa02e3dbad5d919758f9c90">hwloc_disc_component::phases</a></div><div class="ttdeci">unsigned phases</div><div class="ttdoc">Discovery phases performed by this component. OR'ed set of hwloc_disc_phase_t.</div><div class="ttdef"><b>Definition:</b> plugins.h:50</div></div>
361 <div class="ttc" id="aa00378_html_acbb9957914dbf7b8f504215aa0c8d3fe"><div class="ttname"><a href="a00378.html#acbb9957914dbf7b8f504215aa0c8d3fe">hwloc_disc_component::excluded_phases</a></div><div class="ttdeci">unsigned excluded_phases</div><div class="ttdoc">Component phases to exclude, as an OR'ed set of hwloc_disc_phase_t.</div><div class="ttdef"><b>Definition:</b> plugins.h:60</div></div>
362 <div class="ttc" id="aa00378_html_ace80cafe2b1732b047b3fc3da47e6517"><div class="ttname"><a href="a00378.html#ace80cafe2b1732b047b3fc3da47e6517">hwloc_disc_component::enabled_by_default</a></div><div class="ttdeci">unsigned enabled_by_default</div><div class="ttdoc">Enabled by default. If unset, if will be disabled unless explicitly requested.</div><div class="ttdef"><b>Definition:</b> plugins.h:84</div></div>
363 <div class="ttc" id="aa00378_html_ae86d283c272c5ae24073a235efbf6b59"><div class="ttname"><a href="a00378.html#ae86d283c272c5ae24073a235efbf6b59">hwloc_disc_component::priority</a></div><div class="ttdeci">unsigned priority</div><div class="ttdoc">Component priority. Used to sort topology-&gt;components, higher priority first. Also used to decide bet...</div><div class="ttdef"><b>Definition:</b> plugins.h:79</div></div>
364 <div class="ttc" id="aa00382_html"><div class="ttname"><a href="a00382.html">hwloc_disc_status</a></div><div class="ttdoc">Discovery status structure.</div><div class="ttdef"><b>Definition:</b> plugins.h:156</div></div>
365 <div class="ttc" id="aa00382_html_a0f95fa42d46a6e7cf8dee8af12afee3a"><div class="ttname"><a href="a00382.html#a0f95fa42d46a6e7cf8dee8af12afee3a">hwloc_disc_status::excluded_phases</a></div><div class="ttdeci">unsigned excluded_phases</div><div class="ttdoc">Dynamically excluded phases. If a component decides during discovery that some phases are no longer n...</div><div class="ttdef"><b>Definition:</b> plugins.h:165</div></div>
366 <div class="ttc" id="aa00382_html_abaf7c8c082d43e133171f0723dbf824b"><div class="ttname"><a href="a00382.html#abaf7c8c082d43e133171f0723dbf824b">hwloc_disc_status::phase</a></div><div class="ttdeci">hwloc_disc_phase_t phase</div><div class="ttdoc">The current discovery phase that is performed. Must match one of the phases in the component phases f...</div><div class="ttdef"><b>Definition:</b> plugins.h:160</div></div>
367 <div class="ttc" id="aa00382_html_ad8b123cecb945a9182eb824ccf8ef9d7"><div class="ttname"><a href="a00382.html#ad8b123cecb945a9182eb824ccf8ef9d7">hwloc_disc_status::flags</a></div><div class="ttdeci">unsigned long flags</div><div class="ttdoc">OR'ed set of hwloc_disc_status_flag_e.</div><div class="ttdef"><b>Definition:</b> plugins.h:168</div></div>
368 <div class="ttc" id="aa00386_html"><div class="ttname"><a href="a00386.html">hwloc_backend</a></div><div class="ttdoc">Discovery backend structure.</div><div class="ttdef"><b>Definition:</b> plugins.h:189</div></div>
369 <div class="ttc" id="aa00386_html_a2ea5bd36b7f06efdb65b98b32af16c68"><div class="ttname"><a href="a00386.html#a2ea5bd36b7f06efdb65b98b32af16c68">hwloc_backend::private_data</a></div><div class="ttdeci">void * private_data</div><div class="ttdoc">Backend private data, or NULL if none.</div><div class="ttdef"><b>Definition:</b> plugins.h:216</div></div>
370 <div class="ttc" id="aa00386_html_a36c4fa86350525b46340c67b802c69c7"><div class="ttname"><a href="a00386.html#a36c4fa86350525b46340c67b802c69c7">hwloc_backend::disable</a></div><div class="ttdeci">void(* disable)(struct hwloc_backend *backend)</div><div class="ttdoc">Callback for freeing the private_data. May be NULL.</div><div class="ttdef"><b>Definition:</b> plugins.h:220</div></div>
371 <div class="ttc" id="aa00386_html_aaa8eafe495aadd81c2e3c4ec527c10ba"><div class="ttname"><a href="a00386.html#aaa8eafe495aadd81c2e3c4ec527c10ba">hwloc_backend::flags</a></div><div class="ttdeci">unsigned long flags</div><div class="ttdoc">Backend flags, currently always 0.</div><div class="ttdef"><b>Definition:</b> plugins.h:205</div></div>
372 <div class="ttc" id="aa00386_html_aaac253491264c20930f44817270bc502"><div class="ttname"><a href="a00386.html#aaac253491264c20930f44817270bc502">hwloc_backend::get_pci_busid_cpuset</a></div><div class="ttdeci">int(* get_pci_busid_cpuset)(struct hwloc_backend *backend, struct hwloc_pcidev_attr_s *busid, hwloc_bitmap_t cpuset)</div><div class="ttdoc">Callback to retrieve the locality of a PCI object. Called by the PCI core when attaching PCI hierarch...</div><div class="ttdef"><b>Definition:</b> plugins.h:233</div></div>
373 <div class="ttc" id="aa00386_html_ab8806f6db077f1bb2e9d63ec99223f7a"><div class="ttname"><a href="a00386.html#ab8806f6db077f1bb2e9d63ec99223f7a">hwloc_backend::is_thissystem</a></div><div class="ttdeci">int is_thissystem</div><div class="ttdoc">Backend-specific 'is_thissystem' property. Set to 0 if the backend disables the thissystem flag for t...</div><div class="ttdef"><b>Definition:</b> plugins.h:213</div></div>
374 <div class="ttc" id="aa00386_html_accff2cd8404be43c3b44cec05e6f609b"><div class="ttname"><a href="a00386.html#accff2cd8404be43c3b44cec05e6f609b">hwloc_backend::discover</a></div><div class="ttdeci">int(* discover)(struct hwloc_backend *backend, struct hwloc_disc_status *status)</div><div class="ttdoc">Main discovery callback. returns -1 on error, either because it couldn't add its objects ot the exist...</div><div class="ttdef"><b>Definition:</b> plugins.h:227</div></div>
375 <div class="ttc" id="aa00386_html_aeca769840a6ff03e96462a9533adbccd"><div class="ttname"><a href="a00386.html#aeca769840a6ff03e96462a9533adbccd">hwloc_backend::phases</a></div><div class="ttdeci">unsigned phases</div><div class="ttdoc">Discovery phases performed by this component, possibly without some of them if excluded by other comp...</div><div class="ttdef"><b>Definition:</b> plugins.h:202</div></div>
376 <div class="ttc" id="aa00390_html"><div class="ttname"><a href="a00390.html">hwloc_component</a></div><div class="ttdoc">Generic component structure.</div><div class="ttdef"><b>Definition:</b> plugins.h:270</div></div>
377 <div class="ttc" id="aa00390_html_a3250bd6fc9713946991d805e48091b2e"><div class="ttname"><a href="a00390.html#a3250bd6fc9713946991d805e48091b2e">hwloc_component::abi</a></div><div class="ttdeci">unsigned abi</div><div class="ttdoc">Component ABI version, set to HWLOC_COMPONENT_ABI.</div><div class="ttdef"><b>Definition:</b> plugins.h:272</div></div>
378 <div class="ttc" id="aa00390_html_a4612015451a1c706e8ba19114cb8baae"><div class="ttname"><a href="a00390.html#a4612015451a1c706e8ba19114cb8baae">hwloc_component::finalize</a></div><div class="ttdeci">void(* finalize)(unsigned long flags)</div><div class="ttdoc">Process-wide component termination callback.</div><div class="ttdef"><b>Definition:</b> plugins.h:304</div></div>
379 <div class="ttc" id="aa00390_html_a4b8cffd1d943c29fdc102b841b8598d4"><div class="ttname"><a href="a00390.html#a4b8cffd1d943c29fdc102b841b8598d4">hwloc_component::data</a></div><div class="ttdeci">void * data</div><div class="ttdoc">Component data, pointing to a struct hwloc_disc_component or struct hwloc_xml_component.</div><div class="ttdef"><b>Definition:</b> plugins.h:313</div></div>
380 <div class="ttc" id="aa00390_html_a789208ada7e17492cfd3a5a88a6bb0ee"><div class="ttname"><a href="a00390.html#a789208ada7e17492cfd3a5a88a6bb0ee">hwloc_component::type</a></div><div class="ttdeci">hwloc_component_type_t type</div><div class="ttdoc">Component type.</div><div class="ttdef"><b>Definition:</b> plugins.h:307</div></div>
381 <div class="ttc" id="aa00390_html_ab8043c5b4cc0e81aabba586ccb194335"><div class="ttname"><a href="a00390.html#ab8043c5b4cc0e81aabba586ccb194335">hwloc_component::flags</a></div><div class="ttdeci">unsigned long flags</div><div class="ttdoc">Component flags, unused for now.</div><div class="ttdef"><b>Definition:</b> plugins.h:310</div></div>
382 <div class="ttc" id="aa00390_html_aea613546886d9b8221cadba920fe3ebc"><div class="ttname"><a href="a00390.html#aea613546886d9b8221cadba920fe3ebc">hwloc_component::init</a></div><div class="ttdeci">int(* init)(unsigned long flags)</div><div class="ttdoc">Process-wide component initialization callback.</div><div class="ttdef"><b>Definition:</b> plugins.h:291</div></div>
107383 </div><!-- fragment --></div><!-- contents -->
108384 <!-- start footer part -->
109385 <hr class="footer"/><address class="footer"><small>
+0
-127
doc/doxygen-doc/html/a00188.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): API version</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#define-members">Macros</a> &#124;
43 <a href="#func-members">Functions</a> </div>
44 <div class="headertitle">
45 <div class="title">API version</div> </div>
46 </div><!--header-->
47 <div class="contents">
48 <table class="memberdecls">
49 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
50 Macros</h2></td></tr>
51 <tr class="memitem:ga8f4dfb8eef138af55dd1a0fa802e5476"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00188.html#ga8f4dfb8eef138af55dd1a0fa802e5476">HWLOC_API_VERSION</a>&#160;&#160;&#160;0x00020400</td></tr>
52 <tr class="separator:ga8f4dfb8eef138af55dd1a0fa802e5476"><td class="memSeparator" colspan="2">&#160;</td></tr>
53 <tr class="memitem:gaac5bc1f46f55e10ef0141a68ce70e21f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00188.html#gaac5bc1f46f55e10ef0141a68ce70e21f">HWLOC_COMPONENT_ABI</a>&#160;&#160;&#160;7</td></tr>
54 <tr class="separator:gaac5bc1f46f55e10ef0141a68ce70e21f"><td class="memSeparator" colspan="2">&#160;</td></tr>
55 </table><table class="memberdecls">
56 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
57 Functions</h2></td></tr>
58 <tr class="memitem:ga9c0b50c98add1adf57ed1ce85bb5190d"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00188.html#ga9c0b50c98add1adf57ed1ce85bb5190d">hwloc_get_api_version</a> (void)</td></tr>
59 <tr class="separator:ga9c0b50c98add1adf57ed1ce85bb5190d"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 </table>
61 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
62 <h2 class="groupheader">Macro Definition Documentation</h2>
63 <a id="ga8f4dfb8eef138af55dd1a0fa802e5476"></a>
64 <h2 class="memtitle"><span class="permalink"><a href="#ga8f4dfb8eef138af55dd1a0fa802e5476">&#9670;&nbsp;</a></span>HWLOC_API_VERSION</h2>
65
66 <div class="memitem">
67 <div class="memproto">
68 <table class="memname">
69 <tr>
70 <td class="memname">#define HWLOC_API_VERSION&#160;&#160;&#160;0x00020400</td>
71 </tr>
72 </table>
73 </div><div class="memdoc">
74
75 <p>Indicate at build time which hwloc API version is being used. </p>
76 <p>This number is updated to (X&lt;&lt;16)+(Y&lt;&lt;8)+Z when a new release X.Y.Z actually modifies the API.</p>
77 <p>Users may check for available features at build time using this number (see <a class="el" href="a00400.html#faq_version_api">How do I handle API changes?</a>).</p>
78 <dl class="section note"><dt>Note</dt><dd>This should not be confused with HWLOC_VERSION, the library version. Two stable releases of the same series usually have the same <a class="el" href="a00188.html#ga8f4dfb8eef138af55dd1a0fa802e5476" title="Indicate at build time which hwloc API version is being used.">HWLOC_API_VERSION</a> even if their HWLOC_VERSION are different. </dd></dl>
79
80 </div>
81 </div>
82 <a id="gaac5bc1f46f55e10ef0141a68ce70e21f"></a>
83 <h2 class="memtitle"><span class="permalink"><a href="#gaac5bc1f46f55e10ef0141a68ce70e21f">&#9670;&nbsp;</a></span>HWLOC_COMPONENT_ABI</h2>
84
85 <div class="memitem">
86 <div class="memproto">
87 <table class="memname">
88 <tr>
89 <td class="memname">#define HWLOC_COMPONENT_ABI&#160;&#160;&#160;7</td>
90 </tr>
91 </table>
92 </div><div class="memdoc">
93
94 <p>Current component and plugin ABI version (see <a class="el" href="a00182_source.html">hwloc/plugins.h</a>) </p>
95
96 </div>
97 </div>
98 <h2 class="groupheader">Function Documentation</h2>
99 <a id="ga9c0b50c98add1adf57ed1ce85bb5190d"></a>
100 <h2 class="memtitle"><span class="permalink"><a href="#ga9c0b50c98add1adf57ed1ce85bb5190d">&#9670;&nbsp;</a></span>hwloc_get_api_version()</h2>
101
102 <div class="memitem">
103 <div class="memproto">
104 <table class="memname">
105 <tr>
106 <td class="memname">unsigned hwloc_get_api_version </td>
107 <td>(</td>
108 <td class="paramtype">void&#160;</td>
109 <td class="paramname"></td><td>)</td>
110 <td></td>
111 </tr>
112 </table>
113 </div><div class="memdoc">
114
115 <p>Indicate at runtime which hwloc API version was used at build time. </p>
116 <p>Should be <a class="el" href="a00188.html#ga8f4dfb8eef138af55dd1a0fa802e5476" title="Indicate at build time which hwloc API version is being used.">HWLOC_API_VERSION</a> if running on the same version. </p>
117
118 </div>
119 </div>
120 </div><!-- contents -->
121 <!-- start footer part -->
122 <hr class="footer"/><address class="footer"><small>
123 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
124 </small></address>
125 </body>
126 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): netloc.h Source File</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 <div id="nav-path" class="navpath">
40 <ul>
41 <li class="navelem"><a class="el" href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li> </ul>
42 </div>
43 </div><!-- top -->
44 <div class="header">
45 <div class="headertitle">
46 <div class="title">netloc.h</div> </div>
47 </div><!--header-->
48 <div class="contents">
49 <div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div>
50 <div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * Copyright © 2013-2014 Cisco Systems, Inc. All rights reserved.</span></div>
51 <div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> * Copyright © 2013-2014 University of Wisconsin-La Crosse.</span></div>
52 <div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * All rights reserved.</span></div>
53 <div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * Copyright © 2015-2016 Inria. All rights reserved.</span></div>
54 <div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> *</span></div>
55 <div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment"> * $COPYRIGHT$</span></div>
56 <div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> *</span></div>
57 <div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * Additional copyrights may follow</span></div>
58 <div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * See COPYING in top-level directory.</span></div>
59 <div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> *</span></div>
60 <div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * $HEADER$</span></div>
61 <div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> */</span></div>
62 <div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160; </div>
63 <div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#ifndef _NETLOC_H_</span></div>
64 <div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#define _NETLOC_H_</span></div>
65 <div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160; </div>
66 <div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#ifndef _GNU_SOURCE</span></div>
67 <div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#define _GNU_SOURCE </span><span class="comment">// for asprintf</span></div>
68 <div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#endif</span></div>
69 <div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160; </div>
70 <div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &lt;hwloc/autogen/config.h&gt;</span></div>
71 <div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160; </div>
72 <div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &lt;hwloc.h&gt;</span></div>
73 <div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160; </div>
74 <div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
75 <div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {</div>
76 <div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="preprocessor">#endif</span></div>
77 <div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160; </div>
78 <div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="keyword">enum</span> {</div>
79 <div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea4deb864e4b46fe70b83c3220442a627c"> 37</a></span>&#160; <a class="code" href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea4deb864e4b46fe70b83c3220442a627c">NETLOC_SUCCESS</a> = 0, </div>
80 <div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea4b33f8da6efc963562a93569ac8b349a"> 38</a></span>&#160; <a class="code" href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea4b33f8da6efc963562a93569ac8b349a">NETLOC_ERROR</a> = -1, </div>
81 <div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea6e4322619d38dec18dbd16a606b14aa8"> 39</a></span>&#160; <a class="code" href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea6e4322619d38dec18dbd16a606b14aa8">NETLOC_ERROR_NOTDIR</a> = -2, </div>
82 <div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea81bc77a77d1a42054dc64b11a4cc8612"> 40</a></span>&#160; <a class="code" href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea81bc77a77d1a42054dc64b11a4cc8612">NETLOC_ERROR_NOENT</a> = -3, </div>
83 <div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea0dc7c18a5a3d027bf3f835eacdbed932"> 41</a></span>&#160; <a class="code" href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea0dc7c18a5a3d027bf3f835eacdbed932">NETLOC_ERROR_EMPTY</a> = -4, </div>
84 <div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea4485021555c6cb24d5f6e391b1bd6dee"> 42</a></span>&#160; <a class="code" href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea4485021555c6cb24d5f6e391b1bd6dee">NETLOC_ERROR_MULTIPLE</a> = -5, </div>
85 <div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea4a55d10dfc1eb5c84027de7d48dfac4d"> 43</a></span>&#160; <a class="code" href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea4a55d10dfc1eb5c84027de7d48dfac4d">NETLOC_ERROR_NOT_IMPL</a> = -6, </div>
86 <div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea67dfc8498fa899900e2231fad4538556"> 44</a></span>&#160; <a class="code" href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea67dfc8498fa899900e2231fad4538556">NETLOC_ERROR_EXISTS</a> = -7, </div>
87 <div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea61b43e2553779d3610f894fd6698a6ee"> 45</a></span>&#160; <a class="code" href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea61b43e2553779d3610f894fd6698a6ee">NETLOC_ERROR_NOT_FOUND</a> = -8, </div>
88 <div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <a class="code" href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea39974c6110bed527cb7658672b8eeeb9">NETLOC_ERROR_MAX</a> = -9 </div>
89 <div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea39974c6110bed527cb7658672b8eeeb9"> 47</a></span>&#160;};</div>
90 <div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; </div>
91 <div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; </div>
92 <div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="preprocessor">#ifdef __cplusplus</span></div>
93 <div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;} <span class="comment">/* extern &quot;C&quot; */</span></div>
94 <div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="preprocessor">#endif</span></div>
95 <div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; </div>
96 <div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="preprocessor">#endif </span><span class="comment">// _NETLOC_H_</span></div>
97 <div class="ttc" id="aa00246_html_gga61dadd085c1777f559549e05962b2c9ea0dc7c18a5a3d027bf3f835eacdbed932"><div class="ttname"><a href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea0dc7c18a5a3d027bf3f835eacdbed932">NETLOC_ERROR_EMPTY</a></div><div class="ttdeci">@ NETLOC_ERROR_EMPTY</div><div class="ttdef"><b>Definition:</b> netloc.h:41</div></div>
98 <div class="ttc" id="aa00246_html_gga61dadd085c1777f559549e05962b2c9ea39974c6110bed527cb7658672b8eeeb9"><div class="ttname"><a href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea39974c6110bed527cb7658672b8eeeb9">NETLOC_ERROR_MAX</a></div><div class="ttdeci">@ NETLOC_ERROR_MAX</div><div class="ttdef"><b>Definition:</b> netloc.h:46</div></div>
99 <div class="ttc" id="aa00246_html_gga61dadd085c1777f559549e05962b2c9ea4485021555c6cb24d5f6e391b1bd6dee"><div class="ttname"><a href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea4485021555c6cb24d5f6e391b1bd6dee">NETLOC_ERROR_MULTIPLE</a></div><div class="ttdeci">@ NETLOC_ERROR_MULTIPLE</div><div class="ttdef"><b>Definition:</b> netloc.h:42</div></div>
100 <div class="ttc" id="aa00246_html_gga61dadd085c1777f559549e05962b2c9ea4a55d10dfc1eb5c84027de7d48dfac4d"><div class="ttname"><a href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea4a55d10dfc1eb5c84027de7d48dfac4d">NETLOC_ERROR_NOT_IMPL</a></div><div class="ttdeci">@ NETLOC_ERROR_NOT_IMPL</div><div class="ttdef"><b>Definition:</b> netloc.h:43</div></div>
101 <div class="ttc" id="aa00246_html_gga61dadd085c1777f559549e05962b2c9ea4b33f8da6efc963562a93569ac8b349a"><div class="ttname"><a href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea4b33f8da6efc963562a93569ac8b349a">NETLOC_ERROR</a></div><div class="ttdeci">@ NETLOC_ERROR</div><div class="ttdef"><b>Definition:</b> netloc.h:38</div></div>
102 <div class="ttc" id="aa00246_html_gga61dadd085c1777f559549e05962b2c9ea4deb864e4b46fe70b83c3220442a627c"><div class="ttname"><a href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea4deb864e4b46fe70b83c3220442a627c">NETLOC_SUCCESS</a></div><div class="ttdeci">@ NETLOC_SUCCESS</div><div class="ttdef"><b>Definition:</b> netloc.h:37</div></div>
103 <div class="ttc" id="aa00246_html_gga61dadd085c1777f559549e05962b2c9ea61b43e2553779d3610f894fd6698a6ee"><div class="ttname"><a href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea61b43e2553779d3610f894fd6698a6ee">NETLOC_ERROR_NOT_FOUND</a></div><div class="ttdeci">@ NETLOC_ERROR_NOT_FOUND</div><div class="ttdef"><b>Definition:</b> netloc.h:45</div></div>
104 <div class="ttc" id="aa00246_html_gga61dadd085c1777f559549e05962b2c9ea67dfc8498fa899900e2231fad4538556"><div class="ttname"><a href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea67dfc8498fa899900e2231fad4538556">NETLOC_ERROR_EXISTS</a></div><div class="ttdeci">@ NETLOC_ERROR_EXISTS</div><div class="ttdef"><b>Definition:</b> netloc.h:44</div></div>
105 <div class="ttc" id="aa00246_html_gga61dadd085c1777f559549e05962b2c9ea6e4322619d38dec18dbd16a606b14aa8"><div class="ttname"><a href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea6e4322619d38dec18dbd16a606b14aa8">NETLOC_ERROR_NOTDIR</a></div><div class="ttdeci">@ NETLOC_ERROR_NOTDIR</div><div class="ttdef"><b>Definition:</b> netloc.h:39</div></div>
106 <div class="ttc" id="aa00246_html_gga61dadd085c1777f559549e05962b2c9ea81bc77a77d1a42054dc64b11a4cc8612"><div class="ttname"><a href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea81bc77a77d1a42054dc64b11a4cc8612">NETLOC_ERROR_NOENT</a></div><div class="ttdeci">@ NETLOC_ERROR_NOENT</div><div class="ttdef"><b>Definition:</b> netloc.h:40</div></div>
107 </div><!-- fragment --></div><!-- contents -->
108 <!-- start footer part -->
109 <hr class="footer"/><address class="footer"><small>
110 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
111 </small></address>
112 </body>
113 </html>
+0
-139
doc/doxygen-doc/html/a00189.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Object Sets (hwloc_cpuset_t and hwloc_nodeset_t)</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#typedef-members">Typedefs</a> </div>
43 <div class="headertitle">
44 <div class="title">Object Sets (hwloc_cpuset_t and hwloc_nodeset_t)</div> </div>
45 </div><!--header-->
46 <div class="contents">
47 <table class="memberdecls">
48 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
49 Typedefs</h2></td></tr>
50 <tr class="memitem:ga4bbf39b68b6f568fb92739e7c0ea7801"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></td></tr>
51 <tr class="separator:ga4bbf39b68b6f568fb92739e7c0ea7801"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:ga1f784433e9b606261f62d1134f6a3b25"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a></td></tr>
53 <tr class="separator:ga1f784433e9b606261f62d1134f6a3b25"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:ga37e35730fa7e775b5bb0afe893d6d508"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a></td></tr>
55 <tr class="separator:ga37e35730fa7e775b5bb0afe893d6d508"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:ga2f5276235841ad66a79bedad16a5a10c"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00189.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a></td></tr>
57 <tr class="separator:ga2f5276235841ad66a79bedad16a5a10c"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 </table>
59 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
60 <p>Hwloc uses bitmaps to represent two distinct kinds of object sets: CPU sets (<a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801" title="A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.">hwloc_cpuset_t</a>) and NUMA node sets (<a class="el" href="a00189.html#ga37e35730fa7e775b5bb0afe893d6d508" title="A node set is a bitmap whose bits are set according to NUMA memory node physical OS indexes.">hwloc_nodeset_t</a>). These types are both typedefs to a common back end type (<a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84" title="Set of bits represented as an opaque pointer to an internal bitmap.">hwloc_bitmap_t</a>), and therefore all the hwloc bitmap functions are applicable to both <a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801" title="A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.">hwloc_cpuset_t</a> and <a class="el" href="a00189.html#ga37e35730fa7e775b5bb0afe893d6d508" title="A node set is a bitmap whose bits are set according to NUMA memory node physical OS indexes.">hwloc_nodeset_t</a> (see <a class="el" href="a00211.html">The bitmap API</a>).</p>
61 <p>The rationale for having two different types is that even though the actions one wants to perform on these types are the same (e.g., enable and disable individual items in the set/mask), they're used in very different contexts: one for specifying which processors to use and one for specifying which NUMA nodes to use. Hence, the name difference is really just to reflect the intent of where the type is used. </p>
62 <h2 class="groupheader">Typedef Documentation</h2>
63 <a id="ga1f784433e9b606261f62d1134f6a3b25"></a>
64 <h2 class="memtitle"><span class="permalink"><a href="#ga1f784433e9b606261f62d1134f6a3b25">&#9670;&nbsp;</a></span>hwloc_const_cpuset_t</h2>
65
66 <div class="memitem">
67 <div class="memproto">
68 <table class="memname">
69 <tr>
70 <td class="memname">typedef <a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> <a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a></td>
71 </tr>
72 </table>
73 </div><div class="memdoc">
74
75 <p>A non-modifiable <a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801" title="A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.">hwloc_cpuset_t</a>. </p>
76
77 </div>
78 </div>
79 <a id="ga2f5276235841ad66a79bedad16a5a10c"></a>
80 <h2 class="memtitle"><span class="permalink"><a href="#ga2f5276235841ad66a79bedad16a5a10c">&#9670;&nbsp;</a></span>hwloc_const_nodeset_t</h2>
81
82 <div class="memitem">
83 <div class="memproto">
84 <table class="memname">
85 <tr>
86 <td class="memname">typedef <a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> <a class="el" href="a00189.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a></td>
87 </tr>
88 </table>
89 </div><div class="memdoc">
90
91 <p>A non-modifiable <a class="el" href="a00189.html#ga37e35730fa7e775b5bb0afe893d6d508" title="A node set is a bitmap whose bits are set according to NUMA memory node physical OS indexes.">hwloc_nodeset_t</a>. </p>
92
93 </div>
94 </div>
95 <a id="ga4bbf39b68b6f568fb92739e7c0ea7801"></a>
96 <h2 class="memtitle"><span class="permalink"><a href="#ga4bbf39b68b6f568fb92739e7c0ea7801">&#9670;&nbsp;</a></span>hwloc_cpuset_t</h2>
97
98 <div class="memitem">
99 <div class="memproto">
100 <table class="memname">
101 <tr>
102 <td class="memname">typedef <a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> <a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></td>
103 </tr>
104 </table>
105 </div><div class="memdoc">
106
107 <p>A CPU set is a bitmap whose bits are set according to CPU physical OS indexes. </p>
108 <p>It may be consulted and modified with the bitmap API as any <a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84" title="Set of bits represented as an opaque pointer to an internal bitmap.">hwloc_bitmap_t</a> (see <a class="el" href="a00131_source.html">hwloc/bitmap.h</a>).</p>
109 <p>Each bit may be converted into a PU object using <a class="el" href="a00206.html#ga751c238a4931db5cc0ca3181b7dd7479" title="Returns the object of type HWLOC_OBJ_PU with os_index.">hwloc_get_pu_obj_by_os_index()</a>. </p>
110
111 </div>
112 </div>
113 <a id="ga37e35730fa7e775b5bb0afe893d6d508"></a>
114 <h2 class="memtitle"><span class="permalink"><a href="#ga37e35730fa7e775b5bb0afe893d6d508">&#9670;&nbsp;</a></span>hwloc_nodeset_t</h2>
115
116 <div class="memitem">
117 <div class="memproto">
118 <table class="memname">
119 <tr>
120 <td class="memname">typedef <a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> <a class="el" href="a00189.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a></td>
121 </tr>
122 </table>
123 </div><div class="memdoc">
124
125 <p>A node set is a bitmap whose bits are set according to NUMA memory node physical OS indexes. </p>
126 <p>It may be consulted and modified with the bitmap API as any <a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84" title="Set of bits represented as an opaque pointer to an internal bitmap.">hwloc_bitmap_t</a> (see <a class="el" href="a00131_source.html">hwloc/bitmap.h</a>). Each bit may be converted into a NUMA node object using <a class="el" href="a00206.html#gab89d9ed9edfaa3dd526fb6ee1a1618ea" title="Returns the object of type HWLOC_OBJ_NUMANODE with os_index.">hwloc_get_numanode_obj_by_os_index()</a>.</p>
127 <p>When binding memory on a system without any NUMA node, the single main memory bank is considered as NUMA node #0.</p>
128 <p>See also <a class="el" href="a00209.html">Converting between CPU sets and node sets</a>. </p>
129
130 </div>
131 </div>
132 </div><!-- contents -->
133 <!-- start footer part -->
134 <hr class="footer"/><address class="footer"><small>
135 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
136 </small></address>
137 </body>
138 </html>
+0
-387
doc/doxygen-doc/html/a00190.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Object Types</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#define-members">Macros</a> &#124;
43 <a href="#typedef-members">Typedefs</a> &#124;
44 <a href="#enum-members">Enumerations</a> &#124;
45 <a href="#func-members">Functions</a> </div>
46 <div class="headertitle">
47 <div class="title">Object Types</div> </div>
48 </div><!--header-->
49 <div class="contents">
50 <table class="memberdecls">
51 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
52 Macros</h2></td></tr>
53 <tr class="memitem:ga3b6e4128e9fe773863b123fa6e4a080b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00190.html#ga3b6e4128e9fe773863b123fa6e4a080b">HWLOC_TYPE_UNORDERED</a></td></tr>
54 <tr class="separator:ga3b6e4128e9fe773863b123fa6e4a080b"><td class="memSeparator" colspan="2">&#160;</td></tr>
55 </table><table class="memberdecls">
56 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
57 Typedefs</h2></td></tr>
58 <tr class="memitem:ga552ec74296a024237f474acec98694c0"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="a00190.html#ga791c9875c8fe20f3e1e5871e0657e59b">hwloc_obj_cache_type_e</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00190.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a></td></tr>
59 <tr class="separator:ga552ec74296a024237f474acec98694c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:gab34362c7a23296c3f12c5756747abda3"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="a00190.html#ga48a4803c72574191d7ead1c62aaf9860">hwloc_obj_bridge_type_e</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00190.html#gab34362c7a23296c3f12c5756747abda3">hwloc_obj_bridge_type_t</a></td></tr>
61 <tr class="separator:gab34362c7a23296c3f12c5756747abda3"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:gaa9a6941ef7b1c169412518d7ef71b3d2"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="a00190.html#ga64f5d539df299c97ae80ce53fc4b56c0">hwloc_obj_osdev_type_e</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00190.html#gaa9a6941ef7b1c169412518d7ef71b3d2">hwloc_obj_osdev_type_t</a></td></tr>
63 <tr class="separator:gaa9a6941ef7b1c169412518d7ef71b3d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 </table><table class="memberdecls">
65 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
66 Enumerations</h2></td></tr>
67 <tr class="memitem:gacd37bb612667dc437d66bfb175a8dc55"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> { <br />
68 &#160;&#160;<a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a3f4e83ffc4a259354959ae8a9eaa2a80">HWLOC_OBJ_MACHINE</a>
69 , <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55ab16ab8c0dbffc234921d86f3dfb63129">HWLOC_OBJ_PACKAGE</a>
70 , <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55ac793958f330bca371aa1535de8aff45f">HWLOC_OBJ_CORE</a>
71 , <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661">HWLOC_OBJ_PU</a>
72 , <br />
73 &#160;&#160;<a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a56389b8eb2e2f74f288bb657c4e72140">HWLOC_OBJ_L1CACHE</a>
74 , <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a18f61d19fe9f4bcea978fcc68bc078fb">HWLOC_OBJ_L2CACHE</a>
75 , <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a25fae0e0514c90e3973a29866a5a837d">HWLOC_OBJ_L3CACHE</a>
76 , <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a54923bfa13df9d7e6d6dd0d5baff5f72">HWLOC_OBJ_L4CACHE</a>
77 , <br />
78 &#160;&#160;<a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a67194c9de5e3e581c64c11d2eb1c109d">HWLOC_OBJ_L5CACHE</a>
79 , <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55afa834a85d9e53836cf0db6d0bd8329b4">HWLOC_OBJ_L1ICACHE</a>
80 , <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a10713b7e561b8cc32544cd31b1c17f8d">HWLOC_OBJ_L2ICACHE</a>
81 , <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55ac22850c717f07bf7ffb316fadd08d218">HWLOC_OBJ_L3ICACHE</a>
82 , <br />
83 &#160;&#160;<a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a5269ef95be72f88465559d35c9b7ad56">HWLOC_OBJ_GROUP</a>
84 , <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>
85 , <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0">HWLOC_OBJ_BRIDGE</a>
86 , <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a>
87 , <br />
88 &#160;&#160;<a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075">HWLOC_OBJ_OS_DEVICE</a>
89 , <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a19f8a6953fa91efc76bcbcdf2d22de4d">HWLOC_OBJ_MISC</a>
90 , <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a0ed5bd98974729a0c476c39e917dabd6">HWLOC_OBJ_MEMCACHE</a>
91 , <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55af78bb6cde53aaaaa162a7dc420c409da">HWLOC_OBJ_DIE</a>
92 , <br />
93 &#160;&#160;<b>HWLOC_OBJ_TYPE_MAX</b>
94 <br />
95 }</td></tr>
96 <tr class="separator:gacd37bb612667dc437d66bfb175a8dc55"><td class="memSeparator" colspan="2">&#160;</td></tr>
97 <tr class="memitem:ga791c9875c8fe20f3e1e5871e0657e59b"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00190.html#ga791c9875c8fe20f3e1e5871e0657e59b">hwloc_obj_cache_type_e</a> { <a class="el" href="a00190.html#gga791c9875c8fe20f3e1e5871e0657e59ba3900b3b2db54941aac249e5a638a2d7a">HWLOC_OBJ_CACHE_UNIFIED</a>
98 , <a class="el" href="a00190.html#gga791c9875c8fe20f3e1e5871e0657e59bacac60ecad4206f85aeb79bef1604b488">HWLOC_OBJ_CACHE_DATA</a>
99 , <a class="el" href="a00190.html#gga791c9875c8fe20f3e1e5871e0657e59ba6f98b0d422b38ba90c5f5c79a11b0658">HWLOC_OBJ_CACHE_INSTRUCTION</a>
100 }</td></tr>
101 <tr class="separator:ga791c9875c8fe20f3e1e5871e0657e59b"><td class="memSeparator" colspan="2">&#160;</td></tr>
102 <tr class="memitem:ga48a4803c72574191d7ead1c62aaf9860"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00190.html#ga48a4803c72574191d7ead1c62aaf9860">hwloc_obj_bridge_type_e</a> { <a class="el" href="a00190.html#gga48a4803c72574191d7ead1c62aaf9860a2c7660f3864ad2810c1e72aad285e574">HWLOC_OBJ_BRIDGE_HOST</a>
103 , <a class="el" href="a00190.html#gga48a4803c72574191d7ead1c62aaf9860a8f3b4cecf3dab6073d74696d10863c60">HWLOC_OBJ_BRIDGE_PCI</a>
104 }</td></tr>
105 <tr class="separator:ga48a4803c72574191d7ead1c62aaf9860"><td class="memSeparator" colspan="2">&#160;</td></tr>
106 <tr class="memitem:ga64f5d539df299c97ae80ce53fc4b56c0"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00190.html#ga64f5d539df299c97ae80ce53fc4b56c0">hwloc_obj_osdev_type_e</a> { <br />
107 &#160;&#160;<a class="el" href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0a689b0488c3c0d08d116751c6b9cb8871">HWLOC_OBJ_OSDEV_BLOCK</a>
108 , <a class="el" href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90">HWLOC_OBJ_OSDEV_GPU</a>
109 , <a class="el" href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0ab715d81155f771573c8682dffc65021b">HWLOC_OBJ_OSDEV_NETWORK</a>
110 , <a class="el" href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0a52157d03694fdae82dddd57ca8c973b6">HWLOC_OBJ_OSDEV_OPENFABRICS</a>
111 , <br />
112 &#160;&#160;<a class="el" href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0a827ad1643360711a8b6c6af671366791">HWLOC_OBJ_OSDEV_DMA</a>
113 , <a class="el" href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83">HWLOC_OBJ_OSDEV_COPROC</a>
114 <br />
115 }</td></tr>
116 <tr class="separator:ga64f5d539df299c97ae80ce53fc4b56c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
117 </table><table class="memberdecls">
118 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
119 Functions</h2></td></tr>
120 <tr class="memitem:ga1820ea0dfd8e9dca28f9ea7624df5ae2"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00190.html#ga1820ea0dfd8e9dca28f9ea7624df5ae2">hwloc_compare_types</a> (<a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type1, <a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type2)</td></tr>
121 <tr class="separator:ga1820ea0dfd8e9dca28f9ea7624df5ae2"><td class="memSeparator" colspan="2">&#160;</td></tr>
122 </table>
123 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
124 <h2 class="groupheader">Macro Definition Documentation</h2>
125 <a id="ga3b6e4128e9fe773863b123fa6e4a080b"></a>
126 <h2 class="memtitle"><span class="permalink"><a href="#ga3b6e4128e9fe773863b123fa6e4a080b">&#9670;&nbsp;</a></span>HWLOC_TYPE_UNORDERED</h2>
127
128 <div class="memitem">
129 <div class="memproto">
130 <table class="memname">
131 <tr>
132 <td class="memname">#define HWLOC_TYPE_UNORDERED</td>
133 </tr>
134 </table>
135 </div><div class="memdoc">
136
137 <p>Value returned by <a class="el" href="a00190.html#ga1820ea0dfd8e9dca28f9ea7624df5ae2" title="Compare the depth of two object types.">hwloc_compare_types()</a> when types can not be compared. </p>
138
139 </div>
140 </div>
141 <h2 class="groupheader">Typedef Documentation</h2>
142 <a id="gab34362c7a23296c3f12c5756747abda3"></a>
143 <h2 class="memtitle"><span class="permalink"><a href="#gab34362c7a23296c3f12c5756747abda3">&#9670;&nbsp;</a></span>hwloc_obj_bridge_type_t</h2>
144
145 <div class="memitem">
146 <div class="memproto">
147 <table class="memname">
148 <tr>
149 <td class="memname">typedef enum <a class="el" href="a00190.html#ga48a4803c72574191d7ead1c62aaf9860">hwloc_obj_bridge_type_e</a> <a class="el" href="a00190.html#gab34362c7a23296c3f12c5756747abda3">hwloc_obj_bridge_type_t</a></td>
150 </tr>
151 </table>
152 </div><div class="memdoc">
153
154 <p>Type of one side (upstream or downstream) of an I/O bridge. </p>
155
156 </div>
157 </div>
158 <a id="ga552ec74296a024237f474acec98694c0"></a>
159 <h2 class="memtitle"><span class="permalink"><a href="#ga552ec74296a024237f474acec98694c0">&#9670;&nbsp;</a></span>hwloc_obj_cache_type_t</h2>
160
161 <div class="memitem">
162 <div class="memproto">
163 <table class="memname">
164 <tr>
165 <td class="memname">typedef enum <a class="el" href="a00190.html#ga791c9875c8fe20f3e1e5871e0657e59b">hwloc_obj_cache_type_e</a> <a class="el" href="a00190.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a></td>
166 </tr>
167 </table>
168 </div><div class="memdoc">
169
170 <p>Cache type. </p>
171
172 </div>
173 </div>
174 <a id="gaa9a6941ef7b1c169412518d7ef71b3d2"></a>
175 <h2 class="memtitle"><span class="permalink"><a href="#gaa9a6941ef7b1c169412518d7ef71b3d2">&#9670;&nbsp;</a></span>hwloc_obj_osdev_type_t</h2>
176
177 <div class="memitem">
178 <div class="memproto">
179 <table class="memname">
180 <tr>
181 <td class="memname">typedef enum <a class="el" href="a00190.html#ga64f5d539df299c97ae80ce53fc4b56c0">hwloc_obj_osdev_type_e</a> <a class="el" href="a00190.html#gaa9a6941ef7b1c169412518d7ef71b3d2">hwloc_obj_osdev_type_t</a></td>
182 </tr>
183 </table>
184 </div><div class="memdoc">
185
186 <p>Type of a OS device. </p>
187
188 </div>
189 </div>
190 <h2 class="groupheader">Enumeration Type Documentation</h2>
191 <a id="ga48a4803c72574191d7ead1c62aaf9860"></a>
192 <h2 class="memtitle"><span class="permalink"><a href="#ga48a4803c72574191d7ead1c62aaf9860">&#9670;&nbsp;</a></span>hwloc_obj_bridge_type_e</h2>
193
194 <div class="memitem">
195 <div class="memproto">
196 <table class="memname">
197 <tr>
198 <td class="memname">enum <a class="el" href="a00190.html#ga48a4803c72574191d7ead1c62aaf9860">hwloc_obj_bridge_type_e</a></td>
199 </tr>
200 </table>
201 </div><div class="memdoc">
202
203 <p>Type of one side (upstream or downstream) of an I/O bridge. </p>
204 <table class="fieldtable">
205 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga48a4803c72574191d7ead1c62aaf9860a2c7660f3864ad2810c1e72aad285e574"></a>HWLOC_OBJ_BRIDGE_HOST&#160;</td><td class="fielddoc"><p>Host-side of a bridge, only possible upstream. </p>
206 </td></tr>
207 <tr><td class="fieldname"><a id="gga48a4803c72574191d7ead1c62aaf9860a8f3b4cecf3dab6073d74696d10863c60"></a>HWLOC_OBJ_BRIDGE_PCI&#160;</td><td class="fielddoc"><p>PCI-side of a bridge. </p>
208 </td></tr>
209 </table>
210
211 </div>
212 </div>
213 <a id="ga791c9875c8fe20f3e1e5871e0657e59b"></a>
214 <h2 class="memtitle"><span class="permalink"><a href="#ga791c9875c8fe20f3e1e5871e0657e59b">&#9670;&nbsp;</a></span>hwloc_obj_cache_type_e</h2>
215
216 <div class="memitem">
217 <div class="memproto">
218 <table class="memname">
219 <tr>
220 <td class="memname">enum <a class="el" href="a00190.html#ga791c9875c8fe20f3e1e5871e0657e59b">hwloc_obj_cache_type_e</a></td>
221 </tr>
222 </table>
223 </div><div class="memdoc">
224
225 <p>Cache type. </p>
226 <table class="fieldtable">
227 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga791c9875c8fe20f3e1e5871e0657e59ba3900b3b2db54941aac249e5a638a2d7a"></a>HWLOC_OBJ_CACHE_UNIFIED&#160;</td><td class="fielddoc"><p>Unified cache. </p>
228 </td></tr>
229 <tr><td class="fieldname"><a id="gga791c9875c8fe20f3e1e5871e0657e59bacac60ecad4206f85aeb79bef1604b488"></a>HWLOC_OBJ_CACHE_DATA&#160;</td><td class="fielddoc"><p>Data cache. </p>
230 </td></tr>
231 <tr><td class="fieldname"><a id="gga791c9875c8fe20f3e1e5871e0657e59ba6f98b0d422b38ba90c5f5c79a11b0658"></a>HWLOC_OBJ_CACHE_INSTRUCTION&#160;</td><td class="fielddoc"><p>Instruction cache (filtered out by default). </p>
232 </td></tr>
233 </table>
234
235 </div>
236 </div>
237 <a id="ga64f5d539df299c97ae80ce53fc4b56c0"></a>
238 <h2 class="memtitle"><span class="permalink"><a href="#ga64f5d539df299c97ae80ce53fc4b56c0">&#9670;&nbsp;</a></span>hwloc_obj_osdev_type_e</h2>
239
240 <div class="memitem">
241 <div class="memproto">
242 <table class="memname">
243 <tr>
244 <td class="memname">enum <a class="el" href="a00190.html#ga64f5d539df299c97ae80ce53fc4b56c0">hwloc_obj_osdev_type_e</a></td>
245 </tr>
246 </table>
247 </div><div class="memdoc">
248
249 <p>Type of a OS device. </p>
250 <table class="fieldtable">
251 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga64f5d539df299c97ae80ce53fc4b56c0a689b0488c3c0d08d116751c6b9cb8871"></a>HWLOC_OBJ_OSDEV_BLOCK&#160;</td><td class="fielddoc"><p>Operating system block device, or non-volatile memory device. For instance "sda" or "dax2.0" on Linux. </p>
252 </td></tr>
253 <tr><td class="fieldname"><a id="gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90"></a>HWLOC_OBJ_OSDEV_GPU&#160;</td><td class="fielddoc"><p>Operating system GPU device. For instance ":0.0" for a GL display, "card0" for a Linux DRM device. </p>
254 </td></tr>
255 <tr><td class="fieldname"><a id="gga64f5d539df299c97ae80ce53fc4b56c0ab715d81155f771573c8682dffc65021b"></a>HWLOC_OBJ_OSDEV_NETWORK&#160;</td><td class="fielddoc"><p>Operating system network device. For instance the "eth0" interface on Linux. </p>
256 </td></tr>
257 <tr><td class="fieldname"><a id="gga64f5d539df299c97ae80ce53fc4b56c0a52157d03694fdae82dddd57ca8c973b6"></a>HWLOC_OBJ_OSDEV_OPENFABRICS&#160;</td><td class="fielddoc"><p>Operating system openfabrics device. For instance the "mlx4_0" InfiniBand HCA, or "hfi1_0" Omni-Path interface on Linux. </p>
258 </td></tr>
259 <tr><td class="fieldname"><a id="gga64f5d539df299c97ae80ce53fc4b56c0a827ad1643360711a8b6c6af671366791"></a>HWLOC_OBJ_OSDEV_DMA&#160;</td><td class="fielddoc"><p>Operating system dma engine device. For instance the "dma0chan0" DMA channel on Linux. </p>
260 </td></tr>
261 <tr><td class="fieldname"><a id="gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83"></a>HWLOC_OBJ_OSDEV_COPROC&#160;</td><td class="fielddoc"><p>Operating system co-processor device. For instance "opencl0d0" for a OpenCL device, "cuda0" for a CUDA device. </p>
262 </td></tr>
263 </table>
264
265 </div>
266 </div>
267 <a id="gacd37bb612667dc437d66bfb175a8dc55"></a>
268 <h2 class="memtitle"><span class="permalink"><a href="#gacd37bb612667dc437d66bfb175a8dc55">&#9670;&nbsp;</a></span>hwloc_obj_type_t</h2>
269
270 <div class="memitem">
271 <div class="memproto">
272 <table class="memname">
273 <tr>
274 <td class="memname">enum <a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a></td>
275 </tr>
276 </table>
277 </div><div class="memdoc">
278
279 <p>Type of topology object. </p>
280 <dl class="section note"><dt>Note</dt><dd>Do not rely on the ordering or completeness of the values as new ones may be defined in the future! If you need to compare types, use <a class="el" href="a00190.html#ga1820ea0dfd8e9dca28f9ea7624df5ae2" title="Compare the depth of two object types.">hwloc_compare_types()</a> instead. </dd></dl>
281 <table class="fieldtable">
282 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a3f4e83ffc4a259354959ae8a9eaa2a80"></a>HWLOC_OBJ_MACHINE&#160;</td><td class="fielddoc"><p>Machine. A set of processors and memory with cache coherency. </p>
283 <p>This type is always used for the root object of a topology, and never used anywhere else. Hence its parent is always <code>NULL</code>. </p>
284 </td></tr>
285 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55ab16ab8c0dbffc234921d86f3dfb63129"></a>HWLOC_OBJ_PACKAGE&#160;</td><td class="fielddoc"><p>Physical package. The physical package that usually gets inserted into a socket on the motherboard. A processor package usually contains multiple cores, and possibly some dies. </p>
286 </td></tr>
287 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55ac793958f330bca371aa1535de8aff45f"></a>HWLOC_OBJ_CORE&#160;</td><td class="fielddoc"><p>Core. A computation unit (may be shared by several PUs, aka logical processors). </p>
288 </td></tr>
289 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661"></a>HWLOC_OBJ_PU&#160;</td><td class="fielddoc"><p>Processing Unit, or (Logical) Processor. An execution unit (may share a core with some other logical processors, e.g. in the case of an SMT core). </p>
290 <p>This is the smallest object representing CPU resources, it cannot have any child except Misc objects.</p>
291 <p>Objects of this kind are always reported and can thus be used as fallback when others are not. </p>
292 </td></tr>
293 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a56389b8eb2e2f74f288bb657c4e72140"></a>HWLOC_OBJ_L1CACHE&#160;</td><td class="fielddoc"><p>Level 1 Data (or Unified) Cache. </p>
294 </td></tr>
295 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a18f61d19fe9f4bcea978fcc68bc078fb"></a>HWLOC_OBJ_L2CACHE&#160;</td><td class="fielddoc"><p>Level 2 Data (or Unified) Cache. </p>
296 </td></tr>
297 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a25fae0e0514c90e3973a29866a5a837d"></a>HWLOC_OBJ_L3CACHE&#160;</td><td class="fielddoc"><p>Level 3 Data (or Unified) Cache. </p>
298 </td></tr>
299 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a54923bfa13df9d7e6d6dd0d5baff5f72"></a>HWLOC_OBJ_L4CACHE&#160;</td><td class="fielddoc"><p>Level 4 Data (or Unified) Cache. </p>
300 </td></tr>
301 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a67194c9de5e3e581c64c11d2eb1c109d"></a>HWLOC_OBJ_L5CACHE&#160;</td><td class="fielddoc"><p>Level 5 Data (or Unified) Cache. </p>
302 </td></tr>
303 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55afa834a85d9e53836cf0db6d0bd8329b4"></a>HWLOC_OBJ_L1ICACHE&#160;</td><td class="fielddoc"><p>Level 1 instruction Cache (filtered out by default). </p>
304 </td></tr>
305 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a10713b7e561b8cc32544cd31b1c17f8d"></a>HWLOC_OBJ_L2ICACHE&#160;</td><td class="fielddoc"><p>Level 2 instruction Cache (filtered out by default). </p>
306 </td></tr>
307 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55ac22850c717f07bf7ffb316fadd08d218"></a>HWLOC_OBJ_L3ICACHE&#160;</td><td class="fielddoc"><p>Level 3 instruction Cache (filtered out by default). </p>
308 </td></tr>
309 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a5269ef95be72f88465559d35c9b7ad56"></a>HWLOC_OBJ_GROUP&#160;</td><td class="fielddoc"><p>Group objects. Objects which do not fit in the above but are detected by hwloc and are useful to take into account for affinity. For instance, some operating systems expose their arbitrary processors aggregation this way. And hwloc may insert such objects to group NUMA nodes according to their distances. See also <a class="el" href="a00400.html#faq_groups">What are these Group objects in my topology?</a>. </p>
310 <p>These objects are removed when they do not bring any structure (see <a class="el" href="a00199.html#gga9a5a1f0140cd1952544477833733195ba7664716643bf1db83e631eed34f659e4" title="Only ignore objects if their entire level does not bring any structure.">HWLOC_TYPE_FILTER_KEEP_STRUCTURE</a>). </p>
311 </td></tr>
312 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a"></a>HWLOC_OBJ_NUMANODE&#160;</td><td class="fielddoc"><p>NUMA node. An object that contains memory that is directly and byte-accessible to the host processors. It is usually close to some cores (the corresponding objects are descendants of the NUMA node object in the hwloc tree). </p>
313 <p>This is the smallest object representing Memory resources, it cannot have any child except Misc objects. However it may have Memory-side cache parents.</p>
314 <p>There is always at least one such object in the topology even if the machine is not NUMA.</p>
315 <p>Memory objects are not listed in the main children list, but rather in the dedicated Memory children list.</p>
316 <p>NUMA nodes have a special depth <a class="el" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a245c34ec9884c2cf5de5049b2153ed9c" title="Virtual depth for NUMA nodes.">HWLOC_TYPE_DEPTH_NUMANODE</a> instead of a normal depth just like other objects in the main tree. </p>
317 </td></tr>
318 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0"></a>HWLOC_OBJ_BRIDGE&#160;</td><td class="fielddoc"><p>Bridge (filtered out by default). Any bridge (or PCI switch) that connects the host or an I/O bus, to another I/O bus. </p>
319 <p>Bridges are not added to the topology unless their filtering is changed (see <a class="el" href="a00199.html#gad894e70f15f8d4aada7be8d1aba38b7e" title="Set the filtering for the given object type.">hwloc_topology_set_type_filter()</a> and <a class="el" href="a00199.html#ga0ab38705357bc1203abe829da8a12ad3" title="Set the filtering for all I/O object types.">hwloc_topology_set_io_types_filter()</a>).</p>
320 <p>I/O objects are not listed in the main children list, but rather in the dedicated io children list. I/O objects have NULL CPU and node sets. </p>
321 </td></tr>
322 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9"></a>HWLOC_OBJ_PCI_DEVICE&#160;</td><td class="fielddoc"><p>PCI device (filtered out by default). </p>
323 <p>PCI devices are not added to the topology unless their filtering is changed (see <a class="el" href="a00199.html#gad894e70f15f8d4aada7be8d1aba38b7e" title="Set the filtering for the given object type.">hwloc_topology_set_type_filter()</a> and <a class="el" href="a00199.html#ga0ab38705357bc1203abe829da8a12ad3" title="Set the filtering for all I/O object types.">hwloc_topology_set_io_types_filter()</a>).</p>
324 <p>I/O objects are not listed in the main children list, but rather in the dedicated io children list. I/O objects have NULL CPU and node sets. </p>
325 </td></tr>
326 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075"></a>HWLOC_OBJ_OS_DEVICE&#160;</td><td class="fielddoc"><p>Operating system device (filtered out by default). </p>
327 <p>OS devices are not added to the topology unless their filtering is changed (see <a class="el" href="a00199.html#gad894e70f15f8d4aada7be8d1aba38b7e" title="Set the filtering for the given object type.">hwloc_topology_set_type_filter()</a> and <a class="el" href="a00199.html#ga0ab38705357bc1203abe829da8a12ad3" title="Set the filtering for all I/O object types.">hwloc_topology_set_io_types_filter()</a>).</p>
328 <p>I/O objects are not listed in the main children list, but rather in the dedicated io children list. I/O objects have NULL CPU and node sets. </p>
329 </td></tr>
330 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a19f8a6953fa91efc76bcbcdf2d22de4d"></a>HWLOC_OBJ_MISC&#160;</td><td class="fielddoc"><p>Miscellaneous objects (filtered out by default). Objects without particular meaning, that can e.g. be added by the application for its own use, or by hwloc for miscellaneous objects such as MemoryModule (DIMMs). </p>
331 <p>They are not added to the topology unless their filtering is changed (see <a class="el" href="a00199.html#gad894e70f15f8d4aada7be8d1aba38b7e" title="Set the filtering for the given object type.">hwloc_topology_set_type_filter()</a>).</p>
332 <p>These objects are not listed in the main children list, but rather in the dedicated misc children list. Misc objects may only have Misc objects as children, and those are in the dedicated misc children list as well. Misc objects have NULL CPU and node sets. </p>
333 </td></tr>
334 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a0ed5bd98974729a0c476c39e917dabd6"></a>HWLOC_OBJ_MEMCACHE&#160;</td><td class="fielddoc"><p>Memory-side cache (filtered out by default). A cache in front of a specific NUMA node. </p>
335 <p>This object always has at least one NUMA node as a memory child.</p>
336 <p>Memory objects are not listed in the main children list, but rather in the dedicated Memory children list.</p>
337 <p>Memory-side cache have a special depth <a class="el" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a8b8d7d300c018c0eb65e6c9a9f162101" title="Virtual depth for MemCache object.">HWLOC_TYPE_DEPTH_MEMCACHE</a> instead of a normal depth just like other objects in the main tree. </p>
338 </td></tr>
339 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55af78bb6cde53aaaaa162a7dc420c409da"></a>HWLOC_OBJ_DIE&#160;</td><td class="fielddoc"><p>Die within a physical package. A subpart of the physical package, that contains multiple cores. </p>
340 </td></tr>
341 </table>
342
343 </div>
344 </div>
345 <h2 class="groupheader">Function Documentation</h2>
346 <a id="ga1820ea0dfd8e9dca28f9ea7624df5ae2"></a>
347 <h2 class="memtitle"><span class="permalink"><a href="#ga1820ea0dfd8e9dca28f9ea7624df5ae2">&#9670;&nbsp;</a></span>hwloc_compare_types()</h2>
348
349 <div class="memitem">
350 <div class="memproto">
351 <table class="memname">
352 <tr>
353 <td class="memname">int hwloc_compare_types </td>
354 <td>(</td>
355 <td class="paramtype"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
356 <td class="paramname"><em>type1</em>, </td>
357 </tr>
358 <tr>
359 <td class="paramkey"></td>
360 <td></td>
361 <td class="paramtype"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
362 <td class="paramname"><em>type2</em>&#160;</td>
363 </tr>
364 <tr>
365 <td></td>
366 <td>)</td>
367 <td></td><td></td>
368 </tr>
369 </table>
370 </div><div class="memdoc">
371
372 <p>Compare the depth of two object types. </p>
373 <p>Types shouldn't be compared as they are, since newer ones may be added in the future. This function returns less than, equal to, or greater than zero respectively if <code>type1</code> objects usually include <code>type2</code> objects, are the same as <code>type2</code> objects, or are included in <code>type2</code> objects. If the types can not be compared (because neither is usually contained in the other), <a class="el" href="a00190.html#ga3b6e4128e9fe773863b123fa6e4a080b" title="Value returned by hwloc_compare_types() when types can not be compared.">HWLOC_TYPE_UNORDERED</a> is returned. Object types containing CPUs can always be compared (usually, a system contains machines which contain nodes which contain packages which contain caches, which contain cores, which contain processors).</p>
374 <dl class="section note"><dt>Note</dt><dd><a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661" title="Processing Unit, or (Logical) Processor. An execution unit (may share a core with some other logical ...">HWLOC_OBJ_PU</a> will always be the deepest, while <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a3f4e83ffc4a259354959ae8a9eaa2a80" title="Machine. A set of processors and memory with cache coherency.">HWLOC_OBJ_MACHINE</a> is always the highest.</dd>
375 <dd>
376 This does not mean that the actual topology will respect that order: e.g. as of today cores may also contain caches, and packages may also contain nodes. This is thus just to be seen as a fallback comparison method. </dd></dl>
377
378 </div>
379 </div>
380 </div><!-- contents -->
381 <!-- start footer part -->
382 <hr class="footer"/><address class="footer"><small>
383 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
384 </small></address>
385 </body>
386 </html>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Object Structure and Attributes</title>
7 <title>Hardware Locality (hwloc): API version</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="header">
4141 <div class="summary">
42 <a href="#nested-classes">Data Structures</a> &#124;
43 <a href="#typedef-members">Typedefs</a> </div>
42 <a href="#define-members">Macros</a> &#124;
43 <a href="#func-members">Functions</a> </div>
4444 <div class="headertitle">
45 <div class="title">Object Structure and Attributes</div> </div>
45 <div class="title">API version</div> </div>
4646 </div><!--header-->
4747 <div class="contents">
4848 <table class="memberdecls">
49 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
50 Data Structures</h2></td></tr>
51 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html">hwloc_obj</a></td></tr>
52 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
53 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">union &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00248.html">hwloc_obj_attr_u</a></td></tr>
54 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
55 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00292.html">hwloc_info_s</a></td></tr>
56 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
49 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
50 Macros</h2></td></tr>
51 <tr class="memitem:ga8f4dfb8eef138af55dd1a0fa802e5476"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00191.html#ga8f4dfb8eef138af55dd1a0fa802e5476">HWLOC_API_VERSION</a>&#160;&#160;&#160;0x00020500</td></tr>
52 <tr class="separator:ga8f4dfb8eef138af55dd1a0fa802e5476"><td class="memSeparator" colspan="2">&#160;</td></tr>
53 <tr class="memitem:gaac5bc1f46f55e10ef0141a68ce70e21f"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00191.html#gaac5bc1f46f55e10ef0141a68ce70e21f">HWLOC_COMPONENT_ABI</a>&#160;&#160;&#160;7</td></tr>
54 <tr class="separator:gaac5bc1f46f55e10ef0141a68ce70e21f"><td class="memSeparator" colspan="2">&#160;</td></tr>
5755 </table><table class="memberdecls">
58 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
59 Typedefs</h2></td></tr>
60 <tr class="memitem:ga79b8ab56877ef99ac59b833203391c7d"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="a00244.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a></td></tr>
61 <tr class="separator:ga79b8ab56877ef99ac59b833203391c7d"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
57 Functions</h2></td></tr>
58 <tr class="memitem:ga9c0b50c98add1adf57ed1ce85bb5190d"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00191.html#ga9c0b50c98add1adf57ed1ce85bb5190d">hwloc_get_api_version</a> (void)</td></tr>
59 <tr class="separator:ga9c0b50c98add1adf57ed1ce85bb5190d"><td class="memSeparator" colspan="2">&#160;</td></tr>
6260 </table>
6361 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
64 <h2 class="groupheader">Typedef Documentation</h2>
65 <a id="ga79b8ab56877ef99ac59b833203391c7d"></a>
66 <h2 class="memtitle"><span class="permalink"><a href="#ga79b8ab56877ef99ac59b833203391c7d">&#9670;&nbsp;</a></span>hwloc_obj_t</h2>
62 <h2 class="groupheader">Macro Definition Documentation</h2>
63 <a id="ga8f4dfb8eef138af55dd1a0fa802e5476"></a>
64 <h2 class="memtitle"><span class="permalink"><a href="#ga8f4dfb8eef138af55dd1a0fa802e5476">&#9670;&nbsp;</a></span>HWLOC_API_VERSION</h2>
6765
6866 <div class="memitem">
6967 <div class="memproto">
7068 <table class="memname">
7169 <tr>
72 <td class="memname">typedef struct <a class="el" href="a00244.html">hwloc_obj</a>* <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a></td>
70 <td class="memname">#define HWLOC_API_VERSION&#160;&#160;&#160;0x00020500</td>
7371 </tr>
7472 </table>
7573 </div><div class="memdoc">
7674
77 <p>Convenience typedef; a pointer to a struct <a class="el" href="a00244.html" title="Structure of a topology object.">hwloc_obj</a>. </p>
75 <p>Indicate at build time which hwloc API version is being used. </p>
76 <p>This number is updated to (X&lt;&lt;16)+(Y&lt;&lt;8)+Z when a new release X.Y.Z actually modifies the API.</p>
77 <p>Users may check for available features at build time using this number (see <a class="el" href="a00406.html#faq_version_api">How do I handle API changes?</a>).</p>
78 <dl class="section note"><dt>Note</dt><dd>This should not be confused with HWLOC_VERSION, the library version. Two stable releases of the same series usually have the same <a class="el" href="a00191.html#ga8f4dfb8eef138af55dd1a0fa802e5476" title="Indicate at build time which hwloc API version is being used.">HWLOC_API_VERSION</a> even if their HWLOC_VERSION are different. </dd></dl>
79
80 </div>
81 </div>
82 <a id="gaac5bc1f46f55e10ef0141a68ce70e21f"></a>
83 <h2 class="memtitle"><span class="permalink"><a href="#gaac5bc1f46f55e10ef0141a68ce70e21f">&#9670;&nbsp;</a></span>HWLOC_COMPONENT_ABI</h2>
84
85 <div class="memitem">
86 <div class="memproto">
87 <table class="memname">
88 <tr>
89 <td class="memname">#define HWLOC_COMPONENT_ABI&#160;&#160;&#160;7</td>
90 </tr>
91 </table>
92 </div><div class="memdoc">
93
94 <p>Current component and plugin ABI version (see <a class="el" href="a00185_source.html">hwloc/plugins.h</a>) </p>
95
96 </div>
97 </div>
98 <h2 class="groupheader">Function Documentation</h2>
99 <a id="ga9c0b50c98add1adf57ed1ce85bb5190d"></a>
100 <h2 class="memtitle"><span class="permalink"><a href="#ga9c0b50c98add1adf57ed1ce85bb5190d">&#9670;&nbsp;</a></span>hwloc_get_api_version()</h2>
101
102 <div class="memitem">
103 <div class="memproto">
104 <table class="memname">
105 <tr>
106 <td class="memname">unsigned hwloc_get_api_version </td>
107 <td>(</td>
108 <td class="paramtype">void&#160;</td>
109 <td class="paramname"></td><td>)</td>
110 <td></td>
111 </tr>
112 </table>
113 </div><div class="memdoc">
114
115 <p>Indicate at runtime which hwloc API version was used at build time. </p>
116 <p>Should be <a class="el" href="a00191.html#ga8f4dfb8eef138af55dd1a0fa802e5476" title="Indicate at build time which hwloc API version is being used.">HWLOC_API_VERSION</a> if running on the same version. </p>
78117
79118 </div>
80119 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Topology Creation and Destruction</title>
7 <title>Hardware Locality (hwloc): Object Sets (hwloc_cpuset_t and hwloc_nodeset_t)</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="header">
4141 <div class="summary">
42 <a href="#typedef-members">Typedefs</a> &#124;
43 <a href="#func-members">Functions</a> </div>
42 <a href="#typedef-members">Typedefs</a> </div>
4443 <div class="headertitle">
45 <div class="title">Topology Creation and Destruction</div> </div>
44 <div class="title">Object Sets (hwloc_cpuset_t and hwloc_nodeset_t)</div> </div>
4645 </div><!--header-->
4746 <div class="contents">
4847 <table class="memberdecls">
4948 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
5049 Typedefs</h2></td></tr>
51 <tr class="memitem:ga9d1e76ee15a7dee158b786c30b6a6e38"><td class="memItemLeft" align="right" valign="top">typedef struct hwloc_topology *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></td></tr>
52 <tr class="separator:ga9d1e76ee15a7dee158b786c30b6a6e38"><td class="memSeparator" colspan="2">&#160;</td></tr>
53 </table><table class="memberdecls">
54 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
55 Functions</h2></td></tr>
56 <tr class="memitem:ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00192.html#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa">hwloc_topology_init</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> *topologyp)</td></tr>
57 <tr class="separator:ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:gabdf58d87ad77f6615fccdfe0535ff826"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00192.html#gabdf58d87ad77f6615fccdfe0535ff826">hwloc_topology_load</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
59 <tr class="separator:gabdf58d87ad77f6615fccdfe0535ff826"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:ga9f34a640b6fd28d23699d4d084667b15"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00192.html#ga9f34a640b6fd28d23699d4d084667b15">hwloc_topology_destroy</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
61 <tr class="separator:ga9f34a640b6fd28d23699d4d084667b15"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:ga62a161fc5e6f120344dc69a7bee4e587"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00192.html#ga62a161fc5e6f120344dc69a7bee4e587">hwloc_topology_dup</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> *newtopology, <a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> oldtopology)</td></tr>
63 <tr class="separator:ga62a161fc5e6f120344dc69a7bee4e587"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 <tr class="memitem:ga0647ae66458fe68172eb5a320042f870"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00192.html#ga0647ae66458fe68172eb5a320042f870">hwloc_topology_abi_check</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
65 <tr class="separator:ga0647ae66458fe68172eb5a320042f870"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 <tr class="memitem:gaf6746bc3a558ef1ac8348b4491d091b5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00192.html#gaf6746bc3a558ef1ac8348b4491d091b5">hwloc_topology_check</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
67 <tr class="separator:gaf6746bc3a558ef1ac8348b4491d091b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
50 <tr class="memitem:ga4bbf39b68b6f568fb92739e7c0ea7801"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></td></tr>
51 <tr class="separator:ga4bbf39b68b6f568fb92739e7c0ea7801"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:ga1f784433e9b606261f62d1134f6a3b25"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a></td></tr>
53 <tr class="separator:ga1f784433e9b606261f62d1134f6a3b25"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:ga37e35730fa7e775b5bb0afe893d6d508"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00192.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a></td></tr>
55 <tr class="separator:ga37e35730fa7e775b5bb0afe893d6d508"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:ga2f5276235841ad66a79bedad16a5a10c"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00192.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a></td></tr>
57 <tr class="separator:ga2f5276235841ad66a79bedad16a5a10c"><td class="memSeparator" colspan="2">&#160;</td></tr>
6858 </table>
6959 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
60 <p>Hwloc uses bitmaps to represent two distinct kinds of object sets: CPU sets (<a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801" title="A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.">hwloc_cpuset_t</a>) and NUMA node sets (<a class="el" href="a00192.html#ga37e35730fa7e775b5bb0afe893d6d508" title="A node set is a bitmap whose bits are set according to NUMA memory node physical OS indexes.">hwloc_nodeset_t</a>). These types are both typedefs to a common back end type (<a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84" title="Set of bits represented as an opaque pointer to an internal bitmap.">hwloc_bitmap_t</a>), and therefore all the hwloc bitmap functions are applicable to both <a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801" title="A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.">hwloc_cpuset_t</a> and <a class="el" href="a00192.html#ga37e35730fa7e775b5bb0afe893d6d508" title="A node set is a bitmap whose bits are set according to NUMA memory node physical OS indexes.">hwloc_nodeset_t</a> (see <a class="el" href="a00214.html">The bitmap API</a>).</p>
61 <p>The rationale for having two different types is that even though the actions one wants to perform on these types are the same (e.g., enable and disable individual items in the set/mask), they're used in very different contexts: one for specifying which processors to use and one for specifying which NUMA nodes to use. Hence, the name difference is really just to reflect the intent of where the type is used. </p>
7062 <h2 class="groupheader">Typedef Documentation</h2>
71 <a id="ga9d1e76ee15a7dee158b786c30b6a6e38"></a>
72 <h2 class="memtitle"><span class="permalink"><a href="#ga9d1e76ee15a7dee158b786c30b6a6e38">&#9670;&nbsp;</a></span>hwloc_topology_t</h2>
63 <a id="ga1f784433e9b606261f62d1134f6a3b25"></a>
64 <h2 class="memtitle"><span class="permalink"><a href="#ga1f784433e9b606261f62d1134f6a3b25">&#9670;&nbsp;</a></span>hwloc_const_cpuset_t</h2>
7365
7466 <div class="memitem">
7567 <div class="memproto">
7668 <table class="memname">
7769 <tr>
78 <td class="memname">typedef struct hwloc_topology* <a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></td>
70 <td class="memname">typedef <a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> <a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a></td>
7971 </tr>
8072 </table>
8173 </div><div class="memdoc">
8274
83 <p>Topology context. </p>
84 <p>To be initialized with <a class="el" href="a00192.html#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa" title="Allocate a topology context.">hwloc_topology_init()</a> and built with <a class="el" href="a00192.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a>. </p>
75 <p>A non-modifiable <a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801" title="A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.">hwloc_cpuset_t</a>. </p>
8576
8677 </div>
8778 </div>
88 <h2 class="groupheader">Function Documentation</h2>
89 <a id="ga0647ae66458fe68172eb5a320042f870"></a>
90 <h2 class="memtitle"><span class="permalink"><a href="#ga0647ae66458fe68172eb5a320042f870">&#9670;&nbsp;</a></span>hwloc_topology_abi_check()</h2>
79 <a id="ga2f5276235841ad66a79bedad16a5a10c"></a>
80 <h2 class="memtitle"><span class="permalink"><a href="#ga2f5276235841ad66a79bedad16a5a10c">&#9670;&nbsp;</a></span>hwloc_const_nodeset_t</h2>
9181
9282 <div class="memitem">
9383 <div class="memproto">
9484 <table class="memname">
9585 <tr>
96 <td class="memname">int hwloc_topology_abi_check </td>
97 <td>(</td>
98 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
99 <td class="paramname"><em>topology</em></td><td>)</td>
100 <td></td>
86 <td class="memname">typedef <a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> <a class="el" href="a00192.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a></td>
10187 </tr>
10288 </table>
10389 </div><div class="memdoc">
10490
105 <p>Verify that the topology is compatible with the current hwloc library. </p>
106 <p>This is useful when using the same topology structure (in memory) in different libraries that may use different hwloc installations (for instance if one library embeds a specific version of hwloc, while another library uses a default system-wide hwloc installation).</p>
107 <p>If all libraries/programs use the same hwloc installation, this function always returns success.</p>
108 <dl class="section return"><dt>Returns</dt><dd><code>0</code> on success.</dd>
109 <dd>
110 <code>-1</code> with <code>errno</code> set to <code>EINVAL</code> if incompatible.</dd></dl>
111 <dl class="section note"><dt>Note</dt><dd>If sharing between processes with <a class="el" href="a00232.html#ga61b20e346fc76f76420e3a88cc80a671" title="Duplicate a topology to a shared memory file.">hwloc_shmem_topology_write()</a>, the relevant check is already performed inside <a class="el" href="a00232.html#ga21545bd0f09d9b554c8e60a630e0e629" title="Adopt a shared memory topology stored in a file.">hwloc_shmem_topology_adopt()</a>. </dd></dl>
91 <p>A non-modifiable <a class="el" href="a00192.html#ga37e35730fa7e775b5bb0afe893d6d508" title="A node set is a bitmap whose bits are set according to NUMA memory node physical OS indexes.">hwloc_nodeset_t</a>. </p>
11292
11393 </div>
11494 </div>
115 <a id="gaf6746bc3a558ef1ac8348b4491d091b5"></a>
116 <h2 class="memtitle"><span class="permalink"><a href="#gaf6746bc3a558ef1ac8348b4491d091b5">&#9670;&nbsp;</a></span>hwloc_topology_check()</h2>
95 <a id="ga4bbf39b68b6f568fb92739e7c0ea7801"></a>
96 <h2 class="memtitle"><span class="permalink"><a href="#ga4bbf39b68b6f568fb92739e7c0ea7801">&#9670;&nbsp;</a></span>hwloc_cpuset_t</h2>
11797
11898 <div class="memitem">
11999 <div class="memproto">
120100 <table class="memname">
121101 <tr>
122 <td class="memname">void hwloc_topology_check </td>
123 <td>(</td>
124 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
125 <td class="paramname"><em>topology</em></td><td>)</td>
126 <td></td>
102 <td class="memname">typedef <a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> <a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></td>
127103 </tr>
128104 </table>
129105 </div><div class="memdoc">
130106
131 <p>Run internal checks on a topology structure. </p>
132 <p>The program aborts if an inconsistency is detected in the given topology.</p>
133 <dl class="params"><dt>Parameters</dt><dd>
134 <table class="params">
135 <tr><td class="paramname">topology</td><td>is the topology to be checked</td></tr>
136 </table>
137 </dd>
138 </dl>
139 <dl class="section note"><dt>Note</dt><dd>This routine is only useful to developers.</dd>
140 <dd>
141 The input topology should have been previously loaded with <a class="el" href="a00192.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a>. </dd></dl>
107 <p>A CPU set is a bitmap whose bits are set according to CPU physical OS indexes. </p>
108 <p>It may be consulted and modified with the bitmap API as any <a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84" title="Set of bits represented as an opaque pointer to an internal bitmap.">hwloc_bitmap_t</a> (see <a class="el" href="a00128_source.html">hwloc/bitmap.h</a>).</p>
109 <p>Each bit may be converted into a PU object using <a class="el" href="a00209.html#ga751c238a4931db5cc0ca3181b7dd7479" title="Returns the object of type HWLOC_OBJ_PU with os_index.">hwloc_get_pu_obj_by_os_index()</a>. </p>
142110
143111 </div>
144112 </div>
145 <a id="ga9f34a640b6fd28d23699d4d084667b15"></a>
146 <h2 class="memtitle"><span class="permalink"><a href="#ga9f34a640b6fd28d23699d4d084667b15">&#9670;&nbsp;</a></span>hwloc_topology_destroy()</h2>
113 <a id="ga37e35730fa7e775b5bb0afe893d6d508"></a>
114 <h2 class="memtitle"><span class="permalink"><a href="#ga37e35730fa7e775b5bb0afe893d6d508">&#9670;&nbsp;</a></span>hwloc_nodeset_t</h2>
147115
148116 <div class="memitem">
149117 <div class="memproto">
150118 <table class="memname">
151119 <tr>
152 <td class="memname">void hwloc_topology_destroy </td>
153 <td>(</td>
154 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
155 <td class="paramname"><em>topology</em></td><td>)</td>
156 <td></td>
120 <td class="memname">typedef <a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> <a class="el" href="a00192.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a></td>
157121 </tr>
158122 </table>
159123 </div><div class="memdoc">
160124
161 <p>Terminate and free a topology context. </p>
162 <dl class="params"><dt>Parameters</dt><dd>
163 <table class="params">
164 <tr><td class="paramname">topology</td><td>is the topology to be freed </td></tr>
165 </table>
166 </dd>
167 </dl>
168
169 </div>
170 </div>
171 <a id="ga62a161fc5e6f120344dc69a7bee4e587"></a>
172 <h2 class="memtitle"><span class="permalink"><a href="#ga62a161fc5e6f120344dc69a7bee4e587">&#9670;&nbsp;</a></span>hwloc_topology_dup()</h2>
173
174 <div class="memitem">
175 <div class="memproto">
176 <table class="memname">
177 <tr>
178 <td class="memname">int hwloc_topology_dup </td>
179 <td>(</td>
180 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> *&#160;</td>
181 <td class="paramname"><em>newtopology</em>, </td>
182 </tr>
183 <tr>
184 <td class="paramkey"></td>
185 <td></td>
186 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
187 <td class="paramname"><em>oldtopology</em>&#160;</td>
188 </tr>
189 <tr>
190 <td></td>
191 <td>)</td>
192 <td></td><td></td>
193 </tr>
194 </table>
195 </div><div class="memdoc">
196
197 <p>Duplicate a topology. </p>
198 <p>The entire topology structure as well as its objects are duplicated into a new one.</p>
199 <p>This is useful for keeping a backup while modifying a topology.</p>
200 <dl class="section note"><dt>Note</dt><dd>Object userdata is not duplicated since hwloc does not know what it point to. The objects of both old and new topologies will point to the same userdata. </dd></dl>
201
202 </div>
203 </div>
204 <a id="ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa"></a>
205 <h2 class="memtitle"><span class="permalink"><a href="#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa">&#9670;&nbsp;</a></span>hwloc_topology_init()</h2>
206
207 <div class="memitem">
208 <div class="memproto">
209 <table class="memname">
210 <tr>
211 <td class="memname">int hwloc_topology_init </td>
212 <td>(</td>
213 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> *&#160;</td>
214 <td class="paramname"><em>topologyp</em></td><td>)</td>
215 <td></td>
216 </tr>
217 </table>
218 </div><div class="memdoc">
219
220 <p>Allocate a topology context. </p>
221 <dl class="params"><dt>Parameters</dt><dd>
222 <table class="params">
223 <tr><td class="paramdir">[out]</td><td class="paramname">topologyp</td><td>is assigned a pointer to the new allocated context.</td></tr>
224 </table>
225 </dd>
226 </dl>
227 <dl class="section return"><dt>Returns</dt><dd>0 on success, -1 on error. </dd></dl>
228
229 </div>
230 </div>
231 <a id="gabdf58d87ad77f6615fccdfe0535ff826"></a>
232 <h2 class="memtitle"><span class="permalink"><a href="#gabdf58d87ad77f6615fccdfe0535ff826">&#9670;&nbsp;</a></span>hwloc_topology_load()</h2>
233
234 <div class="memitem">
235 <div class="memproto">
236 <table class="memname">
237 <tr>
238 <td class="memname">int hwloc_topology_load </td>
239 <td>(</td>
240 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
241 <td class="paramname"><em>topology</em></td><td>)</td>
242 <td></td>
243 </tr>
244 </table>
245 </div><div class="memdoc">
246
247 <p>Build the actual topology. </p>
248 <p>Build the actual topology once initialized with <a class="el" href="a00192.html#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa" title="Allocate a topology context.">hwloc_topology_init()</a> and tuned with <a class="el" href="a00199.html">Topology Detection Configuration and Query</a> and <a class="el" href="a00198.html">Changing the Source of Topology Discovery</a> routines. No other routine may be called earlier using this topology context.</p>
249 <dl class="params"><dt>Parameters</dt><dd>
250 <table class="params">
251 <tr><td class="paramname">topology</td><td>is the topology to be loaded with objects.</td></tr>
252 </table>
253 </dd>
254 </dl>
255 <dl class="section return"><dt>Returns</dt><dd>0 on success, -1 on error.</dd></dl>
256 <dl class="section note"><dt>Note</dt><dd>On failure, the topology is reinitialized. It should be either destroyed with <a class="el" href="a00192.html#ga9f34a640b6fd28d23699d4d084667b15" title="Terminate and free a topology context.">hwloc_topology_destroy()</a> or configured and loaded again.</dd>
257 <dd>
258 This function may be called only once per topology.</dd>
259 <dd>
260 The binding of the current thread or process may temporarily change during this call but it will be restored before it returns.</dd></dl>
261 <dl class="section see"><dt>See also</dt><dd><a class="el" href="a00199.html">Topology Detection Configuration and Query</a> and <a class="el" href="a00198.html">Changing the Source of Topology Discovery</a> </dd></dl>
125 <p>A node set is a bitmap whose bits are set according to NUMA memory node physical OS indexes. </p>
126 <p>It may be consulted and modified with the bitmap API as any <a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84" title="Set of bits represented as an opaque pointer to an internal bitmap.">hwloc_bitmap_t</a> (see <a class="el" href="a00128_source.html">hwloc/bitmap.h</a>). Each bit may be converted into a NUMA node object using <a class="el" href="a00209.html#gab89d9ed9edfaa3dd526fb6ee1a1618ea" title="Returns the object of type HWLOC_OBJ_NUMANODE with os_index.">hwloc_get_numanode_obj_by_os_index()</a>.</p>
127 <p>When binding memory on a system without any NUMA node, the single main memory bank is considered as NUMA node #0.</p>
128 <p>See also <a class="el" href="a00212.html">Converting between CPU sets and node sets</a>. </p>
262129
263130 </div>
264131 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Object levels, depths and types</title>
7 <title>Hardware Locality (hwloc): Object Types</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="header">
4141 <div class="summary">
42 <a href="#define-members">Macros</a> &#124;
43 <a href="#typedef-members">Typedefs</a> &#124;
4244 <a href="#enum-members">Enumerations</a> &#124;
4345 <a href="#func-members">Functions</a> </div>
4446 <div class="headertitle">
45 <div class="title">Object levels, depths and types</div> </div>
47 <div class="title">Object Types</div> </div>
4648 </div><!--header-->
4749 <div class="contents">
4850 <table class="memberdecls">
51 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
52 Macros</h2></td></tr>
53 <tr class="memitem:ga3b6e4128e9fe773863b123fa6e4a080b"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html#ga3b6e4128e9fe773863b123fa6e4a080b">HWLOC_TYPE_UNORDERED</a></td></tr>
54 <tr class="separator:ga3b6e4128e9fe773863b123fa6e4a080b"><td class="memSeparator" colspan="2">&#160;</td></tr>
55 </table><table class="memberdecls">
56 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
57 Typedefs</h2></td></tr>
58 <tr class="memitem:ga552ec74296a024237f474acec98694c0"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="a00193.html#ga791c9875c8fe20f3e1e5871e0657e59b">hwloc_obj_cache_type_e</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a></td></tr>
59 <tr class="separator:ga552ec74296a024237f474acec98694c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:gab34362c7a23296c3f12c5756747abda3"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="a00193.html#ga48a4803c72574191d7ead1c62aaf9860">hwloc_obj_bridge_type_e</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html#gab34362c7a23296c3f12c5756747abda3">hwloc_obj_bridge_type_t</a></td></tr>
61 <tr class="separator:gab34362c7a23296c3f12c5756747abda3"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:gaa9a6941ef7b1c169412518d7ef71b3d2"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="a00193.html#ga64f5d539df299c97ae80ce53fc4b56c0">hwloc_obj_osdev_type_e</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html#gaa9a6941ef7b1c169412518d7ef71b3d2">hwloc_obj_osdev_type_t</a></td></tr>
63 <tr class="separator:gaa9a6941ef7b1c169412518d7ef71b3d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 </table><table class="memberdecls">
4965 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
5066 Enumerations</h2></td></tr>
51 <tr class="memitem:gaf4e663cf42bbe20756b849c6293ef575"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html#gaf4e663cf42bbe20756b849c6293ef575">hwloc_get_type_depth_e</a> { <br />
52 &#160;&#160;<a class="el" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a>
53 , <a class="el" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c">HWLOC_TYPE_DEPTH_MULTIPLE</a>
54 , <a class="el" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a245c34ec9884c2cf5de5049b2153ed9c">HWLOC_TYPE_DEPTH_NUMANODE</a>
55 , <a class="el" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575af93b50182973e4a718d9d4db9e253a90">HWLOC_TYPE_DEPTH_BRIDGE</a>
56 , <br />
57 &#160;&#160;<a class="el" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575ad8b1516e699b57ce1c8d107fbd2f674c">HWLOC_TYPE_DEPTH_PCI_DEVICE</a>
58 , <a class="el" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575afe9a2131073eebbe129d4aa2928d3f46">HWLOC_TYPE_DEPTH_OS_DEVICE</a>
59 , <a class="el" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a96436a392b4cdcaa1a29bc65351b373f">HWLOC_TYPE_DEPTH_MISC</a>
60 , <a class="el" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a8b8d7d300c018c0eb65e6c9a9f162101">HWLOC_TYPE_DEPTH_MEMCACHE</a>
67 <tr class="memitem:gacd37bb612667dc437d66bfb175a8dc55"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> { <br />
68 &#160;&#160;<a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a3f4e83ffc4a259354959ae8a9eaa2a80">HWLOC_OBJ_MACHINE</a>
69 , <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55ab16ab8c0dbffc234921d86f3dfb63129">HWLOC_OBJ_PACKAGE</a>
70 , <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55ac793958f330bca371aa1535de8aff45f">HWLOC_OBJ_CORE</a>
71 , <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661">HWLOC_OBJ_PU</a>
72 , <br />
73 &#160;&#160;<a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a56389b8eb2e2f74f288bb657c4e72140">HWLOC_OBJ_L1CACHE</a>
74 , <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a18f61d19fe9f4bcea978fcc68bc078fb">HWLOC_OBJ_L2CACHE</a>
75 , <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a25fae0e0514c90e3973a29866a5a837d">HWLOC_OBJ_L3CACHE</a>
76 , <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a54923bfa13df9d7e6d6dd0d5baff5f72">HWLOC_OBJ_L4CACHE</a>
77 , <br />
78 &#160;&#160;<a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a67194c9de5e3e581c64c11d2eb1c109d">HWLOC_OBJ_L5CACHE</a>
79 , <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55afa834a85d9e53836cf0db6d0bd8329b4">HWLOC_OBJ_L1ICACHE</a>
80 , <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a10713b7e561b8cc32544cd31b1c17f8d">HWLOC_OBJ_L2ICACHE</a>
81 , <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55ac22850c717f07bf7ffb316fadd08d218">HWLOC_OBJ_L3ICACHE</a>
82 , <br />
83 &#160;&#160;<a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a5269ef95be72f88465559d35c9b7ad56">HWLOC_OBJ_GROUP</a>
84 , <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>
85 , <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0">HWLOC_OBJ_BRIDGE</a>
86 , <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9">HWLOC_OBJ_PCI_DEVICE</a>
87 , <br />
88 &#160;&#160;<a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075">HWLOC_OBJ_OS_DEVICE</a>
89 , <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a19f8a6953fa91efc76bcbcdf2d22de4d">HWLOC_OBJ_MISC</a>
90 , <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a0ed5bd98974729a0c476c39e917dabd6">HWLOC_OBJ_MEMCACHE</a>
91 , <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55af78bb6cde53aaaaa162a7dc420c409da">HWLOC_OBJ_DIE</a>
92 , <br />
93 &#160;&#160;<b>HWLOC_OBJ_TYPE_MAX</b>
6194 <br />
6295 }</td></tr>
63 <tr class="separator:gaf4e663cf42bbe20756b849c6293ef575"><td class="memSeparator" colspan="2">&#160;</td></tr>
96 <tr class="separator:gacd37bb612667dc437d66bfb175a8dc55"><td class="memSeparator" colspan="2">&#160;</td></tr>
97 <tr class="memitem:ga791c9875c8fe20f3e1e5871e0657e59b"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html#ga791c9875c8fe20f3e1e5871e0657e59b">hwloc_obj_cache_type_e</a> { <a class="el" href="a00193.html#gga791c9875c8fe20f3e1e5871e0657e59ba3900b3b2db54941aac249e5a638a2d7a">HWLOC_OBJ_CACHE_UNIFIED</a>
98 , <a class="el" href="a00193.html#gga791c9875c8fe20f3e1e5871e0657e59bacac60ecad4206f85aeb79bef1604b488">HWLOC_OBJ_CACHE_DATA</a>
99 , <a class="el" href="a00193.html#gga791c9875c8fe20f3e1e5871e0657e59ba6f98b0d422b38ba90c5f5c79a11b0658">HWLOC_OBJ_CACHE_INSTRUCTION</a>
100 }</td></tr>
101 <tr class="separator:ga791c9875c8fe20f3e1e5871e0657e59b"><td class="memSeparator" colspan="2">&#160;</td></tr>
102 <tr class="memitem:ga48a4803c72574191d7ead1c62aaf9860"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html#ga48a4803c72574191d7ead1c62aaf9860">hwloc_obj_bridge_type_e</a> { <a class="el" href="a00193.html#gga48a4803c72574191d7ead1c62aaf9860a2c7660f3864ad2810c1e72aad285e574">HWLOC_OBJ_BRIDGE_HOST</a>
103 , <a class="el" href="a00193.html#gga48a4803c72574191d7ead1c62aaf9860a8f3b4cecf3dab6073d74696d10863c60">HWLOC_OBJ_BRIDGE_PCI</a>
104 }</td></tr>
105 <tr class="separator:ga48a4803c72574191d7ead1c62aaf9860"><td class="memSeparator" colspan="2">&#160;</td></tr>
106 <tr class="memitem:ga64f5d539df299c97ae80ce53fc4b56c0"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html#ga64f5d539df299c97ae80ce53fc4b56c0">hwloc_obj_osdev_type_e</a> { <br />
107 &#160;&#160;<a class="el" href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0a689b0488c3c0d08d116751c6b9cb8871">HWLOC_OBJ_OSDEV_BLOCK</a>
108 , <a class="el" href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90">HWLOC_OBJ_OSDEV_GPU</a>
109 , <a class="el" href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0ab715d81155f771573c8682dffc65021b">HWLOC_OBJ_OSDEV_NETWORK</a>
110 , <a class="el" href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0a52157d03694fdae82dddd57ca8c973b6">HWLOC_OBJ_OSDEV_OPENFABRICS</a>
111 , <br />
112 &#160;&#160;<a class="el" href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0a827ad1643360711a8b6c6af671366791">HWLOC_OBJ_OSDEV_DMA</a>
113 , <a class="el" href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83">HWLOC_OBJ_OSDEV_COPROC</a>
114 <br />
115 }</td></tr>
116 <tr class="separator:ga64f5d539df299c97ae80ce53fc4b56c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
64117 </table><table class="memberdecls">
65118 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
66119 Functions</h2></td></tr>
67 <tr class="memitem:gae54d1782ca9b54bea915f5c18a9158fa"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html#gae54d1782ca9b54bea915f5c18a9158fa">hwloc_topology_get_depth</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict topology)</td></tr>
68 <tr class="separator:gae54d1782ca9b54bea915f5c18a9158fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
69 <tr class="memitem:ga8bec782e21be313750da70cf7428b374"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
70 <tr class="separator:ga8bec782e21be313750da70cf7428b374"><td class="memSeparator" colspan="2">&#160;</td></tr>
71 <tr class="memitem:gae85786340b88e24835f8c403a1e2e54b"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html#gae85786340b88e24835f8c403a1e2e54b">hwloc_get_memory_parents_depth</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
72 <tr class="separator:gae85786340b88e24835f8c403a1e2e54b"><td class="memSeparator" colspan="2">&#160;</td></tr>
73 <tr class="memitem:ga8125328e69eba709c33ea8055c12589b"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html#ga8125328e69eba709c33ea8055c12589b">hwloc_get_type_or_below_depth</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
74 <tr class="separator:ga8125328e69eba709c33ea8055c12589b"><td class="memSeparator" colspan="2">&#160;</td></tr>
75 <tr class="memitem:ga8a9ee573b7d2190272095d10712a7cca"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html#ga8a9ee573b7d2190272095d10712a7cca">hwloc_get_type_or_above_depth</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
76 <tr class="separator:ga8a9ee573b7d2190272095d10712a7cca"><td class="memSeparator" colspan="2">&#160;</td></tr>
77 <tr class="memitem:ga506b0682b98aa264d53e934d2e9badb0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html#ga506b0682b98aa264d53e934d2e9badb0">hwloc_get_depth_type</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int depth)</td></tr>
78 <tr class="separator:ga506b0682b98aa264d53e934d2e9badb0"><td class="memSeparator" colspan="2">&#160;</td></tr>
79 <tr class="memitem:ga1d5ceafe8130fe6e8657bf0bc666ba50"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html#ga1d5ceafe8130fe6e8657bf0bc666ba50">hwloc_get_nbobjs_by_depth</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int depth)</td></tr>
80 <tr class="separator:ga1d5ceafe8130fe6e8657bf0bc666ba50"><td class="memSeparator" colspan="2">&#160;</td></tr>
81 <tr class="memitem:ga789a3f65aedff644be64a18526a03065"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html#ga789a3f65aedff644be64a18526a03065">hwloc_get_nbobjs_by_type</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
82 <tr class="separator:ga789a3f65aedff644be64a18526a03065"><td class="memSeparator" colspan="2">&#160;</td></tr>
83 <tr class="memitem:ga2d4b12fc187dfc53b35f2fa21d21044d"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html#ga2d4b12fc187dfc53b35f2fa21d21044d">hwloc_get_root_obj</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
84 <tr class="separator:ga2d4b12fc187dfc53b35f2fa21d21044d"><td class="memSeparator" colspan="2">&#160;</td></tr>
85 <tr class="memitem:ga391f6b2613f0065673eaa4069b93d4e0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html#ga391f6b2613f0065673eaa4069b93d4e0">hwloc_get_obj_by_depth</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int depth, unsigned idx)</td></tr>
86 <tr class="separator:ga391f6b2613f0065673eaa4069b93d4e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
87 <tr class="memitem:ga6f414dd80a2b943967a0ac92da3181a2"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html#ga6f414dd80a2b943967a0ac92da3181a2">hwloc_get_obj_by_type</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, unsigned idx)</td></tr>
88 <tr class="separator:ga6f414dd80a2b943967a0ac92da3181a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
89 <tr class="memitem:gac140a9b939d9fa0b30c4a910efcb0656"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int depth, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> prev)</td></tr>
90 <tr class="separator:gac140a9b939d9fa0b30c4a910efcb0656"><td class="memSeparator" colspan="2">&#160;</td></tr>
91 <tr class="memitem:ga759e88eaf5a230ad283e9d4c42486735"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html#ga759e88eaf5a230ad283e9d4c42486735">hwloc_get_next_obj_by_type</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> prev)</td></tr>
92 <tr class="separator:ga759e88eaf5a230ad283e9d4c42486735"><td class="memSeparator" colspan="2">&#160;</td></tr>
120 <tr class="memitem:ga1820ea0dfd8e9dca28f9ea7624df5ae2"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00193.html#ga1820ea0dfd8e9dca28f9ea7624df5ae2">hwloc_compare_types</a> (<a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type1, <a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type2)</td></tr>
121 <tr class="separator:ga1820ea0dfd8e9dca28f9ea7624df5ae2"><td class="memSeparator" colspan="2">&#160;</td></tr>
93122 </table>
94123 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
95 <p>Be sure to see the figure in <a class="el" href="a00386.html">Terms and Definitions</a> 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. </p>
124 <h2 class="groupheader">Macro Definition Documentation</h2>
125 <a id="ga3b6e4128e9fe773863b123fa6e4a080b"></a>
126 <h2 class="memtitle"><span class="permalink"><a href="#ga3b6e4128e9fe773863b123fa6e4a080b">&#9670;&nbsp;</a></span>HWLOC_TYPE_UNORDERED</h2>
127
128 <div class="memitem">
129 <div class="memproto">
130 <table class="memname">
131 <tr>
132 <td class="memname">#define HWLOC_TYPE_UNORDERED</td>
133 </tr>
134 </table>
135 </div><div class="memdoc">
136
137 <p>Value returned by <a class="el" href="a00193.html#ga1820ea0dfd8e9dca28f9ea7624df5ae2" title="Compare the depth of two object types.">hwloc_compare_types()</a> when types can not be compared. </p>
138
139 </div>
140 </div>
141 <h2 class="groupheader">Typedef Documentation</h2>
142 <a id="gab34362c7a23296c3f12c5756747abda3"></a>
143 <h2 class="memtitle"><span class="permalink"><a href="#gab34362c7a23296c3f12c5756747abda3">&#9670;&nbsp;</a></span>hwloc_obj_bridge_type_t</h2>
144
145 <div class="memitem">
146 <div class="memproto">
147 <table class="memname">
148 <tr>
149 <td class="memname">typedef enum <a class="el" href="a00193.html#ga48a4803c72574191d7ead1c62aaf9860">hwloc_obj_bridge_type_e</a> <a class="el" href="a00193.html#gab34362c7a23296c3f12c5756747abda3">hwloc_obj_bridge_type_t</a></td>
150 </tr>
151 </table>
152 </div><div class="memdoc">
153
154 <p>Type of one side (upstream or downstream) of an I/O bridge. </p>
155
156 </div>
157 </div>
158 <a id="ga552ec74296a024237f474acec98694c0"></a>
159 <h2 class="memtitle"><span class="permalink"><a href="#ga552ec74296a024237f474acec98694c0">&#9670;&nbsp;</a></span>hwloc_obj_cache_type_t</h2>
160
161 <div class="memitem">
162 <div class="memproto">
163 <table class="memname">
164 <tr>
165 <td class="memname">typedef enum <a class="el" href="a00193.html#ga791c9875c8fe20f3e1e5871e0657e59b">hwloc_obj_cache_type_e</a> <a class="el" href="a00193.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a></td>
166 </tr>
167 </table>
168 </div><div class="memdoc">
169
170 <p>Cache type. </p>
171
172 </div>
173 </div>
174 <a id="gaa9a6941ef7b1c169412518d7ef71b3d2"></a>
175 <h2 class="memtitle"><span class="permalink"><a href="#gaa9a6941ef7b1c169412518d7ef71b3d2">&#9670;&nbsp;</a></span>hwloc_obj_osdev_type_t</h2>
176
177 <div class="memitem">
178 <div class="memproto">
179 <table class="memname">
180 <tr>
181 <td class="memname">typedef enum <a class="el" href="a00193.html#ga64f5d539df299c97ae80ce53fc4b56c0">hwloc_obj_osdev_type_e</a> <a class="el" href="a00193.html#gaa9a6941ef7b1c169412518d7ef71b3d2">hwloc_obj_osdev_type_t</a></td>
182 </tr>
183 </table>
184 </div><div class="memdoc">
185
186 <p>Type of a OS device. </p>
187
188 </div>
189 </div>
96190 <h2 class="groupheader">Enumeration Type Documentation</h2>
97 <a id="gaf4e663cf42bbe20756b849c6293ef575"></a>
98 <h2 class="memtitle"><span class="permalink"><a href="#gaf4e663cf42bbe20756b849c6293ef575">&#9670;&nbsp;</a></span>hwloc_get_type_depth_e</h2>
99
100 <div class="memitem">
101 <div class="memproto">
102 <table class="memname">
103 <tr>
104 <td class="memname">enum <a class="el" href="a00193.html#gaf4e663cf42bbe20756b849c6293ef575">hwloc_get_type_depth_e</a></td>
105 </tr>
106 </table>
107 </div><div class="memdoc">
191 <a id="ga48a4803c72574191d7ead1c62aaf9860"></a>
192 <h2 class="memtitle"><span class="permalink"><a href="#ga48a4803c72574191d7ead1c62aaf9860">&#9670;&nbsp;</a></span>hwloc_obj_bridge_type_e</h2>
193
194 <div class="memitem">
195 <div class="memproto">
196 <table class="memname">
197 <tr>
198 <td class="memname">enum <a class="el" href="a00193.html#ga48a4803c72574191d7ead1c62aaf9860">hwloc_obj_bridge_type_e</a></td>
199 </tr>
200 </table>
201 </div><div class="memdoc">
202
203 <p>Type of one side (upstream or downstream) of an I/O bridge. </p>
108204 <table class="fieldtable">
109 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad"></a>HWLOC_TYPE_DEPTH_UNKNOWN&#160;</td><td class="fielddoc"><p>No object of given type exists in the topology. </p>
110 </td></tr>
111 <tr><td class="fieldname"><a id="ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c"></a>HWLOC_TYPE_DEPTH_MULTIPLE&#160;</td><td class="fielddoc"><p>Objects of given type exist at different depth in the topology (only for Groups). </p>
112 </td></tr>
113 <tr><td class="fieldname"><a id="ggaf4e663cf42bbe20756b849c6293ef575a245c34ec9884c2cf5de5049b2153ed9c"></a>HWLOC_TYPE_DEPTH_NUMANODE&#160;</td><td class="fielddoc"><p>Virtual depth for NUMA nodes. </p>
114 </td></tr>
115 <tr><td class="fieldname"><a id="ggaf4e663cf42bbe20756b849c6293ef575af93b50182973e4a718d9d4db9e253a90"></a>HWLOC_TYPE_DEPTH_BRIDGE&#160;</td><td class="fielddoc"><p>Virtual depth for bridge object level. </p>
116 </td></tr>
117 <tr><td class="fieldname"><a id="ggaf4e663cf42bbe20756b849c6293ef575ad8b1516e699b57ce1c8d107fbd2f674c"></a>HWLOC_TYPE_DEPTH_PCI_DEVICE&#160;</td><td class="fielddoc"><p>Virtual depth for PCI device object level. </p>
118 </td></tr>
119 <tr><td class="fieldname"><a id="ggaf4e663cf42bbe20756b849c6293ef575afe9a2131073eebbe129d4aa2928d3f46"></a>HWLOC_TYPE_DEPTH_OS_DEVICE&#160;</td><td class="fielddoc"><p>Virtual depth for software device object level. </p>
120 </td></tr>
121 <tr><td class="fieldname"><a id="ggaf4e663cf42bbe20756b849c6293ef575a96436a392b4cdcaa1a29bc65351b373f"></a>HWLOC_TYPE_DEPTH_MISC&#160;</td><td class="fielddoc"><p>Virtual depth for Misc object. </p>
122 </td></tr>
123 <tr><td class="fieldname"><a id="ggaf4e663cf42bbe20756b849c6293ef575a8b8d7d300c018c0eb65e6c9a9f162101"></a>HWLOC_TYPE_DEPTH_MEMCACHE&#160;</td><td class="fielddoc"><p>Virtual depth for MemCache object. </p>
205 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga48a4803c72574191d7ead1c62aaf9860a2c7660f3864ad2810c1e72aad285e574"></a>HWLOC_OBJ_BRIDGE_HOST&#160;</td><td class="fielddoc"><p>Host-side of a bridge, only possible upstream. </p>
206 </td></tr>
207 <tr><td class="fieldname"><a id="gga48a4803c72574191d7ead1c62aaf9860a8f3b4cecf3dab6073d74696d10863c60"></a>HWLOC_OBJ_BRIDGE_PCI&#160;</td><td class="fielddoc"><p>PCI-side of a bridge. </p>
208 </td></tr>
209 </table>
210
211 </div>
212 </div>
213 <a id="ga791c9875c8fe20f3e1e5871e0657e59b"></a>
214 <h2 class="memtitle"><span class="permalink"><a href="#ga791c9875c8fe20f3e1e5871e0657e59b">&#9670;&nbsp;</a></span>hwloc_obj_cache_type_e</h2>
215
216 <div class="memitem">
217 <div class="memproto">
218 <table class="memname">
219 <tr>
220 <td class="memname">enum <a class="el" href="a00193.html#ga791c9875c8fe20f3e1e5871e0657e59b">hwloc_obj_cache_type_e</a></td>
221 </tr>
222 </table>
223 </div><div class="memdoc">
224
225 <p>Cache type. </p>
226 <table class="fieldtable">
227 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga791c9875c8fe20f3e1e5871e0657e59ba3900b3b2db54941aac249e5a638a2d7a"></a>HWLOC_OBJ_CACHE_UNIFIED&#160;</td><td class="fielddoc"><p>Unified cache. </p>
228 </td></tr>
229 <tr><td class="fieldname"><a id="gga791c9875c8fe20f3e1e5871e0657e59bacac60ecad4206f85aeb79bef1604b488"></a>HWLOC_OBJ_CACHE_DATA&#160;</td><td class="fielddoc"><p>Data cache. </p>
230 </td></tr>
231 <tr><td class="fieldname"><a id="gga791c9875c8fe20f3e1e5871e0657e59ba6f98b0d422b38ba90c5f5c79a11b0658"></a>HWLOC_OBJ_CACHE_INSTRUCTION&#160;</td><td class="fielddoc"><p>Instruction cache (filtered out by default). </p>
232 </td></tr>
233 </table>
234
235 </div>
236 </div>
237 <a id="ga64f5d539df299c97ae80ce53fc4b56c0"></a>
238 <h2 class="memtitle"><span class="permalink"><a href="#ga64f5d539df299c97ae80ce53fc4b56c0">&#9670;&nbsp;</a></span>hwloc_obj_osdev_type_e</h2>
239
240 <div class="memitem">
241 <div class="memproto">
242 <table class="memname">
243 <tr>
244 <td class="memname">enum <a class="el" href="a00193.html#ga64f5d539df299c97ae80ce53fc4b56c0">hwloc_obj_osdev_type_e</a></td>
245 </tr>
246 </table>
247 </div><div class="memdoc">
248
249 <p>Type of a OS device. </p>
250 <table class="fieldtable">
251 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga64f5d539df299c97ae80ce53fc4b56c0a689b0488c3c0d08d116751c6b9cb8871"></a>HWLOC_OBJ_OSDEV_BLOCK&#160;</td><td class="fielddoc"><p>Operating system block device, or non-volatile memory device. For instance "sda" or "dax2.0" on Linux. </p>
252 </td></tr>
253 <tr><td class="fieldname"><a id="gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90"></a>HWLOC_OBJ_OSDEV_GPU&#160;</td><td class="fielddoc"><p>Operating system GPU device. For instance ":0.0" for a GL display, "card0" for a Linux DRM device. </p>
254 </td></tr>
255 <tr><td class="fieldname"><a id="gga64f5d539df299c97ae80ce53fc4b56c0ab715d81155f771573c8682dffc65021b"></a>HWLOC_OBJ_OSDEV_NETWORK&#160;</td><td class="fielddoc"><p>Operating system network device. For instance the "eth0" interface on Linux. </p>
256 </td></tr>
257 <tr><td class="fieldname"><a id="gga64f5d539df299c97ae80ce53fc4b56c0a52157d03694fdae82dddd57ca8c973b6"></a>HWLOC_OBJ_OSDEV_OPENFABRICS&#160;</td><td class="fielddoc"><p>Operating system openfabrics device. For instance the "mlx4_0" InfiniBand HCA, or "hfi1_0" Omni-Path interface on Linux. </p>
258 </td></tr>
259 <tr><td class="fieldname"><a id="gga64f5d539df299c97ae80ce53fc4b56c0a827ad1643360711a8b6c6af671366791"></a>HWLOC_OBJ_OSDEV_DMA&#160;</td><td class="fielddoc"><p>Operating system dma engine device. For instance the "dma0chan0" DMA channel on Linux. </p>
260 </td></tr>
261 <tr><td class="fieldname"><a id="gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83"></a>HWLOC_OBJ_OSDEV_COPROC&#160;</td><td class="fielddoc"><p>Operating system co-processor device. For instance "opencl0d0" for a OpenCL device, "cuda0" for a CUDA device. </p>
262 </td></tr>
263 </table>
264
265 </div>
266 </div>
267 <a id="gacd37bb612667dc437d66bfb175a8dc55"></a>
268 <h2 class="memtitle"><span class="permalink"><a href="#gacd37bb612667dc437d66bfb175a8dc55">&#9670;&nbsp;</a></span>hwloc_obj_type_t</h2>
269
270 <div class="memitem">
271 <div class="memproto">
272 <table class="memname">
273 <tr>
274 <td class="memname">enum <a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a></td>
275 </tr>
276 </table>
277 </div><div class="memdoc">
278
279 <p>Type of topology object. </p>
280 <dl class="section note"><dt>Note</dt><dd>Do not rely on the ordering or completeness of the values as new ones may be defined in the future! If you need to compare types, use <a class="el" href="a00193.html#ga1820ea0dfd8e9dca28f9ea7624df5ae2" title="Compare the depth of two object types.">hwloc_compare_types()</a> instead. </dd></dl>
281 <table class="fieldtable">
282 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a3f4e83ffc4a259354959ae8a9eaa2a80"></a>HWLOC_OBJ_MACHINE&#160;</td><td class="fielddoc"><p>Machine. A set of processors and memory with cache coherency. </p>
283 <p>This type is always used for the root object of a topology, and never used anywhere else. Hence its parent is always <code>NULL</code>. </p>
284 </td></tr>
285 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55ab16ab8c0dbffc234921d86f3dfb63129"></a>HWLOC_OBJ_PACKAGE&#160;</td><td class="fielddoc"><p>Physical package. The physical package that usually gets inserted into a socket on the motherboard. A processor package usually contains multiple cores, and possibly some dies. </p>
286 </td></tr>
287 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55ac793958f330bca371aa1535de8aff45f"></a>HWLOC_OBJ_CORE&#160;</td><td class="fielddoc"><p>Core. A computation unit (may be shared by several PUs, aka logical processors). </p>
288 </td></tr>
289 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661"></a>HWLOC_OBJ_PU&#160;</td><td class="fielddoc"><p>Processing Unit, or (Logical) Processor. An execution unit (may share a core with some other logical processors, e.g. in the case of an SMT core). </p>
290 <p>This is the smallest object representing CPU resources, it cannot have any child except Misc objects.</p>
291 <p>Objects of this kind are always reported and can thus be used as fallback when others are not. </p>
292 </td></tr>
293 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a56389b8eb2e2f74f288bb657c4e72140"></a>HWLOC_OBJ_L1CACHE&#160;</td><td class="fielddoc"><p>Level 1 Data (or Unified) Cache. </p>
294 </td></tr>
295 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a18f61d19fe9f4bcea978fcc68bc078fb"></a>HWLOC_OBJ_L2CACHE&#160;</td><td class="fielddoc"><p>Level 2 Data (or Unified) Cache. </p>
296 </td></tr>
297 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a25fae0e0514c90e3973a29866a5a837d"></a>HWLOC_OBJ_L3CACHE&#160;</td><td class="fielddoc"><p>Level 3 Data (or Unified) Cache. </p>
298 </td></tr>
299 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a54923bfa13df9d7e6d6dd0d5baff5f72"></a>HWLOC_OBJ_L4CACHE&#160;</td><td class="fielddoc"><p>Level 4 Data (or Unified) Cache. </p>
300 </td></tr>
301 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a67194c9de5e3e581c64c11d2eb1c109d"></a>HWLOC_OBJ_L5CACHE&#160;</td><td class="fielddoc"><p>Level 5 Data (or Unified) Cache. </p>
302 </td></tr>
303 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55afa834a85d9e53836cf0db6d0bd8329b4"></a>HWLOC_OBJ_L1ICACHE&#160;</td><td class="fielddoc"><p>Level 1 instruction Cache (filtered out by default). </p>
304 </td></tr>
305 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a10713b7e561b8cc32544cd31b1c17f8d"></a>HWLOC_OBJ_L2ICACHE&#160;</td><td class="fielddoc"><p>Level 2 instruction Cache (filtered out by default). </p>
306 </td></tr>
307 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55ac22850c717f07bf7ffb316fadd08d218"></a>HWLOC_OBJ_L3ICACHE&#160;</td><td class="fielddoc"><p>Level 3 instruction Cache (filtered out by default). </p>
308 </td></tr>
309 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a5269ef95be72f88465559d35c9b7ad56"></a>HWLOC_OBJ_GROUP&#160;</td><td class="fielddoc"><p>Group objects. Objects which do not fit in the above but are detected by hwloc and are useful to take into account for affinity. For instance, some operating systems expose their arbitrary processors aggregation this way. And hwloc may insert such objects to group NUMA nodes according to their distances. See also <a class="el" href="a00406.html#faq_groups">What are these Group objects in my topology?</a>. </p>
310 <p>These objects are removed when they do not bring any structure (see <a class="el" href="a00202.html#gga9a5a1f0140cd1952544477833733195ba7664716643bf1db83e631eed34f659e4" title="Only ignore objects if their entire level does not bring any structure.">HWLOC_TYPE_FILTER_KEEP_STRUCTURE</a>). </p>
311 </td></tr>
312 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a"></a>HWLOC_OBJ_NUMANODE&#160;</td><td class="fielddoc"><p>NUMA node. An object that contains memory that is directly and byte-accessible to the host processors. It is usually close to some cores (the corresponding objects are descendants of the NUMA node object in the hwloc tree). </p>
313 <p>This is the smallest object representing Memory resources, it cannot have any child except Misc objects. However it may have Memory-side cache parents.</p>
314 <p>There is always at least one such object in the topology even if the machine is not NUMA.</p>
315 <p>Memory objects are not listed in the main children list, but rather in the dedicated Memory children list.</p>
316 <p>NUMA nodes have a special depth <a class="el" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a245c34ec9884c2cf5de5049b2153ed9c" title="Virtual depth for NUMA nodes.">HWLOC_TYPE_DEPTH_NUMANODE</a> instead of a normal depth just like other objects in the main tree. </p>
317 </td></tr>
318 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0"></a>HWLOC_OBJ_BRIDGE&#160;</td><td class="fielddoc"><p>Bridge (filtered out by default). Any bridge (or PCI switch) that connects the host or an I/O bus, to another I/O bus. </p>
319 <p>Bridges are not added to the topology unless their filtering is changed (see <a class="el" href="a00202.html#gad894e70f15f8d4aada7be8d1aba38b7e" title="Set the filtering for the given object type.">hwloc_topology_set_type_filter()</a> and <a class="el" href="a00202.html#ga0ab38705357bc1203abe829da8a12ad3" title="Set the filtering for all I/O object types.">hwloc_topology_set_io_types_filter()</a>).</p>
320 <p>I/O objects are not listed in the main children list, but rather in the dedicated io children list. I/O objects have NULL CPU and node sets. </p>
321 </td></tr>
322 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9"></a>HWLOC_OBJ_PCI_DEVICE&#160;</td><td class="fielddoc"><p>PCI device (filtered out by default). </p>
323 <p>PCI devices are not added to the topology unless their filtering is changed (see <a class="el" href="a00202.html#gad894e70f15f8d4aada7be8d1aba38b7e" title="Set the filtering for the given object type.">hwloc_topology_set_type_filter()</a> and <a class="el" href="a00202.html#ga0ab38705357bc1203abe829da8a12ad3" title="Set the filtering for all I/O object types.">hwloc_topology_set_io_types_filter()</a>).</p>
324 <p>I/O objects are not listed in the main children list, but rather in the dedicated io children list. I/O objects have NULL CPU and node sets. </p>
325 </td></tr>
326 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075"></a>HWLOC_OBJ_OS_DEVICE&#160;</td><td class="fielddoc"><p>Operating system device (filtered out by default). </p>
327 <p>OS devices are not added to the topology unless their filtering is changed (see <a class="el" href="a00202.html#gad894e70f15f8d4aada7be8d1aba38b7e" title="Set the filtering for the given object type.">hwloc_topology_set_type_filter()</a> and <a class="el" href="a00202.html#ga0ab38705357bc1203abe829da8a12ad3" title="Set the filtering for all I/O object types.">hwloc_topology_set_io_types_filter()</a>).</p>
328 <p>I/O objects are not listed in the main children list, but rather in the dedicated io children list. I/O objects have NULL CPU and node sets. </p>
329 </td></tr>
330 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a19f8a6953fa91efc76bcbcdf2d22de4d"></a>HWLOC_OBJ_MISC&#160;</td><td class="fielddoc"><p>Miscellaneous objects (filtered out by default). Objects without particular meaning, that can e.g. be added by the application for its own use, or by hwloc for miscellaneous objects such as MemoryModule (DIMMs). </p>
331 <p>They are not added to the topology unless their filtering is changed (see <a class="el" href="a00202.html#gad894e70f15f8d4aada7be8d1aba38b7e" title="Set the filtering for the given object type.">hwloc_topology_set_type_filter()</a>).</p>
332 <p>These objects are not listed in the main children list, but rather in the dedicated misc children list. Misc objects may only have Misc objects as children, and those are in the dedicated misc children list as well. Misc objects have NULL CPU and node sets. </p>
333 </td></tr>
334 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55a0ed5bd98974729a0c476c39e917dabd6"></a>HWLOC_OBJ_MEMCACHE&#160;</td><td class="fielddoc"><p>Memory-side cache (filtered out by default). A cache in front of a specific NUMA node. </p>
335 <p>This object always has at least one NUMA node as a memory child.</p>
336 <p>Memory objects are not listed in the main children list, but rather in the dedicated Memory children list.</p>
337 <p>Memory-side cache have a special depth <a class="el" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a8b8d7d300c018c0eb65e6c9a9f162101" title="Virtual depth for MemCache object.">HWLOC_TYPE_DEPTH_MEMCACHE</a> instead of a normal depth just like other objects in the main tree. </p>
338 </td></tr>
339 <tr><td class="fieldname"><a id="ggacd37bb612667dc437d66bfb175a8dc55af78bb6cde53aaaaa162a7dc420c409da"></a>HWLOC_OBJ_DIE&#160;</td><td class="fielddoc"><p>Die within a physical package. A subpart of the physical package, that contains multiple cores. </p>
124340 </td></tr>
125341 </table>
126342
127343 </div>
128344 </div>
129345 <h2 class="groupheader">Function Documentation</h2>
130 <a id="ga506b0682b98aa264d53e934d2e9badb0"></a>
131 <h2 class="memtitle"><span class="permalink"><a href="#ga506b0682b98aa264d53e934d2e9badb0">&#9670;&nbsp;</a></span>hwloc_get_depth_type()</h2>
132
133 <div class="memitem">
134 <div class="memproto">
135 <table class="memname">
136 <tr>
137 <td class="memname"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> hwloc_get_depth_type </td>
346 <a id="ga1820ea0dfd8e9dca28f9ea7624df5ae2"></a>
347 <h2 class="memtitle"><span class="permalink"><a href="#ga1820ea0dfd8e9dca28f9ea7624df5ae2">&#9670;&nbsp;</a></span>hwloc_compare_types()</h2>
348
349 <div class="memitem">
350 <div class="memproto">
351 <table class="memname">
352 <tr>
353 <td class="memname">int hwloc_compare_types </td>
138354 <td>(</td>
139 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
140 <td class="paramname"><em>topology</em>, </td>
355 <td class="paramtype"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
356 <td class="paramname"><em>type1</em>, </td>
141357 </tr>
142358 <tr>
143359 <td class="paramkey"></td>
144360 <td></td>
145 <td class="paramtype">int&#160;</td>
146 <td class="paramname"><em>depth</em>&#160;</td>
361 <td class="paramtype"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
362 <td class="paramname"><em>type2</em>&#160;</td>
147363 </tr>
148364 <tr>
149365 <td></td>
153369 </table>
154370 </div><div class="memdoc">
155371
156 <p>Returns the type of objects at depth <code>depth</code>. </p>
157 <p><code>depth</code> should between 0 and <a class="el" href="a00193.html#gae54d1782ca9b54bea915f5c18a9158fa" title="Get the depth of the hierarchical tree of objects.">hwloc_topology_get_depth()</a>-1, or a virtual depth such as <a class="el" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a245c34ec9884c2cf5de5049b2153ed9c" title="Virtual depth for NUMA nodes.">HWLOC_TYPE_DEPTH_NUMANODE</a>.</p>
158 <dl class="section return"><dt>Returns</dt><dd>(hwloc_obj_type_t)-1 if depth <code>depth</code> does not exist. </dd></dl>
159
160 </div>
161 </div>
162 <a id="gae85786340b88e24835f8c403a1e2e54b"></a>
163 <h2 class="memtitle"><span class="permalink"><a href="#gae85786340b88e24835f8c403a1e2e54b">&#9670;&nbsp;</a></span>hwloc_get_memory_parents_depth()</h2>
164
165 <div class="memitem">
166 <div class="memproto">
167 <table class="memname">
168 <tr>
169 <td class="memname">int hwloc_get_memory_parents_depth </td>
170 <td>(</td>
171 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
172 <td class="paramname"><em>topology</em></td><td>)</td>
173 <td></td>
174 </tr>
175 </table>
176 </div><div class="memdoc">
177
178 <p>Return the depth of parents where memory objects are attached. </p>
179 <p>Memory objects have virtual negative depths because they are not part of the main CPU-side hierarchy of objects. This depth should not be compared with other level depths.</p>
180 <p>If all Memory objects are attached to Normal parents at the same depth, this parent depth may be compared to other as usual, for instance for knowing whether NUMA nodes is attached above or below Packages.</p>
181 <dl class="section return"><dt>Returns</dt><dd>The depth of Normal parents of all memory children if all these parents have the same depth. For instance the depth of the Package level if all NUMA nodes are attached to Package objects.</dd>
372 <p>Compare the depth of two object types. </p>
373 <p>Types shouldn't be compared as they are, since newer ones may be added in the future. This function returns less than, equal to, or greater than zero respectively if <code>type1</code> objects usually include <code>type2</code> objects, are the same as <code>type2</code> objects, or are included in <code>type2</code> objects. If the types can not be compared (because neither is usually contained in the other), <a class="el" href="a00193.html#ga3b6e4128e9fe773863b123fa6e4a080b" title="Value returned by hwloc_compare_types() when types can not be compared.">HWLOC_TYPE_UNORDERED</a> is returned. Object types containing CPUs can always be compared (usually, a system contains machines which contain nodes which contain packages which contain caches, which contain cores, which contain processors).</p>
374 <dl class="section note"><dt>Note</dt><dd><a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661" title="Processing Unit, or (Logical) Processor. An execution unit (may share a core with some other logical ...">HWLOC_OBJ_PU</a> will always be the deepest, while <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a3f4e83ffc4a259354959ae8a9eaa2a80" title="Machine. A set of processors and memory with cache coherency.">HWLOC_OBJ_MACHINE</a> is always the highest.</dd>
182375 <dd>
183 <a class="el" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c" title="Objects of given type exist at different depth in the topology (only for Groups).">HWLOC_TYPE_DEPTH_MULTIPLE</a> if Normal parents of all memory children do not have the same depth. For instance if some NUMA nodes are attached to Packages while others are attached to Groups. </dd></dl>
184
185 </div>
186 </div>
187 <a id="ga1d5ceafe8130fe6e8657bf0bc666ba50"></a>
188 <h2 class="memtitle"><span class="permalink"><a href="#ga1d5ceafe8130fe6e8657bf0bc666ba50">&#9670;&nbsp;</a></span>hwloc_get_nbobjs_by_depth()</h2>
189
190 <div class="memitem">
191 <div class="memproto">
192 <table class="memname">
193 <tr>
194 <td class="memname">unsigned hwloc_get_nbobjs_by_depth </td>
195 <td>(</td>
196 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
197 <td class="paramname"><em>topology</em>, </td>
198 </tr>
199 <tr>
200 <td class="paramkey"></td>
201 <td></td>
202 <td class="paramtype">int&#160;</td>
203 <td class="paramname"><em>depth</em>&#160;</td>
204 </tr>
205 <tr>
206 <td></td>
207 <td>)</td>
208 <td></td><td></td>
209 </tr>
210 </table>
211 </div><div class="memdoc">
212
213 <p>Returns the width of level at depth <code>depth</code>. </p>
214
215 </div>
216 </div>
217 <a id="ga789a3f65aedff644be64a18526a03065"></a>
218 <h2 class="memtitle"><span class="permalink"><a href="#ga789a3f65aedff644be64a18526a03065">&#9670;&nbsp;</a></span>hwloc_get_nbobjs_by_type()</h2>
219
220 <div class="memitem">
221 <div class="memproto">
222 <table class="mlabels">
223 <tr>
224 <td class="mlabels-left">
225 <table class="memname">
226 <tr>
227 <td class="memname">static int hwloc_get_nbobjs_by_type </td>
228 <td>(</td>
229 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
230 <td class="paramname"><em>topology</em>, </td>
231 </tr>
232 <tr>
233 <td class="paramkey"></td>
234 <td></td>
235 <td class="paramtype"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
236 <td class="paramname"><em>type</em>&#160;</td>
237 </tr>
238 <tr>
239 <td></td>
240 <td>)</td>
241 <td></td><td></td>
242 </tr>
243 </table>
244 </td>
245 <td class="mlabels-right">
246 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
247 </tr>
248 </table>
249 </div><div class="memdoc">
250
251 <p>Returns the width of level type <code>type</code>. </p>
252 <p>If no object for that type exists, 0 is returned. If there are several levels with objects of that type, -1 is returned. </p>
253
254 </div>
255 </div>
256 <a id="gac140a9b939d9fa0b30c4a910efcb0656"></a>
257 <h2 class="memtitle"><span class="permalink"><a href="#gac140a9b939d9fa0b30c4a910efcb0656">&#9670;&nbsp;</a></span>hwloc_get_next_obj_by_depth()</h2>
258
259 <div class="memitem">
260 <div class="memproto">
261 <table class="mlabels">
262 <tr>
263 <td class="mlabels-left">
264 <table class="memname">
265 <tr>
266 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_next_obj_by_depth </td>
267 <td>(</td>
268 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
269 <td class="paramname"><em>topology</em>, </td>
270 </tr>
271 <tr>
272 <td class="paramkey"></td>
273 <td></td>
274 <td class="paramtype">int&#160;</td>
275 <td class="paramname"><em>depth</em>, </td>
276 </tr>
277 <tr>
278 <td class="paramkey"></td>
279 <td></td>
280 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
281 <td class="paramname"><em>prev</em>&#160;</td>
282 </tr>
283 <tr>
284 <td></td>
285 <td>)</td>
286 <td></td><td></td>
287 </tr>
288 </table>
289 </td>
290 <td class="mlabels-right">
291 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
292 </tr>
293 </table>
294 </div><div class="memdoc">
295
296 <p>Returns the next object at depth <code>depth</code>. </p>
297 <p>If <code>prev</code> is <code>NULL</code>, return the first object at depth <code>depth</code>. </p>
298
299 </div>
300 </div>
301 <a id="ga759e88eaf5a230ad283e9d4c42486735"></a>
302 <h2 class="memtitle"><span class="permalink"><a href="#ga759e88eaf5a230ad283e9d4c42486735">&#9670;&nbsp;</a></span>hwloc_get_next_obj_by_type()</h2>
303
304 <div class="memitem">
305 <div class="memproto">
306 <table class="mlabels">
307 <tr>
308 <td class="mlabels-left">
309 <table class="memname">
310 <tr>
311 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_next_obj_by_type </td>
312 <td>(</td>
313 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
314 <td class="paramname"><em>topology</em>, </td>
315 </tr>
316 <tr>
317 <td class="paramkey"></td>
318 <td></td>
319 <td class="paramtype"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
320 <td class="paramname"><em>type</em>, </td>
321 </tr>
322 <tr>
323 <td class="paramkey"></td>
324 <td></td>
325 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
326 <td class="paramname"><em>prev</em>&#160;</td>
327 </tr>
328 <tr>
329 <td></td>
330 <td>)</td>
331 <td></td><td></td>
332 </tr>
333 </table>
334 </td>
335 <td class="mlabels-right">
336 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
337 </tr>
338 </table>
339 </div><div class="memdoc">
340
341 <p>Returns the next object of type <code>type</code>. </p>
342 <p>If <code>prev</code> is <code>NULL</code>, return the first object at type <code>type</code>. If there are multiple or no depth for given type, return <code>NULL</code> and let the caller fallback to <a class="el" href="a00193.html#gac140a9b939d9fa0b30c4a910efcb0656" title="Returns the next object at depth depth.">hwloc_get_next_obj_by_depth()</a>. </p>
343
344 </div>
345 </div>
346 <a id="ga391f6b2613f0065673eaa4069b93d4e0"></a>
347 <h2 class="memtitle"><span class="permalink"><a href="#ga391f6b2613f0065673eaa4069b93d4e0">&#9670;&nbsp;</a></span>hwloc_get_obj_by_depth()</h2>
348
349 <div class="memitem">
350 <div class="memproto">
351 <table class="memname">
352 <tr>
353 <td class="memname"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_obj_by_depth </td>
354 <td>(</td>
355 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
356 <td class="paramname"><em>topology</em>, </td>
357 </tr>
358 <tr>
359 <td class="paramkey"></td>
360 <td></td>
361 <td class="paramtype">int&#160;</td>
362 <td class="paramname"><em>depth</em>, </td>
363 </tr>
364 <tr>
365 <td class="paramkey"></td>
366 <td></td>
367 <td class="paramtype">unsigned&#160;</td>
368 <td class="paramname"><em>idx</em>&#160;</td>
369 </tr>
370 <tr>
371 <td></td>
372 <td>)</td>
373 <td></td><td></td>
374 </tr>
375 </table>
376 </div><div class="memdoc">
377
378 <p>Returns the topology object at logical index <code>idx</code> from depth <code>depth</code>. </p>
379
380 </div>
381 </div>
382 <a id="ga6f414dd80a2b943967a0ac92da3181a2"></a>
383 <h2 class="memtitle"><span class="permalink"><a href="#ga6f414dd80a2b943967a0ac92da3181a2">&#9670;&nbsp;</a></span>hwloc_get_obj_by_type()</h2>
384
385 <div class="memitem">
386 <div class="memproto">
387 <table class="mlabels">
388 <tr>
389 <td class="mlabels-left">
390 <table class="memname">
391 <tr>
392 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_obj_by_type </td>
393 <td>(</td>
394 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
395 <td class="paramname"><em>topology</em>, </td>
396 </tr>
397 <tr>
398 <td class="paramkey"></td>
399 <td></td>
400 <td class="paramtype"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
401 <td class="paramname"><em>type</em>, </td>
402 </tr>
403 <tr>
404 <td class="paramkey"></td>
405 <td></td>
406 <td class="paramtype">unsigned&#160;</td>
407 <td class="paramname"><em>idx</em>&#160;</td>
408 </tr>
409 <tr>
410 <td></td>
411 <td>)</td>
412 <td></td><td></td>
413 </tr>
414 </table>
415 </td>
416 <td class="mlabels-right">
417 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
418 </tr>
419 </table>
420 </div><div class="memdoc">
421
422 <p>Returns the topology object at logical index <code>idx</code> with type <code>type</code>. </p>
423 <p>If no object for that type exists, <code>NULL</code> is returned. If there are several levels with objects of that type (<a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a5269ef95be72f88465559d35c9b7ad56" title="Group objects. Objects which do not fit in the above but are detected by hwloc and are useful to take...">HWLOC_OBJ_GROUP</a>), <code>NULL</code> is returned and the caller may fallback to <a class="el" href="a00193.html#ga391f6b2613f0065673eaa4069b93d4e0" title="Returns the topology object at logical index idx from depth depth.">hwloc_get_obj_by_depth()</a>. </p>
424
425 </div>
426 </div>
427 <a id="ga2d4b12fc187dfc53b35f2fa21d21044d"></a>
428 <h2 class="memtitle"><span class="permalink"><a href="#ga2d4b12fc187dfc53b35f2fa21d21044d">&#9670;&nbsp;</a></span>hwloc_get_root_obj()</h2>
429
430 <div class="memitem">
431 <div class="memproto">
432 <table class="mlabels">
433 <tr>
434 <td class="mlabels-left">
435 <table class="memname">
436 <tr>
437 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_root_obj </td>
438 <td>(</td>
439 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
440 <td class="paramname"><em>topology</em></td><td>)</td>
441 <td></td>
442 </tr>
443 </table>
444 </td>
445 <td class="mlabels-right">
446 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
447 </tr>
448 </table>
449 </div><div class="memdoc">
450
451 <p>Returns the top-object of the topology-tree. </p>
452 <p>Its type is <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a3f4e83ffc4a259354959ae8a9eaa2a80" title="Machine. A set of processors and memory with cache coherency.">HWLOC_OBJ_MACHINE</a>. </p>
453
454 </div>
455 </div>
456 <a id="ga8bec782e21be313750da70cf7428b374"></a>
457 <h2 class="memtitle"><span class="permalink"><a href="#ga8bec782e21be313750da70cf7428b374">&#9670;&nbsp;</a></span>hwloc_get_type_depth()</h2>
458
459 <div class="memitem">
460 <div class="memproto">
461 <table class="memname">
462 <tr>
463 <td class="memname">int hwloc_get_type_depth </td>
464 <td>(</td>
465 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
466 <td class="paramname"><em>topology</em>, </td>
467 </tr>
468 <tr>
469 <td class="paramkey"></td>
470 <td></td>
471 <td class="paramtype"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
472 <td class="paramname"><em>type</em>&#160;</td>
473 </tr>
474 <tr>
475 <td></td>
476 <td>)</td>
477 <td></td><td></td>
478 </tr>
479 </table>
480 </div><div class="memdoc">
481
482 <p>Returns the depth of objects of type <code>type</code>. </p>
483 <p>If no object of this type is present on the underlying architecture, or if the OS doesn't provide this kind of information, the function returns <a class="el" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad" title="No object of given type exists in the topology.">HWLOC_TYPE_DEPTH_UNKNOWN</a>.</p>
484 <p>If type is absent but a similar type is acceptable, see also <a class="el" href="a00193.html#ga8125328e69eba709c33ea8055c12589b" title="Returns the depth of objects of type type or below.">hwloc_get_type_or_below_depth()</a> and <a class="el" href="a00193.html#ga8a9ee573b7d2190272095d10712a7cca" title="Returns the depth of objects of type type or above.">hwloc_get_type_or_above_depth()</a>.</p>
485 <p>If <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a5269ef95be72f88465559d35c9b7ad56" title="Group objects. Objects which do not fit in the above but are detected by hwloc and are useful to take...">HWLOC_OBJ_GROUP</a> is given, the function may return <a class="el" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c" title="Objects of given type exist at different depth in the topology (only for Groups).">HWLOC_TYPE_DEPTH_MULTIPLE</a> if multiple levels of Groups exist.</p>
486 <p>If a NUMA node, I/O or Misc object type is given, the function returns a virtual value because these objects are stored in special levels that are not CPU-related. This virtual depth may be passed to other hwloc functions such as <a class="el" href="a00193.html#ga391f6b2613f0065673eaa4069b93d4e0" title="Returns the topology object at logical index idx from depth depth.">hwloc_get_obj_by_depth()</a> but it should not be considered as an actual depth by the application. In particular, it should not be compared with any other object depth or with the entire topology depth. </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="a00193.html#gae85786340b88e24835f8c403a1e2e54b" title="Return the depth of parents where memory objects are attached.">hwloc_get_memory_parents_depth()</a>.</dd>
487 <dd>
488 <a class="el" href="a00194.html#ga52c63cd7203e55b804c1314affc9bd12" title="Return an object type and its level depth from a type string.">hwloc_type_sscanf_as_depth()</a> for returning the depth of objects whose type is given as a string. </dd></dl>
489
490 </div>
491 </div>
492 <a id="ga8a9ee573b7d2190272095d10712a7cca"></a>
493 <h2 class="memtitle"><span class="permalink"><a href="#ga8a9ee573b7d2190272095d10712a7cca">&#9670;&nbsp;</a></span>hwloc_get_type_or_above_depth()</h2>
494
495 <div class="memitem">
496 <div class="memproto">
497 <table class="mlabels">
498 <tr>
499 <td class="mlabels-left">
500 <table class="memname">
501 <tr>
502 <td class="memname">static int hwloc_get_type_or_above_depth </td>
503 <td>(</td>
504 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
505 <td class="paramname"><em>topology</em>, </td>
506 </tr>
507 <tr>
508 <td class="paramkey"></td>
509 <td></td>
510 <td class="paramtype"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
511 <td class="paramname"><em>type</em>&#160;</td>
512 </tr>
513 <tr>
514 <td></td>
515 <td>)</td>
516 <td></td><td></td>
517 </tr>
518 </table>
519 </td>
520 <td class="mlabels-right">
521 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
522 </tr>
523 </table>
524 </div><div class="memdoc">
525
526 <p>Returns the depth of objects of type <code>type</code> or above. </p>
527 <p>If no object of this type is present on the underlying architecture, the function returns the depth of the first "present" object typically containing <code>type</code>.</p>
528 <p>This function is only meaningful for normal object types. If a memory, I/O or Misc object type is given, the corresponding virtual depth is always returned (see <a class="el" href="a00193.html#ga8bec782e21be313750da70cf7428b374" title="Returns the depth of objects of type type.">hwloc_get_type_depth()</a>).</p>
529 <p>May return <a class="el" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c" title="Objects of given type exist at different depth in the topology (only for Groups).">HWLOC_TYPE_DEPTH_MULTIPLE</a> for <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a5269ef95be72f88465559d35c9b7ad56" title="Group objects. Objects which do not fit in the above but are detected by hwloc and are useful to take...">HWLOC_OBJ_GROUP</a> just like <a class="el" href="a00193.html#ga8bec782e21be313750da70cf7428b374" title="Returns the depth of objects of type type.">hwloc_get_type_depth()</a>. </p>
530
531 </div>
532 </div>
533 <a id="ga8125328e69eba709c33ea8055c12589b"></a>
534 <h2 class="memtitle"><span class="permalink"><a href="#ga8125328e69eba709c33ea8055c12589b">&#9670;&nbsp;</a></span>hwloc_get_type_or_below_depth()</h2>
535
536 <div class="memitem">
537 <div class="memproto">
538 <table class="mlabels">
539 <tr>
540 <td class="mlabels-left">
541 <table class="memname">
542 <tr>
543 <td class="memname">static int hwloc_get_type_or_below_depth </td>
544 <td>(</td>
545 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
546 <td class="paramname"><em>topology</em>, </td>
547 </tr>
548 <tr>
549 <td class="paramkey"></td>
550 <td></td>
551 <td class="paramtype"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
552 <td class="paramname"><em>type</em>&#160;</td>
553 </tr>
554 <tr>
555 <td></td>
556 <td>)</td>
557 <td></td><td></td>
558 </tr>
559 </table>
560 </td>
561 <td class="mlabels-right">
562 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
563 </tr>
564 </table>
565 </div><div class="memdoc">
566
567 <p>Returns the depth of objects of type <code>type</code> or below. </p>
568 <p>If no object of this type is present on the underlying architecture, the function returns the depth of the first "present" object typically found inside <code>type</code>.</p>
569 <p>This function is only meaningful for normal object types. If a memory, I/O or Misc object type is given, the corresponding virtual depth is always returned (see <a class="el" href="a00193.html#ga8bec782e21be313750da70cf7428b374" title="Returns the depth of objects of type type.">hwloc_get_type_depth()</a>).</p>
570 <p>May return <a class="el" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c" title="Objects of given type exist at different depth in the topology (only for Groups).">HWLOC_TYPE_DEPTH_MULTIPLE</a> for <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a5269ef95be72f88465559d35c9b7ad56" title="Group objects. Objects which do not fit in the above but are detected by hwloc and are useful to take...">HWLOC_OBJ_GROUP</a> just like <a class="el" href="a00193.html#ga8bec782e21be313750da70cf7428b374" title="Returns the depth of objects of type type.">hwloc_get_type_depth()</a>. </p>
571
572 </div>
573 </div>
574 <a id="gae54d1782ca9b54bea915f5c18a9158fa"></a>
575 <h2 class="memtitle"><span class="permalink"><a href="#gae54d1782ca9b54bea915f5c18a9158fa">&#9670;&nbsp;</a></span>hwloc_topology_get_depth()</h2>
576
577 <div class="memitem">
578 <div class="memproto">
579 <table class="memname">
580 <tr>
581 <td class="memname">int hwloc_topology_get_depth </td>
582 <td>(</td>
583 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict&#160;</td>
584 <td class="paramname"><em>topology</em></td><td>)</td>
585 <td></td>
586 </tr>
587 </table>
588 </div><div class="memdoc">
589
590 <p>Get the depth of the hierarchical tree of objects. </p>
591 <p>This is the depth of <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661" title="Processing Unit, or (Logical) Processor. An execution unit (may share a core with some other logical ...">HWLOC_OBJ_PU</a> objects plus one.</p>
592 <dl class="section note"><dt>Note</dt><dd>NUMA nodes, I/O and Misc objects are ignored when computing the depth of the tree (they are placed on special levels). </dd></dl>
376 This does not mean that the actual topology will respect that order: e.g. as of today cores may also contain caches, and packages may also contain nodes. This is thus just to be seen as a fallback comparison method. </dd></dl>
593377
594378 </div>
595379 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Converting between Object Types and Attributes, and Strings</title>
7 <title>Hardware Locality (hwloc): Object Structure and Attributes</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="header">
4141 <div class="summary">
42 <a href="#func-members">Functions</a> </div>
42 <a href="#nested-classes">Data Structures</a> &#124;
43 <a href="#typedef-members">Typedefs</a> </div>
4344 <div class="headertitle">
44 <div class="title">Converting between Object Types and Attributes, and Strings</div> </div>
45 <div class="title">Object Structure and Attributes</div> </div>
4546 </div><!--header-->
4647 <div class="contents">
4748 <table class="memberdecls">
48 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
49 Functions</h2></td></tr>
50 <tr class="memitem:ga5ca0bf94bbbb080d0eff17a57bd90422"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00194.html#ga5ca0bf94bbbb080d0eff17a57bd90422">hwloc_obj_type_string</a> (<a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
51 <tr class="separator:ga5ca0bf94bbbb080d0eff17a57bd90422"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:gadb8765c260edea80c52cd06a76639ba4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00194.html#gadb8765c260edea80c52cd06a76639ba4">hwloc_obj_type_snprintf</a> (char *restrict string, size_t size, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj, int verbose)</td></tr>
53 <tr class="separator:gadb8765c260edea80c52cd06a76639ba4"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:ga870e876931c282a1c7aee2f031912ce3"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00194.html#ga870e876931c282a1c7aee2f031912ce3">hwloc_obj_attr_snprintf</a> (char *restrict string, size_t size, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj, const char *restrict separator, int verbose)</td></tr>
55 <tr class="separator:ga870e876931c282a1c7aee2f031912ce3"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:ga510f21b066fba2dab12b8c9b173b1dfd"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00194.html#ga510f21b066fba2dab12b8c9b173b1dfd">hwloc_type_sscanf</a> (const char *string, <a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> *typep, union <a class="el" href="a00248.html">hwloc_obj_attr_u</a> *attrp, size_t attrsize)</td></tr>
57 <tr class="separator:ga510f21b066fba2dab12b8c9b173b1dfd"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:ga52c63cd7203e55b804c1314affc9bd12"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00194.html#ga52c63cd7203e55b804c1314affc9bd12">hwloc_type_sscanf_as_depth</a> (const char *string, <a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> *typep, <a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int *depthp)</td></tr>
59 <tr class="separator:ga52c63cd7203e55b804c1314affc9bd12"><td class="memSeparator" colspan="2">&#160;</td></tr>
49 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
50 Data Structures</h2></td></tr>
51 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html">hwloc_obj</a></td></tr>
52 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
53 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">union &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html">hwloc_obj_attr_u</a></td></tr>
54 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
55 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00298.html">hwloc_info_s</a></td></tr>
56 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
57 </table><table class="memberdecls">
58 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
59 Typedefs</h2></td></tr>
60 <tr class="memitem:ga79b8ab56877ef99ac59b833203391c7d"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="a00250.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a></td></tr>
61 <tr class="separator:ga79b8ab56877ef99ac59b833203391c7d"><td class="memSeparator" colspan="2">&#160;</td></tr>
6062 </table>
6163 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
62 <h2 class="groupheader">Function Documentation</h2>
63 <a id="ga870e876931c282a1c7aee2f031912ce3"></a>
64 <h2 class="memtitle"><span class="permalink"><a href="#ga870e876931c282a1c7aee2f031912ce3">&#9670;&nbsp;</a></span>hwloc_obj_attr_snprintf()</h2>
64 <h2 class="groupheader">Typedef Documentation</h2>
65 <a id="ga79b8ab56877ef99ac59b833203391c7d"></a>
66 <h2 class="memtitle"><span class="permalink"><a href="#ga79b8ab56877ef99ac59b833203391c7d">&#9670;&nbsp;</a></span>hwloc_obj_t</h2>
6567
6668 <div class="memitem">
6769 <div class="memproto">
6870 <table class="memname">
6971 <tr>
70 <td class="memname">int hwloc_obj_attr_snprintf </td>
71 <td>(</td>
72 <td class="paramtype">char *restrict&#160;</td>
73 <td class="paramname"><em>string</em>, </td>
74 </tr>
75 <tr>
76 <td class="paramkey"></td>
77 <td></td>
78 <td class="paramtype">size_t&#160;</td>
79 <td class="paramname"><em>size</em>, </td>
80 </tr>
81 <tr>
82 <td class="paramkey"></td>
83 <td></td>
84 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
85 <td class="paramname"><em>obj</em>, </td>
86 </tr>
87 <tr>
88 <td class="paramkey"></td>
89 <td></td>
90 <td class="paramtype">const char *restrict&#160;</td>
91 <td class="paramname"><em>separator</em>, </td>
92 </tr>
93 <tr>
94 <td class="paramkey"></td>
95 <td></td>
96 <td class="paramtype">int&#160;</td>
97 <td class="paramname"><em>verbose</em>&#160;</td>
98 </tr>
99 <tr>
100 <td></td>
101 <td>)</td>
102 <td></td><td></td>
72 <td class="memname">typedef struct <a class="el" href="a00250.html">hwloc_obj</a>* <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a></td>
10373 </tr>
10474 </table>
10575 </div><div class="memdoc">
10676
107 <p>Stringify the attributes of a given topology object into a human-readable form. </p>
108 <p>Attribute values are separated by <code>separator</code>.</p>
109 <p>Only the major attributes are printed in non-verbose mode.</p>
110 <p>If <code>size</code> is 0, <code>string</code> may safely be <code>NULL</code>.</p>
111 <dl class="section return"><dt>Returns</dt><dd>the number of character that were actually written if not truncating, or that would have been written (not including the ending \0). </dd></dl>
112
113 </div>
114 </div>
115 <a id="gadb8765c260edea80c52cd06a76639ba4"></a>
116 <h2 class="memtitle"><span class="permalink"><a href="#gadb8765c260edea80c52cd06a76639ba4">&#9670;&nbsp;</a></span>hwloc_obj_type_snprintf()</h2>
117
118 <div class="memitem">
119 <div class="memproto">
120 <table class="memname">
121 <tr>
122 <td class="memname">int hwloc_obj_type_snprintf </td>
123 <td>(</td>
124 <td class="paramtype">char *restrict&#160;</td>
125 <td class="paramname"><em>string</em>, </td>
126 </tr>
127 <tr>
128 <td class="paramkey"></td>
129 <td></td>
130 <td class="paramtype">size_t&#160;</td>
131 <td class="paramname"><em>size</em>, </td>
132 </tr>
133 <tr>
134 <td class="paramkey"></td>
135 <td></td>
136 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
137 <td class="paramname"><em>obj</em>, </td>
138 </tr>
139 <tr>
140 <td class="paramkey"></td>
141 <td></td>
142 <td class="paramtype">int&#160;</td>
143 <td class="paramname"><em>verbose</em>&#160;</td>
144 </tr>
145 <tr>
146 <td></td>
147 <td>)</td>
148 <td></td><td></td>
149 </tr>
150 </table>
151 </div><div class="memdoc">
152
153 <p>Stringify the type of a given topology object into a human-readable form. </p>
154 <p>Contrary to <a class="el" href="a00194.html#ga5ca0bf94bbbb080d0eff17a57bd90422" title="Return a constant stringified object type.">hwloc_obj_type_string()</a>, this function includes object-specific attributes (such as the Group depth, the Bridge type, or OS device type) in the output, and it requires the caller to provide the output buffer.</p>
155 <p>The output is guaranteed to be the same for all objects of a same topology level.</p>
156 <p>If <code>verbose</code> is 1, longer type names are used, e.g. L1Cache instead of L1.</p>
157 <p>The output string may be parsed back by <a class="el" href="a00194.html#ga510f21b066fba2dab12b8c9b173b1dfd" title="Return an object type and attributes from a type string.">hwloc_type_sscanf()</a>.</p>
158 <p>If <code>size</code> is 0, <code>string</code> may safely be <code>NULL</code>.</p>
159 <dl class="section return"><dt>Returns</dt><dd>the number of character that were actually written if not truncating, or that would have been written (not including the ending \0). </dd></dl>
160
161 </div>
162 </div>
163 <a id="ga5ca0bf94bbbb080d0eff17a57bd90422"></a>
164 <h2 class="memtitle"><span class="permalink"><a href="#ga5ca0bf94bbbb080d0eff17a57bd90422">&#9670;&nbsp;</a></span>hwloc_obj_type_string()</h2>
165
166 <div class="memitem">
167 <div class="memproto">
168 <table class="memname">
169 <tr>
170 <td class="memname">const char* hwloc_obj_type_string </td>
171 <td>(</td>
172 <td class="paramtype"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
173 <td class="paramname"><em>type</em></td><td>)</td>
174 <td></td>
175 </tr>
176 </table>
177 </div><div class="memdoc">
178
179 <p>Return a constant stringified object type. </p>
180 <p>This function is the basic way to convert a generic type into a string. The output string may be parsed back by <a class="el" href="a00194.html#ga510f21b066fba2dab12b8c9b173b1dfd" title="Return an object type and attributes from a type string.">hwloc_type_sscanf()</a>.</p>
181 <p><a class="el" href="a00194.html#gadb8765c260edea80c52cd06a76639ba4" title="Stringify the type of a given topology object into a human-readable form.">hwloc_obj_type_snprintf()</a> may return a more precise output for a specific object, but it requires the caller to provide the output buffer. </p>
182
183 </div>
184 </div>
185 <a id="ga510f21b066fba2dab12b8c9b173b1dfd"></a>
186 <h2 class="memtitle"><span class="permalink"><a href="#ga510f21b066fba2dab12b8c9b173b1dfd">&#9670;&nbsp;</a></span>hwloc_type_sscanf()</h2>
187
188 <div class="memitem">
189 <div class="memproto">
190 <table class="memname">
191 <tr>
192 <td class="memname">int hwloc_type_sscanf </td>
193 <td>(</td>
194 <td class="paramtype">const char *&#160;</td>
195 <td class="paramname"><em>string</em>, </td>
196 </tr>
197 <tr>
198 <td class="paramkey"></td>
199 <td></td>
200 <td class="paramtype"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> *&#160;</td>
201 <td class="paramname"><em>typep</em>, </td>
202 </tr>
203 <tr>
204 <td class="paramkey"></td>
205 <td></td>
206 <td class="paramtype">union <a class="el" href="a00248.html">hwloc_obj_attr_u</a> *&#160;</td>
207 <td class="paramname"><em>attrp</em>, </td>
208 </tr>
209 <tr>
210 <td class="paramkey"></td>
211 <td></td>
212 <td class="paramtype">size_t&#160;</td>
213 <td class="paramname"><em>attrsize</em>&#160;</td>
214 </tr>
215 <tr>
216 <td></td>
217 <td>)</td>
218 <td></td><td></td>
219 </tr>
220 </table>
221 </div><div class="memdoc">
222
223 <p>Return an object type and attributes from a type string. </p>
224 <p>Convert strings such as "Package" or "L1iCache" into the corresponding types. Matching is case-insensitive, and only the first letters are actually required to match.</p>
225 <p>The matched object type is set in <code>typep</code> (which cannot be <code>NULL</code>).</p>
226 <p>Type-specific attributes, for instance Cache type, Cache depth, Group depth, Bridge type or OS Device type may be returned in <code>attrp</code>. Attributes that are not specified in the string (for instance "Group" without a depth, or "L2Cache" without a cache type) are set to -1.</p>
227 <p><code>attrp</code> is only filled if not <code>NULL</code> and if its size specified in <code>attrsize</code> is large enough. It should be at least as large as union <a class="el" href="a00248.html" title="Object type-specific Attributes.">hwloc_obj_attr_u</a>.</p>
228 <dl class="section return"><dt>Returns</dt><dd>0 if a type was correctly identified, otherwise -1.</dd></dl>
229 <dl class="section note"><dt>Note</dt><dd>This function is guaranteed to match any string returned by <a class="el" href="a00194.html#ga5ca0bf94bbbb080d0eff17a57bd90422" title="Return a constant stringified object type.">hwloc_obj_type_string()</a> or <a class="el" href="a00194.html#gadb8765c260edea80c52cd06a76639ba4" title="Stringify the type of a given topology object into a human-readable form.">hwloc_obj_type_snprintf()</a>.</dd>
230 <dd>
231 This is an extended version of the now deprecated hwloc_obj_type_sscanf(). </dd></dl>
232
233 </div>
234 </div>
235 <a id="ga52c63cd7203e55b804c1314affc9bd12"></a>
236 <h2 class="memtitle"><span class="permalink"><a href="#ga52c63cd7203e55b804c1314affc9bd12">&#9670;&nbsp;</a></span>hwloc_type_sscanf_as_depth()</h2>
237
238 <div class="memitem">
239 <div class="memproto">
240 <table class="memname">
241 <tr>
242 <td class="memname">int hwloc_type_sscanf_as_depth </td>
243 <td>(</td>
244 <td class="paramtype">const char *&#160;</td>
245 <td class="paramname"><em>string</em>, </td>
246 </tr>
247 <tr>
248 <td class="paramkey"></td>
249 <td></td>
250 <td class="paramtype"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> *&#160;</td>
251 <td class="paramname"><em>typep</em>, </td>
252 </tr>
253 <tr>
254 <td class="paramkey"></td>
255 <td></td>
256 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
257 <td class="paramname"><em>topology</em>, </td>
258 </tr>
259 <tr>
260 <td class="paramkey"></td>
261 <td></td>
262 <td class="paramtype">int *&#160;</td>
263 <td class="paramname"><em>depthp</em>&#160;</td>
264 </tr>
265 <tr>
266 <td></td>
267 <td>)</td>
268 <td></td><td></td>
269 </tr>
270 </table>
271 </div><div class="memdoc">
272
273 <p>Return an object type and its level depth from a type string. </p>
274 <p>Convert strings such as "Package" or "L1iCache" into the corresponding types and return in <code>depthp</code> the depth of the corresponding level in the topology <code>topology</code>.</p>
275 <p>If no object of this type is present on the underlying architecture, <a class="el" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad" title="No object of given type exists in the topology.">HWLOC_TYPE_DEPTH_UNKNOWN</a> is returned.</p>
276 <p>If multiple such levels exist (for instance if giving Group without any depth), the function may return <a class="el" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c" title="Objects of given type exist at different depth in the topology (only for Groups).">HWLOC_TYPE_DEPTH_MULTIPLE</a> instead.</p>
277 <p>The matched object type is set in <code>typep</code> if <code>typep</code> is non <code>NULL</code>.</p>
278 <dl class="section note"><dt>Note</dt><dd>This function is similar to <a class="el" href="a00194.html#ga510f21b066fba2dab12b8c9b173b1dfd" title="Return an object type and attributes from a type string.">hwloc_type_sscanf()</a> followed by <a class="el" href="a00193.html#ga8bec782e21be313750da70cf7428b374" title="Returns the depth of objects of type type.">hwloc_get_type_depth()</a> but it also automatically disambiguates multiple group levels etc.</dd>
279 <dd>
280 This function is guaranteed to match any string returned by <a class="el" href="a00194.html#ga5ca0bf94bbbb080d0eff17a57bd90422" title="Return a constant stringified object type.">hwloc_obj_type_string()</a> or <a class="el" href="a00194.html#gadb8765c260edea80c52cd06a76639ba4" title="Stringify the type of a given topology object into a human-readable form.">hwloc_obj_type_snprintf()</a>. </dd></dl>
77 <p>Convenience typedef; a pointer to a struct <a class="el" href="a00250.html" title="Structure of a topology object.">hwloc_obj</a>. </p>
28178
28279 </div>
28380 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Consulting and Adding Key-Value Info Attributes</title>
7 <title>Hardware Locality (hwloc): Topology Creation and Destruction</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="header">
4141 <div class="summary">
42 <a href="#typedef-members">Typedefs</a> &#124;
4243 <a href="#func-members">Functions</a> </div>
4344 <div class="headertitle">
44 <div class="title">Consulting and Adding Key-Value Info Attributes</div> </div>
45 <div class="title">Topology Creation and Destruction</div> </div>
4546 </div><!--header-->
4647 <div class="contents">
4748 <table class="memberdecls">
49 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
50 Typedefs</h2></td></tr>
51 <tr class="memitem:ga9d1e76ee15a7dee158b786c30b6a6e38"><td class="memItemLeft" align="right" valign="top">typedef struct hwloc_topology *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></td></tr>
52 <tr class="separator:ga9d1e76ee15a7dee158b786c30b6a6e38"><td class="memSeparator" colspan="2">&#160;</td></tr>
53 </table><table class="memberdecls">
4854 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
4955 Functions</h2></td></tr>
50 <tr class="memitem:gab358661a92bb27d8542b255cc9f6f25e"><td class="memItemLeft" align="right" valign="top">static const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00195.html#gab358661a92bb27d8542b255cc9f6f25e">hwloc_obj_get_info_by_name</a> (<a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj, const char *name)</td></tr>
51 <tr class="separator:gab358661a92bb27d8542b255cc9f6f25e"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:gace7654bb8a9002caae1a4b8a59e7452e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00195.html#gace7654bb8a9002caae1a4b8a59e7452e">hwloc_obj_add_info</a> (<a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj, const char *name, const char *value)</td></tr>
53 <tr class="separator:gace7654bb8a9002caae1a4b8a59e7452e"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00195.html#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa">hwloc_topology_init</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> *topologyp)</td></tr>
57 <tr class="separator:ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:gabdf58d87ad77f6615fccdfe0535ff826"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00195.html#gabdf58d87ad77f6615fccdfe0535ff826">hwloc_topology_load</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
59 <tr class="separator:gabdf58d87ad77f6615fccdfe0535ff826"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:ga9f34a640b6fd28d23699d4d084667b15"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00195.html#ga9f34a640b6fd28d23699d4d084667b15">hwloc_topology_destroy</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
61 <tr class="separator:ga9f34a640b6fd28d23699d4d084667b15"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:ga62a161fc5e6f120344dc69a7bee4e587"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00195.html#ga62a161fc5e6f120344dc69a7bee4e587">hwloc_topology_dup</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> *newtopology, <a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> oldtopology)</td></tr>
63 <tr class="separator:ga62a161fc5e6f120344dc69a7bee4e587"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 <tr class="memitem:ga0647ae66458fe68172eb5a320042f870"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00195.html#ga0647ae66458fe68172eb5a320042f870">hwloc_topology_abi_check</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
65 <tr class="separator:ga0647ae66458fe68172eb5a320042f870"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 <tr class="memitem:gaf6746bc3a558ef1ac8348b4491d091b5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00195.html#gaf6746bc3a558ef1ac8348b4491d091b5">hwloc_topology_check</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
67 <tr class="separator:gaf6746bc3a558ef1ac8348b4491d091b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
5468 </table>
5569 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
70 <h2 class="groupheader">Typedef Documentation</h2>
71 <a id="ga9d1e76ee15a7dee158b786c30b6a6e38"></a>
72 <h2 class="memtitle"><span class="permalink"><a href="#ga9d1e76ee15a7dee158b786c30b6a6e38">&#9670;&nbsp;</a></span>hwloc_topology_t</h2>
73
74 <div class="memitem">
75 <div class="memproto">
76 <table class="memname">
77 <tr>
78 <td class="memname">typedef struct hwloc_topology* <a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></td>
79 </tr>
80 </table>
81 </div><div class="memdoc">
82
83 <p>Topology context. </p>
84 <p>To be initialized with <a class="el" href="a00195.html#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa" title="Allocate a topology context.">hwloc_topology_init()</a> and built with <a class="el" href="a00195.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a>. </p>
85
86 </div>
87 </div>
5688 <h2 class="groupheader">Function Documentation</h2>
57 <a id="gace7654bb8a9002caae1a4b8a59e7452e"></a>
58 <h2 class="memtitle"><span class="permalink"><a href="#gace7654bb8a9002caae1a4b8a59e7452e">&#9670;&nbsp;</a></span>hwloc_obj_add_info()</h2>
59
60 <div class="memitem">
61 <div class="memproto">
62 <table class="memname">
63 <tr>
64 <td class="memname">int hwloc_obj_add_info </td>
65 <td>(</td>
66 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
67 <td class="paramname"><em>obj</em>, </td>
89 <a id="ga0647ae66458fe68172eb5a320042f870"></a>
90 <h2 class="memtitle"><span class="permalink"><a href="#ga0647ae66458fe68172eb5a320042f870">&#9670;&nbsp;</a></span>hwloc_topology_abi_check()</h2>
91
92 <div class="memitem">
93 <div class="memproto">
94 <table class="memname">
95 <tr>
96 <td class="memname">int hwloc_topology_abi_check </td>
97 <td>(</td>
98 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
99 <td class="paramname"><em>topology</em></td><td>)</td>
100 <td></td>
101 </tr>
102 </table>
103 </div><div class="memdoc">
104
105 <p>Verify that the topology is compatible with the current hwloc library. </p>
106 <p>This is useful when using the same topology structure (in memory) in different libraries that may use different hwloc installations (for instance if one library embeds a specific version of hwloc, while another library uses a default system-wide hwloc installation).</p>
107 <p>If all libraries/programs use the same hwloc installation, this function always returns success.</p>
108 <dl class="section return"><dt>Returns</dt><dd><code>0</code> on success.</dd>
109 <dd>
110 <code>-1</code> with <code>errno</code> set to <code>EINVAL</code> if incompatible.</dd></dl>
111 <dl class="section note"><dt>Note</dt><dd>If sharing between processes with <a class="el" href="a00238.html#ga61b20e346fc76f76420e3a88cc80a671" title="Duplicate a topology to a shared memory file.">hwloc_shmem_topology_write()</a>, the relevant check is already performed inside <a class="el" href="a00238.html#ga21545bd0f09d9b554c8e60a630e0e629" title="Adopt a shared memory topology stored in a file.">hwloc_shmem_topology_adopt()</a>. </dd></dl>
112
113 </div>
114 </div>
115 <a id="gaf6746bc3a558ef1ac8348b4491d091b5"></a>
116 <h2 class="memtitle"><span class="permalink"><a href="#gaf6746bc3a558ef1ac8348b4491d091b5">&#9670;&nbsp;</a></span>hwloc_topology_check()</h2>
117
118 <div class="memitem">
119 <div class="memproto">
120 <table class="memname">
121 <tr>
122 <td class="memname">void hwloc_topology_check </td>
123 <td>(</td>
124 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
125 <td class="paramname"><em>topology</em></td><td>)</td>
126 <td></td>
127 </tr>
128 </table>
129 </div><div class="memdoc">
130
131 <p>Run internal checks on a topology structure. </p>
132 <p>The program aborts if an inconsistency is detected in the given topology.</p>
133 <dl class="params"><dt>Parameters</dt><dd>
134 <table class="params">
135 <tr><td class="paramname">topology</td><td>is the topology to be checked</td></tr>
136 </table>
137 </dd>
138 </dl>
139 <dl class="section note"><dt>Note</dt><dd>This routine is only useful to developers.</dd>
140 <dd>
141 The input topology should have been previously loaded with <a class="el" href="a00195.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a>. </dd></dl>
142
143 </div>
144 </div>
145 <a id="ga9f34a640b6fd28d23699d4d084667b15"></a>
146 <h2 class="memtitle"><span class="permalink"><a href="#ga9f34a640b6fd28d23699d4d084667b15">&#9670;&nbsp;</a></span>hwloc_topology_destroy()</h2>
147
148 <div class="memitem">
149 <div class="memproto">
150 <table class="memname">
151 <tr>
152 <td class="memname">void hwloc_topology_destroy </td>
153 <td>(</td>
154 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
155 <td class="paramname"><em>topology</em></td><td>)</td>
156 <td></td>
157 </tr>
158 </table>
159 </div><div class="memdoc">
160
161 <p>Terminate and free a topology context. </p>
162 <dl class="params"><dt>Parameters</dt><dd>
163 <table class="params">
164 <tr><td class="paramname">topology</td><td>is the topology to be freed </td></tr>
165 </table>
166 </dd>
167 </dl>
168
169 </div>
170 </div>
171 <a id="ga62a161fc5e6f120344dc69a7bee4e587"></a>
172 <h2 class="memtitle"><span class="permalink"><a href="#ga62a161fc5e6f120344dc69a7bee4e587">&#9670;&nbsp;</a></span>hwloc_topology_dup()</h2>
173
174 <div class="memitem">
175 <div class="memproto">
176 <table class="memname">
177 <tr>
178 <td class="memname">int hwloc_topology_dup </td>
179 <td>(</td>
180 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> *&#160;</td>
181 <td class="paramname"><em>newtopology</em>, </td>
68182 </tr>
69183 <tr>
70184 <td class="paramkey"></td>
71185 <td></td>
72 <td class="paramtype">const char *&#160;</td>
73 <td class="paramname"><em>name</em>, </td>
74 </tr>
75 <tr>
76 <td class="paramkey"></td>
77 <td></td>
78 <td class="paramtype">const char *&#160;</td>
79 <td class="paramname"><em>value</em>&#160;</td>
186 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
187 <td class="paramname"><em>oldtopology</em>&#160;</td>
80188 </tr>
81189 <tr>
82190 <td></td>
86194 </table>
87195 </div><div class="memdoc">
88196
89 <p>Add the given info name and value pair to the given object. </p>
90 <p>The info is appended to the existing info array even if another key with the same name already exists.</p>
91 <p>The input strings are copied before being added in the object infos.</p>
92 <dl class="section return"><dt>Returns</dt><dd><code>0</code> on success, <code>-1</code> on error.</dd></dl>
93 <dl class="section note"><dt>Note</dt><dd>This function may be used to enforce object colors in the lstopo graphical output by using "lstopoStyle" as a name and "Background=#rrggbb" as a value. See CUSTOM COLORS in the lstopo(1) manpage for details.</dd>
94 <dd>
95 If <code>value</code> contains some non-printable characters, they will be dropped when exporting to XML, see <a class="el" href="a00212.html#ga333f79975b4eeb28a3d8fad3373583ce" title="Export the topology into an XML file.">hwloc_topology_export_xml()</a> in <a class="el" href="a00134_source.html">hwloc/export.h</a>. </dd></dl>
96
97 </div>
98 </div>
99 <a id="gab358661a92bb27d8542b255cc9f6f25e"></a>
100 <h2 class="memtitle"><span class="permalink"><a href="#gab358661a92bb27d8542b255cc9f6f25e">&#9670;&nbsp;</a></span>hwloc_obj_get_info_by_name()</h2>
101
102 <div class="memitem">
103 <div class="memproto">
104 <table class="mlabels">
105 <tr>
106 <td class="mlabels-left">
107 <table class="memname">
108 <tr>
109 <td class="memname">static const char* hwloc_obj_get_info_by_name </td>
110 <td>(</td>
111 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
112 <td class="paramname"><em>obj</em>, </td>
113 </tr>
114 <tr>
115 <td class="paramkey"></td>
116 <td></td>
117 <td class="paramtype">const char *&#160;</td>
118 <td class="paramname"><em>name</em>&#160;</td>
119 </tr>
120 <tr>
121 <td></td>
122 <td>)</td>
123 <td></td><td></td>
124 </tr>
125 </table>
126 </td>
127 <td class="mlabels-right">
128 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
129 </tr>
130 </table>
131 </div><div class="memdoc">
132
133 <p>Search the given key name in object infos and return the corresponding value. </p>
134 <p>If multiple keys match the given name, only the first one is returned.</p>
135 <dl class="section return"><dt>Returns</dt><dd><code>NULL</code> if no such key exists. </dd></dl>
197 <p>Duplicate a topology. </p>
198 <p>The entire topology structure as well as its objects are duplicated into a new one.</p>
199 <p>This is useful for keeping a backup while modifying a topology.</p>
200 <dl class="section note"><dt>Note</dt><dd>Object userdata is not duplicated since hwloc does not know what it point to. The objects of both old and new topologies will point to the same userdata. </dd></dl>
201
202 </div>
203 </div>
204 <a id="ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa"></a>
205 <h2 class="memtitle"><span class="permalink"><a href="#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa">&#9670;&nbsp;</a></span>hwloc_topology_init()</h2>
206
207 <div class="memitem">
208 <div class="memproto">
209 <table class="memname">
210 <tr>
211 <td class="memname">int hwloc_topology_init </td>
212 <td>(</td>
213 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> *&#160;</td>
214 <td class="paramname"><em>topologyp</em></td><td>)</td>
215 <td></td>
216 </tr>
217 </table>
218 </div><div class="memdoc">
219
220 <p>Allocate a topology context. </p>
221 <dl class="params"><dt>Parameters</dt><dd>
222 <table class="params">
223 <tr><td class="paramdir">[out]</td><td class="paramname">topologyp</td><td>is assigned a pointer to the new allocated context.</td></tr>
224 </table>
225 </dd>
226 </dl>
227 <dl class="section return"><dt>Returns</dt><dd>0 on success, -1 on error. </dd></dl>
228
229 </div>
230 </div>
231 <a id="gabdf58d87ad77f6615fccdfe0535ff826"></a>
232 <h2 class="memtitle"><span class="permalink"><a href="#gabdf58d87ad77f6615fccdfe0535ff826">&#9670;&nbsp;</a></span>hwloc_topology_load()</h2>
233
234 <div class="memitem">
235 <div class="memproto">
236 <table class="memname">
237 <tr>
238 <td class="memname">int hwloc_topology_load </td>
239 <td>(</td>
240 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
241 <td class="paramname"><em>topology</em></td><td>)</td>
242 <td></td>
243 </tr>
244 </table>
245 </div><div class="memdoc">
246
247 <p>Build the actual topology. </p>
248 <p>Build the actual topology once initialized with <a class="el" href="a00195.html#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa" title="Allocate a topology context.">hwloc_topology_init()</a> and tuned with <a class="el" href="a00202.html">Topology Detection Configuration and Query</a> and <a class="el" href="a00201.html">Changing the Source of Topology Discovery</a> routines. No other routine may be called earlier using this topology context.</p>
249 <dl class="params"><dt>Parameters</dt><dd>
250 <table class="params">
251 <tr><td class="paramname">topology</td><td>is the topology to be loaded with objects.</td></tr>
252 </table>
253 </dd>
254 </dl>
255 <dl class="section return"><dt>Returns</dt><dd>0 on success, -1 on error.</dd></dl>
256 <dl class="section note"><dt>Note</dt><dd>On failure, the topology is reinitialized. It should be either destroyed with <a class="el" href="a00195.html#ga9f34a640b6fd28d23699d4d084667b15" title="Terminate and free a topology context.">hwloc_topology_destroy()</a> or configured and loaded again.</dd>
257 <dd>
258 This function may be called only once per topology.</dd>
259 <dd>
260 The binding of the current thread or process may temporarily change during this call but it will be restored before it returns.</dd></dl>
261 <dl class="section see"><dt>See also</dt><dd><a class="el" href="a00202.html">Topology Detection Configuration and Query</a> and <a class="el" href="a00201.html">Changing the Source of Topology Discovery</a> </dd></dl>
136262
137263 </div>
138264 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): CPU binding</title>
7 <title>Hardware Locality (hwloc): Object levels, depths and types</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4242 <a href="#enum-members">Enumerations</a> &#124;
4343 <a href="#func-members">Functions</a> </div>
4444 <div class="headertitle">
45 <div class="title">CPU binding</div> </div>
45 <div class="title">Object levels, depths and types</div> </div>
4646 </div><!--header-->
4747 <div class="contents">
4848 <table class="memberdecls">
4949 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
5050 Enumerations</h2></td></tr>
51 <tr class="memitem:ga217dc8d373f8958cc93c154ebce1c71c"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#ga217dc8d373f8958cc93c154ebce1c71c">hwloc_cpubind_flags_t</a> { <a class="el" href="a00196.html#gga217dc8d373f8958cc93c154ebce1c71ca2e0dd0128dac6b03408c7dd170477fdc">HWLOC_CPUBIND_PROCESS</a>
52 , <a class="el" href="a00196.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421">HWLOC_CPUBIND_THREAD</a>
53 , <a class="el" href="a00196.html#gga217dc8d373f8958cc93c154ebce1c71ca679a7e0f0c7ee06b123565f90d98e7fa">HWLOC_CPUBIND_STRICT</a>
54 , <a class="el" href="a00196.html#gga217dc8d373f8958cc93c154ebce1c71ca41ce440443cc3087caed95ab60edcad6">HWLOC_CPUBIND_NOMEMBIND</a>
51 <tr class="memitem:gaf4e663cf42bbe20756b849c6293ef575"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#gaf4e663cf42bbe20756b849c6293ef575">hwloc_get_type_depth_e</a> { <br />
52 &#160;&#160;<a class="el" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a>
53 , <a class="el" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c">HWLOC_TYPE_DEPTH_MULTIPLE</a>
54 , <a class="el" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a245c34ec9884c2cf5de5049b2153ed9c">HWLOC_TYPE_DEPTH_NUMANODE</a>
55 , <a class="el" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575af93b50182973e4a718d9d4db9e253a90">HWLOC_TYPE_DEPTH_BRIDGE</a>
56 , <br />
57 &#160;&#160;<a class="el" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575ad8b1516e699b57ce1c8d107fbd2f674c">HWLOC_TYPE_DEPTH_PCI_DEVICE</a>
58 , <a class="el" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575afe9a2131073eebbe129d4aa2928d3f46">HWLOC_TYPE_DEPTH_OS_DEVICE</a>
59 , <a class="el" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a96436a392b4cdcaa1a29bc65351b373f">HWLOC_TYPE_DEPTH_MISC</a>
60 , <a class="el" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a8b8d7d300c018c0eb65e6c9a9f162101">HWLOC_TYPE_DEPTH_MEMCACHE</a>
61 <br />
5562 }</td></tr>
56 <tr class="separator:ga217dc8d373f8958cc93c154ebce1c71c"><td class="memSeparator" colspan="2">&#160;</td></tr>
63 <tr class="separator:gaf4e663cf42bbe20756b849c6293ef575"><td class="memSeparator" colspan="2">&#160;</td></tr>
5764 </table><table class="memberdecls">
5865 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
5966 Functions</h2></td></tr>
60 <tr class="memitem:ga80bc07473a8edf840cae17bd7ec21d48"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#ga80bc07473a8edf840cae17bd7ec21d48">hwloc_set_cpubind</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, int flags)</td></tr>
61 <tr class="separator:ga80bc07473a8edf840cae17bd7ec21d48"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:gacba7ecb979baf824d5240fa2cb2a8be6"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#gacba7ecb979baf824d5240fa2cb2a8be6">hwloc_get_cpubind</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set, int flags)</td></tr>
63 <tr class="separator:gacba7ecb979baf824d5240fa2cb2a8be6"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 <tr class="memitem:ga296db8a3c6d49b51fb83d6f3e45c02a6"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#ga296db8a3c6d49b51fb83d6f3e45c02a6">hwloc_set_proc_cpubind</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_pid_t pid, <a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, int flags)</td></tr>
65 <tr class="separator:ga296db8a3c6d49b51fb83d6f3e45c02a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 <tr class="memitem:gac82de91f788fa82dacf99c6e0d4b7158"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#gac82de91f788fa82dacf99c6e0d4b7158">hwloc_get_proc_cpubind</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_pid_t pid, <a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set, int flags)</td></tr>
67 <tr class="separator:gac82de91f788fa82dacf99c6e0d4b7158"><td class="memSeparator" colspan="2">&#160;</td></tr>
68 <tr class="memitem:gae42c01b2addcfbf6048b9a516dd7a906"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#gae42c01b2addcfbf6048b9a516dd7a906">hwloc_set_thread_cpubind</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_thread_t thread, <a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, int flags)</td></tr>
69 <tr class="separator:gae42c01b2addcfbf6048b9a516dd7a906"><td class="memSeparator" colspan="2">&#160;</td></tr>
70 <tr class="memitem:gaf13f765642b5d0d9a9813e6bb043671b"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#gaf13f765642b5d0d9a9813e6bb043671b">hwloc_get_thread_cpubind</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_thread_t thread, <a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set, int flags)</td></tr>
71 <tr class="separator:gaf13f765642b5d0d9a9813e6bb043671b"><td class="memSeparator" colspan="2">&#160;</td></tr>
72 <tr class="memitem:gafdb374627358bf09203b5a4215b13032"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#gafdb374627358bf09203b5a4215b13032">hwloc_get_last_cpu_location</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set, int flags)</td></tr>
73 <tr class="separator:gafdb374627358bf09203b5a4215b13032"><td class="memSeparator" colspan="2">&#160;</td></tr>
74 <tr class="memitem:ga910a05c2d47f68a3155bf176b50fa555"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#ga910a05c2d47f68a3155bf176b50fa555">hwloc_get_proc_last_cpu_location</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_pid_t pid, <a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set, int flags)</td></tr>
75 <tr class="separator:ga910a05c2d47f68a3155bf176b50fa555"><td class="memSeparator" colspan="2">&#160;</td></tr>
67 <tr class="memitem:gae54d1782ca9b54bea915f5c18a9158fa"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#gae54d1782ca9b54bea915f5c18a9158fa">hwloc_topology_get_depth</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict topology)</td></tr>
68 <tr class="separator:gae54d1782ca9b54bea915f5c18a9158fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
69 <tr class="memitem:ga8bec782e21be313750da70cf7428b374"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
70 <tr class="separator:ga8bec782e21be313750da70cf7428b374"><td class="memSeparator" colspan="2">&#160;</td></tr>
71 <tr class="memitem:gae85786340b88e24835f8c403a1e2e54b"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#gae85786340b88e24835f8c403a1e2e54b">hwloc_get_memory_parents_depth</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
72 <tr class="separator:gae85786340b88e24835f8c403a1e2e54b"><td class="memSeparator" colspan="2">&#160;</td></tr>
73 <tr class="memitem:ga8125328e69eba709c33ea8055c12589b"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#ga8125328e69eba709c33ea8055c12589b">hwloc_get_type_or_below_depth</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
74 <tr class="separator:ga8125328e69eba709c33ea8055c12589b"><td class="memSeparator" colspan="2">&#160;</td></tr>
75 <tr class="memitem:ga8a9ee573b7d2190272095d10712a7cca"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#ga8a9ee573b7d2190272095d10712a7cca">hwloc_get_type_or_above_depth</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
76 <tr class="separator:ga8a9ee573b7d2190272095d10712a7cca"><td class="memSeparator" colspan="2">&#160;</td></tr>
77 <tr class="memitem:ga506b0682b98aa264d53e934d2e9badb0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#ga506b0682b98aa264d53e934d2e9badb0">hwloc_get_depth_type</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int depth)</td></tr>
78 <tr class="separator:ga506b0682b98aa264d53e934d2e9badb0"><td class="memSeparator" colspan="2">&#160;</td></tr>
79 <tr class="memitem:ga1d5ceafe8130fe6e8657bf0bc666ba50"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#ga1d5ceafe8130fe6e8657bf0bc666ba50">hwloc_get_nbobjs_by_depth</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int depth)</td></tr>
80 <tr class="separator:ga1d5ceafe8130fe6e8657bf0bc666ba50"><td class="memSeparator" colspan="2">&#160;</td></tr>
81 <tr class="memitem:ga789a3f65aedff644be64a18526a03065"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#ga789a3f65aedff644be64a18526a03065">hwloc_get_nbobjs_by_type</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
82 <tr class="separator:ga789a3f65aedff644be64a18526a03065"><td class="memSeparator" colspan="2">&#160;</td></tr>
83 <tr class="memitem:ga2d4b12fc187dfc53b35f2fa21d21044d"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#ga2d4b12fc187dfc53b35f2fa21d21044d">hwloc_get_root_obj</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
84 <tr class="separator:ga2d4b12fc187dfc53b35f2fa21d21044d"><td class="memSeparator" colspan="2">&#160;</td></tr>
85 <tr class="memitem:ga391f6b2613f0065673eaa4069b93d4e0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#ga391f6b2613f0065673eaa4069b93d4e0">hwloc_get_obj_by_depth</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int depth, unsigned idx)</td></tr>
86 <tr class="separator:ga391f6b2613f0065673eaa4069b93d4e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
87 <tr class="memitem:ga6f414dd80a2b943967a0ac92da3181a2"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#ga6f414dd80a2b943967a0ac92da3181a2">hwloc_get_obj_by_type</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, unsigned idx)</td></tr>
88 <tr class="separator:ga6f414dd80a2b943967a0ac92da3181a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
89 <tr class="memitem:gac140a9b939d9fa0b30c4a910efcb0656"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#gac140a9b939d9fa0b30c4a910efcb0656">hwloc_get_next_obj_by_depth</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int depth, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> prev)</td></tr>
90 <tr class="separator:gac140a9b939d9fa0b30c4a910efcb0656"><td class="memSeparator" colspan="2">&#160;</td></tr>
91 <tr class="memitem:ga759e88eaf5a230ad283e9d4c42486735"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00196.html#ga759e88eaf5a230ad283e9d4c42486735">hwloc_get_next_obj_by_type</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> prev)</td></tr>
92 <tr class="separator:ga759e88eaf5a230ad283e9d4c42486735"><td class="memSeparator" colspan="2">&#160;</td></tr>
7693 </table>
7794 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
78 <p>Some operating systems only support binding threads or processes to a single PU. Others allow binding to larger sets such as entire Cores or Packages or even random sets of invididual PUs. In such operating system, the scheduler is free to run the task on one of these PU, then migrate it to another PU, etc. It is often useful to call <a class="el" href="a00211.html#gaa611a77c092e679246afdf9a60d5db8b" title="Keep a single index among those set in bitmap bitmap.">hwloc_bitmap_singlify()</a> on the target CPU set before passing it to the binding function to avoid these expensive migrations. See the documentation of <a class="el" href="a00211.html#gaa611a77c092e679246afdf9a60d5db8b" title="Keep a single index among those set in bitmap bitmap.">hwloc_bitmap_singlify()</a> for details.</p>
79 <p>Some operating systems do not provide all hwloc-supported mechanisms to bind processes, threads, etc. <a class="el" href="a00199.html#gab8c76173c4a8ce1a9a9366012b1388e6" title="Retrieve the topology support.">hwloc_topology_get_support()</a> may be used to query about the actual CPU binding support in the currently used operating system.</p>
80 <p>When the requested binding operation is not available and the <a class="el" href="a00196.html#gga217dc8d373f8958cc93c154ebce1c71ca679a7e0f0c7ee06b123565f90d98e7fa" title="Request for strict binding from the OS.">HWLOC_CPUBIND_STRICT</a> flag was passed, the function returns -1. <code>errno</code> is set to <code>ENOSYS</code> when it is not possible to bind the requested kind of object processes/threads. errno is set to <code>EXDEV</code> when the requested cpuset can not be enforced (e.g. some systems only allow one CPU, and some other systems only allow one NUMA node).</p>
81 <p>If <a class="el" href="a00196.html#gga217dc8d373f8958cc93c154ebce1c71ca679a7e0f0c7ee06b123565f90d98e7fa" title="Request for strict binding from the OS.">HWLOC_CPUBIND_STRICT</a> 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.</p>
82 <p>The most portable version that should be preferred over the others, whenever possible, is the following one which just binds the current program, assuming it is single-threaded:</p>
83 <div class="fragment"><div class="line"><a class="code" href="a00196.html#ga80bc07473a8edf840cae17bd7ec21d48">hwloc_set_cpubind</a>(topology, set, 0),</div>
84 <div class="ttc" id="aa00196_html_ga80bc07473a8edf840cae17bd7ec21d48"><div class="ttname"><a href="a00196.html#ga80bc07473a8edf840cae17bd7ec21d48">hwloc_set_cpubind</a></div><div class="ttdeci">int hwloc_set_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t set, int flags)</div><div class="ttdoc">Bind current process or thread on cpus given in physical bitmap set.</div></div>
85 </div><!-- fragment --><p>If the program may be multithreaded, the following one should be preferred to only bind the current thread:</p>
86 <div class="fragment"><div class="line"><a class="code" href="a00196.html#ga80bc07473a8edf840cae17bd7ec21d48">hwloc_set_cpubind</a>(topology, set, <a class="code" href="a00196.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421">HWLOC_CPUBIND_THREAD</a>),</div>
87 <div class="ttc" id="aa00196_html_gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421"><div class="ttname"><a href="a00196.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421">HWLOC_CPUBIND_THREAD</a></div><div class="ttdeci">@ HWLOC_CPUBIND_THREAD</div><div class="ttdoc">Bind current thread of current process.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1161</div></div>
88 </div><!-- fragment --><dl class="section see"><dt>See also</dt><dd>Some example codes are available under doc/examples/ in the source tree.</dd></dl>
89 <dl class="section note"><dt>Note</dt><dd>To unbind, just call the binding function with either a full cpuset or a cpuset equal to the system cpuset.</dd>
95 <p>Be sure to see the figure in <a class="el" href="a00392.html">Terms and Definitions</a> 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. </p>
96 <h2 class="groupheader">Enumeration Type Documentation</h2>
97 <a id="gaf4e663cf42bbe20756b849c6293ef575"></a>
98 <h2 class="memtitle"><span class="permalink"><a href="#gaf4e663cf42bbe20756b849c6293ef575">&#9670;&nbsp;</a></span>hwloc_get_type_depth_e</h2>
99
100 <div class="memitem">
101 <div class="memproto">
102 <table class="memname">
103 <tr>
104 <td class="memname">enum <a class="el" href="a00196.html#gaf4e663cf42bbe20756b849c6293ef575">hwloc_get_type_depth_e</a></td>
105 </tr>
106 </table>
107 </div><div class="memdoc">
108 <table class="fieldtable">
109 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad"></a>HWLOC_TYPE_DEPTH_UNKNOWN&#160;</td><td class="fielddoc"><p>No object of given type exists in the topology. </p>
110 </td></tr>
111 <tr><td class="fieldname"><a id="ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c"></a>HWLOC_TYPE_DEPTH_MULTIPLE&#160;</td><td class="fielddoc"><p>Objects of given type exist at different depth in the topology (only for Groups). </p>
112 </td></tr>
113 <tr><td class="fieldname"><a id="ggaf4e663cf42bbe20756b849c6293ef575a245c34ec9884c2cf5de5049b2153ed9c"></a>HWLOC_TYPE_DEPTH_NUMANODE&#160;</td><td class="fielddoc"><p>Virtual depth for NUMA nodes. </p>
114 </td></tr>
115 <tr><td class="fieldname"><a id="ggaf4e663cf42bbe20756b849c6293ef575af93b50182973e4a718d9d4db9e253a90"></a>HWLOC_TYPE_DEPTH_BRIDGE&#160;</td><td class="fielddoc"><p>Virtual depth for bridge object level. </p>
116 </td></tr>
117 <tr><td class="fieldname"><a id="ggaf4e663cf42bbe20756b849c6293ef575ad8b1516e699b57ce1c8d107fbd2f674c"></a>HWLOC_TYPE_DEPTH_PCI_DEVICE&#160;</td><td class="fielddoc"><p>Virtual depth for PCI device object level. </p>
118 </td></tr>
119 <tr><td class="fieldname"><a id="ggaf4e663cf42bbe20756b849c6293ef575afe9a2131073eebbe129d4aa2928d3f46"></a>HWLOC_TYPE_DEPTH_OS_DEVICE&#160;</td><td class="fielddoc"><p>Virtual depth for software device object level. </p>
120 </td></tr>
121 <tr><td class="fieldname"><a id="ggaf4e663cf42bbe20756b849c6293ef575a96436a392b4cdcaa1a29bc65351b373f"></a>HWLOC_TYPE_DEPTH_MISC&#160;</td><td class="fielddoc"><p>Virtual depth for Misc object. </p>
122 </td></tr>
123 <tr><td class="fieldname"><a id="ggaf4e663cf42bbe20756b849c6293ef575a8b8d7d300c018c0eb65e6c9a9f162101"></a>HWLOC_TYPE_DEPTH_MEMCACHE&#160;</td><td class="fielddoc"><p>Virtual depth for MemCache object. </p>
124 </td></tr>
125 </table>
126
127 </div>
128 </div>
129 <h2 class="groupheader">Function Documentation</h2>
130 <a id="ga506b0682b98aa264d53e934d2e9badb0"></a>
131 <h2 class="memtitle"><span class="permalink"><a href="#ga506b0682b98aa264d53e934d2e9badb0">&#9670;&nbsp;</a></span>hwloc_get_depth_type()</h2>
132
133 <div class="memitem">
134 <div class="memproto">
135 <table class="memname">
136 <tr>
137 <td class="memname"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> hwloc_get_depth_type </td>
138 <td>(</td>
139 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
140 <td class="paramname"><em>topology</em>, </td>
141 </tr>
142 <tr>
143 <td class="paramkey"></td>
144 <td></td>
145 <td class="paramtype">int&#160;</td>
146 <td class="paramname"><em>depth</em>&#160;</td>
147 </tr>
148 <tr>
149 <td></td>
150 <td>)</td>
151 <td></td><td></td>
152 </tr>
153 </table>
154 </div><div class="memdoc">
155
156 <p>Returns the type of objects at depth <code>depth</code>. </p>
157 <p><code>depth</code> should between 0 and <a class="el" href="a00196.html#gae54d1782ca9b54bea915f5c18a9158fa" title="Get the depth of the hierarchical tree of objects.">hwloc_topology_get_depth()</a>-1, or a virtual depth such as <a class="el" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a245c34ec9884c2cf5de5049b2153ed9c" title="Virtual depth for NUMA nodes.">HWLOC_TYPE_DEPTH_NUMANODE</a>.</p>
158 <dl class="section return"><dt>Returns</dt><dd>(hwloc_obj_type_t)-1 if depth <code>depth</code> does not exist. </dd></dl>
159
160 </div>
161 </div>
162 <a id="gae85786340b88e24835f8c403a1e2e54b"></a>
163 <h2 class="memtitle"><span class="permalink"><a href="#gae85786340b88e24835f8c403a1e2e54b">&#9670;&nbsp;</a></span>hwloc_get_memory_parents_depth()</h2>
164
165 <div class="memitem">
166 <div class="memproto">
167 <table class="memname">
168 <tr>
169 <td class="memname">int hwloc_get_memory_parents_depth </td>
170 <td>(</td>
171 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
172 <td class="paramname"><em>topology</em></td><td>)</td>
173 <td></td>
174 </tr>
175 </table>
176 </div><div class="memdoc">
177
178 <p>Return the depth of parents where memory objects are attached. </p>
179 <p>Memory objects have virtual negative depths because they are not part of the main CPU-side hierarchy of objects. This depth should not be compared with other level depths.</p>
180 <p>If all Memory objects are attached to Normal parents at the same depth, this parent depth may be compared to other as usual, for instance for knowing whether NUMA nodes is attached above or below Packages.</p>
181 <dl class="section return"><dt>Returns</dt><dd>The depth of Normal parents of all memory children if all these parents have the same depth. For instance the depth of the Package level if all NUMA nodes are attached to Package objects.</dd>
90182 <dd>
91 On some operating systems, CPU binding may have effects on memory binding, see <a class="el" href="a00196.html#gga217dc8d373f8958cc93c154ebce1c71ca41ce440443cc3087caed95ab60edcad6" title="Avoid any effect on memory binding.">HWLOC_CPUBIND_NOMEMBIND</a></dd>
183 <a class="el" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c" title="Objects of given type exist at different depth in the topology (only for Groups).">HWLOC_TYPE_DEPTH_MULTIPLE</a> if Normal parents of all memory children do not have the same depth. For instance if some NUMA nodes are attached to Packages while others are attached to Groups. </dd></dl>
184
185 </div>
186 </div>
187 <a id="ga1d5ceafe8130fe6e8657bf0bc666ba50"></a>
188 <h2 class="memtitle"><span class="permalink"><a href="#ga1d5ceafe8130fe6e8657bf0bc666ba50">&#9670;&nbsp;</a></span>hwloc_get_nbobjs_by_depth()</h2>
189
190 <div class="memitem">
191 <div class="memproto">
192 <table class="memname">
193 <tr>
194 <td class="memname">unsigned hwloc_get_nbobjs_by_depth </td>
195 <td>(</td>
196 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
197 <td class="paramname"><em>topology</em>, </td>
198 </tr>
199 <tr>
200 <td class="paramkey"></td>
201 <td></td>
202 <td class="paramtype">int&#160;</td>
203 <td class="paramname"><em>depth</em>&#160;</td>
204 </tr>
205 <tr>
206 <td></td>
207 <td>)</td>
208 <td></td><td></td>
209 </tr>
210 </table>
211 </div><div class="memdoc">
212
213 <p>Returns the width of level at depth <code>depth</code>. </p>
214
215 </div>
216 </div>
217 <a id="ga789a3f65aedff644be64a18526a03065"></a>
218 <h2 class="memtitle"><span class="permalink"><a href="#ga789a3f65aedff644be64a18526a03065">&#9670;&nbsp;</a></span>hwloc_get_nbobjs_by_type()</h2>
219
220 <div class="memitem">
221 <div class="memproto">
222 <table class="mlabels">
223 <tr>
224 <td class="mlabels-left">
225 <table class="memname">
226 <tr>
227 <td class="memname">static int hwloc_get_nbobjs_by_type </td>
228 <td>(</td>
229 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
230 <td class="paramname"><em>topology</em>, </td>
231 </tr>
232 <tr>
233 <td class="paramkey"></td>
234 <td></td>
235 <td class="paramtype"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
236 <td class="paramname"><em>type</em>&#160;</td>
237 </tr>
238 <tr>
239 <td></td>
240 <td>)</td>
241 <td></td><td></td>
242 </tr>
243 </table>
244 </td>
245 <td class="mlabels-right">
246 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
247 </tr>
248 </table>
249 </div><div class="memdoc">
250
251 <p>Returns the width of level type <code>type</code>. </p>
252 <p>If no object for that type exists, 0 is returned. If there are several levels with objects of that type, -1 is returned. </p>
253
254 </div>
255 </div>
256 <a id="gac140a9b939d9fa0b30c4a910efcb0656"></a>
257 <h2 class="memtitle"><span class="permalink"><a href="#gac140a9b939d9fa0b30c4a910efcb0656">&#9670;&nbsp;</a></span>hwloc_get_next_obj_by_depth()</h2>
258
259 <div class="memitem">
260 <div class="memproto">
261 <table class="mlabels">
262 <tr>
263 <td class="mlabels-left">
264 <table class="memname">
265 <tr>
266 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_next_obj_by_depth </td>
267 <td>(</td>
268 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
269 <td class="paramname"><em>topology</em>, </td>
270 </tr>
271 <tr>
272 <td class="paramkey"></td>
273 <td></td>
274 <td class="paramtype">int&#160;</td>
275 <td class="paramname"><em>depth</em>, </td>
276 </tr>
277 <tr>
278 <td class="paramkey"></td>
279 <td></td>
280 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
281 <td class="paramname"><em>prev</em>&#160;</td>
282 </tr>
283 <tr>
284 <td></td>
285 <td>)</td>
286 <td></td><td></td>
287 </tr>
288 </table>
289 </td>
290 <td class="mlabels-right">
291 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
292 </tr>
293 </table>
294 </div><div class="memdoc">
295
296 <p>Returns the next object at depth <code>depth</code>. </p>
297 <p>If <code>prev</code> is <code>NULL</code>, return the first object at depth <code>depth</code>. </p>
298
299 </div>
300 </div>
301 <a id="ga759e88eaf5a230ad283e9d4c42486735"></a>
302 <h2 class="memtitle"><span class="permalink"><a href="#ga759e88eaf5a230ad283e9d4c42486735">&#9670;&nbsp;</a></span>hwloc_get_next_obj_by_type()</h2>
303
304 <div class="memitem">
305 <div class="memproto">
306 <table class="mlabels">
307 <tr>
308 <td class="mlabels-left">
309 <table class="memname">
310 <tr>
311 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_next_obj_by_type </td>
312 <td>(</td>
313 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
314 <td class="paramname"><em>topology</em>, </td>
315 </tr>
316 <tr>
317 <td class="paramkey"></td>
318 <td></td>
319 <td class="paramtype"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
320 <td class="paramname"><em>type</em>, </td>
321 </tr>
322 <tr>
323 <td class="paramkey"></td>
324 <td></td>
325 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
326 <td class="paramname"><em>prev</em>&#160;</td>
327 </tr>
328 <tr>
329 <td></td>
330 <td>)</td>
331 <td></td><td></td>
332 </tr>
333 </table>
334 </td>
335 <td class="mlabels-right">
336 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
337 </tr>
338 </table>
339 </div><div class="memdoc">
340
341 <p>Returns the next object of type <code>type</code>. </p>
342 <p>If <code>prev</code> is <code>NULL</code>, return the first object at type <code>type</code>. If there are multiple or no depth for given type, return <code>NULL</code> and let the caller fallback to <a class="el" href="a00196.html#gac140a9b939d9fa0b30c4a910efcb0656" title="Returns the next object at depth depth.">hwloc_get_next_obj_by_depth()</a>. </p>
343
344 </div>
345 </div>
346 <a id="ga391f6b2613f0065673eaa4069b93d4e0"></a>
347 <h2 class="memtitle"><span class="permalink"><a href="#ga391f6b2613f0065673eaa4069b93d4e0">&#9670;&nbsp;</a></span>hwloc_get_obj_by_depth()</h2>
348
349 <div class="memitem">
350 <div class="memproto">
351 <table class="memname">
352 <tr>
353 <td class="memname"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_obj_by_depth </td>
354 <td>(</td>
355 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
356 <td class="paramname"><em>topology</em>, </td>
357 </tr>
358 <tr>
359 <td class="paramkey"></td>
360 <td></td>
361 <td class="paramtype">int&#160;</td>
362 <td class="paramname"><em>depth</em>, </td>
363 </tr>
364 <tr>
365 <td class="paramkey"></td>
366 <td></td>
367 <td class="paramtype">unsigned&#160;</td>
368 <td class="paramname"><em>idx</em>&#160;</td>
369 </tr>
370 <tr>
371 <td></td>
372 <td>)</td>
373 <td></td><td></td>
374 </tr>
375 </table>
376 </div><div class="memdoc">
377
378 <p>Returns the topology object at logical index <code>idx</code> from depth <code>depth</code>. </p>
379
380 </div>
381 </div>
382 <a id="ga6f414dd80a2b943967a0ac92da3181a2"></a>
383 <h2 class="memtitle"><span class="permalink"><a href="#ga6f414dd80a2b943967a0ac92da3181a2">&#9670;&nbsp;</a></span>hwloc_get_obj_by_type()</h2>
384
385 <div class="memitem">
386 <div class="memproto">
387 <table class="mlabels">
388 <tr>
389 <td class="mlabels-left">
390 <table class="memname">
391 <tr>
392 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_obj_by_type </td>
393 <td>(</td>
394 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
395 <td class="paramname"><em>topology</em>, </td>
396 </tr>
397 <tr>
398 <td class="paramkey"></td>
399 <td></td>
400 <td class="paramtype"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
401 <td class="paramname"><em>type</em>, </td>
402 </tr>
403 <tr>
404 <td class="paramkey"></td>
405 <td></td>
406 <td class="paramtype">unsigned&#160;</td>
407 <td class="paramname"><em>idx</em>&#160;</td>
408 </tr>
409 <tr>
410 <td></td>
411 <td>)</td>
412 <td></td><td></td>
413 </tr>
414 </table>
415 </td>
416 <td class="mlabels-right">
417 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
418 </tr>
419 </table>
420 </div><div class="memdoc">
421
422 <p>Returns the topology object at logical index <code>idx</code> with type <code>type</code>. </p>
423 <p>If no object for that type exists, <code>NULL</code> is returned. If there are several levels with objects of that type (<a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a5269ef95be72f88465559d35c9b7ad56" title="Group objects. Objects which do not fit in the above but are detected by hwloc and are useful to take...">HWLOC_OBJ_GROUP</a>), <code>NULL</code> is returned and the caller may fallback to <a class="el" href="a00196.html#ga391f6b2613f0065673eaa4069b93d4e0" title="Returns the topology object at logical index idx from depth depth.">hwloc_get_obj_by_depth()</a>. </p>
424
425 </div>
426 </div>
427 <a id="ga2d4b12fc187dfc53b35f2fa21d21044d"></a>
428 <h2 class="memtitle"><span class="permalink"><a href="#ga2d4b12fc187dfc53b35f2fa21d21044d">&#9670;&nbsp;</a></span>hwloc_get_root_obj()</h2>
429
430 <div class="memitem">
431 <div class="memproto">
432 <table class="mlabels">
433 <tr>
434 <td class="mlabels-left">
435 <table class="memname">
436 <tr>
437 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_root_obj </td>
438 <td>(</td>
439 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
440 <td class="paramname"><em>topology</em></td><td>)</td>
441 <td></td>
442 </tr>
443 </table>
444 </td>
445 <td class="mlabels-right">
446 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
447 </tr>
448 </table>
449 </div><div class="memdoc">
450
451 <p>Returns the top-object of the topology-tree. </p>
452 <p>Its type is <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a3f4e83ffc4a259354959ae8a9eaa2a80" title="Machine. A set of processors and memory with cache coherency.">HWLOC_OBJ_MACHINE</a>. </p>
453
454 </div>
455 </div>
456 <a id="ga8bec782e21be313750da70cf7428b374"></a>
457 <h2 class="memtitle"><span class="permalink"><a href="#ga8bec782e21be313750da70cf7428b374">&#9670;&nbsp;</a></span>hwloc_get_type_depth()</h2>
458
459 <div class="memitem">
460 <div class="memproto">
461 <table class="memname">
462 <tr>
463 <td class="memname">int hwloc_get_type_depth </td>
464 <td>(</td>
465 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
466 <td class="paramname"><em>topology</em>, </td>
467 </tr>
468 <tr>
469 <td class="paramkey"></td>
470 <td></td>
471 <td class="paramtype"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
472 <td class="paramname"><em>type</em>&#160;</td>
473 </tr>
474 <tr>
475 <td></td>
476 <td>)</td>
477 <td></td><td></td>
478 </tr>
479 </table>
480 </div><div class="memdoc">
481
482 <p>Returns the depth of objects of type <code>type</code>. </p>
483 <p>If no object of this type is present on the underlying architecture, or if the OS doesn't provide this kind of information, the function returns <a class="el" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad" title="No object of given type exists in the topology.">HWLOC_TYPE_DEPTH_UNKNOWN</a>.</p>
484 <p>If type is absent but a similar type is acceptable, see also <a class="el" href="a00196.html#ga8125328e69eba709c33ea8055c12589b" title="Returns the depth of objects of type type or below.">hwloc_get_type_or_below_depth()</a> and <a class="el" href="a00196.html#ga8a9ee573b7d2190272095d10712a7cca" title="Returns the depth of objects of type type or above.">hwloc_get_type_or_above_depth()</a>.</p>
485 <p>If <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a5269ef95be72f88465559d35c9b7ad56" title="Group objects. Objects which do not fit in the above but are detected by hwloc and are useful to take...">HWLOC_OBJ_GROUP</a> is given, the function may return <a class="el" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c" title="Objects of given type exist at different depth in the topology (only for Groups).">HWLOC_TYPE_DEPTH_MULTIPLE</a> if multiple levels of Groups exist.</p>
486 <p>If a NUMA node, I/O or Misc object type is given, the function returns a virtual value because these objects are stored in special levels that are not CPU-related. This virtual depth may be passed to other hwloc functions such as <a class="el" href="a00196.html#ga391f6b2613f0065673eaa4069b93d4e0" title="Returns the topology object at logical index idx from depth depth.">hwloc_get_obj_by_depth()</a> but it should not be considered as an actual depth by the application. In particular, it should not be compared with any other object depth or with the entire topology depth. </p><dl class="section see"><dt>See also</dt><dd><a class="el" href="a00196.html#gae85786340b88e24835f8c403a1e2e54b" title="Return the depth of parents where memory objects are attached.">hwloc_get_memory_parents_depth()</a>.</dd>
92487 <dd>
93 Running lstopo --top or hwloc-ps can be a very convenient tool to check how binding actually happened. </dd></dl>
94 <h2 class="groupheader">Enumeration Type Documentation</h2>
95 <a id="ga217dc8d373f8958cc93c154ebce1c71c"></a>
96 <h2 class="memtitle"><span class="permalink"><a href="#ga217dc8d373f8958cc93c154ebce1c71c">&#9670;&nbsp;</a></span>hwloc_cpubind_flags_t</h2>
97
98 <div class="memitem">
99 <div class="memproto">
100 <table class="memname">
101 <tr>
102 <td class="memname">enum <a class="el" href="a00196.html#ga217dc8d373f8958cc93c154ebce1c71c">hwloc_cpubind_flags_t</a></td>
103 </tr>
104 </table>
105 </div><div class="memdoc">
106
107 <p>Process/Thread binding flags. </p>
108 <p>These bit flags can be used to refine the binding policy.</p>
109 <p>The default (0) is to bind the current process, assumed to be single-threaded, in a non-strict way. This is the most portable way to bind as all operating systems usually provide it.</p>
110 <dl class="section note"><dt>Note</dt><dd>Not all systems support all kinds of binding. See the "Detailed Description" section of <a class="el" href="a00196.html">CPU binding</a> for a description of errors that can occur. </dd></dl>
111 <table class="fieldtable">
112 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga217dc8d373f8958cc93c154ebce1c71ca2e0dd0128dac6b03408c7dd170477fdc"></a>HWLOC_CPUBIND_PROCESS&#160;</td><td class="fielddoc"><p>Bind all threads of the current (possibly) multithreaded process. </p>
113 </td></tr>
114 <tr><td class="fieldname"><a id="gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421"></a>HWLOC_CPUBIND_THREAD&#160;</td><td class="fielddoc"><p>Bind current thread of current process. </p>
115 </td></tr>
116 <tr><td class="fieldname"><a id="gga217dc8d373f8958cc93c154ebce1c71ca679a7e0f0c7ee06b123565f90d98e7fa"></a>HWLOC_CPUBIND_STRICT&#160;</td><td class="fielddoc"><p>Request for strict binding from the OS. </p>
117 <p>By default, when the designated CPUs are all busy while other CPUs are idle, operating systems may execute the thread/process on those other CPUs instead of the designated CPUs, to let them progress anyway. Strict binding means that the thread/process will _never_ execute on other cpus than the designated CPUs, even when those are busy with other tasks and other CPUs are idle.</p>
118 <dl class="section note"><dt>Note</dt><dd>Depending on the operating system, strict binding may not be possible (e.g., the OS does not implement it) or not allowed (e.g., for an administrative reasons), and the function will fail in that case.</dd></dl>
119 <p>When retrieving the binding of a process, this flag checks whether all its threads actually have the same binding. If the flag is not given, the binding of each thread will be accumulated.</p>
120 <dl class="section note"><dt>Note</dt><dd>This flag is meaningless when retrieving the binding of a thread. </dd></dl>
121 </td></tr>
122 <tr><td class="fieldname"><a id="gga217dc8d373f8958cc93c154ebce1c71ca41ce440443cc3087caed95ab60edcad6"></a>HWLOC_CPUBIND_NOMEMBIND&#160;</td><td class="fielddoc"><p>Avoid any effect on memory binding. </p>
123 <p>On some operating systems, some CPU binding function would also bind the memory on the corresponding NUMA node. It is often not a problem for the application, but if it is, setting this flag will make hwloc avoid using OS functions that would also bind memory. This will however reduce the support of CPU bindings, i.e. potentially return -1 with errno set to ENOSYS in some cases.</p>
124 <p>This flag is only meaningful when used with functions that set the CPU binding. It is ignored when used with functions that get CPU binding information. </p>
125 </td></tr>
126 </table>
127
128 </div>
129 </div>
130 <h2 class="groupheader">Function Documentation</h2>
131 <a id="gacba7ecb979baf824d5240fa2cb2a8be6"></a>
132 <h2 class="memtitle"><span class="permalink"><a href="#gacba7ecb979baf824d5240fa2cb2a8be6">&#9670;&nbsp;</a></span>hwloc_get_cpubind()</h2>
133
134 <div class="memitem">
135 <div class="memproto">
136 <table class="memname">
137 <tr>
138 <td class="memname">int hwloc_get_cpubind </td>
139 <td>(</td>
140 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
141 <td class="paramname"><em>topology</em>, </td>
142 </tr>
143 <tr>
144 <td class="paramkey"></td>
145 <td></td>
146 <td class="paramtype"><a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
147 <td class="paramname"><em>set</em>, </td>
148 </tr>
149 <tr>
150 <td class="paramkey"></td>
151 <td></td>
152 <td class="paramtype">int&#160;</td>
153 <td class="paramname"><em>flags</em>&#160;</td>
154 </tr>
155 <tr>
156 <td></td>
157 <td>)</td>
158 <td></td><td></td>
159 </tr>
160 </table>
161 </div><div class="memdoc">
162
163 <p>Get current process or thread binding. </p>
164 <p>Writes into <code>set</code> the physical cpuset which the process or thread (according to <em>flags</em>) was last bound to. </p>
165
166 </div>
167 </div>
168 <a id="gafdb374627358bf09203b5a4215b13032"></a>
169 <h2 class="memtitle"><span class="permalink"><a href="#gafdb374627358bf09203b5a4215b13032">&#9670;&nbsp;</a></span>hwloc_get_last_cpu_location()</h2>
170
171 <div class="memitem">
172 <div class="memproto">
173 <table class="memname">
174 <tr>
175 <td class="memname">int hwloc_get_last_cpu_location </td>
176 <td>(</td>
177 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
178 <td class="paramname"><em>topology</em>, </td>
179 </tr>
180 <tr>
181 <td class="paramkey"></td>
182 <td></td>
183 <td class="paramtype"><a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
184 <td class="paramname"><em>set</em>, </td>
185 </tr>
186 <tr>
187 <td class="paramkey"></td>
188 <td></td>
189 <td class="paramtype">int&#160;</td>
190 <td class="paramname"><em>flags</em>&#160;</td>
191 </tr>
192 <tr>
193 <td></td>
194 <td>)</td>
195 <td></td><td></td>
196 </tr>
197 </table>
198 </div><div class="memdoc">
199
200 <p>Get the last physical CPU where the current process or thread ran. </p>
201 <p>The operating system may move some tasks from one processor to another at any time according to their binding, so this function may return something that is already outdated.</p>
202 <p><code>flags</code> can include either <a class="el" href="a00196.html#gga217dc8d373f8958cc93c154ebce1c71ca2e0dd0128dac6b03408c7dd170477fdc" title="Bind all threads of the current (possibly) multithreaded process.">HWLOC_CPUBIND_PROCESS</a> or <a class="el" href="a00196.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421" title="Bind current thread of current process.">HWLOC_CPUBIND_THREAD</a> to specify whether the query should be for the whole process (union of all CPUs on which all threads are running), or only the current thread. If the process is single-threaded, flags can be set to zero to let hwloc use whichever method is available on the underlying OS. </p>
203
204 </div>
205 </div>
206 <a id="gac82de91f788fa82dacf99c6e0d4b7158"></a>
207 <h2 class="memtitle"><span class="permalink"><a href="#gac82de91f788fa82dacf99c6e0d4b7158">&#9670;&nbsp;</a></span>hwloc_get_proc_cpubind()</h2>
208
209 <div class="memitem">
210 <div class="memproto">
211 <table class="memname">
212 <tr>
213 <td class="memname">int hwloc_get_proc_cpubind </td>
214 <td>(</td>
215 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
216 <td class="paramname"><em>topology</em>, </td>
217 </tr>
218 <tr>
219 <td class="paramkey"></td>
220 <td></td>
221 <td class="paramtype">hwloc_pid_t&#160;</td>
222 <td class="paramname"><em>pid</em>, </td>
223 </tr>
224 <tr>
225 <td class="paramkey"></td>
226 <td></td>
227 <td class="paramtype"><a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
228 <td class="paramname"><em>set</em>, </td>
229 </tr>
230 <tr>
231 <td class="paramkey"></td>
232 <td></td>
233 <td class="paramtype">int&#160;</td>
234 <td class="paramname"><em>flags</em>&#160;</td>
235 </tr>
236 <tr>
237 <td></td>
238 <td>)</td>
239 <td></td><td></td>
240 </tr>
241 </table>
242 </div><div class="memdoc">
243
244 <p>Get the current physical binding of process <code>pid</code>. </p>
245 <dl class="section note"><dt>Note</dt><dd><code>hwloc_pid_t</code> is <code>pid_t</code> on Unix platforms, and <code>HANDLE</code> on native Windows platforms.</dd>
246 <dd>
247 As a special case on Linux, if a tid (thread ID) is supplied instead of a pid (process ID) and HWLOC_CPUBIND_THREAD is passed in flags, the binding for that specific thread is returned.</dd>
248 <dd>
249 On non-Linux systems, HWLOC_CPUBIND_THREAD can not be used in <code>flags</code>. </dd></dl>
250
251 </div>
252 </div>
253 <a id="ga910a05c2d47f68a3155bf176b50fa555"></a>
254 <h2 class="memtitle"><span class="permalink"><a href="#ga910a05c2d47f68a3155bf176b50fa555">&#9670;&nbsp;</a></span>hwloc_get_proc_last_cpu_location()</h2>
255
256 <div class="memitem">
257 <div class="memproto">
258 <table class="memname">
259 <tr>
260 <td class="memname">int hwloc_get_proc_last_cpu_location </td>
261 <td>(</td>
262 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
263 <td class="paramname"><em>topology</em>, </td>
264 </tr>
265 <tr>
266 <td class="paramkey"></td>
267 <td></td>
268 <td class="paramtype">hwloc_pid_t&#160;</td>
269 <td class="paramname"><em>pid</em>, </td>
270 </tr>
271 <tr>
272 <td class="paramkey"></td>
273 <td></td>
274 <td class="paramtype"><a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
275 <td class="paramname"><em>set</em>, </td>
276 </tr>
277 <tr>
278 <td class="paramkey"></td>
279 <td></td>
280 <td class="paramtype">int&#160;</td>
281 <td class="paramname"><em>flags</em>&#160;</td>
282 </tr>
283 <tr>
284 <td></td>
285 <td>)</td>
286 <td></td><td></td>
287 </tr>
288 </table>
289 </div><div class="memdoc">
290
291 <p>Get the last physical CPU where a process ran. </p>
292 <p>The operating system may move some tasks from one processor to another at any time according to their binding, so this function may return something that is already outdated.</p>
293 <dl class="section note"><dt>Note</dt><dd><code>hwloc_pid_t</code> is <code>pid_t</code> on Unix platforms, and <code>HANDLE</code> on native Windows platforms.</dd>
294 <dd>
295 As a special case on Linux, if a tid (thread ID) is supplied instead of a pid (process ID) and <a class="el" href="a00196.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421" title="Bind current thread of current process.">HWLOC_CPUBIND_THREAD</a> is passed in flags, the last CPU location of that specific thread is returned.</dd>
296 <dd>
297 On non-Linux systems, <a class="el" href="a00196.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421" title="Bind current thread of current process.">HWLOC_CPUBIND_THREAD</a> can not be used in <code>flags</code>. </dd></dl>
298
299 </div>
300 </div>
301 <a id="gaf13f765642b5d0d9a9813e6bb043671b"></a>
302 <h2 class="memtitle"><span class="permalink"><a href="#gaf13f765642b5d0d9a9813e6bb043671b">&#9670;&nbsp;</a></span>hwloc_get_thread_cpubind()</h2>
303
304 <div class="memitem">
305 <div class="memproto">
306 <table class="memname">
307 <tr>
308 <td class="memname">int hwloc_get_thread_cpubind </td>
309 <td>(</td>
310 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
311 <td class="paramname"><em>topology</em>, </td>
312 </tr>
313 <tr>
314 <td class="paramkey"></td>
315 <td></td>
316 <td class="paramtype">hwloc_thread_t&#160;</td>
317 <td class="paramname"><em>thread</em>, </td>
318 </tr>
319 <tr>
320 <td class="paramkey"></td>
321 <td></td>
322 <td class="paramtype"><a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
323 <td class="paramname"><em>set</em>, </td>
324 </tr>
325 <tr>
326 <td class="paramkey"></td>
327 <td></td>
328 <td class="paramtype">int&#160;</td>
329 <td class="paramname"><em>flags</em>&#160;</td>
330 </tr>
331 <tr>
332 <td></td>
333 <td>)</td>
334 <td></td><td></td>
335 </tr>
336 </table>
337 </div><div class="memdoc">
338
339 <p>Get the current physical binding of thread <code>tid</code>. </p>
340 <dl class="section note"><dt>Note</dt><dd><code>hwloc_thread_t</code> is <code>pthread_t</code> on Unix platforms, and <code>HANDLE</code> on native Windows platforms.</dd>
341 <dd>
342 <a class="el" href="a00196.html#gga217dc8d373f8958cc93c154ebce1c71ca2e0dd0128dac6b03408c7dd170477fdc" title="Bind all threads of the current (possibly) multithreaded process.">HWLOC_CPUBIND_PROCESS</a> can not be used in <code>flags</code>. </dd></dl>
343
344 </div>
345 </div>
346 <a id="ga80bc07473a8edf840cae17bd7ec21d48"></a>
347 <h2 class="memtitle"><span class="permalink"><a href="#ga80bc07473a8edf840cae17bd7ec21d48">&#9670;&nbsp;</a></span>hwloc_set_cpubind()</h2>
348
349 <div class="memitem">
350 <div class="memproto">
351 <table class="memname">
352 <tr>
353 <td class="memname">int hwloc_set_cpubind </td>
354 <td>(</td>
355 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
356 <td class="paramname"><em>topology</em>, </td>
357 </tr>
358 <tr>
359 <td class="paramkey"></td>
360 <td></td>
361 <td class="paramtype"><a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
362 <td class="paramname"><em>set</em>, </td>
363 </tr>
364 <tr>
365 <td class="paramkey"></td>
366 <td></td>
367 <td class="paramtype">int&#160;</td>
368 <td class="paramname"><em>flags</em>&#160;</td>
369 </tr>
370 <tr>
371 <td></td>
372 <td>)</td>
373 <td></td><td></td>
374 </tr>
375 </table>
376 </div><div class="memdoc">
377
378 <p>Bind current process or thread on cpus given in physical bitmap <code>set</code>. </p>
379 <dl class="section return"><dt>Returns</dt><dd>-1 with errno set to ENOSYS if the action is not supported </dd>
380 <dd>
381 -1 with errno set to EXDEV if the binding cannot be enforced </dd></dl>
382
383 </div>
384 </div>
385 <a id="ga296db8a3c6d49b51fb83d6f3e45c02a6"></a>
386 <h2 class="memtitle"><span class="permalink"><a href="#ga296db8a3c6d49b51fb83d6f3e45c02a6">&#9670;&nbsp;</a></span>hwloc_set_proc_cpubind()</h2>
387
388 <div class="memitem">
389 <div class="memproto">
390 <table class="memname">
391 <tr>
392 <td class="memname">int hwloc_set_proc_cpubind </td>
393 <td>(</td>
394 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
395 <td class="paramname"><em>topology</em>, </td>
396 </tr>
397 <tr>
398 <td class="paramkey"></td>
399 <td></td>
400 <td class="paramtype">hwloc_pid_t&#160;</td>
401 <td class="paramname"><em>pid</em>, </td>
402 </tr>
403 <tr>
404 <td class="paramkey"></td>
405 <td></td>
406 <td class="paramtype"><a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
407 <td class="paramname"><em>set</em>, </td>
408 </tr>
409 <tr>
410 <td class="paramkey"></td>
411 <td></td>
412 <td class="paramtype">int&#160;</td>
413 <td class="paramname"><em>flags</em>&#160;</td>
414 </tr>
415 <tr>
416 <td></td>
417 <td>)</td>
418 <td></td><td></td>
419 </tr>
420 </table>
421 </div><div class="memdoc">
422
423 <p>Bind a process <code>pid</code> on cpus given in physical bitmap <code>set</code>. </p>
424 <dl class="section note"><dt>Note</dt><dd><code>hwloc_pid_t</code> is <code>pid_t</code> on Unix platforms, and <code>HANDLE</code> on native Windows platforms.</dd>
425 <dd>
426 As a special case on Linux, if a tid (thread ID) is supplied instead of a pid (process ID) and <a class="el" href="a00196.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421" title="Bind current thread of current process.">HWLOC_CPUBIND_THREAD</a> is passed in flags, the binding is applied to that specific thread.</dd>
427 <dd>
428 On non-Linux systems, <a class="el" href="a00196.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421" title="Bind current thread of current process.">HWLOC_CPUBIND_THREAD</a> can not be used in <code>flags</code>. </dd></dl>
429
430 </div>
431 </div>
432 <a id="gae42c01b2addcfbf6048b9a516dd7a906"></a>
433 <h2 class="memtitle"><span class="permalink"><a href="#gae42c01b2addcfbf6048b9a516dd7a906">&#9670;&nbsp;</a></span>hwloc_set_thread_cpubind()</h2>
434
435 <div class="memitem">
436 <div class="memproto">
437 <table class="memname">
438 <tr>
439 <td class="memname">int hwloc_set_thread_cpubind </td>
440 <td>(</td>
441 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
442 <td class="paramname"><em>topology</em>, </td>
443 </tr>
444 <tr>
445 <td class="paramkey"></td>
446 <td></td>
447 <td class="paramtype">hwloc_thread_t&#160;</td>
448 <td class="paramname"><em>thread</em>, </td>
449 </tr>
450 <tr>
451 <td class="paramkey"></td>
452 <td></td>
453 <td class="paramtype"><a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
454 <td class="paramname"><em>set</em>, </td>
455 </tr>
456 <tr>
457 <td class="paramkey"></td>
458 <td></td>
459 <td class="paramtype">int&#160;</td>
460 <td class="paramname"><em>flags</em>&#160;</td>
461 </tr>
462 <tr>
463 <td></td>
464 <td>)</td>
465 <td></td><td></td>
466 </tr>
467 </table>
468 </div><div class="memdoc">
469
470 <p>Bind a thread <code>thread</code> on cpus given in physical bitmap <code>set</code>. </p>
471 <dl class="section note"><dt>Note</dt><dd><code>hwloc_thread_t</code> is <code>pthread_t</code> on Unix platforms, and <code>HANDLE</code> on native Windows platforms.</dd>
472 <dd>
473 <a class="el" href="a00196.html#gga217dc8d373f8958cc93c154ebce1c71ca2e0dd0128dac6b03408c7dd170477fdc" title="Bind all threads of the current (possibly) multithreaded process.">HWLOC_CPUBIND_PROCESS</a> can not be used in <code>flags</code>. </dd></dl>
488 <a class="el" href="a00197.html#ga52c63cd7203e55b804c1314affc9bd12" title="Return an object type and its level depth from a type string.">hwloc_type_sscanf_as_depth()</a> for returning the depth of objects whose type is given as a string. </dd></dl>
489
490 </div>
491 </div>
492 <a id="ga8a9ee573b7d2190272095d10712a7cca"></a>
493 <h2 class="memtitle"><span class="permalink"><a href="#ga8a9ee573b7d2190272095d10712a7cca">&#9670;&nbsp;</a></span>hwloc_get_type_or_above_depth()</h2>
494
495 <div class="memitem">
496 <div class="memproto">
497 <table class="mlabels">
498 <tr>
499 <td class="mlabels-left">
500 <table class="memname">
501 <tr>
502 <td class="memname">static int hwloc_get_type_or_above_depth </td>
503 <td>(</td>
504 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
505 <td class="paramname"><em>topology</em>, </td>
506 </tr>
507 <tr>
508 <td class="paramkey"></td>
509 <td></td>
510 <td class="paramtype"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
511 <td class="paramname"><em>type</em>&#160;</td>
512 </tr>
513 <tr>
514 <td></td>
515 <td>)</td>
516 <td></td><td></td>
517 </tr>
518 </table>
519 </td>
520 <td class="mlabels-right">
521 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
522 </tr>
523 </table>
524 </div><div class="memdoc">
525
526 <p>Returns the depth of objects of type <code>type</code> or above. </p>
527 <p>If no object of this type is present on the underlying architecture, the function returns the depth of the first "present" object typically containing <code>type</code>.</p>
528 <p>This function is only meaningful for normal object types. If a memory, I/O or Misc object type is given, the corresponding virtual depth is always returned (see <a class="el" href="a00196.html#ga8bec782e21be313750da70cf7428b374" title="Returns the depth of objects of type type.">hwloc_get_type_depth()</a>).</p>
529 <p>May return <a class="el" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c" title="Objects of given type exist at different depth in the topology (only for Groups).">HWLOC_TYPE_DEPTH_MULTIPLE</a> for <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a5269ef95be72f88465559d35c9b7ad56" title="Group objects. Objects which do not fit in the above but are detected by hwloc and are useful to take...">HWLOC_OBJ_GROUP</a> just like <a class="el" href="a00196.html#ga8bec782e21be313750da70cf7428b374" title="Returns the depth of objects of type type.">hwloc_get_type_depth()</a>. </p>
530
531 </div>
532 </div>
533 <a id="ga8125328e69eba709c33ea8055c12589b"></a>
534 <h2 class="memtitle"><span class="permalink"><a href="#ga8125328e69eba709c33ea8055c12589b">&#9670;&nbsp;</a></span>hwloc_get_type_or_below_depth()</h2>
535
536 <div class="memitem">
537 <div class="memproto">
538 <table class="mlabels">
539 <tr>
540 <td class="mlabels-left">
541 <table class="memname">
542 <tr>
543 <td class="memname">static int hwloc_get_type_or_below_depth </td>
544 <td>(</td>
545 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
546 <td class="paramname"><em>topology</em>, </td>
547 </tr>
548 <tr>
549 <td class="paramkey"></td>
550 <td></td>
551 <td class="paramtype"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
552 <td class="paramname"><em>type</em>&#160;</td>
553 </tr>
554 <tr>
555 <td></td>
556 <td>)</td>
557 <td></td><td></td>
558 </tr>
559 </table>
560 </td>
561 <td class="mlabels-right">
562 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
563 </tr>
564 </table>
565 </div><div class="memdoc">
566
567 <p>Returns the depth of objects of type <code>type</code> or below. </p>
568 <p>If no object of this type is present on the underlying architecture, the function returns the depth of the first "present" object typically found inside <code>type</code>.</p>
569 <p>This function is only meaningful for normal object types. If a memory, I/O or Misc object type is given, the corresponding virtual depth is always returned (see <a class="el" href="a00196.html#ga8bec782e21be313750da70cf7428b374" title="Returns the depth of objects of type type.">hwloc_get_type_depth()</a>).</p>
570 <p>May return <a class="el" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c" title="Objects of given type exist at different depth in the topology (only for Groups).">HWLOC_TYPE_DEPTH_MULTIPLE</a> for <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a5269ef95be72f88465559d35c9b7ad56" title="Group objects. Objects which do not fit in the above but are detected by hwloc and are useful to take...">HWLOC_OBJ_GROUP</a> just like <a class="el" href="a00196.html#ga8bec782e21be313750da70cf7428b374" title="Returns the depth of objects of type type.">hwloc_get_type_depth()</a>. </p>
571
572 </div>
573 </div>
574 <a id="gae54d1782ca9b54bea915f5c18a9158fa"></a>
575 <h2 class="memtitle"><span class="permalink"><a href="#gae54d1782ca9b54bea915f5c18a9158fa">&#9670;&nbsp;</a></span>hwloc_topology_get_depth()</h2>
576
577 <div class="memitem">
578 <div class="memproto">
579 <table class="memname">
580 <tr>
581 <td class="memname">int hwloc_topology_get_depth </td>
582 <td>(</td>
583 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict&#160;</td>
584 <td class="paramname"><em>topology</em></td><td>)</td>
585 <td></td>
586 </tr>
587 </table>
588 </div><div class="memdoc">
589
590 <p>Get the depth of the hierarchical tree of objects. </p>
591 <p>This is the depth of <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661" title="Processing Unit, or (Logical) Processor. An execution unit (may share a core with some other logical ...">HWLOC_OBJ_PU</a> objects plus one.</p>
592 <dl class="section note"><dt>Note</dt><dd>NUMA nodes, I/O and Misc objects are ignored when computing the depth of the tree (they are placed on special levels). </dd></dl>
474593
475594 </div>
476595 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Memory binding</title>
7 <title>Hardware Locality (hwloc): Converting between Object Types and Attributes, and Strings</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="header">
4141 <div class="summary">
42 <a href="#enum-members">Enumerations</a> &#124;
4342 <a href="#func-members">Functions</a> </div>
4443 <div class="headertitle">
45 <div class="title">Memory binding</div> </div>
44 <div class="title">Converting between Object Types and Attributes, and Strings</div> </div>
4645 </div><!--header-->
4746 <div class="contents">
4847 <table class="memberdecls">
49 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
50 Enumerations</h2></td></tr>
51 <tr class="memitem:gac9764f79505775d06407b40f5e4661e8"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> { <br />
52 &#160;&#160;<a class="el" href="a00197.html#ggac9764f79505775d06407b40f5e4661e8a18675bb80ebc1bce5b652e9de8f3998c">HWLOC_MEMBIND_DEFAULT</a>
53 , <a class="el" href="a00197.html#ggac9764f79505775d06407b40f5e4661e8a979c7aa78dd32780858f30f47a72cca0">HWLOC_MEMBIND_FIRSTTOUCH</a>
54 , <a class="el" href="a00197.html#ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c">HWLOC_MEMBIND_BIND</a>
55 , <a class="el" href="a00197.html#ggac9764f79505775d06407b40f5e4661e8ae370075e5af016d42310f87ea5af236b">HWLOC_MEMBIND_INTERLEAVE</a>
56 , <br />
57 &#160;&#160;<a class="el" href="a00197.html#ggac9764f79505775d06407b40f5e4661e8aecdd4164d647708fbb51a00d98dbb138">HWLOC_MEMBIND_NEXTTOUCH</a>
58 , <a class="el" href="a00197.html#ggac9764f79505775d06407b40f5e4661e8a3185bd869b67817fb2bd5164bf360402">HWLOC_MEMBIND_MIXED</a>
59 <br />
60 }</td></tr>
61 <tr class="separator:gac9764f79505775d06407b40f5e4661e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:gab00475fd98815bf4fb9aaf752030e7d2"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html#gab00475fd98815bf4fb9aaf752030e7d2">hwloc_membind_flags_t</a> { <br />
63 &#160;&#160;<a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4">HWLOC_MEMBIND_PROCESS</a>
64 , <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298">HWLOC_MEMBIND_THREAD</a>
65 , <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a>
66 , <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2aa6e49e54f52827cb143cc869cfd748af">HWLOC_MEMBIND_MIGRATE</a>
67 , <br />
68 &#160;&#160;<a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2aad6b9eaf2ee324ca58dc8f58094b9997">HWLOC_MEMBIND_NOCPUBIND</a>
69 , <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256">HWLOC_MEMBIND_BYNODESET</a>
70 <br />
71 }</td></tr>
72 <tr class="separator:gab00475fd98815bf4fb9aaf752030e7d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
73 </table><table class="memberdecls">
7448 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
7549 Functions</h2></td></tr>
76 <tr class="memitem:ga020951efa0ce3862bd4faec295501a7f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html#ga020951efa0ce3862bd4faec295501a7f">hwloc_set_membind</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, <a class="el" href="a00197.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> policy, int flags)</td></tr>
77 <tr class="separator:ga020951efa0ce3862bd4faec295501a7f"><td class="memSeparator" colspan="2">&#160;</td></tr>
78 <tr class="memitem:gae21f0a1a884929c784bebf070252aa56"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html#gae21f0a1a884929c784bebf070252aa56">hwloc_get_membind</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set, <a class="el" href="a00197.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> *policy, int flags)</td></tr>
79 <tr class="separator:gae21f0a1a884929c784bebf070252aa56"><td class="memSeparator" colspan="2">&#160;</td></tr>
80 <tr class="memitem:gabc91ff16f7e41047924e3a4ae6d9da7e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html#gabc91ff16f7e41047924e3a4ae6d9da7e">hwloc_set_proc_membind</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_pid_t pid, <a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, <a class="el" href="a00197.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> policy, int flags)</td></tr>
81 <tr class="separator:gabc91ff16f7e41047924e3a4ae6d9da7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
82 <tr class="memitem:ga1730ceb18ec6ee3b7bd3d0db81f07dc8"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html#ga1730ceb18ec6ee3b7bd3d0db81f07dc8">hwloc_get_proc_membind</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_pid_t pid, <a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set, <a class="el" href="a00197.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> *policy, int flags)</td></tr>
83 <tr class="separator:ga1730ceb18ec6ee3b7bd3d0db81f07dc8"><td class="memSeparator" colspan="2">&#160;</td></tr>
84 <tr class="memitem:gaf881faefe20701229f07dd7dbd0125ed"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html#gaf881faefe20701229f07dd7dbd0125ed">hwloc_set_area_membind</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const void *addr, size_t len, <a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, <a class="el" href="a00197.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> policy, int flags)</td></tr>
85 <tr class="separator:gaf881faefe20701229f07dd7dbd0125ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
86 <tr class="memitem:gaa87e0a6946ff145914fdf0b1c60567f8"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html#gaa87e0a6946ff145914fdf0b1c60567f8">hwloc_get_area_membind</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const void *addr, size_t len, <a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set, <a class="el" href="a00197.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> *policy, int flags)</td></tr>
87 <tr class="separator:gaa87e0a6946ff145914fdf0b1c60567f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
88 <tr class="memitem:ga537c7508a4e2d1db05673ec5be6e805c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html#ga537c7508a4e2d1db05673ec5be6e805c">hwloc_get_area_memlocation</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const void *addr, size_t len, <a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set, int flags)</td></tr>
89 <tr class="separator:ga537c7508a4e2d1db05673ec5be6e805c"><td class="memSeparator" colspan="2">&#160;</td></tr>
90 <tr class="memitem:ga972b335a86a7d5e7b34bce2b243c41bc"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html#ga972b335a86a7d5e7b34bce2b243c41bc">hwloc_alloc</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, size_t len)</td></tr>
91 <tr class="separator:ga972b335a86a7d5e7b34bce2b243c41bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
92 <tr class="memitem:ga04736461780fadcf193af218c0122273"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html#ga04736461780fadcf193af218c0122273">hwloc_alloc_membind</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, size_t len, <a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, <a class="el" href="a00197.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> policy, int flags)</td></tr>
93 <tr class="separator:ga04736461780fadcf193af218c0122273"><td class="memSeparator" colspan="2">&#160;</td></tr>
94 <tr class="memitem:gab1b77b8408bacaf03c7e8878f7577922"><td class="memItemLeft" align="right" valign="top">static void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html#gab1b77b8408bacaf03c7e8878f7577922">hwloc_alloc_membind_policy</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, size_t len, <a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, <a class="el" href="a00197.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> policy, int flags)</td></tr>
95 <tr class="separator:gab1b77b8408bacaf03c7e8878f7577922"><td class="memSeparator" colspan="2">&#160;</td></tr>
96 <tr class="memitem:ga32dbd4f54e9e4a7179f2dde37ffe6ad7"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html#ga32dbd4f54e9e4a7179f2dde37ffe6ad7">hwloc_free</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, void *addr, size_t len)</td></tr>
97 <tr class="separator:ga32dbd4f54e9e4a7179f2dde37ffe6ad7"><td class="memSeparator" colspan="2">&#160;</td></tr>
50 <tr class="memitem:ga5ca0bf94bbbb080d0eff17a57bd90422"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html#ga5ca0bf94bbbb080d0eff17a57bd90422">hwloc_obj_type_string</a> (<a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
51 <tr class="separator:ga5ca0bf94bbbb080d0eff17a57bd90422"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:gadb8765c260edea80c52cd06a76639ba4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html#gadb8765c260edea80c52cd06a76639ba4">hwloc_obj_type_snprintf</a> (char *restrict string, size_t size, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj, int verbose)</td></tr>
53 <tr class="separator:gadb8765c260edea80c52cd06a76639ba4"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:ga870e876931c282a1c7aee2f031912ce3"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html#ga870e876931c282a1c7aee2f031912ce3">hwloc_obj_attr_snprintf</a> (char *restrict string, size_t size, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj, const char *restrict separator, int verbose)</td></tr>
55 <tr class="separator:ga870e876931c282a1c7aee2f031912ce3"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:ga510f21b066fba2dab12b8c9b173b1dfd"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html#ga510f21b066fba2dab12b8c9b173b1dfd">hwloc_type_sscanf</a> (const char *string, <a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> *typep, union <a class="el" href="a00254.html">hwloc_obj_attr_u</a> *attrp, size_t attrsize)</td></tr>
57 <tr class="separator:ga510f21b066fba2dab12b8c9b173b1dfd"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:ga52c63cd7203e55b804c1314affc9bd12"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00197.html#ga52c63cd7203e55b804c1314affc9bd12">hwloc_type_sscanf_as_depth</a> (const char *string, <a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> *typep, <a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int *depthp)</td></tr>
59 <tr class="separator:ga52c63cd7203e55b804c1314affc9bd12"><td class="memSeparator" colspan="2">&#160;</td></tr>
9860 </table>
9961 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
100 <p>Memory binding can be done three ways:</p>
101 <ul>
102 <li>explicit memory allocation thanks to <a class="el" href="a00197.html#ga04736461780fadcf193af218c0122273" title="Allocate some memory on NUMA memory nodes specified by set.">hwloc_alloc_membind()</a> and friends: the binding will have effect on the memory allocated by these functions.</li>
103 <li>implicit memory binding through binding policy: <a class="el" href="a00197.html#ga020951efa0ce3862bd4faec295501a7f" title="Set the default memory binding policy of the current process or thread to prefer the NUMA node(s) spe...">hwloc_set_membind()</a> and friends only define the current policy of the process, which will be applied to the subsequent calls to malloc() and friends.</li>
104 <li>migration of existing memory ranges, thanks to <a class="el" href="a00197.html#gaf881faefe20701229f07dd7dbd0125ed" title="Bind the already-allocated memory identified by (addr, len) to the NUMA node(s) specified by set.">hwloc_set_area_membind()</a> and friends, which move already-allocated data.</li>
105 </ul>
106 <p>Not all operating systems support all three ways. <a class="el" href="a00199.html#gab8c76173c4a8ce1a9a9366012b1388e6" title="Retrieve the topology support.">hwloc_topology_get_support()</a> may be used to query about the actual memory binding support in the currently used operating system.</p>
107 <p>When the requested binding operation is not available and the <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a> flag was passed, the function returns -1. <code>errno</code> will be set to <code>ENOSYS</code> 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). <code>errno</code> 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).</p>
108 <p>If <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a> 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.</p>
109 <p>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 <a class="el" href="a00197.html#ga04736461780fadcf193af218c0122273" title="Allocate some memory on NUMA memory nodes specified by set.">hwloc_alloc_membind()</a>, which will never change the current memory binding policy.</p>
110 <div class="fragment"><div class="line"><a class="code" href="a00197.html#gab1b77b8408bacaf03c7e8878f7577922">hwloc_alloc_membind_policy</a>(topology, size, set,</div>
111 <div class="line"> <a class="code" href="a00197.html#ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c">HWLOC_MEMBIND_BIND</a>, 0);</div>
112 <div class="ttc" id="aa00197_html_gab1b77b8408bacaf03c7e8878f7577922"><div class="ttname"><a href="a00197.html#gab1b77b8408bacaf03c7e8878f7577922">hwloc_alloc_membind_policy</a></div><div class="ttdeci">static void * hwloc_alloc_membind_policy(hwloc_topology_t topology, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)</div><div class="ttdoc">Allocate some memory on NUMA memory nodes specified by set.</div></div>
113 <div class="ttc" id="aa00197_html_ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c"><div class="ttname"><a href="a00197.html#ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c">HWLOC_MEMBIND_BIND</a></div><div class="ttdeci">@ HWLOC_MEMBIND_BIND</div><div class="ttdoc">Allocate memory on the specified nodes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1403</div></div>
114 </div><!-- fragment --><p>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 <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256" title="Consider the bitmap argument as a nodeset.">HWLOC_MEMBIND_BYNODESET</a> is specified. See <a class="el" href="a00189.html">Object Sets (hwloc_cpuset_t and hwloc_nodeset_t)</a> and <a class="el" href="a00211.html">The bitmap API</a> for a discussion of CPU sets and NUMA memory node sets. It is also possible to convert between CPU set and node set using <a class="el" href="a00209.html#ga185751c1653fedbeb7cc480840f38cde" title="Convert a CPU set into a NUMA node set.">hwloc_cpuset_to_nodeset()</a> or <a class="el" href="a00209.html#gad5ee8691e08a3538ea7633344c00456d" title="Convert a NUMA node set into a CPU set.">hwloc_cpuset_from_nodeset()</a>.</p>
115 <p>Memory binding by CPU set cannot work for CPU-less NUMA memory nodes. Binding by nodeset should therefore be preferred whenever possible.</p>
116 <dl class="section see"><dt>See also</dt><dd>Some example codes are available under doc/examples/ in the source tree.</dd></dl>
117 <dl class="section note"><dt>Note</dt><dd>On some operating systems, memory binding affects the CPU binding; see <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2aad6b9eaf2ee324ca58dc8f58094b9997" title="Avoid any effect on CPU binding.">HWLOC_MEMBIND_NOCPUBIND</a> </dd></dl>
118 <h2 class="groupheader">Enumeration Type Documentation</h2>
119 <a id="gab00475fd98815bf4fb9aaf752030e7d2"></a>
120 <h2 class="memtitle"><span class="permalink"><a href="#gab00475fd98815bf4fb9aaf752030e7d2">&#9670;&nbsp;</a></span>hwloc_membind_flags_t</h2>
121
122 <div class="memitem">
123 <div class="memproto">
124 <table class="memname">
125 <tr>
126 <td class="memname">enum <a class="el" href="a00197.html#gab00475fd98815bf4fb9aaf752030e7d2">hwloc_membind_flags_t</a></td>
127 </tr>
128 </table>
129 </div><div class="memdoc">
130
131 <p>Memory binding flags. </p>
132 <p>These flags can be used to refine the binding policy. All flags can be logically OR'ed together with the exception of <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4" title="Set policy for all threads of the specified (possibly multithreaded) process. This flag is mutually e...">HWLOC_MEMBIND_PROCESS</a> and <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298" title="Set policy for a specific thread of the current process. This flag is mutually exclusive with HWLOC_M...">HWLOC_MEMBIND_THREAD</a>; these two flags are mutually exclusive.</p>
133 <p>Not all systems support all kinds of binding. <a class="el" href="a00199.html#gab8c76173c4a8ce1a9a9366012b1388e6" title="Retrieve the topology support.">hwloc_topology_get_support()</a> may be used to query about the actual memory binding support in the currently used operating system. See the "Detailed Description" section of <a class="el" href="a00197.html">Memory binding</a> for a description of errors that can occur. </p>
134 <table class="fieldtable">
135 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4"></a>HWLOC_MEMBIND_PROCESS&#160;</td><td class="fielddoc"><p>Set policy for all threads of the specified (possibly multithreaded) process. This flag is mutually exclusive with <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298" title="Set policy for a specific thread of the current process. This flag is mutually exclusive with HWLOC_M...">HWLOC_MEMBIND_THREAD</a>. </p>
136 </td></tr>
137 <tr><td class="fieldname"><a id="ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298"></a>HWLOC_MEMBIND_THREAD&#160;</td><td class="fielddoc"><p>Set policy for a specific thread of the current process. This flag is mutually exclusive with <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4" title="Set policy for all threads of the specified (possibly multithreaded) process. This flag is mutually e...">HWLOC_MEMBIND_PROCESS</a>. </p>
138 </td></tr>
139 <tr><td class="fieldname"><a id="ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6"></a>HWLOC_MEMBIND_STRICT&#160;</td><td class="fielddoc"><p>Request strict binding from the OS. The function will fail if the binding can not be guaranteed / completely enforced.</p>
140 <p>This flag has slightly different meanings depending on which function it is used with. </p>
141 </td></tr>
142 <tr><td class="fieldname"><a id="ggab00475fd98815bf4fb9aaf752030e7d2aa6e49e54f52827cb143cc869cfd748af"></a>HWLOC_MEMBIND_MIGRATE&#160;</td><td class="fielddoc"><p>Migrate existing allocated memory. If the memory cannot be migrated and the <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a> flag is passed, an error will be returned. </p>
143 </td></tr>
144 <tr><td class="fieldname"><a id="ggab00475fd98815bf4fb9aaf752030e7d2aad6b9eaf2ee324ca58dc8f58094b9997"></a>HWLOC_MEMBIND_NOCPUBIND&#160;</td><td class="fielddoc"><p>Avoid any effect on CPU binding. </p>
145 <p>On some operating systems, some underlying memory binding functions also bind the application to the corresponding CPU(s). Using this flag will cause hwloc to avoid using OS functions that could potentially affect CPU bindings. Note, however, that using NOCPUBIND may reduce hwloc's overall memory binding support. Specifically: some of hwloc's memory binding functions may fail with errno set to ENOSYS when used with NOCPUBIND. </p>
146 </td></tr>
147 <tr><td class="fieldname"><a id="ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256"></a>HWLOC_MEMBIND_BYNODESET&#160;</td><td class="fielddoc"><p>Consider the bitmap argument as a nodeset. </p>
148 <p>The bitmap argument is considered a nodeset if this flag is given, or a cpuset otherwise by default.</p>
149 <p>Memory binding by CPU set cannot work for CPU-less NUMA memory nodes. Binding by nodeset should therefore be preferred whenever possible. </p>
150 </td></tr>
151 </table>
152
153 </div>
154 </div>
155 <a id="gac9764f79505775d06407b40f5e4661e8"></a>
156 <h2 class="memtitle"><span class="permalink"><a href="#gac9764f79505775d06407b40f5e4661e8">&#9670;&nbsp;</a></span>hwloc_membind_policy_t</h2>
157
158 <div class="memitem">
159 <div class="memproto">
160 <table class="memname">
161 <tr>
162 <td class="memname">enum <a class="el" href="a00197.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a></td>
163 </tr>
164 </table>
165 </div><div class="memdoc">
166
167 <p>Memory binding policy. </p>
168 <p>These constants can be used to choose the binding policy. Only one policy can be used at a time (i.e., the values cannot be OR'ed together).</p>
169 <p>Not all systems support all kinds of binding. <a class="el" href="a00199.html#gab8c76173c4a8ce1a9a9366012b1388e6" title="Retrieve the topology support.">hwloc_topology_get_support()</a> may be used to query about the actual memory binding policy support in the currently used operating system. See the "Detailed Description" section of <a class="el" href="a00197.html">Memory binding</a> for a description of errors that can occur. </p>
170 <table class="fieldtable">
171 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggac9764f79505775d06407b40f5e4661e8a18675bb80ebc1bce5b652e9de8f3998c"></a>HWLOC_MEMBIND_DEFAULT&#160;</td><td class="fielddoc"><p>Reset the memory allocation policy to the system default. Depending on the operating system, this may correspond to <a class="el" href="a00197.html#ggac9764f79505775d06407b40f5e4661e8a979c7aa78dd32780858f30f47a72cca0" title="Allocate each memory page individually on the local NUMA node of the thread that touches it.">HWLOC_MEMBIND_FIRSTTOUCH</a> (Linux, FreeBSD), or <a class="el" href="a00197.html#ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c" title="Allocate memory on the specified nodes.">HWLOC_MEMBIND_BIND</a> (AIX, HP-UX, Solaris, Windows). This policy is never returned by get membind functions. The nodeset argument is ignored. </p>
172 </td></tr>
173 <tr><td class="fieldname"><a id="ggac9764f79505775d06407b40f5e4661e8a979c7aa78dd32780858f30f47a72cca0"></a>HWLOC_MEMBIND_FIRSTTOUCH&#160;</td><td class="fielddoc"><p>Allocate each memory page individually on the local NUMA node of the thread that touches it. </p>
174 <p>The given nodeset should usually be <a class="el" href="a00208.html#ga3fd37303e99ace8b0d0ea03f95f8c514" title="Get topology node set.">hwloc_topology_get_topology_nodeset()</a> so that the touching thread may run and allocate on any node in the system.</p>
175 <p>On AIX, if the nodeset is smaller, pages are allocated locally (if the local node is in the nodeset) or from a random non-local node (otherwise). </p>
176 </td></tr>
177 <tr><td class="fieldname"><a id="ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c"></a>HWLOC_MEMBIND_BIND&#160;</td><td class="fielddoc"><p>Allocate memory on the specified nodes. </p>
178 </td></tr>
179 <tr><td class="fieldname"><a id="ggac9764f79505775d06407b40f5e4661e8ae370075e5af016d42310f87ea5af236b"></a>HWLOC_MEMBIND_INTERLEAVE&#160;</td><td class="fielddoc"><p>Allocate memory on the given nodes in an interleaved / round-robin manner. The precise layout of the memory across multiple NUMA nodes is OS/system specific. Interleaving can be useful when threads distributed across the specified NUMA nodes will all be accessing the whole memory range concurrently, since the interleave will then balance the memory references. </p>
180 </td></tr>
181 <tr><td class="fieldname"><a id="ggac9764f79505775d06407b40f5e4661e8aecdd4164d647708fbb51a00d98dbb138"></a>HWLOC_MEMBIND_NEXTTOUCH&#160;</td><td class="fielddoc"><p>For each page bound with this policy, by next time it is touched (and next time only), it is moved from its current location to the local NUMA node of the thread where the memory reference occurred (if it needs to be moved at all). </p>
182 </td></tr>
183 <tr><td class="fieldname"><a id="ggac9764f79505775d06407b40f5e4661e8a3185bd869b67817fb2bd5164bf360402"></a>HWLOC_MEMBIND_MIXED&#160;</td><td class="fielddoc"><p>Returned by get_membind() functions when multiple threads or parts of a memory area have differing memory binding policies. Also returned when binding is unknown because binding hooks are empty when the topology is loaded from XML without HWLOC_THISSYSTEM=1, etc. </p>
184 </td></tr>
185 </table>
186
187 </div>
188 </div>
18962 <h2 class="groupheader">Function Documentation</h2>
190 <a id="ga972b335a86a7d5e7b34bce2b243c41bc"></a>
191 <h2 class="memtitle"><span class="permalink"><a href="#ga972b335a86a7d5e7b34bce2b243c41bc">&#9670;&nbsp;</a></span>hwloc_alloc()</h2>
192
193 <div class="memitem">
194 <div class="memproto">
195 <table class="memname">
196 <tr>
197 <td class="memname">void* hwloc_alloc </td>
198 <td>(</td>
199 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
63 <a id="ga870e876931c282a1c7aee2f031912ce3"></a>
64 <h2 class="memtitle"><span class="permalink"><a href="#ga870e876931c282a1c7aee2f031912ce3">&#9670;&nbsp;</a></span>hwloc_obj_attr_snprintf()</h2>
65
66 <div class="memitem">
67 <div class="memproto">
68 <table class="memname">
69 <tr>
70 <td class="memname">int hwloc_obj_attr_snprintf </td>
71 <td>(</td>
72 <td class="paramtype">char *restrict&#160;</td>
73 <td class="paramname"><em>string</em>, </td>
74 </tr>
75 <tr>
76 <td class="paramkey"></td>
77 <td></td>
78 <td class="paramtype">size_t&#160;</td>
79 <td class="paramname"><em>size</em>, </td>
80 </tr>
81 <tr>
82 <td class="paramkey"></td>
83 <td></td>
84 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
85 <td class="paramname"><em>obj</em>, </td>
86 </tr>
87 <tr>
88 <td class="paramkey"></td>
89 <td></td>
90 <td class="paramtype">const char *restrict&#160;</td>
91 <td class="paramname"><em>separator</em>, </td>
92 </tr>
93 <tr>
94 <td class="paramkey"></td>
95 <td></td>
96 <td class="paramtype">int&#160;</td>
97 <td class="paramname"><em>verbose</em>&#160;</td>
98 </tr>
99 <tr>
100 <td></td>
101 <td>)</td>
102 <td></td><td></td>
103 </tr>
104 </table>
105 </div><div class="memdoc">
106
107 <p>Stringify the attributes of a given topology object into a human-readable form. </p>
108 <p>Attribute values are separated by <code>separator</code>.</p>
109 <p>Only the major attributes are printed in non-verbose mode.</p>
110 <p>If <code>size</code> is 0, <code>string</code> may safely be <code>NULL</code>.</p>
111 <dl class="section return"><dt>Returns</dt><dd>the number of character that were actually written if not truncating, or that would have been written (not including the ending \0). </dd></dl>
112
113 </div>
114 </div>
115 <a id="gadb8765c260edea80c52cd06a76639ba4"></a>
116 <h2 class="memtitle"><span class="permalink"><a href="#gadb8765c260edea80c52cd06a76639ba4">&#9670;&nbsp;</a></span>hwloc_obj_type_snprintf()</h2>
117
118 <div class="memitem">
119 <div class="memproto">
120 <table class="memname">
121 <tr>
122 <td class="memname">int hwloc_obj_type_snprintf </td>
123 <td>(</td>
124 <td class="paramtype">char *restrict&#160;</td>
125 <td class="paramname"><em>string</em>, </td>
126 </tr>
127 <tr>
128 <td class="paramkey"></td>
129 <td></td>
130 <td class="paramtype">size_t&#160;</td>
131 <td class="paramname"><em>size</em>, </td>
132 </tr>
133 <tr>
134 <td class="paramkey"></td>
135 <td></td>
136 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
137 <td class="paramname"><em>obj</em>, </td>
138 </tr>
139 <tr>
140 <td class="paramkey"></td>
141 <td></td>
142 <td class="paramtype">int&#160;</td>
143 <td class="paramname"><em>verbose</em>&#160;</td>
144 </tr>
145 <tr>
146 <td></td>
147 <td>)</td>
148 <td></td><td></td>
149 </tr>
150 </table>
151 </div><div class="memdoc">
152
153 <p>Stringify the type of a given topology object into a human-readable form. </p>
154 <p>Contrary to <a class="el" href="a00197.html#ga5ca0bf94bbbb080d0eff17a57bd90422" title="Return a constant stringified object type.">hwloc_obj_type_string()</a>, this function includes object-specific attributes (such as the Group depth, the Bridge type, or OS device type) in the output, and it requires the caller to provide the output buffer.</p>
155 <p>The output is guaranteed to be the same for all objects of a same topology level.</p>
156 <p>If <code>verbose</code> is 1, longer type names are used, e.g. L1Cache instead of L1.</p>
157 <p>The output string may be parsed back by <a class="el" href="a00197.html#ga510f21b066fba2dab12b8c9b173b1dfd" title="Return an object type and attributes from a type string.">hwloc_type_sscanf()</a>.</p>
158 <p>If <code>size</code> is 0, <code>string</code> may safely be <code>NULL</code>.</p>
159 <dl class="section return"><dt>Returns</dt><dd>the number of character that were actually written if not truncating, or that would have been written (not including the ending \0). </dd></dl>
160
161 </div>
162 </div>
163 <a id="ga5ca0bf94bbbb080d0eff17a57bd90422"></a>
164 <h2 class="memtitle"><span class="permalink"><a href="#ga5ca0bf94bbbb080d0eff17a57bd90422">&#9670;&nbsp;</a></span>hwloc_obj_type_string()</h2>
165
166 <div class="memitem">
167 <div class="memproto">
168 <table class="memname">
169 <tr>
170 <td class="memname">const char* hwloc_obj_type_string </td>
171 <td>(</td>
172 <td class="paramtype"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
173 <td class="paramname"><em>type</em></td><td>)</td>
174 <td></td>
175 </tr>
176 </table>
177 </div><div class="memdoc">
178
179 <p>Return a constant stringified object type. </p>
180 <p>This function is the basic way to convert a generic type into a string. The output string may be parsed back by <a class="el" href="a00197.html#ga510f21b066fba2dab12b8c9b173b1dfd" title="Return an object type and attributes from a type string.">hwloc_type_sscanf()</a>.</p>
181 <p><a class="el" href="a00197.html#gadb8765c260edea80c52cd06a76639ba4" title="Stringify the type of a given topology object into a human-readable form.">hwloc_obj_type_snprintf()</a> may return a more precise output for a specific object, but it requires the caller to provide the output buffer. </p>
182
183 </div>
184 </div>
185 <a id="ga510f21b066fba2dab12b8c9b173b1dfd"></a>
186 <h2 class="memtitle"><span class="permalink"><a href="#ga510f21b066fba2dab12b8c9b173b1dfd">&#9670;&nbsp;</a></span>hwloc_type_sscanf()</h2>
187
188 <div class="memitem">
189 <div class="memproto">
190 <table class="memname">
191 <tr>
192 <td class="memname">int hwloc_type_sscanf </td>
193 <td>(</td>
194 <td class="paramtype">const char *&#160;</td>
195 <td class="paramname"><em>string</em>, </td>
196 </tr>
197 <tr>
198 <td class="paramkey"></td>
199 <td></td>
200 <td class="paramtype"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> *&#160;</td>
201 <td class="paramname"><em>typep</em>, </td>
202 </tr>
203 <tr>
204 <td class="paramkey"></td>
205 <td></td>
206 <td class="paramtype">union <a class="el" href="a00254.html">hwloc_obj_attr_u</a> *&#160;</td>
207 <td class="paramname"><em>attrp</em>, </td>
208 </tr>
209 <tr>
210 <td class="paramkey"></td>
211 <td></td>
212 <td class="paramtype">size_t&#160;</td>
213 <td class="paramname"><em>attrsize</em>&#160;</td>
214 </tr>
215 <tr>
216 <td></td>
217 <td>)</td>
218 <td></td><td></td>
219 </tr>
220 </table>
221 </div><div class="memdoc">
222
223 <p>Return an object type and attributes from a type string. </p>
224 <p>Convert strings such as "Package" or "L1iCache" into the corresponding types. Matching is case-insensitive, and only the first letters are actually required to match.</p>
225 <p>The matched object type is set in <code>typep</code> (which cannot be <code>NULL</code>).</p>
226 <p>Type-specific attributes, for instance Cache type, Cache depth, Group depth, Bridge type or OS Device type may be returned in <code>attrp</code>. Attributes that are not specified in the string (for instance "Group" without a depth, or "L2Cache" without a cache type) are set to -1.</p>
227 <p><code>attrp</code> is only filled if not <code>NULL</code> and if its size specified in <code>attrsize</code> is large enough. It should be at least as large as union <a class="el" href="a00254.html" title="Object type-specific Attributes.">hwloc_obj_attr_u</a>.</p>
228 <dl class="section return"><dt>Returns</dt><dd>0 if a type was correctly identified, otherwise -1.</dd></dl>
229 <dl class="section note"><dt>Note</dt><dd>This function is guaranteed to match any string returned by <a class="el" href="a00197.html#ga5ca0bf94bbbb080d0eff17a57bd90422" title="Return a constant stringified object type.">hwloc_obj_type_string()</a> or <a class="el" href="a00197.html#gadb8765c260edea80c52cd06a76639ba4" title="Stringify the type of a given topology object into a human-readable form.">hwloc_obj_type_snprintf()</a>.</dd>
230 <dd>
231 This is an extended version of the now deprecated hwloc_obj_type_sscanf(). </dd></dl>
232
233 </div>
234 </div>
235 <a id="ga52c63cd7203e55b804c1314affc9bd12"></a>
236 <h2 class="memtitle"><span class="permalink"><a href="#ga52c63cd7203e55b804c1314affc9bd12">&#9670;&nbsp;</a></span>hwloc_type_sscanf_as_depth()</h2>
237
238 <div class="memitem">
239 <div class="memproto">
240 <table class="memname">
241 <tr>
242 <td class="memname">int hwloc_type_sscanf_as_depth </td>
243 <td>(</td>
244 <td class="paramtype">const char *&#160;</td>
245 <td class="paramname"><em>string</em>, </td>
246 </tr>
247 <tr>
248 <td class="paramkey"></td>
249 <td></td>
250 <td class="paramtype"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> *&#160;</td>
251 <td class="paramname"><em>typep</em>, </td>
252 </tr>
253 <tr>
254 <td class="paramkey"></td>
255 <td></td>
256 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
200257 <td class="paramname"><em>topology</em>, </td>
201258 </tr>
202259 <tr>
203260 <td class="paramkey"></td>
204261 <td></td>
205 <td class="paramtype">size_t&#160;</td>
206 <td class="paramname"><em>len</em>&#160;</td>
207 </tr>
208 <tr>
209 <td></td>
210 <td>)</td>
211 <td></td><td></td>
212 </tr>
213 </table>
214 </div><div class="memdoc">
215
216 <p>Allocate some memory. </p>
217 <p>This is equivalent to malloc(), except that it tries to allocate page-aligned memory from the OS.</p>
218 <dl class="section note"><dt>Note</dt><dd>The allocated memory should be freed with <a class="el" href="a00197.html#ga32dbd4f54e9e4a7179f2dde37ffe6ad7" title="Free memory that was previously allocated by hwloc_alloc() or hwloc_alloc_membind().">hwloc_free()</a>. </dd></dl>
219
220 </div>
221 </div>
222 <a id="ga04736461780fadcf193af218c0122273"></a>
223 <h2 class="memtitle"><span class="permalink"><a href="#ga04736461780fadcf193af218c0122273">&#9670;&nbsp;</a></span>hwloc_alloc_membind()</h2>
224
225 <div class="memitem">
226 <div class="memproto">
227 <table class="memname">
228 <tr>
229 <td class="memname">void* hwloc_alloc_membind </td>
230 <td>(</td>
231 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
232 <td class="paramname"><em>topology</em>, </td>
233 </tr>
234 <tr>
235 <td class="paramkey"></td>
236 <td></td>
237 <td class="paramtype">size_t&#160;</td>
238 <td class="paramname"><em>len</em>, </td>
239 </tr>
240 <tr>
241 <td class="paramkey"></td>
242 <td></td>
243 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
244 <td class="paramname"><em>set</em>, </td>
245 </tr>
246 <tr>
247 <td class="paramkey"></td>
248 <td></td>
249 <td class="paramtype"><a class="el" href="a00197.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a>&#160;</td>
250 <td class="paramname"><em>policy</em>, </td>
251 </tr>
252 <tr>
253 <td class="paramkey"></td>
254 <td></td>
255 <td class="paramtype">int&#160;</td>
256 <td class="paramname"><em>flags</em>&#160;</td>
257 </tr>
258 <tr>
259 <td></td>
260 <td>)</td>
261 <td></td><td></td>
262 </tr>
263 </table>
264 </div><div class="memdoc">
265
266 <p>Allocate some memory on NUMA memory nodes specified by <code>set</code>. </p>
267 <dl class="section return"><dt>Returns</dt><dd>NULL with errno set to ENOSYS if the action is not supported and <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a> is given </dd>
262 <td class="paramtype">int *&#160;</td>
263 <td class="paramname"><em>depthp</em>&#160;</td>
264 </tr>
265 <tr>
266 <td></td>
267 <td>)</td>
268 <td></td><td></td>
269 </tr>
270 </table>
271 </div><div class="memdoc">
272
273 <p>Return an object type and its level depth from a type string. </p>
274 <p>Convert strings such as "Package" or "L1iCache" into the corresponding types and return in <code>depthp</code> the depth of the corresponding level in the topology <code>topology</code>.</p>
275 <p>If no object of this type is present on the underlying architecture, <a class="el" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad" title="No object of given type exists in the topology.">HWLOC_TYPE_DEPTH_UNKNOWN</a> is returned.</p>
276 <p>If multiple such levels exist (for instance if giving Group without any depth), the function may return <a class="el" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c" title="Objects of given type exist at different depth in the topology (only for Groups).">HWLOC_TYPE_DEPTH_MULTIPLE</a> instead.</p>
277 <p>The matched object type is set in <code>typep</code> if <code>typep</code> is non <code>NULL</code>.</p>
278 <dl class="section note"><dt>Note</dt><dd>This function is similar to <a class="el" href="a00197.html#ga510f21b066fba2dab12b8c9b173b1dfd" title="Return an object type and attributes from a type string.">hwloc_type_sscanf()</a> followed by <a class="el" href="a00196.html#ga8bec782e21be313750da70cf7428b374" title="Returns the depth of objects of type type.">hwloc_get_type_depth()</a> but it also automatically disambiguates multiple group levels etc.</dd>
268279 <dd>
269 NULL with errno set to EXDEV if the binding cannot be enforced and <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a> is given </dd>
270 <dd>
271 NULL with errno set to ENOMEM if the memory allocation failed even before trying to bind.</dd></dl>
272 <p>If <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256" title="Consider the bitmap argument as a nodeset.">HWLOC_MEMBIND_BYNODESET</a> is specified, set is considered a nodeset. Otherwise it's a cpuset.</p>
273 <dl class="section note"><dt>Note</dt><dd>The allocated memory should be freed with <a class="el" href="a00197.html#ga32dbd4f54e9e4a7179f2dde37ffe6ad7" title="Free memory that was previously allocated by hwloc_alloc() or hwloc_alloc_membind().">hwloc_free()</a>. </dd></dl>
274
275 </div>
276 </div>
277 <a id="gab1b77b8408bacaf03c7e8878f7577922"></a>
278 <h2 class="memtitle"><span class="permalink"><a href="#gab1b77b8408bacaf03c7e8878f7577922">&#9670;&nbsp;</a></span>hwloc_alloc_membind_policy()</h2>
279
280 <div class="memitem">
281 <div class="memproto">
282 <table class="mlabels">
283 <tr>
284 <td class="mlabels-left">
285 <table class="memname">
286 <tr>
287 <td class="memname">static void* hwloc_alloc_membind_policy </td>
288 <td>(</td>
289 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
290 <td class="paramname"><em>topology</em>, </td>
291 </tr>
292 <tr>
293 <td class="paramkey"></td>
294 <td></td>
295 <td class="paramtype">size_t&#160;</td>
296 <td class="paramname"><em>len</em>, </td>
297 </tr>
298 <tr>
299 <td class="paramkey"></td>
300 <td></td>
301 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
302 <td class="paramname"><em>set</em>, </td>
303 </tr>
304 <tr>
305 <td class="paramkey"></td>
306 <td></td>
307 <td class="paramtype"><a class="el" href="a00197.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a>&#160;</td>
308 <td class="paramname"><em>policy</em>, </td>
309 </tr>
310 <tr>
311 <td class="paramkey"></td>
312 <td></td>
313 <td class="paramtype">int&#160;</td>
314 <td class="paramname"><em>flags</em>&#160;</td>
315 </tr>
316 <tr>
317 <td></td>
318 <td>)</td>
319 <td></td><td></td>
320 </tr>
321 </table>
322 </td>
323 <td class="mlabels-right">
324 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
325 </tr>
326 </table>
327 </div><div class="memdoc">
328
329 <p>Allocate some memory on NUMA memory nodes specified by <code>set</code>. </p>
330 <p>This is similar to hwloc_alloc_membind_nodeset() except that it is allowed to change the current memory binding policy, thus providing more binding support, at the expense of changing the current state.</p>
331 <p>If <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256" title="Consider the bitmap argument as a nodeset.">HWLOC_MEMBIND_BYNODESET</a> is specified, set is considered a nodeset. Otherwise it's a cpuset. </p>
332
333 </div>
334 </div>
335 <a id="ga32dbd4f54e9e4a7179f2dde37ffe6ad7"></a>
336 <h2 class="memtitle"><span class="permalink"><a href="#ga32dbd4f54e9e4a7179f2dde37ffe6ad7">&#9670;&nbsp;</a></span>hwloc_free()</h2>
337
338 <div class="memitem">
339 <div class="memproto">
340 <table class="memname">
341 <tr>
342 <td class="memname">int hwloc_free </td>
343 <td>(</td>
344 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
345 <td class="paramname"><em>topology</em>, </td>
346 </tr>
347 <tr>
348 <td class="paramkey"></td>
349 <td></td>
350 <td class="paramtype">void *&#160;</td>
351 <td class="paramname"><em>addr</em>, </td>
352 </tr>
353 <tr>
354 <td class="paramkey"></td>
355 <td></td>
356 <td class="paramtype">size_t&#160;</td>
357 <td class="paramname"><em>len</em>&#160;</td>
358 </tr>
359 <tr>
360 <td></td>
361 <td>)</td>
362 <td></td><td></td>
363 </tr>
364 </table>
365 </div><div class="memdoc">
366
367 <p>Free memory that was previously allocated by <a class="el" href="a00197.html#ga972b335a86a7d5e7b34bce2b243c41bc" title="Allocate some memory.">hwloc_alloc()</a> or <a class="el" href="a00197.html#ga04736461780fadcf193af218c0122273" title="Allocate some memory on NUMA memory nodes specified by set.">hwloc_alloc_membind()</a>. </p>
368
369 </div>
370 </div>
371 <a id="gaa87e0a6946ff145914fdf0b1c60567f8"></a>
372 <h2 class="memtitle"><span class="permalink"><a href="#gaa87e0a6946ff145914fdf0b1c60567f8">&#9670;&nbsp;</a></span>hwloc_get_area_membind()</h2>
373
374 <div class="memitem">
375 <div class="memproto">
376 <table class="memname">
377 <tr>
378 <td class="memname">int hwloc_get_area_membind </td>
379 <td>(</td>
380 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
381 <td class="paramname"><em>topology</em>, </td>
382 </tr>
383 <tr>
384 <td class="paramkey"></td>
385 <td></td>
386 <td class="paramtype">const void *&#160;</td>
387 <td class="paramname"><em>addr</em>, </td>
388 </tr>
389 <tr>
390 <td class="paramkey"></td>
391 <td></td>
392 <td class="paramtype">size_t&#160;</td>
393 <td class="paramname"><em>len</em>, </td>
394 </tr>
395 <tr>
396 <td class="paramkey"></td>
397 <td></td>
398 <td class="paramtype"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
399 <td class="paramname"><em>set</em>, </td>
400 </tr>
401 <tr>
402 <td class="paramkey"></td>
403 <td></td>
404 <td class="paramtype"><a class="el" href="a00197.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> *&#160;</td>
405 <td class="paramname"><em>policy</em>, </td>
406 </tr>
407 <tr>
408 <td class="paramkey"></td>
409 <td></td>
410 <td class="paramtype">int&#160;</td>
411 <td class="paramname"><em>flags</em>&#160;</td>
412 </tr>
413 <tr>
414 <td></td>
415 <td>)</td>
416 <td></td><td></td>
417 </tr>
418 </table>
419 </div><div class="memdoc">
420
421 <p>Query the CPUs near the physical NUMA node(s) and binding policy of the memory identified by (<code>addr</code>, <code>len</code> ). </p>
422 <p>This function has two output parameters: <code>set</code> and <code>policy</code>. The values returned in these parameters depend on both the <code>flags</code> passed in and the memory binding policies and nodesets of the pages in the address range.</p>
423 <p>If <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a> is specified, the target pages are first checked to see if they all have the same memory binding policy and nodeset. If they do not, -1 is returned and errno is set to EXDEV. If they are identical across all pages, the set and policy are returned in <code>set</code> and <code>policy</code>, respectively.</p>
424 <p>If <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a> is not specified, the union of all NUMA node(s) containing pages in the address range is calculated. If all pages in the target have the same policy, it is returned in <code>policy</code>. Otherwise, <code>policy</code> is set to <a class="el" href="a00197.html#ggac9764f79505775d06407b40f5e4661e8a3185bd869b67817fb2bd5164bf360402" title="Returned by get_membind() functions when multiple threads or parts of a memory area have differing me...">HWLOC_MEMBIND_MIXED</a>.</p>
425 <p>If <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256" title="Consider the bitmap argument as a nodeset.">HWLOC_MEMBIND_BYNODESET</a> is specified, set is considered a nodeset. Otherwise it's a cpuset.</p>
426 <p>If any other flags are specified, -1 is returned and errno is set to EINVAL.</p>
427 <p>If <code>len</code> is 0, -1 is returned and errno is set to EINVAL. </p>
428
429 </div>
430 </div>
431 <a id="ga537c7508a4e2d1db05673ec5be6e805c"></a>
432 <h2 class="memtitle"><span class="permalink"><a href="#ga537c7508a4e2d1db05673ec5be6e805c">&#9670;&nbsp;</a></span>hwloc_get_area_memlocation()</h2>
433
434 <div class="memitem">
435 <div class="memproto">
436 <table class="memname">
437 <tr>
438 <td class="memname">int hwloc_get_area_memlocation </td>
439 <td>(</td>
440 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
441 <td class="paramname"><em>topology</em>, </td>
442 </tr>
443 <tr>
444 <td class="paramkey"></td>
445 <td></td>
446 <td class="paramtype">const void *&#160;</td>
447 <td class="paramname"><em>addr</em>, </td>
448 </tr>
449 <tr>
450 <td class="paramkey"></td>
451 <td></td>
452 <td class="paramtype">size_t&#160;</td>
453 <td class="paramname"><em>len</em>, </td>
454 </tr>
455 <tr>
456 <td class="paramkey"></td>
457 <td></td>
458 <td class="paramtype"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
459 <td class="paramname"><em>set</em>, </td>
460 </tr>
461 <tr>
462 <td class="paramkey"></td>
463 <td></td>
464 <td class="paramtype">int&#160;</td>
465 <td class="paramname"><em>flags</em>&#160;</td>
466 </tr>
467 <tr>
468 <td></td>
469 <td>)</td>
470 <td></td><td></td>
471 </tr>
472 </table>
473 </div><div class="memdoc">
474
475 <p>Get the NUMA nodes where memory identified by (<code>addr</code>, <code>len</code> ) is physically allocated. </p>
476 <p>Fills <code>set</code> according to the NUMA nodes where the memory area pages are physically allocated. If no page is actually allocated yet, <code>set</code> may be empty.</p>
477 <p>If pages spread to multiple nodes, it is not specified whether they spread equitably, or whether most of them are on a single node, etc.</p>
478 <p>The operating system may move memory pages from one processor to another at any time according to their binding, so this function may return something that is already outdated.</p>
479 <p>If <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256" title="Consider the bitmap argument as a nodeset.">HWLOC_MEMBIND_BYNODESET</a> is specified in <code>flags</code>, set is considered a nodeset. Otherwise it's a cpuset.</p>
480 <p>If <code>len</code> is 0, <code>set</code> is emptied. </p>
481
482 </div>
483 </div>
484 <a id="gae21f0a1a884929c784bebf070252aa56"></a>
485 <h2 class="memtitle"><span class="permalink"><a href="#gae21f0a1a884929c784bebf070252aa56">&#9670;&nbsp;</a></span>hwloc_get_membind()</h2>
486
487 <div class="memitem">
488 <div class="memproto">
489 <table class="memname">
490 <tr>
491 <td class="memname">int hwloc_get_membind </td>
492 <td>(</td>
493 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
494 <td class="paramname"><em>topology</em>, </td>
495 </tr>
496 <tr>
497 <td class="paramkey"></td>
498 <td></td>
499 <td class="paramtype"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
500 <td class="paramname"><em>set</em>, </td>
501 </tr>
502 <tr>
503 <td class="paramkey"></td>
504 <td></td>
505 <td class="paramtype"><a class="el" href="a00197.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> *&#160;</td>
506 <td class="paramname"><em>policy</em>, </td>
507 </tr>
508 <tr>
509 <td class="paramkey"></td>
510 <td></td>
511 <td class="paramtype">int&#160;</td>
512 <td class="paramname"><em>flags</em>&#160;</td>
513 </tr>
514 <tr>
515 <td></td>
516 <td>)</td>
517 <td></td><td></td>
518 </tr>
519 </table>
520 </div><div class="memdoc">
521
522 <p>Query the default memory binding policy and physical locality of the current process or thread. </p>
523 <p>This function has two output parameters: <code>set</code> and <code>policy</code>. The values returned in these parameters depend on both the <code>flags</code> passed in and the current memory binding policies and nodesets in the queried target.</p>
524 <p>Passing the <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4" title="Set policy for all threads of the specified (possibly multithreaded) process. This flag is mutually e...">HWLOC_MEMBIND_PROCESS</a> flag specifies that the query target is the current policies and nodesets for all the threads in the current process. Passing <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298" title="Set policy for a specific thread of the current process. This flag is mutually exclusive with HWLOC_M...">HWLOC_MEMBIND_THREAD</a> specifies that the query target is the current policy and nodeset for only the thread invoking this function.</p>
525 <p>If neither of these flags are passed (which is the most portable method), the process is assumed to be single threaded. This allows hwloc to use either process-based OS functions or thread-based OS functions, depending on which are available.</p>
526 <p><a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a> is only meaningful when <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4" title="Set policy for all threads of the specified (possibly multithreaded) process. This flag is mutually e...">HWLOC_MEMBIND_PROCESS</a> is also specified. In this case, hwloc will check the default memory policies and nodesets for all threads in the process. If they are not identical, -1 is returned and errno is set to EXDEV. If they are identical, the values are returned in <code>set</code> and <code>policy</code>.</p>
527 <p>Otherwise, if <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4" title="Set policy for all threads of the specified (possibly multithreaded) process. This flag is mutually e...">HWLOC_MEMBIND_PROCESS</a> is specified (and <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a> is <em>not</em> specified), the default set from each thread is logically OR'ed together. If all threads' default policies are the same, <code>policy</code> is set to that policy. If they are different, <code>policy</code> is set to <a class="el" href="a00197.html#ggac9764f79505775d06407b40f5e4661e8a3185bd869b67817fb2bd5164bf360402" title="Returned by get_membind() functions when multiple threads or parts of a memory area have differing me...">HWLOC_MEMBIND_MIXED</a>.</p>
528 <p>In the <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298" title="Set policy for a specific thread of the current process. This flag is mutually exclusive with HWLOC_M...">HWLOC_MEMBIND_THREAD</a> case (or when neither <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4" title="Set policy for all threads of the specified (possibly multithreaded) process. This flag is mutually e...">HWLOC_MEMBIND_PROCESS</a> or <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298" title="Set policy for a specific thread of the current process. This flag is mutually exclusive with HWLOC_M...">HWLOC_MEMBIND_THREAD</a> is specified), there is only one set and policy; they are returned in <code>set</code> and <code>policy</code>, respectively.</p>
529 <p>If <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256" title="Consider the bitmap argument as a nodeset.">HWLOC_MEMBIND_BYNODESET</a> is specified, set is considered a nodeset. Otherwise it's a cpuset.</p>
530 <p>If any other flags are specified, -1 is returned and errno is set to EINVAL. </p>
531
532 </div>
533 </div>
534 <a id="ga1730ceb18ec6ee3b7bd3d0db81f07dc8"></a>
535 <h2 class="memtitle"><span class="permalink"><a href="#ga1730ceb18ec6ee3b7bd3d0db81f07dc8">&#9670;&nbsp;</a></span>hwloc_get_proc_membind()</h2>
536
537 <div class="memitem">
538 <div class="memproto">
539 <table class="memname">
540 <tr>
541 <td class="memname">int hwloc_get_proc_membind </td>
542 <td>(</td>
543 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
544 <td class="paramname"><em>topology</em>, </td>
545 </tr>
546 <tr>
547 <td class="paramkey"></td>
548 <td></td>
549 <td class="paramtype">hwloc_pid_t&#160;</td>
550 <td class="paramname"><em>pid</em>, </td>
551 </tr>
552 <tr>
553 <td class="paramkey"></td>
554 <td></td>
555 <td class="paramtype"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
556 <td class="paramname"><em>set</em>, </td>
557 </tr>
558 <tr>
559 <td class="paramkey"></td>
560 <td></td>
561 <td class="paramtype"><a class="el" href="a00197.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> *&#160;</td>
562 <td class="paramname"><em>policy</em>, </td>
563 </tr>
564 <tr>
565 <td class="paramkey"></td>
566 <td></td>
567 <td class="paramtype">int&#160;</td>
568 <td class="paramname"><em>flags</em>&#160;</td>
569 </tr>
570 <tr>
571 <td></td>
572 <td>)</td>
573 <td></td><td></td>
574 </tr>
575 </table>
576 </div><div class="memdoc">
577
578 <p>Query the default memory binding policy and physical locality of the specified process. </p>
579 <p>This function has two output parameters: <code>set</code> and <code>policy</code>. The values returned in these parameters depend on both the <code>flags</code> passed in and the current memory binding policies and nodesets in the queried target.</p>
580 <p>Passing the <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4" title="Set policy for all threads of the specified (possibly multithreaded) process. This flag is mutually e...">HWLOC_MEMBIND_PROCESS</a> flag specifies that the query target is the current policies and nodesets for all the threads in the specified process. If <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4" title="Set policy for all threads of the specified (possibly multithreaded) process. This flag is mutually e...">HWLOC_MEMBIND_PROCESS</a> is not specified (which is the most portable method), the process is assumed to be single threaded. This allows hwloc to use either process-based OS functions or thread-based OS functions, depending on which are available.</p>
581 <p>Note that it does not make sense to pass <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298" title="Set policy for a specific thread of the current process. This flag is mutually exclusive with HWLOC_M...">HWLOC_MEMBIND_THREAD</a> to this function.</p>
582 <p>If <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a> is specified, hwloc will check the default memory policies and nodesets for all threads in the specified process. If they are not identical, -1 is returned and errno is set to EXDEV. If they are identical, the values are returned in <code>set</code> and <code>policy</code>.</p>
583 <p>Otherwise, <code>set</code> is set to the logical OR of all threads' default set. If all threads' default policies are the same, <code>policy</code> is set to that policy. If they are different, <code>policy</code> is set to <a class="el" href="a00197.html#ggac9764f79505775d06407b40f5e4661e8a3185bd869b67817fb2bd5164bf360402" title="Returned by get_membind() functions when multiple threads or parts of a memory area have differing me...">HWLOC_MEMBIND_MIXED</a>.</p>
584 <p>If <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256" title="Consider the bitmap argument as a nodeset.">HWLOC_MEMBIND_BYNODESET</a> is specified, set is considered a nodeset. Otherwise it's a cpuset.</p>
585 <p>If any other flags are specified, -1 is returned and errno is set to EINVAL.</p>
586 <dl class="section note"><dt>Note</dt><dd><code>hwloc_pid_t</code> is <code>pid_t</code> on Unix platforms, and <code>HANDLE</code> on native Windows platforms. </dd></dl>
587
588 </div>
589 </div>
590 <a id="gaf881faefe20701229f07dd7dbd0125ed"></a>
591 <h2 class="memtitle"><span class="permalink"><a href="#gaf881faefe20701229f07dd7dbd0125ed">&#9670;&nbsp;</a></span>hwloc_set_area_membind()</h2>
592
593 <div class="memitem">
594 <div class="memproto">
595 <table class="memname">
596 <tr>
597 <td class="memname">int hwloc_set_area_membind </td>
598 <td>(</td>
599 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
600 <td class="paramname"><em>topology</em>, </td>
601 </tr>
602 <tr>
603 <td class="paramkey"></td>
604 <td></td>
605 <td class="paramtype">const void *&#160;</td>
606 <td class="paramname"><em>addr</em>, </td>
607 </tr>
608 <tr>
609 <td class="paramkey"></td>
610 <td></td>
611 <td class="paramtype">size_t&#160;</td>
612 <td class="paramname"><em>len</em>, </td>
613 </tr>
614 <tr>
615 <td class="paramkey"></td>
616 <td></td>
617 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
618 <td class="paramname"><em>set</em>, </td>
619 </tr>
620 <tr>
621 <td class="paramkey"></td>
622 <td></td>
623 <td class="paramtype"><a class="el" href="a00197.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a>&#160;</td>
624 <td class="paramname"><em>policy</em>, </td>
625 </tr>
626 <tr>
627 <td class="paramkey"></td>
628 <td></td>
629 <td class="paramtype">int&#160;</td>
630 <td class="paramname"><em>flags</em>&#160;</td>
631 </tr>
632 <tr>
633 <td></td>
634 <td>)</td>
635 <td></td><td></td>
636 </tr>
637 </table>
638 </div><div class="memdoc">
639
640 <p>Bind the already-allocated memory identified by (addr, len) to the NUMA node(s) specified by <code>set</code>. </p>
641 <p>If <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256" title="Consider the bitmap argument as a nodeset.">HWLOC_MEMBIND_BYNODESET</a> is specified, set is considered a nodeset. Otherwise it's a cpuset.</p>
642 <dl class="section return"><dt>Returns</dt><dd>0 if <code>len</code> is 0. </dd>
643 <dd>
644 -1 with errno set to ENOSYS if the action is not supported </dd>
645 <dd>
646 -1 with errno set to EXDEV if the binding cannot be enforced </dd></dl>
647
648 </div>
649 </div>
650 <a id="ga020951efa0ce3862bd4faec295501a7f"></a>
651 <h2 class="memtitle"><span class="permalink"><a href="#ga020951efa0ce3862bd4faec295501a7f">&#9670;&nbsp;</a></span>hwloc_set_membind()</h2>
652
653 <div class="memitem">
654 <div class="memproto">
655 <table class="memname">
656 <tr>
657 <td class="memname">int hwloc_set_membind </td>
658 <td>(</td>
659 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
660 <td class="paramname"><em>topology</em>, </td>
661 </tr>
662 <tr>
663 <td class="paramkey"></td>
664 <td></td>
665 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
666 <td class="paramname"><em>set</em>, </td>
667 </tr>
668 <tr>
669 <td class="paramkey"></td>
670 <td></td>
671 <td class="paramtype"><a class="el" href="a00197.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a>&#160;</td>
672 <td class="paramname"><em>policy</em>, </td>
673 </tr>
674 <tr>
675 <td class="paramkey"></td>
676 <td></td>
677 <td class="paramtype">int&#160;</td>
678 <td class="paramname"><em>flags</em>&#160;</td>
679 </tr>
680 <tr>
681 <td></td>
682 <td>)</td>
683 <td></td><td></td>
684 </tr>
685 </table>
686 </div><div class="memdoc">
687
688 <p>Set the default memory binding policy of the current process or thread to prefer the NUMA node(s) specified by <code>set</code>. </p>
689 <p>If neither <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4" title="Set policy for all threads of the specified (possibly multithreaded) process. This flag is mutually e...">HWLOC_MEMBIND_PROCESS</a> nor <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298" title="Set policy for a specific thread of the current process. This flag is mutually exclusive with HWLOC_M...">HWLOC_MEMBIND_THREAD</a> is specified, the current process is assumed to be single-threaded. This is the most portable form as it permits hwloc to use either process-based OS functions or thread-based OS functions, depending on which are available.</p>
690 <p>If <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256" title="Consider the bitmap argument as a nodeset.">HWLOC_MEMBIND_BYNODESET</a> is specified, set is considered a nodeset. Otherwise it's a cpuset.</p>
691 <dl class="section return"><dt>Returns</dt><dd>-1 with errno set to ENOSYS if the action is not supported </dd>
692 <dd>
693 -1 with errno set to EXDEV if the binding cannot be enforced </dd></dl>
694
695 </div>
696 </div>
697 <a id="gabc91ff16f7e41047924e3a4ae6d9da7e"></a>
698 <h2 class="memtitle"><span class="permalink"><a href="#gabc91ff16f7e41047924e3a4ae6d9da7e">&#9670;&nbsp;</a></span>hwloc_set_proc_membind()</h2>
699
700 <div class="memitem">
701 <div class="memproto">
702 <table class="memname">
703 <tr>
704 <td class="memname">int hwloc_set_proc_membind </td>
705 <td>(</td>
706 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
707 <td class="paramname"><em>topology</em>, </td>
708 </tr>
709 <tr>
710 <td class="paramkey"></td>
711 <td></td>
712 <td class="paramtype">hwloc_pid_t&#160;</td>
713 <td class="paramname"><em>pid</em>, </td>
714 </tr>
715 <tr>
716 <td class="paramkey"></td>
717 <td></td>
718 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
719 <td class="paramname"><em>set</em>, </td>
720 </tr>
721 <tr>
722 <td class="paramkey"></td>
723 <td></td>
724 <td class="paramtype"><a class="el" href="a00197.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a>&#160;</td>
725 <td class="paramname"><em>policy</em>, </td>
726 </tr>
727 <tr>
728 <td class="paramkey"></td>
729 <td></td>
730 <td class="paramtype">int&#160;</td>
731 <td class="paramname"><em>flags</em>&#160;</td>
732 </tr>
733 <tr>
734 <td></td>
735 <td>)</td>
736 <td></td><td></td>
737 </tr>
738 </table>
739 </div><div class="memdoc">
740
741 <p>Set the default memory binding policy of the specified process to prefer the NUMA node(s) specified by <code>set</code>. </p>
742 <p>If <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256" title="Consider the bitmap argument as a nodeset.">HWLOC_MEMBIND_BYNODESET</a> is specified, set is considered a nodeset. Otherwise it's a cpuset.</p>
743 <dl class="section return"><dt>Returns</dt><dd>-1 with errno set to ENOSYS if the action is not supported </dd>
744 <dd>
745 -1 with errno set to EXDEV if the binding cannot be enforced</dd></dl>
746 <dl class="section note"><dt>Note</dt><dd><code>hwloc_pid_t</code> is <code>pid_t</code> on Unix platforms, and <code>HANDLE</code> on native Windows platforms. </dd></dl>
280 This function is guaranteed to match any string returned by <a class="el" href="a00197.html#ga5ca0bf94bbbb080d0eff17a57bd90422" title="Return a constant stringified object type.">hwloc_obj_type_string()</a> or <a class="el" href="a00197.html#gadb8765c260edea80c52cd06a76639ba4" title="Stringify the type of a given topology object into a human-readable form.">hwloc_obj_type_snprintf()</a>. </dd></dl>
747281
748282 </div>
749283 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Changing the Source of Topology Discovery</title>
7 <title>Hardware Locality (hwloc): Consulting and Adding Key-Value Info Attributes</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="header">
4141 <div class="summary">
42 <a href="#enum-members">Enumerations</a> &#124;
4342 <a href="#func-members">Functions</a> </div>
4443 <div class="headertitle">
45 <div class="title">Changing the Source of Topology Discovery</div> </div>
44 <div class="title">Consulting and Adding Key-Value Info Attributes</div> </div>
4645 </div><!--header-->
4746 <div class="contents">
4847 <table class="memberdecls">
49 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
50 Enumerations</h2></td></tr>
51 <tr class="memitem:ga949f656c779208a36790feba24048b7e"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00198.html#ga949f656c779208a36790feba24048b7e">hwloc_topology_components_flag_e</a> { <a class="el" href="a00198.html#gga949f656c779208a36790feba24048b7ea33eec25d29253a2aba21dd3c731b416e">HWLOC_TOPOLOGY_COMPONENTS_FLAG_BLACKLIST</a>
52 }</td></tr>
53 <tr class="separator:ga949f656c779208a36790feba24048b7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 </table><table class="memberdecls">
5548 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
5649 Functions</h2></td></tr>
57 <tr class="memitem:ga341fc17b5867a4715570baab131f68cd"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00198.html#ga341fc17b5867a4715570baab131f68cd">hwloc_topology_set_pid</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict topology, hwloc_pid_t pid)</td></tr>
58 <tr class="separator:ga341fc17b5867a4715570baab131f68cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
59 <tr class="memitem:ga4fab186bb6181a00bcf585825fddd38d"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00198.html#ga4fab186bb6181a00bcf585825fddd38d">hwloc_topology_set_synthetic</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict topology, const char *restrict description)</td></tr>
60 <tr class="separator:ga4fab186bb6181a00bcf585825fddd38d"><td class="memSeparator" colspan="2">&#160;</td></tr>
61 <tr class="memitem:ga879439b7ee99407ee911b3ac64e9a25e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00198.html#ga879439b7ee99407ee911b3ac64e9a25e">hwloc_topology_set_xml</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict topology, const char *restrict xmlpath)</td></tr>
62 <tr class="separator:ga879439b7ee99407ee911b3ac64e9a25e"><td class="memSeparator" colspan="2">&#160;</td></tr>
63 <tr class="memitem:ga2745616b65595e1c1e579ecc7e461fa8"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00198.html#ga2745616b65595e1c1e579ecc7e461fa8">hwloc_topology_set_xmlbuffer</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict topology, const char *restrict buffer, int size)</td></tr>
64 <tr class="separator:ga2745616b65595e1c1e579ecc7e461fa8"><td class="memSeparator" colspan="2">&#160;</td></tr>
65 <tr class="memitem:ga9ad41adf418cee1c0ee32ba9bd4a3d36"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00198.html#ga9ad41adf418cee1c0ee32ba9bd4a3d36">hwloc_topology_set_components</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict topology, unsigned long flags, const char *restrict name)</td></tr>
66 <tr class="separator:ga9ad41adf418cee1c0ee32ba9bd4a3d36"><td class="memSeparator" colspan="2">&#160;</td></tr>
50 <tr class="memitem:gab358661a92bb27d8542b255cc9f6f25e"><td class="memItemLeft" align="right" valign="top">static const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00198.html#gab358661a92bb27d8542b255cc9f6f25e">hwloc_obj_get_info_by_name</a> (<a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj, const char *name)</td></tr>
51 <tr class="separator:gab358661a92bb27d8542b255cc9f6f25e"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:gace7654bb8a9002caae1a4b8a59e7452e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00198.html#gace7654bb8a9002caae1a4b8a59e7452e">hwloc_obj_add_info</a> (<a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj, const char *name, const char *value)</td></tr>
53 <tr class="separator:gace7654bb8a9002caae1a4b8a59e7452e"><td class="memSeparator" colspan="2">&#160;</td></tr>
6754 </table>
6855 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
69 <p>If none of the functions below is called, the default is to detect all the objects of the machine that the caller is allowed to access.</p>
70 <p>This default behavior may also be modified through environment variables if the application did not modify it already. Setting HWLOC_XMLFILE in the environment enforces the discovery from a XML file as if <a class="el" href="a00198.html#ga879439b7ee99407ee911b3ac64e9a25e" title="Enable XML-file based topology.">hwloc_topology_set_xml()</a> had been called. Setting HWLOC_SYNTHETIC enforces a synthetic topology as if <a class="el" href="a00198.html#ga4fab186bb6181a00bcf585825fddd38d" title="Enable synthetic topology.">hwloc_topology_set_synthetic()</a> had been called.</p>
71 <p>Finally, HWLOC_THISSYSTEM enforces the return value of <a class="el" href="a00199.html#ga68ffdcfd9175cdf40709801092f18017" title="Does the topology context come from this system?">hwloc_topology_is_thissystem()</a>. </p>
72 <h2 class="groupheader">Enumeration Type Documentation</h2>
73 <a id="ga949f656c779208a36790feba24048b7e"></a>
74 <h2 class="memtitle"><span class="permalink"><a href="#ga949f656c779208a36790feba24048b7e">&#9670;&nbsp;</a></span>hwloc_topology_components_flag_e</h2>
56 <h2 class="groupheader">Function Documentation</h2>
57 <a id="gace7654bb8a9002caae1a4b8a59e7452e"></a>
58 <h2 class="memtitle"><span class="permalink"><a href="#gace7654bb8a9002caae1a4b8a59e7452e">&#9670;&nbsp;</a></span>hwloc_obj_add_info()</h2>
7559
7660 <div class="memitem">
7761 <div class="memproto">
7862 <table class="memname">
7963 <tr>
80 <td class="memname">enum <a class="el" href="a00198.html#ga949f656c779208a36790feba24048b7e">hwloc_topology_components_flag_e</a></td>
81 </tr>
82 </table>
83 </div><div class="memdoc">
84
85 <p>Flags to be passed to <a class="el" href="a00198.html#ga9ad41adf418cee1c0ee32ba9bd4a3d36" title="Prevent a discovery component from being used for a topology.">hwloc_topology_set_components()</a> </p>
86 <table class="fieldtable">
87 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga949f656c779208a36790feba24048b7ea33eec25d29253a2aba21dd3c731b416e"></a>HWLOC_TOPOLOGY_COMPONENTS_FLAG_BLACKLIST&#160;</td><td class="fielddoc"><p>Blacklist the target component from being used. </p>
88 </td></tr>
89 </table>
90
91 </div>
92 </div>
93 <h2 class="groupheader">Function Documentation</h2>
94 <a id="ga9ad41adf418cee1c0ee32ba9bd4a3d36"></a>
95 <h2 class="memtitle"><span class="permalink"><a href="#ga9ad41adf418cee1c0ee32ba9bd4a3d36">&#9670;&nbsp;</a></span>hwloc_topology_set_components()</h2>
96
97 <div class="memitem">
98 <div class="memproto">
99 <table class="memname">
100 <tr>
101 <td class="memname">int hwloc_topology_set_components </td>
64 <td class="memname">int hwloc_obj_add_info </td>
10265 <td>(</td>
103 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict&#160;</td>
104 <td class="paramname"><em>topology</em>, </td>
66 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
67 <td class="paramname"><em>obj</em>, </td>
10568 </tr>
10669 <tr>
10770 <td class="paramkey"></td>
10871 <td></td>
109 <td class="paramtype">unsigned long&#160;</td>
110 <td class="paramname"><em>flags</em>, </td>
72 <td class="paramtype">const char *&#160;</td>
73 <td class="paramname"><em>name</em>, </td>
11174 </tr>
11275 <tr>
11376 <td class="paramkey"></td>
11477 <td></td>
115 <td class="paramtype">const char *restrict&#160;</td>
116 <td class="paramname"><em>name</em>&#160;</td>
78 <td class="paramtype">const char *&#160;</td>
79 <td class="paramname"><em>value</em>&#160;</td>
11780 </tr>
11881 <tr>
11982 <td></td>
12386 </table>
12487 </div><div class="memdoc">
12588
126 <p>Prevent a discovery component from being used for a topology. </p>
127 <p><code>name</code> is the name of the discovery component that should not be used when loading topology <code>topology</code>. The name is a string such as "cuda".</p>
128 <p>For components with multiple phases, it may also be suffixed with the name of a phase, for instance "linux:io".</p>
129 <p><code>flags</code> should be <a class="el" href="a00198.html#gga949f656c779208a36790feba24048b7ea33eec25d29253a2aba21dd3c731b416e" title="Blacklist the target component from being used.">HWLOC_TOPOLOGY_COMPONENTS_FLAG_BLACKLIST</a>.</p>
130 <p>This may be used to avoid expensive parts of the discovery process. For instance, CUDA-specific discovery may be expensive and unneeded while generic I/O discovery could still be useful. </p>
89 <p>Add the given info name and value pair to the given object. </p>
90 <p>The info is appended to the existing info array even if another key with the same name already exists.</p>
91 <p>The input strings are copied before being added in the object infos.</p>
92 <dl class="section return"><dt>Returns</dt><dd><code>0</code> on success, <code>-1</code> on error.</dd></dl>
93 <dl class="section note"><dt>Note</dt><dd>This function may be used to enforce object colors in the lstopo graphical output by using "lstopoStyle" as a name and "Background=#rrggbb" as a value. See CUSTOM COLORS in the lstopo(1) manpage for details.</dd>
94 <dd>
95 If <code>value</code> contains some non-printable characters, they will be dropped when exporting to XML, see <a class="el" href="a00215.html#ga333f79975b4eeb28a3d8fad3373583ce" title="Export the topology into an XML file.">hwloc_topology_export_xml()</a> in <a class="el" href="a00131_source.html">hwloc/export.h</a>. </dd></dl>
13196
13297 </div>
13398 </div>
134 <a id="ga341fc17b5867a4715570baab131f68cd"></a>
135 <h2 class="memtitle"><span class="permalink"><a href="#ga341fc17b5867a4715570baab131f68cd">&#9670;&nbsp;</a></span>hwloc_topology_set_pid()</h2>
99 <a id="gab358661a92bb27d8542b255cc9f6f25e"></a>
100 <h2 class="memtitle"><span class="permalink"><a href="#gab358661a92bb27d8542b255cc9f6f25e">&#9670;&nbsp;</a></span>hwloc_obj_get_info_by_name()</h2>
136101
137102 <div class="memitem">
138103 <div class="memproto">
104 <table class="mlabels">
105 <tr>
106 <td class="mlabels-left">
139107 <table class="memname">
140108 <tr>
141 <td class="memname">int hwloc_topology_set_pid </td>
109 <td class="memname">static const char* hwloc_obj_get_info_by_name </td>
142110 <td>(</td>
143 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict&#160;</td>
144 <td class="paramname"><em>topology</em>, </td>
111 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
112 <td class="paramname"><em>obj</em>, </td>
145113 </tr>
146114 <tr>
147115 <td class="paramkey"></td>
148116 <td></td>
149 <td class="paramtype">hwloc_pid_t&#160;</td>
150 <td class="paramname"><em>pid</em>&#160;</td>
117 <td class="paramtype">const char *&#160;</td>
118 <td class="paramname"><em>name</em>&#160;</td>
151119 </tr>
152120 <tr>
153121 <td></td>
155123 <td></td><td></td>
156124 </tr>
157125 </table>
126 </td>
127 <td class="mlabels-right">
128 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
129 </tr>
130 </table>
158131 </div><div class="memdoc">
159132
160 <p>Change which process the topology is viewed from. </p>
161 <p>On some systems, processes may have different views of the machine, for instance the set of allowed CPUs. By default, hwloc exposes the view from the current process. Calling <a class="el" href="a00198.html#ga341fc17b5867a4715570baab131f68cd" title="Change which process the topology is viewed from.">hwloc_topology_set_pid()</a> permits to make it expose the topology of the machine from the point of view of another process.</p>
162 <dl class="section note"><dt>Note</dt><dd><code>hwloc_pid_t</code> is <code>pid_t</code> on Unix platforms, and <code>HANDLE</code> on native Windows platforms.</dd>
163 <dd>
164 -1 is returned and errno is set to ENOSYS on platforms that do not support this feature. </dd></dl>
165
166 </div>
167 </div>
168 <a id="ga4fab186bb6181a00bcf585825fddd38d"></a>
169 <h2 class="memtitle"><span class="permalink"><a href="#ga4fab186bb6181a00bcf585825fddd38d">&#9670;&nbsp;</a></span>hwloc_topology_set_synthetic()</h2>
170
171 <div class="memitem">
172 <div class="memproto">
173 <table class="memname">
174 <tr>
175 <td class="memname">int hwloc_topology_set_synthetic </td>
176 <td>(</td>
177 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict&#160;</td>
178 <td class="paramname"><em>topology</em>, </td>
179 </tr>
180 <tr>
181 <td class="paramkey"></td>
182 <td></td>
183 <td class="paramtype">const char *restrict&#160;</td>
184 <td class="paramname"><em>description</em>&#160;</td>
185 </tr>
186 <tr>
187 <td></td>
188 <td>)</td>
189 <td></td><td></td>
190 </tr>
191 </table>
192 </div><div class="memdoc">
193
194 <p>Enable synthetic topology. </p>
195 <p>Gather topology information from the given <code>description</code>, a space-separated string of &lt;type:number&gt; describing the object type and arity at each level. All types may be omitted (space-separated string of numbers) so that hwloc chooses all types according to usual topologies. See also the <a class="el" href="a00395.html">Synthetic topologies</a>.</p>
196 <p>Setting the environment variable HWLOC_SYNTHETIC may also result in this behavior.</p>
197 <p>If <code>description</code> was properly parsed and describes a valid topology configuration, this function returns 0. Otherwise -1 is returned and errno is set to EINVAL.</p>
198 <p>Note that this function does not actually load topology information; it just tells hwloc where to load it from. You'll still need to invoke <a class="el" href="a00192.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a> to actually load the topology information.</p>
199 <dl class="section note"><dt>Note</dt><dd>For convenience, this backend provides empty binding hooks which just return success.</dd>
200 <dd>
201 On success, the synthetic component replaces the previously enabled component (if any), but the topology is not actually modified until <a class="el" href="a00192.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a>. </dd></dl>
202
203 </div>
204 </div>
205 <a id="ga879439b7ee99407ee911b3ac64e9a25e"></a>
206 <h2 class="memtitle"><span class="permalink"><a href="#ga879439b7ee99407ee911b3ac64e9a25e">&#9670;&nbsp;</a></span>hwloc_topology_set_xml()</h2>
207
208 <div class="memitem">
209 <div class="memproto">
210 <table class="memname">
211 <tr>
212 <td class="memname">int hwloc_topology_set_xml </td>
213 <td>(</td>
214 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict&#160;</td>
215 <td class="paramname"><em>topology</em>, </td>
216 </tr>
217 <tr>
218 <td class="paramkey"></td>
219 <td></td>
220 <td class="paramtype">const char *restrict&#160;</td>
221 <td class="paramname"><em>xmlpath</em>&#160;</td>
222 </tr>
223 <tr>
224 <td></td>
225 <td>)</td>
226 <td></td><td></td>
227 </tr>
228 </table>
229 </div><div class="memdoc">
230
231 <p>Enable XML-file based topology. </p>
232 <p>Gather topology information from the XML file given at <code>xmlpath</code>. Setting the environment variable HWLOC_XMLFILE may also result in this behavior. This file may have been generated earlier with <a class="el" href="a00212.html#ga333f79975b4eeb28a3d8fad3373583ce" title="Export the topology into an XML file.">hwloc_topology_export_xml()</a> in <a class="el" href="a00134_source.html">hwloc/export.h</a>, or lstopo file.xml.</p>
233 <p>Note that this function does not actually load topology information; it just tells hwloc where to load it from. You'll still need to invoke <a class="el" href="a00192.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a> to actually load the topology information.</p>
234 <dl class="section return"><dt>Returns</dt><dd>-1 with errno set to EINVAL on failure to read the XML file.</dd></dl>
235 <dl class="section note"><dt>Note</dt><dd>See also <a class="el" href="a00212.html#ga5ac6917ea7289955fb1ffda4353af9b0" title="Set the application-specific callback for importing userdata.">hwloc_topology_set_userdata_import_callback()</a> for importing application-specific object userdata.</dd>
236 <dd>
237 For convenience, this backend provides empty binding hooks which just return success. To have hwloc still actually call OS-specific hooks, the <a class="el" href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b" title="Assume that the selected backend provides the topology for the system on which we are running.">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a> has to be set to assert that the loaded file is really the underlying system.</dd>
238 <dd>
239 On success, the XML component replaces the previously enabled component (if any), but the topology is not actually modified until <a class="el" href="a00192.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a>. </dd></dl>
240
241 </div>
242 </div>
243 <a id="ga2745616b65595e1c1e579ecc7e461fa8"></a>
244 <h2 class="memtitle"><span class="permalink"><a href="#ga2745616b65595e1c1e579ecc7e461fa8">&#9670;&nbsp;</a></span>hwloc_topology_set_xmlbuffer()</h2>
245
246 <div class="memitem">
247 <div class="memproto">
248 <table class="memname">
249 <tr>
250 <td class="memname">int hwloc_topology_set_xmlbuffer </td>
251 <td>(</td>
252 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict&#160;</td>
253 <td class="paramname"><em>topology</em>, </td>
254 </tr>
255 <tr>
256 <td class="paramkey"></td>
257 <td></td>
258 <td class="paramtype">const char *restrict&#160;</td>
259 <td class="paramname"><em>buffer</em>, </td>
260 </tr>
261 <tr>
262 <td class="paramkey"></td>
263 <td></td>
264 <td class="paramtype">int&#160;</td>
265 <td class="paramname"><em>size</em>&#160;</td>
266 </tr>
267 <tr>
268 <td></td>
269 <td>)</td>
270 <td></td><td></td>
271 </tr>
272 </table>
273 </div><div class="memdoc">
274
275 <p>Enable XML based topology using a memory buffer (instead of a file, as with <a class="el" href="a00198.html#ga879439b7ee99407ee911b3ac64e9a25e" title="Enable XML-file based topology.">hwloc_topology_set_xml()</a>). </p>
276 <p>Gather topology information from the XML memory buffer given at <code>buffer</code> and of length <code>size</code>. This buffer may have been filled earlier with <a class="el" href="a00212.html#gad33b7f7c11db10459505a3b1634fd3f1" title="Export the topology into a newly-allocated XML memory buffer.">hwloc_topology_export_xmlbuffer()</a> in <a class="el" href="a00134_source.html">hwloc/export.h</a>.</p>
277 <p>Note that this function does not actually load topology information; it just tells hwloc where to load it from. You'll still need to invoke <a class="el" href="a00192.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a> to actually load the topology information.</p>
278 <dl class="section return"><dt>Returns</dt><dd>-1 with errno set to EINVAL on failure to read the XML buffer.</dd></dl>
279 <dl class="section note"><dt>Note</dt><dd>See also <a class="el" href="a00212.html#ga5ac6917ea7289955fb1ffda4353af9b0" title="Set the application-specific callback for importing userdata.">hwloc_topology_set_userdata_import_callback()</a> for importing application-specific object userdata.</dd>
280 <dd>
281 For convenience, this backend provides empty binding hooks which just return success. To have hwloc still actually call OS-specific hooks, the <a class="el" href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b" title="Assume that the selected backend provides the topology for the system on which we are running.">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a> has to be set to assert that the loaded file is really the underlying system.</dd>
282 <dd>
283 On success, the XML component replaces the previously enabled component (if any), but the topology is not actually modified until <a class="el" href="a00192.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a>. </dd></dl>
133 <p>Search the given key name in object infos and return the corresponding value. </p>
134 <p>If multiple keys match the given name, only the first one is returned.</p>
135 <dl class="section return"><dt>Returns</dt><dd><code>NULL</code> if no such key exists. </dd></dl>
284136
285137 </div>
286138 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Topology Detection Configuration and Query</title>
7 <title>Hardware Locality (hwloc): CPU binding</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="header">
4141 <div class="summary">
42 <a href="#nested-classes">Data Structures</a> &#124;
4342 <a href="#enum-members">Enumerations</a> &#124;
4443 <a href="#func-members">Functions</a> </div>
4544 <div class="headertitle">
46 <div class="title">Topology Detection Configuration and Query</div> </div>
45 <div class="title">CPU binding</div> </div>
4746 </div><!--header-->
4847 <div class="contents">
4948 <table class="memberdecls">
50 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
51 Data Structures</h2></td></tr>
52 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00296.html">hwloc_topology_discovery_support</a></td></tr>
53 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00300.html">hwloc_topology_cpubind_support</a></td></tr>
55 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html">hwloc_topology_membind_support</a></td></tr>
57 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00308.html">hwloc_topology_misc_support</a></td></tr>
59 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00312.html">hwloc_topology_support</a></td></tr>
61 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 </table><table class="memberdecls">
6349 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
6450 Enumerations</h2></td></tr>
65 <tr class="memitem:gada025d3ec20b4b420f8038d23d6e7bde"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#gada025d3ec20b4b420f8038d23d6e7bde">hwloc_topology_flags_e</a> { <a class="el" href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a>
66 , <a class="el" href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a>
67 , <a class="el" href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdea1b66bbd66e900e5c837f71defb32ad89">HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES</a>
68 , <a class="el" href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdead93e82b8668ee90e4f9354e201a2ed9c">HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT</a> = (1UL&lt;&lt;3)
51 <tr class="memitem:ga217dc8d373f8958cc93c154ebce1c71c"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga217dc8d373f8958cc93c154ebce1c71c">hwloc_cpubind_flags_t</a> { <a class="el" href="a00199.html#gga217dc8d373f8958cc93c154ebce1c71ca2e0dd0128dac6b03408c7dd170477fdc">HWLOC_CPUBIND_PROCESS</a>
52 , <a class="el" href="a00199.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421">HWLOC_CPUBIND_THREAD</a>
53 , <a class="el" href="a00199.html#gga217dc8d373f8958cc93c154ebce1c71ca679a7e0f0c7ee06b123565f90d98e7fa">HWLOC_CPUBIND_STRICT</a>
54 , <a class="el" href="a00199.html#gga217dc8d373f8958cc93c154ebce1c71ca41ce440443cc3087caed95ab60edcad6">HWLOC_CPUBIND_NOMEMBIND</a>
6955 }</td></tr>
70 <tr class="separator:gada025d3ec20b4b420f8038d23d6e7bde"><td class="memSeparator" colspan="2">&#160;</td></tr>
71 <tr class="memitem:ga9a5a1f0140cd1952544477833733195b"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> { <a class="el" href="a00199.html#gga9a5a1f0140cd1952544477833733195bafda7b59e6810dfe778d8f9a4cc1e350e">HWLOC_TYPE_FILTER_KEEP_ALL</a>
72 , <a class="el" href="a00199.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a">HWLOC_TYPE_FILTER_KEEP_NONE</a>
73 , <a class="el" href="a00199.html#gga9a5a1f0140cd1952544477833733195ba7664716643bf1db83e631eed34f659e4">HWLOC_TYPE_FILTER_KEEP_STRUCTURE</a>
74 , <a class="el" href="a00199.html#gga9a5a1f0140cd1952544477833733195ba63fd24954e18c83ff7eae9588759adb5">HWLOC_TYPE_FILTER_KEEP_IMPORTANT</a>
75 }</td></tr>
76 <tr class="separator:ga9a5a1f0140cd1952544477833733195b"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="separator:ga217dc8d373f8958cc93c154ebce1c71c"><td class="memSeparator" colspan="2">&#160;</td></tr>
7757 </table><table class="memberdecls">
7858 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
7959 Functions</h2></td></tr>
80 <tr class="memitem:gaaeed4df656979e5f16befea9d29b814b"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#gaaeed4df656979e5f16befea9d29b814b">hwloc_topology_set_flags</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned long flags)</td></tr>
81 <tr class="separator:gaaeed4df656979e5f16befea9d29b814b"><td class="memSeparator" colspan="2">&#160;</td></tr>
82 <tr class="memitem:ga09318f81c1d4713be907d64748a6f93c"><td class="memItemLeft" align="right" valign="top">unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga09318f81c1d4713be907d64748a6f93c">hwloc_topology_get_flags</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
83 <tr class="separator:ga09318f81c1d4713be907d64748a6f93c"><td class="memSeparator" colspan="2">&#160;</td></tr>
84 <tr class="memitem:ga68ffdcfd9175cdf40709801092f18017"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict topology)</td></tr>
85 <tr class="separator:ga68ffdcfd9175cdf40709801092f18017"><td class="memSeparator" colspan="2">&#160;</td></tr>
86 <tr class="memitem:gab8c76173c4a8ce1a9a9366012b1388e6"><td class="memItemLeft" align="right" valign="top">const struct <a class="el" href="a00312.html">hwloc_topology_support</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#gab8c76173c4a8ce1a9a9366012b1388e6">hwloc_topology_get_support</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict topology)</td></tr>
87 <tr class="separator:gab8c76173c4a8ce1a9a9366012b1388e6"><td class="memSeparator" colspan="2">&#160;</td></tr>
88 <tr class="memitem:gad894e70f15f8d4aada7be8d1aba38b7e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#gad894e70f15f8d4aada7be8d1aba38b7e">hwloc_topology_set_type_filter</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, enum <a class="el" href="a00199.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter)</td></tr>
89 <tr class="separator:gad894e70f15f8d4aada7be8d1aba38b7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
90 <tr class="memitem:ga137ad1178f7a79f2383974d983083401"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga137ad1178f7a79f2383974d983083401">hwloc_topology_get_type_filter</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, enum <a class="el" href="a00199.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> *filter)</td></tr>
91 <tr class="separator:ga137ad1178f7a79f2383974d983083401"><td class="memSeparator" colspan="2">&#160;</td></tr>
92 <tr class="memitem:ga9eb8dc3b106f84921bf5789101e97e24"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga9eb8dc3b106f84921bf5789101e97e24">hwloc_topology_set_all_types_filter</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, enum <a class="el" href="a00199.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter)</td></tr>
93 <tr class="separator:ga9eb8dc3b106f84921bf5789101e97e24"><td class="memSeparator" colspan="2">&#160;</td></tr>
94 <tr class="memitem:ga30bd6d330fe3c8f0cbaad724d114ee20"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga30bd6d330fe3c8f0cbaad724d114ee20">hwloc_topology_set_cache_types_filter</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, enum <a class="el" href="a00199.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter)</td></tr>
95 <tr class="separator:ga30bd6d330fe3c8f0cbaad724d114ee20"><td class="memSeparator" colspan="2">&#160;</td></tr>
96 <tr class="memitem:ga37c7b2e599ed3cd76ad9164630024f30"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga37c7b2e599ed3cd76ad9164630024f30">hwloc_topology_set_icache_types_filter</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, enum <a class="el" href="a00199.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter)</td></tr>
97 <tr class="separator:ga37c7b2e599ed3cd76ad9164630024f30"><td class="memSeparator" colspan="2">&#160;</td></tr>
98 <tr class="memitem:ga0ab38705357bc1203abe829da8a12ad3"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga0ab38705357bc1203abe829da8a12ad3">hwloc_topology_set_io_types_filter</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, enum <a class="el" href="a00199.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter)</td></tr>
99 <tr class="separator:ga0ab38705357bc1203abe829da8a12ad3"><td class="memSeparator" colspan="2">&#160;</td></tr>
100 <tr class="memitem:ga2cc7b7b155cba58dda203e54f1637b9c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga2cc7b7b155cba58dda203e54f1637b9c">hwloc_topology_set_userdata</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const void *userdata)</td></tr>
101 <tr class="separator:ga2cc7b7b155cba58dda203e54f1637b9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
102 <tr class="memitem:ga91f992f8d6c4905b2d3c4f43e509c2a3"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga91f992f8d6c4905b2d3c4f43e509c2a3">hwloc_topology_get_userdata</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
103 <tr class="separator:ga91f992f8d6c4905b2d3c4f43e509c2a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:ga80bc07473a8edf840cae17bd7ec21d48"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga80bc07473a8edf840cae17bd7ec21d48">hwloc_set_cpubind</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, int flags)</td></tr>
61 <tr class="separator:ga80bc07473a8edf840cae17bd7ec21d48"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:gacba7ecb979baf824d5240fa2cb2a8be6"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#gacba7ecb979baf824d5240fa2cb2a8be6">hwloc_get_cpubind</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set, int flags)</td></tr>
63 <tr class="separator:gacba7ecb979baf824d5240fa2cb2a8be6"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 <tr class="memitem:ga296db8a3c6d49b51fb83d6f3e45c02a6"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga296db8a3c6d49b51fb83d6f3e45c02a6">hwloc_set_proc_cpubind</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_pid_t pid, <a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, int flags)</td></tr>
65 <tr class="separator:ga296db8a3c6d49b51fb83d6f3e45c02a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 <tr class="memitem:gac82de91f788fa82dacf99c6e0d4b7158"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#gac82de91f788fa82dacf99c6e0d4b7158">hwloc_get_proc_cpubind</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_pid_t pid, <a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set, int flags)</td></tr>
67 <tr class="separator:gac82de91f788fa82dacf99c6e0d4b7158"><td class="memSeparator" colspan="2">&#160;</td></tr>
68 <tr class="memitem:gae42c01b2addcfbf6048b9a516dd7a906"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#gae42c01b2addcfbf6048b9a516dd7a906">hwloc_set_thread_cpubind</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_thread_t thread, <a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, int flags)</td></tr>
69 <tr class="separator:gae42c01b2addcfbf6048b9a516dd7a906"><td class="memSeparator" colspan="2">&#160;</td></tr>
70 <tr class="memitem:gaf13f765642b5d0d9a9813e6bb043671b"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#gaf13f765642b5d0d9a9813e6bb043671b">hwloc_get_thread_cpubind</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_thread_t thread, <a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set, int flags)</td></tr>
71 <tr class="separator:gaf13f765642b5d0d9a9813e6bb043671b"><td class="memSeparator" colspan="2">&#160;</td></tr>
72 <tr class="memitem:gafdb374627358bf09203b5a4215b13032"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#gafdb374627358bf09203b5a4215b13032">hwloc_get_last_cpu_location</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set, int flags)</td></tr>
73 <tr class="separator:gafdb374627358bf09203b5a4215b13032"><td class="memSeparator" colspan="2">&#160;</td></tr>
74 <tr class="memitem:ga910a05c2d47f68a3155bf176b50fa555"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00199.html#ga910a05c2d47f68a3155bf176b50fa555">hwloc_get_proc_last_cpu_location</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_pid_t pid, <a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set, int flags)</td></tr>
75 <tr class="separator:ga910a05c2d47f68a3155bf176b50fa555"><td class="memSeparator" colspan="2">&#160;</td></tr>
10476 </table>
10577 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
106 <p>Several functions can optionally be called between <a class="el" href="a00192.html#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa" title="Allocate a topology context.">hwloc_topology_init()</a> and <a class="el" href="a00192.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a> to configure how the detection should be performed, e.g. to ignore some objects types, define a synthetic topology, etc. </p>
78 <p>Some operating systems only support binding threads or processes to a single PU. Others allow binding to larger sets such as entire Cores or Packages or even random sets of invididual PUs. In such operating system, the scheduler is free to run the task on one of these PU, then migrate it to another PU, etc. It is often useful to call <a class="el" href="a00214.html#gaa611a77c092e679246afdf9a60d5db8b" title="Keep a single index among those set in bitmap bitmap.">hwloc_bitmap_singlify()</a> on the target CPU set before passing it to the binding function to avoid these expensive migrations. See the documentation of <a class="el" href="a00214.html#gaa611a77c092e679246afdf9a60d5db8b" title="Keep a single index among those set in bitmap bitmap.">hwloc_bitmap_singlify()</a> for details.</p>
79 <p>Some operating systems do not provide all hwloc-supported mechanisms to bind processes, threads, etc. <a class="el" href="a00202.html#gab8c76173c4a8ce1a9a9366012b1388e6" title="Retrieve the topology support.">hwloc_topology_get_support()</a> may be used to query about the actual CPU binding support in the currently used operating system.</p>
80 <p>When the requested binding operation is not available and the <a class="el" href="a00199.html#gga217dc8d373f8958cc93c154ebce1c71ca679a7e0f0c7ee06b123565f90d98e7fa" title="Request for strict binding from the OS.">HWLOC_CPUBIND_STRICT</a> flag was passed, the function returns -1. <code>errno</code> is set to <code>ENOSYS</code> when it is not possible to bind the requested kind of object processes/threads. errno is set to <code>EXDEV</code> when the requested cpuset can not be enforced (e.g. some systems only allow one CPU, and some other systems only allow one NUMA node).</p>
81 <p>If <a class="el" href="a00199.html#gga217dc8d373f8958cc93c154ebce1c71ca679a7e0f0c7ee06b123565f90d98e7fa" title="Request for strict binding from the OS.">HWLOC_CPUBIND_STRICT</a> 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.</p>
82 <p>The most portable version that should be preferred over the others, whenever possible, is the following one which just binds the current program, assuming it is single-threaded:</p>
83 <div class="fragment"><div class="line"><a class="code" href="a00199.html#ga80bc07473a8edf840cae17bd7ec21d48">hwloc_set_cpubind</a>(topology, set, 0),</div>
84 <div class="ttc" id="aa00199_html_ga80bc07473a8edf840cae17bd7ec21d48"><div class="ttname"><a href="a00199.html#ga80bc07473a8edf840cae17bd7ec21d48">hwloc_set_cpubind</a></div><div class="ttdeci">int hwloc_set_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t set, int flags)</div><div class="ttdoc">Bind current process or thread on cpus given in physical bitmap set.</div></div>
85 </div><!-- fragment --><p>If the program may be multithreaded, the following one should be preferred to only bind the current thread:</p>
86 <div class="fragment"><div class="line"><a class="code" href="a00199.html#ga80bc07473a8edf840cae17bd7ec21d48">hwloc_set_cpubind</a>(topology, set, <a class="code" href="a00199.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421">HWLOC_CPUBIND_THREAD</a>),</div>
87 <div class="ttc" id="aa00199_html_gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421"><div class="ttname"><a href="a00199.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421">HWLOC_CPUBIND_THREAD</a></div><div class="ttdeci">@ HWLOC_CPUBIND_THREAD</div><div class="ttdoc">Bind current thread of current process.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1161</div></div>
88 </div><!-- fragment --><dl class="section see"><dt>See also</dt><dd>Some example codes are available under doc/examples/ in the source tree.</dd></dl>
89 <dl class="section note"><dt>Note</dt><dd>To unbind, just call the binding function with either a full cpuset or a cpuset equal to the system cpuset.</dd>
90 <dd>
91 On some operating systems, CPU binding may have effects on memory binding, see <a class="el" href="a00199.html#gga217dc8d373f8958cc93c154ebce1c71ca41ce440443cc3087caed95ab60edcad6" title="Avoid any effect on memory binding.">HWLOC_CPUBIND_NOMEMBIND</a></dd>
92 <dd>
93 Running lstopo --top or hwloc-ps can be a very convenient tool to check how binding actually happened. </dd></dl>
10794 <h2 class="groupheader">Enumeration Type Documentation</h2>
108 <a id="gada025d3ec20b4b420f8038d23d6e7bde"></a>
109 <h2 class="memtitle"><span class="permalink"><a href="#gada025d3ec20b4b420f8038d23d6e7bde">&#9670;&nbsp;</a></span>hwloc_topology_flags_e</h2>
110
111 <div class="memitem">
112 <div class="memproto">
113 <table class="memname">
114 <tr>
115 <td class="memname">enum <a class="el" href="a00199.html#gada025d3ec20b4b420f8038d23d6e7bde">hwloc_topology_flags_e</a></td>
116 </tr>
117 </table>
118 </div><div class="memdoc">
119
120 <p>Flags to be set onto a topology context before load. </p>
121 <p>Flags should be given to <a class="el" href="a00199.html#gaaeed4df656979e5f16befea9d29b814b" title="Set OR&#39;ed flags to non-yet-loaded topology.">hwloc_topology_set_flags()</a>. They may also be returned by <a class="el" href="a00199.html#ga09318f81c1d4713be907d64748a6f93c" title="Get OR&#39;ed flags of a topology.">hwloc_topology_get_flags()</a>. </p>
95 <a id="ga217dc8d373f8958cc93c154ebce1c71c"></a>
96 <h2 class="memtitle"><span class="permalink"><a href="#ga217dc8d373f8958cc93c154ebce1c71c">&#9670;&nbsp;</a></span>hwloc_cpubind_flags_t</h2>
97
98 <div class="memitem">
99 <div class="memproto">
100 <table class="memname">
101 <tr>
102 <td class="memname">enum <a class="el" href="a00199.html#ga217dc8d373f8958cc93c154ebce1c71c">hwloc_cpubind_flags_t</a></td>
103 </tr>
104 </table>
105 </div><div class="memdoc">
106
107 <p>Process/Thread binding flags. </p>
108 <p>These bit flags can be used to refine the binding policy.</p>
109 <p>The default (0) is to bind the current process, assumed to be single-threaded, in a non-strict way. This is the most portable way to bind as all operating systems usually provide it.</p>
110 <dl class="section note"><dt>Note</dt><dd>Not all systems support all kinds of binding. See the "Detailed Description" section of <a class="el" href="a00199.html">CPU binding</a> for a description of errors that can occur. </dd></dl>
122111 <table class="fieldtable">
123 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258"></a>HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED&#160;</td><td class="fielddoc"><p>Detect the whole system, ignore reservations, include disallowed objects. </p>
124 <p>Gather all resources, even if some were disabled by the administrator. For instance, ignore Linux Cgroup/Cpusets and gather all processors and memory nodes.</p>
125 <p>When this flag is not set, PUs and NUMA nodes that are disallowed are not added to the topology. Parent objects (package, core, cache, etc.) are added only if some of their children are allowed. All existing PUs and NUMA nodes in the topology are allowed. <a class="el" href="a00208.html#ga517d5d68ec9f24583d8933aab713be8e" title="Get allowed CPU set.">hwloc_topology_get_allowed_cpuset()</a> and <a class="el" href="a00208.html#ga21a4d7237a11e76b912ed4524ab78cbd" title="Get allowed node set.">hwloc_topology_get_allowed_nodeset()</a> are equal to the root object cpuset and nodeset.</p>
126 <p>When this flag is set, the actual sets of allowed PUs and NUMA nodes are given by <a class="el" href="a00208.html#ga517d5d68ec9f24583d8933aab713be8e" title="Get allowed CPU set.">hwloc_topology_get_allowed_cpuset()</a> and <a class="el" href="a00208.html#ga21a4d7237a11e76b912ed4524ab78cbd" title="Get allowed node set.">hwloc_topology_get_allowed_nodeset()</a>. They may be smaller than the root object cpuset and nodeset.</p>
127 <p>If the current topology is exported to XML and reimported later, this flag should be set again in the reimported topology so that disallowed resources are reimported as well. </p>
112 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga217dc8d373f8958cc93c154ebce1c71ca2e0dd0128dac6b03408c7dd170477fdc"></a>HWLOC_CPUBIND_PROCESS&#160;</td><td class="fielddoc"><p>Bind all threads of the current (possibly) multithreaded process. </p>
128113 </td></tr>
129 <tr><td class="fieldname"><a id="ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b"></a>HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM&#160;</td><td class="fielddoc"><p>Assume that the selected backend provides the topology for the system on which we are running. </p>
130 <p>This forces <a class="el" href="a00199.html#ga68ffdcfd9175cdf40709801092f18017" title="Does the topology context come from this system?">hwloc_topology_is_thissystem()</a> to return 1, i.e. makes hwloc assume that the selected backend provides the topology for the system on which we are running, even if it is not the OS-specific backend but the XML backend for instance. This means making the binding functions actually call the OS-specific system calls and really do binding, while the XML backend would otherwise provide empty hooks just returning success.</p>
131 <p>Setting the environment variable HWLOC_THISSYSTEM may also result in the same behavior.</p>
132 <p>This can be used for efficiency reasons to first detect the topology once, save it to an XML file, and quickly reload it later through the XML backend, but still having binding functions actually do bind. </p>
114 <tr><td class="fieldname"><a id="gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421"></a>HWLOC_CPUBIND_THREAD&#160;</td><td class="fielddoc"><p>Bind current thread of current process. </p>
133115 </td></tr>
134 <tr><td class="fieldname"><a id="ggada025d3ec20b4b420f8038d23d6e7bdea1b66bbd66e900e5c837f71defb32ad89"></a>HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES&#160;</td><td class="fielddoc"><p>Get the set of allowed resources from the local operating system even if the topology was loaded from XML or synthetic description. </p>
135 <p>If the topology was loaded from XML or from a synthetic string, restrict it by applying the current process restrictions such as Linux Cgroup/Cpuset.</p>
136 <p>This is useful when the topology is not loaded directly from the local machine (e.g. for performance reason) and it comes with all resources, while the running process is restricted to only parts of the machine.</p>
137 <p>This flag is ignored unless <a class="el" href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b" title="Assume that the selected backend provides the topology for the system on which we are running.">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a> is also set since the loaded topology must match the underlying machine where restrictions will be gathered from.</p>
138 <p>Setting the environment variable HWLOC_THISSYSTEM_ALLOWED_RESOURCES would result in the same behavior. </p>
116 <tr><td class="fieldname"><a id="gga217dc8d373f8958cc93c154ebce1c71ca679a7e0f0c7ee06b123565f90d98e7fa"></a>HWLOC_CPUBIND_STRICT&#160;</td><td class="fielddoc"><p>Request for strict binding from the OS. </p>
117 <p>By default, when the designated CPUs are all busy while other CPUs are idle, operating systems may execute the thread/process on those other CPUs instead of the designated CPUs, to let them progress anyway. Strict binding means that the thread/process will _never_ execute on other cpus than the designated CPUs, even when those are busy with other tasks and other CPUs are idle.</p>
118 <dl class="section note"><dt>Note</dt><dd>Depending on the operating system, strict binding may not be possible (e.g., the OS does not implement it) or not allowed (e.g., for an administrative reasons), and the function will fail in that case.</dd></dl>
119 <p>When retrieving the binding of a process, this flag checks whether all its threads actually have the same binding. If the flag is not given, the binding of each thread will be accumulated.</p>
120 <dl class="section note"><dt>Note</dt><dd>This flag is meaningless when retrieving the binding of a thread. </dd></dl>
139121 </td></tr>
140 <tr><td class="fieldname"><a id="ggada025d3ec20b4b420f8038d23d6e7bdead93e82b8668ee90e4f9354e201a2ed9c"></a>HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT&#160;</td><td class="fielddoc"><p>Import support from the imported topology. </p>
141 <p>When importing a XML topology from a remote machine, binding is disabled by default (see <a class="el" href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b" title="Assume that the selected backend provides the topology for the system on which we are running.">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a>). This disabling is also marked by putting zeroes in the corresponding supported feature bits reported by <a class="el" href="a00199.html#gab8c76173c4a8ce1a9a9366012b1388e6" title="Retrieve the topology support.">hwloc_topology_get_support()</a>.</p>
142 <p>The flag <a class="el" href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdead93e82b8668ee90e4f9354e201a2ed9c" title="Import support from the imported topology.">HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT</a> actually imports support bits from the remote machine. It also sets the flag <code>imported_support</code> in the struct <a class="el" href="a00308.html" title="Flags describing miscellaneous features.">hwloc_topology_misc_support</a> array. If the imported XML did not contain any support information (exporter hwloc is too old), this flag is not set.</p>
143 <p>Note that these supported features are only relevant for the hwloc installation that actually exported the XML topology (it may vary with the operating system, or with how hwloc was compiled).</p>
144 <p>Note that setting this flag however does not enable binding for the locally imported hwloc topology, it only reports what the remote hwloc and machine support. </p>
122 <tr><td class="fieldname"><a id="gga217dc8d373f8958cc93c154ebce1c71ca41ce440443cc3087caed95ab60edcad6"></a>HWLOC_CPUBIND_NOMEMBIND&#160;</td><td class="fielddoc"><p>Avoid any effect on memory binding. </p>
123 <p>On some operating systems, some CPU binding function would also bind the memory on the corresponding NUMA node. It is often not a problem for the application, but if it is, setting this flag will make hwloc avoid using OS functions that would also bind memory. This will however reduce the support of CPU bindings, i.e. potentially return -1 with errno set to ENOSYS in some cases.</p>
124 <p>This flag is only meaningful when used with functions that set the CPU binding. It is ignored when used with functions that get CPU binding information. </p>
145125 </td></tr>
146126 </table>
147127
148128 </div>
149129 </div>
150 <a id="ga9a5a1f0140cd1952544477833733195b"></a>
151 <h2 class="memtitle"><span class="permalink"><a href="#ga9a5a1f0140cd1952544477833733195b">&#9670;&nbsp;</a></span>hwloc_type_filter_e</h2>
152
153 <div class="memitem">
154 <div class="memproto">
155 <table class="memname">
156 <tr>
157 <td class="memname">enum <a class="el" href="a00199.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a></td>
158 </tr>
159 </table>
160 </div><div class="memdoc">
161
162 <p>Type filtering flags. </p>
163 <p>By default, most objects are kept (<a class="el" href="a00199.html#gga9a5a1f0140cd1952544477833733195bafda7b59e6810dfe778d8f9a4cc1e350e" title="Keep all objects of this type.">HWLOC_TYPE_FILTER_KEEP_ALL</a>). Instruction caches, I/O and Misc objects are ignored by default (<a class="el" href="a00199.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a" title="Ignore all objects of this type.">HWLOC_TYPE_FILTER_KEEP_NONE</a>). Die and Group levels are ignored unless they bring structure (<a class="el" href="a00199.html#gga9a5a1f0140cd1952544477833733195ba7664716643bf1db83e631eed34f659e4" title="Only ignore objects if their entire level does not bring any structure.">HWLOC_TYPE_FILTER_KEEP_STRUCTURE</a>).</p>
164 <p>Note that group objects are also ignored individually (without the entire level) when they do not bring structure. </p>
165 <table class="fieldtable">
166 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga9a5a1f0140cd1952544477833733195bafda7b59e6810dfe778d8f9a4cc1e350e"></a>HWLOC_TYPE_FILTER_KEEP_ALL&#160;</td><td class="fielddoc"><p>Keep all objects of this type. </p>
167 <p>Cannot be set for <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a5269ef95be72f88465559d35c9b7ad56" title="Group objects. Objects which do not fit in the above but are detected by hwloc and are useful to take...">HWLOC_OBJ_GROUP</a> (groups are designed only to add more structure to the topology). </p>
168 </td></tr>
169 <tr><td class="fieldname"><a id="gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a"></a>HWLOC_TYPE_FILTER_KEEP_NONE&#160;</td><td class="fielddoc"><p>Ignore all objects of this type. </p>
170 <p>The bottom-level type <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661" title="Processing Unit, or (Logical) Processor. An execution unit (may share a core with some other logical ...">HWLOC_OBJ_PU</a>, the <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a" title="NUMA node. An object that contains memory that is directly and byte-accessible to the host processors...">HWLOC_OBJ_NUMANODE</a> type, and the top-level type <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a3f4e83ffc4a259354959ae8a9eaa2a80" title="Machine. A set of processors and memory with cache coherency.">HWLOC_OBJ_MACHINE</a> may not be ignored. </p>
171 </td></tr>
172 <tr><td class="fieldname"><a id="gga9a5a1f0140cd1952544477833733195ba7664716643bf1db83e631eed34f659e4"></a>HWLOC_TYPE_FILTER_KEEP_STRUCTURE&#160;</td><td class="fielddoc"><p>Only ignore objects if their entire level does not bring any structure. </p>
173 <p>Keep the entire level of objects if at least one of these objects adds structure to the topology. An object brings structure when it has multiple children and it is not the only child of its parent.</p>
174 <p>If all objects in the level are the only child of their parent, and if none of them has multiple children, the entire level is removed.</p>
175 <p>Cannot be set for I/O and Misc objects since the topology structure does not matter there. </p>
176 </td></tr>
177 <tr><td class="fieldname"><a id="gga9a5a1f0140cd1952544477833733195ba63fd24954e18c83ff7eae9588759adb5"></a>HWLOC_TYPE_FILTER_KEEP_IMPORTANT&#160;</td><td class="fielddoc"><p>Only keep likely-important objects of the given type. </p>
178 <p>It is only useful for I/O object types. For <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9" title="PCI device (filtered out by default).">HWLOC_OBJ_PCI_DEVICE</a> and <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075" title="Operating system device (filtered out by default).">HWLOC_OBJ_OS_DEVICE</a>, it means that only objects of major/common kinds are kept (storage, network, OpenFabrics, CUDA, OpenCL, RSMI, NVML, and displays). Also, only OS devices directly attached on PCI (e.g. no USB) are reported. For <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0" title="Bridge (filtered out by default). Any bridge (or PCI switch) that connects the host or an I/O bus,...">HWLOC_OBJ_BRIDGE</a>, it means that bridges are kept only if they have children.</p>
179 <p>This flag equivalent to <a class="el" href="a00199.html#gga9a5a1f0140cd1952544477833733195bafda7b59e6810dfe778d8f9a4cc1e350e" title="Keep all objects of this type.">HWLOC_TYPE_FILTER_KEEP_ALL</a> for Normal, Memory and Misc types since they are likely important. </p>
180 </td></tr>
181 </table>
182
183 </div>
184 </div>
185130 <h2 class="groupheader">Function Documentation</h2>
186 <a id="ga09318f81c1d4713be907d64748a6f93c"></a>
187 <h2 class="memtitle"><span class="permalink"><a href="#ga09318f81c1d4713be907d64748a6f93c">&#9670;&nbsp;</a></span>hwloc_topology_get_flags()</h2>
188
189 <div class="memitem">
190 <div class="memproto">
191 <table class="memname">
192 <tr>
193 <td class="memname">unsigned long hwloc_topology_get_flags </td>
194 <td>(</td>
195 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
196 <td class="paramname"><em>topology</em></td><td>)</td>
197 <td></td>
198 </tr>
199 </table>
200 </div><div class="memdoc">
201
202 <p>Get OR'ed flags of a topology. </p>
203 <p>Get the OR'ed set of <a class="el" href="a00199.html#gada025d3ec20b4b420f8038d23d6e7bde" title="Flags to be set onto a topology context before load.">hwloc_topology_flags_e</a> of a topology.</p>
204 <dl class="section return"><dt>Returns</dt><dd>the flags previously set with <a class="el" href="a00199.html#gaaeed4df656979e5f16befea9d29b814b" title="Set OR&#39;ed flags to non-yet-loaded topology.">hwloc_topology_set_flags()</a>. </dd></dl>
205
206 </div>
207 </div>
208 <a id="gab8c76173c4a8ce1a9a9366012b1388e6"></a>
209 <h2 class="memtitle"><span class="permalink"><a href="#gab8c76173c4a8ce1a9a9366012b1388e6">&#9670;&nbsp;</a></span>hwloc_topology_get_support()</h2>
210
211 <div class="memitem">
212 <div class="memproto">
213 <table class="memname">
214 <tr>
215 <td class="memname">const struct <a class="el" href="a00312.html">hwloc_topology_support</a>* hwloc_topology_get_support </td>
216 <td>(</td>
217 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict&#160;</td>
218 <td class="paramname"><em>topology</em></td><td>)</td>
219 <td></td>
220 </tr>
221 </table>
222 </div><div class="memdoc">
223
224 <p>Retrieve the topology support. </p>
225 <p>Each flag indicates whether a feature is supported. If set to 0, the feature is not supported. If set to 1, the feature is supported, but the corresponding call may still fail in some corner cases.</p>
226 <p>These features are also listed by hwloc-info --support</p>
227 <p>The reported features are what the current topology supports on the current machine. If the topology was exported to XML from another machine and later imported here, support still describes what is supported for this imported topology after import. By default, binding will be reported as unsupported in this case (see <a class="el" href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b" title="Assume that the selected backend provides the topology for the system on which we are running.">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a>).</p>
228 <p>Topology flag <a class="el" href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdead93e82b8668ee90e4f9354e201a2ed9c" title="Import support from the imported topology.">HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT</a> may be used to report the supported features of the original remote machine instead. If it was successfully imported, <code>imported_support</code> will be set in the struct <a class="el" href="a00308.html" title="Flags describing miscellaneous features.">hwloc_topology_misc_support</a> array. </p>
229
230 </div>
231 </div>
232 <a id="ga137ad1178f7a79f2383974d983083401"></a>
233 <h2 class="memtitle"><span class="permalink"><a href="#ga137ad1178f7a79f2383974d983083401">&#9670;&nbsp;</a></span>hwloc_topology_get_type_filter()</h2>
234
235 <div class="memitem">
236 <div class="memproto">
237 <table class="memname">
238 <tr>
239 <td class="memname">int hwloc_topology_get_type_filter </td>
240 <td>(</td>
241 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
242 <td class="paramname"><em>topology</em>, </td>
243 </tr>
244 <tr>
245 <td class="paramkey"></td>
246 <td></td>
247 <td class="paramtype"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
248 <td class="paramname"><em>type</em>, </td>
249 </tr>
250 <tr>
251 <td class="paramkey"></td>
252 <td></td>
253 <td class="paramtype">enum <a class="el" href="a00199.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> *&#160;</td>
254 <td class="paramname"><em>filter</em>&#160;</td>
255 </tr>
256 <tr>
257 <td></td>
258 <td>)</td>
259 <td></td><td></td>
260 </tr>
261 </table>
262 </div><div class="memdoc">
263
264 <p>Get the current filtering for the given object type. </p>
265
266 </div>
267 </div>
268 <a id="ga91f992f8d6c4905b2d3c4f43e509c2a3"></a>
269 <h2 class="memtitle"><span class="permalink"><a href="#ga91f992f8d6c4905b2d3c4f43e509c2a3">&#9670;&nbsp;</a></span>hwloc_topology_get_userdata()</h2>
270
271 <div class="memitem">
272 <div class="memproto">
273 <table class="memname">
274 <tr>
275 <td class="memname">void* hwloc_topology_get_userdata </td>
276 <td>(</td>
277 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
278 <td class="paramname"><em>topology</em></td><td>)</td>
279 <td></td>
280 </tr>
281 </table>
282 </div><div class="memdoc">
283
284 <p>Retrieve the topology-specific userdata pointer. </p>
285 <p>Retrieve the application-given private data pointer that was previously set with <a class="el" href="a00199.html#ga2cc7b7b155cba58dda203e54f1637b9c" title="Set the topology-specific userdata pointer.">hwloc_topology_set_userdata()</a>. </p>
286
287 </div>
288 </div>
289 <a id="ga68ffdcfd9175cdf40709801092f18017"></a>
290 <h2 class="memtitle"><span class="permalink"><a href="#ga68ffdcfd9175cdf40709801092f18017">&#9670;&nbsp;</a></span>hwloc_topology_is_thissystem()</h2>
291
292 <div class="memitem">
293 <div class="memproto">
294 <table class="memname">
295 <tr>
296 <td class="memname">int hwloc_topology_is_thissystem </td>
297 <td>(</td>
298 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict&#160;</td>
299 <td class="paramname"><em>topology</em></td><td>)</td>
300 <td></td>
301 </tr>
302 </table>
303 </div><div class="memdoc">
304
305 <p>Does the topology context come from this system? </p>
306 <dl class="section return"><dt>Returns</dt><dd>1 if this topology context was built using the system running this program. </dd>
307 <dd>
308 0 instead (for instance if using another file-system root, a XML topology file, or a synthetic topology). </dd></dl>
309
310 </div>
311 </div>
312 <a id="ga9eb8dc3b106f84921bf5789101e97e24"></a>
313 <h2 class="memtitle"><span class="permalink"><a href="#ga9eb8dc3b106f84921bf5789101e97e24">&#9670;&nbsp;</a></span>hwloc_topology_set_all_types_filter()</h2>
314
315 <div class="memitem">
316 <div class="memproto">
317 <table class="memname">
318 <tr>
319 <td class="memname">int hwloc_topology_set_all_types_filter </td>
320 <td>(</td>
321 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
322 <td class="paramname"><em>topology</em>, </td>
323 </tr>
324 <tr>
325 <td class="paramkey"></td>
326 <td></td>
327 <td class="paramtype">enum <a class="el" href="a00199.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a>&#160;</td>
328 <td class="paramname"><em>filter</em>&#160;</td>
329 </tr>
330 <tr>
331 <td></td>
332 <td>)</td>
333 <td></td><td></td>
334 </tr>
335 </table>
336 </div><div class="memdoc">
337
338 <p>Set the filtering for all object types. </p>
339 <p>If some types do not support this filtering, they are silently ignored. </p>
340
341 </div>
342 </div>
343 <a id="ga30bd6d330fe3c8f0cbaad724d114ee20"></a>
344 <h2 class="memtitle"><span class="permalink"><a href="#ga30bd6d330fe3c8f0cbaad724d114ee20">&#9670;&nbsp;</a></span>hwloc_topology_set_cache_types_filter()</h2>
345
346 <div class="memitem">
347 <div class="memproto">
348 <table class="memname">
349 <tr>
350 <td class="memname">int hwloc_topology_set_cache_types_filter </td>
351 <td>(</td>
352 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
353 <td class="paramname"><em>topology</em>, </td>
354 </tr>
355 <tr>
356 <td class="paramkey"></td>
357 <td></td>
358 <td class="paramtype">enum <a class="el" href="a00199.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a>&#160;</td>
359 <td class="paramname"><em>filter</em>&#160;</td>
360 </tr>
361 <tr>
362 <td></td>
363 <td>)</td>
364 <td></td><td></td>
365 </tr>
366 </table>
367 </div><div class="memdoc">
368
369 <p>Set the filtering for all CPU cache object types. </p>
370 <p>Memory-side caches are not involved since they are not CPU caches. </p>
371
372 </div>
373 </div>
374 <a id="gaaeed4df656979e5f16befea9d29b814b"></a>
375 <h2 class="memtitle"><span class="permalink"><a href="#gaaeed4df656979e5f16befea9d29b814b">&#9670;&nbsp;</a></span>hwloc_topology_set_flags()</h2>
376
377 <div class="memitem">
378 <div class="memproto">
379 <table class="memname">
380 <tr>
381 <td class="memname">int hwloc_topology_set_flags </td>
382 <td>(</td>
383 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
384 <td class="paramname"><em>topology</em>, </td>
385 </tr>
386 <tr>
387 <td class="paramkey"></td>
388 <td></td>
389 <td class="paramtype">unsigned long&#160;</td>
390 <td class="paramname"><em>flags</em>&#160;</td>
391 </tr>
392 <tr>
393 <td></td>
394 <td>)</td>
395 <td></td><td></td>
396 </tr>
397 </table>
398 </div><div class="memdoc">
399
400 <p>Set OR'ed flags to non-yet-loaded topology. </p>
401 <p>Set a OR'ed set of <a class="el" href="a00199.html#gada025d3ec20b4b420f8038d23d6e7bde" title="Flags to be set onto a topology context before load.">hwloc_topology_flags_e</a> onto a topology that was not yet loaded.</p>
402 <p>If this function is called multiple times, the last invokation will erase and replace the set of flags that was previously set.</p>
403 <p>The flags set in a topology may be retrieved with <a class="el" href="a00199.html#ga09318f81c1d4713be907d64748a6f93c" title="Get OR&#39;ed flags of a topology.">hwloc_topology_get_flags()</a> </p>
404
405 </div>
406 </div>
407 <a id="ga37c7b2e599ed3cd76ad9164630024f30"></a>
408 <h2 class="memtitle"><span class="permalink"><a href="#ga37c7b2e599ed3cd76ad9164630024f30">&#9670;&nbsp;</a></span>hwloc_topology_set_icache_types_filter()</h2>
409
410 <div class="memitem">
411 <div class="memproto">
412 <table class="memname">
413 <tr>
414 <td class="memname">int hwloc_topology_set_icache_types_filter </td>
415 <td>(</td>
416 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
417 <td class="paramname"><em>topology</em>, </td>
418 </tr>
419 <tr>
420 <td class="paramkey"></td>
421 <td></td>
422 <td class="paramtype">enum <a class="el" href="a00199.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a>&#160;</td>
423 <td class="paramname"><em>filter</em>&#160;</td>
424 </tr>
425 <tr>
426 <td></td>
427 <td>)</td>
428 <td></td><td></td>
429 </tr>
430 </table>
431 </div><div class="memdoc">
432
433 <p>Set the filtering for all CPU instruction cache object types. </p>
434 <p>Memory-side caches are not involved since they are not CPU caches. </p>
435
436 </div>
437 </div>
438 <a id="ga0ab38705357bc1203abe829da8a12ad3"></a>
439 <h2 class="memtitle"><span class="permalink"><a href="#ga0ab38705357bc1203abe829da8a12ad3">&#9670;&nbsp;</a></span>hwloc_topology_set_io_types_filter()</h2>
440
441 <div class="memitem">
442 <div class="memproto">
443 <table class="memname">
444 <tr>
445 <td class="memname">int hwloc_topology_set_io_types_filter </td>
446 <td>(</td>
447 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
448 <td class="paramname"><em>topology</em>, </td>
449 </tr>
450 <tr>
451 <td class="paramkey"></td>
452 <td></td>
453 <td class="paramtype">enum <a class="el" href="a00199.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a>&#160;</td>
454 <td class="paramname"><em>filter</em>&#160;</td>
455 </tr>
456 <tr>
457 <td></td>
458 <td>)</td>
459 <td></td><td></td>
460 </tr>
461 </table>
462 </div><div class="memdoc">
463
464 <p>Set the filtering for all I/O object types. </p>
465
466 </div>
467 </div>
468 <a id="gad894e70f15f8d4aada7be8d1aba38b7e"></a>
469 <h2 class="memtitle"><span class="permalink"><a href="#gad894e70f15f8d4aada7be8d1aba38b7e">&#9670;&nbsp;</a></span>hwloc_topology_set_type_filter()</h2>
470
471 <div class="memitem">
472 <div class="memproto">
473 <table class="memname">
474 <tr>
475 <td class="memname">int hwloc_topology_set_type_filter </td>
476 <td>(</td>
477 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
478 <td class="paramname"><em>topology</em>, </td>
479 </tr>
480 <tr>
481 <td class="paramkey"></td>
482 <td></td>
483 <td class="paramtype"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
484 <td class="paramname"><em>type</em>, </td>
485 </tr>
486 <tr>
487 <td class="paramkey"></td>
488 <td></td>
489 <td class="paramtype">enum <a class="el" href="a00199.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a>&#160;</td>
490 <td class="paramname"><em>filter</em>&#160;</td>
491 </tr>
492 <tr>
493 <td></td>
494 <td>)</td>
495 <td></td><td></td>
496 </tr>
497 </table>
498 </div><div class="memdoc">
499
500 <p>Set the filtering for the given object type. </p>
501
502 </div>
503 </div>
504 <a id="ga2cc7b7b155cba58dda203e54f1637b9c"></a>
505 <h2 class="memtitle"><span class="permalink"><a href="#ga2cc7b7b155cba58dda203e54f1637b9c">&#9670;&nbsp;</a></span>hwloc_topology_set_userdata()</h2>
506
507 <div class="memitem">
508 <div class="memproto">
509 <table class="memname">
510 <tr>
511 <td class="memname">void hwloc_topology_set_userdata </td>
512 <td>(</td>
513 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
514 <td class="paramname"><em>topology</em>, </td>
515 </tr>
516 <tr>
517 <td class="paramkey"></td>
518 <td></td>
519 <td class="paramtype">const void *&#160;</td>
520 <td class="paramname"><em>userdata</em>&#160;</td>
521 </tr>
522 <tr>
523 <td></td>
524 <td>)</td>
525 <td></td><td></td>
526 </tr>
527 </table>
528 </div><div class="memdoc">
529
530 <p>Set the topology-specific userdata pointer. </p>
531 <p>Each topology may store one application-given private data pointer. It is initialized to <code>NULL</code>. hwloc will never modify it.</p>
532 <p>Use it as you wish, after <a class="el" href="a00192.html#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa" title="Allocate a topology context.">hwloc_topology_init()</a> and until hwloc_topolog_destroy().</p>
533 <p>This pointer is not exported to XML. </p>
131 <a id="gacba7ecb979baf824d5240fa2cb2a8be6"></a>
132 <h2 class="memtitle"><span class="permalink"><a href="#gacba7ecb979baf824d5240fa2cb2a8be6">&#9670;&nbsp;</a></span>hwloc_get_cpubind()</h2>
133
134 <div class="memitem">
135 <div class="memproto">
136 <table class="memname">
137 <tr>
138 <td class="memname">int hwloc_get_cpubind </td>
139 <td>(</td>
140 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
141 <td class="paramname"><em>topology</em>, </td>
142 </tr>
143 <tr>
144 <td class="paramkey"></td>
145 <td></td>
146 <td class="paramtype"><a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
147 <td class="paramname"><em>set</em>, </td>
148 </tr>
149 <tr>
150 <td class="paramkey"></td>
151 <td></td>
152 <td class="paramtype">int&#160;</td>
153 <td class="paramname"><em>flags</em>&#160;</td>
154 </tr>
155 <tr>
156 <td></td>
157 <td>)</td>
158 <td></td><td></td>
159 </tr>
160 </table>
161 </div><div class="memdoc">
162
163 <p>Get current process or thread binding. </p>
164 <p>Writes into <code>set</code> the physical cpuset which the process or thread (according to <em>flags</em>) was last bound to. </p>
165
166 </div>
167 </div>
168 <a id="gafdb374627358bf09203b5a4215b13032"></a>
169 <h2 class="memtitle"><span class="permalink"><a href="#gafdb374627358bf09203b5a4215b13032">&#9670;&nbsp;</a></span>hwloc_get_last_cpu_location()</h2>
170
171 <div class="memitem">
172 <div class="memproto">
173 <table class="memname">
174 <tr>
175 <td class="memname">int hwloc_get_last_cpu_location </td>
176 <td>(</td>
177 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
178 <td class="paramname"><em>topology</em>, </td>
179 </tr>
180 <tr>
181 <td class="paramkey"></td>
182 <td></td>
183 <td class="paramtype"><a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
184 <td class="paramname"><em>set</em>, </td>
185 </tr>
186 <tr>
187 <td class="paramkey"></td>
188 <td></td>
189 <td class="paramtype">int&#160;</td>
190 <td class="paramname"><em>flags</em>&#160;</td>
191 </tr>
192 <tr>
193 <td></td>
194 <td>)</td>
195 <td></td><td></td>
196 </tr>
197 </table>
198 </div><div class="memdoc">
199
200 <p>Get the last physical CPU where the current process or thread ran. </p>
201 <p>The operating system may move some tasks from one processor to another at any time according to their binding, so this function may return something that is already outdated.</p>
202 <p><code>flags</code> can include either <a class="el" href="a00199.html#gga217dc8d373f8958cc93c154ebce1c71ca2e0dd0128dac6b03408c7dd170477fdc" title="Bind all threads of the current (possibly) multithreaded process.">HWLOC_CPUBIND_PROCESS</a> or <a class="el" href="a00199.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421" title="Bind current thread of current process.">HWLOC_CPUBIND_THREAD</a> to specify whether the query should be for the whole process (union of all CPUs on which all threads are running), or only the current thread. If the process is single-threaded, flags can be set to zero to let hwloc use whichever method is available on the underlying OS. </p>
203
204 </div>
205 </div>
206 <a id="gac82de91f788fa82dacf99c6e0d4b7158"></a>
207 <h2 class="memtitle"><span class="permalink"><a href="#gac82de91f788fa82dacf99c6e0d4b7158">&#9670;&nbsp;</a></span>hwloc_get_proc_cpubind()</h2>
208
209 <div class="memitem">
210 <div class="memproto">
211 <table class="memname">
212 <tr>
213 <td class="memname">int hwloc_get_proc_cpubind </td>
214 <td>(</td>
215 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
216 <td class="paramname"><em>topology</em>, </td>
217 </tr>
218 <tr>
219 <td class="paramkey"></td>
220 <td></td>
221 <td class="paramtype">hwloc_pid_t&#160;</td>
222 <td class="paramname"><em>pid</em>, </td>
223 </tr>
224 <tr>
225 <td class="paramkey"></td>
226 <td></td>
227 <td class="paramtype"><a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
228 <td class="paramname"><em>set</em>, </td>
229 </tr>
230 <tr>
231 <td class="paramkey"></td>
232 <td></td>
233 <td class="paramtype">int&#160;</td>
234 <td class="paramname"><em>flags</em>&#160;</td>
235 </tr>
236 <tr>
237 <td></td>
238 <td>)</td>
239 <td></td><td></td>
240 </tr>
241 </table>
242 </div><div class="memdoc">
243
244 <p>Get the current physical binding of process <code>pid</code>. </p>
245 <dl class="section note"><dt>Note</dt><dd><code>hwloc_pid_t</code> is <code>pid_t</code> on Unix platforms, and <code>HANDLE</code> on native Windows platforms.</dd>
246 <dd>
247 As a special case on Linux, if a tid (thread ID) is supplied instead of a pid (process ID) and HWLOC_CPUBIND_THREAD is passed in flags, the binding for that specific thread is returned.</dd>
248 <dd>
249 On non-Linux systems, HWLOC_CPUBIND_THREAD can not be used in <code>flags</code>. </dd></dl>
250
251 </div>
252 </div>
253 <a id="ga910a05c2d47f68a3155bf176b50fa555"></a>
254 <h2 class="memtitle"><span class="permalink"><a href="#ga910a05c2d47f68a3155bf176b50fa555">&#9670;&nbsp;</a></span>hwloc_get_proc_last_cpu_location()</h2>
255
256 <div class="memitem">
257 <div class="memproto">
258 <table class="memname">
259 <tr>
260 <td class="memname">int hwloc_get_proc_last_cpu_location </td>
261 <td>(</td>
262 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
263 <td class="paramname"><em>topology</em>, </td>
264 </tr>
265 <tr>
266 <td class="paramkey"></td>
267 <td></td>
268 <td class="paramtype">hwloc_pid_t&#160;</td>
269 <td class="paramname"><em>pid</em>, </td>
270 </tr>
271 <tr>
272 <td class="paramkey"></td>
273 <td></td>
274 <td class="paramtype"><a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
275 <td class="paramname"><em>set</em>, </td>
276 </tr>
277 <tr>
278 <td class="paramkey"></td>
279 <td></td>
280 <td class="paramtype">int&#160;</td>
281 <td class="paramname"><em>flags</em>&#160;</td>
282 </tr>
283 <tr>
284 <td></td>
285 <td>)</td>
286 <td></td><td></td>
287 </tr>
288 </table>
289 </div><div class="memdoc">
290
291 <p>Get the last physical CPU where a process ran. </p>
292 <p>The operating system may move some tasks from one processor to another at any time according to their binding, so this function may return something that is already outdated.</p>
293 <dl class="section note"><dt>Note</dt><dd><code>hwloc_pid_t</code> is <code>pid_t</code> on Unix platforms, and <code>HANDLE</code> on native Windows platforms.</dd>
294 <dd>
295 As a special case on Linux, if a tid (thread ID) is supplied instead of a pid (process ID) and <a class="el" href="a00199.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421" title="Bind current thread of current process.">HWLOC_CPUBIND_THREAD</a> is passed in flags, the last CPU location of that specific thread is returned.</dd>
296 <dd>
297 On non-Linux systems, <a class="el" href="a00199.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421" title="Bind current thread of current process.">HWLOC_CPUBIND_THREAD</a> can not be used in <code>flags</code>. </dd></dl>
298
299 </div>
300 </div>
301 <a id="gaf13f765642b5d0d9a9813e6bb043671b"></a>
302 <h2 class="memtitle"><span class="permalink"><a href="#gaf13f765642b5d0d9a9813e6bb043671b">&#9670;&nbsp;</a></span>hwloc_get_thread_cpubind()</h2>
303
304 <div class="memitem">
305 <div class="memproto">
306 <table class="memname">
307 <tr>
308 <td class="memname">int hwloc_get_thread_cpubind </td>
309 <td>(</td>
310 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
311 <td class="paramname"><em>topology</em>, </td>
312 </tr>
313 <tr>
314 <td class="paramkey"></td>
315 <td></td>
316 <td class="paramtype">hwloc_thread_t&#160;</td>
317 <td class="paramname"><em>thread</em>, </td>
318 </tr>
319 <tr>
320 <td class="paramkey"></td>
321 <td></td>
322 <td class="paramtype"><a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
323 <td class="paramname"><em>set</em>, </td>
324 </tr>
325 <tr>
326 <td class="paramkey"></td>
327 <td></td>
328 <td class="paramtype">int&#160;</td>
329 <td class="paramname"><em>flags</em>&#160;</td>
330 </tr>
331 <tr>
332 <td></td>
333 <td>)</td>
334 <td></td><td></td>
335 </tr>
336 </table>
337 </div><div class="memdoc">
338
339 <p>Get the current physical binding of thread <code>tid</code>. </p>
340 <dl class="section note"><dt>Note</dt><dd><code>hwloc_thread_t</code> is <code>pthread_t</code> on Unix platforms, and <code>HANDLE</code> on native Windows platforms.</dd>
341 <dd>
342 <a class="el" href="a00199.html#gga217dc8d373f8958cc93c154ebce1c71ca2e0dd0128dac6b03408c7dd170477fdc" title="Bind all threads of the current (possibly) multithreaded process.">HWLOC_CPUBIND_PROCESS</a> can not be used in <code>flags</code>. </dd></dl>
343
344 </div>
345 </div>
346 <a id="ga80bc07473a8edf840cae17bd7ec21d48"></a>
347 <h2 class="memtitle"><span class="permalink"><a href="#ga80bc07473a8edf840cae17bd7ec21d48">&#9670;&nbsp;</a></span>hwloc_set_cpubind()</h2>
348
349 <div class="memitem">
350 <div class="memproto">
351 <table class="memname">
352 <tr>
353 <td class="memname">int hwloc_set_cpubind </td>
354 <td>(</td>
355 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
356 <td class="paramname"><em>topology</em>, </td>
357 </tr>
358 <tr>
359 <td class="paramkey"></td>
360 <td></td>
361 <td class="paramtype"><a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
362 <td class="paramname"><em>set</em>, </td>
363 </tr>
364 <tr>
365 <td class="paramkey"></td>
366 <td></td>
367 <td class="paramtype">int&#160;</td>
368 <td class="paramname"><em>flags</em>&#160;</td>
369 </tr>
370 <tr>
371 <td></td>
372 <td>)</td>
373 <td></td><td></td>
374 </tr>
375 </table>
376 </div><div class="memdoc">
377
378 <p>Bind current process or thread on cpus given in physical bitmap <code>set</code>. </p>
379 <dl class="section return"><dt>Returns</dt><dd>-1 with errno set to ENOSYS if the action is not supported </dd>
380 <dd>
381 -1 with errno set to EXDEV if the binding cannot be enforced </dd></dl>
382
383 </div>
384 </div>
385 <a id="ga296db8a3c6d49b51fb83d6f3e45c02a6"></a>
386 <h2 class="memtitle"><span class="permalink"><a href="#ga296db8a3c6d49b51fb83d6f3e45c02a6">&#9670;&nbsp;</a></span>hwloc_set_proc_cpubind()</h2>
387
388 <div class="memitem">
389 <div class="memproto">
390 <table class="memname">
391 <tr>
392 <td class="memname">int hwloc_set_proc_cpubind </td>
393 <td>(</td>
394 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
395 <td class="paramname"><em>topology</em>, </td>
396 </tr>
397 <tr>
398 <td class="paramkey"></td>
399 <td></td>
400 <td class="paramtype">hwloc_pid_t&#160;</td>
401 <td class="paramname"><em>pid</em>, </td>
402 </tr>
403 <tr>
404 <td class="paramkey"></td>
405 <td></td>
406 <td class="paramtype"><a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
407 <td class="paramname"><em>set</em>, </td>
408 </tr>
409 <tr>
410 <td class="paramkey"></td>
411 <td></td>
412 <td class="paramtype">int&#160;</td>
413 <td class="paramname"><em>flags</em>&#160;</td>
414 </tr>
415 <tr>
416 <td></td>
417 <td>)</td>
418 <td></td><td></td>
419 </tr>
420 </table>
421 </div><div class="memdoc">
422
423 <p>Bind a process <code>pid</code> on cpus given in physical bitmap <code>set</code>. </p>
424 <dl class="section note"><dt>Note</dt><dd><code>hwloc_pid_t</code> is <code>pid_t</code> on Unix platforms, and <code>HANDLE</code> on native Windows platforms.</dd>
425 <dd>
426 As a special case on Linux, if a tid (thread ID) is supplied instead of a pid (process ID) and <a class="el" href="a00199.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421" title="Bind current thread of current process.">HWLOC_CPUBIND_THREAD</a> is passed in flags, the binding is applied to that specific thread.</dd>
427 <dd>
428 On non-Linux systems, <a class="el" href="a00199.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421" title="Bind current thread of current process.">HWLOC_CPUBIND_THREAD</a> can not be used in <code>flags</code>. </dd></dl>
429
430 </div>
431 </div>
432 <a id="gae42c01b2addcfbf6048b9a516dd7a906"></a>
433 <h2 class="memtitle"><span class="permalink"><a href="#gae42c01b2addcfbf6048b9a516dd7a906">&#9670;&nbsp;</a></span>hwloc_set_thread_cpubind()</h2>
434
435 <div class="memitem">
436 <div class="memproto">
437 <table class="memname">
438 <tr>
439 <td class="memname">int hwloc_set_thread_cpubind </td>
440 <td>(</td>
441 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
442 <td class="paramname"><em>topology</em>, </td>
443 </tr>
444 <tr>
445 <td class="paramkey"></td>
446 <td></td>
447 <td class="paramtype">hwloc_thread_t&#160;</td>
448 <td class="paramname"><em>thread</em>, </td>
449 </tr>
450 <tr>
451 <td class="paramkey"></td>
452 <td></td>
453 <td class="paramtype"><a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
454 <td class="paramname"><em>set</em>, </td>
455 </tr>
456 <tr>
457 <td class="paramkey"></td>
458 <td></td>
459 <td class="paramtype">int&#160;</td>
460 <td class="paramname"><em>flags</em>&#160;</td>
461 </tr>
462 <tr>
463 <td></td>
464 <td>)</td>
465 <td></td><td></td>
466 </tr>
467 </table>
468 </div><div class="memdoc">
469
470 <p>Bind a thread <code>thread</code> on cpus given in physical bitmap <code>set</code>. </p>
471 <dl class="section note"><dt>Note</dt><dd><code>hwloc_thread_t</code> is <code>pthread_t</code> on Unix platforms, and <code>HANDLE</code> on native Windows platforms.</dd>
472 <dd>
473 <a class="el" href="a00199.html#gga217dc8d373f8958cc93c154ebce1c71ca2e0dd0128dac6b03408c7dd170477fdc" title="Bind all threads of the current (possibly) multithreaded process.">HWLOC_CPUBIND_PROCESS</a> can not be used in <code>flags</code>. </dd></dl>
534474
535475 </div>
536476 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Modifying a loaded Topology</title>
7 <title>Hardware Locality (hwloc): Memory binding</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4242 <a href="#enum-members">Enumerations</a> &#124;
4343 <a href="#func-members">Functions</a> </div>
4444 <div class="headertitle">
45 <div class="title">Modifying a loaded Topology</div> </div>
45 <div class="title">Memory binding</div> </div>
4646 </div><!--header-->
4747 <div class="contents">
4848 <table class="memberdecls">
4949 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
5050 Enumerations</h2></td></tr>
51 <tr class="memitem:ga9d80f08eb25b7ac22f1b998dc8bf521f"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html#ga9d80f08eb25b7ac22f1b998dc8bf521f">hwloc_restrict_flags_e</a> { <br />
52 &#160;&#160;<a class="el" href="a00200.html#gga9d80f08eb25b7ac22f1b998dc8bf521fa80eeb9cbba401ab050f8fb4573725891">HWLOC_RESTRICT_FLAG_REMOVE_CPULESS</a>
53 , <a class="el" href="a00200.html#gga9d80f08eb25b7ac22f1b998dc8bf521fae4c5b1b87232f2d8a60559e77ac65a68">HWLOC_RESTRICT_FLAG_BYNODESET</a> = (1UL&lt;&lt;3)
54 , <a class="el" href="a00200.html#gga9d80f08eb25b7ac22f1b998dc8bf521faf5ba49808855704bfe9cb9fe7347f93b">HWLOC_RESTRICT_FLAG_REMOVE_MEMLESS</a>
55 , <a class="el" href="a00200.html#gga9d80f08eb25b7ac22f1b998dc8bf521fa699969227a09bbc1a7de51dc9fb7be4b">HWLOC_RESTRICT_FLAG_ADAPT_MISC</a>
51 <tr class="memitem:gac9764f79505775d06407b40f5e4661e8"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> { <br />
52 &#160;&#160;<a class="el" href="a00200.html#ggac9764f79505775d06407b40f5e4661e8a18675bb80ebc1bce5b652e9de8f3998c">HWLOC_MEMBIND_DEFAULT</a>
53 , <a class="el" href="a00200.html#ggac9764f79505775d06407b40f5e4661e8a979c7aa78dd32780858f30f47a72cca0">HWLOC_MEMBIND_FIRSTTOUCH</a>
54 , <a class="el" href="a00200.html#ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c">HWLOC_MEMBIND_BIND</a>
55 , <a class="el" href="a00200.html#ggac9764f79505775d06407b40f5e4661e8ae370075e5af016d42310f87ea5af236b">HWLOC_MEMBIND_INTERLEAVE</a>
5656 , <br />
57 &#160;&#160;<a class="el" href="a00200.html#gga9d80f08eb25b7ac22f1b998dc8bf521faa95d6985e36ec1e55f68b210297a85cb">HWLOC_RESTRICT_FLAG_ADAPT_IO</a>
57 &#160;&#160;<a class="el" href="a00200.html#ggac9764f79505775d06407b40f5e4661e8aecdd4164d647708fbb51a00d98dbb138">HWLOC_MEMBIND_NEXTTOUCH</a>
58 , <a class="el" href="a00200.html#ggac9764f79505775d06407b40f5e4661e8a3185bd869b67817fb2bd5164bf360402">HWLOC_MEMBIND_MIXED</a>
5859 <br />
5960 }</td></tr>
60 <tr class="separator:ga9d80f08eb25b7ac22f1b998dc8bf521f"><td class="memSeparator" colspan="2">&#160;</td></tr>
61 <tr class="memitem:ga38b1be3922094d880f6e76bf56c973d6"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html#ga38b1be3922094d880f6e76bf56c973d6">hwloc_allow_flags_e</a> { <a class="el" href="a00200.html#gga38b1be3922094d880f6e76bf56c973d6aca107692455774f9d323d21b8abfce72">HWLOC_ALLOW_FLAG_ALL</a>
62 , <a class="el" href="a00200.html#gga38b1be3922094d880f6e76bf56c973d6a88c50088c09dcf1e1a496c0817556fb9">HWLOC_ALLOW_FLAG_LOCAL_RESTRICTIONS</a>
63 , <a class="el" href="a00200.html#gga38b1be3922094d880f6e76bf56c973d6a489c8c1b67ce7e0b8cf7a665852760e1">HWLOC_ALLOW_FLAG_CUSTOM</a>
61 <tr class="separator:gac9764f79505775d06407b40f5e4661e8"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:gab00475fd98815bf4fb9aaf752030e7d2"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html#gab00475fd98815bf4fb9aaf752030e7d2">hwloc_membind_flags_t</a> { <br />
63 &#160;&#160;<a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4">HWLOC_MEMBIND_PROCESS</a>
64 , <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298">HWLOC_MEMBIND_THREAD</a>
65 , <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a>
66 , <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2aa6e49e54f52827cb143cc869cfd748af">HWLOC_MEMBIND_MIGRATE</a>
67 , <br />
68 &#160;&#160;<a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2aad6b9eaf2ee324ca58dc8f58094b9997">HWLOC_MEMBIND_NOCPUBIND</a>
69 , <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256">HWLOC_MEMBIND_BYNODESET</a>
70 <br />
6471 }</td></tr>
65 <tr class="separator:ga38b1be3922094d880f6e76bf56c973d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
72 <tr class="separator:gab00475fd98815bf4fb9aaf752030e7d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
6673 </table><table class="memberdecls">
6774 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
6875 Functions</h2></td></tr>
69 <tr class="memitem:ga6db81ed13ac0a9d70cc80372ab537815"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html#ga6db81ed13ac0a9d70cc80372ab537815">hwloc_topology_restrict</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict topology, <a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, unsigned long flags)</td></tr>
70 <tr class="separator:ga6db81ed13ac0a9d70cc80372ab537815"><td class="memSeparator" colspan="2">&#160;</td></tr>
71 <tr class="memitem:gaf955b190c0299dcfb5bc985d777f92a1"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html#gaf955b190c0299dcfb5bc985d777f92a1">hwloc_topology_allow</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict topology, <a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> cpuset, <a class="el" href="a00189.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> nodeset, unsigned long flags)</td></tr>
72 <tr class="separator:gaf955b190c0299dcfb5bc985d777f92a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
73 <tr class="memitem:gad980782ade737900c5cf208946768c30"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html#gad980782ade737900c5cf208946768c30">hwloc_topology_insert_misc_object</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> parent, const char *name)</td></tr>
74 <tr class="separator:gad980782ade737900c5cf208946768c30"><td class="memSeparator" colspan="2">&#160;</td></tr>
75 <tr class="memitem:ga4cea4741165faf5323931a9ed8786ef7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html#ga4cea4741165faf5323931a9ed8786ef7">hwloc_topology_alloc_group_object</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
76 <tr class="separator:ga4cea4741165faf5323931a9ed8786ef7"><td class="memSeparator" colspan="2">&#160;</td></tr>
77 <tr class="memitem:ga1fc6012b3e1c249b83f48cb7bcacaa5b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html#ga1fc6012b3e1c249b83f48cb7bcacaa5b">hwloc_topology_insert_group_object</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> group)</td></tr>
78 <tr class="separator:ga1fc6012b3e1c249b83f48cb7bcacaa5b"><td class="memSeparator" colspan="2">&#160;</td></tr>
79 <tr class="memitem:gad458715d3335df44849216cc123d1055"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html#gad458715d3335df44849216cc123d1055">hwloc_obj_add_other_obj_sets</a> (<a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> dst, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> src)</td></tr>
80 <tr class="separator:gad458715d3335df44849216cc123d1055"><td class="memSeparator" colspan="2">&#160;</td></tr>
81 <tr class="memitem:ga698ecd640d2b76742bba3829a145cd9a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html#ga698ecd640d2b76742bba3829a145cd9a">hwloc_topology_refresh</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
82 <tr class="separator:ga698ecd640d2b76742bba3829a145cd9a"><td class="memSeparator" colspan="2">&#160;</td></tr>
76 <tr class="memitem:ga020951efa0ce3862bd4faec295501a7f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html#ga020951efa0ce3862bd4faec295501a7f">hwloc_set_membind</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, <a class="el" href="a00200.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> policy, int flags)</td></tr>
77 <tr class="separator:ga020951efa0ce3862bd4faec295501a7f"><td class="memSeparator" colspan="2">&#160;</td></tr>
78 <tr class="memitem:gae21f0a1a884929c784bebf070252aa56"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html#gae21f0a1a884929c784bebf070252aa56">hwloc_get_membind</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set, <a class="el" href="a00200.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> *policy, int flags)</td></tr>
79 <tr class="separator:gae21f0a1a884929c784bebf070252aa56"><td class="memSeparator" colspan="2">&#160;</td></tr>
80 <tr class="memitem:gabc91ff16f7e41047924e3a4ae6d9da7e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html#gabc91ff16f7e41047924e3a4ae6d9da7e">hwloc_set_proc_membind</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_pid_t pid, <a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, <a class="el" href="a00200.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> policy, int flags)</td></tr>
81 <tr class="separator:gabc91ff16f7e41047924e3a4ae6d9da7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
82 <tr class="memitem:ga1730ceb18ec6ee3b7bd3d0db81f07dc8"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html#ga1730ceb18ec6ee3b7bd3d0db81f07dc8">hwloc_get_proc_membind</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, hwloc_pid_t pid, <a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set, <a class="el" href="a00200.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> *policy, int flags)</td></tr>
83 <tr class="separator:ga1730ceb18ec6ee3b7bd3d0db81f07dc8"><td class="memSeparator" colspan="2">&#160;</td></tr>
84 <tr class="memitem:gaf881faefe20701229f07dd7dbd0125ed"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html#gaf881faefe20701229f07dd7dbd0125ed">hwloc_set_area_membind</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const void *addr, size_t len, <a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, <a class="el" href="a00200.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> policy, int flags)</td></tr>
85 <tr class="separator:gaf881faefe20701229f07dd7dbd0125ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
86 <tr class="memitem:gaa87e0a6946ff145914fdf0b1c60567f8"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html#gaa87e0a6946ff145914fdf0b1c60567f8">hwloc_get_area_membind</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const void *addr, size_t len, <a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set, <a class="el" href="a00200.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> *policy, int flags)</td></tr>
87 <tr class="separator:gaa87e0a6946ff145914fdf0b1c60567f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
88 <tr class="memitem:ga537c7508a4e2d1db05673ec5be6e805c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html#ga537c7508a4e2d1db05673ec5be6e805c">hwloc_get_area_memlocation</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const void *addr, size_t len, <a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set, int flags)</td></tr>
89 <tr class="separator:ga537c7508a4e2d1db05673ec5be6e805c"><td class="memSeparator" colspan="2">&#160;</td></tr>
90 <tr class="memitem:ga972b335a86a7d5e7b34bce2b243c41bc"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html#ga972b335a86a7d5e7b34bce2b243c41bc">hwloc_alloc</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, size_t len)</td></tr>
91 <tr class="separator:ga972b335a86a7d5e7b34bce2b243c41bc"><td class="memSeparator" colspan="2">&#160;</td></tr>
92 <tr class="memitem:ga04736461780fadcf193af218c0122273"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html#ga04736461780fadcf193af218c0122273">hwloc_alloc_membind</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, size_t len, <a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, <a class="el" href="a00200.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> policy, int flags)</td></tr>
93 <tr class="separator:ga04736461780fadcf193af218c0122273"><td class="memSeparator" colspan="2">&#160;</td></tr>
94 <tr class="memitem:gab1b77b8408bacaf03c7e8878f7577922"><td class="memItemLeft" align="right" valign="top">static void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html#gab1b77b8408bacaf03c7e8878f7577922">hwloc_alloc_membind_policy</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, size_t len, <a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, <a class="el" href="a00200.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> policy, int flags)</td></tr>
95 <tr class="separator:gab1b77b8408bacaf03c7e8878f7577922"><td class="memSeparator" colspan="2">&#160;</td></tr>
96 <tr class="memitem:ga32dbd4f54e9e4a7179f2dde37ffe6ad7"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00200.html#ga32dbd4f54e9e4a7179f2dde37ffe6ad7">hwloc_free</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, void *addr, size_t len)</td></tr>
97 <tr class="separator:ga32dbd4f54e9e4a7179f2dde37ffe6ad7"><td class="memSeparator" colspan="2">&#160;</td></tr>
8398 </table>
8499 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
100 <p>Memory binding can be done three ways:</p>
101 <ul>
102 <li>explicit memory allocation thanks to <a class="el" href="a00200.html#ga04736461780fadcf193af218c0122273" title="Allocate some memory on NUMA memory nodes specified by set.">hwloc_alloc_membind()</a> and friends: the binding will have effect on the memory allocated by these functions.</li>
103 <li>implicit memory binding through binding policy: <a class="el" href="a00200.html#ga020951efa0ce3862bd4faec295501a7f" title="Set the default memory binding policy of the current process or thread to prefer the NUMA node(s) spe...">hwloc_set_membind()</a> and friends only define the current policy of the process, which will be applied to the subsequent calls to malloc() and friends.</li>
104 <li>migration of existing memory ranges, thanks to <a class="el" href="a00200.html#gaf881faefe20701229f07dd7dbd0125ed" title="Bind the already-allocated memory identified by (addr, len) to the NUMA node(s) specified by set.">hwloc_set_area_membind()</a> and friends, which move already-allocated data.</li>
105 </ul>
106 <p>Not all operating systems support all three ways. <a class="el" href="a00202.html#gab8c76173c4a8ce1a9a9366012b1388e6" title="Retrieve the topology support.">hwloc_topology_get_support()</a> may be used to query about the actual memory binding support in the currently used operating system.</p>
107 <p>When the requested binding operation is not available and the <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a> flag was passed, the function returns -1. <code>errno</code> will be set to <code>ENOSYS</code> 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). <code>errno</code> 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).</p>
108 <p>If <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a> 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.</p>
109 <p>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 <a class="el" href="a00200.html#ga04736461780fadcf193af218c0122273" title="Allocate some memory on NUMA memory nodes specified by set.">hwloc_alloc_membind()</a>, which will never change the current memory binding policy.</p>
110 <div class="fragment"><div class="line"><a class="code" href="a00200.html#gab1b77b8408bacaf03c7e8878f7577922">hwloc_alloc_membind_policy</a>(topology, size, set,</div>
111 <div class="line"> <a class="code" href="a00200.html#ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c">HWLOC_MEMBIND_BIND</a>, 0);</div>
112 <div class="ttc" id="aa00200_html_gab1b77b8408bacaf03c7e8878f7577922"><div class="ttname"><a href="a00200.html#gab1b77b8408bacaf03c7e8878f7577922">hwloc_alloc_membind_policy</a></div><div class="ttdeci">static void * hwloc_alloc_membind_policy(hwloc_topology_t topology, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)</div><div class="ttdoc">Allocate some memory on NUMA memory nodes specified by set.</div></div>
113 <div class="ttc" id="aa00200_html_ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c"><div class="ttname"><a href="a00200.html#ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c">HWLOC_MEMBIND_BIND</a></div><div class="ttdeci">@ HWLOC_MEMBIND_BIND</div><div class="ttdoc">Allocate memory on the specified nodes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1403</div></div>
114 </div><!-- fragment --><p>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 <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256" title="Consider the bitmap argument as a nodeset.">HWLOC_MEMBIND_BYNODESET</a> is specified. See <a class="el" href="a00192.html">Object Sets (hwloc_cpuset_t and hwloc_nodeset_t)</a> and <a class="el" href="a00214.html">The bitmap API</a> for a discussion of CPU sets and NUMA memory node sets. It is also possible to convert between CPU set and node set using <a class="el" href="a00212.html#ga185751c1653fedbeb7cc480840f38cde" title="Convert a CPU set into a NUMA node set.">hwloc_cpuset_to_nodeset()</a> or <a class="el" href="a00212.html#gad5ee8691e08a3538ea7633344c00456d" title="Convert a NUMA node set into a CPU set.">hwloc_cpuset_from_nodeset()</a>.</p>
115 <p>Memory binding by CPU set cannot work for CPU-less NUMA memory nodes. Binding by nodeset should therefore be preferred whenever possible.</p>
116 <dl class="section see"><dt>See also</dt><dd>Some example codes are available under doc/examples/ in the source tree.</dd></dl>
117 <dl class="section note"><dt>Note</dt><dd>On some operating systems, memory binding affects the CPU binding; see <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2aad6b9eaf2ee324ca58dc8f58094b9997" title="Avoid any effect on CPU binding.">HWLOC_MEMBIND_NOCPUBIND</a> </dd></dl>
85118 <h2 class="groupheader">Enumeration Type Documentation</h2>
86 <a id="ga38b1be3922094d880f6e76bf56c973d6"></a>
87 <h2 class="memtitle"><span class="permalink"><a href="#ga38b1be3922094d880f6e76bf56c973d6">&#9670;&nbsp;</a></span>hwloc_allow_flags_e</h2>
88
89 <div class="memitem">
90 <div class="memproto">
91 <table class="memname">
92 <tr>
93 <td class="memname">enum <a class="el" href="a00200.html#ga38b1be3922094d880f6e76bf56c973d6">hwloc_allow_flags_e</a></td>
94 </tr>
95 </table>
96 </div><div class="memdoc">
97
98 <p>Flags to be given to <a class="el" href="a00200.html#gaf955b190c0299dcfb5bc985d777f92a1" title="Change the sets of allowed PUs and NUMA nodes in the topology.">hwloc_topology_allow()</a>. </p>
119 <a id="gab00475fd98815bf4fb9aaf752030e7d2"></a>
120 <h2 class="memtitle"><span class="permalink"><a href="#gab00475fd98815bf4fb9aaf752030e7d2">&#9670;&nbsp;</a></span>hwloc_membind_flags_t</h2>
121
122 <div class="memitem">
123 <div class="memproto">
124 <table class="memname">
125 <tr>
126 <td class="memname">enum <a class="el" href="a00200.html#gab00475fd98815bf4fb9aaf752030e7d2">hwloc_membind_flags_t</a></td>
127 </tr>
128 </table>
129 </div><div class="memdoc">
130
131 <p>Memory binding flags. </p>
132 <p>These flags can be used to refine the binding policy. All flags can be logically OR'ed together with the exception of <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4" title="Set policy for all threads of the specified (possibly multithreaded) process. This flag is mutually e...">HWLOC_MEMBIND_PROCESS</a> and <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298" title="Set policy for a specific thread of the current process. This flag is mutually exclusive with HWLOC_M...">HWLOC_MEMBIND_THREAD</a>; these two flags are mutually exclusive.</p>
133 <p>Not all systems support all kinds of binding. <a class="el" href="a00202.html#gab8c76173c4a8ce1a9a9366012b1388e6" title="Retrieve the topology support.">hwloc_topology_get_support()</a> may be used to query about the actual memory binding support in the currently used operating system. See the "Detailed Description" section of <a class="el" href="a00200.html">Memory binding</a> for a description of errors that can occur. </p>
99134 <table class="fieldtable">
100 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga38b1be3922094d880f6e76bf56c973d6aca107692455774f9d323d21b8abfce72"></a>HWLOC_ALLOW_FLAG_ALL&#160;</td><td class="fielddoc"><p>Mark all objects as allowed in the topology. </p>
101 <p><code>cpuset</code> and <code>nođeset</code> given to <a class="el" href="a00200.html#gaf955b190c0299dcfb5bc985d777f92a1" title="Change the sets of allowed PUs and NUMA nodes in the topology.">hwloc_topology_allow()</a> must be <code>NULL</code>. </p>
102 </td></tr>
103 <tr><td class="fieldname"><a id="gga38b1be3922094d880f6e76bf56c973d6a88c50088c09dcf1e1a496c0817556fb9"></a>HWLOC_ALLOW_FLAG_LOCAL_RESTRICTIONS&#160;</td><td class="fielddoc"><p>Only allow objects that are available to the current process. </p>
104 <p>The topology must have <a class="el" href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b" title="Assume that the selected backend provides the topology for the system on which we are running.">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a> so that the set of available resources can actually be retrieved from the operating system.</p>
105 <p><code>cpuset</code> and <code>nođeset</code> given to <a class="el" href="a00200.html#gaf955b190c0299dcfb5bc985d777f92a1" title="Change the sets of allowed PUs and NUMA nodes in the topology.">hwloc_topology_allow()</a> must be <code>NULL</code>. </p>
106 </td></tr>
107 <tr><td class="fieldname"><a id="gga38b1be3922094d880f6e76bf56c973d6a489c8c1b67ce7e0b8cf7a665852760e1"></a>HWLOC_ALLOW_FLAG_CUSTOM&#160;</td><td class="fielddoc"><p>Allow a custom set of objects, given to <a class="el" href="a00200.html#gaf955b190c0299dcfb5bc985d777f92a1" title="Change the sets of allowed PUs and NUMA nodes in the topology.">hwloc_topology_allow()</a> as <code>cpuset</code> and/or <code>nodeset</code> parameters. </p>
135 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4"></a>HWLOC_MEMBIND_PROCESS&#160;</td><td class="fielddoc"><p>Set policy for all threads of the specified (possibly multithreaded) process. This flag is mutually exclusive with <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298" title="Set policy for a specific thread of the current process. This flag is mutually exclusive with HWLOC_M...">HWLOC_MEMBIND_THREAD</a>. </p>
136 </td></tr>
137 <tr><td class="fieldname"><a id="ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298"></a>HWLOC_MEMBIND_THREAD&#160;</td><td class="fielddoc"><p>Set policy for a specific thread of the current process. This flag is mutually exclusive with <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4" title="Set policy for all threads of the specified (possibly multithreaded) process. This flag is mutually e...">HWLOC_MEMBIND_PROCESS</a>. </p>
138 </td></tr>
139 <tr><td class="fieldname"><a id="ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6"></a>HWLOC_MEMBIND_STRICT&#160;</td><td class="fielddoc"><p>Request strict binding from the OS. The function will fail if the binding can not be guaranteed / completely enforced.</p>
140 <p>This flag has slightly different meanings depending on which function it is used with. </p>
141 </td></tr>
142 <tr><td class="fieldname"><a id="ggab00475fd98815bf4fb9aaf752030e7d2aa6e49e54f52827cb143cc869cfd748af"></a>HWLOC_MEMBIND_MIGRATE&#160;</td><td class="fielddoc"><p>Migrate existing allocated memory. If the memory cannot be migrated and the <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a> flag is passed, an error will be returned. </p>
143 </td></tr>
144 <tr><td class="fieldname"><a id="ggab00475fd98815bf4fb9aaf752030e7d2aad6b9eaf2ee324ca58dc8f58094b9997"></a>HWLOC_MEMBIND_NOCPUBIND&#160;</td><td class="fielddoc"><p>Avoid any effect on CPU binding. </p>
145 <p>On some operating systems, some underlying memory binding functions also bind the application to the corresponding CPU(s). Using this flag will cause hwloc to avoid using OS functions that could potentially affect CPU bindings. Note, however, that using NOCPUBIND may reduce hwloc's overall memory binding support. Specifically: some of hwloc's memory binding functions may fail with errno set to ENOSYS when used with NOCPUBIND. </p>
146 </td></tr>
147 <tr><td class="fieldname"><a id="ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256"></a>HWLOC_MEMBIND_BYNODESET&#160;</td><td class="fielddoc"><p>Consider the bitmap argument as a nodeset. </p>
148 <p>The bitmap argument is considered a nodeset if this flag is given, or a cpuset otherwise by default.</p>
149 <p>Memory binding by CPU set cannot work for CPU-less NUMA memory nodes. Binding by nodeset should therefore be preferred whenever possible. </p>
108150 </td></tr>
109151 </table>
110152
111153 </div>
112154 </div>
113 <a id="ga9d80f08eb25b7ac22f1b998dc8bf521f"></a>
114 <h2 class="memtitle"><span class="permalink"><a href="#ga9d80f08eb25b7ac22f1b998dc8bf521f">&#9670;&nbsp;</a></span>hwloc_restrict_flags_e</h2>
115
116 <div class="memitem">
117 <div class="memproto">
118 <table class="memname">
119 <tr>
120 <td class="memname">enum <a class="el" href="a00200.html#ga9d80f08eb25b7ac22f1b998dc8bf521f">hwloc_restrict_flags_e</a></td>
121 </tr>
122 </table>
123 </div><div class="memdoc">
124
125 <p>Flags to be given to <a class="el" href="a00200.html#ga6db81ed13ac0a9d70cc80372ab537815" title="Restrict the topology to the given CPU set or nodeset.">hwloc_topology_restrict()</a>. </p>
155 <a id="gac9764f79505775d06407b40f5e4661e8"></a>
156 <h2 class="memtitle"><span class="permalink"><a href="#gac9764f79505775d06407b40f5e4661e8">&#9670;&nbsp;</a></span>hwloc_membind_policy_t</h2>
157
158 <div class="memitem">
159 <div class="memproto">
160 <table class="memname">
161 <tr>
162 <td class="memname">enum <a class="el" href="a00200.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a></td>
163 </tr>
164 </table>
165 </div><div class="memdoc">
166
167 <p>Memory binding policy. </p>
168 <p>These constants can be used to choose the binding policy. Only one policy can be used at a time (i.e., the values cannot be OR'ed together).</p>
169 <p>Not all systems support all kinds of binding. <a class="el" href="a00202.html#gab8c76173c4a8ce1a9a9366012b1388e6" title="Retrieve the topology support.">hwloc_topology_get_support()</a> may be used to query about the actual memory binding policy support in the currently used operating system. See the "Detailed Description" section of <a class="el" href="a00200.html">Memory binding</a> for a description of errors that can occur. </p>
126170 <table class="fieldtable">
127 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga9d80f08eb25b7ac22f1b998dc8bf521fa80eeb9cbba401ab050f8fb4573725891"></a>HWLOC_RESTRICT_FLAG_REMOVE_CPULESS&#160;</td><td class="fielddoc"><p>Remove all objects that became CPU-less. By default, only objects that contain no PU and no memory are removed. This flag may not be used with <a class="el" href="a00200.html#gga9d80f08eb25b7ac22f1b998dc8bf521fae4c5b1b87232f2d8a60559e77ac65a68" title="Restrict by nodeset instead of CPU set. Only keep objects whose nodeset is included or partially incl...">HWLOC_RESTRICT_FLAG_BYNODESET</a>. </p>
128 </td></tr>
129 <tr><td class="fieldname"><a id="gga9d80f08eb25b7ac22f1b998dc8bf521fae4c5b1b87232f2d8a60559e77ac65a68"></a>HWLOC_RESTRICT_FLAG_BYNODESET&#160;</td><td class="fielddoc"><p>Restrict by nodeset instead of CPU set. Only keep objects whose nodeset is included or partially included in the given set. This flag may not be used with <a class="el" href="a00200.html#gga9d80f08eb25b7ac22f1b998dc8bf521fa80eeb9cbba401ab050f8fb4573725891" title="Remove all objects that became CPU-less. By default, only objects that contain no PU and no memory ar...">HWLOC_RESTRICT_FLAG_REMOVE_CPULESS</a>. </p>
130 </td></tr>
131 <tr><td class="fieldname"><a id="gga9d80f08eb25b7ac22f1b998dc8bf521faf5ba49808855704bfe9cb9fe7347f93b"></a>HWLOC_RESTRICT_FLAG_REMOVE_MEMLESS&#160;</td><td class="fielddoc"><p>Remove all objects that became Memory-less. By default, only objects that contain no PU and no memory are removed. This flag may only be used with <a class="el" href="a00200.html#gga9d80f08eb25b7ac22f1b998dc8bf521fae4c5b1b87232f2d8a60559e77ac65a68" title="Restrict by nodeset instead of CPU set. Only keep objects whose nodeset is included or partially incl...">HWLOC_RESTRICT_FLAG_BYNODESET</a>. </p>
132 </td></tr>
133 <tr><td class="fieldname"><a id="gga9d80f08eb25b7ac22f1b998dc8bf521fa699969227a09bbc1a7de51dc9fb7be4b"></a>HWLOC_RESTRICT_FLAG_ADAPT_MISC&#160;</td><td class="fielddoc"><p>Move Misc objects to ancestors if their parents are removed during restriction. If this flag is not set, Misc objects are removed when their parents are removed. </p>
134 </td></tr>
135 <tr><td class="fieldname"><a id="gga9d80f08eb25b7ac22f1b998dc8bf521faa95d6985e36ec1e55f68b210297a85cb"></a>HWLOC_RESTRICT_FLAG_ADAPT_IO&#160;</td><td class="fielddoc"><p>Move I/O objects to ancestors if their parents are removed during restriction. If this flag is not set, I/O devices and bridges are removed when their parents are removed. </p>
171 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggac9764f79505775d06407b40f5e4661e8a18675bb80ebc1bce5b652e9de8f3998c"></a>HWLOC_MEMBIND_DEFAULT&#160;</td><td class="fielddoc"><p>Reset the memory allocation policy to the system default. Depending on the operating system, this may correspond to <a class="el" href="a00200.html#ggac9764f79505775d06407b40f5e4661e8a979c7aa78dd32780858f30f47a72cca0" title="Allocate each memory page individually on the local NUMA node of the thread that touches it.">HWLOC_MEMBIND_FIRSTTOUCH</a> (Linux, FreeBSD), or <a class="el" href="a00200.html#ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c" title="Allocate memory on the specified nodes.">HWLOC_MEMBIND_BIND</a> (AIX, HP-UX, Solaris, Windows). This policy is never returned by get membind functions. The nodeset argument is ignored. </p>
172 </td></tr>
173 <tr><td class="fieldname"><a id="ggac9764f79505775d06407b40f5e4661e8a979c7aa78dd32780858f30f47a72cca0"></a>HWLOC_MEMBIND_FIRSTTOUCH&#160;</td><td class="fielddoc"><p>Allocate each memory page individually on the local NUMA node of the thread that touches it. </p>
174 <p>The given nodeset should usually be <a class="el" href="a00211.html#ga3fd37303e99ace8b0d0ea03f95f8c514" title="Get topology node set.">hwloc_topology_get_topology_nodeset()</a> so that the touching thread may run and allocate on any node in the system.</p>
175 <p>On AIX, if the nodeset is smaller, pages are allocated locally (if the local node is in the nodeset) or from a random non-local node (otherwise). </p>
176 </td></tr>
177 <tr><td class="fieldname"><a id="ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c"></a>HWLOC_MEMBIND_BIND&#160;</td><td class="fielddoc"><p>Allocate memory on the specified nodes. </p>
178 </td></tr>
179 <tr><td class="fieldname"><a id="ggac9764f79505775d06407b40f5e4661e8ae370075e5af016d42310f87ea5af236b"></a>HWLOC_MEMBIND_INTERLEAVE&#160;</td><td class="fielddoc"><p>Allocate memory on the given nodes in an interleaved / round-robin manner. The precise layout of the memory across multiple NUMA nodes is OS/system specific. Interleaving can be useful when threads distributed across the specified NUMA nodes will all be accessing the whole memory range concurrently, since the interleave will then balance the memory references. </p>
180 </td></tr>
181 <tr><td class="fieldname"><a id="ggac9764f79505775d06407b40f5e4661e8aecdd4164d647708fbb51a00d98dbb138"></a>HWLOC_MEMBIND_NEXTTOUCH&#160;</td><td class="fielddoc"><p>For each page bound with this policy, by next time it is touched (and next time only), it is moved from its current location to the local NUMA node of the thread where the memory reference occurred (if it needs to be moved at all). </p>
182 </td></tr>
183 <tr><td class="fieldname"><a id="ggac9764f79505775d06407b40f5e4661e8a3185bd869b67817fb2bd5164bf360402"></a>HWLOC_MEMBIND_MIXED&#160;</td><td class="fielddoc"><p>Returned by get_membind() functions when multiple threads or parts of a memory area have differing memory binding policies. Also returned when binding is unknown because binding hooks are empty when the topology is loaded from XML without HWLOC_THISSYSTEM=1, etc. </p>
136184 </td></tr>
137185 </table>
138186
139187 </div>
140188 </div>
141189 <h2 class="groupheader">Function Documentation</h2>
142 <a id="gad458715d3335df44849216cc123d1055"></a>
143 <h2 class="memtitle"><span class="permalink"><a href="#gad458715d3335df44849216cc123d1055">&#9670;&nbsp;</a></span>hwloc_obj_add_other_obj_sets()</h2>
144
145 <div class="memitem">
146 <div class="memproto">
147 <table class="memname">
148 <tr>
149 <td class="memname">int hwloc_obj_add_other_obj_sets </td>
150 <td>(</td>
151 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
152 <td class="paramname"><em>dst</em>, </td>
153 </tr>
154 <tr>
155 <td class="paramkey"></td>
156 <td></td>
157 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
158 <td class="paramname"><em>src</em>&#160;</td>
159 </tr>
160 <tr>
161 <td></td>
162 <td>)</td>
163 <td></td><td></td>
164 </tr>
165 </table>
166 </div><div class="memdoc">
167
168 <p>Setup object cpusets/nodesets by OR'ing another object's sets. </p>
169 <p>For each defined cpuset or nodeset in <code>src</code>, allocate the corresponding set in <code>dst</code> and add <code>src</code> to it by OR'ing sets.</p>
170 <p>This function is convenient between <a class="el" href="a00200.html#ga4cea4741165faf5323931a9ed8786ef7" title="Allocate a Group object to insert later with hwloc_topology_insert_group_object().">hwloc_topology_alloc_group_object()</a> and <a class="el" href="a00200.html#ga1fc6012b3e1c249b83f48cb7bcacaa5b" title="Add more structure to the topology by adding an intermediate Group.">hwloc_topology_insert_group_object()</a>. It builds the sets of the new Group that will be inserted as a new intermediate parent of several objects. </p>
171
172 </div>
173 </div>
174 <a id="ga4cea4741165faf5323931a9ed8786ef7"></a>
175 <h2 class="memtitle"><span class="permalink"><a href="#ga4cea4741165faf5323931a9ed8786ef7">&#9670;&nbsp;</a></span>hwloc_topology_alloc_group_object()</h2>
176
177 <div class="memitem">
178 <div class="memproto">
179 <table class="memname">
180 <tr>
181 <td class="memname"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_topology_alloc_group_object </td>
182 <td>(</td>
183 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
184 <td class="paramname"><em>topology</em></td><td>)</td>
185 <td></td>
186 </tr>
187 </table>
188 </div><div class="memdoc">
189
190 <p>Allocate a Group object to insert later with <a class="el" href="a00200.html#ga1fc6012b3e1c249b83f48cb7bcacaa5b" title="Add more structure to the topology by adding an intermediate Group.">hwloc_topology_insert_group_object()</a>. </p>
191 <p>This function returns a new Group object.</p>
192 <p>The caller should (at least) initialize its sets before inserting the object in the topology. See <a class="el" href="a00200.html#ga1fc6012b3e1c249b83f48cb7bcacaa5b" title="Add more structure to the topology by adding an intermediate Group.">hwloc_topology_insert_group_object()</a>. </p>
193
194 </div>
195 </div>
196 <a id="gaf955b190c0299dcfb5bc985d777f92a1"></a>
197 <h2 class="memtitle"><span class="permalink"><a href="#gaf955b190c0299dcfb5bc985d777f92a1">&#9670;&nbsp;</a></span>hwloc_topology_allow()</h2>
198
199 <div class="memitem">
200 <div class="memproto">
201 <table class="memname">
202 <tr>
203 <td class="memname">int hwloc_topology_allow </td>
204 <td>(</td>
205 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict&#160;</td>
206 <td class="paramname"><em>topology</em>, </td>
207 </tr>
208 <tr>
209 <td class="paramkey"></td>
210 <td></td>
211 <td class="paramtype"><a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
212 <td class="paramname"><em>cpuset</em>, </td>
213 </tr>
214 <tr>
215 <td class="paramkey"></td>
216 <td></td>
217 <td class="paramtype"><a class="el" href="a00189.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a>&#160;</td>
218 <td class="paramname"><em>nodeset</em>, </td>
219 </tr>
220 <tr>
221 <td class="paramkey"></td>
222 <td></td>
223 <td class="paramtype">unsigned long&#160;</td>
224 <td class="paramname"><em>flags</em>&#160;</td>
225 </tr>
226 <tr>
227 <td></td>
228 <td>)</td>
229 <td></td><td></td>
230 </tr>
231 </table>
232 </div><div class="memdoc">
233
234 <p>Change the sets of allowed PUs and NUMA nodes in the topology. </p>
235 <p>This function only works if the <a class="el" href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258" title="Detect the whole system, ignore reservations, include disallowed objects.">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a> was set on the topology. It does not modify any object, it only changes the sets returned by <a class="el" href="a00208.html#ga517d5d68ec9f24583d8933aab713be8e" title="Get allowed CPU set.">hwloc_topology_get_allowed_cpuset()</a> and <a class="el" href="a00208.html#ga21a4d7237a11e76b912ed4524ab78cbd" title="Get allowed node set.">hwloc_topology_get_allowed_nodeset()</a>.</p>
236 <p>It is notably useful when importing a topology from another process running in a different Linux Cgroup.</p>
237 <p><code>flags</code> must be set to one flag among <a class="el" href="a00200.html#ga38b1be3922094d880f6e76bf56c973d6" title="Flags to be given to hwloc_topology_allow().">hwloc_allow_flags_e</a>.</p>
238 <dl class="section note"><dt>Note</dt><dd>Removing objects from a topology should rather be performed with <a class="el" href="a00200.html#ga6db81ed13ac0a9d70cc80372ab537815" title="Restrict the topology to the given CPU set or nodeset.">hwloc_topology_restrict()</a>. </dd></dl>
239
240 </div>
241 </div>
242 <a id="ga1fc6012b3e1c249b83f48cb7bcacaa5b"></a>
243 <h2 class="memtitle"><span class="permalink"><a href="#ga1fc6012b3e1c249b83f48cb7bcacaa5b">&#9670;&nbsp;</a></span>hwloc_topology_insert_group_object()</h2>
244
245 <div class="memitem">
246 <div class="memproto">
247 <table class="memname">
248 <tr>
249 <td class="memname"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_topology_insert_group_object </td>
250 <td>(</td>
251 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
252 <td class="paramname"><em>topology</em>, </td>
253 </tr>
254 <tr>
255 <td class="paramkey"></td>
256 <td></td>
257 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
258 <td class="paramname"><em>group</em>&#160;</td>
259 </tr>
260 <tr>
261 <td></td>
262 <td>)</td>
263 <td></td><td></td>
264 </tr>
265 </table>
266 </div><div class="memdoc">
267
268 <p>Add more structure to the topology by adding an intermediate Group. </p>
269 <p>The caller should first allocate a new Group object with <a class="el" href="a00200.html#ga4cea4741165faf5323931a9ed8786ef7" title="Allocate a Group object to insert later with hwloc_topology_insert_group_object().">hwloc_topology_alloc_group_object()</a>. Then it must setup at least one of its CPU or node sets to specify the final location of the Group in the topology. Then the object can be passed to this function for actual insertion in the topology.</p>
270 <p>Either the cpuset or nodeset field (or both, if compatible) must be set to a non-empty bitmap. The complete_cpuset or complete_nodeset may be set instead if inserting with respect to the complete topology (including disallowed, offline or unknown objects). If grouping several objects, <a class="el" href="a00200.html#gad458715d3335df44849216cc123d1055" title="Setup object cpusets/nodesets by OR&#39;ing another object&#39;s sets.">hwloc_obj_add_other_obj_sets()</a> is an easy way to build the Group sets iteratively. These sets cannot be larger than the current topology, or they would get restricted silently. The core will setup the other sets after actual insertion.</p>
271 <p>The <code>subtype</code> object attribute may be defined (to a dynamically allocated string) to display something else than "Group" as the type name for this object in lstopo. Custom name/value info pairs may be added with <a class="el" href="a00195.html#gace7654bb8a9002caae1a4b8a59e7452e" title="Add the given info name and value pair to the given object.">hwloc_obj_add_info()</a> after insertion.</p>
272 <p>The group <code>dont_merge</code> attribute may be set to <code>1</code> to prevent the hwloc core from ever merging this object with another hierarchically-identical object. This is useful when the Group itself describes an important feature that cannot be exposed anywhere else in the hierarchy.</p>
273 <p>The group <code>kind</code> attribute may be set to a high value such as <code>0xffffffff</code> to tell hwloc that this new Group should always be discarded in favor of any existing Group with the same locality.</p>
274 <dl class="section return"><dt>Returns</dt><dd>The inserted object if it was properly inserted.</dd>
190 <a id="ga972b335a86a7d5e7b34bce2b243c41bc"></a>
191 <h2 class="memtitle"><span class="permalink"><a href="#ga972b335a86a7d5e7b34bce2b243c41bc">&#9670;&nbsp;</a></span>hwloc_alloc()</h2>
192
193 <div class="memitem">
194 <div class="memproto">
195 <table class="memname">
196 <tr>
197 <td class="memname">void* hwloc_alloc </td>
198 <td>(</td>
199 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
200 <td class="paramname"><em>topology</em>, </td>
201 </tr>
202 <tr>
203 <td class="paramkey"></td>
204 <td></td>
205 <td class="paramtype">size_t&#160;</td>
206 <td class="paramname"><em>len</em>&#160;</td>
207 </tr>
208 <tr>
209 <td></td>
210 <td>)</td>
211 <td></td><td></td>
212 </tr>
213 </table>
214 </div><div class="memdoc">
215
216 <p>Allocate some memory. </p>
217 <p>This is equivalent to malloc(), except that it tries to allocate page-aligned memory from the OS.</p>
218 <dl class="section note"><dt>Note</dt><dd>The allocated memory should be freed with <a class="el" href="a00200.html#ga32dbd4f54e9e4a7179f2dde37ffe6ad7" title="Free memory that was previously allocated by hwloc_alloc() or hwloc_alloc_membind().">hwloc_free()</a>. </dd></dl>
219
220 </div>
221 </div>
222 <a id="ga04736461780fadcf193af218c0122273"></a>
223 <h2 class="memtitle"><span class="permalink"><a href="#ga04736461780fadcf193af218c0122273">&#9670;&nbsp;</a></span>hwloc_alloc_membind()</h2>
224
225 <div class="memitem">
226 <div class="memproto">
227 <table class="memname">
228 <tr>
229 <td class="memname">void* hwloc_alloc_membind </td>
230 <td>(</td>
231 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
232 <td class="paramname"><em>topology</em>, </td>
233 </tr>
234 <tr>
235 <td class="paramkey"></td>
236 <td></td>
237 <td class="paramtype">size_t&#160;</td>
238 <td class="paramname"><em>len</em>, </td>
239 </tr>
240 <tr>
241 <td class="paramkey"></td>
242 <td></td>
243 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
244 <td class="paramname"><em>set</em>, </td>
245 </tr>
246 <tr>
247 <td class="paramkey"></td>
248 <td></td>
249 <td class="paramtype"><a class="el" href="a00200.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a>&#160;</td>
250 <td class="paramname"><em>policy</em>, </td>
251 </tr>
252 <tr>
253 <td class="paramkey"></td>
254 <td></td>
255 <td class="paramtype">int&#160;</td>
256 <td class="paramname"><em>flags</em>&#160;</td>
257 </tr>
258 <tr>
259 <td></td>
260 <td>)</td>
261 <td></td><td></td>
262 </tr>
263 </table>
264 </div><div class="memdoc">
265
266 <p>Allocate some memory on NUMA memory nodes specified by <code>set</code>. </p>
267 <dl class="section return"><dt>Returns</dt><dd>NULL with errno set to ENOSYS if the action is not supported and <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a> is given </dd>
275268 <dd>
276 An existing object if the Group was merged or discarded because the topology already contained an object at the same location (the Group did not add any hierarchy information).</dd>
269 NULL with errno set to EXDEV if the binding cannot be enforced and <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a> is given </dd>
277270 <dd>
278 <code>NULL</code> if the insertion failed because of conflicting sets in topology tree.</dd>
271 NULL with errno set to ENOMEM if the memory allocation failed even before trying to bind.</dd></dl>
272 <p>If <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256" title="Consider the bitmap argument as a nodeset.">HWLOC_MEMBIND_BYNODESET</a> is specified, set is considered a nodeset. Otherwise it's a cpuset.</p>
273 <dl class="section note"><dt>Note</dt><dd>The allocated memory should be freed with <a class="el" href="a00200.html#ga32dbd4f54e9e4a7179f2dde37ffe6ad7" title="Free memory that was previously allocated by hwloc_alloc() or hwloc_alloc_membind().">hwloc_free()</a>. </dd></dl>
274
275 </div>
276 </div>
277 <a id="gab1b77b8408bacaf03c7e8878f7577922"></a>
278 <h2 class="memtitle"><span class="permalink"><a href="#gab1b77b8408bacaf03c7e8878f7577922">&#9670;&nbsp;</a></span>hwloc_alloc_membind_policy()</h2>
279
280 <div class="memitem">
281 <div class="memproto">
282 <table class="mlabels">
283 <tr>
284 <td class="mlabels-left">
285 <table class="memname">
286 <tr>
287 <td class="memname">static void* hwloc_alloc_membind_policy </td>
288 <td>(</td>
289 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
290 <td class="paramname"><em>topology</em>, </td>
291 </tr>
292 <tr>
293 <td class="paramkey"></td>
294 <td></td>
295 <td class="paramtype">size_t&#160;</td>
296 <td class="paramname"><em>len</em>, </td>
297 </tr>
298 <tr>
299 <td class="paramkey"></td>
300 <td></td>
301 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
302 <td class="paramname"><em>set</em>, </td>
303 </tr>
304 <tr>
305 <td class="paramkey"></td>
306 <td></td>
307 <td class="paramtype"><a class="el" href="a00200.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a>&#160;</td>
308 <td class="paramname"><em>policy</em>, </td>
309 </tr>
310 <tr>
311 <td class="paramkey"></td>
312 <td></td>
313 <td class="paramtype">int&#160;</td>
314 <td class="paramname"><em>flags</em>&#160;</td>
315 </tr>
316 <tr>
317 <td></td>
318 <td>)</td>
319 <td></td><td></td>
320 </tr>
321 </table>
322 </td>
323 <td class="mlabels-right">
324 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
325 </tr>
326 </table>
327 </div><div class="memdoc">
328
329 <p>Allocate some memory on NUMA memory nodes specified by <code>set</code>. </p>
330 <p>This is similar to hwloc_alloc_membind_nodeset() except that it is allowed to change the current memory binding policy, thus providing more binding support, at the expense of changing the current state.</p>
331 <p>If <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256" title="Consider the bitmap argument as a nodeset.">HWLOC_MEMBIND_BYNODESET</a> is specified, set is considered a nodeset. Otherwise it's a cpuset. </p>
332
333 </div>
334 </div>
335 <a id="ga32dbd4f54e9e4a7179f2dde37ffe6ad7"></a>
336 <h2 class="memtitle"><span class="permalink"><a href="#ga32dbd4f54e9e4a7179f2dde37ffe6ad7">&#9670;&nbsp;</a></span>hwloc_free()</h2>
337
338 <div class="memitem">
339 <div class="memproto">
340 <table class="memname">
341 <tr>
342 <td class="memname">int hwloc_free </td>
343 <td>(</td>
344 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
345 <td class="paramname"><em>topology</em>, </td>
346 </tr>
347 <tr>
348 <td class="paramkey"></td>
349 <td></td>
350 <td class="paramtype">void *&#160;</td>
351 <td class="paramname"><em>addr</em>, </td>
352 </tr>
353 <tr>
354 <td class="paramkey"></td>
355 <td></td>
356 <td class="paramtype">size_t&#160;</td>
357 <td class="paramname"><em>len</em>&#160;</td>
358 </tr>
359 <tr>
360 <td></td>
361 <td>)</td>
362 <td></td><td></td>
363 </tr>
364 </table>
365 </div><div class="memdoc">
366
367 <p>Free memory that was previously allocated by <a class="el" href="a00200.html#ga972b335a86a7d5e7b34bce2b243c41bc" title="Allocate some memory.">hwloc_alloc()</a> or <a class="el" href="a00200.html#ga04736461780fadcf193af218c0122273" title="Allocate some memory on NUMA memory nodes specified by set.">hwloc_alloc_membind()</a>. </p>
368
369 </div>
370 </div>
371 <a id="gaa87e0a6946ff145914fdf0b1c60567f8"></a>
372 <h2 class="memtitle"><span class="permalink"><a href="#gaa87e0a6946ff145914fdf0b1c60567f8">&#9670;&nbsp;</a></span>hwloc_get_area_membind()</h2>
373
374 <div class="memitem">
375 <div class="memproto">
376 <table class="memname">
377 <tr>
378 <td class="memname">int hwloc_get_area_membind </td>
379 <td>(</td>
380 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
381 <td class="paramname"><em>topology</em>, </td>
382 </tr>
383 <tr>
384 <td class="paramkey"></td>
385 <td></td>
386 <td class="paramtype">const void *&#160;</td>
387 <td class="paramname"><em>addr</em>, </td>
388 </tr>
389 <tr>
390 <td class="paramkey"></td>
391 <td></td>
392 <td class="paramtype">size_t&#160;</td>
393 <td class="paramname"><em>len</em>, </td>
394 </tr>
395 <tr>
396 <td class="paramkey"></td>
397 <td></td>
398 <td class="paramtype"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
399 <td class="paramname"><em>set</em>, </td>
400 </tr>
401 <tr>
402 <td class="paramkey"></td>
403 <td></td>
404 <td class="paramtype"><a class="el" href="a00200.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> *&#160;</td>
405 <td class="paramname"><em>policy</em>, </td>
406 </tr>
407 <tr>
408 <td class="paramkey"></td>
409 <td></td>
410 <td class="paramtype">int&#160;</td>
411 <td class="paramname"><em>flags</em>&#160;</td>
412 </tr>
413 <tr>
414 <td></td>
415 <td>)</td>
416 <td></td><td></td>
417 </tr>
418 </table>
419 </div><div class="memdoc">
420
421 <p>Query the CPUs near the physical NUMA node(s) and binding policy of the memory identified by (<code>addr</code>, <code>len</code> ). </p>
422 <p>This function has two output parameters: <code>set</code> and <code>policy</code>. The values returned in these parameters depend on both the <code>flags</code> passed in and the memory binding policies and nodesets of the pages in the address range.</p>
423 <p>If <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a> is specified, the target pages are first checked to see if they all have the same memory binding policy and nodeset. If they do not, -1 is returned and errno is set to EXDEV. If they are identical across all pages, the set and policy are returned in <code>set</code> and <code>policy</code>, respectively.</p>
424 <p>If <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a> is not specified, the union of all NUMA node(s) containing pages in the address range is calculated. If all pages in the target have the same policy, it is returned in <code>policy</code>. Otherwise, <code>policy</code> is set to <a class="el" href="a00200.html#ggac9764f79505775d06407b40f5e4661e8a3185bd869b67817fb2bd5164bf360402" title="Returned by get_membind() functions when multiple threads or parts of a memory area have differing me...">HWLOC_MEMBIND_MIXED</a>.</p>
425 <p>If <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256" title="Consider the bitmap argument as a nodeset.">HWLOC_MEMBIND_BYNODESET</a> is specified, set is considered a nodeset. Otherwise it's a cpuset.</p>
426 <p>If any other flags are specified, -1 is returned and errno is set to EINVAL.</p>
427 <p>If <code>len</code> is 0, -1 is returned and errno is set to EINVAL. </p>
428
429 </div>
430 </div>
431 <a id="ga537c7508a4e2d1db05673ec5be6e805c"></a>
432 <h2 class="memtitle"><span class="permalink"><a href="#ga537c7508a4e2d1db05673ec5be6e805c">&#9670;&nbsp;</a></span>hwloc_get_area_memlocation()</h2>
433
434 <div class="memitem">
435 <div class="memproto">
436 <table class="memname">
437 <tr>
438 <td class="memname">int hwloc_get_area_memlocation </td>
439 <td>(</td>
440 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
441 <td class="paramname"><em>topology</em>, </td>
442 </tr>
443 <tr>
444 <td class="paramkey"></td>
445 <td></td>
446 <td class="paramtype">const void *&#160;</td>
447 <td class="paramname"><em>addr</em>, </td>
448 </tr>
449 <tr>
450 <td class="paramkey"></td>
451 <td></td>
452 <td class="paramtype">size_t&#160;</td>
453 <td class="paramname"><em>len</em>, </td>
454 </tr>
455 <tr>
456 <td class="paramkey"></td>
457 <td></td>
458 <td class="paramtype"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
459 <td class="paramname"><em>set</em>, </td>
460 </tr>
461 <tr>
462 <td class="paramkey"></td>
463 <td></td>
464 <td class="paramtype">int&#160;</td>
465 <td class="paramname"><em>flags</em>&#160;</td>
466 </tr>
467 <tr>
468 <td></td>
469 <td>)</td>
470 <td></td><td></td>
471 </tr>
472 </table>
473 </div><div class="memdoc">
474
475 <p>Get the NUMA nodes where memory identified by (<code>addr</code>, <code>len</code> ) is physically allocated. </p>
476 <p>Fills <code>set</code> according to the NUMA nodes where the memory area pages are physically allocated. If no page is actually allocated yet, <code>set</code> may be empty.</p>
477 <p>If pages spread to multiple nodes, it is not specified whether they spread equitably, or whether most of them are on a single node, etc.</p>
478 <p>The operating system may move memory pages from one processor to another at any time according to their binding, so this function may return something that is already outdated.</p>
479 <p>If <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256" title="Consider the bitmap argument as a nodeset.">HWLOC_MEMBIND_BYNODESET</a> is specified in <code>flags</code>, set is considered a nodeset. Otherwise it's a cpuset.</p>
480 <p>If <code>len</code> is 0, <code>set</code> is emptied. </p>
481
482 </div>
483 </div>
484 <a id="gae21f0a1a884929c784bebf070252aa56"></a>
485 <h2 class="memtitle"><span class="permalink"><a href="#gae21f0a1a884929c784bebf070252aa56">&#9670;&nbsp;</a></span>hwloc_get_membind()</h2>
486
487 <div class="memitem">
488 <div class="memproto">
489 <table class="memname">
490 <tr>
491 <td class="memname">int hwloc_get_membind </td>
492 <td>(</td>
493 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
494 <td class="paramname"><em>topology</em>, </td>
495 </tr>
496 <tr>
497 <td class="paramkey"></td>
498 <td></td>
499 <td class="paramtype"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
500 <td class="paramname"><em>set</em>, </td>
501 </tr>
502 <tr>
503 <td class="paramkey"></td>
504 <td></td>
505 <td class="paramtype"><a class="el" href="a00200.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> *&#160;</td>
506 <td class="paramname"><em>policy</em>, </td>
507 </tr>
508 <tr>
509 <td class="paramkey"></td>
510 <td></td>
511 <td class="paramtype">int&#160;</td>
512 <td class="paramname"><em>flags</em>&#160;</td>
513 </tr>
514 <tr>
515 <td></td>
516 <td>)</td>
517 <td></td><td></td>
518 </tr>
519 </table>
520 </div><div class="memdoc">
521
522 <p>Query the default memory binding policy and physical locality of the current process or thread. </p>
523 <p>This function has two output parameters: <code>set</code> and <code>policy</code>. The values returned in these parameters depend on both the <code>flags</code> passed in and the current memory binding policies and nodesets in the queried target.</p>
524 <p>Passing the <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4" title="Set policy for all threads of the specified (possibly multithreaded) process. This flag is mutually e...">HWLOC_MEMBIND_PROCESS</a> flag specifies that the query target is the current policies and nodesets for all the threads in the current process. Passing <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298" title="Set policy for a specific thread of the current process. This flag is mutually exclusive with HWLOC_M...">HWLOC_MEMBIND_THREAD</a> specifies that the query target is the current policy and nodeset for only the thread invoking this function.</p>
525 <p>If neither of these flags are passed (which is the most portable method), the process is assumed to be single threaded. This allows hwloc to use either process-based OS functions or thread-based OS functions, depending on which are available.</p>
526 <p><a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a> is only meaningful when <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4" title="Set policy for all threads of the specified (possibly multithreaded) process. This flag is mutually e...">HWLOC_MEMBIND_PROCESS</a> is also specified. In this case, hwloc will check the default memory policies and nodesets for all threads in the process. If they are not identical, -1 is returned and errno is set to EXDEV. If they are identical, the values are returned in <code>set</code> and <code>policy</code>.</p>
527 <p>Otherwise, if <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4" title="Set policy for all threads of the specified (possibly multithreaded) process. This flag is mutually e...">HWLOC_MEMBIND_PROCESS</a> is specified (and <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a> is <em>not</em> specified), the default set from each thread is logically OR'ed together. If all threads' default policies are the same, <code>policy</code> is set to that policy. If they are different, <code>policy</code> is set to <a class="el" href="a00200.html#ggac9764f79505775d06407b40f5e4661e8a3185bd869b67817fb2bd5164bf360402" title="Returned by get_membind() functions when multiple threads or parts of a memory area have differing me...">HWLOC_MEMBIND_MIXED</a>.</p>
528 <p>In the <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298" title="Set policy for a specific thread of the current process. This flag is mutually exclusive with HWLOC_M...">HWLOC_MEMBIND_THREAD</a> case (or when neither <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4" title="Set policy for all threads of the specified (possibly multithreaded) process. This flag is mutually e...">HWLOC_MEMBIND_PROCESS</a> or <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298" title="Set policy for a specific thread of the current process. This flag is mutually exclusive with HWLOC_M...">HWLOC_MEMBIND_THREAD</a> is specified), there is only one set and policy; they are returned in <code>set</code> and <code>policy</code>, respectively.</p>
529 <p>If <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256" title="Consider the bitmap argument as a nodeset.">HWLOC_MEMBIND_BYNODESET</a> is specified, set is considered a nodeset. Otherwise it's a cpuset.</p>
530 <p>If any other flags are specified, -1 is returned and errno is set to EINVAL. </p>
531
532 </div>
533 </div>
534 <a id="ga1730ceb18ec6ee3b7bd3d0db81f07dc8"></a>
535 <h2 class="memtitle"><span class="permalink"><a href="#ga1730ceb18ec6ee3b7bd3d0db81f07dc8">&#9670;&nbsp;</a></span>hwloc_get_proc_membind()</h2>
536
537 <div class="memitem">
538 <div class="memproto">
539 <table class="memname">
540 <tr>
541 <td class="memname">int hwloc_get_proc_membind </td>
542 <td>(</td>
543 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
544 <td class="paramname"><em>topology</em>, </td>
545 </tr>
546 <tr>
547 <td class="paramkey"></td>
548 <td></td>
549 <td class="paramtype">hwloc_pid_t&#160;</td>
550 <td class="paramname"><em>pid</em>, </td>
551 </tr>
552 <tr>
553 <td class="paramkey"></td>
554 <td></td>
555 <td class="paramtype"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
556 <td class="paramname"><em>set</em>, </td>
557 </tr>
558 <tr>
559 <td class="paramkey"></td>
560 <td></td>
561 <td class="paramtype"><a class="el" href="a00200.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a> *&#160;</td>
562 <td class="paramname"><em>policy</em>, </td>
563 </tr>
564 <tr>
565 <td class="paramkey"></td>
566 <td></td>
567 <td class="paramtype">int&#160;</td>
568 <td class="paramname"><em>flags</em>&#160;</td>
569 </tr>
570 <tr>
571 <td></td>
572 <td>)</td>
573 <td></td><td></td>
574 </tr>
575 </table>
576 </div><div class="memdoc">
577
578 <p>Query the default memory binding policy and physical locality of the specified process. </p>
579 <p>This function has two output parameters: <code>set</code> and <code>policy</code>. The values returned in these parameters depend on both the <code>flags</code> passed in and the current memory binding policies and nodesets in the queried target.</p>
580 <p>Passing the <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4" title="Set policy for all threads of the specified (possibly multithreaded) process. This flag is mutually e...">HWLOC_MEMBIND_PROCESS</a> flag specifies that the query target is the current policies and nodesets for all the threads in the specified process. If <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4" title="Set policy for all threads of the specified (possibly multithreaded) process. This flag is mutually e...">HWLOC_MEMBIND_PROCESS</a> is not specified (which is the most portable method), the process is assumed to be single threaded. This allows hwloc to use either process-based OS functions or thread-based OS functions, depending on which are available.</p>
581 <p>Note that it does not make sense to pass <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298" title="Set policy for a specific thread of the current process. This flag is mutually exclusive with HWLOC_M...">HWLOC_MEMBIND_THREAD</a> to this function.</p>
582 <p>If <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6">HWLOC_MEMBIND_STRICT</a> is specified, hwloc will check the default memory policies and nodesets for all threads in the specified process. If they are not identical, -1 is returned and errno is set to EXDEV. If they are identical, the values are returned in <code>set</code> and <code>policy</code>.</p>
583 <p>Otherwise, <code>set</code> is set to the logical OR of all threads' default set. If all threads' default policies are the same, <code>policy</code> is set to that policy. If they are different, <code>policy</code> is set to <a class="el" href="a00200.html#ggac9764f79505775d06407b40f5e4661e8a3185bd869b67817fb2bd5164bf360402" title="Returned by get_membind() functions when multiple threads or parts of a memory area have differing me...">HWLOC_MEMBIND_MIXED</a>.</p>
584 <p>If <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256" title="Consider the bitmap argument as a nodeset.">HWLOC_MEMBIND_BYNODESET</a> is specified, set is considered a nodeset. Otherwise it's a cpuset.</p>
585 <p>If any other flags are specified, -1 is returned and errno is set to EINVAL.</p>
586 <dl class="section note"><dt>Note</dt><dd><code>hwloc_pid_t</code> is <code>pid_t</code> on Unix platforms, and <code>HANDLE</code> on native Windows platforms. </dd></dl>
587
588 </div>
589 </div>
590 <a id="gaf881faefe20701229f07dd7dbd0125ed"></a>
591 <h2 class="memtitle"><span class="permalink"><a href="#gaf881faefe20701229f07dd7dbd0125ed">&#9670;&nbsp;</a></span>hwloc_set_area_membind()</h2>
592
593 <div class="memitem">
594 <div class="memproto">
595 <table class="memname">
596 <tr>
597 <td class="memname">int hwloc_set_area_membind </td>
598 <td>(</td>
599 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
600 <td class="paramname"><em>topology</em>, </td>
601 </tr>
602 <tr>
603 <td class="paramkey"></td>
604 <td></td>
605 <td class="paramtype">const void *&#160;</td>
606 <td class="paramname"><em>addr</em>, </td>
607 </tr>
608 <tr>
609 <td class="paramkey"></td>
610 <td></td>
611 <td class="paramtype">size_t&#160;</td>
612 <td class="paramname"><em>len</em>, </td>
613 </tr>
614 <tr>
615 <td class="paramkey"></td>
616 <td></td>
617 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
618 <td class="paramname"><em>set</em>, </td>
619 </tr>
620 <tr>
621 <td class="paramkey"></td>
622 <td></td>
623 <td class="paramtype"><a class="el" href="a00200.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a>&#160;</td>
624 <td class="paramname"><em>policy</em>, </td>
625 </tr>
626 <tr>
627 <td class="paramkey"></td>
628 <td></td>
629 <td class="paramtype">int&#160;</td>
630 <td class="paramname"><em>flags</em>&#160;</td>
631 </tr>
632 <tr>
633 <td></td>
634 <td>)</td>
635 <td></td><td></td>
636 </tr>
637 </table>
638 </div><div class="memdoc">
639
640 <p>Bind the already-allocated memory identified by (addr, len) to the NUMA node(s) specified by <code>set</code>. </p>
641 <p>If <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256" title="Consider the bitmap argument as a nodeset.">HWLOC_MEMBIND_BYNODESET</a> is specified, set is considered a nodeset. Otherwise it's a cpuset.</p>
642 <dl class="section return"><dt>Returns</dt><dd>0 if <code>len</code> is 0. </dd>
279643 <dd>
280 <code>NULL</code> if Group objects are filtered-out of the topology (<a class="el" href="a00199.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a" title="Ignore all objects of this type.">HWLOC_TYPE_FILTER_KEEP_NONE</a>).</dd>
644 -1 with errno set to ENOSYS if the action is not supported </dd>
281645 <dd>
282 <code>NULL</code> if the object was discarded because no set was initialized in the Group before insert, or all of them were empty. </dd></dl>
283
284 </div>
285 </div>
286 <a id="gad980782ade737900c5cf208946768c30"></a>
287 <h2 class="memtitle"><span class="permalink"><a href="#gad980782ade737900c5cf208946768c30">&#9670;&nbsp;</a></span>hwloc_topology_insert_misc_object()</h2>
288
289 <div class="memitem">
290 <div class="memproto">
291 <table class="memname">
292 <tr>
293 <td class="memname"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_topology_insert_misc_object </td>
294 <td>(</td>
295 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
296 <td class="paramname"><em>topology</em>, </td>
297 </tr>
298 <tr>
299 <td class="paramkey"></td>
300 <td></td>
301 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
302 <td class="paramname"><em>parent</em>, </td>
303 </tr>
304 <tr>
305 <td class="paramkey"></td>
306 <td></td>
307 <td class="paramtype">const char *&#160;</td>
308 <td class="paramname"><em>name</em>&#160;</td>
309 </tr>
310 <tr>
311 <td></td>
312 <td>)</td>
313 <td></td><td></td>
314 </tr>
315 </table>
316 </div><div class="memdoc">
317
318 <p>Add a MISC object as a leaf of the topology. </p>
319 <p>A new MISC object will be created and inserted into the topology at the position given by parent. It is appended to the list of existing Misc children, without ever adding any intermediate hierarchy level. This is useful for annotating the topology without actually changing the hierarchy.</p>
320 <p><code>name</code> is supposed to be unique across all Misc objects in the topology. It will be duplicated to setup the new object attributes.</p>
321 <p>The new leaf object will not have any <code>cpuset</code>.</p>
322 <dl class="section return"><dt>Returns</dt><dd>the newly-created object</dd>
646 -1 with errno set to EXDEV if the binding cannot be enforced </dd></dl>
647
648 </div>
649 </div>
650 <a id="ga020951efa0ce3862bd4faec295501a7f"></a>
651 <h2 class="memtitle"><span class="permalink"><a href="#ga020951efa0ce3862bd4faec295501a7f">&#9670;&nbsp;</a></span>hwloc_set_membind()</h2>
652
653 <div class="memitem">
654 <div class="memproto">
655 <table class="memname">
656 <tr>
657 <td class="memname">int hwloc_set_membind </td>
658 <td>(</td>
659 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
660 <td class="paramname"><em>topology</em>, </td>
661 </tr>
662 <tr>
663 <td class="paramkey"></td>
664 <td></td>
665 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
666 <td class="paramname"><em>set</em>, </td>
667 </tr>
668 <tr>
669 <td class="paramkey"></td>
670 <td></td>
671 <td class="paramtype"><a class="el" href="a00200.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a>&#160;</td>
672 <td class="paramname"><em>policy</em>, </td>
673 </tr>
674 <tr>
675 <td class="paramkey"></td>
676 <td></td>
677 <td class="paramtype">int&#160;</td>
678 <td class="paramname"><em>flags</em>&#160;</td>
679 </tr>
680 <tr>
681 <td></td>
682 <td>)</td>
683 <td></td><td></td>
684 </tr>
685 </table>
686 </div><div class="memdoc">
687
688 <p>Set the default memory binding policy of the current process or thread to prefer the NUMA node(s) specified by <code>set</code>. </p>
689 <p>If neither <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4" title="Set policy for all threads of the specified (possibly multithreaded) process. This flag is mutually e...">HWLOC_MEMBIND_PROCESS</a> nor <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298" title="Set policy for a specific thread of the current process. This flag is mutually exclusive with HWLOC_M...">HWLOC_MEMBIND_THREAD</a> is specified, the current process is assumed to be single-threaded. This is the most portable form as it permits hwloc to use either process-based OS functions or thread-based OS functions, depending on which are available.</p>
690 <p>If <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256" title="Consider the bitmap argument as a nodeset.">HWLOC_MEMBIND_BYNODESET</a> is specified, set is considered a nodeset. Otherwise it's a cpuset.</p>
691 <dl class="section return"><dt>Returns</dt><dd>-1 with errno set to ENOSYS if the action is not supported </dd>
323692 <dd>
324 <code>NULL</code> on error.</dd>
693 -1 with errno set to EXDEV if the binding cannot be enforced </dd></dl>
694
695 </div>
696 </div>
697 <a id="gabc91ff16f7e41047924e3a4ae6d9da7e"></a>
698 <h2 class="memtitle"><span class="permalink"><a href="#gabc91ff16f7e41047924e3a4ae6d9da7e">&#9670;&nbsp;</a></span>hwloc_set_proc_membind()</h2>
699
700 <div class="memitem">
701 <div class="memproto">
702 <table class="memname">
703 <tr>
704 <td class="memname">int hwloc_set_proc_membind </td>
705 <td>(</td>
706 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
707 <td class="paramname"><em>topology</em>, </td>
708 </tr>
709 <tr>
710 <td class="paramkey"></td>
711 <td></td>
712 <td class="paramtype">hwloc_pid_t&#160;</td>
713 <td class="paramname"><em>pid</em>, </td>
714 </tr>
715 <tr>
716 <td class="paramkey"></td>
717 <td></td>
718 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
719 <td class="paramname"><em>set</em>, </td>
720 </tr>
721 <tr>
722 <td class="paramkey"></td>
723 <td></td>
724 <td class="paramtype"><a class="el" href="a00200.html#gac9764f79505775d06407b40f5e4661e8">hwloc_membind_policy_t</a>&#160;</td>
725 <td class="paramname"><em>policy</em>, </td>
726 </tr>
727 <tr>
728 <td class="paramkey"></td>
729 <td></td>
730 <td class="paramtype">int&#160;</td>
731 <td class="paramname"><em>flags</em>&#160;</td>
732 </tr>
733 <tr>
734 <td></td>
735 <td>)</td>
736 <td></td><td></td>
737 </tr>
738 </table>
739 </div><div class="memdoc">
740
741 <p>Set the default memory binding policy of the specified process to prefer the NUMA node(s) specified by <code>set</code>. </p>
742 <p>If <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256" title="Consider the bitmap argument as a nodeset.">HWLOC_MEMBIND_BYNODESET</a> is specified, set is considered a nodeset. Otherwise it's a cpuset.</p>
743 <dl class="section return"><dt>Returns</dt><dd>-1 with errno set to ENOSYS if the action is not supported </dd>
325744 <dd>
326 <code>NULL</code> if Misc objects are filtered-out of the topology (<a class="el" href="a00199.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a" title="Ignore all objects of this type.">HWLOC_TYPE_FILTER_KEEP_NONE</a>).</dd></dl>
327 <dl class="section note"><dt>Note</dt><dd>If <code>name</code> contains some non-printable characters, they will be dropped when exporting to XML, see <a class="el" href="a00212.html#ga333f79975b4eeb28a3d8fad3373583ce" title="Export the topology into an XML file.">hwloc_topology_export_xml()</a> in <a class="el" href="a00134_source.html">hwloc/export.h</a>. </dd></dl>
328
329 </div>
330 </div>
331 <a id="ga698ecd640d2b76742bba3829a145cd9a"></a>
332 <h2 class="memtitle"><span class="permalink"><a href="#ga698ecd640d2b76742bba3829a145cd9a">&#9670;&nbsp;</a></span>hwloc_topology_refresh()</h2>
333
334 <div class="memitem">
335 <div class="memproto">
336 <table class="memname">
337 <tr>
338 <td class="memname">int hwloc_topology_refresh </td>
339 <td>(</td>
340 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
341 <td class="paramname"><em>topology</em></td><td>)</td>
342 <td></td>
343 </tr>
344 </table>
345 </div><div class="memdoc">
346
347 <p>Refresh internal structures after topology modification. </p>
348 <p>Modifying the topology (by restricting, adding objects, modifying structures such as distances or memory attributes, etc.) may cause some internal caches to become invalid. These caches are automatically refreshed when accessed but this refreshing is not thread-safe.</p>
349 <p>This function is not thread-safe either, but it is a good way to end a non-thread-safe phase of topology modification. Once this refresh is done, multiple threads may concurrently consult the topology, objects, distances, attributes, etc.</p>
350 <p>See also <a class="el" href="a00397.html">Thread Safety</a> </p>
351
352 </div>
353 </div>
354 <a id="ga6db81ed13ac0a9d70cc80372ab537815"></a>
355 <h2 class="memtitle"><span class="permalink"><a href="#ga6db81ed13ac0a9d70cc80372ab537815">&#9670;&nbsp;</a></span>hwloc_topology_restrict()</h2>
356
357 <div class="memitem">
358 <div class="memproto">
359 <table class="memname">
360 <tr>
361 <td class="memname">int hwloc_topology_restrict </td>
362 <td>(</td>
363 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict&#160;</td>
364 <td class="paramname"><em>topology</em>, </td>
365 </tr>
366 <tr>
367 <td class="paramkey"></td>
368 <td></td>
369 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
370 <td class="paramname"><em>set</em>, </td>
371 </tr>
372 <tr>
373 <td class="paramkey"></td>
374 <td></td>
375 <td class="paramtype">unsigned long&#160;</td>
376 <td class="paramname"><em>flags</em>&#160;</td>
377 </tr>
378 <tr>
379 <td></td>
380 <td>)</td>
381 <td></td><td></td>
382 </tr>
383 </table>
384 </div><div class="memdoc">
385
386 <p>Restrict the topology to the given CPU set or nodeset. </p>
387 <p>Topology <code>topology</code> is modified so as to remove all objects that are not included (or partially included) in the CPU set <code>set</code>. All objects CPU and node sets are restricted accordingly.</p>
388 <p>If <a class="el" href="a00200.html#gga9d80f08eb25b7ac22f1b998dc8bf521fae4c5b1b87232f2d8a60559e77ac65a68" title="Restrict by nodeset instead of CPU set. Only keep objects whose nodeset is included or partially incl...">HWLOC_RESTRICT_FLAG_BYNODESET</a> is passed in <code>flags</code>, <code>set</code> is considered a nodeset instead of a CPU set.</p>
389 <p><code>flags</code> is a OR'ed set of <a class="el" href="a00200.html#ga9d80f08eb25b7ac22f1b998dc8bf521f" title="Flags to be given to hwloc_topology_restrict().">hwloc_restrict_flags_e</a>.</p>
390 <dl class="section note"><dt>Note</dt><dd>This call may not be reverted by restricting back to a larger set. Once dropped during restriction, objects may not be brought back, except by loading another topology with <a class="el" href="a00192.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a>.</dd></dl>
391 <dl class="section return"><dt>Returns</dt><dd>0 on success.</dd>
392 <dd>
393 -1 with errno set to EINVAL if the input set is invalid. The topology is not modified in this case.</dd>
394 <dd>
395 -1 with errno set to ENOMEM on failure to allocate internal data. The topology is reinitialized in this case. It should be either destroyed with <a class="el" href="a00192.html#ga9f34a640b6fd28d23699d4d084667b15" title="Terminate and free a topology context.">hwloc_topology_destroy()</a> or configured and loaded again. </dd></dl>
745 -1 with errno set to EXDEV if the binding cannot be enforced</dd></dl>
746 <dl class="section note"><dt>Note</dt><dd><code>hwloc_pid_t</code> is <code>pid_t</code> on Unix platforms, and <code>HANDLE</code> on native Windows platforms. </dd></dl>
396747
397748 </div>
398749 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Finding Objects inside a CPU set</title>
7 <title>Hardware Locality (hwloc): Changing the Source of Topology Discovery</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="header">
4141 <div class="summary">
42 <a href="#enum-members">Enumerations</a> &#124;
4243 <a href="#func-members">Functions</a> </div>
4344 <div class="headertitle">
44 <div class="title">Finding Objects inside a CPU set</div> </div>
45 <div class="title">Changing the Source of Topology Discovery</div> </div>
4546 </div><!--header-->
4647 <div class="contents">
4748 <table class="memberdecls">
49 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
50 Enumerations</h2></td></tr>
51 <tr class="memitem:ga949f656c779208a36790feba24048b7e"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#ga949f656c779208a36790feba24048b7e">hwloc_topology_components_flag_e</a> { <a class="el" href="a00201.html#gga949f656c779208a36790feba24048b7ea33eec25d29253a2aba21dd3c731b416e">HWLOC_TOPOLOGY_COMPONENTS_FLAG_BLACKLIST</a>
52 }</td></tr>
53 <tr class="separator:ga949f656c779208a36790feba24048b7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 </table><table class="memberdecls">
4855 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
4956 Functions</h2></td></tr>
50 <tr class="memitem:ga547325a4193dbc215d07c23097519d79"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#ga547325a4193dbc215d07c23097519d79">hwloc_get_first_largest_obj_inside_cpuset</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set)</td></tr>
51 <tr class="separator:ga547325a4193dbc215d07c23097519d79"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:ga34ca563fa3a6a4e05268f36a87668511"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#ga34ca563fa3a6a4e05268f36a87668511">hwloc_get_largest_objs_inside_cpuset</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *restrict objs, int max)</td></tr>
53 <tr class="separator:ga34ca563fa3a6a4e05268f36a87668511"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:ga63e3784e7c60fbae5073428cb98ac787"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#ga63e3784e7c60fbae5073428cb98ac787">hwloc_get_next_obj_inside_cpuset_by_depth</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, int depth, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> prev)</td></tr>
55 <tr class="separator:ga63e3784e7c60fbae5073428cb98ac787"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:gafe859176cf9233f215fea0e87cef47e7"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#gafe859176cf9233f215fea0e87cef47e7">hwloc_get_next_obj_inside_cpuset_by_type</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, <a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> prev)</td></tr>
57 <tr class="separator:gafe859176cf9233f215fea0e87cef47e7"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:gaec86f1f88832836e3f9338e246ea5862"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#gaec86f1f88832836e3f9338e246ea5862">hwloc_get_obj_inside_cpuset_by_depth</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, int depth, unsigned idx)</td></tr>
59 <tr class="separator:gaec86f1f88832836e3f9338e246ea5862"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:ga2edf924e5a0cca9cb22f65cc77c6ddb5"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#ga2edf924e5a0cca9cb22f65cc77c6ddb5">hwloc_get_obj_inside_cpuset_by_type</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, <a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, unsigned idx)</td></tr>
61 <tr class="separator:ga2edf924e5a0cca9cb22f65cc77c6ddb5"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:gaa43c64512ddb33fd181990c4261cec7d"><td class="memItemLeft" align="right" valign="top">static unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#gaa43c64512ddb33fd181990c4261cec7d">hwloc_get_nbobjs_inside_cpuset_by_depth</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, int depth)</td></tr>
63 <tr class="separator:gaa43c64512ddb33fd181990c4261cec7d"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 <tr class="memitem:ga133c40415de008518608f8bff52a5ab9"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#ga133c40415de008518608f8bff52a5ab9">hwloc_get_nbobjs_inside_cpuset_by_type</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, <a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
65 <tr class="separator:ga133c40415de008518608f8bff52a5ab9"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 <tr class="memitem:ga4c3a20d61e9beb06c667b21688c772c5"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#ga4c3a20d61e9beb06c667b21688c772c5">hwloc_get_obj_index_inside_cpuset</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj)</td></tr>
67 <tr class="separator:ga4c3a20d61e9beb06c667b21688c772c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
57 <tr class="memitem:ga341fc17b5867a4715570baab131f68cd"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#ga341fc17b5867a4715570baab131f68cd">hwloc_topology_set_pid</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict topology, hwloc_pid_t pid)</td></tr>
58 <tr class="separator:ga341fc17b5867a4715570baab131f68cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
59 <tr class="memitem:ga4fab186bb6181a00bcf585825fddd38d"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#ga4fab186bb6181a00bcf585825fddd38d">hwloc_topology_set_synthetic</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict topology, const char *restrict description)</td></tr>
60 <tr class="separator:ga4fab186bb6181a00bcf585825fddd38d"><td class="memSeparator" colspan="2">&#160;</td></tr>
61 <tr class="memitem:ga879439b7ee99407ee911b3ac64e9a25e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#ga879439b7ee99407ee911b3ac64e9a25e">hwloc_topology_set_xml</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict topology, const char *restrict xmlpath)</td></tr>
62 <tr class="separator:ga879439b7ee99407ee911b3ac64e9a25e"><td class="memSeparator" colspan="2">&#160;</td></tr>
63 <tr class="memitem:ga2745616b65595e1c1e579ecc7e461fa8"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#ga2745616b65595e1c1e579ecc7e461fa8">hwloc_topology_set_xmlbuffer</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict topology, const char *restrict buffer, int size)</td></tr>
64 <tr class="separator:ga2745616b65595e1c1e579ecc7e461fa8"><td class="memSeparator" colspan="2">&#160;</td></tr>
65 <tr class="memitem:ga9ad41adf418cee1c0ee32ba9bd4a3d36"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00201.html#ga9ad41adf418cee1c0ee32ba9bd4a3d36">hwloc_topology_set_components</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict topology, unsigned long flags, const char *restrict name)</td></tr>
66 <tr class="separator:ga9ad41adf418cee1c0ee32ba9bd4a3d36"><td class="memSeparator" colspan="2">&#160;</td></tr>
6867 </table>
6968 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
69 <p>If none of the functions below is called, the default is to detect all the objects of the machine that the caller is allowed to access.</p>
70 <p>This default behavior may also be modified through environment variables if the application did not modify it already. Setting HWLOC_XMLFILE in the environment enforces the discovery from a XML file as if <a class="el" href="a00201.html#ga879439b7ee99407ee911b3ac64e9a25e" title="Enable XML-file based topology.">hwloc_topology_set_xml()</a> had been called. Setting HWLOC_SYNTHETIC enforces a synthetic topology as if <a class="el" href="a00201.html#ga4fab186bb6181a00bcf585825fddd38d" title="Enable synthetic topology.">hwloc_topology_set_synthetic()</a> had been called.</p>
71 <p>Finally, HWLOC_THISSYSTEM enforces the return value of <a class="el" href="a00202.html#ga68ffdcfd9175cdf40709801092f18017" title="Does the topology context come from this system?">hwloc_topology_is_thissystem()</a>. </p>
72 <h2 class="groupheader">Enumeration Type Documentation</h2>
73 <a id="ga949f656c779208a36790feba24048b7e"></a>
74 <h2 class="memtitle"><span class="permalink"><a href="#ga949f656c779208a36790feba24048b7e">&#9670;&nbsp;</a></span>hwloc_topology_components_flag_e</h2>
75
76 <div class="memitem">
77 <div class="memproto">
78 <table class="memname">
79 <tr>
80 <td class="memname">enum <a class="el" href="a00201.html#ga949f656c779208a36790feba24048b7e">hwloc_topology_components_flag_e</a></td>
81 </tr>
82 </table>
83 </div><div class="memdoc">
84
85 <p>Flags to be passed to <a class="el" href="a00201.html#ga9ad41adf418cee1c0ee32ba9bd4a3d36" title="Prevent a discovery component from being used for a topology.">hwloc_topology_set_components()</a> </p>
86 <table class="fieldtable">
87 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga949f656c779208a36790feba24048b7ea33eec25d29253a2aba21dd3c731b416e"></a>HWLOC_TOPOLOGY_COMPONENTS_FLAG_BLACKLIST&#160;</td><td class="fielddoc"><p>Blacklist the target component from being used. </p>
88 </td></tr>
89 </table>
90
91 </div>
92 </div>
7093 <h2 class="groupheader">Function Documentation</h2>
71 <a id="ga547325a4193dbc215d07c23097519d79"></a>
72 <h2 class="memtitle"><span class="permalink"><a href="#ga547325a4193dbc215d07c23097519d79">&#9670;&nbsp;</a></span>hwloc_get_first_largest_obj_inside_cpuset()</h2>
73
74 <div class="memitem">
75 <div class="memproto">
76 <table class="mlabels">
77 <tr>
78 <td class="mlabels-left">
79 <table class="memname">
80 <tr>
81 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_first_largest_obj_inside_cpuset </td>
82 <td>(</td>
83 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
84 <td class="paramname"><em>topology</em>, </td>
85 </tr>
86 <tr>
87 <td class="paramkey"></td>
88 <td></td>
89 <td class="paramtype"><a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
90 <td class="paramname"><em>set</em>&#160;</td>
91 </tr>
92 <tr>
93 <td></td>
94 <td>)</td>
95 <td></td><td></td>
96 </tr>
97 </table>
98 </td>
99 <td class="mlabels-right">
100 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
101 </tr>
102 </table>
103 </div><div class="memdoc">
104
105 <p>Get the first largest object included in the given cpuset <code>set</code>. </p>
106 <dl class="section return"><dt>Returns</dt><dd>the first object that is included in <code>set</code> and whose parent is not.</dd></dl>
107 <p>This is convenient for iterating over all largest objects within a CPU set by doing a loop getting the first largest object and clearing its CPU set from the remaining CPU set. </p>
108
109 </div>
110 </div>
111 <a id="ga34ca563fa3a6a4e05268f36a87668511"></a>
112 <h2 class="memtitle"><span class="permalink"><a href="#ga34ca563fa3a6a4e05268f36a87668511">&#9670;&nbsp;</a></span>hwloc_get_largest_objs_inside_cpuset()</h2>
113
114 <div class="memitem">
115 <div class="memproto">
116 <table class="memname">
117 <tr>
118 <td class="memname">int hwloc_get_largest_objs_inside_cpuset </td>
119 <td>(</td>
120 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
121 <td class="paramname"><em>topology</em>, </td>
122 </tr>
123 <tr>
124 <td class="paramkey"></td>
125 <td></td>
126 <td class="paramtype"><a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
127 <td class="paramname"><em>set</em>, </td>
128 </tr>
129 <tr>
130 <td class="paramkey"></td>
131 <td></td>
132 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *restrict&#160;</td>
133 <td class="paramname"><em>objs</em>, </td>
94 <a id="ga9ad41adf418cee1c0ee32ba9bd4a3d36"></a>
95 <h2 class="memtitle"><span class="permalink"><a href="#ga9ad41adf418cee1c0ee32ba9bd4a3d36">&#9670;&nbsp;</a></span>hwloc_topology_set_components()</h2>
96
97 <div class="memitem">
98 <div class="memproto">
99 <table class="memname">
100 <tr>
101 <td class="memname">int hwloc_topology_set_components </td>
102 <td>(</td>
103 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict&#160;</td>
104 <td class="paramname"><em>topology</em>, </td>
105 </tr>
106 <tr>
107 <td class="paramkey"></td>
108 <td></td>
109 <td class="paramtype">unsigned long&#160;</td>
110 <td class="paramname"><em>flags</em>, </td>
111 </tr>
112 <tr>
113 <td class="paramkey"></td>
114 <td></td>
115 <td class="paramtype">const char *restrict&#160;</td>
116 <td class="paramname"><em>name</em>&#160;</td>
117 </tr>
118 <tr>
119 <td></td>
120 <td>)</td>
121 <td></td><td></td>
122 </tr>
123 </table>
124 </div><div class="memdoc">
125
126 <p>Prevent a discovery component from being used for a topology. </p>
127 <p><code>name</code> is the name of the discovery component that should not be used when loading topology <code>topology</code>. The name is a string such as "cuda".</p>
128 <p>For components with multiple phases, it may also be suffixed with the name of a phase, for instance "linux:io".</p>
129 <p><code>flags</code> should be <a class="el" href="a00201.html#gga949f656c779208a36790feba24048b7ea33eec25d29253a2aba21dd3c731b416e" title="Blacklist the target component from being used.">HWLOC_TOPOLOGY_COMPONENTS_FLAG_BLACKLIST</a>.</p>
130 <p>This may be used to avoid expensive parts of the discovery process. For instance, CUDA-specific discovery may be expensive and unneeded while generic I/O discovery could still be useful. </p>
131
132 </div>
133 </div>
134 <a id="ga341fc17b5867a4715570baab131f68cd"></a>
135 <h2 class="memtitle"><span class="permalink"><a href="#ga341fc17b5867a4715570baab131f68cd">&#9670;&nbsp;</a></span>hwloc_topology_set_pid()</h2>
136
137 <div class="memitem">
138 <div class="memproto">
139 <table class="memname">
140 <tr>
141 <td class="memname">int hwloc_topology_set_pid </td>
142 <td>(</td>
143 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict&#160;</td>
144 <td class="paramname"><em>topology</em>, </td>
145 </tr>
146 <tr>
147 <td class="paramkey"></td>
148 <td></td>
149 <td class="paramtype">hwloc_pid_t&#160;</td>
150 <td class="paramname"><em>pid</em>&#160;</td>
151 </tr>
152 <tr>
153 <td></td>
154 <td>)</td>
155 <td></td><td></td>
156 </tr>
157 </table>
158 </div><div class="memdoc">
159
160 <p>Change which process the topology is viewed from. </p>
161 <p>On some systems, processes may have different views of the machine, for instance the set of allowed CPUs. By default, hwloc exposes the view from the current process. Calling <a class="el" href="a00201.html#ga341fc17b5867a4715570baab131f68cd" title="Change which process the topology is viewed from.">hwloc_topology_set_pid()</a> permits to make it expose the topology of the machine from the point of view of another process.</p>
162 <dl class="section note"><dt>Note</dt><dd><code>hwloc_pid_t</code> is <code>pid_t</code> on Unix platforms, and <code>HANDLE</code> on native Windows platforms.</dd>
163 <dd>
164 -1 is returned and errno is set to ENOSYS on platforms that do not support this feature. </dd></dl>
165
166 </div>
167 </div>
168 <a id="ga4fab186bb6181a00bcf585825fddd38d"></a>
169 <h2 class="memtitle"><span class="permalink"><a href="#ga4fab186bb6181a00bcf585825fddd38d">&#9670;&nbsp;</a></span>hwloc_topology_set_synthetic()</h2>
170
171 <div class="memitem">
172 <div class="memproto">
173 <table class="memname">
174 <tr>
175 <td class="memname">int hwloc_topology_set_synthetic </td>
176 <td>(</td>
177 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict&#160;</td>
178 <td class="paramname"><em>topology</em>, </td>
179 </tr>
180 <tr>
181 <td class="paramkey"></td>
182 <td></td>
183 <td class="paramtype">const char *restrict&#160;</td>
184 <td class="paramname"><em>description</em>&#160;</td>
185 </tr>
186 <tr>
187 <td></td>
188 <td>)</td>
189 <td></td><td></td>
190 </tr>
191 </table>
192 </div><div class="memdoc">
193
194 <p>Enable synthetic topology. </p>
195 <p>Gather topology information from the given <code>description</code>, a space-separated string of &lt;type:number&gt; describing the object type and arity at each level. All types may be omitted (space-separated string of numbers) so that hwloc chooses all types according to usual topologies. See also the <a class="el" href="a00401.html">Synthetic topologies</a>.</p>
196 <p>Setting the environment variable HWLOC_SYNTHETIC may also result in this behavior.</p>
197 <p>If <code>description</code> was properly parsed and describes a valid topology configuration, this function returns 0. Otherwise -1 is returned and errno is set to EINVAL.</p>
198 <p>Note that this function does not actually load topology information; it just tells hwloc where to load it from. You'll still need to invoke <a class="el" href="a00195.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a> to actually load the topology information.</p>
199 <dl class="section note"><dt>Note</dt><dd>For convenience, this backend provides empty binding hooks which just return success.</dd>
200 <dd>
201 On success, the synthetic component replaces the previously enabled component (if any), but the topology is not actually modified until <a class="el" href="a00195.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a>. </dd></dl>
202
203 </div>
204 </div>
205 <a id="ga879439b7ee99407ee911b3ac64e9a25e"></a>
206 <h2 class="memtitle"><span class="permalink"><a href="#ga879439b7ee99407ee911b3ac64e9a25e">&#9670;&nbsp;</a></span>hwloc_topology_set_xml()</h2>
207
208 <div class="memitem">
209 <div class="memproto">
210 <table class="memname">
211 <tr>
212 <td class="memname">int hwloc_topology_set_xml </td>
213 <td>(</td>
214 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict&#160;</td>
215 <td class="paramname"><em>topology</em>, </td>
216 </tr>
217 <tr>
218 <td class="paramkey"></td>
219 <td></td>
220 <td class="paramtype">const char *restrict&#160;</td>
221 <td class="paramname"><em>xmlpath</em>&#160;</td>
222 </tr>
223 <tr>
224 <td></td>
225 <td>)</td>
226 <td></td><td></td>
227 </tr>
228 </table>
229 </div><div class="memdoc">
230
231 <p>Enable XML-file based topology. </p>
232 <p>Gather topology information from the XML file given at <code>xmlpath</code>. Setting the environment variable HWLOC_XMLFILE may also result in this behavior. This file may have been generated earlier with <a class="el" href="a00215.html#ga333f79975b4eeb28a3d8fad3373583ce" title="Export the topology into an XML file.">hwloc_topology_export_xml()</a> in <a class="el" href="a00131_source.html">hwloc/export.h</a>, or lstopo file.xml.</p>
233 <p>Note that this function does not actually load topology information; it just tells hwloc where to load it from. You'll still need to invoke <a class="el" href="a00195.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a> to actually load the topology information.</p>
234 <dl class="section return"><dt>Returns</dt><dd>-1 with errno set to EINVAL on failure to read the XML file.</dd></dl>
235 <dl class="section note"><dt>Note</dt><dd>See also <a class="el" href="a00215.html#ga5ac6917ea7289955fb1ffda4353af9b0" title="Set the application-specific callback for importing userdata.">hwloc_topology_set_userdata_import_callback()</a> for importing application-specific object userdata.</dd>
236 <dd>
237 For convenience, this backend provides empty binding hooks which just return success. To have hwloc still actually call OS-specific hooks, the <a class="el" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b" title="Assume that the selected backend provides the topology for the system on which we are running.">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a> has to be set to assert that the loaded file is really the underlying system.</dd>
238 <dd>
239 On success, the XML component replaces the previously enabled component (if any), but the topology is not actually modified until <a class="el" href="a00195.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a>. </dd></dl>
240
241 </div>
242 </div>
243 <a id="ga2745616b65595e1c1e579ecc7e461fa8"></a>
244 <h2 class="memtitle"><span class="permalink"><a href="#ga2745616b65595e1c1e579ecc7e461fa8">&#9670;&nbsp;</a></span>hwloc_topology_set_xmlbuffer()</h2>
245
246 <div class="memitem">
247 <div class="memproto">
248 <table class="memname">
249 <tr>
250 <td class="memname">int hwloc_topology_set_xmlbuffer </td>
251 <td>(</td>
252 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict&#160;</td>
253 <td class="paramname"><em>topology</em>, </td>
254 </tr>
255 <tr>
256 <td class="paramkey"></td>
257 <td></td>
258 <td class="paramtype">const char *restrict&#160;</td>
259 <td class="paramname"><em>buffer</em>, </td>
134260 </tr>
135261 <tr>
136262 <td class="paramkey"></td>
137263 <td></td>
138264 <td class="paramtype">int&#160;</td>
139 <td class="paramname"><em>max</em>&#160;</td>
140 </tr>
141 <tr>
142 <td></td>
143 <td>)</td>
144 <td></td><td></td>
145 </tr>
146 </table>
147 </div><div class="memdoc">
148
149 <p>Get the set of largest objects covering exactly a given cpuset <code>set</code>. </p>
150 <dl class="section return"><dt>Returns</dt><dd>the number of objects returned in <code>objs</code>. </dd></dl>
151
152 </div>
153 </div>
154 <a id="gaa43c64512ddb33fd181990c4261cec7d"></a>
155 <h2 class="memtitle"><span class="permalink"><a href="#gaa43c64512ddb33fd181990c4261cec7d">&#9670;&nbsp;</a></span>hwloc_get_nbobjs_inside_cpuset_by_depth()</h2>
156
157 <div class="memitem">
158 <div class="memproto">
159 <table class="mlabels">
160 <tr>
161 <td class="mlabels-left">
162 <table class="memname">
163 <tr>
164 <td class="memname">static unsigned hwloc_get_nbobjs_inside_cpuset_by_depth </td>
165 <td>(</td>
166 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
167 <td class="paramname"><em>topology</em>, </td>
168 </tr>
169 <tr>
170 <td class="paramkey"></td>
171 <td></td>
172 <td class="paramtype"><a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
173 <td class="paramname"><em>set</em>, </td>
174 </tr>
175 <tr>
176 <td class="paramkey"></td>
177 <td></td>
178 <td class="paramtype">int&#160;</td>
179 <td class="paramname"><em>depth</em>&#160;</td>
180 </tr>
181 <tr>
182 <td></td>
183 <td>)</td>
184 <td></td><td></td>
185 </tr>
186 </table>
187 </td>
188 <td class="mlabels-right">
189 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
190 </tr>
191 </table>
192 </div><div class="memdoc">
193
194 <p>Return the number of objects at depth <code>depth</code> included in CPU set <code>set</code>. </p>
195 <dl class="section note"><dt>Note</dt><dd>Objects with empty CPU sets are ignored (otherwise they would be considered included in any given set).</dd>
196 <dd>
197 This function cannot work if objects at the given depth do not have CPU sets (I/O or Misc objects). </dd></dl>
198
199 </div>
200 </div>
201 <a id="ga133c40415de008518608f8bff52a5ab9"></a>
202 <h2 class="memtitle"><span class="permalink"><a href="#ga133c40415de008518608f8bff52a5ab9">&#9670;&nbsp;</a></span>hwloc_get_nbobjs_inside_cpuset_by_type()</h2>
203
204 <div class="memitem">
205 <div class="memproto">
206 <table class="mlabels">
207 <tr>
208 <td class="mlabels-left">
209 <table class="memname">
210 <tr>
211 <td class="memname">static int hwloc_get_nbobjs_inside_cpuset_by_type </td>
212 <td>(</td>
213 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
214 <td class="paramname"><em>topology</em>, </td>
215 </tr>
216 <tr>
217 <td class="paramkey"></td>
218 <td></td>
219 <td class="paramtype"><a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
220 <td class="paramname"><em>set</em>, </td>
221 </tr>
222 <tr>
223 <td class="paramkey"></td>
224 <td></td>
225 <td class="paramtype"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
226 <td class="paramname"><em>type</em>&#160;</td>
227 </tr>
228 <tr>
229 <td></td>
230 <td>)</td>
231 <td></td><td></td>
232 </tr>
233 </table>
234 </td>
235 <td class="mlabels-right">
236 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
237 </tr>
238 </table>
239 </div><div class="memdoc">
240
241 <p>Return the number of objects of type <code>type</code> included in CPU set <code>set</code>. </p>
242 <p>If no object for that type exists inside CPU set <code>set</code>, 0 is returned. If there are several levels with objects of that type inside CPU set <code>set</code>, -1 is returned.</p>
243 <dl class="section note"><dt>Note</dt><dd>Objects with empty CPU sets are ignored (otherwise they would be considered included in any given set).</dd>
244 <dd>
245 This function cannot work if objects of the given type do not have CPU sets (I/O objects). </dd></dl>
246
247 </div>
248 </div>
249 <a id="ga63e3784e7c60fbae5073428cb98ac787"></a>
250 <h2 class="memtitle"><span class="permalink"><a href="#ga63e3784e7c60fbae5073428cb98ac787">&#9670;&nbsp;</a></span>hwloc_get_next_obj_inside_cpuset_by_depth()</h2>
251
252 <div class="memitem">
253 <div class="memproto">
254 <table class="mlabels">
255 <tr>
256 <td class="mlabels-left">
257 <table class="memname">
258 <tr>
259 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_next_obj_inside_cpuset_by_depth </td>
260 <td>(</td>
261 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
262 <td class="paramname"><em>topology</em>, </td>
263 </tr>
264 <tr>
265 <td class="paramkey"></td>
266 <td></td>
267 <td class="paramtype"><a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
268 <td class="paramname"><em>set</em>, </td>
269 </tr>
270 <tr>
271 <td class="paramkey"></td>
272 <td></td>
273 <td class="paramtype">int&#160;</td>
274 <td class="paramname"><em>depth</em>, </td>
275 </tr>
276 <tr>
277 <td class="paramkey"></td>
278 <td></td>
279 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
280 <td class="paramname"><em>prev</em>&#160;</td>
281 </tr>
282 <tr>
283 <td></td>
284 <td>)</td>
285 <td></td><td></td>
286 </tr>
287 </table>
288 </td>
289 <td class="mlabels-right">
290 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
291 </tr>
292 </table>
293 </div><div class="memdoc">
294
295 <p>Return the next object at depth <code>depth</code> included in CPU set <code>set</code>. </p>
296 <p>If <code>prev</code> is <code>NULL</code>, return the first object at depth <code>depth</code> included in <code>set</code>. The next invokation should pass the previous return value in <code>prev</code> so as to obtain the next object in <code>set</code>.</p>
297 <dl class="section note"><dt>Note</dt><dd>Objects with empty CPU sets are ignored (otherwise they would be considered included in any given set).</dd>
298 <dd>
299 This function cannot work if objects at the given depth do not have CPU sets (I/O or Misc objects). </dd></dl>
300
301 </div>
302 </div>
303 <a id="gafe859176cf9233f215fea0e87cef47e7"></a>
304 <h2 class="memtitle"><span class="permalink"><a href="#gafe859176cf9233f215fea0e87cef47e7">&#9670;&nbsp;</a></span>hwloc_get_next_obj_inside_cpuset_by_type()</h2>
305
306 <div class="memitem">
307 <div class="memproto">
308 <table class="mlabels">
309 <tr>
310 <td class="mlabels-left">
311 <table class="memname">
312 <tr>
313 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_next_obj_inside_cpuset_by_type </td>
314 <td>(</td>
315 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
316 <td class="paramname"><em>topology</em>, </td>
317 </tr>
318 <tr>
319 <td class="paramkey"></td>
320 <td></td>
321 <td class="paramtype"><a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
322 <td class="paramname"><em>set</em>, </td>
323 </tr>
324 <tr>
325 <td class="paramkey"></td>
326 <td></td>
327 <td class="paramtype"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
328 <td class="paramname"><em>type</em>, </td>
329 </tr>
330 <tr>
331 <td class="paramkey"></td>
332 <td></td>
333 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
334 <td class="paramname"><em>prev</em>&#160;</td>
335 </tr>
336 <tr>
337 <td></td>
338 <td>)</td>
339 <td></td><td></td>
340 </tr>
341 </table>
342 </td>
343 <td class="mlabels-right">
344 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
345 </tr>
346 </table>
347 </div><div class="memdoc">
348
349 <p>Return the next object of type <code>type</code> included in CPU set <code>set</code>. </p>
350 <p>If there are multiple or no depth for given type, return <code>NULL</code> and let the caller fallback to <a class="el" href="a00201.html#ga63e3784e7c60fbae5073428cb98ac787" title="Return the next object at depth depth included in CPU set set.">hwloc_get_next_obj_inside_cpuset_by_depth()</a>.</p>
351 <dl class="section note"><dt>Note</dt><dd>Objects with empty CPU sets are ignored (otherwise they would be considered included in any given set).</dd>
352 <dd>
353 This function cannot work if objects of the given type do not have CPU sets (I/O or Misc objects). </dd></dl>
354
355 </div>
356 </div>
357 <a id="ga4c3a20d61e9beb06c667b21688c772c5"></a>
358 <h2 class="memtitle"><span class="permalink"><a href="#ga4c3a20d61e9beb06c667b21688c772c5">&#9670;&nbsp;</a></span>hwloc_get_obj_index_inside_cpuset()</h2>
359
360 <div class="memitem">
361 <div class="memproto">
362 <table class="mlabels">
363 <tr>
364 <td class="mlabels-left">
365 <table class="memname">
366 <tr>
367 <td class="memname">static int hwloc_get_obj_index_inside_cpuset </td>
368 <td>(</td>
369 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
370 <td class="paramname"><em>topology</em>, </td>
371 </tr>
372 <tr>
373 <td class="paramkey"></td>
374 <td></td>
375 <td class="paramtype"><a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
376 <td class="paramname"><em>set</em>, </td>
377 </tr>
378 <tr>
379 <td class="paramkey"></td>
380 <td></td>
381 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
382 <td class="paramname"><em>obj</em>&#160;</td>
383 </tr>
384 <tr>
385 <td></td>
386 <td>)</td>
387 <td></td><td></td>
388 </tr>
389 </table>
390 </td>
391 <td class="mlabels-right">
392 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
393 </tr>
394 </table>
395 </div><div class="memdoc">
396
397 <p>Return the logical index among the objects included in CPU set <code>set</code>. </p>
398 <p>Consult all objects in the same level as <code>obj</code> and inside CPU set <code>set</code> in the logical order, and return the index of <code>obj</code> within them. If <code>set</code> covers the entire topology, this is the logical index of <code>obj</code>. Otherwise, this is similar to a logical index within the part of the topology defined by CPU set <code>set</code>.</p>
399 <dl class="section note"><dt>Note</dt><dd>Objects with empty CPU sets are ignored (otherwise they would be considered included in any given set).</dd>
400 <dd>
401 This function cannot work if obj does not have CPU sets (I/O objects). </dd></dl>
402
403 </div>
404 </div>
405 <a id="gaec86f1f88832836e3f9338e246ea5862"></a>
406 <h2 class="memtitle"><span class="permalink"><a href="#gaec86f1f88832836e3f9338e246ea5862">&#9670;&nbsp;</a></span>hwloc_get_obj_inside_cpuset_by_depth()</h2>
407
408 <div class="memitem">
409 <div class="memproto">
410 <table class="mlabels">
411 <tr>
412 <td class="mlabels-left">
413 <table class="memname">
414 <tr>
415 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_obj_inside_cpuset_by_depth </td>
416 <td>(</td>
417 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
418 <td class="paramname"><em>topology</em>, </td>
419 </tr>
420 <tr>
421 <td class="paramkey"></td>
422 <td></td>
423 <td class="paramtype"><a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
424 <td class="paramname"><em>set</em>, </td>
425 </tr>
426 <tr>
427 <td class="paramkey"></td>
428 <td></td>
429 <td class="paramtype">int&#160;</td>
430 <td class="paramname"><em>depth</em>, </td>
431 </tr>
432 <tr>
433 <td class="paramkey"></td>
434 <td></td>
435 <td class="paramtype">unsigned&#160;</td>
436 <td class="paramname"><em>idx</em>&#160;</td>
437 </tr>
438 <tr>
439 <td></td>
440 <td>)</td>
441 <td></td><td></td>
442 </tr>
443 </table>
444 </td>
445 <td class="mlabels-right">
446 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
447 </tr>
448 </table>
449 </div><div class="memdoc">
450
451 <p>Return the (logically) <code>idx</code> -th object at depth <code>depth</code> included in CPU set <code>set</code>. </p>
452 <dl class="section note"><dt>Note</dt><dd>Objects with empty CPU sets are ignored (otherwise they would be considered included in any given set).</dd>
453 <dd>
454 This function cannot work if objects at the given depth do not have CPU sets (I/O or Misc objects). </dd></dl>
455
456 </div>
457 </div>
458 <a id="ga2edf924e5a0cca9cb22f65cc77c6ddb5"></a>
459 <h2 class="memtitle"><span class="permalink"><a href="#ga2edf924e5a0cca9cb22f65cc77c6ddb5">&#9670;&nbsp;</a></span>hwloc_get_obj_inside_cpuset_by_type()</h2>
460
461 <div class="memitem">
462 <div class="memproto">
463 <table class="mlabels">
464 <tr>
465 <td class="mlabels-left">
466 <table class="memname">
467 <tr>
468 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_obj_inside_cpuset_by_type </td>
469 <td>(</td>
470 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
471 <td class="paramname"><em>topology</em>, </td>
472 </tr>
473 <tr>
474 <td class="paramkey"></td>
475 <td></td>
476 <td class="paramtype"><a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
477 <td class="paramname"><em>set</em>, </td>
478 </tr>
479 <tr>
480 <td class="paramkey"></td>
481 <td></td>
482 <td class="paramtype"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
483 <td class="paramname"><em>type</em>, </td>
484 </tr>
485 <tr>
486 <td class="paramkey"></td>
487 <td></td>
488 <td class="paramtype">unsigned&#160;</td>
489 <td class="paramname"><em>idx</em>&#160;</td>
490 </tr>
491 <tr>
492 <td></td>
493 <td>)</td>
494 <td></td><td></td>
495 </tr>
496 </table>
497 </td>
498 <td class="mlabels-right">
499 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
500 </tr>
501 </table>
502 </div><div class="memdoc">
503
504 <p>Return the <code>idx</code> -th object of type <code>type</code> included in CPU set <code>set</code>. </p>
505 <p>If there are multiple or no depth for given type, return <code>NULL</code> and let the caller fallback to <a class="el" href="a00201.html#gaec86f1f88832836e3f9338e246ea5862" title="Return the (logically) idx -th object at depth depth included in CPU set set.">hwloc_get_obj_inside_cpuset_by_depth()</a>.</p>
506 <dl class="section note"><dt>Note</dt><dd>Objects with empty CPU sets are ignored (otherwise they would be considered included in any given set).</dd>
507 <dd>
508 This function cannot work if objects of the given type do not have CPU sets (I/O or Misc objects). </dd></dl>
265 <td class="paramname"><em>size</em>&#160;</td>
266 </tr>
267 <tr>
268 <td></td>
269 <td>)</td>
270 <td></td><td></td>
271 </tr>
272 </table>
273 </div><div class="memdoc">
274
275 <p>Enable XML based topology using a memory buffer (instead of a file, as with <a class="el" href="a00201.html#ga879439b7ee99407ee911b3ac64e9a25e" title="Enable XML-file based topology.">hwloc_topology_set_xml()</a>). </p>
276 <p>Gather topology information from the XML memory buffer given at <code>buffer</code> and of length <code>size</code>. This buffer may have been filled earlier with <a class="el" href="a00215.html#gad33b7f7c11db10459505a3b1634fd3f1" title="Export the topology into a newly-allocated XML memory buffer.">hwloc_topology_export_xmlbuffer()</a> in <a class="el" href="a00131_source.html">hwloc/export.h</a>.</p>
277 <p>Note that this function does not actually load topology information; it just tells hwloc where to load it from. You'll still need to invoke <a class="el" href="a00195.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a> to actually load the topology information.</p>
278 <dl class="section return"><dt>Returns</dt><dd>-1 with errno set to EINVAL on failure to read the XML buffer.</dd></dl>
279 <dl class="section note"><dt>Note</dt><dd>See also <a class="el" href="a00215.html#ga5ac6917ea7289955fb1ffda4353af9b0" title="Set the application-specific callback for importing userdata.">hwloc_topology_set_userdata_import_callback()</a> for importing application-specific object userdata.</dd>
280 <dd>
281 For convenience, this backend provides empty binding hooks which just return success. To have hwloc still actually call OS-specific hooks, the <a class="el" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b" title="Assume that the selected backend provides the topology for the system on which we are running.">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a> has to be set to assert that the loaded file is really the underlying system.</dd>
282 <dd>
283 On success, the XML component replaces the previously enabled component (if any), but the topology is not actually modified until <a class="el" href="a00195.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a>. </dd></dl>
509284
510285 </div>
511286 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Finding Objects covering at least CPU set</title>
7 <title>Hardware Locality (hwloc): Topology Detection Configuration and Query</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="header">
4141 <div class="summary">
42 <a href="#nested-classes">Data Structures</a> &#124;
43 <a href="#enum-members">Enumerations</a> &#124;
4244 <a href="#func-members">Functions</a> </div>
4345 <div class="headertitle">
44 <div class="title">Finding Objects covering at least CPU set</div> </div>
46 <div class="title">Topology Detection Configuration and Query</div> </div>
4547 </div><!--header-->
4648 <div class="contents">
4749 <table class="memberdecls">
50 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
51 Data Structures</h2></td></tr>
52 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00302.html">hwloc_topology_discovery_support</a></td></tr>
53 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00306.html">hwloc_topology_cpubind_support</a></td></tr>
55 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00310.html">hwloc_topology_membind_support</a></td></tr>
57 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00314.html">hwloc_topology_misc_support</a></td></tr>
59 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00318.html">hwloc_topology_support</a></td></tr>
61 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 </table><table class="memberdecls">
63 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
64 Enumerations</h2></td></tr>
65 <tr class="memitem:gada025d3ec20b4b420f8038d23d6e7bde"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html#gada025d3ec20b4b420f8038d23d6e7bde">hwloc_topology_flags_e</a> { <br />
66 &#160;&#160;<a class="el" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a>
67 , <a class="el" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a>
68 , <a class="el" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea1b66bbd66e900e5c837f71defb32ad89">HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES</a>
69 , <a class="el" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdead93e82b8668ee90e4f9354e201a2ed9c">HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT</a> = (1UL&lt;&lt;3)
70 , <br />
71 &#160;&#160;<a class="el" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdeaa595aed197779012acf43e8ca4a2658d">HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING</a> = (1UL&lt;&lt;4)
72 , <a class="el" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea368d7741135fe309f3782c59644d3caa">HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_MEMBINDING</a> = (1UL&lt;&lt;5)
73 , <a class="el" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdeae7a792e3db4360360a10f9160b10e631">HWLOC_TOPOLOGY_FLAG_DONT_CHANGE_BINDING</a> = (1UL&lt;&lt;6)
74 <br />
75 }</td></tr>
76 <tr class="separator:gada025d3ec20b4b420f8038d23d6e7bde"><td class="memSeparator" colspan="2">&#160;</td></tr>
77 <tr class="memitem:ga9a5a1f0140cd1952544477833733195b"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> { <a class="el" href="a00202.html#gga9a5a1f0140cd1952544477833733195bafda7b59e6810dfe778d8f9a4cc1e350e">HWLOC_TYPE_FILTER_KEEP_ALL</a>
78 , <a class="el" href="a00202.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a">HWLOC_TYPE_FILTER_KEEP_NONE</a>
79 , <a class="el" href="a00202.html#gga9a5a1f0140cd1952544477833733195ba7664716643bf1db83e631eed34f659e4">HWLOC_TYPE_FILTER_KEEP_STRUCTURE</a>
80 , <a class="el" href="a00202.html#gga9a5a1f0140cd1952544477833733195ba63fd24954e18c83ff7eae9588759adb5">HWLOC_TYPE_FILTER_KEEP_IMPORTANT</a>
81 }</td></tr>
82 <tr class="separator:ga9a5a1f0140cd1952544477833733195b"><td class="memSeparator" colspan="2">&#160;</td></tr>
83 </table><table class="memberdecls">
4884 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
4985 Functions</h2></td></tr>
50 <tr class="memitem:ga0e66aa2dc6b2527cfd10723af646c9d7"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html#ga0e66aa2dc6b2527cfd10723af646c9d7">hwloc_get_child_covering_cpuset</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> parent)</td></tr>
51 <tr class="separator:ga0e66aa2dc6b2527cfd10723af646c9d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:ga41acdcdbb8b95d70ecf6c572a3f67dca"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html#ga41acdcdbb8b95d70ecf6c572a3f67dca">hwloc_get_obj_covering_cpuset</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set)</td></tr>
53 <tr class="separator:ga41acdcdbb8b95d70ecf6c572a3f67dca"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:gaba4b6d86eba1169ced4b0e941d2bb5f0"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html#gaba4b6d86eba1169ced4b0e941d2bb5f0">hwloc_get_next_obj_covering_cpuset_by_depth</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, int depth, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> prev)</td></tr>
55 <tr class="separator:gaba4b6d86eba1169ced4b0e941d2bb5f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:ga91cfae08b092e7966002e15d1e987213"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html#ga91cfae08b092e7966002e15d1e987213">hwloc_get_next_obj_covering_cpuset_by_type</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, <a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> prev)</td></tr>
57 <tr class="separator:ga91cfae08b092e7966002e15d1e987213"><td class="memSeparator" colspan="2">&#160;</td></tr>
86 <tr class="memitem:gaaeed4df656979e5f16befea9d29b814b"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html#gaaeed4df656979e5f16befea9d29b814b">hwloc_topology_set_flags</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned long flags)</td></tr>
87 <tr class="separator:gaaeed4df656979e5f16befea9d29b814b"><td class="memSeparator" colspan="2">&#160;</td></tr>
88 <tr class="memitem:ga09318f81c1d4713be907d64748a6f93c"><td class="memItemLeft" align="right" valign="top">unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html#ga09318f81c1d4713be907d64748a6f93c">hwloc_topology_get_flags</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
89 <tr class="separator:ga09318f81c1d4713be907d64748a6f93c"><td class="memSeparator" colspan="2">&#160;</td></tr>
90 <tr class="memitem:ga68ffdcfd9175cdf40709801092f18017"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html#ga68ffdcfd9175cdf40709801092f18017">hwloc_topology_is_thissystem</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict topology)</td></tr>
91 <tr class="separator:ga68ffdcfd9175cdf40709801092f18017"><td class="memSeparator" colspan="2">&#160;</td></tr>
92 <tr class="memitem:gab8c76173c4a8ce1a9a9366012b1388e6"><td class="memItemLeft" align="right" valign="top">const struct <a class="el" href="a00318.html">hwloc_topology_support</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html#gab8c76173c4a8ce1a9a9366012b1388e6">hwloc_topology_get_support</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict topology)</td></tr>
93 <tr class="separator:gab8c76173c4a8ce1a9a9366012b1388e6"><td class="memSeparator" colspan="2">&#160;</td></tr>
94 <tr class="memitem:gad894e70f15f8d4aada7be8d1aba38b7e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html#gad894e70f15f8d4aada7be8d1aba38b7e">hwloc_topology_set_type_filter</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, enum <a class="el" href="a00202.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter)</td></tr>
95 <tr class="separator:gad894e70f15f8d4aada7be8d1aba38b7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
96 <tr class="memitem:ga137ad1178f7a79f2383974d983083401"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html#ga137ad1178f7a79f2383974d983083401">hwloc_topology_get_type_filter</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, enum <a class="el" href="a00202.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> *filter)</td></tr>
97 <tr class="separator:ga137ad1178f7a79f2383974d983083401"><td class="memSeparator" colspan="2">&#160;</td></tr>
98 <tr class="memitem:ga9eb8dc3b106f84921bf5789101e97e24"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html#ga9eb8dc3b106f84921bf5789101e97e24">hwloc_topology_set_all_types_filter</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, enum <a class="el" href="a00202.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter)</td></tr>
99 <tr class="separator:ga9eb8dc3b106f84921bf5789101e97e24"><td class="memSeparator" colspan="2">&#160;</td></tr>
100 <tr class="memitem:ga30bd6d330fe3c8f0cbaad724d114ee20"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html#ga30bd6d330fe3c8f0cbaad724d114ee20">hwloc_topology_set_cache_types_filter</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, enum <a class="el" href="a00202.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter)</td></tr>
101 <tr class="separator:ga30bd6d330fe3c8f0cbaad724d114ee20"><td class="memSeparator" colspan="2">&#160;</td></tr>
102 <tr class="memitem:ga37c7b2e599ed3cd76ad9164630024f30"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html#ga37c7b2e599ed3cd76ad9164630024f30">hwloc_topology_set_icache_types_filter</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, enum <a class="el" href="a00202.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter)</td></tr>
103 <tr class="separator:ga37c7b2e599ed3cd76ad9164630024f30"><td class="memSeparator" colspan="2">&#160;</td></tr>
104 <tr class="memitem:ga0ab38705357bc1203abe829da8a12ad3"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html#ga0ab38705357bc1203abe829da8a12ad3">hwloc_topology_set_io_types_filter</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, enum <a class="el" href="a00202.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> filter)</td></tr>
105 <tr class="separator:ga0ab38705357bc1203abe829da8a12ad3"><td class="memSeparator" colspan="2">&#160;</td></tr>
106 <tr class="memitem:ga2cc7b7b155cba58dda203e54f1637b9c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html#ga2cc7b7b155cba58dda203e54f1637b9c">hwloc_topology_set_userdata</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const void *userdata)</td></tr>
107 <tr class="separator:ga2cc7b7b155cba58dda203e54f1637b9c"><td class="memSeparator" colspan="2">&#160;</td></tr>
108 <tr class="memitem:ga91f992f8d6c4905b2d3c4f43e509c2a3"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00202.html#ga91f992f8d6c4905b2d3c4f43e509c2a3">hwloc_topology_get_userdata</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
109 <tr class="separator:ga91f992f8d6c4905b2d3c4f43e509c2a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
58110 </table>
59111 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
112 <p>Several functions can optionally be called between <a class="el" href="a00195.html#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa" title="Allocate a topology context.">hwloc_topology_init()</a> and <a class="el" href="a00195.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a> to configure how the detection should be performed, e.g. to ignore some objects types, define a synthetic topology, etc. </p>
113 <h2 class="groupheader">Enumeration Type Documentation</h2>
114 <a id="gada025d3ec20b4b420f8038d23d6e7bde"></a>
115 <h2 class="memtitle"><span class="permalink"><a href="#gada025d3ec20b4b420f8038d23d6e7bde">&#9670;&nbsp;</a></span>hwloc_topology_flags_e</h2>
116
117 <div class="memitem">
118 <div class="memproto">
119 <table class="memname">
120 <tr>
121 <td class="memname">enum <a class="el" href="a00202.html#gada025d3ec20b4b420f8038d23d6e7bde">hwloc_topology_flags_e</a></td>
122 </tr>
123 </table>
124 </div><div class="memdoc">
125
126 <p>Flags to be set onto a topology context before load. </p>
127 <p>Flags should be given to <a class="el" href="a00202.html#gaaeed4df656979e5f16befea9d29b814b" title="Set OR&#39;ed flags to non-yet-loaded topology.">hwloc_topology_set_flags()</a>. They may also be returned by <a class="el" href="a00202.html#ga09318f81c1d4713be907d64748a6f93c" title="Get OR&#39;ed flags of a topology.">hwloc_topology_get_flags()</a>. </p>
128 <table class="fieldtable">
129 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258"></a>HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED&#160;</td><td class="fielddoc"><p>Detect the whole system, ignore reservations, include disallowed objects. </p>
130 <p>Gather all resources, even if some were disabled by the administrator. For instance, ignore Linux Cgroup/Cpusets and gather all processors and memory nodes.</p>
131 <p>When this flag is not set, PUs and NUMA nodes that are disallowed are not added to the topology. Parent objects (package, core, cache, etc.) are added only if some of their children are allowed. All existing PUs and NUMA nodes in the topology are allowed. <a class="el" href="a00211.html#ga517d5d68ec9f24583d8933aab713be8e" title="Get allowed CPU set.">hwloc_topology_get_allowed_cpuset()</a> and <a class="el" href="a00211.html#ga21a4d7237a11e76b912ed4524ab78cbd" title="Get allowed node set.">hwloc_topology_get_allowed_nodeset()</a> are equal to the root object cpuset and nodeset.</p>
132 <p>When this flag is set, the actual sets of allowed PUs and NUMA nodes are given by <a class="el" href="a00211.html#ga517d5d68ec9f24583d8933aab713be8e" title="Get allowed CPU set.">hwloc_topology_get_allowed_cpuset()</a> and <a class="el" href="a00211.html#ga21a4d7237a11e76b912ed4524ab78cbd" title="Get allowed node set.">hwloc_topology_get_allowed_nodeset()</a>. They may be smaller than the root object cpuset and nodeset.</p>
133 <p>If the current topology is exported to XML and reimported later, this flag should be set again in the reimported topology so that disallowed resources are reimported as well. </p>
134 </td></tr>
135 <tr><td class="fieldname"><a id="ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b"></a>HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM&#160;</td><td class="fielddoc"><p>Assume that the selected backend provides the topology for the system on which we are running. </p>
136 <p>This forces <a class="el" href="a00202.html#ga68ffdcfd9175cdf40709801092f18017" title="Does the topology context come from this system?">hwloc_topology_is_thissystem()</a> to return 1, i.e. makes hwloc assume that the selected backend provides the topology for the system on which we are running, even if it is not the OS-specific backend but the XML backend for instance. This means making the binding functions actually call the OS-specific system calls and really do binding, while the XML backend would otherwise provide empty hooks just returning success.</p>
137 <p>Setting the environment variable HWLOC_THISSYSTEM may also result in the same behavior.</p>
138 <p>This can be used for efficiency reasons to first detect the topology once, save it to an XML file, and quickly reload it later through the XML backend, but still having binding functions actually do bind. </p>
139 </td></tr>
140 <tr><td class="fieldname"><a id="ggada025d3ec20b4b420f8038d23d6e7bdea1b66bbd66e900e5c837f71defb32ad89"></a>HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES&#160;</td><td class="fielddoc"><p>Get the set of allowed resources from the local operating system even if the topology was loaded from XML or synthetic description. </p>
141 <p>If the topology was loaded from XML or from a synthetic string, restrict it by applying the current process restrictions such as Linux Cgroup/Cpuset.</p>
142 <p>This is useful when the topology is not loaded directly from the local machine (e.g. for performance reason) and it comes with all resources, while the running process is restricted to only parts of the machine.</p>
143 <p>This flag is ignored unless <a class="el" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b" title="Assume that the selected backend provides the topology for the system on which we are running.">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a> is also set since the loaded topology must match the underlying machine where restrictions will be gathered from.</p>
144 <p>Setting the environment variable HWLOC_THISSYSTEM_ALLOWED_RESOURCES would result in the same behavior. </p>
145 </td></tr>
146 <tr><td class="fieldname"><a id="ggada025d3ec20b4b420f8038d23d6e7bdead93e82b8668ee90e4f9354e201a2ed9c"></a>HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT&#160;</td><td class="fielddoc"><p>Import support from the imported topology. </p>
147 <p>When importing a XML topology from a remote machine, binding is disabled by default (see <a class="el" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b" title="Assume that the selected backend provides the topology for the system on which we are running.">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a>). This disabling is also marked by putting zeroes in the corresponding supported feature bits reported by <a class="el" href="a00202.html#gab8c76173c4a8ce1a9a9366012b1388e6" title="Retrieve the topology support.">hwloc_topology_get_support()</a>.</p>
148 <p>The flag <a class="el" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdead93e82b8668ee90e4f9354e201a2ed9c" title="Import support from the imported topology.">HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT</a> actually imports support bits from the remote machine. It also sets the flag <code>imported_support</code> in the struct <a class="el" href="a00314.html" title="Flags describing miscellaneous features.">hwloc_topology_misc_support</a> array. If the imported XML did not contain any support information (exporter hwloc is too old), this flag is not set.</p>
149 <p>Note that these supported features are only relevant for the hwloc installation that actually exported the XML topology (it may vary with the operating system, or with how hwloc was compiled).</p>
150 <p>Note that setting this flag however does not enable binding for the locally imported hwloc topology, it only reports what the remote hwloc and machine support. </p>
151 </td></tr>
152 <tr><td class="fieldname"><a id="ggada025d3ec20b4b420f8038d23d6e7bdeaa595aed197779012acf43e8ca4a2658d"></a>HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING&#160;</td><td class="fielddoc"><p>Do not consider resources outside of the process CPU binding. </p>
153 <p>If the binding of the process is limited to a subset of cores, ignore the other cores during discovery.</p>
154 <p>The resulting topology is identical to what a call to <a class="el" href="a00203.html#ga6db81ed13ac0a9d70cc80372ab537815" title="Restrict the topology to the given CPU set or nodeset.">hwloc_topology_restrict()</a> would generate, but this flag also prevents hwloc from ever touching other resources during the discovery.</p>
155 <p>This flag especially tells the x86 backend to never temporarily rebind a thread on any excluded core. This is useful on Windows because such temporary rebinding can change the process binding.</p>
156 <p>If process CPU binding is not supported, the thread CPU binding is considered instead if supported, or the flag is ignored.</p>
157 <p>This flag requires <a class="el" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b" title="Assume that the selected backend provides the topology for the system on which we are running.">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a> as well since binding support is required. </p>
158 </td></tr>
159 <tr><td class="fieldname"><a id="ggada025d3ec20b4b420f8038d23d6e7bdea368d7741135fe309f3782c59644d3caa"></a>HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_MEMBINDING&#160;</td><td class="fielddoc"><p>Do not consider resources outside of the process memory binding. </p>
160 <p>If the binding of the process is limited to a subset of NUMA nodes, ignore the other NUMA nodes during discovery.</p>
161 <p>The resulting topology is identical to what a call to <a class="el" href="a00203.html#ga6db81ed13ac0a9d70cc80372ab537815" title="Restrict the topology to the given CPU set or nodeset.">hwloc_topology_restrict()</a> would generate, but this flag also prevents hwloc from ever touching other resources during the discovery.</p>
162 <p>This flag is meant to be used together with <a class="el" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdeaa595aed197779012acf43e8ca4a2658d" title="Do not consider resources outside of the process CPU binding.">HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING</a> when both cores and NUMA nodes should be ignored outside of the process binding.</p>
163 <p>If process memory binding is not supported, the thread memory binding is considered instead if supported, or the flag is ignored.</p>
164 <p>This flag requires <a class="el" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b" title="Assume that the selected backend provides the topology for the system on which we are running.">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a> as well since binding support is required. </p>
165 </td></tr>
166 <tr><td class="fieldname"><a id="ggada025d3ec20b4b420f8038d23d6e7bdeae7a792e3db4360360a10f9160b10e631"></a>HWLOC_TOPOLOGY_FLAG_DONT_CHANGE_BINDING&#160;</td><td class="fielddoc"><p>Do not ever modify the process or thread binding during discovery. </p>
167 <p>This flag disables all hwloc discovery steps that require a change of the process or thread binding. This currently only affects the x86 backend which gets entirely disabled.</p>
168 <p>This is useful when <a class="el" href="a00195.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a> is called while the application also creates additional threads or modifies the binding.</p>
169 <p>This flag is also a strict way to make sure the process binding will not change to due thread binding changes on Windows (see <a class="el" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdeaa595aed197779012acf43e8ca4a2658d" title="Do not consider resources outside of the process CPU binding.">HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING</a>). </p>
170 </td></tr>
171 </table>
172
173 </div>
174 </div>
175 <a id="ga9a5a1f0140cd1952544477833733195b"></a>
176 <h2 class="memtitle"><span class="permalink"><a href="#ga9a5a1f0140cd1952544477833733195b">&#9670;&nbsp;</a></span>hwloc_type_filter_e</h2>
177
178 <div class="memitem">
179 <div class="memproto">
180 <table class="memname">
181 <tr>
182 <td class="memname">enum <a class="el" href="a00202.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a></td>
183 </tr>
184 </table>
185 </div><div class="memdoc">
186
187 <p>Type filtering flags. </p>
188 <p>By default, most objects are kept (<a class="el" href="a00202.html#gga9a5a1f0140cd1952544477833733195bafda7b59e6810dfe778d8f9a4cc1e350e" title="Keep all objects of this type.">HWLOC_TYPE_FILTER_KEEP_ALL</a>). Instruction caches, I/O and Misc objects are ignored by default (<a class="el" href="a00202.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a" title="Ignore all objects of this type.">HWLOC_TYPE_FILTER_KEEP_NONE</a>). Die and Group levels are ignored unless they bring structure (<a class="el" href="a00202.html#gga9a5a1f0140cd1952544477833733195ba7664716643bf1db83e631eed34f659e4" title="Only ignore objects if their entire level does not bring any structure.">HWLOC_TYPE_FILTER_KEEP_STRUCTURE</a>).</p>
189 <p>Note that group objects are also ignored individually (without the entire level) when they do not bring structure. </p>
190 <table class="fieldtable">
191 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga9a5a1f0140cd1952544477833733195bafda7b59e6810dfe778d8f9a4cc1e350e"></a>HWLOC_TYPE_FILTER_KEEP_ALL&#160;</td><td class="fielddoc"><p>Keep all objects of this type. </p>
192 <p>Cannot be set for <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a5269ef95be72f88465559d35c9b7ad56" title="Group objects. Objects which do not fit in the above but are detected by hwloc and are useful to take...">HWLOC_OBJ_GROUP</a> (groups are designed only to add more structure to the topology). </p>
193 </td></tr>
194 <tr><td class="fieldname"><a id="gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a"></a>HWLOC_TYPE_FILTER_KEEP_NONE&#160;</td><td class="fielddoc"><p>Ignore all objects of this type. </p>
195 <p>The bottom-level type <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661" title="Processing Unit, or (Logical) Processor. An execution unit (may share a core with some other logical ...">HWLOC_OBJ_PU</a>, the <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a" title="NUMA node. An object that contains memory that is directly and byte-accessible to the host processors...">HWLOC_OBJ_NUMANODE</a> type, and the top-level type <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a3f4e83ffc4a259354959ae8a9eaa2a80" title="Machine. A set of processors and memory with cache coherency.">HWLOC_OBJ_MACHINE</a> may not be ignored. </p>
196 </td></tr>
197 <tr><td class="fieldname"><a id="gga9a5a1f0140cd1952544477833733195ba7664716643bf1db83e631eed34f659e4"></a>HWLOC_TYPE_FILTER_KEEP_STRUCTURE&#160;</td><td class="fielddoc"><p>Only ignore objects if their entire level does not bring any structure. </p>
198 <p>Keep the entire level of objects if at least one of these objects adds structure to the topology. An object brings structure when it has multiple children and it is not the only child of its parent.</p>
199 <p>If all objects in the level are the only child of their parent, and if none of them has multiple children, the entire level is removed.</p>
200 <p>Cannot be set for I/O and Misc objects since the topology structure does not matter there. </p>
201 </td></tr>
202 <tr><td class="fieldname"><a id="gga9a5a1f0140cd1952544477833733195ba63fd24954e18c83ff7eae9588759adb5"></a>HWLOC_TYPE_FILTER_KEEP_IMPORTANT&#160;</td><td class="fielddoc"><p>Only keep likely-important objects of the given type. </p>
203 <p>It is only useful for I/O object types. For <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9" title="PCI device (filtered out by default).">HWLOC_OBJ_PCI_DEVICE</a> and <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075" title="Operating system device (filtered out by default).">HWLOC_OBJ_OS_DEVICE</a>, it means that only objects of major/common kinds are kept (storage, network, OpenFabrics, CUDA, OpenCL, RSMI, NVML, and displays). Also, only OS devices directly attached on PCI (e.g. no USB) are reported. For <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0" title="Bridge (filtered out by default). Any bridge (or PCI switch) that connects the host or an I/O bus,...">HWLOC_OBJ_BRIDGE</a>, it means that bridges are kept only if they have children.</p>
204 <p>This flag equivalent to <a class="el" href="a00202.html#gga9a5a1f0140cd1952544477833733195bafda7b59e6810dfe778d8f9a4cc1e350e" title="Keep all objects of this type.">HWLOC_TYPE_FILTER_KEEP_ALL</a> for Normal, Memory and Misc types since they are likely important. </p>
205 </td></tr>
206 </table>
207
208 </div>
209 </div>
60210 <h2 class="groupheader">Function Documentation</h2>
61 <a id="ga0e66aa2dc6b2527cfd10723af646c9d7"></a>
62 <h2 class="memtitle"><span class="permalink"><a href="#ga0e66aa2dc6b2527cfd10723af646c9d7">&#9670;&nbsp;</a></span>hwloc_get_child_covering_cpuset()</h2>
63
64 <div class="memitem">
65 <div class="memproto">
66 <table class="mlabels">
67 <tr>
68 <td class="mlabels-left">
69 <table class="memname">
70 <tr>
71 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_child_covering_cpuset </td>
72 <td>(</td>
73 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
74 <td class="paramname"><em>topology</em>, </td>
75 </tr>
76 <tr>
77 <td class="paramkey"></td>
78 <td></td>
79 <td class="paramtype"><a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
80 <td class="paramname"><em>set</em>, </td>
81 </tr>
82 <tr>
83 <td class="paramkey"></td>
84 <td></td>
85 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
86 <td class="paramname"><em>parent</em>&#160;</td>
87 </tr>
88 <tr>
89 <td></td>
90 <td>)</td>
91 <td></td><td></td>
92 </tr>
93 </table>
94 </td>
95 <td class="mlabels-right">
96 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
97 </tr>
98 </table>
99 </div><div class="memdoc">
100
101 <p>Get the child covering at least CPU set <code>set</code>. </p>
102 <dl class="section return"><dt>Returns</dt><dd><code>NULL</code> if no child matches or if <code>set</code> is empty.</dd></dl>
103 <dl class="section note"><dt>Note</dt><dd>This function cannot work if parent does not have a CPU set (I/O or Misc objects). </dd></dl>
104
105 </div>
106 </div>
107 <a id="gaba4b6d86eba1169ced4b0e941d2bb5f0"></a>
108 <h2 class="memtitle"><span class="permalink"><a href="#gaba4b6d86eba1169ced4b0e941d2bb5f0">&#9670;&nbsp;</a></span>hwloc_get_next_obj_covering_cpuset_by_depth()</h2>
109
110 <div class="memitem">
111 <div class="memproto">
112 <table class="mlabels">
113 <tr>
114 <td class="mlabels-left">
115 <table class="memname">
116 <tr>
117 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_next_obj_covering_cpuset_by_depth </td>
118 <td>(</td>
119 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
120 <td class="paramname"><em>topology</em>, </td>
121 </tr>
122 <tr>
123 <td class="paramkey"></td>
124 <td></td>
125 <td class="paramtype"><a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
126 <td class="paramname"><em>set</em>, </td>
127 </tr>
128 <tr>
129 <td class="paramkey"></td>
130 <td></td>
131 <td class="paramtype">int&#160;</td>
132 <td class="paramname"><em>depth</em>, </td>
133 </tr>
134 <tr>
135 <td class="paramkey"></td>
136 <td></td>
137 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
138 <td class="paramname"><em>prev</em>&#160;</td>
139 </tr>
140 <tr>
141 <td></td>
142 <td>)</td>
143 <td></td><td></td>
144 </tr>
145 </table>
146 </td>
147 <td class="mlabels-right">
148 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
149 </tr>
150 </table>
151 </div><div class="memdoc">
152
153 <p>Iterate through same-depth objects covering at least CPU set <code>set</code>. </p>
154 <p>If object <code>prev</code> is <code>NULL</code>, return the first object at depth <code>depth</code> covering at least part of CPU set <code>set</code>. The next invokation should pass the previous return value in <code>prev</code> so as to obtain the next object covering at least another part of <code>set</code>.</p>
155 <dl class="section note"><dt>Note</dt><dd>This function cannot work if objects at the given depth do not have CPU sets (I/O or Misc objects). </dd></dl>
156
157 </div>
158 </div>
159 <a id="ga91cfae08b092e7966002e15d1e987213"></a>
160 <h2 class="memtitle"><span class="permalink"><a href="#ga91cfae08b092e7966002e15d1e987213">&#9670;&nbsp;</a></span>hwloc_get_next_obj_covering_cpuset_by_type()</h2>
161
162 <div class="memitem">
163 <div class="memproto">
164 <table class="mlabels">
165 <tr>
166 <td class="mlabels-left">
167 <table class="memname">
168 <tr>
169 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_next_obj_covering_cpuset_by_type </td>
170 <td>(</td>
171 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
172 <td class="paramname"><em>topology</em>, </td>
173 </tr>
174 <tr>
175 <td class="paramkey"></td>
176 <td></td>
177 <td class="paramtype"><a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
178 <td class="paramname"><em>set</em>, </td>
179 </tr>
180 <tr>
181 <td class="paramkey"></td>
182 <td></td>
183 <td class="paramtype"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
211 <a id="ga09318f81c1d4713be907d64748a6f93c"></a>
212 <h2 class="memtitle"><span class="permalink"><a href="#ga09318f81c1d4713be907d64748a6f93c">&#9670;&nbsp;</a></span>hwloc_topology_get_flags()</h2>
213
214 <div class="memitem">
215 <div class="memproto">
216 <table class="memname">
217 <tr>
218 <td class="memname">unsigned long hwloc_topology_get_flags </td>
219 <td>(</td>
220 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
221 <td class="paramname"><em>topology</em></td><td>)</td>
222 <td></td>
223 </tr>
224 </table>
225 </div><div class="memdoc">
226
227 <p>Get OR'ed flags of a topology. </p>
228 <p>Get the OR'ed set of <a class="el" href="a00202.html#gada025d3ec20b4b420f8038d23d6e7bde" title="Flags to be set onto a topology context before load.">hwloc_topology_flags_e</a> of a topology.</p>
229 <dl class="section return"><dt>Returns</dt><dd>the flags previously set with <a class="el" href="a00202.html#gaaeed4df656979e5f16befea9d29b814b" title="Set OR&#39;ed flags to non-yet-loaded topology.">hwloc_topology_set_flags()</a>. </dd></dl>
230
231 </div>
232 </div>
233 <a id="gab8c76173c4a8ce1a9a9366012b1388e6"></a>
234 <h2 class="memtitle"><span class="permalink"><a href="#gab8c76173c4a8ce1a9a9366012b1388e6">&#9670;&nbsp;</a></span>hwloc_topology_get_support()</h2>
235
236 <div class="memitem">
237 <div class="memproto">
238 <table class="memname">
239 <tr>
240 <td class="memname">const struct <a class="el" href="a00318.html">hwloc_topology_support</a>* hwloc_topology_get_support </td>
241 <td>(</td>
242 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict&#160;</td>
243 <td class="paramname"><em>topology</em></td><td>)</td>
244 <td></td>
245 </tr>
246 </table>
247 </div><div class="memdoc">
248
249 <p>Retrieve the topology support. </p>
250 <p>Each flag indicates whether a feature is supported. If set to 0, the feature is not supported. If set to 1, the feature is supported, but the corresponding call may still fail in some corner cases.</p>
251 <p>These features are also listed by hwloc-info --support</p>
252 <p>The reported features are what the current topology supports on the current machine. If the topology was exported to XML from another machine and later imported here, support still describes what is supported for this imported topology after import. By default, binding will be reported as unsupported in this case (see <a class="el" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b" title="Assume that the selected backend provides the topology for the system on which we are running.">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a>).</p>
253 <p>Topology flag <a class="el" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdead93e82b8668ee90e4f9354e201a2ed9c" title="Import support from the imported topology.">HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT</a> may be used to report the supported features of the original remote machine instead. If it was successfully imported, <code>imported_support</code> will be set in the struct <a class="el" href="a00314.html" title="Flags describing miscellaneous features.">hwloc_topology_misc_support</a> array. </p>
254
255 </div>
256 </div>
257 <a id="ga137ad1178f7a79f2383974d983083401"></a>
258 <h2 class="memtitle"><span class="permalink"><a href="#ga137ad1178f7a79f2383974d983083401">&#9670;&nbsp;</a></span>hwloc_topology_get_type_filter()</h2>
259
260 <div class="memitem">
261 <div class="memproto">
262 <table class="memname">
263 <tr>
264 <td class="memname">int hwloc_topology_get_type_filter </td>
265 <td>(</td>
266 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
267 <td class="paramname"><em>topology</em>, </td>
268 </tr>
269 <tr>
270 <td class="paramkey"></td>
271 <td></td>
272 <td class="paramtype"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
184273 <td class="paramname"><em>type</em>, </td>
185274 </tr>
186275 <tr>
187276 <td class="paramkey"></td>
188277 <td></td>
189 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
190 <td class="paramname"><em>prev</em>&#160;</td>
191 </tr>
192 <tr>
193 <td></td>
194 <td>)</td>
195 <td></td><td></td>
196 </tr>
197 </table>
198 </td>
199 <td class="mlabels-right">
200 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
201 </tr>
202 </table>
203 </div><div class="memdoc">
204
205 <p>Iterate through same-type objects covering at least CPU set <code>set</code>. </p>
206 <p>If object <code>prev</code> is <code>NULL</code>, return the first object of type <code>type</code> covering at least part of CPU set <code>set</code>. The next invokation should pass the previous return value in <code>prev</code> so as to obtain the next object of type <code>type</code> covering at least another part of <code>set</code>.</p>
207 <p>If there are no or multiple depths for type <code>type</code>, <code>NULL</code> is returned. The caller may fallback to <a class="el" href="a00202.html#gaba4b6d86eba1169ced4b0e941d2bb5f0" title="Iterate through same-depth objects covering at least CPU set set.">hwloc_get_next_obj_covering_cpuset_by_depth()</a> for each depth.</p>
208 <dl class="section note"><dt>Note</dt><dd>This function cannot work if objects of the given type do not have CPU sets (I/O or Misc objects). </dd></dl>
209
210 </div>
211 </div>
212 <a id="ga41acdcdbb8b95d70ecf6c572a3f67dca"></a>
213 <h2 class="memtitle"><span class="permalink"><a href="#ga41acdcdbb8b95d70ecf6c572a3f67dca">&#9670;&nbsp;</a></span>hwloc_get_obj_covering_cpuset()</h2>
214
215 <div class="memitem">
216 <div class="memproto">
217 <table class="mlabels">
218 <tr>
219 <td class="mlabels-left">
220 <table class="memname">
221 <tr>
222 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_obj_covering_cpuset </td>
223 <td>(</td>
224 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
225 <td class="paramname"><em>topology</em>, </td>
226 </tr>
227 <tr>
228 <td class="paramkey"></td>
229 <td></td>
230 <td class="paramtype"><a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
231 <td class="paramname"><em>set</em>&#160;</td>
232 </tr>
233 <tr>
234 <td></td>
235 <td>)</td>
236 <td></td><td></td>
237 </tr>
238 </table>
239 </td>
240 <td class="mlabels-right">
241 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
242 </tr>
243 </table>
244 </div><div class="memdoc">
245
246 <p>Get the lowest object covering at least CPU set <code>set</code>. </p>
247 <dl class="section return"><dt>Returns</dt><dd><code>NULL</code> if no object matches or if <code>set</code> is empty. </dd></dl>
278 <td class="paramtype">enum <a class="el" href="a00202.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a> *&#160;</td>
279 <td class="paramname"><em>filter</em>&#160;</td>
280 </tr>
281 <tr>
282 <td></td>
283 <td>)</td>
284 <td></td><td></td>
285 </tr>
286 </table>
287 </div><div class="memdoc">
288
289 <p>Get the current filtering for the given object type. </p>
290
291 </div>
292 </div>
293 <a id="ga91f992f8d6c4905b2d3c4f43e509c2a3"></a>
294 <h2 class="memtitle"><span class="permalink"><a href="#ga91f992f8d6c4905b2d3c4f43e509c2a3">&#9670;&nbsp;</a></span>hwloc_topology_get_userdata()</h2>
295
296 <div class="memitem">
297 <div class="memproto">
298 <table class="memname">
299 <tr>
300 <td class="memname">void* hwloc_topology_get_userdata </td>
301 <td>(</td>
302 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
303 <td class="paramname"><em>topology</em></td><td>)</td>
304 <td></td>
305 </tr>
306 </table>
307 </div><div class="memdoc">
308
309 <p>Retrieve the topology-specific userdata pointer. </p>
310 <p>Retrieve the application-given private data pointer that was previously set with <a class="el" href="a00202.html#ga2cc7b7b155cba58dda203e54f1637b9c" title="Set the topology-specific userdata pointer.">hwloc_topology_set_userdata()</a>. </p>
311
312 </div>
313 </div>
314 <a id="ga68ffdcfd9175cdf40709801092f18017"></a>
315 <h2 class="memtitle"><span class="permalink"><a href="#ga68ffdcfd9175cdf40709801092f18017">&#9670;&nbsp;</a></span>hwloc_topology_is_thissystem()</h2>
316
317 <div class="memitem">
318 <div class="memproto">
319 <table class="memname">
320 <tr>
321 <td class="memname">int hwloc_topology_is_thissystem </td>
322 <td>(</td>
323 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict&#160;</td>
324 <td class="paramname"><em>topology</em></td><td>)</td>
325 <td></td>
326 </tr>
327 </table>
328 </div><div class="memdoc">
329
330 <p>Does the topology context come from this system? </p>
331 <dl class="section return"><dt>Returns</dt><dd>1 if this topology context was built using the system running this program. </dd>
332 <dd>
333 0 instead (for instance if using another file-system root, a XML topology file, or a synthetic topology). </dd></dl>
334
335 </div>
336 </div>
337 <a id="ga9eb8dc3b106f84921bf5789101e97e24"></a>
338 <h2 class="memtitle"><span class="permalink"><a href="#ga9eb8dc3b106f84921bf5789101e97e24">&#9670;&nbsp;</a></span>hwloc_topology_set_all_types_filter()</h2>
339
340 <div class="memitem">
341 <div class="memproto">
342 <table class="memname">
343 <tr>
344 <td class="memname">int hwloc_topology_set_all_types_filter </td>
345 <td>(</td>
346 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
347 <td class="paramname"><em>topology</em>, </td>
348 </tr>
349 <tr>
350 <td class="paramkey"></td>
351 <td></td>
352 <td class="paramtype">enum <a class="el" href="a00202.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a>&#160;</td>
353 <td class="paramname"><em>filter</em>&#160;</td>
354 </tr>
355 <tr>
356 <td></td>
357 <td>)</td>
358 <td></td><td></td>
359 </tr>
360 </table>
361 </div><div class="memdoc">
362
363 <p>Set the filtering for all object types. </p>
364 <p>If some types do not support this filtering, they are silently ignored. </p>
365
366 </div>
367 </div>
368 <a id="ga30bd6d330fe3c8f0cbaad724d114ee20"></a>
369 <h2 class="memtitle"><span class="permalink"><a href="#ga30bd6d330fe3c8f0cbaad724d114ee20">&#9670;&nbsp;</a></span>hwloc_topology_set_cache_types_filter()</h2>
370
371 <div class="memitem">
372 <div class="memproto">
373 <table class="memname">
374 <tr>
375 <td class="memname">int hwloc_topology_set_cache_types_filter </td>
376 <td>(</td>
377 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
378 <td class="paramname"><em>topology</em>, </td>
379 </tr>
380 <tr>
381 <td class="paramkey"></td>
382 <td></td>
383 <td class="paramtype">enum <a class="el" href="a00202.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a>&#160;</td>
384 <td class="paramname"><em>filter</em>&#160;</td>
385 </tr>
386 <tr>
387 <td></td>
388 <td>)</td>
389 <td></td><td></td>
390 </tr>
391 </table>
392 </div><div class="memdoc">
393
394 <p>Set the filtering for all CPU cache object types. </p>
395 <p>Memory-side caches are not involved since they are not CPU caches. </p>
396
397 </div>
398 </div>
399 <a id="gaaeed4df656979e5f16befea9d29b814b"></a>
400 <h2 class="memtitle"><span class="permalink"><a href="#gaaeed4df656979e5f16befea9d29b814b">&#9670;&nbsp;</a></span>hwloc_topology_set_flags()</h2>
401
402 <div class="memitem">
403 <div class="memproto">
404 <table class="memname">
405 <tr>
406 <td class="memname">int hwloc_topology_set_flags </td>
407 <td>(</td>
408 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
409 <td class="paramname"><em>topology</em>, </td>
410 </tr>
411 <tr>
412 <td class="paramkey"></td>
413 <td></td>
414 <td class="paramtype">unsigned long&#160;</td>
415 <td class="paramname"><em>flags</em>&#160;</td>
416 </tr>
417 <tr>
418 <td></td>
419 <td>)</td>
420 <td></td><td></td>
421 </tr>
422 </table>
423 </div><div class="memdoc">
424
425 <p>Set OR'ed flags to non-yet-loaded topology. </p>
426 <p>Set a OR'ed set of <a class="el" href="a00202.html#gada025d3ec20b4b420f8038d23d6e7bde" title="Flags to be set onto a topology context before load.">hwloc_topology_flags_e</a> onto a topology that was not yet loaded.</p>
427 <p>If this function is called multiple times, the last invokation will erase and replace the set of flags that was previously set.</p>
428 <p>The flags set in a topology may be retrieved with <a class="el" href="a00202.html#ga09318f81c1d4713be907d64748a6f93c" title="Get OR&#39;ed flags of a topology.">hwloc_topology_get_flags()</a> </p>
429
430 </div>
431 </div>
432 <a id="ga37c7b2e599ed3cd76ad9164630024f30"></a>
433 <h2 class="memtitle"><span class="permalink"><a href="#ga37c7b2e599ed3cd76ad9164630024f30">&#9670;&nbsp;</a></span>hwloc_topology_set_icache_types_filter()</h2>
434
435 <div class="memitem">
436 <div class="memproto">
437 <table class="memname">
438 <tr>
439 <td class="memname">int hwloc_topology_set_icache_types_filter </td>
440 <td>(</td>
441 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
442 <td class="paramname"><em>topology</em>, </td>
443 </tr>
444 <tr>
445 <td class="paramkey"></td>
446 <td></td>
447 <td class="paramtype">enum <a class="el" href="a00202.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a>&#160;</td>
448 <td class="paramname"><em>filter</em>&#160;</td>
449 </tr>
450 <tr>
451 <td></td>
452 <td>)</td>
453 <td></td><td></td>
454 </tr>
455 </table>
456 </div><div class="memdoc">
457
458 <p>Set the filtering for all CPU instruction cache object types. </p>
459 <p>Memory-side caches are not involved since they are not CPU caches. </p>
460
461 </div>
462 </div>
463 <a id="ga0ab38705357bc1203abe829da8a12ad3"></a>
464 <h2 class="memtitle"><span class="permalink"><a href="#ga0ab38705357bc1203abe829da8a12ad3">&#9670;&nbsp;</a></span>hwloc_topology_set_io_types_filter()</h2>
465
466 <div class="memitem">
467 <div class="memproto">
468 <table class="memname">
469 <tr>
470 <td class="memname">int hwloc_topology_set_io_types_filter </td>
471 <td>(</td>
472 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
473 <td class="paramname"><em>topology</em>, </td>
474 </tr>
475 <tr>
476 <td class="paramkey"></td>
477 <td></td>
478 <td class="paramtype">enum <a class="el" href="a00202.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a>&#160;</td>
479 <td class="paramname"><em>filter</em>&#160;</td>
480 </tr>
481 <tr>
482 <td></td>
483 <td>)</td>
484 <td></td><td></td>
485 </tr>
486 </table>
487 </div><div class="memdoc">
488
489 <p>Set the filtering for all I/O object types. </p>
490
491 </div>
492 </div>
493 <a id="gad894e70f15f8d4aada7be8d1aba38b7e"></a>
494 <h2 class="memtitle"><span class="permalink"><a href="#gad894e70f15f8d4aada7be8d1aba38b7e">&#9670;&nbsp;</a></span>hwloc_topology_set_type_filter()</h2>
495
496 <div class="memitem">
497 <div class="memproto">
498 <table class="memname">
499 <tr>
500 <td class="memname">int hwloc_topology_set_type_filter </td>
501 <td>(</td>
502 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
503 <td class="paramname"><em>topology</em>, </td>
504 </tr>
505 <tr>
506 <td class="paramkey"></td>
507 <td></td>
508 <td class="paramtype"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
509 <td class="paramname"><em>type</em>, </td>
510 </tr>
511 <tr>
512 <td class="paramkey"></td>
513 <td></td>
514 <td class="paramtype">enum <a class="el" href="a00202.html#ga9a5a1f0140cd1952544477833733195b">hwloc_type_filter_e</a>&#160;</td>
515 <td class="paramname"><em>filter</em>&#160;</td>
516 </tr>
517 <tr>
518 <td></td>
519 <td>)</td>
520 <td></td><td></td>
521 </tr>
522 </table>
523 </div><div class="memdoc">
524
525 <p>Set the filtering for the given object type. </p>
526
527 </div>
528 </div>
529 <a id="ga2cc7b7b155cba58dda203e54f1637b9c"></a>
530 <h2 class="memtitle"><span class="permalink"><a href="#ga2cc7b7b155cba58dda203e54f1637b9c">&#9670;&nbsp;</a></span>hwloc_topology_set_userdata()</h2>
531
532 <div class="memitem">
533 <div class="memproto">
534 <table class="memname">
535 <tr>
536 <td class="memname">void hwloc_topology_set_userdata </td>
537 <td>(</td>
538 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
539 <td class="paramname"><em>topology</em>, </td>
540 </tr>
541 <tr>
542 <td class="paramkey"></td>
543 <td></td>
544 <td class="paramtype">const void *&#160;</td>
545 <td class="paramname"><em>userdata</em>&#160;</td>
546 </tr>
547 <tr>
548 <td></td>
549 <td>)</td>
550 <td></td><td></td>
551 </tr>
552 </table>
553 </div><div class="memdoc">
554
555 <p>Set the topology-specific userdata pointer. </p>
556 <p>Each topology may store one application-given private data pointer. It is initialized to <code>NULL</code>. hwloc will never modify it.</p>
557 <p>Use it as you wish, after <a class="el" href="a00195.html#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa" title="Allocate a topology context.">hwloc_topology_init()</a> and until hwloc_topolog_destroy().</p>
558 <p>This pointer is not exported to XML. </p>
248559
249560 </div>
250561 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Looking at Ancestor and Child Objects</title>
7 <title>Hardware Locality (hwloc): Modifying a loaded Topology</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="header">
4141 <div class="summary">
42 <a href="#enum-members">Enumerations</a> &#124;
4243 <a href="#func-members">Functions</a> </div>
4344 <div class="headertitle">
44 <div class="title">Looking at Ancestor and Child Objects</div> </div>
45 <div class="title">Modifying a loaded Topology</div> </div>
4546 </div><!--header-->
4647 <div class="contents">
4748 <table class="memberdecls">
49 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
50 Enumerations</h2></td></tr>
51 <tr class="memitem:ga9d80f08eb25b7ac22f1b998dc8bf521f"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html#ga9d80f08eb25b7ac22f1b998dc8bf521f">hwloc_restrict_flags_e</a> { <br />
52 &#160;&#160;<a class="el" href="a00203.html#gga9d80f08eb25b7ac22f1b998dc8bf521fa80eeb9cbba401ab050f8fb4573725891">HWLOC_RESTRICT_FLAG_REMOVE_CPULESS</a>
53 , <a class="el" href="a00203.html#gga9d80f08eb25b7ac22f1b998dc8bf521fae4c5b1b87232f2d8a60559e77ac65a68">HWLOC_RESTRICT_FLAG_BYNODESET</a> = (1UL&lt;&lt;3)
54 , <a class="el" href="a00203.html#gga9d80f08eb25b7ac22f1b998dc8bf521faf5ba49808855704bfe9cb9fe7347f93b">HWLOC_RESTRICT_FLAG_REMOVE_MEMLESS</a>
55 , <a class="el" href="a00203.html#gga9d80f08eb25b7ac22f1b998dc8bf521fa699969227a09bbc1a7de51dc9fb7be4b">HWLOC_RESTRICT_FLAG_ADAPT_MISC</a>
56 , <br />
57 &#160;&#160;<a class="el" href="a00203.html#gga9d80f08eb25b7ac22f1b998dc8bf521faa95d6985e36ec1e55f68b210297a85cb">HWLOC_RESTRICT_FLAG_ADAPT_IO</a>
58 <br />
59 }</td></tr>
60 <tr class="separator:ga9d80f08eb25b7ac22f1b998dc8bf521f"><td class="memSeparator" colspan="2">&#160;</td></tr>
61 <tr class="memitem:ga38b1be3922094d880f6e76bf56c973d6"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html#ga38b1be3922094d880f6e76bf56c973d6">hwloc_allow_flags_e</a> { <a class="el" href="a00203.html#gga38b1be3922094d880f6e76bf56c973d6aca107692455774f9d323d21b8abfce72">HWLOC_ALLOW_FLAG_ALL</a>
62 , <a class="el" href="a00203.html#gga38b1be3922094d880f6e76bf56c973d6a88c50088c09dcf1e1a496c0817556fb9">HWLOC_ALLOW_FLAG_LOCAL_RESTRICTIONS</a>
63 , <a class="el" href="a00203.html#gga38b1be3922094d880f6e76bf56c973d6a489c8c1b67ce7e0b8cf7a665852760e1">HWLOC_ALLOW_FLAG_CUSTOM</a>
64 }</td></tr>
65 <tr class="separator:ga38b1be3922094d880f6e76bf56c973d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 </table><table class="memberdecls">
4867 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
4968 Functions</h2></td></tr>
50 <tr class="memitem:ga9f8c93fde236e9642a96957af01a11cb"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html#ga9f8c93fde236e9642a96957af01a11cb">hwloc_get_ancestor_obj_by_depth</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int depth, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj)</td></tr>
51 <tr class="separator:ga9f8c93fde236e9642a96957af01a11cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:ga70f0c7583291da707c15ae4daa850f41"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html#ga70f0c7583291da707c15ae4daa850f41">hwloc_get_ancestor_obj_by_type</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj)</td></tr>
53 <tr class="separator:ga70f0c7583291da707c15ae4daa850f41"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:gab1fa883021928b5c476911c4102e9be3"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html#gab1fa883021928b5c476911c4102e9be3">hwloc_get_common_ancestor_obj</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj1, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj2)</td></tr>
55 <tr class="separator:gab1fa883021928b5c476911c4102e9be3"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:ga408cf74f5bf9ed497911a320c7f8cc56"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html#ga408cf74f5bf9ed497911a320c7f8cc56">hwloc_obj_is_in_subtree</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> subtree_root)</td></tr>
57 <tr class="separator:ga408cf74f5bf9ed497911a320c7f8cc56"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:ga12d8565a3436c565e791ed02a0353621"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html#ga12d8565a3436c565e791ed02a0353621">hwloc_get_next_child</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> parent, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> prev)</td></tr>
59 <tr class="separator:ga12d8565a3436c565e791ed02a0353621"><td class="memSeparator" colspan="2">&#160;</td></tr>
69 <tr class="memitem:ga6db81ed13ac0a9d70cc80372ab537815"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html#ga6db81ed13ac0a9d70cc80372ab537815">hwloc_topology_restrict</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict topology, <a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> set, unsigned long flags)</td></tr>
70 <tr class="separator:ga6db81ed13ac0a9d70cc80372ab537815"><td class="memSeparator" colspan="2">&#160;</td></tr>
71 <tr class="memitem:gaf955b190c0299dcfb5bc985d777f92a1"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html#gaf955b190c0299dcfb5bc985d777f92a1">hwloc_topology_allow</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict topology, <a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> cpuset, <a class="el" href="a00192.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> nodeset, unsigned long flags)</td></tr>
72 <tr class="separator:gaf955b190c0299dcfb5bc985d777f92a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
73 <tr class="memitem:gad980782ade737900c5cf208946768c30"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html#gad980782ade737900c5cf208946768c30">hwloc_topology_insert_misc_object</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> parent, const char *name)</td></tr>
74 <tr class="separator:gad980782ade737900c5cf208946768c30"><td class="memSeparator" colspan="2">&#160;</td></tr>
75 <tr class="memitem:ga4cea4741165faf5323931a9ed8786ef7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html#ga4cea4741165faf5323931a9ed8786ef7">hwloc_topology_alloc_group_object</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
76 <tr class="separator:ga4cea4741165faf5323931a9ed8786ef7"><td class="memSeparator" colspan="2">&#160;</td></tr>
77 <tr class="memitem:ga1fc6012b3e1c249b83f48cb7bcacaa5b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html#ga1fc6012b3e1c249b83f48cb7bcacaa5b">hwloc_topology_insert_group_object</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> group)</td></tr>
78 <tr class="separator:ga1fc6012b3e1c249b83f48cb7bcacaa5b"><td class="memSeparator" colspan="2">&#160;</td></tr>
79 <tr class="memitem:gad458715d3335df44849216cc123d1055"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html#gad458715d3335df44849216cc123d1055">hwloc_obj_add_other_obj_sets</a> (<a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> dst, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> src)</td></tr>
80 <tr class="separator:gad458715d3335df44849216cc123d1055"><td class="memSeparator" colspan="2">&#160;</td></tr>
81 <tr class="memitem:ga698ecd640d2b76742bba3829a145cd9a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00203.html#ga698ecd640d2b76742bba3829a145cd9a">hwloc_topology_refresh</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
82 <tr class="separator:ga698ecd640d2b76742bba3829a145cd9a"><td class="memSeparator" colspan="2">&#160;</td></tr>
6083 </table>
6184 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
62 <p>Be sure to see the figure in <a class="el" href="a00386.html">Terms and Definitions</a> 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. </p>
85 <h2 class="groupheader">Enumeration Type Documentation</h2>
86 <a id="ga38b1be3922094d880f6e76bf56c973d6"></a>
87 <h2 class="memtitle"><span class="permalink"><a href="#ga38b1be3922094d880f6e76bf56c973d6">&#9670;&nbsp;</a></span>hwloc_allow_flags_e</h2>
88
89 <div class="memitem">
90 <div class="memproto">
91 <table class="memname">
92 <tr>
93 <td class="memname">enum <a class="el" href="a00203.html#ga38b1be3922094d880f6e76bf56c973d6">hwloc_allow_flags_e</a></td>
94 </tr>
95 </table>
96 </div><div class="memdoc">
97
98 <p>Flags to be given to <a class="el" href="a00203.html#gaf955b190c0299dcfb5bc985d777f92a1" title="Change the sets of allowed PUs and NUMA nodes in the topology.">hwloc_topology_allow()</a>. </p>
99 <table class="fieldtable">
100 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga38b1be3922094d880f6e76bf56c973d6aca107692455774f9d323d21b8abfce72"></a>HWLOC_ALLOW_FLAG_ALL&#160;</td><td class="fielddoc"><p>Mark all objects as allowed in the topology. </p>
101 <p><code>cpuset</code> and <code>nođeset</code> given to <a class="el" href="a00203.html#gaf955b190c0299dcfb5bc985d777f92a1" title="Change the sets of allowed PUs and NUMA nodes in the topology.">hwloc_topology_allow()</a> must be <code>NULL</code>. </p>
102 </td></tr>
103 <tr><td class="fieldname"><a id="gga38b1be3922094d880f6e76bf56c973d6a88c50088c09dcf1e1a496c0817556fb9"></a>HWLOC_ALLOW_FLAG_LOCAL_RESTRICTIONS&#160;</td><td class="fielddoc"><p>Only allow objects that are available to the current process. </p>
104 <p>The topology must have <a class="el" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b" title="Assume that the selected backend provides the topology for the system on which we are running.">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a> so that the set of available resources can actually be retrieved from the operating system.</p>
105 <p><code>cpuset</code> and <code>nođeset</code> given to <a class="el" href="a00203.html#gaf955b190c0299dcfb5bc985d777f92a1" title="Change the sets of allowed PUs and NUMA nodes in the topology.">hwloc_topology_allow()</a> must be <code>NULL</code>. </p>
106 </td></tr>
107 <tr><td class="fieldname"><a id="gga38b1be3922094d880f6e76bf56c973d6a489c8c1b67ce7e0b8cf7a665852760e1"></a>HWLOC_ALLOW_FLAG_CUSTOM&#160;</td><td class="fielddoc"><p>Allow a custom set of objects, given to <a class="el" href="a00203.html#gaf955b190c0299dcfb5bc985d777f92a1" title="Change the sets of allowed PUs and NUMA nodes in the topology.">hwloc_topology_allow()</a> as <code>cpuset</code> and/or <code>nodeset</code> parameters. </p>
108 </td></tr>
109 </table>
110
111 </div>
112 </div>
113 <a id="ga9d80f08eb25b7ac22f1b998dc8bf521f"></a>
114 <h2 class="memtitle"><span class="permalink"><a href="#ga9d80f08eb25b7ac22f1b998dc8bf521f">&#9670;&nbsp;</a></span>hwloc_restrict_flags_e</h2>
115
116 <div class="memitem">
117 <div class="memproto">
118 <table class="memname">
119 <tr>
120 <td class="memname">enum <a class="el" href="a00203.html#ga9d80f08eb25b7ac22f1b998dc8bf521f">hwloc_restrict_flags_e</a></td>
121 </tr>
122 </table>
123 </div><div class="memdoc">
124
125 <p>Flags to be given to <a class="el" href="a00203.html#ga6db81ed13ac0a9d70cc80372ab537815" title="Restrict the topology to the given CPU set or nodeset.">hwloc_topology_restrict()</a>. </p>
126 <table class="fieldtable">
127 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga9d80f08eb25b7ac22f1b998dc8bf521fa80eeb9cbba401ab050f8fb4573725891"></a>HWLOC_RESTRICT_FLAG_REMOVE_CPULESS&#160;</td><td class="fielddoc"><p>Remove all objects that became CPU-less. By default, only objects that contain no PU and no memory are removed. This flag may not be used with <a class="el" href="a00203.html#gga9d80f08eb25b7ac22f1b998dc8bf521fae4c5b1b87232f2d8a60559e77ac65a68" title="Restrict by nodeset instead of CPU set. Only keep objects whose nodeset is included or partially incl...">HWLOC_RESTRICT_FLAG_BYNODESET</a>. </p>
128 </td></tr>
129 <tr><td class="fieldname"><a id="gga9d80f08eb25b7ac22f1b998dc8bf521fae4c5b1b87232f2d8a60559e77ac65a68"></a>HWLOC_RESTRICT_FLAG_BYNODESET&#160;</td><td class="fielddoc"><p>Restrict by nodeset instead of CPU set. Only keep objects whose nodeset is included or partially included in the given set. This flag may not be used with <a class="el" href="a00203.html#gga9d80f08eb25b7ac22f1b998dc8bf521fa80eeb9cbba401ab050f8fb4573725891" title="Remove all objects that became CPU-less. By default, only objects that contain no PU and no memory ar...">HWLOC_RESTRICT_FLAG_REMOVE_CPULESS</a>. </p>
130 </td></tr>
131 <tr><td class="fieldname"><a id="gga9d80f08eb25b7ac22f1b998dc8bf521faf5ba49808855704bfe9cb9fe7347f93b"></a>HWLOC_RESTRICT_FLAG_REMOVE_MEMLESS&#160;</td><td class="fielddoc"><p>Remove all objects that became Memory-less. By default, only objects that contain no PU and no memory are removed. This flag may only be used with <a class="el" href="a00203.html#gga9d80f08eb25b7ac22f1b998dc8bf521fae4c5b1b87232f2d8a60559e77ac65a68" title="Restrict by nodeset instead of CPU set. Only keep objects whose nodeset is included or partially incl...">HWLOC_RESTRICT_FLAG_BYNODESET</a>. </p>
132 </td></tr>
133 <tr><td class="fieldname"><a id="gga9d80f08eb25b7ac22f1b998dc8bf521fa699969227a09bbc1a7de51dc9fb7be4b"></a>HWLOC_RESTRICT_FLAG_ADAPT_MISC&#160;</td><td class="fielddoc"><p>Move Misc objects to ancestors if their parents are removed during restriction. If this flag is not set, Misc objects are removed when their parents are removed. </p>
134 </td></tr>
135 <tr><td class="fieldname"><a id="gga9d80f08eb25b7ac22f1b998dc8bf521faa95d6985e36ec1e55f68b210297a85cb"></a>HWLOC_RESTRICT_FLAG_ADAPT_IO&#160;</td><td class="fielddoc"><p>Move I/O objects to ancestors if their parents are removed during restriction. If this flag is not set, I/O devices and bridges are removed when their parents are removed. </p>
136 </td></tr>
137 </table>
138
139 </div>
140 </div>
63141 <h2 class="groupheader">Function Documentation</h2>
64 <a id="ga9f8c93fde236e9642a96957af01a11cb"></a>
65 <h2 class="memtitle"><span class="permalink"><a href="#ga9f8c93fde236e9642a96957af01a11cb">&#9670;&nbsp;</a></span>hwloc_get_ancestor_obj_by_depth()</h2>
66
67 <div class="memitem">
68 <div class="memproto">
69 <table class="mlabels">
70 <tr>
71 <td class="mlabels-left">
72 <table class="memname">
73 <tr>
74 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_ancestor_obj_by_depth </td>
75 <td>(</td>
76 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
77 <td class="paramname"><em>topology</em>, </td>
78 </tr>
79 <tr>
80 <td class="paramkey"></td>
81 <td></td>
82 <td class="paramtype">int&#160;</td>
83 <td class="paramname"><em>depth</em>, </td>
84 </tr>
85 <tr>
86 <td class="paramkey"></td>
87 <td></td>
88 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
89 <td class="paramname"><em>obj</em>&#160;</td>
142 <a id="gad458715d3335df44849216cc123d1055"></a>
143 <h2 class="memtitle"><span class="permalink"><a href="#gad458715d3335df44849216cc123d1055">&#9670;&nbsp;</a></span>hwloc_obj_add_other_obj_sets()</h2>
144
145 <div class="memitem">
146 <div class="memproto">
147 <table class="memname">
148 <tr>
149 <td class="memname">int hwloc_obj_add_other_obj_sets </td>
150 <td>(</td>
151 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
152 <td class="paramname"><em>dst</em>, </td>
153 </tr>
154 <tr>
155 <td class="paramkey"></td>
156 <td></td>
157 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
158 <td class="paramname"><em>src</em>&#160;</td>
90159 </tr>
91160 <tr>
92161 <td></td>
94163 <td></td><td></td>
95164 </tr>
96165 </table>
97 </td>
98 <td class="mlabels-right">
99 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
100 </tr>
101 </table>
102 </div><div class="memdoc">
103
104 <p>Returns the ancestor object of <code>obj</code> at depth <code>depth</code>. </p>
105 <dl class="section note"><dt>Note</dt><dd><code>depth</code> should not be the depth of PU or NUMA objects since they are ancestors of no objects (except Misc or I/O). This function rather expects an intermediate level depth, such as the depth of Packages, Cores, or Caches. </dd></dl>
106
107 </div>
108 </div>
109 <a id="ga70f0c7583291da707c15ae4daa850f41"></a>
110 <h2 class="memtitle"><span class="permalink"><a href="#ga70f0c7583291da707c15ae4daa850f41">&#9670;&nbsp;</a></span>hwloc_get_ancestor_obj_by_type()</h2>
111
112 <div class="memitem">
113 <div class="memproto">
114 <table class="mlabels">
115 <tr>
116 <td class="mlabels-left">
117 <table class="memname">
118 <tr>
119 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_ancestor_obj_by_type </td>
120 <td>(</td>
121 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
166 </div><div class="memdoc">
167
168 <p>Setup object cpusets/nodesets by OR'ing another object's sets. </p>
169 <p>For each defined cpuset or nodeset in <code>src</code>, allocate the corresponding set in <code>dst</code> and add <code>src</code> to it by OR'ing sets.</p>
170 <p>This function is convenient between <a class="el" href="a00203.html#ga4cea4741165faf5323931a9ed8786ef7" title="Allocate a Group object to insert later with hwloc_topology_insert_group_object().">hwloc_topology_alloc_group_object()</a> and <a class="el" href="a00203.html#ga1fc6012b3e1c249b83f48cb7bcacaa5b" title="Add more structure to the topology by adding an intermediate Group.">hwloc_topology_insert_group_object()</a>. It builds the sets of the new Group that will be inserted as a new intermediate parent of several objects. </p>
171
172 </div>
173 </div>
174 <a id="ga4cea4741165faf5323931a9ed8786ef7"></a>
175 <h2 class="memtitle"><span class="permalink"><a href="#ga4cea4741165faf5323931a9ed8786ef7">&#9670;&nbsp;</a></span>hwloc_topology_alloc_group_object()</h2>
176
177 <div class="memitem">
178 <div class="memproto">
179 <table class="memname">
180 <tr>
181 <td class="memname"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_topology_alloc_group_object </td>
182 <td>(</td>
183 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
184 <td class="paramname"><em>topology</em></td><td>)</td>
185 <td></td>
186 </tr>
187 </table>
188 </div><div class="memdoc">
189
190 <p>Allocate a Group object to insert later with <a class="el" href="a00203.html#ga1fc6012b3e1c249b83f48cb7bcacaa5b" title="Add more structure to the topology by adding an intermediate Group.">hwloc_topology_insert_group_object()</a>. </p>
191 <p>This function returns a new Group object.</p>
192 <p>The caller should (at least) initialize its sets before inserting the object in the topology. See <a class="el" href="a00203.html#ga1fc6012b3e1c249b83f48cb7bcacaa5b" title="Add more structure to the topology by adding an intermediate Group.">hwloc_topology_insert_group_object()</a>. </p>
193
194 </div>
195 </div>
196 <a id="gaf955b190c0299dcfb5bc985d777f92a1"></a>
197 <h2 class="memtitle"><span class="permalink"><a href="#gaf955b190c0299dcfb5bc985d777f92a1">&#9670;&nbsp;</a></span>hwloc_topology_allow()</h2>
198
199 <div class="memitem">
200 <div class="memproto">
201 <table class="memname">
202 <tr>
203 <td class="memname">int hwloc_topology_allow </td>
204 <td>(</td>
205 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict&#160;</td>
122206 <td class="paramname"><em>topology</em>, </td>
123207 </tr>
124208 <tr>
125209 <td class="paramkey"></td>
126210 <td></td>
127 <td class="paramtype"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
128 <td class="paramname"><em>type</em>, </td>
129 </tr>
130 <tr>
131 <td class="paramkey"></td>
132 <td></td>
133 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
134 <td class="paramname"><em>obj</em>&#160;</td>
211 <td class="paramtype"><a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
212 <td class="paramname"><em>cpuset</em>, </td>
213 </tr>
214 <tr>
215 <td class="paramkey"></td>
216 <td></td>
217 <td class="paramtype"><a class="el" href="a00192.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a>&#160;</td>
218 <td class="paramname"><em>nodeset</em>, </td>
219 </tr>
220 <tr>
221 <td class="paramkey"></td>
222 <td></td>
223 <td class="paramtype">unsigned long&#160;</td>
224 <td class="paramname"><em>flags</em>&#160;</td>
135225 </tr>
136226 <tr>
137227 <td></td>
139229 <td></td><td></td>
140230 </tr>
141231 </table>
142 </td>
143 <td class="mlabels-right">
144 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
145 </tr>
146 </table>
147 </div><div class="memdoc">
148
149 <p>Returns the ancestor object of <code>obj</code> with type <code>type</code>. </p>
150 <dl class="section note"><dt>Note</dt><dd><code>type</code> should not be <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661" title="Processing Unit, or (Logical) Processor. An execution unit (may share a core with some other logical ...">HWLOC_OBJ_PU</a> or <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a" title="NUMA node. An object that contains memory that is directly and byte-accessible to the host processors...">HWLOC_OBJ_NUMANODE</a> since these objects are ancestors of no objects (except Misc or I/O). This function rather expects an intermediate object type, such as <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55ab16ab8c0dbffc234921d86f3dfb63129" title="Physical package. The physical package that usually gets inserted into a socket on the motherboard....">HWLOC_OBJ_PACKAGE</a>, <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55ac793958f330bca371aa1535de8aff45f" title="Core. A computation unit (may be shared by several PUs, aka logical processors).">HWLOC_OBJ_CORE</a>, etc. </dd></dl>
151
152 </div>
153 </div>
154 <a id="gab1fa883021928b5c476911c4102e9be3"></a>
155 <h2 class="memtitle"><span class="permalink"><a href="#gab1fa883021928b5c476911c4102e9be3">&#9670;&nbsp;</a></span>hwloc_get_common_ancestor_obj()</h2>
156
157 <div class="memitem">
158 <div class="memproto">
159 <table class="mlabels">
160 <tr>
161 <td class="mlabels-left">
162 <table class="memname">
163 <tr>
164 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_common_ancestor_obj </td>
165 <td>(</td>
166 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
232 </div><div class="memdoc">
233
234 <p>Change the sets of allowed PUs and NUMA nodes in the topology. </p>
235 <p>This function only works if the <a class="el" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258" title="Detect the whole system, ignore reservations, include disallowed objects.">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a> was set on the topology. It does not modify any object, it only changes the sets returned by <a class="el" href="a00211.html#ga517d5d68ec9f24583d8933aab713be8e" title="Get allowed CPU set.">hwloc_topology_get_allowed_cpuset()</a> and <a class="el" href="a00211.html#ga21a4d7237a11e76b912ed4524ab78cbd" title="Get allowed node set.">hwloc_topology_get_allowed_nodeset()</a>.</p>
236 <p>It is notably useful when importing a topology from another process running in a different Linux Cgroup.</p>
237 <p><code>flags</code> must be set to one flag among <a class="el" href="a00203.html#ga38b1be3922094d880f6e76bf56c973d6" title="Flags to be given to hwloc_topology_allow().">hwloc_allow_flags_e</a>.</p>
238 <dl class="section note"><dt>Note</dt><dd>Removing objects from a topology should rather be performed with <a class="el" href="a00203.html#ga6db81ed13ac0a9d70cc80372ab537815" title="Restrict the topology to the given CPU set or nodeset.">hwloc_topology_restrict()</a>. </dd></dl>
239
240 </div>
241 </div>
242 <a id="ga1fc6012b3e1c249b83f48cb7bcacaa5b"></a>
243 <h2 class="memtitle"><span class="permalink"><a href="#ga1fc6012b3e1c249b83f48cb7bcacaa5b">&#9670;&nbsp;</a></span>hwloc_topology_insert_group_object()</h2>
244
245 <div class="memitem">
246 <div class="memproto">
247 <table class="memname">
248 <tr>
249 <td class="memname"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_topology_insert_group_object </td>
250 <td>(</td>
251 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
167252 <td class="paramname"><em>topology</em>, </td>
168253 </tr>
169254 <tr>
170255 <td class="paramkey"></td>
171256 <td></td>
172 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
173 <td class="paramname"><em>obj1</em>, </td>
174 </tr>
175 <tr>
176 <td class="paramkey"></td>
177 <td></td>
178 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
179 <td class="paramname"><em>obj2</em>&#160;</td>
257 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
258 <td class="paramname"><em>group</em>&#160;</td>
180259 </tr>
181260 <tr>
182261 <td></td>
184263 <td></td><td></td>
185264 </tr>
186265 </table>
187 </td>
188 <td class="mlabels-right">
189 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
190 </tr>
191 </table>
192 </div><div class="memdoc">
193
194 <p>Returns the common parent object to objects <code>obj1</code> and <code>obj2</code>. </p>
195
196 </div>
197 </div>
198 <a id="ga12d8565a3436c565e791ed02a0353621"></a>
199 <h2 class="memtitle"><span class="permalink"><a href="#ga12d8565a3436c565e791ed02a0353621">&#9670;&nbsp;</a></span>hwloc_get_next_child()</h2>
200
201 <div class="memitem">
202 <div class="memproto">
203 <table class="mlabels">
204 <tr>
205 <td class="mlabels-left">
206 <table class="memname">
207 <tr>
208 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_next_child </td>
209 <td>(</td>
210 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
266 </div><div class="memdoc">
267
268 <p>Add more structure to the topology by adding an intermediate Group. </p>
269 <p>The caller should first allocate a new Group object with <a class="el" href="a00203.html#ga4cea4741165faf5323931a9ed8786ef7" title="Allocate a Group object to insert later with hwloc_topology_insert_group_object().">hwloc_topology_alloc_group_object()</a>. Then it must setup at least one of its CPU or node sets to specify the final location of the Group in the topology. Then the object can be passed to this function for actual insertion in the topology.</p>
270 <p>Either the cpuset or nodeset field (or both, if compatible) must be set to a non-empty bitmap. The complete_cpuset or complete_nodeset may be set instead if inserting with respect to the complete topology (including disallowed, offline or unknown objects). If grouping several objects, <a class="el" href="a00203.html#gad458715d3335df44849216cc123d1055" title="Setup object cpusets/nodesets by OR&#39;ing another object&#39;s sets.">hwloc_obj_add_other_obj_sets()</a> is an easy way to build the Group sets iteratively. These sets cannot be larger than the current topology, or they would get restricted silently. The core will setup the other sets after actual insertion.</p>
271 <p>The <code>subtype</code> object attribute may be defined (to a dynamically allocated string) to display something else than "Group" as the type name for this object in lstopo. Custom name/value info pairs may be added with <a class="el" href="a00198.html#gace7654bb8a9002caae1a4b8a59e7452e" title="Add the given info name and value pair to the given object.">hwloc_obj_add_info()</a> after insertion.</p>
272 <p>The group <code>dont_merge</code> attribute may be set to <code>1</code> to prevent the hwloc core from ever merging this object with another hierarchically-identical object. This is useful when the Group itself describes an important feature that cannot be exposed anywhere else in the hierarchy.</p>
273 <p>The group <code>kind</code> attribute may be set to a high value such as <code>0xffffffff</code> to tell hwloc that this new Group should always be discarded in favor of any existing Group with the same locality.</p>
274 <dl class="section return"><dt>Returns</dt><dd>The inserted object if it was properly inserted.</dd>
275 <dd>
276 An existing object if the Group was merged or discarded because the topology already contained an object at the same location (the Group did not add any hierarchy information).</dd>
277 <dd>
278 <code>NULL</code> if the insertion failed because of conflicting sets in topology tree.</dd>
279 <dd>
280 <code>NULL</code> if Group objects are filtered-out of the topology (<a class="el" href="a00202.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a" title="Ignore all objects of this type.">HWLOC_TYPE_FILTER_KEEP_NONE</a>).</dd>
281 <dd>
282 <code>NULL</code> if the object was discarded because no set was initialized in the Group before insert, or all of them were empty. </dd></dl>
283
284 </div>
285 </div>
286 <a id="gad980782ade737900c5cf208946768c30"></a>
287 <h2 class="memtitle"><span class="permalink"><a href="#gad980782ade737900c5cf208946768c30">&#9670;&nbsp;</a></span>hwloc_topology_insert_misc_object()</h2>
288
289 <div class="memitem">
290 <div class="memproto">
291 <table class="memname">
292 <tr>
293 <td class="memname"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_topology_insert_misc_object </td>
294 <td>(</td>
295 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
211296 <td class="paramname"><em>topology</em>, </td>
212297 </tr>
213298 <tr>
214299 <td class="paramkey"></td>
215300 <td></td>
216 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
301 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
217302 <td class="paramname"><em>parent</em>, </td>
218303 </tr>
219304 <tr>
220305 <td class="paramkey"></td>
221306 <td></td>
222 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
223 <td class="paramname"><em>prev</em>&#160;</td>
307 <td class="paramtype">const char *&#160;</td>
308 <td class="paramname"><em>name</em>&#160;</td>
224309 </tr>
225310 <tr>
226311 <td></td>
228313 <td></td><td></td>
229314 </tr>
230315 </table>
231 </td>
232 <td class="mlabels-right">
233 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
234 </tr>
235 </table>
236 </div><div class="memdoc">
237
238 <p>Return the next child. </p>
239 <p>Return the next child among the normal children list, then among the memory children list, then among the I/O children list, then among the Misc children list.</p>
240 <p>If <code>prev</code> is <code>NULL</code>, return the first child.</p>
241 <p>Return <code>NULL</code> when there is no next child. </p>
242
243 </div>
244 </div>
245 <a id="ga408cf74f5bf9ed497911a320c7f8cc56"></a>
246 <h2 class="memtitle"><span class="permalink"><a href="#ga408cf74f5bf9ed497911a320c7f8cc56">&#9670;&nbsp;</a></span>hwloc_obj_is_in_subtree()</h2>
247
248 <div class="memitem">
249 <div class="memproto">
250 <table class="mlabels">
251 <tr>
252 <td class="mlabels-left">
253 <table class="memname">
254 <tr>
255 <td class="memname">static int hwloc_obj_is_in_subtree </td>
256 <td>(</td>
257 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
316 </div><div class="memdoc">
317
318 <p>Add a MISC object as a leaf of the topology. </p>
319 <p>A new MISC object will be created and inserted into the topology at the position given by parent. It is appended to the list of existing Misc children, without ever adding any intermediate hierarchy level. This is useful for annotating the topology without actually changing the hierarchy.</p>
320 <p><code>name</code> is supposed to be unique across all Misc objects in the topology. It will be duplicated to setup the new object attributes.</p>
321 <p>The new leaf object will not have any <code>cpuset</code>.</p>
322 <dl class="section return"><dt>Returns</dt><dd>the newly-created object</dd>
323 <dd>
324 <code>NULL</code> on error.</dd>
325 <dd>
326 <code>NULL</code> if Misc objects are filtered-out of the topology (<a class="el" href="a00202.html#gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a" title="Ignore all objects of this type.">HWLOC_TYPE_FILTER_KEEP_NONE</a>).</dd></dl>
327 <dl class="section note"><dt>Note</dt><dd>If <code>name</code> contains some non-printable characters, they will be dropped when exporting to XML, see <a class="el" href="a00215.html#ga333f79975b4eeb28a3d8fad3373583ce" title="Export the topology into an XML file.">hwloc_topology_export_xml()</a> in <a class="el" href="a00131_source.html">hwloc/export.h</a>. </dd></dl>
328
329 </div>
330 </div>
331 <a id="ga698ecd640d2b76742bba3829a145cd9a"></a>
332 <h2 class="memtitle"><span class="permalink"><a href="#ga698ecd640d2b76742bba3829a145cd9a">&#9670;&nbsp;</a></span>hwloc_topology_refresh()</h2>
333
334 <div class="memitem">
335 <div class="memproto">
336 <table class="memname">
337 <tr>
338 <td class="memname">int hwloc_topology_refresh </td>
339 <td>(</td>
340 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
341 <td class="paramname"><em>topology</em></td><td>)</td>
342 <td></td>
343 </tr>
344 </table>
345 </div><div class="memdoc">
346
347 <p>Refresh internal structures after topology modification. </p>
348 <p>Modifying the topology (by restricting, adding objects, modifying structures such as distances or memory attributes, etc.) may cause some internal caches to become invalid. These caches are automatically refreshed when accessed but this refreshing is not thread-safe.</p>
349 <p>This function is not thread-safe either, but it is a good way to end a non-thread-safe phase of topology modification. Once this refresh is done, multiple threads may concurrently consult the topology, objects, distances, attributes, etc.</p>
350 <p>See also <a class="el" href="a00403.html">Thread Safety</a> </p>
351
352 </div>
353 </div>
354 <a id="ga6db81ed13ac0a9d70cc80372ab537815"></a>
355 <h2 class="memtitle"><span class="permalink"><a href="#ga6db81ed13ac0a9d70cc80372ab537815">&#9670;&nbsp;</a></span>hwloc_topology_restrict()</h2>
356
357 <div class="memitem">
358 <div class="memproto">
359 <table class="memname">
360 <tr>
361 <td class="memname">int hwloc_topology_restrict </td>
362 <td>(</td>
363 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> restrict&#160;</td>
258364 <td class="paramname"><em>topology</em>, </td>
259365 </tr>
260366 <tr>
261367 <td class="paramkey"></td>
262368 <td></td>
263 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
264 <td class="paramname"><em>obj</em>, </td>
265 </tr>
266 <tr>
267 <td class="paramkey"></td>
268 <td></td>
269 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
270 <td class="paramname"><em>subtree_root</em>&#160;</td>
369 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
370 <td class="paramname"><em>set</em>, </td>
371 </tr>
372 <tr>
373 <td class="paramkey"></td>
374 <td></td>
375 <td class="paramtype">unsigned long&#160;</td>
376 <td class="paramname"><em>flags</em>&#160;</td>
271377 </tr>
272378 <tr>
273379 <td></td>
275381 <td></td><td></td>
276382 </tr>
277383 </table>
278 </td>
279 <td class="mlabels-right">
280 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
281 </tr>
282 </table>
283 </div><div class="memdoc">
284
285 <p>Returns true if <code>obj</code> is inside the subtree beginning with ancestor object <code>subtree_root</code>. </p>
286 <dl class="section note"><dt>Note</dt><dd>This function cannot work if <code>obj</code> and <code>subtree_root</code> objects do not have CPU sets (I/O or Misc objects). </dd></dl>
384 </div><div class="memdoc">
385
386 <p>Restrict the topology to the given CPU set or nodeset. </p>
387 <p>Topology <code>topology</code> is modified so as to remove all objects that are not included (or partially included) in the CPU set <code>set</code>. All objects CPU and node sets are restricted accordingly.</p>
388 <p>If <a class="el" href="a00203.html#gga9d80f08eb25b7ac22f1b998dc8bf521fae4c5b1b87232f2d8a60559e77ac65a68" title="Restrict by nodeset instead of CPU set. Only keep objects whose nodeset is included or partially incl...">HWLOC_RESTRICT_FLAG_BYNODESET</a> is passed in <code>flags</code>, <code>set</code> is considered a nodeset instead of a CPU set.</p>
389 <p><code>flags</code> is a OR'ed set of <a class="el" href="a00203.html#ga9d80f08eb25b7ac22f1b998dc8bf521f" title="Flags to be given to hwloc_topology_restrict().">hwloc_restrict_flags_e</a>.</p>
390 <dl class="section note"><dt>Note</dt><dd>This call may not be reverted by restricting back to a larger set. Once dropped during restriction, objects may not be brought back, except by loading another topology with <a class="el" href="a00195.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a>.</dd></dl>
391 <dl class="section return"><dt>Returns</dt><dd>0 on success.</dd>
392 <dd>
393 -1 with errno set to EINVAL if the input set is invalid. The topology is not modified in this case.</dd>
394 <dd>
395 -1 with errno set to ENOMEM on failure to allocate internal data. The topology is reinitialized in this case. It should be either destroyed with <a class="el" href="a00195.html#ga9f34a640b6fd28d23699d4d084667b15" title="Terminate and free a topology context.">hwloc_topology_destroy()</a> or configured and loaded again. </dd></dl>
287396
288397 </div>
289398 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Kinds of object Type</title>
7 <title>Hardware Locality (hwloc): Finding Objects inside a CPU set</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4141 <div class="summary">
4242 <a href="#func-members">Functions</a> </div>
4343 <div class="headertitle">
44 <div class="title">Kinds of object Type</div> </div>
44 <div class="title">Finding Objects inside a CPU set</div> </div>
4545 </div><!--header-->
4646 <div class="contents">
4747 <table class="memberdecls">
4848 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
4949 Functions</h2></td></tr>
50 <tr class="memitem:ga52ef38431eba383b048b98c669b59a16"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#ga52ef38431eba383b048b98c669b59a16">hwloc_obj_type_is_normal</a> (<a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
51 <tr class="separator:ga52ef38431eba383b048b98c669b59a16"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:gac8a954ed37a4376097234c828068cbef"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#gac8a954ed37a4376097234c828068cbef">hwloc_obj_type_is_io</a> (<a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
53 <tr class="separator:gac8a954ed37a4376097234c828068cbef"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:ga1d074390c8a3dc3088d84f73fb73f966"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#ga1d074390c8a3dc3088d84f73fb73f966">hwloc_obj_type_is_memory</a> (<a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
55 <tr class="separator:ga1d074390c8a3dc3088d84f73fb73f966"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:ga2ed589bea28711e80b92066510a5607d"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#ga2ed589bea28711e80b92066510a5607d">hwloc_obj_type_is_cache</a> (<a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
57 <tr class="separator:ga2ed589bea28711e80b92066510a5607d"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:ga395e48cd221d107e5891689624e1aec4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#ga395e48cd221d107e5891689624e1aec4">hwloc_obj_type_is_dcache</a> (<a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
59 <tr class="separator:ga395e48cd221d107e5891689624e1aec4"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:ga8abcee67b9b074332c1866405a3648a9"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#ga8abcee67b9b074332c1866405a3648a9">hwloc_obj_type_is_icache</a> (<a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
61 <tr class="separator:ga8abcee67b9b074332c1866405a3648a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
50 <tr class="memitem:ga547325a4193dbc215d07c23097519d79"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#ga547325a4193dbc215d07c23097519d79">hwloc_get_first_largest_obj_inside_cpuset</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set)</td></tr>
51 <tr class="separator:ga547325a4193dbc215d07c23097519d79"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:ga34ca563fa3a6a4e05268f36a87668511"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#ga34ca563fa3a6a4e05268f36a87668511">hwloc_get_largest_objs_inside_cpuset</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *restrict objs, int max)</td></tr>
53 <tr class="separator:ga34ca563fa3a6a4e05268f36a87668511"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:ga63e3784e7c60fbae5073428cb98ac787"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#ga63e3784e7c60fbae5073428cb98ac787">hwloc_get_next_obj_inside_cpuset_by_depth</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, int depth, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> prev)</td></tr>
55 <tr class="separator:ga63e3784e7c60fbae5073428cb98ac787"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:gafe859176cf9233f215fea0e87cef47e7"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#gafe859176cf9233f215fea0e87cef47e7">hwloc_get_next_obj_inside_cpuset_by_type</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, <a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> prev)</td></tr>
57 <tr class="separator:gafe859176cf9233f215fea0e87cef47e7"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:gaec86f1f88832836e3f9338e246ea5862"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#gaec86f1f88832836e3f9338e246ea5862">hwloc_get_obj_inside_cpuset_by_depth</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, int depth, unsigned idx)</td></tr>
59 <tr class="separator:gaec86f1f88832836e3f9338e246ea5862"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:ga2edf924e5a0cca9cb22f65cc77c6ddb5"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#ga2edf924e5a0cca9cb22f65cc77c6ddb5">hwloc_get_obj_inside_cpuset_by_type</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, <a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, unsigned idx)</td></tr>
61 <tr class="separator:ga2edf924e5a0cca9cb22f65cc77c6ddb5"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:gaa43c64512ddb33fd181990c4261cec7d"><td class="memItemLeft" align="right" valign="top">static unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#gaa43c64512ddb33fd181990c4261cec7d">hwloc_get_nbobjs_inside_cpuset_by_depth</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, int depth)</td></tr>
63 <tr class="separator:gaa43c64512ddb33fd181990c4261cec7d"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 <tr class="memitem:ga133c40415de008518608f8bff52a5ab9"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#ga133c40415de008518608f8bff52a5ab9">hwloc_get_nbobjs_inside_cpuset_by_type</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, <a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
65 <tr class="separator:ga133c40415de008518608f8bff52a5ab9"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 <tr class="memitem:ga4c3a20d61e9beb06c667b21688c772c5"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00204.html#ga4c3a20d61e9beb06c667b21688c772c5">hwloc_get_obj_index_inside_cpuset</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj)</td></tr>
67 <tr class="separator:ga4c3a20d61e9beb06c667b21688c772c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
6268 </table>
6369 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
64 <p>Each object type is either Normal (i.e. <a class="el" href="a00204.html#ga52ef38431eba383b048b98c669b59a16" title="Check whether an object type is Normal.">hwloc_obj_type_is_normal()</a> returns 1), or Memory (i.e. <a class="el" href="a00204.html#ga1d074390c8a3dc3088d84f73fb73f966" title="Check whether an object type is Memory.">hwloc_obj_type_is_memory()</a> returns 1) or I/O (i.e. <a class="el" href="a00204.html#gac8a954ed37a4376097234c828068cbef" title="Check whether an object type is I/O.">hwloc_obj_type_is_io()</a> returns 1) or Misc (i.e. equal to <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a19f8a6953fa91efc76bcbcdf2d22de4d" title="Miscellaneous objects (filtered out by default). Objects without particular meaning,...">HWLOC_OBJ_MISC</a>). It cannot be of more than one of these kinds. </p>
6570 <h2 class="groupheader">Function Documentation</h2>
66 <a id="ga2ed589bea28711e80b92066510a5607d"></a>
67 <h2 class="memtitle"><span class="permalink"><a href="#ga2ed589bea28711e80b92066510a5607d">&#9670;&nbsp;</a></span>hwloc_obj_type_is_cache()</h2>
68
69 <div class="memitem">
70 <div class="memproto">
71 <table class="memname">
72 <tr>
73 <td class="memname">int hwloc_obj_type_is_cache </td>
74 <td>(</td>
75 <td class="paramtype"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
76 <td class="paramname"><em>type</em></td><td>)</td>
77 <td></td>
78 </tr>
79 </table>
80 </div><div class="memdoc">
81
82 <p>Check whether an object type is a CPU Cache (Data, Unified or Instruction). </p>
83 <p>Memory-side caches are not CPU caches.</p>
84 <dl class="section return"><dt>Returns</dt><dd>1 if an object of type <code>type</code> is a Cache, 0 otherwise. </dd></dl>
85
86 </div>
87 </div>
88 <a id="ga395e48cd221d107e5891689624e1aec4"></a>
89 <h2 class="memtitle"><span class="permalink"><a href="#ga395e48cd221d107e5891689624e1aec4">&#9670;&nbsp;</a></span>hwloc_obj_type_is_dcache()</h2>
90
91 <div class="memitem">
92 <div class="memproto">
93 <table class="memname">
94 <tr>
95 <td class="memname">int hwloc_obj_type_is_dcache </td>
96 <td>(</td>
97 <td class="paramtype"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
98 <td class="paramname"><em>type</em></td><td>)</td>
99 <td></td>
100 </tr>
101 </table>
102 </div><div class="memdoc">
103
104 <p>Check whether an object type is a CPU Data or Unified Cache. </p>
105 <p>Memory-side caches are not CPU caches.</p>
106 <dl class="section return"><dt>Returns</dt><dd>1 if an object of type <code>type</code> is a CPU Data or Unified Cache, 0 otherwise. </dd></dl>
107
108 </div>
109 </div>
110 <a id="ga8abcee67b9b074332c1866405a3648a9"></a>
111 <h2 class="memtitle"><span class="permalink"><a href="#ga8abcee67b9b074332c1866405a3648a9">&#9670;&nbsp;</a></span>hwloc_obj_type_is_icache()</h2>
112
113 <div class="memitem">
114 <div class="memproto">
115 <table class="memname">
116 <tr>
117 <td class="memname">int hwloc_obj_type_is_icache </td>
118 <td>(</td>
119 <td class="paramtype"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
120 <td class="paramname"><em>type</em></td><td>)</td>
121 <td></td>
122 </tr>
123 </table>
124 </div><div class="memdoc">
125
126 <p>Check whether an object type is a CPU Instruction Cache,. </p>
127 <p>Memory-side caches are not CPU caches.</p>
128 <dl class="section return"><dt>Returns</dt><dd>1 if an object of type <code>type</code> is a CPU Instruction Cache, 0 otherwise. </dd></dl>
129
130 </div>
131 </div>
132 <a id="gac8a954ed37a4376097234c828068cbef"></a>
133 <h2 class="memtitle"><span class="permalink"><a href="#gac8a954ed37a4376097234c828068cbef">&#9670;&nbsp;</a></span>hwloc_obj_type_is_io()</h2>
134
135 <div class="memitem">
136 <div class="memproto">
137 <table class="memname">
138 <tr>
139 <td class="memname">int hwloc_obj_type_is_io </td>
140 <td>(</td>
141 <td class="paramtype"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
142 <td class="paramname"><em>type</em></td><td>)</td>
143 <td></td>
144 </tr>
145 </table>
146 </div><div class="memdoc">
147
148 <p>Check whether an object type is I/O. </p>
149 <p>I/O objects are objects attached to their parents in the I/O children list. This current includes Bridges, PCI and OS devices.</p>
150 <dl class="section return"><dt>Returns</dt><dd>1 if an object of type <code>type</code> is a I/O object, 0 otherwise. </dd></dl>
151
152 </div>
153 </div>
154 <a id="ga1d074390c8a3dc3088d84f73fb73f966"></a>
155 <h2 class="memtitle"><span class="permalink"><a href="#ga1d074390c8a3dc3088d84f73fb73f966">&#9670;&nbsp;</a></span>hwloc_obj_type_is_memory()</h2>
156
157 <div class="memitem">
158 <div class="memproto">
159 <table class="memname">
160 <tr>
161 <td class="memname">int hwloc_obj_type_is_memory </td>
162 <td>(</td>
163 <td class="paramtype"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
164 <td class="paramname"><em>type</em></td><td>)</td>
165 <td></td>
166 </tr>
167 </table>
168 </div><div class="memdoc">
169
170 <p>Check whether an object type is Memory. </p>
171 <p>Memory objects are objects attached to their parents in the Memory children list. This current includes NUMA nodes and Memory-side caches.</p>
172 <dl class="section return"><dt>Returns</dt><dd>1 if an object of type <code>type</code> is a Memory object, 0 otherwise. </dd></dl>
173
174 </div>
175 </div>
176 <a id="ga52ef38431eba383b048b98c669b59a16"></a>
177 <h2 class="memtitle"><span class="permalink"><a href="#ga52ef38431eba383b048b98c669b59a16">&#9670;&nbsp;</a></span>hwloc_obj_type_is_normal()</h2>
178
179 <div class="memitem">
180 <div class="memproto">
181 <table class="memname">
182 <tr>
183 <td class="memname">int hwloc_obj_type_is_normal </td>
184 <td>(</td>
185 <td class="paramtype"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
186 <td class="paramname"><em>type</em></td><td>)</td>
187 <td></td>
188 </tr>
189 </table>
190 </div><div class="memdoc">
191
192 <p>Check whether an object type is Normal. </p>
193 <p>Normal objects are objects of the main CPU hierarchy (Machine, Package, Core, PU, CPU caches, etc.), but they are not NUMA nodes, I/O devices or Misc objects.</p>
194 <p>They are attached to parent as Normal children, not as Memory, I/O or Misc children.</p>
195 <dl class="section return"><dt>Returns</dt><dd>1 if an object of type <code>type</code> is a Normal object, 0 otherwise. </dd></dl>
71 <a id="ga547325a4193dbc215d07c23097519d79"></a>
72 <h2 class="memtitle"><span class="permalink"><a href="#ga547325a4193dbc215d07c23097519d79">&#9670;&nbsp;</a></span>hwloc_get_first_largest_obj_inside_cpuset()</h2>
73
74 <div class="memitem">
75 <div class="memproto">
76 <table class="mlabels">
77 <tr>
78 <td class="mlabels-left">
79 <table class="memname">
80 <tr>
81 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_first_largest_obj_inside_cpuset </td>
82 <td>(</td>
83 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
84 <td class="paramname"><em>topology</em>, </td>
85 </tr>
86 <tr>
87 <td class="paramkey"></td>
88 <td></td>
89 <td class="paramtype"><a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
90 <td class="paramname"><em>set</em>&#160;</td>
91 </tr>
92 <tr>
93 <td></td>
94 <td>)</td>
95 <td></td><td></td>
96 </tr>
97 </table>
98 </td>
99 <td class="mlabels-right">
100 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
101 </tr>
102 </table>
103 </div><div class="memdoc">
104
105 <p>Get the first largest object included in the given cpuset <code>set</code>. </p>
106 <dl class="section return"><dt>Returns</dt><dd>the first object that is included in <code>set</code> and whose parent is not.</dd></dl>
107 <p>This is convenient for iterating over all largest objects within a CPU set by doing a loop getting the first largest object and clearing its CPU set from the remaining CPU set. </p>
108
109 </div>
110 </div>
111 <a id="ga34ca563fa3a6a4e05268f36a87668511"></a>
112 <h2 class="memtitle"><span class="permalink"><a href="#ga34ca563fa3a6a4e05268f36a87668511">&#9670;&nbsp;</a></span>hwloc_get_largest_objs_inside_cpuset()</h2>
113
114 <div class="memitem">
115 <div class="memproto">
116 <table class="memname">
117 <tr>
118 <td class="memname">int hwloc_get_largest_objs_inside_cpuset </td>
119 <td>(</td>
120 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
121 <td class="paramname"><em>topology</em>, </td>
122 </tr>
123 <tr>
124 <td class="paramkey"></td>
125 <td></td>
126 <td class="paramtype"><a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
127 <td class="paramname"><em>set</em>, </td>
128 </tr>
129 <tr>
130 <td class="paramkey"></td>
131 <td></td>
132 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *restrict&#160;</td>
133 <td class="paramname"><em>objs</em>, </td>
134 </tr>
135 <tr>
136 <td class="paramkey"></td>
137 <td></td>
138 <td class="paramtype">int&#160;</td>
139 <td class="paramname"><em>max</em>&#160;</td>
140 </tr>
141 <tr>
142 <td></td>
143 <td>)</td>
144 <td></td><td></td>
145 </tr>
146 </table>
147 </div><div class="memdoc">
148
149 <p>Get the set of largest objects covering exactly a given cpuset <code>set</code>. </p>
150 <dl class="section return"><dt>Returns</dt><dd>the number of objects returned in <code>objs</code>. </dd></dl>
151
152 </div>
153 </div>
154 <a id="gaa43c64512ddb33fd181990c4261cec7d"></a>
155 <h2 class="memtitle"><span class="permalink"><a href="#gaa43c64512ddb33fd181990c4261cec7d">&#9670;&nbsp;</a></span>hwloc_get_nbobjs_inside_cpuset_by_depth()</h2>
156
157 <div class="memitem">
158 <div class="memproto">
159 <table class="mlabels">
160 <tr>
161 <td class="mlabels-left">
162 <table class="memname">
163 <tr>
164 <td class="memname">static unsigned hwloc_get_nbobjs_inside_cpuset_by_depth </td>
165 <td>(</td>
166 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
167 <td class="paramname"><em>topology</em>, </td>
168 </tr>
169 <tr>
170 <td class="paramkey"></td>
171 <td></td>
172 <td class="paramtype"><a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
173 <td class="paramname"><em>set</em>, </td>
174 </tr>
175 <tr>
176 <td class="paramkey"></td>
177 <td></td>
178 <td class="paramtype">int&#160;</td>
179 <td class="paramname"><em>depth</em>&#160;</td>
180 </tr>
181 <tr>
182 <td></td>
183 <td>)</td>
184 <td></td><td></td>
185 </tr>
186 </table>
187 </td>
188 <td class="mlabels-right">
189 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
190 </tr>
191 </table>
192 </div><div class="memdoc">
193
194 <p>Return the number of objects at depth <code>depth</code> included in CPU set <code>set</code>. </p>
195 <dl class="section note"><dt>Note</dt><dd>Objects with empty CPU sets are ignored (otherwise they would be considered included in any given set).</dd>
196 <dd>
197 This function cannot work if objects at the given depth do not have CPU sets (I/O or Misc objects). </dd></dl>
198
199 </div>
200 </div>
201 <a id="ga133c40415de008518608f8bff52a5ab9"></a>
202 <h2 class="memtitle"><span class="permalink"><a href="#ga133c40415de008518608f8bff52a5ab9">&#9670;&nbsp;</a></span>hwloc_get_nbobjs_inside_cpuset_by_type()</h2>
203
204 <div class="memitem">
205 <div class="memproto">
206 <table class="mlabels">
207 <tr>
208 <td class="mlabels-left">
209 <table class="memname">
210 <tr>
211 <td class="memname">static int hwloc_get_nbobjs_inside_cpuset_by_type </td>
212 <td>(</td>
213 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
214 <td class="paramname"><em>topology</em>, </td>
215 </tr>
216 <tr>
217 <td class="paramkey"></td>
218 <td></td>
219 <td class="paramtype"><a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
220 <td class="paramname"><em>set</em>, </td>
221 </tr>
222 <tr>
223 <td class="paramkey"></td>
224 <td></td>
225 <td class="paramtype"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
226 <td class="paramname"><em>type</em>&#160;</td>
227 </tr>
228 <tr>
229 <td></td>
230 <td>)</td>
231 <td></td><td></td>
232 </tr>
233 </table>
234 </td>
235 <td class="mlabels-right">
236 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
237 </tr>
238 </table>
239 </div><div class="memdoc">
240
241 <p>Return the number of objects of type <code>type</code> included in CPU set <code>set</code>. </p>
242 <p>If no object for that type exists inside CPU set <code>set</code>, 0 is returned. If there are several levels with objects of that type inside CPU set <code>set</code>, -1 is returned.</p>
243 <dl class="section note"><dt>Note</dt><dd>Objects with empty CPU sets are ignored (otherwise they would be considered included in any given set).</dd>
244 <dd>
245 This function cannot work if objects of the given type do not have CPU sets (I/O objects). </dd></dl>
246
247 </div>
248 </div>
249 <a id="ga63e3784e7c60fbae5073428cb98ac787"></a>
250 <h2 class="memtitle"><span class="permalink"><a href="#ga63e3784e7c60fbae5073428cb98ac787">&#9670;&nbsp;</a></span>hwloc_get_next_obj_inside_cpuset_by_depth()</h2>
251
252 <div class="memitem">
253 <div class="memproto">
254 <table class="mlabels">
255 <tr>
256 <td class="mlabels-left">
257 <table class="memname">
258 <tr>
259 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_next_obj_inside_cpuset_by_depth </td>
260 <td>(</td>
261 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
262 <td class="paramname"><em>topology</em>, </td>
263 </tr>
264 <tr>
265 <td class="paramkey"></td>
266 <td></td>
267 <td class="paramtype"><a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
268 <td class="paramname"><em>set</em>, </td>
269 </tr>
270 <tr>
271 <td class="paramkey"></td>
272 <td></td>
273 <td class="paramtype">int&#160;</td>
274 <td class="paramname"><em>depth</em>, </td>
275 </tr>
276 <tr>
277 <td class="paramkey"></td>
278 <td></td>
279 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
280 <td class="paramname"><em>prev</em>&#160;</td>
281 </tr>
282 <tr>
283 <td></td>
284 <td>)</td>
285 <td></td><td></td>
286 </tr>
287 </table>
288 </td>
289 <td class="mlabels-right">
290 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
291 </tr>
292 </table>
293 </div><div class="memdoc">
294
295 <p>Return the next object at depth <code>depth</code> included in CPU set <code>set</code>. </p>
296 <p>If <code>prev</code> is <code>NULL</code>, return the first object at depth <code>depth</code> included in <code>set</code>. The next invokation should pass the previous return value in <code>prev</code> so as to obtain the next object in <code>set</code>.</p>
297 <dl class="section note"><dt>Note</dt><dd>Objects with empty CPU sets are ignored (otherwise they would be considered included in any given set).</dd>
298 <dd>
299 This function cannot work if objects at the given depth do not have CPU sets (I/O or Misc objects). </dd></dl>
300
301 </div>
302 </div>
303 <a id="gafe859176cf9233f215fea0e87cef47e7"></a>
304 <h2 class="memtitle"><span class="permalink"><a href="#gafe859176cf9233f215fea0e87cef47e7">&#9670;&nbsp;</a></span>hwloc_get_next_obj_inside_cpuset_by_type()</h2>
305
306 <div class="memitem">
307 <div class="memproto">
308 <table class="mlabels">
309 <tr>
310 <td class="mlabels-left">
311 <table class="memname">
312 <tr>
313 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_next_obj_inside_cpuset_by_type </td>
314 <td>(</td>
315 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
316 <td class="paramname"><em>topology</em>, </td>
317 </tr>
318 <tr>
319 <td class="paramkey"></td>
320 <td></td>
321 <td class="paramtype"><a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
322 <td class="paramname"><em>set</em>, </td>
323 </tr>
324 <tr>
325 <td class="paramkey"></td>
326 <td></td>
327 <td class="paramtype"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
328 <td class="paramname"><em>type</em>, </td>
329 </tr>
330 <tr>
331 <td class="paramkey"></td>
332 <td></td>
333 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
334 <td class="paramname"><em>prev</em>&#160;</td>
335 </tr>
336 <tr>
337 <td></td>
338 <td>)</td>
339 <td></td><td></td>
340 </tr>
341 </table>
342 </td>
343 <td class="mlabels-right">
344 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
345 </tr>
346 </table>
347 </div><div class="memdoc">
348
349 <p>Return the next object of type <code>type</code> included in CPU set <code>set</code>. </p>
350 <p>If there are multiple or no depth for given type, return <code>NULL</code> and let the caller fallback to <a class="el" href="a00204.html#ga63e3784e7c60fbae5073428cb98ac787" title="Return the next object at depth depth included in CPU set set.">hwloc_get_next_obj_inside_cpuset_by_depth()</a>.</p>
351 <dl class="section note"><dt>Note</dt><dd>Objects with empty CPU sets are ignored (otherwise they would be considered included in any given set).</dd>
352 <dd>
353 This function cannot work if objects of the given type do not have CPU sets (I/O or Misc objects). </dd></dl>
354
355 </div>
356 </div>
357 <a id="ga4c3a20d61e9beb06c667b21688c772c5"></a>
358 <h2 class="memtitle"><span class="permalink"><a href="#ga4c3a20d61e9beb06c667b21688c772c5">&#9670;&nbsp;</a></span>hwloc_get_obj_index_inside_cpuset()</h2>
359
360 <div class="memitem">
361 <div class="memproto">
362 <table class="mlabels">
363 <tr>
364 <td class="mlabels-left">
365 <table class="memname">
366 <tr>
367 <td class="memname">static int hwloc_get_obj_index_inside_cpuset </td>
368 <td>(</td>
369 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
370 <td class="paramname"><em>topology</em>, </td>
371 </tr>
372 <tr>
373 <td class="paramkey"></td>
374 <td></td>
375 <td class="paramtype"><a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
376 <td class="paramname"><em>set</em>, </td>
377 </tr>
378 <tr>
379 <td class="paramkey"></td>
380 <td></td>
381 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
382 <td class="paramname"><em>obj</em>&#160;</td>
383 </tr>
384 <tr>
385 <td></td>
386 <td>)</td>
387 <td></td><td></td>
388 </tr>
389 </table>
390 </td>
391 <td class="mlabels-right">
392 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
393 </tr>
394 </table>
395 </div><div class="memdoc">
396
397 <p>Return the logical index among the objects included in CPU set <code>set</code>. </p>
398 <p>Consult all objects in the same level as <code>obj</code> and inside CPU set <code>set</code> in the logical order, and return the index of <code>obj</code> within them. If <code>set</code> covers the entire topology, this is the logical index of <code>obj</code>. Otherwise, this is similar to a logical index within the part of the topology defined by CPU set <code>set</code>.</p>
399 <dl class="section note"><dt>Note</dt><dd>Objects with empty CPU sets are ignored (otherwise they would be considered included in any given set).</dd>
400 <dd>
401 This function cannot work if obj does not have CPU sets (I/O objects). </dd></dl>
402
403 </div>
404 </div>
405 <a id="gaec86f1f88832836e3f9338e246ea5862"></a>
406 <h2 class="memtitle"><span class="permalink"><a href="#gaec86f1f88832836e3f9338e246ea5862">&#9670;&nbsp;</a></span>hwloc_get_obj_inside_cpuset_by_depth()</h2>
407
408 <div class="memitem">
409 <div class="memproto">
410 <table class="mlabels">
411 <tr>
412 <td class="mlabels-left">
413 <table class="memname">
414 <tr>
415 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_obj_inside_cpuset_by_depth </td>
416 <td>(</td>
417 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
418 <td class="paramname"><em>topology</em>, </td>
419 </tr>
420 <tr>
421 <td class="paramkey"></td>
422 <td></td>
423 <td class="paramtype"><a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
424 <td class="paramname"><em>set</em>, </td>
425 </tr>
426 <tr>
427 <td class="paramkey"></td>
428 <td></td>
429 <td class="paramtype">int&#160;</td>
430 <td class="paramname"><em>depth</em>, </td>
431 </tr>
432 <tr>
433 <td class="paramkey"></td>
434 <td></td>
435 <td class="paramtype">unsigned&#160;</td>
436 <td class="paramname"><em>idx</em>&#160;</td>
437 </tr>
438 <tr>
439 <td></td>
440 <td>)</td>
441 <td></td><td></td>
442 </tr>
443 </table>
444 </td>
445 <td class="mlabels-right">
446 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
447 </tr>
448 </table>
449 </div><div class="memdoc">
450
451 <p>Return the (logically) <code>idx</code> -th object at depth <code>depth</code> included in CPU set <code>set</code>. </p>
452 <dl class="section note"><dt>Note</dt><dd>Objects with empty CPU sets are ignored (otherwise they would be considered included in any given set).</dd>
453 <dd>
454 This function cannot work if objects at the given depth do not have CPU sets (I/O or Misc objects). </dd></dl>
455
456 </div>
457 </div>
458 <a id="ga2edf924e5a0cca9cb22f65cc77c6ddb5"></a>
459 <h2 class="memtitle"><span class="permalink"><a href="#ga2edf924e5a0cca9cb22f65cc77c6ddb5">&#9670;&nbsp;</a></span>hwloc_get_obj_inside_cpuset_by_type()</h2>
460
461 <div class="memitem">
462 <div class="memproto">
463 <table class="mlabels">
464 <tr>
465 <td class="mlabels-left">
466 <table class="memname">
467 <tr>
468 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_obj_inside_cpuset_by_type </td>
469 <td>(</td>
470 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
471 <td class="paramname"><em>topology</em>, </td>
472 </tr>
473 <tr>
474 <td class="paramkey"></td>
475 <td></td>
476 <td class="paramtype"><a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
477 <td class="paramname"><em>set</em>, </td>
478 </tr>
479 <tr>
480 <td class="paramkey"></td>
481 <td></td>
482 <td class="paramtype"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
483 <td class="paramname"><em>type</em>, </td>
484 </tr>
485 <tr>
486 <td class="paramkey"></td>
487 <td></td>
488 <td class="paramtype">unsigned&#160;</td>
489 <td class="paramname"><em>idx</em>&#160;</td>
490 </tr>
491 <tr>
492 <td></td>
493 <td>)</td>
494 <td></td><td></td>
495 </tr>
496 </table>
497 </td>
498 <td class="mlabels-right">
499 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
500 </tr>
501 </table>
502 </div><div class="memdoc">
503
504 <p>Return the <code>idx</code> -th object of type <code>type</code> included in CPU set <code>set</code>. </p>
505 <p>If there are multiple or no depth for given type, return <code>NULL</code> and let the caller fallback to <a class="el" href="a00204.html#gaec86f1f88832836e3f9338e246ea5862" title="Return the (logically) idx -th object at depth depth included in CPU set set.">hwloc_get_obj_inside_cpuset_by_depth()</a>.</p>
506 <dl class="section note"><dt>Note</dt><dd>Objects with empty CPU sets are ignored (otherwise they would be considered included in any given set).</dd>
507 <dd>
508 This function cannot work if objects of the given type do not have CPU sets (I/O or Misc objects). </dd></dl>
196509
197510 </div>
198511 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Looking at Cache Objects</title>
7 <title>Hardware Locality (hwloc): Finding Objects covering at least CPU set</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4141 <div class="summary">
4242 <a href="#func-members">Functions</a> </div>
4343 <div class="headertitle">
44 <div class="title">Looking at Cache Objects</div> </div>
44 <div class="title">Finding Objects covering at least CPU set</div> </div>
4545 </div><!--header-->
4646 <div class="contents">
4747 <table class="memberdecls">
4848 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
4949 Functions</h2></td></tr>
50 <tr class="memitem:gad108a09ce400222fe45545257d575489"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html#gad108a09ce400222fe45545257d575489">hwloc_get_cache_type_depth</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned cachelevel, <a class="el" href="a00190.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a> cachetype)</td></tr>
51 <tr class="separator:gad108a09ce400222fe45545257d575489"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:gac4cd480a5deaa4ada047fdd11ae4c070"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html#gac4cd480a5deaa4ada047fdd11ae4c070">hwloc_get_cache_covering_cpuset</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set)</td></tr>
53 <tr class="separator:gac4cd480a5deaa4ada047fdd11ae4c070"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:ga36f48c32837c7a70b424706e213dcd71"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html#ga36f48c32837c7a70b424706e213dcd71">hwloc_get_shared_cache_covering_obj</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj)</td></tr>
55 <tr class="separator:ga36f48c32837c7a70b424706e213dcd71"><td class="memSeparator" colspan="2">&#160;</td></tr>
50 <tr class="memitem:ga0e66aa2dc6b2527cfd10723af646c9d7"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html#ga0e66aa2dc6b2527cfd10723af646c9d7">hwloc_get_child_covering_cpuset</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> parent)</td></tr>
51 <tr class="separator:ga0e66aa2dc6b2527cfd10723af646c9d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:ga41acdcdbb8b95d70ecf6c572a3f67dca"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html#ga41acdcdbb8b95d70ecf6c572a3f67dca">hwloc_get_obj_covering_cpuset</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set)</td></tr>
53 <tr class="separator:ga41acdcdbb8b95d70ecf6c572a3f67dca"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:gaba4b6d86eba1169ced4b0e941d2bb5f0"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html#gaba4b6d86eba1169ced4b0e941d2bb5f0">hwloc_get_next_obj_covering_cpuset_by_depth</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, int depth, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> prev)</td></tr>
55 <tr class="separator:gaba4b6d86eba1169ced4b0e941d2bb5f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:ga91cfae08b092e7966002e15d1e987213"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00205.html#ga91cfae08b092e7966002e15d1e987213">hwloc_get_next_obj_covering_cpuset_by_type</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set, <a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> prev)</td></tr>
57 <tr class="separator:ga91cfae08b092e7966002e15d1e987213"><td class="memSeparator" colspan="2">&#160;</td></tr>
5658 </table>
5759 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
5860 <h2 class="groupheader">Function Documentation</h2>
59 <a id="gac4cd480a5deaa4ada047fdd11ae4c070"></a>
60 <h2 class="memtitle"><span class="permalink"><a href="#gac4cd480a5deaa4ada047fdd11ae4c070">&#9670;&nbsp;</a></span>hwloc_get_cache_covering_cpuset()</h2>
61
62 <div class="memitem">
63 <div class="memproto">
64 <table class="mlabels">
65 <tr>
66 <td class="mlabels-left">
67 <table class="memname">
68 <tr>
69 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_cache_covering_cpuset </td>
70 <td>(</td>
71 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
72 <td class="paramname"><em>topology</em>, </td>
73 </tr>
74 <tr>
75 <td class="paramkey"></td>
76 <td></td>
77 <td class="paramtype"><a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
61 <a id="ga0e66aa2dc6b2527cfd10723af646c9d7"></a>
62 <h2 class="memtitle"><span class="permalink"><a href="#ga0e66aa2dc6b2527cfd10723af646c9d7">&#9670;&nbsp;</a></span>hwloc_get_child_covering_cpuset()</h2>
63
64 <div class="memitem">
65 <div class="memproto">
66 <table class="mlabels">
67 <tr>
68 <td class="mlabels-left">
69 <table class="memname">
70 <tr>
71 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_child_covering_cpuset </td>
72 <td>(</td>
73 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
74 <td class="paramname"><em>topology</em>, </td>
75 </tr>
76 <tr>
77 <td class="paramkey"></td>
78 <td></td>
79 <td class="paramtype"><a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
80 <td class="paramname"><em>set</em>, </td>
81 </tr>
82 <tr>
83 <td class="paramkey"></td>
84 <td></td>
85 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
86 <td class="paramname"><em>parent</em>&#160;</td>
87 </tr>
88 <tr>
89 <td></td>
90 <td>)</td>
91 <td></td><td></td>
92 </tr>
93 </table>
94 </td>
95 <td class="mlabels-right">
96 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
97 </tr>
98 </table>
99 </div><div class="memdoc">
100
101 <p>Get the child covering at least CPU set <code>set</code>. </p>
102 <dl class="section return"><dt>Returns</dt><dd><code>NULL</code> if no child matches or if <code>set</code> is empty.</dd></dl>
103 <dl class="section note"><dt>Note</dt><dd>This function cannot work if parent does not have a CPU set (I/O or Misc objects). </dd></dl>
104
105 </div>
106 </div>
107 <a id="gaba4b6d86eba1169ced4b0e941d2bb5f0"></a>
108 <h2 class="memtitle"><span class="permalink"><a href="#gaba4b6d86eba1169ced4b0e941d2bb5f0">&#9670;&nbsp;</a></span>hwloc_get_next_obj_covering_cpuset_by_depth()</h2>
109
110 <div class="memitem">
111 <div class="memproto">
112 <table class="mlabels">
113 <tr>
114 <td class="mlabels-left">
115 <table class="memname">
116 <tr>
117 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_next_obj_covering_cpuset_by_depth </td>
118 <td>(</td>
119 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
120 <td class="paramname"><em>topology</em>, </td>
121 </tr>
122 <tr>
123 <td class="paramkey"></td>
124 <td></td>
125 <td class="paramtype"><a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
126 <td class="paramname"><em>set</em>, </td>
127 </tr>
128 <tr>
129 <td class="paramkey"></td>
130 <td></td>
131 <td class="paramtype">int&#160;</td>
132 <td class="paramname"><em>depth</em>, </td>
133 </tr>
134 <tr>
135 <td class="paramkey"></td>
136 <td></td>
137 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
138 <td class="paramname"><em>prev</em>&#160;</td>
139 </tr>
140 <tr>
141 <td></td>
142 <td>)</td>
143 <td></td><td></td>
144 </tr>
145 </table>
146 </td>
147 <td class="mlabels-right">
148 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
149 </tr>
150 </table>
151 </div><div class="memdoc">
152
153 <p>Iterate through same-depth objects covering at least CPU set <code>set</code>. </p>
154 <p>If object <code>prev</code> is <code>NULL</code>, return the first object at depth <code>depth</code> covering at least part of CPU set <code>set</code>. The next invokation should pass the previous return value in <code>prev</code> so as to obtain the next object covering at least another part of <code>set</code>.</p>
155 <dl class="section note"><dt>Note</dt><dd>This function cannot work if objects at the given depth do not have CPU sets (I/O or Misc objects). </dd></dl>
156
157 </div>
158 </div>
159 <a id="ga91cfae08b092e7966002e15d1e987213"></a>
160 <h2 class="memtitle"><span class="permalink"><a href="#ga91cfae08b092e7966002e15d1e987213">&#9670;&nbsp;</a></span>hwloc_get_next_obj_covering_cpuset_by_type()</h2>
161
162 <div class="memitem">
163 <div class="memproto">
164 <table class="mlabels">
165 <tr>
166 <td class="mlabels-left">
167 <table class="memname">
168 <tr>
169 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_next_obj_covering_cpuset_by_type </td>
170 <td>(</td>
171 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
172 <td class="paramname"><em>topology</em>, </td>
173 </tr>
174 <tr>
175 <td class="paramkey"></td>
176 <td></td>
177 <td class="paramtype"><a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
178 <td class="paramname"><em>set</em>, </td>
179 </tr>
180 <tr>
181 <td class="paramkey"></td>
182 <td></td>
183 <td class="paramtype"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
184 <td class="paramname"><em>type</em>, </td>
185 </tr>
186 <tr>
187 <td class="paramkey"></td>
188 <td></td>
189 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
190 <td class="paramname"><em>prev</em>&#160;</td>
191 </tr>
192 <tr>
193 <td></td>
194 <td>)</td>
195 <td></td><td></td>
196 </tr>
197 </table>
198 </td>
199 <td class="mlabels-right">
200 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
201 </tr>
202 </table>
203 </div><div class="memdoc">
204
205 <p>Iterate through same-type objects covering at least CPU set <code>set</code>. </p>
206 <p>If object <code>prev</code> is <code>NULL</code>, return the first object of type <code>type</code> covering at least part of CPU set <code>set</code>. The next invokation should pass the previous return value in <code>prev</code> so as to obtain the next object of type <code>type</code> covering at least another part of <code>set</code>.</p>
207 <p>If there are no or multiple depths for type <code>type</code>, <code>NULL</code> is returned. The caller may fallback to <a class="el" href="a00205.html#gaba4b6d86eba1169ced4b0e941d2bb5f0" title="Iterate through same-depth objects covering at least CPU set set.">hwloc_get_next_obj_covering_cpuset_by_depth()</a> for each depth.</p>
208 <dl class="section note"><dt>Note</dt><dd>This function cannot work if objects of the given type do not have CPU sets (I/O or Misc objects). </dd></dl>
209
210 </div>
211 </div>
212 <a id="ga41acdcdbb8b95d70ecf6c572a3f67dca"></a>
213 <h2 class="memtitle"><span class="permalink"><a href="#ga41acdcdbb8b95d70ecf6c572a3f67dca">&#9670;&nbsp;</a></span>hwloc_get_obj_covering_cpuset()</h2>
214
215 <div class="memitem">
216 <div class="memproto">
217 <table class="mlabels">
218 <tr>
219 <td class="mlabels-left">
220 <table class="memname">
221 <tr>
222 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_obj_covering_cpuset </td>
223 <td>(</td>
224 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
225 <td class="paramname"><em>topology</em>, </td>
226 </tr>
227 <tr>
228 <td class="paramkey"></td>
229 <td></td>
230 <td class="paramtype"><a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
78231 <td class="paramname"><em>set</em>&#160;</td>
79232 </tr>
80233 <tr>
90243 </table>
91244 </div><div class="memdoc">
92245
93 <p>Get the first data (or unified) cache covering a cpuset <code>set</code>. </p>
94 <dl class="section return"><dt>Returns</dt><dd><code>NULL</code> if no cache matches. </dd></dl>
95
96 </div>
97 </div>
98 <a id="gad108a09ce400222fe45545257d575489"></a>
99 <h2 class="memtitle"><span class="permalink"><a href="#gad108a09ce400222fe45545257d575489">&#9670;&nbsp;</a></span>hwloc_get_cache_type_depth()</h2>
100
101 <div class="memitem">
102 <div class="memproto">
103 <table class="mlabels">
104 <tr>
105 <td class="mlabels-left">
106 <table class="memname">
107 <tr>
108 <td class="memname">static int hwloc_get_cache_type_depth </td>
109 <td>(</td>
110 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
111 <td class="paramname"><em>topology</em>, </td>
112 </tr>
113 <tr>
114 <td class="paramkey"></td>
115 <td></td>
116 <td class="paramtype">unsigned&#160;</td>
117 <td class="paramname"><em>cachelevel</em>, </td>
118 </tr>
119 <tr>
120 <td class="paramkey"></td>
121 <td></td>
122 <td class="paramtype"><a class="el" href="a00190.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a>&#160;</td>
123 <td class="paramname"><em>cachetype</em>&#160;</td>
124 </tr>
125 <tr>
126 <td></td>
127 <td>)</td>
128 <td></td><td></td>
129 </tr>
130 </table>
131 </td>
132 <td class="mlabels-right">
133 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
134 </tr>
135 </table>
136 </div><div class="memdoc">
137
138 <p>Find the depth of cache objects matching cache level and type. </p>
139 <p>Return the depth of the topology level that contains cache objects whose attributes match <code>cachelevel</code> and <code>cachetype</code>.</p>
140 <p>This function is identical to calling <a class="el" href="a00193.html#ga8bec782e21be313750da70cf7428b374" title="Returns the depth of objects of type type.">hwloc_get_type_depth()</a> with the corresponding type such as <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55afa834a85d9e53836cf0db6d0bd8329b4" title="Level 1 instruction Cache (filtered out by default).">HWLOC_OBJ_L1ICACHE</a>, except that it may also return a Unified cache when looking for an instruction cache.</p>
141 <p>If no cache level matches, <a class="el" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad" title="No object of given type exists in the topology.">HWLOC_TYPE_DEPTH_UNKNOWN</a> is returned.</p>
142 <p>If <code>cachetype</code> is <a class="el" href="a00190.html#gga791c9875c8fe20f3e1e5871e0657e59ba3900b3b2db54941aac249e5a638a2d7a" title="Unified cache.">HWLOC_OBJ_CACHE_UNIFIED</a>, the depth of the unique matching unified cache level is returned.</p>
143 <p>If <code>cachetype</code> is <a class="el" href="a00190.html#gga791c9875c8fe20f3e1e5871e0657e59bacac60ecad4206f85aeb79bef1604b488" title="Data cache.">HWLOC_OBJ_CACHE_DATA</a> or <a class="el" href="a00190.html#gga791c9875c8fe20f3e1e5871e0657e59ba6f98b0d422b38ba90c5f5c79a11b0658" title="Instruction cache (filtered out by default).">HWLOC_OBJ_CACHE_INSTRUCTION</a>, either a matching cache, or a unified cache is returned.</p>
144 <p>If <code>cachetype</code> is <code>-1</code>, it is ignored and multiple levels may match. The function returns either the depth of a uniquely matching level or <a class="el" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c" title="Objects of given type exist at different depth in the topology (only for Groups).">HWLOC_TYPE_DEPTH_MULTIPLE</a>. </p>
145
146 </div>
147 </div>
148 <a id="ga36f48c32837c7a70b424706e213dcd71"></a>
149 <h2 class="memtitle"><span class="permalink"><a href="#ga36f48c32837c7a70b424706e213dcd71">&#9670;&nbsp;</a></span>hwloc_get_shared_cache_covering_obj()</h2>
150
151 <div class="memitem">
152 <div class="memproto">
153 <table class="mlabels">
154 <tr>
155 <td class="mlabels-left">
156 <table class="memname">
157 <tr>
158 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_shared_cache_covering_obj </td>
159 <td>(</td>
160 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
161 <td class="paramname"><em>topology</em>, </td>
162 </tr>
163 <tr>
164 <td class="paramkey"></td>
165 <td></td>
166 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
167 <td class="paramname"><em>obj</em>&#160;</td>
168 </tr>
169 <tr>
170 <td></td>
171 <td>)</td>
172 <td></td><td></td>
173 </tr>
174 </table>
175 </td>
176 <td class="mlabels-right">
177 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
178 </tr>
179 </table>
180 </div><div class="memdoc">
181
182 <p>Get the first data (or unified) cache shared between an object and somebody else. </p>
183 <dl class="section return"><dt>Returns</dt><dd><code>NULL</code> if no cache matches or if an invalid object is given. </dd></dl>
246 <p>Get the lowest object covering at least CPU set <code>set</code>. </p>
247 <dl class="section return"><dt>Returns</dt><dd><code>NULL</code> if no object matches or if <code>set</code> is empty. </dd></dl>
184248
185249 </div>
186250 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Finding objects, miscellaneous helpers</title>
7 <title>Hardware Locality (hwloc): Looking at Ancestor and Child Objects</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4141 <div class="summary">
4242 <a href="#func-members">Functions</a> </div>
4343 <div class="headertitle">
44 <div class="title">Finding objects, miscellaneous helpers</div> </div>
44 <div class="title">Looking at Ancestor and Child Objects</div> </div>
4545 </div><!--header-->
4646 <div class="contents">
4747 <table class="memberdecls">
4848 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
4949 Functions</h2></td></tr>
50 <tr class="memitem:ga050646458efc8ca1120d9f124c5ad861"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00206.html#ga050646458efc8ca1120d9f124c5ad861">hwloc_bitmap_singlify_per_core</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> cpuset, unsigned which)</td></tr>
51 <tr class="separator:ga050646458efc8ca1120d9f124c5ad861"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:ga751c238a4931db5cc0ca3181b7dd7479"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00206.html#ga751c238a4931db5cc0ca3181b7dd7479">hwloc_get_pu_obj_by_os_index</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned os_index)</td></tr>
53 <tr class="separator:ga751c238a4931db5cc0ca3181b7dd7479"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:gab89d9ed9edfaa3dd526fb6ee1a1618ea"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00206.html#gab89d9ed9edfaa3dd526fb6ee1a1618ea">hwloc_get_numanode_obj_by_os_index</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned os_index)</td></tr>
55 <tr class="separator:gab89d9ed9edfaa3dd526fb6ee1a1618ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:ga2cd22a34360643f7f5bad09576dec205"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00206.html#ga2cd22a34360643f7f5bad09576dec205">hwloc_get_closest_objs</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> src, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *restrict objs, unsigned max)</td></tr>
57 <tr class="separator:ga2cd22a34360643f7f5bad09576dec205"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:ga7a0c1046851f7a88bd52f5a1d4ba0a97"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00206.html#ga7a0c1046851f7a88bd52f5a1d4ba0a97">hwloc_get_obj_below_by_type</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type1, unsigned idx1, <a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type2, unsigned idx2)</td></tr>
59 <tr class="separator:ga7a0c1046851f7a88bd52f5a1d4ba0a97"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:gacb51295ff3fbd3a96f990f20c6492b1d"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00206.html#gacb51295ff3fbd3a96f990f20c6492b1d">hwloc_get_obj_below_array_by_type</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int nr, <a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> *typev, unsigned *idxv)</td></tr>
61 <tr class="separator:gacb51295ff3fbd3a96f990f20c6492b1d"><td class="memSeparator" colspan="2">&#160;</td></tr>
50 <tr class="memitem:ga9f8c93fde236e9642a96957af01a11cb"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00206.html#ga9f8c93fde236e9642a96957af01a11cb">hwloc_get_ancestor_obj_by_depth</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int depth, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj)</td></tr>
51 <tr class="separator:ga9f8c93fde236e9642a96957af01a11cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:ga70f0c7583291da707c15ae4daa850f41"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00206.html#ga70f0c7583291da707c15ae4daa850f41">hwloc_get_ancestor_obj_by_type</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj)</td></tr>
53 <tr class="separator:ga70f0c7583291da707c15ae4daa850f41"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:gab1fa883021928b5c476911c4102e9be3"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00206.html#gab1fa883021928b5c476911c4102e9be3">hwloc_get_common_ancestor_obj</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj1, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj2)</td></tr>
55 <tr class="separator:gab1fa883021928b5c476911c4102e9be3"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:ga408cf74f5bf9ed497911a320c7f8cc56"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00206.html#ga408cf74f5bf9ed497911a320c7f8cc56">hwloc_obj_is_in_subtree</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> subtree_root)</td></tr>
57 <tr class="separator:ga408cf74f5bf9ed497911a320c7f8cc56"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:ga12d8565a3436c565e791ed02a0353621"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00206.html#ga12d8565a3436c565e791ed02a0353621">hwloc_get_next_child</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> parent, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> prev)</td></tr>
59 <tr class="separator:ga12d8565a3436c565e791ed02a0353621"><td class="memSeparator" colspan="2">&#160;</td></tr>
6260 </table>
6361 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
64 <p>Be sure to see the figure in <a class="el" href="a00386.html">Terms and Definitions</a> 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. </p>
62 <p>Be sure to see the figure in <a class="el" href="a00392.html">Terms and Definitions</a> 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. </p>
6563 <h2 class="groupheader">Function Documentation</h2>
66 <a id="ga050646458efc8ca1120d9f124c5ad861"></a>
67 <h2 class="memtitle"><span class="permalink"><a href="#ga050646458efc8ca1120d9f124c5ad861">&#9670;&nbsp;</a></span>hwloc_bitmap_singlify_per_core()</h2>
68
69 <div class="memitem">
70 <div class="memproto">
71 <table class="memname">
72 <tr>
73 <td class="memname">int hwloc_bitmap_singlify_per_core </td>
74 <td>(</td>
75 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
76 <td class="paramname"><em>topology</em>, </td>
77 </tr>
78 <tr>
79 <td class="paramkey"></td>
80 <td></td>
81 <td class="paramtype"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
82 <td class="paramname"><em>cpuset</em>, </td>
83 </tr>
84 <tr>
85 <td class="paramkey"></td>
86 <td></td>
87 <td class="paramtype">unsigned&#160;</td>
88 <td class="paramname"><em>which</em>&#160;</td>
89 </tr>
90 <tr>
91 <td></td>
92 <td>)</td>
93 <td></td><td></td>
94 </tr>
95 </table>
96 </div><div class="memdoc">
97
98 <p>Remove simultaneous multithreading PUs from a CPU set. </p>
99 <p>For each core in <code>topology</code>, if <code>cpuset</code> contains some PUs of that core, modify <code>cpuset</code> to only keep a single PU for that core.</p>
100 <p><code>which</code> specifies which PU will be kept. PU are considered in physical index order. If 0, for each core, the function keeps the first PU that was originally set in <code>cpuset</code>.</p>
101 <p>If <code>which</code> is larger than the number of PUs in a core there were originally set in <code>cpuset</code>, no PU is kept for that core.</p>
102 <dl class="section note"><dt>Note</dt><dd>PUs that are not below a Core object are ignored (for instance if the topology does not contain any Core object). None of them is removed from <code>cpuset</code>. </dd></dl>
103
104 </div>
105 </div>
106 <a id="ga2cd22a34360643f7f5bad09576dec205"></a>
107 <h2 class="memtitle"><span class="permalink"><a href="#ga2cd22a34360643f7f5bad09576dec205">&#9670;&nbsp;</a></span>hwloc_get_closest_objs()</h2>
108
109 <div class="memitem">
110 <div class="memproto">
111 <table class="memname">
112 <tr>
113 <td class="memname">unsigned hwloc_get_closest_objs </td>
114 <td>(</td>
115 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
116 <td class="paramname"><em>topology</em>, </td>
117 </tr>
118 <tr>
119 <td class="paramkey"></td>
120 <td></td>
121 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
122 <td class="paramname"><em>src</em>, </td>
123 </tr>
124 <tr>
125 <td class="paramkey"></td>
126 <td></td>
127 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *restrict&#160;</td>
128 <td class="paramname"><em>objs</em>, </td>
129 </tr>
130 <tr>
131 <td class="paramkey"></td>
132 <td></td>
133 <td class="paramtype">unsigned&#160;</td>
134 <td class="paramname"><em>max</em>&#160;</td>
135 </tr>
136 <tr>
137 <td></td>
138 <td>)</td>
139 <td></td><td></td>
140 </tr>
141 </table>
142 </div><div class="memdoc">
143
144 <p>Do a depth-first traversal of the topology to find and sort. </p>
145 <p>all objects that are at the same depth than <code>src</code>. Report in <code>objs</code> up to <code>max</code> physically closest ones to <code>src</code>.</p>
146 <dl class="section return"><dt>Returns</dt><dd>the number of objects returned in <code>objs</code>.</dd>
147 <dd>
148 0 if <code>src</code> is an I/O object.</dd></dl>
149 <dl class="section note"><dt>Note</dt><dd>This function requires the <code>src</code> object to have a CPU set. </dd></dl>
150
151 </div>
152 </div>
153 <a id="gab89d9ed9edfaa3dd526fb6ee1a1618ea"></a>
154 <h2 class="memtitle"><span class="permalink"><a href="#gab89d9ed9edfaa3dd526fb6ee1a1618ea">&#9670;&nbsp;</a></span>hwloc_get_numanode_obj_by_os_index()</h2>
155
156 <div class="memitem">
157 <div class="memproto">
158 <table class="mlabels">
159 <tr>
160 <td class="mlabels-left">
161 <table class="memname">
162 <tr>
163 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_numanode_obj_by_os_index </td>
164 <td>(</td>
165 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
166 <td class="paramname"><em>topology</em>, </td>
167 </tr>
168 <tr>
169 <td class="paramkey"></td>
170 <td></td>
171 <td class="paramtype">unsigned&#160;</td>
172 <td class="paramname"><em>os_index</em>&#160;</td>
173 </tr>
174 <tr>
175 <td></td>
176 <td>)</td>
177 <td></td><td></td>
178 </tr>
179 </table>
180 </td>
181 <td class="mlabels-right">
182 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
183 </tr>
184 </table>
185 </div><div class="memdoc">
186
187 <p>Returns the object of type <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a" title="NUMA node. An object that contains memory that is directly and byte-accessible to the host processors...">HWLOC_OBJ_NUMANODE</a> with <code>os_index</code>. </p>
188 <p>This function is useful for converting a nodeset into the NUMA node objects it contains. When retrieving the current binding (e.g. with <a class="el" href="a00197.html#gae21f0a1a884929c784bebf070252aa56" title="Query the default memory binding policy and physical locality of the current process or thread.">hwloc_get_membind()</a> with HWLOC_MEMBIND_BYNODESET), one may iterate over the bits of the resulting nodeset with <a class="el" href="a00211.html#ga3f6861045a8029ade373510ffa727d2a" title="Loop macro iterating on bitmap bitmap.">hwloc_bitmap_foreach_begin()</a>, and find the corresponding NUMA nodes with this function. </p>
189
190 </div>
191 </div>
192 <a id="gacb51295ff3fbd3a96f990f20c6492b1d"></a>
193 <h2 class="memtitle"><span class="permalink"><a href="#gacb51295ff3fbd3a96f990f20c6492b1d">&#9670;&nbsp;</a></span>hwloc_get_obj_below_array_by_type()</h2>
194
195 <div class="memitem">
196 <div class="memproto">
197 <table class="mlabels">
198 <tr>
199 <td class="mlabels-left">
200 <table class="memname">
201 <tr>
202 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_obj_below_array_by_type </td>
203 <td>(</td>
204 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
64 <a id="ga9f8c93fde236e9642a96957af01a11cb"></a>
65 <h2 class="memtitle"><span class="permalink"><a href="#ga9f8c93fde236e9642a96957af01a11cb">&#9670;&nbsp;</a></span>hwloc_get_ancestor_obj_by_depth()</h2>
66
67 <div class="memitem">
68 <div class="memproto">
69 <table class="mlabels">
70 <tr>
71 <td class="mlabels-left">
72 <table class="memname">
73 <tr>
74 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_ancestor_obj_by_depth </td>
75 <td>(</td>
76 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
20577 <td class="paramname"><em>topology</em>, </td>
20678 </tr>
20779 <tr>
20880 <td class="paramkey"></td>
20981 <td></td>
21082 <td class="paramtype">int&#160;</td>
211 <td class="paramname"><em>nr</em>, </td>
212 </tr>
213 <tr>
214 <td class="paramkey"></td>
215 <td></td>
216 <td class="paramtype"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> *&#160;</td>
217 <td class="paramname"><em>typev</em>, </td>
218 </tr>
219 <tr>
220 <td class="paramkey"></td>
221 <td></td>
222 <td class="paramtype">unsigned *&#160;</td>
223 <td class="paramname"><em>idxv</em>&#160;</td>
224 </tr>
225 <tr>
226 <td></td>
227 <td>)</td>
228 <td></td><td></td>
229 </tr>
230 </table>
231 </td>
232 <td class="mlabels-right">
233 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
234 </tr>
235 </table>
236 </div><div class="memdoc">
237
238 <p>Find an object below a chain of objects specified by types and indexes. </p>
239 <p>This is a generalized version of <a class="el" href="a00206.html#ga7a0c1046851f7a88bd52f5a1d4ba0a97" title="Find an object below another object, both specified by types and indexes.">hwloc_get_obj_below_by_type()</a>.</p>
240 <p>Arrays <code>typev</code> and <code>idxv</code> must contain <code>nr</code> types and indexes.</p>
241 <p>Start from the top system object and walk the arrays <code>typev</code> and <code>idxv</code>. 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.</p>
242 <p>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.</p>
243 <dl class="section note"><dt>Note</dt><dd>This function requires all these objects and the root object to have a CPU set. </dd></dl>
244
245 </div>
246 </div>
247 <a id="ga7a0c1046851f7a88bd52f5a1d4ba0a97"></a>
248 <h2 class="memtitle"><span class="permalink"><a href="#ga7a0c1046851f7a88bd52f5a1d4ba0a97">&#9670;&nbsp;</a></span>hwloc_get_obj_below_by_type()</h2>
249
250 <div class="memitem">
251 <div class="memproto">
252 <table class="mlabels">
253 <tr>
254 <td class="mlabels-left">
255 <table class="memname">
256 <tr>
257 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_obj_below_by_type </td>
258 <td>(</td>
259 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
260 <td class="paramname"><em>topology</em>, </td>
261 </tr>
262 <tr>
263 <td class="paramkey"></td>
264 <td></td>
265 <td class="paramtype"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
266 <td class="paramname"><em>type1</em>, </td>
267 </tr>
268 <tr>
269 <td class="paramkey"></td>
270 <td></td>
271 <td class="paramtype">unsigned&#160;</td>
272 <td class="paramname"><em>idx1</em>, </td>
273 </tr>
274 <tr>
275 <td class="paramkey"></td>
276 <td></td>
277 <td class="paramtype"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
278 <td class="paramname"><em>type2</em>, </td>
279 </tr>
280 <tr>
281 <td class="paramkey"></td>
282 <td></td>
283 <td class="paramtype">unsigned&#160;</td>
284 <td class="paramname"><em>idx2</em>&#160;</td>
285 </tr>
286 <tr>
287 <td></td>
288 <td>)</td>
289 <td></td><td></td>
290 </tr>
291 </table>
292 </td>
293 <td class="mlabels-right">
294 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
295 </tr>
296 </table>
297 </div><div class="memdoc">
298
299 <p>Find an object below another object, both specified by types and indexes. </p>
300 <p>Start from the top system object and find object of type <code>type1</code> and logical index <code>idx1</code>. Then look below this object and find another object of type <code>type2</code> and logical index <code>idx2</code>. Indexes are specified within the parent, not withing the entire system.</p>
301 <p>For instance, if type1 is PACKAGE, idx1 is 2, type2 is CORE and idx2 is 3, return the fourth core object below the third package.</p>
302 <dl class="section note"><dt>Note</dt><dd>This function requires these objects to have a CPU set. </dd></dl>
303
304 </div>
305 </div>
306 <a id="ga751c238a4931db5cc0ca3181b7dd7479"></a>
307 <h2 class="memtitle"><span class="permalink"><a href="#ga751c238a4931db5cc0ca3181b7dd7479">&#9670;&nbsp;</a></span>hwloc_get_pu_obj_by_os_index()</h2>
308
309 <div class="memitem">
310 <div class="memproto">
311 <table class="mlabels">
312 <tr>
313 <td class="mlabels-left">
314 <table class="memname">
315 <tr>
316 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_pu_obj_by_os_index </td>
317 <td>(</td>
318 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
319 <td class="paramname"><em>topology</em>, </td>
320 </tr>
321 <tr>
322 <td class="paramkey"></td>
323 <td></td>
324 <td class="paramtype">unsigned&#160;</td>
325 <td class="paramname"><em>os_index</em>&#160;</td>
326 </tr>
327 <tr>
328 <td></td>
329 <td>)</td>
330 <td></td><td></td>
331 </tr>
332 </table>
333 </td>
334 <td class="mlabels-right">
335 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
336 </tr>
337 </table>
338 </div><div class="memdoc">
339
340 <p>Returns the object of type <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661" title="Processing Unit, or (Logical) Processor. An execution unit (may share a core with some other logical ...">HWLOC_OBJ_PU</a> with <code>os_index</code>. </p>
341 <p>This function is useful for converting a CPU set into the PU objects it contains. When retrieving the current binding (e.g. with <a class="el" href="a00196.html#gacba7ecb979baf824d5240fa2cb2a8be6" title="Get current process or thread binding.">hwloc_get_cpubind()</a>), one may iterate over the bits of the resulting CPU set with <a class="el" href="a00211.html#ga3f6861045a8029ade373510ffa727d2a" title="Loop macro iterating on bitmap bitmap.">hwloc_bitmap_foreach_begin()</a>, and find the corresponding PUs with this function. </p>
83 <td class="paramname"><em>depth</em>, </td>
84 </tr>
85 <tr>
86 <td class="paramkey"></td>
87 <td></td>
88 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
89 <td class="paramname"><em>obj</em>&#160;</td>
90 </tr>
91 <tr>
92 <td></td>
93 <td>)</td>
94 <td></td><td></td>
95 </tr>
96 </table>
97 </td>
98 <td class="mlabels-right">
99 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
100 </tr>
101 </table>
102 </div><div class="memdoc">
103
104 <p>Returns the ancestor object of <code>obj</code> at depth <code>depth</code>. </p>
105 <dl class="section note"><dt>Note</dt><dd><code>depth</code> should not be the depth of PU or NUMA objects since they are ancestors of no objects (except Misc or I/O). This function rather expects an intermediate level depth, such as the depth of Packages, Cores, or Caches. </dd></dl>
106
107 </div>
108 </div>
109 <a id="ga70f0c7583291da707c15ae4daa850f41"></a>
110 <h2 class="memtitle"><span class="permalink"><a href="#ga70f0c7583291da707c15ae4daa850f41">&#9670;&nbsp;</a></span>hwloc_get_ancestor_obj_by_type()</h2>
111
112 <div class="memitem">
113 <div class="memproto">
114 <table class="mlabels">
115 <tr>
116 <td class="mlabels-left">
117 <table class="memname">
118 <tr>
119 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_ancestor_obj_by_type </td>
120 <td>(</td>
121 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
122 <td class="paramname"><em>topology</em>, </td>
123 </tr>
124 <tr>
125 <td class="paramkey"></td>
126 <td></td>
127 <td class="paramtype"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
128 <td class="paramname"><em>type</em>, </td>
129 </tr>
130 <tr>
131 <td class="paramkey"></td>
132 <td></td>
133 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
134 <td class="paramname"><em>obj</em>&#160;</td>
135 </tr>
136 <tr>
137 <td></td>
138 <td>)</td>
139 <td></td><td></td>
140 </tr>
141 </table>
142 </td>
143 <td class="mlabels-right">
144 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
145 </tr>
146 </table>
147 </div><div class="memdoc">
148
149 <p>Returns the ancestor object of <code>obj</code> with type <code>type</code>. </p>
150 <dl class="section note"><dt>Note</dt><dd><code>type</code> should not be <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661" title="Processing Unit, or (Logical) Processor. An execution unit (may share a core with some other logical ...">HWLOC_OBJ_PU</a> or <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a" title="NUMA node. An object that contains memory that is directly and byte-accessible to the host processors...">HWLOC_OBJ_NUMANODE</a> since these objects are ancestors of no objects (except Misc or I/O). This function rather expects an intermediate object type, such as <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55ab16ab8c0dbffc234921d86f3dfb63129" title="Physical package. The physical package that usually gets inserted into a socket on the motherboard....">HWLOC_OBJ_PACKAGE</a>, <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55ac793958f330bca371aa1535de8aff45f" title="Core. A computation unit (may be shared by several PUs, aka logical processors).">HWLOC_OBJ_CORE</a>, etc. </dd></dl>
151
152 </div>
153 </div>
154 <a id="gab1fa883021928b5c476911c4102e9be3"></a>
155 <h2 class="memtitle"><span class="permalink"><a href="#gab1fa883021928b5c476911c4102e9be3">&#9670;&nbsp;</a></span>hwloc_get_common_ancestor_obj()</h2>
156
157 <div class="memitem">
158 <div class="memproto">
159 <table class="mlabels">
160 <tr>
161 <td class="mlabels-left">
162 <table class="memname">
163 <tr>
164 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_common_ancestor_obj </td>
165 <td>(</td>
166 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
167 <td class="paramname"><em>topology</em>, </td>
168 </tr>
169 <tr>
170 <td class="paramkey"></td>
171 <td></td>
172 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
173 <td class="paramname"><em>obj1</em>, </td>
174 </tr>
175 <tr>
176 <td class="paramkey"></td>
177 <td></td>
178 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
179 <td class="paramname"><em>obj2</em>&#160;</td>
180 </tr>
181 <tr>
182 <td></td>
183 <td>)</td>
184 <td></td><td></td>
185 </tr>
186 </table>
187 </td>
188 <td class="mlabels-right">
189 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
190 </tr>
191 </table>
192 </div><div class="memdoc">
193
194 <p>Returns the common parent object to objects <code>obj1</code> and <code>obj2</code>. </p>
195
196 </div>
197 </div>
198 <a id="ga12d8565a3436c565e791ed02a0353621"></a>
199 <h2 class="memtitle"><span class="permalink"><a href="#ga12d8565a3436c565e791ed02a0353621">&#9670;&nbsp;</a></span>hwloc_get_next_child()</h2>
200
201 <div class="memitem">
202 <div class="memproto">
203 <table class="mlabels">
204 <tr>
205 <td class="mlabels-left">
206 <table class="memname">
207 <tr>
208 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_next_child </td>
209 <td>(</td>
210 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
211 <td class="paramname"><em>topology</em>, </td>
212 </tr>
213 <tr>
214 <td class="paramkey"></td>
215 <td></td>
216 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
217 <td class="paramname"><em>parent</em>, </td>
218 </tr>
219 <tr>
220 <td class="paramkey"></td>
221 <td></td>
222 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
223 <td class="paramname"><em>prev</em>&#160;</td>
224 </tr>
225 <tr>
226 <td></td>
227 <td>)</td>
228 <td></td><td></td>
229 </tr>
230 </table>
231 </td>
232 <td class="mlabels-right">
233 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
234 </tr>
235 </table>
236 </div><div class="memdoc">
237
238 <p>Return the next child. </p>
239 <p>Return the next child among the normal children list, then among the memory children list, then among the I/O children list, then among the Misc children list.</p>
240 <p>If <code>prev</code> is <code>NULL</code>, return the first child.</p>
241 <p>Return <code>NULL</code> when there is no next child. </p>
242
243 </div>
244 </div>
245 <a id="ga408cf74f5bf9ed497911a320c7f8cc56"></a>
246 <h2 class="memtitle"><span class="permalink"><a href="#ga408cf74f5bf9ed497911a320c7f8cc56">&#9670;&nbsp;</a></span>hwloc_obj_is_in_subtree()</h2>
247
248 <div class="memitem">
249 <div class="memproto">
250 <table class="mlabels">
251 <tr>
252 <td class="mlabels-left">
253 <table class="memname">
254 <tr>
255 <td class="memname">static int hwloc_obj_is_in_subtree </td>
256 <td>(</td>
257 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
258 <td class="paramname"><em>topology</em>, </td>
259 </tr>
260 <tr>
261 <td class="paramkey"></td>
262 <td></td>
263 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
264 <td class="paramname"><em>obj</em>, </td>
265 </tr>
266 <tr>
267 <td class="paramkey"></td>
268 <td></td>
269 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
270 <td class="paramname"><em>subtree_root</em>&#160;</td>
271 </tr>
272 <tr>
273 <td></td>
274 <td>)</td>
275 <td></td><td></td>
276 </tr>
277 </table>
278 </td>
279 <td class="mlabels-right">
280 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
281 </tr>
282 </table>
283 </div><div class="memdoc">
284
285 <p>Returns true if <code>obj</code> is inside the subtree beginning with ancestor object <code>subtree_root</code>. </p>
286 <dl class="section note"><dt>Note</dt><dd>This function cannot work if <code>obj</code> and <code>subtree_root</code> objects do not have CPU sets (I/O or Misc objects). </dd></dl>
342287
343288 </div>
344289 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Distributing items over a topology</title>
7 <title>Hardware Locality (hwloc): Kinds of object Type</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="header">
4141 <div class="summary">
42 <a href="#enum-members">Enumerations</a> &#124;
4342 <a href="#func-members">Functions</a> </div>
4443 <div class="headertitle">
45 <div class="title">Distributing items over a topology</div> </div>
44 <div class="title">Kinds of object Type</div> </div>
4645 </div><!--header-->
4746 <div class="contents">
4847 <table class="memberdecls">
49 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
50 Enumerations</h2></td></tr>
51 <tr class="memitem:ga8b835295a52b6768a5e6c8abb1f9c54d"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00207.html#ga8b835295a52b6768a5e6c8abb1f9c54d">hwloc_distrib_flags_e</a> { <a class="el" href="a00207.html#gga8b835295a52b6768a5e6c8abb1f9c54da2ca08404bfbebe9ed5f34c3d7635425a">HWLOC_DISTRIB_FLAG_REVERSE</a>
52 }</td></tr>
53 <tr class="separator:ga8b835295a52b6768a5e6c8abb1f9c54d"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 </table><table class="memberdecls">
5548 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
5649 Functions</h2></td></tr>
57 <tr class="memitem:ga7b0c28f797c2ff17fa2f244ebbd55b33"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00207.html#ga7b0c28f797c2ff17fa2f244ebbd55b33">hwloc_distrib</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *roots, unsigned n_roots, <a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> *set, unsigned n, int until, unsigned long flags)</td></tr>
58 <tr class="separator:ga7b0c28f797c2ff17fa2f244ebbd55b33"><td class="memSeparator" colspan="2">&#160;</td></tr>
50 <tr class="memitem:ga52ef38431eba383b048b98c669b59a16"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00207.html#ga52ef38431eba383b048b98c669b59a16">hwloc_obj_type_is_normal</a> (<a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
51 <tr class="separator:ga52ef38431eba383b048b98c669b59a16"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:gac8a954ed37a4376097234c828068cbef"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00207.html#gac8a954ed37a4376097234c828068cbef">hwloc_obj_type_is_io</a> (<a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
53 <tr class="separator:gac8a954ed37a4376097234c828068cbef"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:ga1d074390c8a3dc3088d84f73fb73f966"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00207.html#ga1d074390c8a3dc3088d84f73fb73f966">hwloc_obj_type_is_memory</a> (<a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
55 <tr class="separator:ga1d074390c8a3dc3088d84f73fb73f966"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:ga2ed589bea28711e80b92066510a5607d"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00207.html#ga2ed589bea28711e80b92066510a5607d">hwloc_obj_type_is_cache</a> (<a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
57 <tr class="separator:ga2ed589bea28711e80b92066510a5607d"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:ga395e48cd221d107e5891689624e1aec4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00207.html#ga395e48cd221d107e5891689624e1aec4">hwloc_obj_type_is_dcache</a> (<a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
59 <tr class="separator:ga395e48cd221d107e5891689624e1aec4"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:ga8abcee67b9b074332c1866405a3648a9"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00207.html#ga8abcee67b9b074332c1866405a3648a9">hwloc_obj_type_is_icache</a> (<a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
61 <tr class="separator:ga8abcee67b9b074332c1866405a3648a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
5962 </table>
6063 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
61 <h2 class="groupheader">Enumeration Type Documentation</h2>
62 <a id="ga8b835295a52b6768a5e6c8abb1f9c54d"></a>
63 <h2 class="memtitle"><span class="permalink"><a href="#ga8b835295a52b6768a5e6c8abb1f9c54d">&#9670;&nbsp;</a></span>hwloc_distrib_flags_e</h2>
64
65 <div class="memitem">
66 <div class="memproto">
67 <table class="memname">
68 <tr>
69 <td class="memname">enum <a class="el" href="a00207.html#ga8b835295a52b6768a5e6c8abb1f9c54d">hwloc_distrib_flags_e</a></td>
70 </tr>
71 </table>
72 </div><div class="memdoc">
73
74 <p>Flags to be given to <a class="el" href="a00207.html#ga7b0c28f797c2ff17fa2f244ebbd55b33" title="Distribute n items over the topology under roots.">hwloc_distrib()</a>. </p>
75 <table class="fieldtable">
76 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga8b835295a52b6768a5e6c8abb1f9c54da2ca08404bfbebe9ed5f34c3d7635425a"></a>HWLOC_DISTRIB_FLAG_REVERSE&#160;</td><td class="fielddoc"><p>Distrib in reverse order, starting from the last objects. </p>
77 </td></tr>
78 </table>
79
80 </div>
81 </div>
64 <p>Each object type is either Normal (i.e. <a class="el" href="a00207.html#ga52ef38431eba383b048b98c669b59a16" title="Check whether an object type is Normal.">hwloc_obj_type_is_normal()</a> returns 1), or Memory (i.e. <a class="el" href="a00207.html#ga1d074390c8a3dc3088d84f73fb73f966" title="Check whether an object type is Memory.">hwloc_obj_type_is_memory()</a> returns 1) or I/O (i.e. <a class="el" href="a00207.html#gac8a954ed37a4376097234c828068cbef" title="Check whether an object type is I/O.">hwloc_obj_type_is_io()</a> returns 1) or Misc (i.e. equal to <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a19f8a6953fa91efc76bcbcdf2d22de4d" title="Miscellaneous objects (filtered out by default). Objects without particular meaning,...">HWLOC_OBJ_MISC</a>). It cannot be of more than one of these kinds. </p>
8265 <h2 class="groupheader">Function Documentation</h2>
83 <a id="ga7b0c28f797c2ff17fa2f244ebbd55b33"></a>
84 <h2 class="memtitle"><span class="permalink"><a href="#ga7b0c28f797c2ff17fa2f244ebbd55b33">&#9670;&nbsp;</a></span>hwloc_distrib()</h2>
85
86 <div class="memitem">
87 <div class="memproto">
88 <table class="mlabels">
89 <tr>
90 <td class="mlabels-left">
91 <table class="memname">
92 <tr>
93 <td class="memname">static int hwloc_distrib </td>
94 <td>(</td>
95 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
96 <td class="paramname"><em>topology</em>, </td>
97 </tr>
98 <tr>
99 <td class="paramkey"></td>
100 <td></td>
101 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *&#160;</td>
102 <td class="paramname"><em>roots</em>, </td>
103 </tr>
104 <tr>
105 <td class="paramkey"></td>
106 <td></td>
107 <td class="paramtype">unsigned&#160;</td>
108 <td class="paramname"><em>n_roots</em>, </td>
109 </tr>
110 <tr>
111 <td class="paramkey"></td>
112 <td></td>
113 <td class="paramtype"><a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> *&#160;</td>
114 <td class="paramname"><em>set</em>, </td>
115 </tr>
116 <tr>
117 <td class="paramkey"></td>
118 <td></td>
119 <td class="paramtype">unsigned&#160;</td>
120 <td class="paramname"><em>n</em>, </td>
121 </tr>
122 <tr>
123 <td class="paramkey"></td>
124 <td></td>
125 <td class="paramtype">int&#160;</td>
126 <td class="paramname"><em>until</em>, </td>
127 </tr>
128 <tr>
129 <td class="paramkey"></td>
130 <td></td>
131 <td class="paramtype">unsigned long&#160;</td>
132 <td class="paramname"><em>flags</em>&#160;</td>
133 </tr>
134 <tr>
135 <td></td>
136 <td>)</td>
137 <td></td><td></td>
138 </tr>
139 </table>
140 </td>
141 <td class="mlabels-right">
142 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
143 </tr>
144 </table>
145 </div><div class="memdoc">
146
147 <p>Distribute <code>n</code> items over the topology under <code>roots</code>. </p>
148 <p>Array <code>set</code> will be filled with <code>n</code> cpusets recursively distributed linearly over the topology under objects <code>roots</code>, down to depth <code>until</code> (which can be INT_MAX to distribute down to the finest level).</p>
149 <p><code>n_roots</code> is usually 1 and <code>roots</code> only contains the topology root object so as to distribute over the entire topology.</p>
150 <p>This is typically useful when an application wants to distribute <code>n</code> threads over a machine, giving each of them as much private cache as possible and keeping them locally in number order.</p>
151 <p>The caller may typically want to also call <a class="el" href="a00211.html#gaa611a77c092e679246afdf9a60d5db8b" title="Keep a single index among those set in bitmap bitmap.">hwloc_bitmap_singlify()</a> before binding a thread so that it does not move at all.</p>
152 <p><code>flags</code> should be 0 or a OR'ed set of <a class="el" href="a00207.html#ga8b835295a52b6768a5e6c8abb1f9c54d" title="Flags to be given to hwloc_distrib().">hwloc_distrib_flags_e</a>.</p>
153 <dl class="section note"><dt>Note</dt><dd>This function requires the <code>roots</code> objects to have a CPU set.</dd>
154 <dd>
155 This function replaces the now deprecated hwloc_distribute() and hwloc_distributev() functions. </dd></dl>
66 <a id="ga2ed589bea28711e80b92066510a5607d"></a>
67 <h2 class="memtitle"><span class="permalink"><a href="#ga2ed589bea28711e80b92066510a5607d">&#9670;&nbsp;</a></span>hwloc_obj_type_is_cache()</h2>
68
69 <div class="memitem">
70 <div class="memproto">
71 <table class="memname">
72 <tr>
73 <td class="memname">int hwloc_obj_type_is_cache </td>
74 <td>(</td>
75 <td class="paramtype"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
76 <td class="paramname"><em>type</em></td><td>)</td>
77 <td></td>
78 </tr>
79 </table>
80 </div><div class="memdoc">
81
82 <p>Check whether an object type is a CPU Cache (Data, Unified or Instruction). </p>
83 <p>Memory-side caches are not CPU caches.</p>
84 <dl class="section return"><dt>Returns</dt><dd>1 if an object of type <code>type</code> is a Cache, 0 otherwise. </dd></dl>
85
86 </div>
87 </div>
88 <a id="ga395e48cd221d107e5891689624e1aec4"></a>
89 <h2 class="memtitle"><span class="permalink"><a href="#ga395e48cd221d107e5891689624e1aec4">&#9670;&nbsp;</a></span>hwloc_obj_type_is_dcache()</h2>
90
91 <div class="memitem">
92 <div class="memproto">
93 <table class="memname">
94 <tr>
95 <td class="memname">int hwloc_obj_type_is_dcache </td>
96 <td>(</td>
97 <td class="paramtype"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
98 <td class="paramname"><em>type</em></td><td>)</td>
99 <td></td>
100 </tr>
101 </table>
102 </div><div class="memdoc">
103
104 <p>Check whether an object type is a CPU Data or Unified Cache. </p>
105 <p>Memory-side caches are not CPU caches.</p>
106 <dl class="section return"><dt>Returns</dt><dd>1 if an object of type <code>type</code> is a CPU Data or Unified Cache, 0 otherwise. </dd></dl>
107
108 </div>
109 </div>
110 <a id="ga8abcee67b9b074332c1866405a3648a9"></a>
111 <h2 class="memtitle"><span class="permalink"><a href="#ga8abcee67b9b074332c1866405a3648a9">&#9670;&nbsp;</a></span>hwloc_obj_type_is_icache()</h2>
112
113 <div class="memitem">
114 <div class="memproto">
115 <table class="memname">
116 <tr>
117 <td class="memname">int hwloc_obj_type_is_icache </td>
118 <td>(</td>
119 <td class="paramtype"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
120 <td class="paramname"><em>type</em></td><td>)</td>
121 <td></td>
122 </tr>
123 </table>
124 </div><div class="memdoc">
125
126 <p>Check whether an object type is a CPU Instruction Cache,. </p>
127 <p>Memory-side caches are not CPU caches.</p>
128 <dl class="section return"><dt>Returns</dt><dd>1 if an object of type <code>type</code> is a CPU Instruction Cache, 0 otherwise. </dd></dl>
129
130 </div>
131 </div>
132 <a id="gac8a954ed37a4376097234c828068cbef"></a>
133 <h2 class="memtitle"><span class="permalink"><a href="#gac8a954ed37a4376097234c828068cbef">&#9670;&nbsp;</a></span>hwloc_obj_type_is_io()</h2>
134
135 <div class="memitem">
136 <div class="memproto">
137 <table class="memname">
138 <tr>
139 <td class="memname">int hwloc_obj_type_is_io </td>
140 <td>(</td>
141 <td class="paramtype"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
142 <td class="paramname"><em>type</em></td><td>)</td>
143 <td></td>
144 </tr>
145 </table>
146 </div><div class="memdoc">
147
148 <p>Check whether an object type is I/O. </p>
149 <p>I/O objects are objects attached to their parents in the I/O children list. This current includes Bridges, PCI and OS devices.</p>
150 <dl class="section return"><dt>Returns</dt><dd>1 if an object of type <code>type</code> is a I/O object, 0 otherwise. </dd></dl>
151
152 </div>
153 </div>
154 <a id="ga1d074390c8a3dc3088d84f73fb73f966"></a>
155 <h2 class="memtitle"><span class="permalink"><a href="#ga1d074390c8a3dc3088d84f73fb73f966">&#9670;&nbsp;</a></span>hwloc_obj_type_is_memory()</h2>
156
157 <div class="memitem">
158 <div class="memproto">
159 <table class="memname">
160 <tr>
161 <td class="memname">int hwloc_obj_type_is_memory </td>
162 <td>(</td>
163 <td class="paramtype"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
164 <td class="paramname"><em>type</em></td><td>)</td>
165 <td></td>
166 </tr>
167 </table>
168 </div><div class="memdoc">
169
170 <p>Check whether an object type is Memory. </p>
171 <p>Memory objects are objects attached to their parents in the Memory children list. This current includes NUMA nodes and Memory-side caches.</p>
172 <dl class="section return"><dt>Returns</dt><dd>1 if an object of type <code>type</code> is a Memory object, 0 otherwise. </dd></dl>
173
174 </div>
175 </div>
176 <a id="ga52ef38431eba383b048b98c669b59a16"></a>
177 <h2 class="memtitle"><span class="permalink"><a href="#ga52ef38431eba383b048b98c669b59a16">&#9670;&nbsp;</a></span>hwloc_obj_type_is_normal()</h2>
178
179 <div class="memitem">
180 <div class="memproto">
181 <table class="memname">
182 <tr>
183 <td class="memname">int hwloc_obj_type_is_normal </td>
184 <td>(</td>
185 <td class="paramtype"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
186 <td class="paramname"><em>type</em></td><td>)</td>
187 <td></td>
188 </tr>
189 </table>
190 </div><div class="memdoc">
191
192 <p>Check whether an object type is Normal. </p>
193 <p>Normal objects are objects of the main CPU hierarchy (Machine, Package, Core, PU, CPU caches, etc.), but they are not NUMA nodes, I/O devices or Misc objects.</p>
194 <p>They are attached to parent as Normal children, not as Memory, I/O or Misc children.</p>
195 <dl class="section return"><dt>Returns</dt><dd>1 if an object of type <code>type</code> is a Normal object, 0 otherwise. </dd></dl>
156196
157197 </div>
158198 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): CPU and node sets of entire topologies</title>
7 <title>Hardware Locality (hwloc): Looking at Cache Objects</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4141 <div class="summary">
4242 <a href="#func-members">Functions</a> </div>
4343 <div class="headertitle">
44 <div class="title">CPU and node sets of entire topologies</div> </div>
44 <div class="title">Looking at Cache Objects</div> </div>
4545 </div><!--header-->
4646 <div class="contents">
4747 <table class="memberdecls">
4848 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
4949 Functions</h2></td></tr>
50 <tr class="memitem:gaee30e03391c1ed7dfd617fb5c7bbb033"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00208.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
51 <tr class="separator:gaee30e03391c1ed7dfd617fb5c7bbb033"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:ga79212faa07b70dd26588941b17d9fa82"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00208.html#ga79212faa07b70dd26588941b17d9fa82">hwloc_topology_get_topology_cpuset</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
53 <tr class="separator:ga79212faa07b70dd26588941b17d9fa82"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:ga517d5d68ec9f24583d8933aab713be8e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00208.html#ga517d5d68ec9f24583d8933aab713be8e">hwloc_topology_get_allowed_cpuset</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
55 <tr class="separator:ga517d5d68ec9f24583d8933aab713be8e"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:ga773fd98949461ef4c1e3170bb0c0418f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00189.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00208.html#ga773fd98949461ef4c1e3170bb0c0418f">hwloc_topology_get_complete_nodeset</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
57 <tr class="separator:ga773fd98949461ef4c1e3170bb0c0418f"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:ga3fd37303e99ace8b0d0ea03f95f8c514"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00189.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00208.html#ga3fd37303e99ace8b0d0ea03f95f8c514">hwloc_topology_get_topology_nodeset</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
59 <tr class="separator:ga3fd37303e99ace8b0d0ea03f95f8c514"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:ga21a4d7237a11e76b912ed4524ab78cbd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00189.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00208.html#ga21a4d7237a11e76b912ed4524ab78cbd">hwloc_topology_get_allowed_nodeset</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
61 <tr class="separator:ga21a4d7237a11e76b912ed4524ab78cbd"><td class="memSeparator" colspan="2">&#160;</td></tr>
50 <tr class="memitem:gad108a09ce400222fe45545257d575489"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00208.html#gad108a09ce400222fe45545257d575489">hwloc_get_cache_type_depth</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned cachelevel, <a class="el" href="a00193.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a> cachetype)</td></tr>
51 <tr class="separator:gad108a09ce400222fe45545257d575489"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:gac4cd480a5deaa4ada047fdd11ae4c070"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00208.html#gac4cd480a5deaa4ada047fdd11ae4c070">hwloc_get_cache_covering_cpuset</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set)</td></tr>
53 <tr class="separator:gac4cd480a5deaa4ada047fdd11ae4c070"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:ga36f48c32837c7a70b424706e213dcd71"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00208.html#ga36f48c32837c7a70b424706e213dcd71">hwloc_get_shared_cache_covering_obj</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj)</td></tr>
55 <tr class="separator:ga36f48c32837c7a70b424706e213dcd71"><td class="memSeparator" colspan="2">&#160;</td></tr>
6256 </table>
6357 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
6458 <h2 class="groupheader">Function Documentation</h2>
65 <a id="ga517d5d68ec9f24583d8933aab713be8e"></a>
66 <h2 class="memtitle"><span class="permalink"><a href="#ga517d5d68ec9f24583d8933aab713be8e">&#9670;&nbsp;</a></span>hwloc_topology_get_allowed_cpuset()</h2>
59 <a id="gac4cd480a5deaa4ada047fdd11ae4c070"></a>
60 <h2 class="memtitle"><span class="permalink"><a href="#gac4cd480a5deaa4ada047fdd11ae4c070">&#9670;&nbsp;</a></span>hwloc_get_cache_covering_cpuset()</h2>
6761
6862 <div class="memitem">
6963 <div class="memproto">
64 <table class="mlabels">
65 <tr>
66 <td class="mlabels-left">
7067 <table class="memname">
7168 <tr>
72 <td class="memname"><a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> hwloc_topology_get_allowed_cpuset </td>
69 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_cache_covering_cpuset </td>
7370 <td>(</td>
74 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
75 <td class="paramname"><em>topology</em></td><td>)</td>
71 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
72 <td class="paramname"><em>topology</em>, </td>
73 </tr>
74 <tr>
75 <td class="paramkey"></td>
7676 <td></td>
77 <td class="paramtype"><a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
78 <td class="paramname"><em>set</em>&#160;</td>
79 </tr>
80 <tr>
81 <td></td>
82 <td>)</td>
83 <td></td><td></td>
7784 </tr>
7885 </table>
86 </td>
87 <td class="mlabels-right">
88 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
89 </tr>
90 </table>
7991 </div><div class="memdoc">
8092
81 <p>Get allowed CPU set. </p>
82 <dl class="section return"><dt>Returns</dt><dd>the CPU set of allowed processors of the system.</dd></dl>
83 <dl class="section note"><dt>Note</dt><dd>If the topology flag <a class="el" href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258" title="Detect the whole system, ignore reservations, include disallowed objects.">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a> was not set, this is identical to <a class="el" href="a00208.html#ga79212faa07b70dd26588941b17d9fa82" title="Get topology CPU set.">hwloc_topology_get_topology_cpuset()</a>, which means all PUs are allowed.</dd>
84 <dd>
85 If <a class="el" href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258" title="Detect the whole system, ignore reservations, include disallowed objects.">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a> was set, applying <a class="el" href="a00211.html#gaefa070f9232857ba5a57297ea9a08ea2" title="Test whether bitmaps bitmap1 and bitmap2 intersects.">hwloc_bitmap_intersects()</a> on the result of this function and on an object cpuset checks whether there are allowed PUs inside that object. Applying <a class="el" href="a00211.html#ga674533016ffed922a28b4f0b49b82cd4" title="And bitmaps bitmap1 and bitmap2 and store the result in bitmap res.">hwloc_bitmap_and()</a> returns the list of these allowed PUs.</dd>
86 <dd>
87 The returned cpuset is not newly allocated and should thus not be changed or freed, <a class="el" href="a00211.html#gae679434c1a5f41d3560a8a7e2c1b0dee" title="Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.">hwloc_bitmap_dup()</a> must be used to obtain a local copy. </dd></dl>
93 <p>Get the first data (or unified) cache covering a cpuset <code>set</code>. </p>
94 <dl class="section return"><dt>Returns</dt><dd><code>NULL</code> if no cache matches. </dd></dl>
8895
8996 </div>
9097 </div>
91 <a id="ga21a4d7237a11e76b912ed4524ab78cbd"></a>
92 <h2 class="memtitle"><span class="permalink"><a href="#ga21a4d7237a11e76b912ed4524ab78cbd">&#9670;&nbsp;</a></span>hwloc_topology_get_allowed_nodeset()</h2>
98 <a id="gad108a09ce400222fe45545257d575489"></a>
99 <h2 class="memtitle"><span class="permalink"><a href="#gad108a09ce400222fe45545257d575489">&#9670;&nbsp;</a></span>hwloc_get_cache_type_depth()</h2>
93100
94101 <div class="memitem">
95102 <div class="memproto">
103 <table class="mlabels">
104 <tr>
105 <td class="mlabels-left">
96106 <table class="memname">
97107 <tr>
98 <td class="memname"><a class="el" href="a00189.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> hwloc_topology_get_allowed_nodeset </td>
108 <td class="memname">static int hwloc_get_cache_type_depth </td>
99109 <td>(</td>
100 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
101 <td class="paramname"><em>topology</em></td><td>)</td>
110 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
111 <td class="paramname"><em>topology</em>, </td>
112 </tr>
113 <tr>
114 <td class="paramkey"></td>
102115 <td></td>
116 <td class="paramtype">unsigned&#160;</td>
117 <td class="paramname"><em>cachelevel</em>, </td>
118 </tr>
119 <tr>
120 <td class="paramkey"></td>
121 <td></td>
122 <td class="paramtype"><a class="el" href="a00193.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a>&#160;</td>
123 <td class="paramname"><em>cachetype</em>&#160;</td>
124 </tr>
125 <tr>
126 <td></td>
127 <td>)</td>
128 <td></td><td></td>
103129 </tr>
104130 </table>
131 </td>
132 <td class="mlabels-right">
133 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
134 </tr>
135 </table>
105136 </div><div class="memdoc">
106137
107 <p>Get allowed node set. </p>
108 <dl class="section return"><dt>Returns</dt><dd>the node set of allowed memory of the system.</dd></dl>
109 <dl class="section note"><dt>Note</dt><dd>If the topology flag <a class="el" href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258" title="Detect the whole system, ignore reservations, include disallowed objects.">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a> was not set, this is identical to <a class="el" href="a00208.html#ga3fd37303e99ace8b0d0ea03f95f8c514" title="Get topology node set.">hwloc_topology_get_topology_nodeset()</a>, which means all NUMA nodes are allowed.</dd>
110 <dd>
111 If <a class="el" href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258" title="Detect the whole system, ignore reservations, include disallowed objects.">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a> was set, applying <a class="el" href="a00211.html#gaefa070f9232857ba5a57297ea9a08ea2" title="Test whether bitmaps bitmap1 and bitmap2 intersects.">hwloc_bitmap_intersects()</a> on the result of this function and on an object nodeset checks whether there are allowed NUMA nodes inside that object. Applying <a class="el" href="a00211.html#ga674533016ffed922a28b4f0b49b82cd4" title="And bitmaps bitmap1 and bitmap2 and store the result in bitmap res.">hwloc_bitmap_and()</a> returns the list of these allowed NUMA nodes.</dd>
112 <dd>
113 The returned nodeset is not newly allocated and should thus not be changed or freed, <a class="el" href="a00211.html#gae679434c1a5f41d3560a8a7e2c1b0dee" title="Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.">hwloc_bitmap_dup()</a> must be used to obtain a local copy. </dd></dl>
138 <p>Find the depth of cache objects matching cache level and type. </p>
139 <p>Return the depth of the topology level that contains cache objects whose attributes match <code>cachelevel</code> and <code>cachetype</code>.</p>
140 <p>This function is identical to calling <a class="el" href="a00196.html#ga8bec782e21be313750da70cf7428b374" title="Returns the depth of objects of type type.">hwloc_get_type_depth()</a> with the corresponding type such as <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55afa834a85d9e53836cf0db6d0bd8329b4" title="Level 1 instruction Cache (filtered out by default).">HWLOC_OBJ_L1ICACHE</a>, except that it may also return a Unified cache when looking for an instruction cache.</p>
141 <p>If no cache level matches, <a class="el" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad" title="No object of given type exists in the topology.">HWLOC_TYPE_DEPTH_UNKNOWN</a> is returned.</p>
142 <p>If <code>cachetype</code> is <a class="el" href="a00193.html#gga791c9875c8fe20f3e1e5871e0657e59ba3900b3b2db54941aac249e5a638a2d7a" title="Unified cache.">HWLOC_OBJ_CACHE_UNIFIED</a>, the depth of the unique matching unified cache level is returned.</p>
143 <p>If <code>cachetype</code> is <a class="el" href="a00193.html#gga791c9875c8fe20f3e1e5871e0657e59bacac60ecad4206f85aeb79bef1604b488" title="Data cache.">HWLOC_OBJ_CACHE_DATA</a> or <a class="el" href="a00193.html#gga791c9875c8fe20f3e1e5871e0657e59ba6f98b0d422b38ba90c5f5c79a11b0658" title="Instruction cache (filtered out by default).">HWLOC_OBJ_CACHE_INSTRUCTION</a>, either a matching cache, or a unified cache is returned.</p>
144 <p>If <code>cachetype</code> is <code>-1</code>, it is ignored and multiple levels may match. The function returns either the depth of a uniquely matching level or <a class="el" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c" title="Objects of given type exist at different depth in the topology (only for Groups).">HWLOC_TYPE_DEPTH_MULTIPLE</a>. </p>
114145
115146 </div>
116147 </div>
117 <a id="gaee30e03391c1ed7dfd617fb5c7bbb033"></a>
118 <h2 class="memtitle"><span class="permalink"><a href="#gaee30e03391c1ed7dfd617fb5c7bbb033">&#9670;&nbsp;</a></span>hwloc_topology_get_complete_cpuset()</h2>
148 <a id="ga36f48c32837c7a70b424706e213dcd71"></a>
149 <h2 class="memtitle"><span class="permalink"><a href="#ga36f48c32837c7a70b424706e213dcd71">&#9670;&nbsp;</a></span>hwloc_get_shared_cache_covering_obj()</h2>
119150
120151 <div class="memitem">
121152 <div class="memproto">
153 <table class="mlabels">
154 <tr>
155 <td class="mlabels-left">
122156 <table class="memname">
123157 <tr>
124 <td class="memname"><a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> hwloc_topology_get_complete_cpuset </td>
158 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_shared_cache_covering_obj </td>
125159 <td>(</td>
126 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
127 <td class="paramname"><em>topology</em></td><td>)</td>
160 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
161 <td class="paramname"><em>topology</em>, </td>
162 </tr>
163 <tr>
164 <td class="paramkey"></td>
128165 <td></td>
166 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
167 <td class="paramname"><em>obj</em>&#160;</td>
168 </tr>
169 <tr>
170 <td></td>
171 <td>)</td>
172 <td></td><td></td>
129173 </tr>
130174 </table>
175 </td>
176 <td class="mlabels-right">
177 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
178 </tr>
179 </table>
131180 </div><div class="memdoc">
132181
133 <p>Get complete CPU set. </p>
134 <dl class="section return"><dt>Returns</dt><dd>the complete CPU set of processors of the system.</dd></dl>
135 <dl class="section note"><dt>Note</dt><dd>The returned cpuset is not newly allocated and should thus not be changed or freed; <a class="el" href="a00211.html#gae679434c1a5f41d3560a8a7e2c1b0dee" title="Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.">hwloc_bitmap_dup()</a> must be used to obtain a local copy.</dd>
136 <dd>
137 This is equivalent to retrieving the root object complete CPU-set. </dd></dl>
138
139 </div>
140 </div>
141 <a id="ga773fd98949461ef4c1e3170bb0c0418f"></a>
142 <h2 class="memtitle"><span class="permalink"><a href="#ga773fd98949461ef4c1e3170bb0c0418f">&#9670;&nbsp;</a></span>hwloc_topology_get_complete_nodeset()</h2>
143
144 <div class="memitem">
145 <div class="memproto">
146 <table class="memname">
147 <tr>
148 <td class="memname"><a class="el" href="a00189.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> hwloc_topology_get_complete_nodeset </td>
149 <td>(</td>
150 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
151 <td class="paramname"><em>topology</em></td><td>)</td>
152 <td></td>
153 </tr>
154 </table>
155 </div><div class="memdoc">
156
157 <p>Get complete node set. </p>
158 <dl class="section return"><dt>Returns</dt><dd>the complete node set of memory of the system.</dd></dl>
159 <dl class="section note"><dt>Note</dt><dd>The returned nodeset is not newly allocated and should thus not be changed or freed; <a class="el" href="a00211.html#gae679434c1a5f41d3560a8a7e2c1b0dee" title="Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.">hwloc_bitmap_dup()</a> must be used to obtain a local copy.</dd>
160 <dd>
161 This is equivalent to retrieving the root object complete nodeset. </dd></dl>
162
163 </div>
164 </div>
165 <a id="ga79212faa07b70dd26588941b17d9fa82"></a>
166 <h2 class="memtitle"><span class="permalink"><a href="#ga79212faa07b70dd26588941b17d9fa82">&#9670;&nbsp;</a></span>hwloc_topology_get_topology_cpuset()</h2>
167
168 <div class="memitem">
169 <div class="memproto">
170 <table class="memname">
171 <tr>
172 <td class="memname"><a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> hwloc_topology_get_topology_cpuset </td>
173 <td>(</td>
174 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
175 <td class="paramname"><em>topology</em></td><td>)</td>
176 <td></td>
177 </tr>
178 </table>
179 </div><div class="memdoc">
180
181 <p>Get topology CPU set. </p>
182 <dl class="section return"><dt>Returns</dt><dd>the CPU set of processors of the system for which hwloc provides topology information. This is equivalent to the cpuset of the system object.</dd></dl>
183 <dl class="section note"><dt>Note</dt><dd>The returned cpuset is not newly allocated and should thus not be changed or freed; <a class="el" href="a00211.html#gae679434c1a5f41d3560a8a7e2c1b0dee" title="Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.">hwloc_bitmap_dup()</a> must be used to obtain a local copy.</dd>
184 <dd>
185 This is equivalent to retrieving the root object CPU-set. </dd></dl>
186
187 </div>
188 </div>
189 <a id="ga3fd37303e99ace8b0d0ea03f95f8c514"></a>
190 <h2 class="memtitle"><span class="permalink"><a href="#ga3fd37303e99ace8b0d0ea03f95f8c514">&#9670;&nbsp;</a></span>hwloc_topology_get_topology_nodeset()</h2>
191
192 <div class="memitem">
193 <div class="memproto">
194 <table class="memname">
195 <tr>
196 <td class="memname"><a class="el" href="a00189.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> hwloc_topology_get_topology_nodeset </td>
197 <td>(</td>
198 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
199 <td class="paramname"><em>topology</em></td><td>)</td>
200 <td></td>
201 </tr>
202 </table>
203 </div><div class="memdoc">
204
205 <p>Get topology node set. </p>
206 <dl class="section return"><dt>Returns</dt><dd>the node set of memory of the system for which hwloc provides topology information. This is equivalent to the nodeset of the system object.</dd></dl>
207 <dl class="section note"><dt>Note</dt><dd>The returned nodeset is not newly allocated and should thus not be changed or freed; <a class="el" href="a00211.html#gae679434c1a5f41d3560a8a7e2c1b0dee" title="Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.">hwloc_bitmap_dup()</a> must be used to obtain a local copy.</dd>
208 <dd>
209 This is equivalent to retrieving the root object nodeset. </dd></dl>
182 <p>Get the first data (or unified) cache shared between an object and somebody else. </p>
183 <dl class="section return"><dt>Returns</dt><dd><code>NULL</code> if no cache matches or if an invalid object is given. </dd></dl>
210184
211185 </div>
212186 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Converting between CPU sets and node sets</title>
7 <title>Hardware Locality (hwloc): Finding objects, miscellaneous helpers</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4141 <div class="summary">
4242 <a href="#func-members">Functions</a> </div>
4343 <div class="headertitle">
44 <div class="title">Converting between CPU sets and node sets</div> </div>
44 <div class="title">Finding objects, miscellaneous helpers</div> </div>
4545 </div><!--header-->
4646 <div class="contents">
4747 <table class="memberdecls">
4848 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
4949 Functions</h2></td></tr>
50 <tr class="memitem:ga185751c1653fedbeb7cc480840f38cde"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#ga185751c1653fedbeb7cc480840f38cde">hwloc_cpuset_to_nodeset</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> _cpuset, <a class="el" href="a00189.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a> nodeset)</td></tr>
51 <tr class="separator:ga185751c1653fedbeb7cc480840f38cde"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:gad5ee8691e08a3538ea7633344c00456d"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#gad5ee8691e08a3538ea7633344c00456d">hwloc_cpuset_from_nodeset</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> _cpuset, <a class="el" href="a00189.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> nodeset)</td></tr>
53 <tr class="separator:gad5ee8691e08a3538ea7633344c00456d"><td class="memSeparator" colspan="2">&#160;</td></tr>
50 <tr class="memitem:ga050646458efc8ca1120d9f124c5ad861"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#ga050646458efc8ca1120d9f124c5ad861">hwloc_bitmap_singlify_per_core</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> cpuset, unsigned which)</td></tr>
51 <tr class="separator:ga050646458efc8ca1120d9f124c5ad861"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:ga751c238a4931db5cc0ca3181b7dd7479"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#ga751c238a4931db5cc0ca3181b7dd7479">hwloc_get_pu_obj_by_os_index</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned os_index)</td></tr>
53 <tr class="separator:ga751c238a4931db5cc0ca3181b7dd7479"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:gab89d9ed9edfaa3dd526fb6ee1a1618ea"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#gab89d9ed9edfaa3dd526fb6ee1a1618ea">hwloc_get_numanode_obj_by_os_index</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned os_index)</td></tr>
55 <tr class="separator:gab89d9ed9edfaa3dd526fb6ee1a1618ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:ga2cd22a34360643f7f5bad09576dec205"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#ga2cd22a34360643f7f5bad09576dec205">hwloc_get_closest_objs</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> src, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *restrict objs, unsigned max)</td></tr>
57 <tr class="separator:ga2cd22a34360643f7f5bad09576dec205"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:ga7a0c1046851f7a88bd52f5a1d4ba0a97"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#ga7a0c1046851f7a88bd52f5a1d4ba0a97">hwloc_get_obj_below_by_type</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type1, unsigned idx1, <a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type2, unsigned idx2)</td></tr>
59 <tr class="separator:ga7a0c1046851f7a88bd52f5a1d4ba0a97"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:gacb51295ff3fbd3a96f990f20c6492b1d"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#gacb51295ff3fbd3a96f990f20c6492b1d">hwloc_get_obj_below_array_by_type</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int nr, <a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> *typev, unsigned *idxv)</td></tr>
61 <tr class="separator:gacb51295ff3fbd3a96f990f20c6492b1d"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:gab5df3ad1e8565ea0c2cf06412f6f6233"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00209.html#gab5df3ad1e8565ea0c2cf06412f6f6233">hwloc_get_obj_with_same_locality</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> src, <a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, const char *subtype, const char *nameprefix, unsigned long flags)</td></tr>
63 <tr class="separator:gab5df3ad1e8565ea0c2cf06412f6f6233"><td class="memSeparator" colspan="2">&#160;</td></tr>
5464 </table>
5565 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
66 <p>Be sure to see the figure in <a class="el" href="a00392.html">Terms and Definitions</a> 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. </p>
5667 <h2 class="groupheader">Function Documentation</h2>
57 <a id="gad5ee8691e08a3538ea7633344c00456d"></a>
58 <h2 class="memtitle"><span class="permalink"><a href="#gad5ee8691e08a3538ea7633344c00456d">&#9670;&nbsp;</a></span>hwloc_cpuset_from_nodeset()</h2>
68 <a id="ga050646458efc8ca1120d9f124c5ad861"></a>
69 <h2 class="memtitle"><span class="permalink"><a href="#ga050646458efc8ca1120d9f124c5ad861">&#9670;&nbsp;</a></span>hwloc_bitmap_singlify_per_core()</h2>
70
71 <div class="memitem">
72 <div class="memproto">
73 <table class="memname">
74 <tr>
75 <td class="memname">int hwloc_bitmap_singlify_per_core </td>
76 <td>(</td>
77 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
78 <td class="paramname"><em>topology</em>, </td>
79 </tr>
80 <tr>
81 <td class="paramkey"></td>
82 <td></td>
83 <td class="paramtype"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
84 <td class="paramname"><em>cpuset</em>, </td>
85 </tr>
86 <tr>
87 <td class="paramkey"></td>
88 <td></td>
89 <td class="paramtype">unsigned&#160;</td>
90 <td class="paramname"><em>which</em>&#160;</td>
91 </tr>
92 <tr>
93 <td></td>
94 <td>)</td>
95 <td></td><td></td>
96 </tr>
97 </table>
98 </div><div class="memdoc">
99
100 <p>Remove simultaneous multithreading PUs from a CPU set. </p>
101 <p>For each core in <code>topology</code>, if <code>cpuset</code> contains some PUs of that core, modify <code>cpuset</code> to only keep a single PU for that core.</p>
102 <p><code>which</code> specifies which PU will be kept. PU are considered in physical index order. If 0, for each core, the function keeps the first PU that was originally set in <code>cpuset</code>.</p>
103 <p>If <code>which</code> is larger than the number of PUs in a core there were originally set in <code>cpuset</code>, no PU is kept for that core.</p>
104 <dl class="section note"><dt>Note</dt><dd>PUs that are not below a Core object are ignored (for instance if the topology does not contain any Core object). None of them is removed from <code>cpuset</code>. </dd></dl>
105
106 </div>
107 </div>
108 <a id="ga2cd22a34360643f7f5bad09576dec205"></a>
109 <h2 class="memtitle"><span class="permalink"><a href="#ga2cd22a34360643f7f5bad09576dec205">&#9670;&nbsp;</a></span>hwloc_get_closest_objs()</h2>
110
111 <div class="memitem">
112 <div class="memproto">
113 <table class="memname">
114 <tr>
115 <td class="memname">unsigned hwloc_get_closest_objs </td>
116 <td>(</td>
117 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
118 <td class="paramname"><em>topology</em>, </td>
119 </tr>
120 <tr>
121 <td class="paramkey"></td>
122 <td></td>
123 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
124 <td class="paramname"><em>src</em>, </td>
125 </tr>
126 <tr>
127 <td class="paramkey"></td>
128 <td></td>
129 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *restrict&#160;</td>
130 <td class="paramname"><em>objs</em>, </td>
131 </tr>
132 <tr>
133 <td class="paramkey"></td>
134 <td></td>
135 <td class="paramtype">unsigned&#160;</td>
136 <td class="paramname"><em>max</em>&#160;</td>
137 </tr>
138 <tr>
139 <td></td>
140 <td>)</td>
141 <td></td><td></td>
142 </tr>
143 </table>
144 </div><div class="memdoc">
145
146 <p>Do a depth-first traversal of the topology to find and sort. </p>
147 <p>all objects that are at the same depth than <code>src</code>. Report in <code>objs</code> up to <code>max</code> physically closest ones to <code>src</code>.</p>
148 <dl class="section return"><dt>Returns</dt><dd>the number of objects returned in <code>objs</code>.</dd>
149 <dd>
150 0 if <code>src</code> is an I/O object.</dd></dl>
151 <dl class="section note"><dt>Note</dt><dd>This function requires the <code>src</code> object to have a CPU set. </dd></dl>
152
153 </div>
154 </div>
155 <a id="gab89d9ed9edfaa3dd526fb6ee1a1618ea"></a>
156 <h2 class="memtitle"><span class="permalink"><a href="#gab89d9ed9edfaa3dd526fb6ee1a1618ea">&#9670;&nbsp;</a></span>hwloc_get_numanode_obj_by_os_index()</h2>
59157
60158 <div class="memitem">
61159 <div class="memproto">
64162 <td class="mlabels-left">
65163 <table class="memname">
66164 <tr>
67 <td class="memname">static int hwloc_cpuset_from_nodeset </td>
68 <td>(</td>
69 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
70 <td class="paramname"><em>topology</em>, </td>
71 </tr>
72 <tr>
73 <td class="paramkey"></td>
74 <td></td>
75 <td class="paramtype"><a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
76 <td class="paramname"><em>_cpuset</em>, </td>
77 </tr>
78 <tr>
79 <td class="paramkey"></td>
80 <td></td>
81 <td class="paramtype"><a class="el" href="a00189.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a>&#160;</td>
82 <td class="paramname"><em>nodeset</em>&#160;</td>
165 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_numanode_obj_by_os_index </td>
166 <td>(</td>
167 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
168 <td class="paramname"><em>topology</em>, </td>
169 </tr>
170 <tr>
171 <td class="paramkey"></td>
172 <td></td>
173 <td class="paramtype">unsigned&#160;</td>
174 <td class="paramname"><em>os_index</em>&#160;</td>
83175 </tr>
84176 <tr>
85177 <td></td>
94186 </table>
95187 </div><div class="memdoc">
96188
97 <p>Convert a NUMA node set into a CPU set. </p>
98 <p>For each NUMA node included in the input <code>nodeset</code>, set the corresponding local PUs in the output <code>_cpuset</code>.</p>
99 <p>If some CPUs have no local NUMA nodes, this function never sets their indexes in the output CPU set, even if a full node set is given in input.</p>
100 <p>Hence the entire topology node set is converted into the set of all CPUs that have some local NUMA nodes. </p>
101
102 </div>
103 </div>
104 <a id="ga185751c1653fedbeb7cc480840f38cde"></a>
105 <h2 class="memtitle"><span class="permalink"><a href="#ga185751c1653fedbeb7cc480840f38cde">&#9670;&nbsp;</a></span>hwloc_cpuset_to_nodeset()</h2>
189 <p>Returns the object of type <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a" title="NUMA node. An object that contains memory that is directly and byte-accessible to the host processors...">HWLOC_OBJ_NUMANODE</a> with <code>os_index</code>. </p>
190 <p>This function is useful for converting a nodeset into the NUMA node objects it contains. When retrieving the current binding (e.g. with <a class="el" href="a00200.html#gae21f0a1a884929c784bebf070252aa56" title="Query the default memory binding policy and physical locality of the current process or thread.">hwloc_get_membind()</a> with HWLOC_MEMBIND_BYNODESET), one may iterate over the bits of the resulting nodeset with <a class="el" href="a00214.html#ga3f6861045a8029ade373510ffa727d2a" title="Loop macro iterating on bitmap bitmap.">hwloc_bitmap_foreach_begin()</a>, and find the corresponding NUMA nodes with this function. </p>
191
192 </div>
193 </div>
194 <a id="gacb51295ff3fbd3a96f990f20c6492b1d"></a>
195 <h2 class="memtitle"><span class="permalink"><a href="#gacb51295ff3fbd3a96f990f20c6492b1d">&#9670;&nbsp;</a></span>hwloc_get_obj_below_array_by_type()</h2>
106196
107197 <div class="memitem">
108198 <div class="memproto">
111201 <td class="mlabels-left">
112202 <table class="memname">
113203 <tr>
114 <td class="memname">static int hwloc_cpuset_to_nodeset </td>
115 <td>(</td>
116 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
117 <td class="paramname"><em>topology</em>, </td>
118 </tr>
119 <tr>
120 <td class="paramkey"></td>
121 <td></td>
122 <td class="paramtype"><a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
123 <td class="paramname"><em>_cpuset</em>, </td>
124 </tr>
125 <tr>
126 <td class="paramkey"></td>
127 <td></td>
128 <td class="paramtype"><a class="el" href="a00189.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a>&#160;</td>
129 <td class="paramname"><em>nodeset</em>&#160;</td>
204 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_obj_below_array_by_type </td>
205 <td>(</td>
206 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
207 <td class="paramname"><em>topology</em>, </td>
208 </tr>
209 <tr>
210 <td class="paramkey"></td>
211 <td></td>
212 <td class="paramtype">int&#160;</td>
213 <td class="paramname"><em>nr</em>, </td>
214 </tr>
215 <tr>
216 <td class="paramkey"></td>
217 <td></td>
218 <td class="paramtype"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> *&#160;</td>
219 <td class="paramname"><em>typev</em>, </td>
220 </tr>
221 <tr>
222 <td class="paramkey"></td>
223 <td></td>
224 <td class="paramtype">unsigned *&#160;</td>
225 <td class="paramname"><em>idxv</em>&#160;</td>
130226 </tr>
131227 <tr>
132228 <td></td>
141237 </table>
142238 </div><div class="memdoc">
143239
144 <p>Convert a CPU set into a NUMA node set. </p>
145 <p>For each PU included in the input <code>_cpuset</code>, set the corresponding local NUMA node(s) in the output <code>nodeset</code>.</p>
146 <p>If some NUMA nodes have no CPUs at all, this function never sets their indexes in the output node set, even if a full CPU set is given in input.</p>
147 <p>Hence the entire topology CPU set is converted into the set of all nodes that have some local CPUs. </p>
240 <p>Find an object below a chain of objects specified by types and indexes. </p>
241 <p>This is a generalized version of <a class="el" href="a00209.html#ga7a0c1046851f7a88bd52f5a1d4ba0a97" title="Find an object below another object, both specified by types and indexes.">hwloc_get_obj_below_by_type()</a>.</p>
242 <p>Arrays <code>typev</code> and <code>idxv</code> must contain <code>nr</code> types and indexes.</p>
243 <p>Start from the top system object and walk the arrays <code>typev</code> and <code>idxv</code>. 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.</p>
244 <p>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.</p>
245 <dl class="section note"><dt>Note</dt><dd>This function requires all these objects and the root object to have a CPU set. </dd></dl>
246
247 </div>
248 </div>
249 <a id="ga7a0c1046851f7a88bd52f5a1d4ba0a97"></a>
250 <h2 class="memtitle"><span class="permalink"><a href="#ga7a0c1046851f7a88bd52f5a1d4ba0a97">&#9670;&nbsp;</a></span>hwloc_get_obj_below_by_type()</h2>
251
252 <div class="memitem">
253 <div class="memproto">
254 <table class="mlabels">
255 <tr>
256 <td class="mlabels-left">
257 <table class="memname">
258 <tr>
259 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_obj_below_by_type </td>
260 <td>(</td>
261 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
262 <td class="paramname"><em>topology</em>, </td>
263 </tr>
264 <tr>
265 <td class="paramkey"></td>
266 <td></td>
267 <td class="paramtype"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
268 <td class="paramname"><em>type1</em>, </td>
269 </tr>
270 <tr>
271 <td class="paramkey"></td>
272 <td></td>
273 <td class="paramtype">unsigned&#160;</td>
274 <td class="paramname"><em>idx1</em>, </td>
275 </tr>
276 <tr>
277 <td class="paramkey"></td>
278 <td></td>
279 <td class="paramtype"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
280 <td class="paramname"><em>type2</em>, </td>
281 </tr>
282 <tr>
283 <td class="paramkey"></td>
284 <td></td>
285 <td class="paramtype">unsigned&#160;</td>
286 <td class="paramname"><em>idx2</em>&#160;</td>
287 </tr>
288 <tr>
289 <td></td>
290 <td>)</td>
291 <td></td><td></td>
292 </tr>
293 </table>
294 </td>
295 <td class="mlabels-right">
296 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
297 </tr>
298 </table>
299 </div><div class="memdoc">
300
301 <p>Find an object below another object, both specified by types and indexes. </p>
302 <p>Start from the top system object and find object of type <code>type1</code> and logical index <code>idx1</code>. Then look below this object and find another object of type <code>type2</code> and logical index <code>idx2</code>. Indexes are specified within the parent, not withing the entire system.</p>
303 <p>For instance, if type1 is PACKAGE, idx1 is 2, type2 is CORE and idx2 is 3, return the fourth core object below the third package.</p>
304 <dl class="section note"><dt>Note</dt><dd>This function requires these objects to have a CPU set. </dd></dl>
305
306 </div>
307 </div>
308 <a id="gab5df3ad1e8565ea0c2cf06412f6f6233"></a>
309 <h2 class="memtitle"><span class="permalink"><a href="#gab5df3ad1e8565ea0c2cf06412f6f6233">&#9670;&nbsp;</a></span>hwloc_get_obj_with_same_locality()</h2>
310
311 <div class="memitem">
312 <div class="memproto">
313 <table class="memname">
314 <tr>
315 <td class="memname"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_obj_with_same_locality </td>
316 <td>(</td>
317 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
318 <td class="paramname"><em>topology</em>, </td>
319 </tr>
320 <tr>
321 <td class="paramkey"></td>
322 <td></td>
323 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
324 <td class="paramname"><em>src</em>, </td>
325 </tr>
326 <tr>
327 <td class="paramkey"></td>
328 <td></td>
329 <td class="paramtype"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
330 <td class="paramname"><em>type</em>, </td>
331 </tr>
332 <tr>
333 <td class="paramkey"></td>
334 <td></td>
335 <td class="paramtype">const char *&#160;</td>
336 <td class="paramname"><em>subtype</em>, </td>
337 </tr>
338 <tr>
339 <td class="paramkey"></td>
340 <td></td>
341 <td class="paramtype">const char *&#160;</td>
342 <td class="paramname"><em>nameprefix</em>, </td>
343 </tr>
344 <tr>
345 <td class="paramkey"></td>
346 <td></td>
347 <td class="paramtype">unsigned long&#160;</td>
348 <td class="paramname"><em>flags</em>&#160;</td>
349 </tr>
350 <tr>
351 <td></td>
352 <td>)</td>
353 <td></td><td></td>
354 </tr>
355 </table>
356 </div><div class="memdoc">
357
358 <p>Return an object of a different type with same locality. </p>
359 <p>If the source object <code>src</code> is a normal or memory type, this function returns an object of type <code>type</code> with same CPU and node sets, either below or above in the hierarchy.</p>
360 <p>If the source object <code>src</code> is a PCI or an OS device within a PCI device, the function may either return that PCI device, or another OS device in the same PCI parent. This may for instance be useful for converting between OS devices such as "nvml0" or "rsmi1" used in distance structures into the the PCI device, or the CUDA or OpenCL OS device that correspond to the same physical card.</p>
361 <p>If not <code>NULL</code>, parameter <code>subtype</code> only select objects whose subtype attribute exists and is <code>subtype</code> (case-insensitively), for instance "OpenCL" or "CUDA".</p>
362 <p>If not <code>NULL</code>, parameter <code>nameprefix</code> only selects objects whose name attribute exists and starts with <code>nameprefix</code> (case-insensitively), for instance "rsmi" for matching "rsmi0".</p>
363 <p>If multiple objects match, the first one is returned.</p>
364 <p>This function will not walk the hierarchy across bridges since the PCI locality may become different. This function cannot also convert between normal/memory objects and I/O or Misc objects.</p>
365 <p><code>flags</code> must be <code>0</code> for now.</p>
366 <dl class="section return"><dt>Returns</dt><dd>An object with identical locality, matching <code>subtype</code> and <code>nameprefix</code> if any.</dd>
367 <dd>
368 <code>NULL</code> if no matching object could be found, or if the source object and target type are incompatible, for instance if converting between CPU and I/O objects. </dd></dl>
369
370 </div>
371 </div>
372 <a id="ga751c238a4931db5cc0ca3181b7dd7479"></a>
373 <h2 class="memtitle"><span class="permalink"><a href="#ga751c238a4931db5cc0ca3181b7dd7479">&#9670;&nbsp;</a></span>hwloc_get_pu_obj_by_os_index()</h2>
374
375 <div class="memitem">
376 <div class="memproto">
377 <table class="mlabels">
378 <tr>
379 <td class="mlabels-left">
380 <table class="memname">
381 <tr>
382 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_pu_obj_by_os_index </td>
383 <td>(</td>
384 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
385 <td class="paramname"><em>topology</em>, </td>
386 </tr>
387 <tr>
388 <td class="paramkey"></td>
389 <td></td>
390 <td class="paramtype">unsigned&#160;</td>
391 <td class="paramname"><em>os_index</em>&#160;</td>
392 </tr>
393 <tr>
394 <td></td>
395 <td>)</td>
396 <td></td><td></td>
397 </tr>
398 </table>
399 </td>
400 <td class="mlabels-right">
401 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
402 </tr>
403 </table>
404 </div><div class="memdoc">
405
406 <p>Returns the object of type <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661" title="Processing Unit, or (Logical) Processor. An execution unit (may share a core with some other logical ...">HWLOC_OBJ_PU</a> with <code>os_index</code>. </p>
407 <p>This function is useful for converting a CPU set into the PU objects it contains. When retrieving the current binding (e.g. with <a class="el" href="a00199.html#gacba7ecb979baf824d5240fa2cb2a8be6" title="Get current process or thread binding.">hwloc_get_cpubind()</a>), one may iterate over the bits of the resulting CPU set with <a class="el" href="a00214.html#ga3f6861045a8029ade373510ffa727d2a" title="Loop macro iterating on bitmap bitmap.">hwloc_bitmap_foreach_begin()</a>, and find the corresponding PUs with this function. </p>
148408
149409 </div>
150410 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Finding I/O objects</title>
7 <title>Hardware Locality (hwloc): Distributing items over a topology</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="header">
4141 <div class="summary">
42 <a href="#enum-members">Enumerations</a> &#124;
4243 <a href="#func-members">Functions</a> </div>
4344 <div class="headertitle">
44 <div class="title">Finding I/O objects</div> </div>
45 <div class="title">Distributing items over a topology</div> </div>
4546 </div><!--header-->
4647 <div class="contents">
4748 <table class="memberdecls">
49 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
50 Enumerations</h2></td></tr>
51 <tr class="memitem:ga8b835295a52b6768a5e6c8abb1f9c54d"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00210.html#ga8b835295a52b6768a5e6c8abb1f9c54d">hwloc_distrib_flags_e</a> { <a class="el" href="a00210.html#gga8b835295a52b6768a5e6c8abb1f9c54da2ca08404bfbebe9ed5f34c3d7635425a">HWLOC_DISTRIB_FLAG_REVERSE</a>
52 }</td></tr>
53 <tr class="separator:ga8b835295a52b6768a5e6c8abb1f9c54d"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 </table><table class="memberdecls">
4855 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
4956 Functions</h2></td></tr>
50 <tr class="memitem:gaf139bb61375178e90cc3f1835b452ab6"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00210.html#gaf139bb61375178e90cc3f1835b452ab6">hwloc_get_non_io_ancestor_obj</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> ioobj)</td></tr>
51 <tr class="separator:gaf139bb61375178e90cc3f1835b452ab6"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:ga66470dabce9db19a57c5940a909d0baa"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00210.html#ga66470dabce9db19a57c5940a909d0baa">hwloc_get_next_pcidev</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> prev)</td></tr>
53 <tr class="separator:ga66470dabce9db19a57c5940a909d0baa"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:gacdbaf0db98872e224b7883a84bfb0455"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00210.html#gacdbaf0db98872e224b7883a84bfb0455">hwloc_get_pcidev_by_busid</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)</td></tr>
55 <tr class="separator:gacdbaf0db98872e224b7883a84bfb0455"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:ga23a978469353134b3104b846fe2efceb"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00210.html#ga23a978469353134b3104b846fe2efceb">hwloc_get_pcidev_by_busidstring</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const char *busid)</td></tr>
57 <tr class="separator:ga23a978469353134b3104b846fe2efceb"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:ga8b4584c8949e2c5f1c97ba7fe92b8145"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00210.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> prev)</td></tr>
59 <tr class="separator:ga8b4584c8949e2c5f1c97ba7fe92b8145"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:ga9dba22a3f4f701f2a46780ba9a0bbbe7"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00210.html#ga9dba22a3f4f701f2a46780ba9a0bbbe7">hwloc_get_next_bridge</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> prev)</td></tr>
61 <tr class="separator:ga9dba22a3f4f701f2a46780ba9a0bbbe7"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:ga0d92a9462a3d317f29ecb4442a307fb1"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00210.html#ga0d92a9462a3d317f29ecb4442a307fb1">hwloc_bridge_covers_pcibus</a> (<a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> bridge, unsigned domain, unsigned bus)</td></tr>
63 <tr class="separator:ga0d92a9462a3d317f29ecb4442a307fb1"><td class="memSeparator" colspan="2">&#160;</td></tr>
57 <tr class="memitem:ga7b0c28f797c2ff17fa2f244ebbd55b33"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00210.html#ga7b0c28f797c2ff17fa2f244ebbd55b33">hwloc_distrib</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *roots, unsigned n_roots, <a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> *set, unsigned n, int until, unsigned long flags)</td></tr>
58 <tr class="separator:ga7b0c28f797c2ff17fa2f244ebbd55b33"><td class="memSeparator" colspan="2">&#160;</td></tr>
6459 </table>
6560 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
61 <h2 class="groupheader">Enumeration Type Documentation</h2>
62 <a id="ga8b835295a52b6768a5e6c8abb1f9c54d"></a>
63 <h2 class="memtitle"><span class="permalink"><a href="#ga8b835295a52b6768a5e6c8abb1f9c54d">&#9670;&nbsp;</a></span>hwloc_distrib_flags_e</h2>
64
65 <div class="memitem">
66 <div class="memproto">
67 <table class="memname">
68 <tr>
69 <td class="memname">enum <a class="el" href="a00210.html#ga8b835295a52b6768a5e6c8abb1f9c54d">hwloc_distrib_flags_e</a></td>
70 </tr>
71 </table>
72 </div><div class="memdoc">
73
74 <p>Flags to be given to <a class="el" href="a00210.html#ga7b0c28f797c2ff17fa2f244ebbd55b33" title="Distribute n items over the topology under roots.">hwloc_distrib()</a>. </p>
75 <table class="fieldtable">
76 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga8b835295a52b6768a5e6c8abb1f9c54da2ca08404bfbebe9ed5f34c3d7635425a"></a>HWLOC_DISTRIB_FLAG_REVERSE&#160;</td><td class="fielddoc"><p>Distrib in reverse order, starting from the last objects. </p>
77 </td></tr>
78 </table>
79
80 </div>
81 </div>
6682 <h2 class="groupheader">Function Documentation</h2>
67 <a id="ga0d92a9462a3d317f29ecb4442a307fb1"></a>
68 <h2 class="memtitle"><span class="permalink"><a href="#ga0d92a9462a3d317f29ecb4442a307fb1">&#9670;&nbsp;</a></span>hwloc_bridge_covers_pcibus()</h2>
83 <a id="ga7b0c28f797c2ff17fa2f244ebbd55b33"></a>
84 <h2 class="memtitle"><span class="permalink"><a href="#ga7b0c28f797c2ff17fa2f244ebbd55b33">&#9670;&nbsp;</a></span>hwloc_distrib()</h2>
6985
7086 <div class="memitem">
7187 <div class="memproto">
7490 <td class="mlabels-left">
7591 <table class="memname">
7692 <tr>
77 <td class="memname">static int hwloc_bridge_covers_pcibus </td>
93 <td class="memname">static int hwloc_distrib </td>
7894 <td>(</td>
79 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
80 <td class="paramname"><em>bridge</em>, </td>
95 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
96 <td class="paramname"><em>topology</em>, </td>
97 </tr>
98 <tr>
99 <td class="paramkey"></td>
100 <td></td>
101 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *&#160;</td>
102 <td class="paramname"><em>roots</em>, </td>
81103 </tr>
82104 <tr>
83105 <td class="paramkey"></td>
84106 <td></td>
85107 <td class="paramtype">unsigned&#160;</td>
86 <td class="paramname"><em>domain</em>, </td>
108 <td class="paramname"><em>n_roots</em>, </td>
109 </tr>
110 <tr>
111 <td class="paramkey"></td>
112 <td></td>
113 <td class="paramtype"><a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> *&#160;</td>
114 <td class="paramname"><em>set</em>, </td>
87115 </tr>
88116 <tr>
89117 <td class="paramkey"></td>
90118 <td></td>
91119 <td class="paramtype">unsigned&#160;</td>
92 <td class="paramname"><em>bus</em>&#160;</td>
120 <td class="paramname"><em>n</em>, </td>
121 </tr>
122 <tr>
123 <td class="paramkey"></td>
124 <td></td>
125 <td class="paramtype">int&#160;</td>
126 <td class="paramname"><em>until</em>, </td>
127 </tr>
128 <tr>
129 <td class="paramkey"></td>
130 <td></td>
131 <td class="paramtype">unsigned long&#160;</td>
132 <td class="paramname"><em>flags</em>&#160;</td>
93133 </tr>
94134 <tr>
95135 <td></td>
104144 </table>
105145 </div><div class="memdoc">
106146
107 </div>
108 </div>
109 <a id="ga9dba22a3f4f701f2a46780ba9a0bbbe7"></a>
110 <h2 class="memtitle"><span class="permalink"><a href="#ga9dba22a3f4f701f2a46780ba9a0bbbe7">&#9670;&nbsp;</a></span>hwloc_get_next_bridge()</h2>
111
112 <div class="memitem">
113 <div class="memproto">
114 <table class="mlabels">
115 <tr>
116 <td class="mlabels-left">
117 <table class="memname">
118 <tr>
119 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_next_bridge </td>
120 <td>(</td>
121 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
122 <td class="paramname"><em>topology</em>, </td>
123 </tr>
124 <tr>
125 <td class="paramkey"></td>
126 <td></td>
127 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
128 <td class="paramname"><em>prev</em>&#160;</td>
129 </tr>
130 <tr>
131 <td></td>
132 <td>)</td>
133 <td></td><td></td>
134 </tr>
135 </table>
136 </td>
137 <td class="mlabels-right">
138 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
139 </tr>
140 </table>
141 </div><div class="memdoc">
142
143 <p>Get the next bridge in the system. </p>
144 <dl class="section return"><dt>Returns</dt><dd>the first bridge if <code>prev</code> is <code>NULL</code>. </dd></dl>
145
146 </div>
147 </div>
148 <a id="ga8b4584c8949e2c5f1c97ba7fe92b8145"></a>
149 <h2 class="memtitle"><span class="permalink"><a href="#ga8b4584c8949e2c5f1c97ba7fe92b8145">&#9670;&nbsp;</a></span>hwloc_get_next_osdev()</h2>
150
151 <div class="memitem">
152 <div class="memproto">
153 <table class="mlabels">
154 <tr>
155 <td class="mlabels-left">
156 <table class="memname">
157 <tr>
158 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_next_osdev </td>
159 <td>(</td>
160 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
161 <td class="paramname"><em>topology</em>, </td>
162 </tr>
163 <tr>
164 <td class="paramkey"></td>
165 <td></td>
166 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
167 <td class="paramname"><em>prev</em>&#160;</td>
168 </tr>
169 <tr>
170 <td></td>
171 <td>)</td>
172 <td></td><td></td>
173 </tr>
174 </table>
175 </td>
176 <td class="mlabels-right">
177 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
178 </tr>
179 </table>
180 </div><div class="memdoc">
181
182 <p>Get the next OS device in the system. </p>
183 <dl class="section return"><dt>Returns</dt><dd>the first OS device if <code>prev</code> is <code>NULL</code>. </dd></dl>
184
185 </div>
186 </div>
187 <a id="ga66470dabce9db19a57c5940a909d0baa"></a>
188 <h2 class="memtitle"><span class="permalink"><a href="#ga66470dabce9db19a57c5940a909d0baa">&#9670;&nbsp;</a></span>hwloc_get_next_pcidev()</h2>
189
190 <div class="memitem">
191 <div class="memproto">
192 <table class="mlabels">
193 <tr>
194 <td class="mlabels-left">
195 <table class="memname">
196 <tr>
197 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_next_pcidev </td>
198 <td>(</td>
199 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
200 <td class="paramname"><em>topology</em>, </td>
201 </tr>
202 <tr>
203 <td class="paramkey"></td>
204 <td></td>
205 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
206 <td class="paramname"><em>prev</em>&#160;</td>
207 </tr>
208 <tr>
209 <td></td>
210 <td>)</td>
211 <td></td><td></td>
212 </tr>
213 </table>
214 </td>
215 <td class="mlabels-right">
216 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
217 </tr>
218 </table>
219 </div><div class="memdoc">
220
221 <p>Get the next PCI device in the system. </p>
222 <dl class="section return"><dt>Returns</dt><dd>the first PCI device if <code>prev</code> is <code>NULL</code>. </dd></dl>
223
224 </div>
225 </div>
226 <a id="gaf139bb61375178e90cc3f1835b452ab6"></a>
227 <h2 class="memtitle"><span class="permalink"><a href="#gaf139bb61375178e90cc3f1835b452ab6">&#9670;&nbsp;</a></span>hwloc_get_non_io_ancestor_obj()</h2>
228
229 <div class="memitem">
230 <div class="memproto">
231 <table class="mlabels">
232 <tr>
233 <td class="mlabels-left">
234 <table class="memname">
235 <tr>
236 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_non_io_ancestor_obj </td>
237 <td>(</td>
238 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
239 <td class="paramname"><em>topology</em>, </td>
240 </tr>
241 <tr>
242 <td class="paramkey"></td>
243 <td></td>
244 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
245 <td class="paramname"><em>ioobj</em>&#160;</td>
246 </tr>
247 <tr>
248 <td></td>
249 <td>)</td>
250 <td></td><td></td>
251 </tr>
252 </table>
253 </td>
254 <td class="mlabels-right">
255 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
256 </tr>
257 </table>
258 </div><div class="memdoc">
259
260 <p>Get the first non-I/O ancestor object. </p>
261 <p>Given the I/O object <code>ioobj</code>, find the smallest non-I/O ancestor object. This object (normal or memory) may then be used for binding because it has non-NULL CPU and node sets and because its locality is the same as <code>ioobj</code>.</p>
262 <dl class="section note"><dt>Note</dt><dd>The resulting object is usually a normal object but it could also be a memory object (e.g. NUMA node) in future platforms if I/O objects ever get attached to memory instead of CPUs. </dd></dl>
263
264 </div>
265 </div>
266 <a id="gacdbaf0db98872e224b7883a84bfb0455"></a>
267 <h2 class="memtitle"><span class="permalink"><a href="#gacdbaf0db98872e224b7883a84bfb0455">&#9670;&nbsp;</a></span>hwloc_get_pcidev_by_busid()</h2>
268
269 <div class="memitem">
270 <div class="memproto">
271 <table class="mlabels">
272 <tr>
273 <td class="mlabels-left">
274 <table class="memname">
275 <tr>
276 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_pcidev_by_busid </td>
277 <td>(</td>
278 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
279 <td class="paramname"><em>topology</em>, </td>
280 </tr>
281 <tr>
282 <td class="paramkey"></td>
283 <td></td>
284 <td class="paramtype">unsigned&#160;</td>
285 <td class="paramname"><em>domain</em>, </td>
286 </tr>
287 <tr>
288 <td class="paramkey"></td>
289 <td></td>
290 <td class="paramtype">unsigned&#160;</td>
291 <td class="paramname"><em>bus</em>, </td>
292 </tr>
293 <tr>
294 <td class="paramkey"></td>
295 <td></td>
296 <td class="paramtype">unsigned&#160;</td>
297 <td class="paramname"><em>dev</em>, </td>
298 </tr>
299 <tr>
300 <td class="paramkey"></td>
301 <td></td>
302 <td class="paramtype">unsigned&#160;</td>
303 <td class="paramname"><em>func</em>&#160;</td>
304 </tr>
305 <tr>
306 <td></td>
307 <td>)</td>
308 <td></td><td></td>
309 </tr>
310 </table>
311 </td>
312 <td class="mlabels-right">
313 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
314 </tr>
315 </table>
316 </div><div class="memdoc">
317
318 <p>Find the PCI device object matching the PCI bus id given domain, bus device and function PCI bus id. </p>
319
320 </div>
321 </div>
322 <a id="ga23a978469353134b3104b846fe2efceb"></a>
323 <h2 class="memtitle"><span class="permalink"><a href="#ga23a978469353134b3104b846fe2efceb">&#9670;&nbsp;</a></span>hwloc_get_pcidev_by_busidstring()</h2>
324
325 <div class="memitem">
326 <div class="memproto">
327 <table class="mlabels">
328 <tr>
329 <td class="mlabels-left">
330 <table class="memname">
331 <tr>
332 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_pcidev_by_busidstring </td>
333 <td>(</td>
334 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
335 <td class="paramname"><em>topology</em>, </td>
336 </tr>
337 <tr>
338 <td class="paramkey"></td>
339 <td></td>
340 <td class="paramtype">const char *&#160;</td>
341 <td class="paramname"><em>busid</em>&#160;</td>
342 </tr>
343 <tr>
344 <td></td>
345 <td>)</td>
346 <td></td><td></td>
347 </tr>
348 </table>
349 </td>
350 <td class="mlabels-right">
351 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
352 </tr>
353 </table>
354 </div><div class="memdoc">
355
356 <p>Find the PCI device object matching the PCI bus id given as a string xxxx:yy:zz.t or yy:zz.t. </p>
147 <p>Distribute <code>n</code> items over the topology under <code>roots</code>. </p>
148 <p>Array <code>set</code> will be filled with <code>n</code> cpusets recursively distributed linearly over the topology under objects <code>roots</code>, down to depth <code>until</code> (which can be INT_MAX to distribute down to the finest level).</p>
149 <p><code>n_roots</code> is usually 1 and <code>roots</code> only contains the topology root object so as to distribute over the entire topology.</p>
150 <p>This is typically useful when an application wants to distribute <code>n</code> threads over a machine, giving each of them as much private cache as possible and keeping them locally in number order.</p>
151 <p>The caller may typically want to also call <a class="el" href="a00214.html#gaa611a77c092e679246afdf9a60d5db8b" title="Keep a single index among those set in bitmap bitmap.">hwloc_bitmap_singlify()</a> before binding a thread so that it does not move at all.</p>
152 <p><code>flags</code> should be 0 or a OR'ed set of <a class="el" href="a00210.html#ga8b835295a52b6768a5e6c8abb1f9c54d" title="Flags to be given to hwloc_distrib().">hwloc_distrib_flags_e</a>.</p>
153 <dl class="section note"><dt>Note</dt><dd>This function requires the <code>roots</code> objects to have a CPU set.</dd>
154 <dd>
155 This function replaces the now deprecated hwloc_distribute() and hwloc_distributev() functions. </dd></dl>
357156
358157 </div>
359158 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): The bitmap API</title>
7 <title>Hardware Locality (hwloc): CPU and node sets of entire topologies</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="header">
4141 <div class="summary">
42 <a href="#define-members">Macros</a> &#124;
43 <a href="#typedef-members">Typedefs</a> &#124;
4442 <a href="#func-members">Functions</a> </div>
4543 <div class="headertitle">
46 <div class="title">The bitmap API</div> </div>
44 <div class="title">CPU and node sets of entire topologies</div> </div>
4745 </div><!--header-->
4846 <div class="contents">
4947 <table class="memberdecls">
50 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
51 Macros</h2></td></tr>
52 <tr class="memitem:ga3f6861045a8029ade373510ffa727d2a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga3f6861045a8029ade373510ffa727d2a">hwloc_bitmap_foreach_begin</a>(id, bitmap)</td></tr>
53 <tr class="separator:ga3f6861045a8029ade373510ffa727d2a"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:gafcf3246db406218d4e155735b3fa6528"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#gafcf3246db406218d4e155735b3fa6528">hwloc_bitmap_foreach_end</a>()</td></tr>
55 <tr class="separator:gafcf3246db406218d4e155735b3fa6528"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 </table><table class="memberdecls">
57 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
58 Typedefs</h2></td></tr>
59 <tr class="memitem:gaa3c2bf4c776d603dcebbb61b0c923d84"><td class="memItemLeft" align="right" valign="top">typedef struct hwloc_bitmap_s *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a></td></tr>
60 <tr class="separator:gaa3c2bf4c776d603dcebbb61b0c923d84"><td class="memSeparator" colspan="2">&#160;</td></tr>
61 <tr class="memitem:gae991a108af01d408be2776c5b2c467b2"><td class="memItemLeft" align="right" valign="top">typedef const struct hwloc_bitmap_s *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a></td></tr>
62 <tr class="separator:gae991a108af01d408be2776c5b2c467b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
63 </table><table class="memberdecls">
6448 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
6549 Functions</h2></td></tr>
66 <tr class="memitem:gadece3d1eb5199fc2fb99bc7dcf1ccc05"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#gadece3d1eb5199fc2fb99bc7dcf1ccc05">hwloc_bitmap_alloc</a> (void)</td></tr>
67 <tr class="separator:gadece3d1eb5199fc2fb99bc7dcf1ccc05"><td class="memSeparator" colspan="2">&#160;</td></tr>
68 <tr class="memitem:ga02853b4a224970587b9d7a0e20d857c0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga02853b4a224970587b9d7a0e20d857c0">hwloc_bitmap_alloc_full</a> (void)</td></tr>
69 <tr class="separator:ga02853b4a224970587b9d7a0e20d857c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
70 <tr class="memitem:ga156130d85b3a0674d6e0e6770fe68fbe"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga156130d85b3a0674d6e0e6770fe68fbe">hwloc_bitmap_free</a> (<a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap)</td></tr>
71 <tr class="separator:ga156130d85b3a0674d6e0e6770fe68fbe"><td class="memSeparator" colspan="2">&#160;</td></tr>
72 <tr class="memitem:gae679434c1a5f41d3560a8a7e2c1b0dee"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#gae679434c1a5f41d3560a8a7e2c1b0dee">hwloc_bitmap_dup</a> (<a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
73 <tr class="separator:gae679434c1a5f41d3560a8a7e2c1b0dee"><td class="memSeparator" colspan="2">&#160;</td></tr>
74 <tr class="memitem:ga72a29824798b48784b8217471ec8f14c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a> (<a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> dst, <a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> src)</td></tr>
75 <tr class="separator:ga72a29824798b48784b8217471ec8f14c"><td class="memSeparator" colspan="2">&#160;</td></tr>
76 <tr class="memitem:ga9511644657030a021dce9941e3cda583"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga9511644657030a021dce9941e3cda583">hwloc_bitmap_snprintf</a> (char *restrict buf, size_t buflen, <a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
77 <tr class="separator:ga9511644657030a021dce9941e3cda583"><td class="memSeparator" colspan="2">&#160;</td></tr>
78 <tr class="memitem:ga0fece972134fdecf2da9bc7a11dd827e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga0fece972134fdecf2da9bc7a11dd827e">hwloc_bitmap_asprintf</a> (char **strp, <a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
79 <tr class="separator:ga0fece972134fdecf2da9bc7a11dd827e"><td class="memSeparator" colspan="2">&#160;</td></tr>
80 <tr class="memitem:ga064a85c643a364b60acbfa0f3663fc18"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga064a85c643a364b60acbfa0f3663fc18">hwloc_bitmap_sscanf</a> (<a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, const char *restrict string)</td></tr>
81 <tr class="separator:ga064a85c643a364b60acbfa0f3663fc18"><td class="memSeparator" colspan="2">&#160;</td></tr>
82 <tr class="memitem:ga3d06e6447edeb61e56a9ad83f31f0a37"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga3d06e6447edeb61e56a9ad83f31f0a37">hwloc_bitmap_list_snprintf</a> (char *restrict buf, size_t buflen, <a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
83 <tr class="separator:ga3d06e6447edeb61e56a9ad83f31f0a37"><td class="memSeparator" colspan="2">&#160;</td></tr>
84 <tr class="memitem:ga39c0f1b02053de66d205c9f8260b3665"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga39c0f1b02053de66d205c9f8260b3665">hwloc_bitmap_list_asprintf</a> (char **strp, <a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
85 <tr class="separator:ga39c0f1b02053de66d205c9f8260b3665"><td class="memSeparator" colspan="2">&#160;</td></tr>
86 <tr class="memitem:gaf9314311d482c621e17c6a53a9fe993e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#gaf9314311d482c621e17c6a53a9fe993e">hwloc_bitmap_list_sscanf</a> (<a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, const char *restrict string)</td></tr>
87 <tr class="separator:gaf9314311d482c621e17c6a53a9fe993e"><td class="memSeparator" colspan="2">&#160;</td></tr>
88 <tr class="memitem:ga5beb68a987fe48e5c5edef06ab260e14"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga5beb68a987fe48e5c5edef06ab260e14">hwloc_bitmap_taskset_snprintf</a> (char *restrict buf, size_t buflen, <a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
89 <tr class="separator:ga5beb68a987fe48e5c5edef06ab260e14"><td class="memSeparator" colspan="2">&#160;</td></tr>
90 <tr class="memitem:ga391312513f17c985d871f18367c59512"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga391312513f17c985d871f18367c59512">hwloc_bitmap_taskset_asprintf</a> (char **strp, <a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
91 <tr class="separator:ga391312513f17c985d871f18367c59512"><td class="memSeparator" colspan="2">&#160;</td></tr>
92 <tr class="memitem:ga4f23db5041240e03e348752f8bd6ec2d"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga4f23db5041240e03e348752f8bd6ec2d">hwloc_bitmap_taskset_sscanf</a> (<a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, const char *restrict string)</td></tr>
93 <tr class="separator:ga4f23db5041240e03e348752f8bd6ec2d"><td class="memSeparator" colspan="2">&#160;</td></tr>
94 <tr class="memitem:gaa97c5217613c8cae9862287170ea2132"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a> (<a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap)</td></tr>
95 <tr class="separator:gaa97c5217613c8cae9862287170ea2132"><td class="memSeparator" colspan="2">&#160;</td></tr>
96 <tr class="memitem:ga07b2de8786b3cdb22f21d9dd42588275"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga07b2de8786b3cdb22f21d9dd42588275">hwloc_bitmap_fill</a> (<a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap)</td></tr>
97 <tr class="separator:ga07b2de8786b3cdb22f21d9dd42588275"><td class="memSeparator" colspan="2">&#160;</td></tr>
98 <tr class="memitem:ga10be0840cdeb7ce26d862819dd303baa"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga10be0840cdeb7ce26d862819dd303baa">hwloc_bitmap_only</a> (<a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, unsigned id)</td></tr>
99 <tr class="separator:ga10be0840cdeb7ce26d862819dd303baa"><td class="memSeparator" colspan="2">&#160;</td></tr>
100 <tr class="memitem:ga06d505f8a1c0a536614f65f503ee6d93"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga06d505f8a1c0a536614f65f503ee6d93">hwloc_bitmap_allbut</a> (<a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, unsigned id)</td></tr>
101 <tr class="separator:ga06d505f8a1c0a536614f65f503ee6d93"><td class="memSeparator" colspan="2">&#160;</td></tr>
102 <tr class="memitem:gad59b0ebeb29c1bfabbb2a379e55c1159"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#gad59b0ebeb29c1bfabbb2a379e55c1159">hwloc_bitmap_from_ulong</a> (<a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, unsigned long mask)</td></tr>
103 <tr class="separator:gad59b0ebeb29c1bfabbb2a379e55c1159"><td class="memSeparator" colspan="2">&#160;</td></tr>
104 <tr class="memitem:ga4947c46d47bcfcd3faf3f59569be3e37"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga4947c46d47bcfcd3faf3f59569be3e37">hwloc_bitmap_from_ith_ulong</a> (<a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, unsigned i, unsigned long mask)</td></tr>
105 <tr class="separator:ga4947c46d47bcfcd3faf3f59569be3e37"><td class="memSeparator" colspan="2">&#160;</td></tr>
106 <tr class="memitem:gabcfef22f6fc4d4b33f068dd91a1c38f5"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#gabcfef22f6fc4d4b33f068dd91a1c38f5">hwloc_bitmap_from_ulongs</a> (<a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, unsigned nr, const unsigned long *masks)</td></tr>
107 <tr class="separator:gabcfef22f6fc4d4b33f068dd91a1c38f5"><td class="memSeparator" colspan="2">&#160;</td></tr>
108 <tr class="memitem:ga062dbff93baeff3b425a7260c5463646"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga062dbff93baeff3b425a7260c5463646">hwloc_bitmap_set</a> (<a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, unsigned id)</td></tr>
109 <tr class="separator:ga062dbff93baeff3b425a7260c5463646"><td class="memSeparator" colspan="2">&#160;</td></tr>
110 <tr class="memitem:ga9c9a8433732fb9f24899e7aa4c014d7e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga9c9a8433732fb9f24899e7aa4c014d7e">hwloc_bitmap_set_range</a> (<a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, unsigned begin, int end)</td></tr>
111 <tr class="separator:ga9c9a8433732fb9f24899e7aa4c014d7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
112 <tr class="memitem:ga3daeed965c35c6d2fd4820a318219985"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga3daeed965c35c6d2fd4820a318219985">hwloc_bitmap_set_ith_ulong</a> (<a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, unsigned i, unsigned long mask)</td></tr>
113 <tr class="separator:ga3daeed965c35c6d2fd4820a318219985"><td class="memSeparator" colspan="2">&#160;</td></tr>
114 <tr class="memitem:gaf20bb350b6844d08931a064a73f86743"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#gaf20bb350b6844d08931a064a73f86743">hwloc_bitmap_clr</a> (<a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, unsigned id)</td></tr>
115 <tr class="separator:gaf20bb350b6844d08931a064a73f86743"><td class="memSeparator" colspan="2">&#160;</td></tr>
116 <tr class="memitem:ga833776709df94d727f8c22304b3388cf"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga833776709df94d727f8c22304b3388cf">hwloc_bitmap_clr_range</a> (<a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, unsigned begin, int end)</td></tr>
117 <tr class="separator:ga833776709df94d727f8c22304b3388cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
118 <tr class="memitem:gaa611a77c092e679246afdf9a60d5db8b"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#gaa611a77c092e679246afdf9a60d5db8b">hwloc_bitmap_singlify</a> (<a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap)</td></tr>
119 <tr class="separator:gaa611a77c092e679246afdf9a60d5db8b"><td class="memSeparator" colspan="2">&#160;</td></tr>
120 <tr class="memitem:gab6a6bae22a33ec6adfc169a953c13e6c"><td class="memItemLeft" align="right" valign="top">unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#gab6a6bae22a33ec6adfc169a953c13e6c">hwloc_bitmap_to_ulong</a> (<a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
121 <tr class="separator:gab6a6bae22a33ec6adfc169a953c13e6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
122 <tr class="memitem:gac92e6404f648d6b99d2c626b05b2ffa4"><td class="memItemLeft" align="right" valign="top">unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#gac92e6404f648d6b99d2c626b05b2ffa4">hwloc_bitmap_to_ith_ulong</a> (<a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap, unsigned i)</td></tr>
123 <tr class="separator:gac92e6404f648d6b99d2c626b05b2ffa4"><td class="memSeparator" colspan="2">&#160;</td></tr>
124 <tr class="memitem:gacd215a2348732de25d94a4ecd76d528c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#gacd215a2348732de25d94a4ecd76d528c">hwloc_bitmap_to_ulongs</a> (<a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap, unsigned nr, unsigned long *masks)</td></tr>
125 <tr class="separator:gacd215a2348732de25d94a4ecd76d528c"><td class="memSeparator" colspan="2">&#160;</td></tr>
126 <tr class="memitem:gac0744734d761d65c977aece565364908"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#gac0744734d761d65c977aece565364908">hwloc_bitmap_nr_ulongs</a> (<a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
127 <tr class="separator:gac0744734d761d65c977aece565364908"><td class="memSeparator" colspan="2">&#160;</td></tr>
128 <tr class="memitem:ga11340dd487f110bb84f0a6e4ae90bd06"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga11340dd487f110bb84f0a6e4ae90bd06">hwloc_bitmap_isset</a> (<a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap, unsigned id)</td></tr>
129 <tr class="separator:ga11340dd487f110bb84f0a6e4ae90bd06"><td class="memSeparator" colspan="2">&#160;</td></tr>
130 <tr class="memitem:ga5b64be28f5a7176ed8ad0d6a90bdf108"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a> (<a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
131 <tr class="separator:ga5b64be28f5a7176ed8ad0d6a90bdf108"><td class="memSeparator" colspan="2">&#160;</td></tr>
132 <tr class="memitem:ga5fdcb8c19c336511c37076d649e74af4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga5fdcb8c19c336511c37076d649e74af4">hwloc_bitmap_isfull</a> (<a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
133 <tr class="separator:ga5fdcb8c19c336511c37076d649e74af4"><td class="memSeparator" colspan="2">&#160;</td></tr>
134 <tr class="memitem:ga3ec1ced43afadf8c0a7197320bc016ed"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga3ec1ced43afadf8c0a7197320bc016ed">hwloc_bitmap_first</a> (<a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
135 <tr class="separator:ga3ec1ced43afadf8c0a7197320bc016ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
136 <tr class="memitem:gaab7240b4b644693b775dad17b44ffd68"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#gaab7240b4b644693b775dad17b44ffd68">hwloc_bitmap_next</a> (<a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap, int prev)</td></tr>
137 <tr class="separator:gaab7240b4b644693b775dad17b44ffd68"><td class="memSeparator" colspan="2">&#160;</td></tr>
138 <tr class="memitem:ga3d9b08b060a59bbab5a4ea6d0a1ed7a6"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga3d9b08b060a59bbab5a4ea6d0a1ed7a6">hwloc_bitmap_last</a> (<a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
139 <tr class="separator:ga3d9b08b060a59bbab5a4ea6d0a1ed7a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
140 <tr class="memitem:ga0200466842c0e1f5da75e84dde460b10"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga0200466842c0e1f5da75e84dde460b10">hwloc_bitmap_weight</a> (<a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
141 <tr class="separator:ga0200466842c0e1f5da75e84dde460b10"><td class="memSeparator" colspan="2">&#160;</td></tr>
142 <tr class="memitem:gae408841487b288e148a478ba0465c99e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#gae408841487b288e148a478ba0465c99e">hwloc_bitmap_first_unset</a> (<a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
143 <tr class="separator:gae408841487b288e148a478ba0465c99e"><td class="memSeparator" colspan="2">&#160;</td></tr>
144 <tr class="memitem:ga9653af34d1460ef106b7df25af4cdca8"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga9653af34d1460ef106b7df25af4cdca8">hwloc_bitmap_next_unset</a> (<a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap, int prev)</td></tr>
145 <tr class="separator:ga9653af34d1460ef106b7df25af4cdca8"><td class="memSeparator" colspan="2">&#160;</td></tr>
146 <tr class="memitem:ga45d49aeb45c7da631b1480a93dc3fc92"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga45d49aeb45c7da631b1480a93dc3fc92">hwloc_bitmap_last_unset</a> (<a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
147 <tr class="separator:ga45d49aeb45c7da631b1480a93dc3fc92"><td class="memSeparator" colspan="2">&#160;</td></tr>
148 <tr class="memitem:ga120b8aefb9ce7ef349929656359b1859"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga120b8aefb9ce7ef349929656359b1859">hwloc_bitmap_or</a> (<a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> res, <a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2)</td></tr>
149 <tr class="separator:ga120b8aefb9ce7ef349929656359b1859"><td class="memSeparator" colspan="2">&#160;</td></tr>
150 <tr class="memitem:ga674533016ffed922a28b4f0b49b82cd4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga674533016ffed922a28b4f0b49b82cd4">hwloc_bitmap_and</a> (<a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> res, <a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2)</td></tr>
151 <tr class="separator:ga674533016ffed922a28b4f0b49b82cd4"><td class="memSeparator" colspan="2">&#160;</td></tr>
152 <tr class="memitem:ga7ca5c72db65406b85aca032c8a990f9e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga7ca5c72db65406b85aca032c8a990f9e">hwloc_bitmap_andnot</a> (<a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> res, <a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2)</td></tr>
153 <tr class="separator:ga7ca5c72db65406b85aca032c8a990f9e"><td class="memSeparator" colspan="2">&#160;</td></tr>
154 <tr class="memitem:ga205508218e09cb9befd0687f16409f09"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga205508218e09cb9befd0687f16409f09">hwloc_bitmap_xor</a> (<a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> res, <a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2)</td></tr>
155 <tr class="separator:ga205508218e09cb9befd0687f16409f09"><td class="memSeparator" colspan="2">&#160;</td></tr>
156 <tr class="memitem:ga84cfdb4f8ab8c1f7e097728e613a2a3f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga84cfdb4f8ab8c1f7e097728e613a2a3f">hwloc_bitmap_not</a> (<a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> res, <a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
157 <tr class="separator:ga84cfdb4f8ab8c1f7e097728e613a2a3f"><td class="memSeparator" colspan="2">&#160;</td></tr>
158 <tr class="memitem:gaefa070f9232857ba5a57297ea9a08ea2"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#gaefa070f9232857ba5a57297ea9a08ea2">hwloc_bitmap_intersects</a> (<a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2)</td></tr>
159 <tr class="separator:gaefa070f9232857ba5a57297ea9a08ea2"><td class="memSeparator" colspan="2">&#160;</td></tr>
160 <tr class="memitem:ga0526e03db81956fb02acc8260b66d6a4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a> (<a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> sub_bitmap, <a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> super_bitmap)</td></tr>
161 <tr class="separator:ga0526e03db81956fb02acc8260b66d6a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
162 <tr class="memitem:ga32376b1405e57472b73c3aa53bb39663"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga32376b1405e57472b73c3aa53bb39663">hwloc_bitmap_isequal</a> (<a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2)</td></tr>
163 <tr class="separator:ga32376b1405e57472b73c3aa53bb39663"><td class="memSeparator" colspan="2">&#160;</td></tr>
164 <tr class="memitem:gaa39cda1510ab721b5c012c76ead72365"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#gaa39cda1510ab721b5c012c76ead72365">hwloc_bitmap_compare_first</a> (<a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2)</td></tr>
165 <tr class="separator:gaa39cda1510ab721b5c012c76ead72365"><td class="memSeparator" colspan="2">&#160;</td></tr>
166 <tr class="memitem:ga14cdbc0ef0a705e84999bd48a2e649f3"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga14cdbc0ef0a705e84999bd48a2e649f3">hwloc_bitmap_compare</a> (<a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2)</td></tr>
167 <tr class="separator:ga14cdbc0ef0a705e84999bd48a2e649f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
50 <tr class="memitem:gaee30e03391c1ed7dfd617fb5c7bbb033"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#gaee30e03391c1ed7dfd617fb5c7bbb033">hwloc_topology_get_complete_cpuset</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
51 <tr class="separator:gaee30e03391c1ed7dfd617fb5c7bbb033"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:ga79212faa07b70dd26588941b17d9fa82"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga79212faa07b70dd26588941b17d9fa82">hwloc_topology_get_topology_cpuset</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
53 <tr class="separator:ga79212faa07b70dd26588941b17d9fa82"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:ga517d5d68ec9f24583d8933aab713be8e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga517d5d68ec9f24583d8933aab713be8e">hwloc_topology_get_allowed_cpuset</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
55 <tr class="separator:ga517d5d68ec9f24583d8933aab713be8e"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:ga773fd98949461ef4c1e3170bb0c0418f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00192.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga773fd98949461ef4c1e3170bb0c0418f">hwloc_topology_get_complete_nodeset</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
57 <tr class="separator:ga773fd98949461ef4c1e3170bb0c0418f"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:ga3fd37303e99ace8b0d0ea03f95f8c514"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00192.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga3fd37303e99ace8b0d0ea03f95f8c514">hwloc_topology_get_topology_nodeset</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
59 <tr class="separator:ga3fd37303e99ace8b0d0ea03f95f8c514"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:ga21a4d7237a11e76b912ed4524ab78cbd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00192.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00211.html#ga21a4d7237a11e76b912ed4524ab78cbd">hwloc_topology_get_allowed_nodeset</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
61 <tr class="separator:ga21a4d7237a11e76b912ed4524ab78cbd"><td class="memSeparator" colspan="2">&#160;</td></tr>
16862 </table>
16963 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
170 <p>The <a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84" title="Set of bits represented as an opaque pointer to an internal bitmap.">hwloc_bitmap_t</a> type represents a set of integers (positive or null). A bitmap may be of infinite size (all bits are set after some point). A bitmap may even be full if all bits are set.</p>
171 <p>Bitmaps are used by hwloc for sets of OS processors (which may actually be hardware threads) as by <a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801" title="A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.">hwloc_cpuset_t</a> (a typedef for <a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84" title="Set of bits represented as an opaque pointer to an internal bitmap.">hwloc_bitmap_t</a>), or sets of NUMA memory nodes as <a class="el" href="a00189.html#ga37e35730fa7e775b5bb0afe893d6d508" title="A node set is a bitmap whose bits are set according to NUMA memory node physical OS indexes.">hwloc_nodeset_t</a> (also a typedef for <a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84" title="Set of bits represented as an opaque pointer to an internal bitmap.">hwloc_bitmap_t</a>). Those are used for cpuset and nodeset fields in the <a class="el" href="a00244.html" title="Structure of a topology object.">hwloc_obj</a> structure, see <a class="el" href="a00189.html">Object Sets (hwloc_cpuset_t and hwloc_nodeset_t)</a>.</p>
172 <p><em>Both CPU and node sets are always indexed by OS physical number.</em> However users should usually not build CPU and node sets manually (e.g. with <a class="el" href="a00211.html#ga062dbff93baeff3b425a7260c5463646" title="Add index id in bitmap bitmap.">hwloc_bitmap_set()</a>). One should rather use existing object sets and combine them with <a class="el" href="a00211.html#ga120b8aefb9ce7ef349929656359b1859" title="Or bitmaps bitmap1 and bitmap2 and store the result in bitmap res.">hwloc_bitmap_or()</a>, etc. For instance, binding the current thread on a pair of cores may be performed with: </p><div class="fragment"><div class="line"><a class="code" href="a00244.html">hwloc_obj_t</a> core1 = ... , core2 = ... ;</div>
173 <div class="line"><a class="code" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set = <a class="code" href="a00211.html#gadece3d1eb5199fc2fb99bc7dcf1ccc05">hwloc_bitmap_alloc</a>();</div>
174 <div class="line"><a class="code" href="a00211.html#ga120b8aefb9ce7ef349929656359b1859">hwloc_bitmap_or</a>(set, core1-&gt;<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, core2-&gt;cpuset);</div>
175 <div class="line"><a class="code" href="a00196.html#ga80bc07473a8edf840cae17bd7ec21d48">hwloc_set_cpubind</a>(topology, set, <a class="code" href="a00196.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421">HWLOC_CPUBIND_THREAD</a>);</div>
176 <div class="line"><a class="code" href="a00211.html#ga156130d85b3a0674d6e0e6770fe68fbe">hwloc_bitmap_free</a>(set);</div>
177 <div class="ttc" id="aa00196_html_ga80bc07473a8edf840cae17bd7ec21d48"><div class="ttname"><a href="a00196.html#ga80bc07473a8edf840cae17bd7ec21d48">hwloc_set_cpubind</a></div><div class="ttdeci">int hwloc_set_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t set, int flags)</div><div class="ttdoc">Bind current process or thread on cpus given in physical bitmap set.</div></div>
178 <div class="ttc" id="aa00196_html_gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421"><div class="ttname"><a href="a00196.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421">HWLOC_CPUBIND_THREAD</a></div><div class="ttdeci">@ HWLOC_CPUBIND_THREAD</div><div class="ttdoc">Bind current thread of current process.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1161</div></div>
179 <div class="ttc" id="aa00211_html_ga120b8aefb9ce7ef349929656359b1859"><div class="ttname"><a href="a00211.html#ga120b8aefb9ce7ef349929656359b1859">hwloc_bitmap_or</a></div><div class="ttdeci">int hwloc_bitmap_or(hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">Or bitmaps bitmap1 and bitmap2 and store the result in bitmap res.</div></div>
180 <div class="ttc" id="aa00211_html_ga156130d85b3a0674d6e0e6770fe68fbe"><div class="ttname"><a href="a00211.html#ga156130d85b3a0674d6e0e6770fe68fbe">hwloc_bitmap_free</a></div><div class="ttdeci">void hwloc_bitmap_free(hwloc_bitmap_t bitmap)</div><div class="ttdoc">Free bitmap bitmap.</div></div>
181 <div class="ttc" id="aa00211_html_gaa3c2bf4c776d603dcebbb61b0c923d84"><div class="ttname"><a href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a></div><div class="ttdeci">struct hwloc_bitmap_s * hwloc_bitmap_t</div><div class="ttdoc">Set of bits represented as an opaque pointer to an internal bitmap.</div><div class="ttdef"><b>Definition:</b> bitmap.h:68</div></div>
182 <div class="ttc" id="aa00211_html_gadece3d1eb5199fc2fb99bc7dcf1ccc05"><div class="ttname"><a href="a00211.html#gadece3d1eb5199fc2fb99bc7dcf1ccc05">hwloc_bitmap_alloc</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_bitmap_alloc(void)</div><div class="ttdoc">Allocate a new empty bitmap.</div></div>
183 <div class="ttc" id="aa00244_html"><div class="ttname"><a href="a00244.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:395</div></div>
184 <div class="ttc" id="aa00244_html_a67925e0f2c47f50408fbdb9bddd0790f"><div class="ttname"><a href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">hwloc_obj::cpuset</a></div><div class="ttdeci">hwloc_cpuset_t cpuset</div><div class="ttdoc">CPUs covered by this object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:511</div></div>
185 </div><!-- fragment --><dl class="section note"><dt>Note</dt><dd>Most functions below return an int that may be negative in case of error. The usual error case would be an internal failure to realloc/extend the storage of the bitmap (<code>errno</code> would be set to <code>ENOMEM</code>).</dd>
186 <dd>
187 Several examples of using the bitmap API are available under the doc/examples/ directory in the source tree. Regression tests such as tests/hwloc/hwloc_bitmap*.c also make intensive use of this API. </dd></dl>
188 <h2 class="groupheader">Macro Definition Documentation</h2>
189 <a id="ga3f6861045a8029ade373510ffa727d2a"></a>
190 <h2 class="memtitle"><span class="permalink"><a href="#ga3f6861045a8029ade373510ffa727d2a">&#9670;&nbsp;</a></span>hwloc_bitmap_foreach_begin</h2>
191
192 <div class="memitem">
193 <div class="memproto">
194 <table class="memname">
195 <tr>
196 <td class="memname">#define hwloc_bitmap_foreach_begin</td>
197 <td>(</td>
198 <td class="paramtype">&#160;</td>
199 <td class="paramname">id, </td>
200 </tr>
201 <tr>
202 <td class="paramkey"></td>
203 <td></td>
204 <td class="paramtype">&#160;</td>
205 <td class="paramname">bitmap&#160;</td>
206 </tr>
207 <tr>
208 <td></td>
209 <td>)</td>
210 <td></td><td></td>
211 </tr>
212 </table>
213 </div><div class="memdoc">
214
215 <p>Loop macro iterating on bitmap <code>bitmap</code>. </p>
216 <p>The loop must start with <a class="el" href="a00211.html#ga3f6861045a8029ade373510ffa727d2a" title="Loop macro iterating on bitmap bitmap.">hwloc_bitmap_foreach_begin()</a> and end with <a class="el" href="a00211.html#gafcf3246db406218d4e155735b3fa6528" title="End of loop macro iterating on a bitmap.">hwloc_bitmap_foreach_end()</a> followed by a terminating ';'.</p>
217 <p><code>index</code> is the loop variable; it should be an unsigned int. The first iteration will set <code>index</code> to the lowest index in the bitmap. Successive iterations will iterate through, in order, all remaining indexes set in the bitmap. To be specific: each iteration will return a value for <code>index</code> such that hwloc_bitmap_isset(bitmap, index) is true.</p>
218 <p>The assert prevents the loop from being infinite if the bitmap is infinitely set. </p>
219
220 </div>
221 </div>
222 <a id="gafcf3246db406218d4e155735b3fa6528"></a>
223 <h2 class="memtitle"><span class="permalink"><a href="#gafcf3246db406218d4e155735b3fa6528">&#9670;&nbsp;</a></span>hwloc_bitmap_foreach_end</h2>
224
225 <div class="memitem">
226 <div class="memproto">
227 <table class="memname">
228 <tr>
229 <td class="memname">#define hwloc_bitmap_foreach_end</td>
230 <td>(</td>
231 <td class="paramname"></td><td>)</td>
232 <td></td>
233 </tr>
234 </table>
235 </div><div class="memdoc">
236
237 <p>End of loop macro iterating on a bitmap. </p>
238 <p>Needs a terminating ';'.</p>
239 <dl class="section see"><dt>See also</dt><dd><a class="el" href="a00211.html#ga3f6861045a8029ade373510ffa727d2a" title="Loop macro iterating on bitmap bitmap.">hwloc_bitmap_foreach_begin()</a> </dd></dl>
240
241 </div>
242 </div>
243 <h2 class="groupheader">Typedef Documentation</h2>
244 <a id="gaa3c2bf4c776d603dcebbb61b0c923d84"></a>
245 <h2 class="memtitle"><span class="permalink"><a href="#gaa3c2bf4c776d603dcebbb61b0c923d84">&#9670;&nbsp;</a></span>hwloc_bitmap_t</h2>
246
247 <div class="memitem">
248 <div class="memproto">
249 <table class="memname">
250 <tr>
251 <td class="memname">typedef struct hwloc_bitmap_s* <a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a></td>
252 </tr>
253 </table>
254 </div><div class="memdoc">
255
256 <p>Set of bits represented as an opaque pointer to an internal bitmap. </p>
257
258 </div>
259 </div>
260 <a id="gae991a108af01d408be2776c5b2c467b2"></a>
261 <h2 class="memtitle"><span class="permalink"><a href="#gae991a108af01d408be2776c5b2c467b2">&#9670;&nbsp;</a></span>hwloc_const_bitmap_t</h2>
262
263 <div class="memitem">
264 <div class="memproto">
265 <table class="memname">
266 <tr>
267 <td class="memname">typedef const struct hwloc_bitmap_s* <a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a></td>
268 </tr>
269 </table>
270 </div><div class="memdoc">
271
272 <p>a non-modifiable <a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84" title="Set of bits represented as an opaque pointer to an internal bitmap.">hwloc_bitmap_t</a> </p>
273
274 </div>
275 </div>
27664 <h2 class="groupheader">Function Documentation</h2>
277 <a id="ga06d505f8a1c0a536614f65f503ee6d93"></a>
278 <h2 class="memtitle"><span class="permalink"><a href="#ga06d505f8a1c0a536614f65f503ee6d93">&#9670;&nbsp;</a></span>hwloc_bitmap_allbut()</h2>
279
280 <div class="memitem">
281 <div class="memproto">
282 <table class="memname">
283 <tr>
284 <td class="memname">int hwloc_bitmap_allbut </td>
285 <td>(</td>
286 <td class="paramtype"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
287 <td class="paramname"><em>bitmap</em>, </td>
288 </tr>
289 <tr>
290 <td class="paramkey"></td>
291 <td></td>
292 <td class="paramtype">unsigned&#160;</td>
293 <td class="paramname"><em>id</em>&#160;</td>
294 </tr>
295 <tr>
296 <td></td>
297 <td>)</td>
298 <td></td><td></td>
299 </tr>
300 </table>
301 </div><div class="memdoc">
302
303 <p>Fill the bitmap <code>and</code> clear the index <code>id</code>. </p>
304
305 </div>
306 </div>
307 <a id="gadece3d1eb5199fc2fb99bc7dcf1ccc05"></a>
308 <h2 class="memtitle"><span class="permalink"><a href="#gadece3d1eb5199fc2fb99bc7dcf1ccc05">&#9670;&nbsp;</a></span>hwloc_bitmap_alloc()</h2>
309
310 <div class="memitem">
311 <div class="memproto">
312 <table class="memname">
313 <tr>
314 <td class="memname"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> hwloc_bitmap_alloc </td>
315 <td>(</td>
316 <td class="paramtype">void&#160;</td>
317 <td class="paramname"></td><td>)</td>
318 <td></td>
319 </tr>
320 </table>
321 </div><div class="memdoc">
322
323 <p>Allocate a new empty bitmap. </p>
324 <dl class="section return"><dt>Returns</dt><dd>A valid bitmap or <code>NULL</code>.</dd></dl>
325 <p>The bitmap should be freed by a corresponding call to <a class="el" href="a00211.html#ga156130d85b3a0674d6e0e6770fe68fbe" title="Free bitmap bitmap.">hwloc_bitmap_free()</a>. </p>
326
327 </div>
328 </div>
329 <a id="ga02853b4a224970587b9d7a0e20d857c0"></a>
330 <h2 class="memtitle"><span class="permalink"><a href="#ga02853b4a224970587b9d7a0e20d857c0">&#9670;&nbsp;</a></span>hwloc_bitmap_alloc_full()</h2>
331
332 <div class="memitem">
333 <div class="memproto">
334 <table class="memname">
335 <tr>
336 <td class="memname"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> hwloc_bitmap_alloc_full </td>
337 <td>(</td>
338 <td class="paramtype">void&#160;</td>
339 <td class="paramname"></td><td>)</td>
340 <td></td>
341 </tr>
342 </table>
343 </div><div class="memdoc">
344
345 <p>Allocate a new full bitmap. </p>
346
347 </div>
348 </div>
349 <a id="ga674533016ffed922a28b4f0b49b82cd4"></a>
350 <h2 class="memtitle"><span class="permalink"><a href="#ga674533016ffed922a28b4f0b49b82cd4">&#9670;&nbsp;</a></span>hwloc_bitmap_and()</h2>
351
352 <div class="memitem">
353 <div class="memproto">
354 <table class="memname">
355 <tr>
356 <td class="memname">int hwloc_bitmap_and </td>
357 <td>(</td>
358 <td class="paramtype"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
359 <td class="paramname"><em>res</em>, </td>
360 </tr>
361 <tr>
362 <td class="paramkey"></td>
363 <td></td>
364 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
365 <td class="paramname"><em>bitmap1</em>, </td>
366 </tr>
367 <tr>
368 <td class="paramkey"></td>
369 <td></td>
370 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
371 <td class="paramname"><em>bitmap2</em>&#160;</td>
372 </tr>
373 <tr>
374 <td></td>
375 <td>)</td>
376 <td></td><td></td>
377 </tr>
378 </table>
379 </div><div class="memdoc">
380
381 <p>And bitmaps <code>bitmap1</code> and <code>bitmap2</code> and store the result in bitmap <code>res</code>. </p>
382 <p><code>res</code> can be the same as <code>bitmap1</code> or <code>bitmap2</code> </p>
383
384 </div>
385 </div>
386 <a id="ga7ca5c72db65406b85aca032c8a990f9e"></a>
387 <h2 class="memtitle"><span class="permalink"><a href="#ga7ca5c72db65406b85aca032c8a990f9e">&#9670;&nbsp;</a></span>hwloc_bitmap_andnot()</h2>
388
389 <div class="memitem">
390 <div class="memproto">
391 <table class="memname">
392 <tr>
393 <td class="memname">int hwloc_bitmap_andnot </td>
394 <td>(</td>
395 <td class="paramtype"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
396 <td class="paramname"><em>res</em>, </td>
397 </tr>
398 <tr>
399 <td class="paramkey"></td>
400 <td></td>
401 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
402 <td class="paramname"><em>bitmap1</em>, </td>
403 </tr>
404 <tr>
405 <td class="paramkey"></td>
406 <td></td>
407 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
408 <td class="paramname"><em>bitmap2</em>&#160;</td>
409 </tr>
410 <tr>
411 <td></td>
412 <td>)</td>
413 <td></td><td></td>
414 </tr>
415 </table>
416 </div><div class="memdoc">
417
418 <p>And bitmap <code>bitmap1</code> and the negation of <code>bitmap2</code> and store the result in bitmap <code>res</code>. </p>
419 <p><code>res</code> can be the same as <code>bitmap1</code> or <code>bitmap2</code> </p>
420
421 </div>
422 </div>
423 <a id="ga0fece972134fdecf2da9bc7a11dd827e"></a>
424 <h2 class="memtitle"><span class="permalink"><a href="#ga0fece972134fdecf2da9bc7a11dd827e">&#9670;&nbsp;</a></span>hwloc_bitmap_asprintf()</h2>
425
426 <div class="memitem">
427 <div class="memproto">
428 <table class="memname">
429 <tr>
430 <td class="memname">int hwloc_bitmap_asprintf </td>
431 <td>(</td>
432 <td class="paramtype">char **&#160;</td>
433 <td class="paramname"><em>strp</em>, </td>
434 </tr>
435 <tr>
436 <td class="paramkey"></td>
437 <td></td>
438 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
439 <td class="paramname"><em>bitmap</em>&#160;</td>
440 </tr>
441 <tr>
442 <td></td>
443 <td>)</td>
444 <td></td><td></td>
445 </tr>
446 </table>
447 </div><div class="memdoc">
448
449 <p>Stringify a bitmap into a newly allocated string. </p>
450 <dl class="section return"><dt>Returns</dt><dd>-1 on error. </dd></dl>
451
452 </div>
453 </div>
454 <a id="gaf20bb350b6844d08931a064a73f86743"></a>
455 <h2 class="memtitle"><span class="permalink"><a href="#gaf20bb350b6844d08931a064a73f86743">&#9670;&nbsp;</a></span>hwloc_bitmap_clr()</h2>
456
457 <div class="memitem">
458 <div class="memproto">
459 <table class="memname">
460 <tr>
461 <td class="memname">int hwloc_bitmap_clr </td>
462 <td>(</td>
463 <td class="paramtype"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
464 <td class="paramname"><em>bitmap</em>, </td>
465 </tr>
466 <tr>
467 <td class="paramkey"></td>
468 <td></td>
469 <td class="paramtype">unsigned&#160;</td>
470 <td class="paramname"><em>id</em>&#160;</td>
471 </tr>
472 <tr>
473 <td></td>
474 <td>)</td>
475 <td></td><td></td>
476 </tr>
477 </table>
478 </div><div class="memdoc">
479
480 <p>Remove index <code>id</code> from bitmap <code>bitmap</code>. </p>
481
482 </div>
483 </div>
484 <a id="ga833776709df94d727f8c22304b3388cf"></a>
485 <h2 class="memtitle"><span class="permalink"><a href="#ga833776709df94d727f8c22304b3388cf">&#9670;&nbsp;</a></span>hwloc_bitmap_clr_range()</h2>
486
487 <div class="memitem">
488 <div class="memproto">
489 <table class="memname">
490 <tr>
491 <td class="memname">int hwloc_bitmap_clr_range </td>
492 <td>(</td>
493 <td class="paramtype"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
494 <td class="paramname"><em>bitmap</em>, </td>
495 </tr>
496 <tr>
497 <td class="paramkey"></td>
498 <td></td>
499 <td class="paramtype">unsigned&#160;</td>
500 <td class="paramname"><em>begin</em>, </td>
501 </tr>
502 <tr>
503 <td class="paramkey"></td>
504 <td></td>
505 <td class="paramtype">int&#160;</td>
506 <td class="paramname"><em>end</em>&#160;</td>
507 </tr>
508 <tr>
509 <td></td>
510 <td>)</td>
511 <td></td><td></td>
512 </tr>
513 </table>
514 </div><div class="memdoc">
515
516 <p>Remove indexes from <code>begin</code> to <code>end</code> in bitmap <code>bitmap</code>. </p>
517 <p>If <code>end</code> is <code>-1</code>, the range is infinite. </p>
518
519 </div>
520 </div>
521 <a id="ga14cdbc0ef0a705e84999bd48a2e649f3"></a>
522 <h2 class="memtitle"><span class="permalink"><a href="#ga14cdbc0ef0a705e84999bd48a2e649f3">&#9670;&nbsp;</a></span>hwloc_bitmap_compare()</h2>
523
524 <div class="memitem">
525 <div class="memproto">
526 <table class="memname">
527 <tr>
528 <td class="memname">int hwloc_bitmap_compare </td>
529 <td>(</td>
530 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
531 <td class="paramname"><em>bitmap1</em>, </td>
532 </tr>
533 <tr>
534 <td class="paramkey"></td>
535 <td></td>
536 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
537 <td class="paramname"><em>bitmap2</em>&#160;</td>
538 </tr>
539 <tr>
540 <td></td>
541 <td>)</td>
542 <td></td><td></td>
543 </tr>
544 </table>
545 </div><div class="memdoc">
546
547 <p>Compare bitmaps <code>bitmap1</code> and <code>bitmap2</code> in lexicographic order. </p>
548 <p>Lexicographic comparison of bitmaps, starting for their highest indexes. Compare last indexes first, then second, etc. The empty bitmap is considered lower than anything.</p>
549 <dl class="section return"><dt>Returns</dt><dd>-1 if <code>bitmap1</code> is considered smaller than <code>bitmap2</code>. </dd>
550 <dd>
551 1 if <code>bitmap1</code> is considered larger than <code>bitmap2</code>. </dd>
552 <dd>
553 0 if bitmaps are equal (contrary to <a class="el" href="a00211.html#gaa39cda1510ab721b5c012c76ead72365" title="Compare bitmaps bitmap1 and bitmap2 using their lowest index.">hwloc_bitmap_compare_first()</a>).</dd></dl>
554 <p>For instance comparing binary bitmaps 0011 and 0110 returns -1 (hence 0011 is considered smaller than 0110). Comparing 00101 and 01010 returns -1 too.</p>
555 <dl class="section note"><dt>Note</dt><dd>This is different from the non-existing hwloc_bitmap_compare_last() which would only compare the highest index of each bitmap. </dd></dl>
556
557 </div>
558 </div>
559 <a id="gaa39cda1510ab721b5c012c76ead72365"></a>
560 <h2 class="memtitle"><span class="permalink"><a href="#gaa39cda1510ab721b5c012c76ead72365">&#9670;&nbsp;</a></span>hwloc_bitmap_compare_first()</h2>
561
562 <div class="memitem">
563 <div class="memproto">
564 <table class="memname">
565 <tr>
566 <td class="memname">int hwloc_bitmap_compare_first </td>
567 <td>(</td>
568 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
569 <td class="paramname"><em>bitmap1</em>, </td>
570 </tr>
571 <tr>
572 <td class="paramkey"></td>
573 <td></td>
574 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
575 <td class="paramname"><em>bitmap2</em>&#160;</td>
576 </tr>
577 <tr>
578 <td></td>
579 <td>)</td>
580 <td></td><td></td>
581 </tr>
582 </table>
583 </div><div class="memdoc">
584
585 <p>Compare bitmaps <code>bitmap1</code> and <code>bitmap2</code> using their lowest index. </p>
586 <p>A bitmap is considered smaller if its least significant bit is smaller. The empty bitmap is considered higher than anything (because its least significant bit does not exist).</p>
587 <dl class="section return"><dt>Returns</dt><dd>-1 if <code>bitmap1</code> is considered smaller than <code>bitmap2</code>. </dd>
588 <dd>
589 1 if <code>bitmap1</code> is considered larger than <code>bitmap2</code>.</dd></dl>
590 <p>For instance comparing binary bitmaps 0011 and 0110 returns -1 (hence 0011 is considered smaller than 0110) because least significant bit of 0011 (0001) is smaller than least significant bit of 0110 (0010). Comparing 01001 and 00110 would also return -1 for the same reason.</p>
591 <dl class="section return"><dt>Returns</dt><dd>0 if bitmaps are considered equal, even if they are not strictly equal. They just need to have the same least significant bit. For instance, comparing binary bitmaps 0010 and 0110 returns 0 because they have the same least significant bit. </dd></dl>
592
593 </div>
594 </div>
595 <a id="ga72a29824798b48784b8217471ec8f14c"></a>
596 <h2 class="memtitle"><span class="permalink"><a href="#ga72a29824798b48784b8217471ec8f14c">&#9670;&nbsp;</a></span>hwloc_bitmap_copy()</h2>
597
598 <div class="memitem">
599 <div class="memproto">
600 <table class="memname">
601 <tr>
602 <td class="memname">int hwloc_bitmap_copy </td>
603 <td>(</td>
604 <td class="paramtype"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
605 <td class="paramname"><em>dst</em>, </td>
606 </tr>
607 <tr>
608 <td class="paramkey"></td>
609 <td></td>
610 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
611 <td class="paramname"><em>src</em>&#160;</td>
612 </tr>
613 <tr>
614 <td></td>
615 <td>)</td>
616 <td></td><td></td>
617 </tr>
618 </table>
619 </div><div class="memdoc">
620
621 <p>Copy the contents of bitmap <code>src</code> into the already allocated bitmap <code>dst</code>. </p>
622
623 </div>
624 </div>
625 <a id="gae679434c1a5f41d3560a8a7e2c1b0dee"></a>
626 <h2 class="memtitle"><span class="permalink"><a href="#gae679434c1a5f41d3560a8a7e2c1b0dee">&#9670;&nbsp;</a></span>hwloc_bitmap_dup()</h2>
627
628 <div class="memitem">
629 <div class="memproto">
630 <table class="memname">
631 <tr>
632 <td class="memname"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> hwloc_bitmap_dup </td>
633 <td>(</td>
634 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
635 <td class="paramname"><em>bitmap</em></td><td>)</td>
636 <td></td>
637 </tr>
638 </table>
639 </div><div class="memdoc">
640
641 <p>Duplicate bitmap <code>bitmap</code> by allocating a new bitmap and copying <code>bitmap</code> contents. </p>
642 <p>If <code>bitmap</code> is <code>NULL</code>, <code>NULL</code> is returned. </p>
643
644 </div>
645 </div>
646 <a id="ga07b2de8786b3cdb22f21d9dd42588275"></a>
647 <h2 class="memtitle"><span class="permalink"><a href="#ga07b2de8786b3cdb22f21d9dd42588275">&#9670;&nbsp;</a></span>hwloc_bitmap_fill()</h2>
648
649 <div class="memitem">
650 <div class="memproto">
651 <table class="memname">
652 <tr>
653 <td class="memname">void hwloc_bitmap_fill </td>
654 <td>(</td>
655 <td class="paramtype"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
656 <td class="paramname"><em>bitmap</em></td><td>)</td>
657 <td></td>
658 </tr>
659 </table>
660 </div><div class="memdoc">
661
662 <p>Fill bitmap <code>bitmap</code> with all possible indexes (even if those objects don't exist or are otherwise unavailable) </p>
663
664 </div>
665 </div>
666 <a id="ga3ec1ced43afadf8c0a7197320bc016ed"></a>
667 <h2 class="memtitle"><span class="permalink"><a href="#ga3ec1ced43afadf8c0a7197320bc016ed">&#9670;&nbsp;</a></span>hwloc_bitmap_first()</h2>
668
669 <div class="memitem">
670 <div class="memproto">
671 <table class="memname">
672 <tr>
673 <td class="memname">int hwloc_bitmap_first </td>
674 <td>(</td>
675 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
676 <td class="paramname"><em>bitmap</em></td><td>)</td>
677 <td></td>
678 </tr>
679 </table>
680 </div><div class="memdoc">
681
682 <p>Compute the first index (least significant bit) in bitmap <code>bitmap</code>. </p>
683 <dl class="section return"><dt>Returns</dt><dd>-1 if no index is set in <code>bitmap</code>. </dd></dl>
684
685 </div>
686 </div>
687 <a id="gae408841487b288e148a478ba0465c99e"></a>
688 <h2 class="memtitle"><span class="permalink"><a href="#gae408841487b288e148a478ba0465c99e">&#9670;&nbsp;</a></span>hwloc_bitmap_first_unset()</h2>
689
690 <div class="memitem">
691 <div class="memproto">
692 <table class="memname">
693 <tr>
694 <td class="memname">int hwloc_bitmap_first_unset </td>
695 <td>(</td>
696 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
697 <td class="paramname"><em>bitmap</em></td><td>)</td>
698 <td></td>
699 </tr>
700 </table>
701 </div><div class="memdoc">
702
703 <p>Compute the first unset index (least significant bit) in bitmap <code>bitmap</code>. </p>
704 <dl class="section return"><dt>Returns</dt><dd>-1 if no index is unset in <code>bitmap</code>. </dd></dl>
705
706 </div>
707 </div>
708 <a id="ga156130d85b3a0674d6e0e6770fe68fbe"></a>
709 <h2 class="memtitle"><span class="permalink"><a href="#ga156130d85b3a0674d6e0e6770fe68fbe">&#9670;&nbsp;</a></span>hwloc_bitmap_free()</h2>
710
711 <div class="memitem">
712 <div class="memproto">
713 <table class="memname">
714 <tr>
715 <td class="memname">void hwloc_bitmap_free </td>
716 <td>(</td>
717 <td class="paramtype"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
718 <td class="paramname"><em>bitmap</em></td><td>)</td>
719 <td></td>
720 </tr>
721 </table>
722 </div><div class="memdoc">
723
724 <p>Free bitmap <code>bitmap</code>. </p>
725 <p>If <code>bitmap</code> is <code>NULL</code>, no operation is performed. </p>
726
727 </div>
728 </div>
729 <a id="ga4947c46d47bcfcd3faf3f59569be3e37"></a>
730 <h2 class="memtitle"><span class="permalink"><a href="#ga4947c46d47bcfcd3faf3f59569be3e37">&#9670;&nbsp;</a></span>hwloc_bitmap_from_ith_ulong()</h2>
731
732 <div class="memitem">
733 <div class="memproto">
734 <table class="memname">
735 <tr>
736 <td class="memname">int hwloc_bitmap_from_ith_ulong </td>
737 <td>(</td>
738 <td class="paramtype"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
739 <td class="paramname"><em>bitmap</em>, </td>
740 </tr>
741 <tr>
742 <td class="paramkey"></td>
743 <td></td>
744 <td class="paramtype">unsigned&#160;</td>
745 <td class="paramname"><em>i</em>, </td>
746 </tr>
747 <tr>
748 <td class="paramkey"></td>
749 <td></td>
750 <td class="paramtype">unsigned long&#160;</td>
751 <td class="paramname"><em>mask</em>&#160;</td>
752 </tr>
753 <tr>
754 <td></td>
755 <td>)</td>
756 <td></td><td></td>
757 </tr>
758 </table>
759 </div><div class="memdoc">
760
761 <p>Setup bitmap <code>bitmap</code> from unsigned long <code>mask</code> used as <code>i</code> -th subset. </p>
762
763 </div>
764 </div>
765 <a id="gad59b0ebeb29c1bfabbb2a379e55c1159"></a>
766 <h2 class="memtitle"><span class="permalink"><a href="#gad59b0ebeb29c1bfabbb2a379e55c1159">&#9670;&nbsp;</a></span>hwloc_bitmap_from_ulong()</h2>
767
768 <div class="memitem">
769 <div class="memproto">
770 <table class="memname">
771 <tr>
772 <td class="memname">int hwloc_bitmap_from_ulong </td>
773 <td>(</td>
774 <td class="paramtype"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
775 <td class="paramname"><em>bitmap</em>, </td>
776 </tr>
777 <tr>
778 <td class="paramkey"></td>
779 <td></td>
780 <td class="paramtype">unsigned long&#160;</td>
781 <td class="paramname"><em>mask</em>&#160;</td>
782 </tr>
783 <tr>
784 <td></td>
785 <td>)</td>
786 <td></td><td></td>
787 </tr>
788 </table>
789 </div><div class="memdoc">
790
791 <p>Setup bitmap <code>bitmap</code> from unsigned long <code>mask</code>. </p>
792
793 </div>
794 </div>
795 <a id="gabcfef22f6fc4d4b33f068dd91a1c38f5"></a>
796 <h2 class="memtitle"><span class="permalink"><a href="#gabcfef22f6fc4d4b33f068dd91a1c38f5">&#9670;&nbsp;</a></span>hwloc_bitmap_from_ulongs()</h2>
797
798 <div class="memitem">
799 <div class="memproto">
800 <table class="memname">
801 <tr>
802 <td class="memname">int hwloc_bitmap_from_ulongs </td>
803 <td>(</td>
804 <td class="paramtype"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
805 <td class="paramname"><em>bitmap</em>, </td>
806 </tr>
807 <tr>
808 <td class="paramkey"></td>
809 <td></td>
810 <td class="paramtype">unsigned&#160;</td>
811 <td class="paramname"><em>nr</em>, </td>
812 </tr>
813 <tr>
814 <td class="paramkey"></td>
815 <td></td>
816 <td class="paramtype">const unsigned long *&#160;</td>
817 <td class="paramname"><em>masks</em>&#160;</td>
818 </tr>
819 <tr>
820 <td></td>
821 <td>)</td>
822 <td></td><td></td>
823 </tr>
824 </table>
825 </div><div class="memdoc">
826
827 <p>Setup bitmap <code>bitmap</code> from unsigned longs <code>masks</code> used as first <code>nr</code> subsets. </p>
828
829 </div>
830 </div>
831 <a id="gaefa070f9232857ba5a57297ea9a08ea2"></a>
832 <h2 class="memtitle"><span class="permalink"><a href="#gaefa070f9232857ba5a57297ea9a08ea2">&#9670;&nbsp;</a></span>hwloc_bitmap_intersects()</h2>
833
834 <div class="memitem">
835 <div class="memproto">
836 <table class="memname">
837 <tr>
838 <td class="memname">int hwloc_bitmap_intersects </td>
839 <td>(</td>
840 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
841 <td class="paramname"><em>bitmap1</em>, </td>
842 </tr>
843 <tr>
844 <td class="paramkey"></td>
845 <td></td>
846 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
847 <td class="paramname"><em>bitmap2</em>&#160;</td>
848 </tr>
849 <tr>
850 <td></td>
851 <td>)</td>
852 <td></td><td></td>
853 </tr>
854 </table>
855 </div><div class="memdoc">
856
857 <p>Test whether bitmaps <code>bitmap1</code> and <code>bitmap2</code> intersects. </p>
858 <dl class="section return"><dt>Returns</dt><dd>1 if bitmaps intersect, 0 otherwise. </dd></dl>
859
860 </div>
861 </div>
862 <a id="ga32376b1405e57472b73c3aa53bb39663"></a>
863 <h2 class="memtitle"><span class="permalink"><a href="#ga32376b1405e57472b73c3aa53bb39663">&#9670;&nbsp;</a></span>hwloc_bitmap_isequal()</h2>
864
865 <div class="memitem">
866 <div class="memproto">
867 <table class="memname">
868 <tr>
869 <td class="memname">int hwloc_bitmap_isequal </td>
870 <td>(</td>
871 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
872 <td class="paramname"><em>bitmap1</em>, </td>
873 </tr>
874 <tr>
875 <td class="paramkey"></td>
876 <td></td>
877 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
878 <td class="paramname"><em>bitmap2</em>&#160;</td>
879 </tr>
880 <tr>
881 <td></td>
882 <td>)</td>
883 <td></td><td></td>
884 </tr>
885 </table>
886 </div><div class="memdoc">
887
888 <p>Test whether bitmap <code>bitmap1</code> is equal to bitmap <code>bitmap2</code>. </p>
889 <dl class="section return"><dt>Returns</dt><dd>1 if bitmaps are equal, 0 otherwise. </dd></dl>
890
891 </div>
892 </div>
893 <a id="ga5fdcb8c19c336511c37076d649e74af4"></a>
894 <h2 class="memtitle"><span class="permalink"><a href="#ga5fdcb8c19c336511c37076d649e74af4">&#9670;&nbsp;</a></span>hwloc_bitmap_isfull()</h2>
895
896 <div class="memitem">
897 <div class="memproto">
898 <table class="memname">
899 <tr>
900 <td class="memname">int hwloc_bitmap_isfull </td>
901 <td>(</td>
902 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
903 <td class="paramname"><em>bitmap</em></td><td>)</td>
904 <td></td>
905 </tr>
906 </table>
907 </div><div class="memdoc">
908
909 <p>Test whether bitmap <code>bitmap</code> is completely full. </p>
910 <dl class="section return"><dt>Returns</dt><dd>1 if bitmap is full, 0 otherwise.</dd></dl>
911 <dl class="section note"><dt>Note</dt><dd>A full bitmap is always infinitely set. </dd></dl>
912
913 </div>
914 </div>
915 <a id="ga0526e03db81956fb02acc8260b66d6a4"></a>
916 <h2 class="memtitle"><span class="permalink"><a href="#ga0526e03db81956fb02acc8260b66d6a4">&#9670;&nbsp;</a></span>hwloc_bitmap_isincluded()</h2>
917
918 <div class="memitem">
919 <div class="memproto">
920 <table class="memname">
921 <tr>
922 <td class="memname">int hwloc_bitmap_isincluded </td>
923 <td>(</td>
924 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
925 <td class="paramname"><em>sub_bitmap</em>, </td>
926 </tr>
927 <tr>
928 <td class="paramkey"></td>
929 <td></td>
930 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
931 <td class="paramname"><em>super_bitmap</em>&#160;</td>
932 </tr>
933 <tr>
934 <td></td>
935 <td>)</td>
936 <td></td><td></td>
937 </tr>
938 </table>
939 </div><div class="memdoc">
940
941 <p>Test whether bitmap <code>sub_bitmap</code> is part of bitmap <code>super_bitmap</code>. </p>
942 <dl class="section return"><dt>Returns</dt><dd>1 if <code>sub_bitmap</code> is included in <code>super_bitmap</code>, 0 otherwise.</dd></dl>
943 <dl class="section note"><dt>Note</dt><dd>The empty bitmap is considered included in any other bitmap. </dd></dl>
944
945 </div>
946 </div>
947 <a id="ga11340dd487f110bb84f0a6e4ae90bd06"></a>
948 <h2 class="memtitle"><span class="permalink"><a href="#ga11340dd487f110bb84f0a6e4ae90bd06">&#9670;&nbsp;</a></span>hwloc_bitmap_isset()</h2>
949
950 <div class="memitem">
951 <div class="memproto">
952 <table class="memname">
953 <tr>
954 <td class="memname">int hwloc_bitmap_isset </td>
955 <td>(</td>
956 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
957 <td class="paramname"><em>bitmap</em>, </td>
958 </tr>
959 <tr>
960 <td class="paramkey"></td>
961 <td></td>
962 <td class="paramtype">unsigned&#160;</td>
963 <td class="paramname"><em>id</em>&#160;</td>
964 </tr>
965 <tr>
966 <td></td>
967 <td>)</td>
968 <td></td><td></td>
969 </tr>
970 </table>
971 </div><div class="memdoc">
972
973 <p>Test whether index <code>id</code> is part of bitmap <code>bitmap</code>. </p>
974 <dl class="section return"><dt>Returns</dt><dd>1 if the bit at index <code>id</code> is set in bitmap <code>bitmap</code>, 0 otherwise. </dd></dl>
975
976 </div>
977 </div>
978 <a id="ga5b64be28f5a7176ed8ad0d6a90bdf108"></a>
979 <h2 class="memtitle"><span class="permalink"><a href="#ga5b64be28f5a7176ed8ad0d6a90bdf108">&#9670;&nbsp;</a></span>hwloc_bitmap_iszero()</h2>
980
981 <div class="memitem">
982 <div class="memproto">
983 <table class="memname">
984 <tr>
985 <td class="memname">int hwloc_bitmap_iszero </td>
986 <td>(</td>
987 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
988 <td class="paramname"><em>bitmap</em></td><td>)</td>
989 <td></td>
990 </tr>
991 </table>
992 </div><div class="memdoc">
993
994 <p>Test whether bitmap <code>bitmap</code> is empty. </p>
995 <dl class="section return"><dt>Returns</dt><dd>1 if bitmap is empty, 0 otherwise. </dd></dl>
996
997 </div>
998 </div>
999 <a id="ga3d9b08b060a59bbab5a4ea6d0a1ed7a6"></a>
1000 <h2 class="memtitle"><span class="permalink"><a href="#ga3d9b08b060a59bbab5a4ea6d0a1ed7a6">&#9670;&nbsp;</a></span>hwloc_bitmap_last()</h2>
1001
1002 <div class="memitem">
1003 <div class="memproto">
1004 <table class="memname">
1005 <tr>
1006 <td class="memname">int hwloc_bitmap_last </td>
1007 <td>(</td>
1008 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1009 <td class="paramname"><em>bitmap</em></td><td>)</td>
1010 <td></td>
1011 </tr>
1012 </table>
1013 </div><div class="memdoc">
1014
1015 <p>Compute the last index (most significant bit) in bitmap <code>bitmap</code>. </p>
1016 <dl class="section return"><dt>Returns</dt><dd>-1 if no index is set in <code>bitmap</code>, or if <code>bitmap</code> is infinitely set. </dd></dl>
1017
1018 </div>
1019 </div>
1020 <a id="ga45d49aeb45c7da631b1480a93dc3fc92"></a>
1021 <h2 class="memtitle"><span class="permalink"><a href="#ga45d49aeb45c7da631b1480a93dc3fc92">&#9670;&nbsp;</a></span>hwloc_bitmap_last_unset()</h2>
1022
1023 <div class="memitem">
1024 <div class="memproto">
1025 <table class="memname">
1026 <tr>
1027 <td class="memname">int hwloc_bitmap_last_unset </td>
1028 <td>(</td>
1029 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1030 <td class="paramname"><em>bitmap</em></td><td>)</td>
1031 <td></td>
1032 </tr>
1033 </table>
1034 </div><div class="memdoc">
1035
1036 <p>Compute the last unset index (most significant bit) in bitmap <code>bitmap</code>. </p>
1037 <dl class="section return"><dt>Returns</dt><dd>-1 if no index is unset in <code>bitmap</code>, or if <code>bitmap</code> is infinitely set. </dd></dl>
1038
1039 </div>
1040 </div>
1041 <a id="ga39c0f1b02053de66d205c9f8260b3665"></a>
1042 <h2 class="memtitle"><span class="permalink"><a href="#ga39c0f1b02053de66d205c9f8260b3665">&#9670;&nbsp;</a></span>hwloc_bitmap_list_asprintf()</h2>
1043
1044 <div class="memitem">
1045 <div class="memproto">
1046 <table class="memname">
1047 <tr>
1048 <td class="memname">int hwloc_bitmap_list_asprintf </td>
1049 <td>(</td>
1050 <td class="paramtype">char **&#160;</td>
1051 <td class="paramname"><em>strp</em>, </td>
1052 </tr>
1053 <tr>
1054 <td class="paramkey"></td>
1055 <td></td>
1056 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1057 <td class="paramname"><em>bitmap</em>&#160;</td>
1058 </tr>
1059 <tr>
1060 <td></td>
1061 <td>)</td>
1062 <td></td><td></td>
1063 </tr>
1064 </table>
1065 </div><div class="memdoc">
1066
1067 <p>Stringify a bitmap into a newly allocated list string. </p>
1068 <dl class="section return"><dt>Returns</dt><dd>-1 on error. </dd></dl>
1069
1070 </div>
1071 </div>
1072 <a id="ga3d06e6447edeb61e56a9ad83f31f0a37"></a>
1073 <h2 class="memtitle"><span class="permalink"><a href="#ga3d06e6447edeb61e56a9ad83f31f0a37">&#9670;&nbsp;</a></span>hwloc_bitmap_list_snprintf()</h2>
1074
1075 <div class="memitem">
1076 <div class="memproto">
1077 <table class="memname">
1078 <tr>
1079 <td class="memname">int hwloc_bitmap_list_snprintf </td>
1080 <td>(</td>
1081 <td class="paramtype">char *restrict&#160;</td>
1082 <td class="paramname"><em>buf</em>, </td>
1083 </tr>
1084 <tr>
1085 <td class="paramkey"></td>
1086 <td></td>
1087 <td class="paramtype">size_t&#160;</td>
1088 <td class="paramname"><em>buflen</em>, </td>
1089 </tr>
1090 <tr>
1091 <td class="paramkey"></td>
1092 <td></td>
1093 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1094 <td class="paramname"><em>bitmap</em>&#160;</td>
1095 </tr>
1096 <tr>
1097 <td></td>
1098 <td>)</td>
1099 <td></td><td></td>
1100 </tr>
1101 </table>
1102 </div><div class="memdoc">
1103
1104 <p>Stringify a bitmap in the list format. </p>
1105 <p>Lists are comma-separated indexes or ranges. Ranges are dash separated indexes. The last range may not have an ending indexes if the bitmap is infinitely set.</p>
1106 <p>Up to <code>buflen</code> characters may be written in buffer <code>buf</code>.</p>
1107 <p>If <code>buflen</code> is 0, <code>buf</code> may safely be <code>NULL</code>.</p>
1108 <dl class="section return"><dt>Returns</dt><dd>the number of character that were actually written if not truncating, or that would have been written (not including the ending \0). </dd></dl>
1109
1110 </div>
1111 </div>
1112 <a id="gaf9314311d482c621e17c6a53a9fe993e"></a>
1113 <h2 class="memtitle"><span class="permalink"><a href="#gaf9314311d482c621e17c6a53a9fe993e">&#9670;&nbsp;</a></span>hwloc_bitmap_list_sscanf()</h2>
1114
1115 <div class="memitem">
1116 <div class="memproto">
1117 <table class="memname">
1118 <tr>
1119 <td class="memname">int hwloc_bitmap_list_sscanf </td>
1120 <td>(</td>
1121 <td class="paramtype"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
1122 <td class="paramname"><em>bitmap</em>, </td>
1123 </tr>
1124 <tr>
1125 <td class="paramkey"></td>
1126 <td></td>
1127 <td class="paramtype">const char *restrict&#160;</td>
1128 <td class="paramname"><em>string</em>&#160;</td>
1129 </tr>
1130 <tr>
1131 <td></td>
1132 <td>)</td>
1133 <td></td><td></td>
1134 </tr>
1135 </table>
1136 </div><div class="memdoc">
1137
1138 <p>Parse a list string and stores it in bitmap <code>bitmap</code>. </p>
1139
1140 </div>
1141 </div>
1142 <a id="gaab7240b4b644693b775dad17b44ffd68"></a>
1143 <h2 class="memtitle"><span class="permalink"><a href="#gaab7240b4b644693b775dad17b44ffd68">&#9670;&nbsp;</a></span>hwloc_bitmap_next()</h2>
1144
1145 <div class="memitem">
1146 <div class="memproto">
1147 <table class="memname">
1148 <tr>
1149 <td class="memname">int hwloc_bitmap_next </td>
1150 <td>(</td>
1151 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1152 <td class="paramname"><em>bitmap</em>, </td>
1153 </tr>
1154 <tr>
1155 <td class="paramkey"></td>
1156 <td></td>
1157 <td class="paramtype">int&#160;</td>
1158 <td class="paramname"><em>prev</em>&#160;</td>
1159 </tr>
1160 <tr>
1161 <td></td>
1162 <td>)</td>
1163 <td></td><td></td>
1164 </tr>
1165 </table>
1166 </div><div class="memdoc">
1167
1168 <p>Compute the next index in bitmap <code>bitmap</code> which is after index <code>prev</code>. </p>
1169 <p>If <code>prev</code> is -1, the first index is returned.</p>
1170 <dl class="section return"><dt>Returns</dt><dd>-1 if no index with higher index is set in <code>bitmap</code>. </dd></dl>
1171
1172 </div>
1173 </div>
1174 <a id="ga9653af34d1460ef106b7df25af4cdca8"></a>
1175 <h2 class="memtitle"><span class="permalink"><a href="#ga9653af34d1460ef106b7df25af4cdca8">&#9670;&nbsp;</a></span>hwloc_bitmap_next_unset()</h2>
1176
1177 <div class="memitem">
1178 <div class="memproto">
1179 <table class="memname">
1180 <tr>
1181 <td class="memname">int hwloc_bitmap_next_unset </td>
1182 <td>(</td>
1183 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1184 <td class="paramname"><em>bitmap</em>, </td>
1185 </tr>
1186 <tr>
1187 <td class="paramkey"></td>
1188 <td></td>
1189 <td class="paramtype">int&#160;</td>
1190 <td class="paramname"><em>prev</em>&#160;</td>
1191 </tr>
1192 <tr>
1193 <td></td>
1194 <td>)</td>
1195 <td></td><td></td>
1196 </tr>
1197 </table>
1198 </div><div class="memdoc">
1199
1200 <p>Compute the next unset index in bitmap <code>bitmap</code> which is after index <code>prev</code>. </p>
1201 <p>If <code>prev</code> is -1, the first unset index is returned.</p>
1202 <dl class="section return"><dt>Returns</dt><dd>-1 if no index with higher index is unset in <code>bitmap</code>. </dd></dl>
1203
1204 </div>
1205 </div>
1206 <a id="ga84cfdb4f8ab8c1f7e097728e613a2a3f"></a>
1207 <h2 class="memtitle"><span class="permalink"><a href="#ga84cfdb4f8ab8c1f7e097728e613a2a3f">&#9670;&nbsp;</a></span>hwloc_bitmap_not()</h2>
1208
1209 <div class="memitem">
1210 <div class="memproto">
1211 <table class="memname">
1212 <tr>
1213 <td class="memname">int hwloc_bitmap_not </td>
1214 <td>(</td>
1215 <td class="paramtype"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
1216 <td class="paramname"><em>res</em>, </td>
1217 </tr>
1218 <tr>
1219 <td class="paramkey"></td>
1220 <td></td>
1221 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1222 <td class="paramname"><em>bitmap</em>&#160;</td>
1223 </tr>
1224 <tr>
1225 <td></td>
1226 <td>)</td>
1227 <td></td><td></td>
1228 </tr>
1229 </table>
1230 </div><div class="memdoc">
1231
1232 <p>Negate bitmap <code>bitmap</code> and store the result in bitmap <code>res</code>. </p>
1233 <p><code>res</code> can be the same as <code>bitmap</code> </p>
1234
1235 </div>
1236 </div>
1237 <a id="gac0744734d761d65c977aece565364908"></a>
1238 <h2 class="memtitle"><span class="permalink"><a href="#gac0744734d761d65c977aece565364908">&#9670;&nbsp;</a></span>hwloc_bitmap_nr_ulongs()</h2>
1239
1240 <div class="memitem">
1241 <div class="memproto">
1242 <table class="memname">
1243 <tr>
1244 <td class="memname">int hwloc_bitmap_nr_ulongs </td>
1245 <td>(</td>
1246 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1247 <td class="paramname"><em>bitmap</em></td><td>)</td>
1248 <td></td>
1249 </tr>
1250 </table>
1251 </div><div class="memdoc">
1252
1253 <p>Return the number of unsigned longs required for storing bitmap <code>bitmap</code> entirely. </p>
1254 <p>This is the number of contiguous unsigned longs from the very first bit of the bitmap (even if unset) up to the last set bit. This is useful for knowing the <code>nr</code> parameter to pass to <a class="el" href="a00211.html#gacd215a2348732de25d94a4ecd76d528c" title="Convert the first nr subsets of bitmap bitmap into the array of nr unsigned long masks.">hwloc_bitmap_to_ulongs()</a> (or which calls to <a class="el" href="a00211.html#gac92e6404f648d6b99d2c626b05b2ffa4" title="Convert the i -th subset of bitmap bitmap into unsigned long mask.">hwloc_bitmap_to_ith_ulong()</a> are needed) to entirely convert a bitmap into multiple unsigned longs.</p>
1255 <p>When called on the output of <a class="el" href="a00208.html#ga79212faa07b70dd26588941b17d9fa82" title="Get topology CPU set.">hwloc_topology_get_topology_cpuset()</a>, the returned number is large enough for all cpusets of the topology.</p>
1256 <dl class="section return"><dt>Returns</dt><dd>-1 if <code>bitmap</code> is infinite. </dd></dl>
1257
1258 </div>
1259 </div>
1260 <a id="ga10be0840cdeb7ce26d862819dd303baa"></a>
1261 <h2 class="memtitle"><span class="permalink"><a href="#ga10be0840cdeb7ce26d862819dd303baa">&#9670;&nbsp;</a></span>hwloc_bitmap_only()</h2>
1262
1263 <div class="memitem">
1264 <div class="memproto">
1265 <table class="memname">
1266 <tr>
1267 <td class="memname">int hwloc_bitmap_only </td>
1268 <td>(</td>
1269 <td class="paramtype"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
1270 <td class="paramname"><em>bitmap</em>, </td>
1271 </tr>
1272 <tr>
1273 <td class="paramkey"></td>
1274 <td></td>
1275 <td class="paramtype">unsigned&#160;</td>
1276 <td class="paramname"><em>id</em>&#160;</td>
1277 </tr>
1278 <tr>
1279 <td></td>
1280 <td>)</td>
1281 <td></td><td></td>
1282 </tr>
1283 </table>
1284 </div><div class="memdoc">
1285
1286 <p>Empty the bitmap <code>bitmap</code> and add bit <code>id</code>. </p>
1287
1288 </div>
1289 </div>
1290 <a id="ga120b8aefb9ce7ef349929656359b1859"></a>
1291 <h2 class="memtitle"><span class="permalink"><a href="#ga120b8aefb9ce7ef349929656359b1859">&#9670;&nbsp;</a></span>hwloc_bitmap_or()</h2>
1292
1293 <div class="memitem">
1294 <div class="memproto">
1295 <table class="memname">
1296 <tr>
1297 <td class="memname">int hwloc_bitmap_or </td>
1298 <td>(</td>
1299 <td class="paramtype"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
1300 <td class="paramname"><em>res</em>, </td>
1301 </tr>
1302 <tr>
1303 <td class="paramkey"></td>
1304 <td></td>
1305 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1306 <td class="paramname"><em>bitmap1</em>, </td>
1307 </tr>
1308 <tr>
1309 <td class="paramkey"></td>
1310 <td></td>
1311 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1312 <td class="paramname"><em>bitmap2</em>&#160;</td>
1313 </tr>
1314 <tr>
1315 <td></td>
1316 <td>)</td>
1317 <td></td><td></td>
1318 </tr>
1319 </table>
1320 </div><div class="memdoc">
1321
1322 <p>Or bitmaps <code>bitmap1</code> and <code>bitmap2</code> and store the result in bitmap <code>res</code>. </p>
1323 <p><code>res</code> can be the same as <code>bitmap1</code> or <code>bitmap2</code> </p>
1324
1325 </div>
1326 </div>
1327 <a id="ga062dbff93baeff3b425a7260c5463646"></a>
1328 <h2 class="memtitle"><span class="permalink"><a href="#ga062dbff93baeff3b425a7260c5463646">&#9670;&nbsp;</a></span>hwloc_bitmap_set()</h2>
1329
1330 <div class="memitem">
1331 <div class="memproto">
1332 <table class="memname">
1333 <tr>
1334 <td class="memname">int hwloc_bitmap_set </td>
1335 <td>(</td>
1336 <td class="paramtype"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
1337 <td class="paramname"><em>bitmap</em>, </td>
1338 </tr>
1339 <tr>
1340 <td class="paramkey"></td>
1341 <td></td>
1342 <td class="paramtype">unsigned&#160;</td>
1343 <td class="paramname"><em>id</em>&#160;</td>
1344 </tr>
1345 <tr>
1346 <td></td>
1347 <td>)</td>
1348 <td></td><td></td>
1349 </tr>
1350 </table>
1351 </div><div class="memdoc">
1352
1353 <p>Add index <code>id</code> in bitmap <code>bitmap</code>. </p>
1354
1355 </div>
1356 </div>
1357 <a id="ga3daeed965c35c6d2fd4820a318219985"></a>
1358 <h2 class="memtitle"><span class="permalink"><a href="#ga3daeed965c35c6d2fd4820a318219985">&#9670;&nbsp;</a></span>hwloc_bitmap_set_ith_ulong()</h2>
1359
1360 <div class="memitem">
1361 <div class="memproto">
1362 <table class="memname">
1363 <tr>
1364 <td class="memname">int hwloc_bitmap_set_ith_ulong </td>
1365 <td>(</td>
1366 <td class="paramtype"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
1367 <td class="paramname"><em>bitmap</em>, </td>
1368 </tr>
1369 <tr>
1370 <td class="paramkey"></td>
1371 <td></td>
1372 <td class="paramtype">unsigned&#160;</td>
1373 <td class="paramname"><em>i</em>, </td>
1374 </tr>
1375 <tr>
1376 <td class="paramkey"></td>
1377 <td></td>
1378 <td class="paramtype">unsigned long&#160;</td>
1379 <td class="paramname"><em>mask</em>&#160;</td>
1380 </tr>
1381 <tr>
1382 <td></td>
1383 <td>)</td>
1384 <td></td><td></td>
1385 </tr>
1386 </table>
1387 </div><div class="memdoc">
1388
1389 <p>Replace <code>i</code> -th subset of bitmap <code>bitmap</code> with unsigned long <code>mask</code>. </p>
1390
1391 </div>
1392 </div>
1393 <a id="ga9c9a8433732fb9f24899e7aa4c014d7e"></a>
1394 <h2 class="memtitle"><span class="permalink"><a href="#ga9c9a8433732fb9f24899e7aa4c014d7e">&#9670;&nbsp;</a></span>hwloc_bitmap_set_range()</h2>
1395
1396 <div class="memitem">
1397 <div class="memproto">
1398 <table class="memname">
1399 <tr>
1400 <td class="memname">int hwloc_bitmap_set_range </td>
1401 <td>(</td>
1402 <td class="paramtype"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
1403 <td class="paramname"><em>bitmap</em>, </td>
1404 </tr>
1405 <tr>
1406 <td class="paramkey"></td>
1407 <td></td>
1408 <td class="paramtype">unsigned&#160;</td>
1409 <td class="paramname"><em>begin</em>, </td>
1410 </tr>
1411 <tr>
1412 <td class="paramkey"></td>
1413 <td></td>
1414 <td class="paramtype">int&#160;</td>
1415 <td class="paramname"><em>end</em>&#160;</td>
1416 </tr>
1417 <tr>
1418 <td></td>
1419 <td>)</td>
1420 <td></td><td></td>
1421 </tr>
1422 </table>
1423 </div><div class="memdoc">
1424
1425 <p>Add indexes from <code>begin</code> to <code>end</code> in bitmap <code>bitmap</code>. </p>
1426 <p>If <code>end</code> is <code>-1</code>, the range is infinite. </p>
1427
1428 </div>
1429 </div>
1430 <a id="gaa611a77c092e679246afdf9a60d5db8b"></a>
1431 <h2 class="memtitle"><span class="permalink"><a href="#gaa611a77c092e679246afdf9a60d5db8b">&#9670;&nbsp;</a></span>hwloc_bitmap_singlify()</h2>
1432
1433 <div class="memitem">
1434 <div class="memproto">
1435 <table class="memname">
1436 <tr>
1437 <td class="memname">int hwloc_bitmap_singlify </td>
1438 <td>(</td>
1439 <td class="paramtype"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
1440 <td class="paramname"><em>bitmap</em></td><td>)</td>
1441 <td></td>
1442 </tr>
1443 </table>
1444 </div><div class="memdoc">
1445
1446 <p>Keep a single index among those set in bitmap <code>bitmap</code>. </p>
1447 <p>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.</p>
1448 <dl class="section note"><dt>Note</dt><dd>This function is NOT meant to distribute multiple processes within a single CPU set. It always return the same single bit when called multiple times on the same input set. <a class="el" href="a00207.html#ga7b0c28f797c2ff17fa2f244ebbd55b33" title="Distribute n items over the topology under roots.">hwloc_distrib()</a> may be used for generating CPU sets to distribute multiple tasks below a single multi-PU object.</dd>
1449 <dd>
1450 This function cannot be applied to an object set directly. It should be applied to a copy (which may be obtained with <a class="el" href="a00211.html#gae679434c1a5f41d3560a8a7e2c1b0dee" title="Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.">hwloc_bitmap_dup()</a>). </dd></dl>
1451
1452 </div>
1453 </div>
1454 <a id="ga9511644657030a021dce9941e3cda583"></a>
1455 <h2 class="memtitle"><span class="permalink"><a href="#ga9511644657030a021dce9941e3cda583">&#9670;&nbsp;</a></span>hwloc_bitmap_snprintf()</h2>
1456
1457 <div class="memitem">
1458 <div class="memproto">
1459 <table class="memname">
1460 <tr>
1461 <td class="memname">int hwloc_bitmap_snprintf </td>
1462 <td>(</td>
1463 <td class="paramtype">char *restrict&#160;</td>
1464 <td class="paramname"><em>buf</em>, </td>
1465 </tr>
1466 <tr>
1467 <td class="paramkey"></td>
1468 <td></td>
1469 <td class="paramtype">size_t&#160;</td>
1470 <td class="paramname"><em>buflen</em>, </td>
1471 </tr>
1472 <tr>
1473 <td class="paramkey"></td>
1474 <td></td>
1475 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1476 <td class="paramname"><em>bitmap</em>&#160;</td>
1477 </tr>
1478 <tr>
1479 <td></td>
1480 <td>)</td>
1481 <td></td><td></td>
1482 </tr>
1483 </table>
1484 </div><div class="memdoc">
1485
1486 <p>Stringify a bitmap. </p>
1487 <p>Up to <code>buflen</code> characters may be written in buffer <code>buf</code>.</p>
1488 <p>If <code>buflen</code> is 0, <code>buf</code> may safely be <code>NULL</code>.</p>
1489 <dl class="section return"><dt>Returns</dt><dd>the number of character that were actually written if not truncating, or that would have been written (not including the ending \0). </dd></dl>
1490
1491 </div>
1492 </div>
1493 <a id="ga064a85c643a364b60acbfa0f3663fc18"></a>
1494 <h2 class="memtitle"><span class="permalink"><a href="#ga064a85c643a364b60acbfa0f3663fc18">&#9670;&nbsp;</a></span>hwloc_bitmap_sscanf()</h2>
1495
1496 <div class="memitem">
1497 <div class="memproto">
1498 <table class="memname">
1499 <tr>
1500 <td class="memname">int hwloc_bitmap_sscanf </td>
1501 <td>(</td>
1502 <td class="paramtype"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
1503 <td class="paramname"><em>bitmap</em>, </td>
1504 </tr>
1505 <tr>
1506 <td class="paramkey"></td>
1507 <td></td>
1508 <td class="paramtype">const char *restrict&#160;</td>
1509 <td class="paramname"><em>string</em>&#160;</td>
1510 </tr>
1511 <tr>
1512 <td></td>
1513 <td>)</td>
1514 <td></td><td></td>
1515 </tr>
1516 </table>
1517 </div><div class="memdoc">
1518
1519 <p>Parse a bitmap string and stores it in bitmap <code>bitmap</code>. </p>
1520
1521 </div>
1522 </div>
1523 <a id="ga391312513f17c985d871f18367c59512"></a>
1524 <h2 class="memtitle"><span class="permalink"><a href="#ga391312513f17c985d871f18367c59512">&#9670;&nbsp;</a></span>hwloc_bitmap_taskset_asprintf()</h2>
1525
1526 <div class="memitem">
1527 <div class="memproto">
1528 <table class="memname">
1529 <tr>
1530 <td class="memname">int hwloc_bitmap_taskset_asprintf </td>
1531 <td>(</td>
1532 <td class="paramtype">char **&#160;</td>
1533 <td class="paramname"><em>strp</em>, </td>
1534 </tr>
1535 <tr>
1536 <td class="paramkey"></td>
1537 <td></td>
1538 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1539 <td class="paramname"><em>bitmap</em>&#160;</td>
1540 </tr>
1541 <tr>
1542 <td></td>
1543 <td>)</td>
1544 <td></td><td></td>
1545 </tr>
1546 </table>
1547 </div><div class="memdoc">
1548
1549 <p>Stringify a bitmap into a newly allocated taskset-specific string. </p>
1550 <dl class="section return"><dt>Returns</dt><dd>-1 on error. </dd></dl>
1551
1552 </div>
1553 </div>
1554 <a id="ga5beb68a987fe48e5c5edef06ab260e14"></a>
1555 <h2 class="memtitle"><span class="permalink"><a href="#ga5beb68a987fe48e5c5edef06ab260e14">&#9670;&nbsp;</a></span>hwloc_bitmap_taskset_snprintf()</h2>
1556
1557 <div class="memitem">
1558 <div class="memproto">
1559 <table class="memname">
1560 <tr>
1561 <td class="memname">int hwloc_bitmap_taskset_snprintf </td>
1562 <td>(</td>
1563 <td class="paramtype">char *restrict&#160;</td>
1564 <td class="paramname"><em>buf</em>, </td>
1565 </tr>
1566 <tr>
1567 <td class="paramkey"></td>
1568 <td></td>
1569 <td class="paramtype">size_t&#160;</td>
1570 <td class="paramname"><em>buflen</em>, </td>
1571 </tr>
1572 <tr>
1573 <td class="paramkey"></td>
1574 <td></td>
1575 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1576 <td class="paramname"><em>bitmap</em>&#160;</td>
1577 </tr>
1578 <tr>
1579 <td></td>
1580 <td>)</td>
1581 <td></td><td></td>
1582 </tr>
1583 </table>
1584 </div><div class="memdoc">
1585
1586 <p>Stringify a bitmap in the taskset-specific format. </p>
1587 <p>The taskset command manipulates bitmap strings that contain a single (possible very long) hexadecimal number starting with 0x.</p>
1588 <p>Up to <code>buflen</code> characters may be written in buffer <code>buf</code>.</p>
1589 <p>If <code>buflen</code> is 0, <code>buf</code> may safely be <code>NULL</code>.</p>
1590 <dl class="section return"><dt>Returns</dt><dd>the number of character that were actually written if not truncating, or that would have been written (not including the ending \0). </dd></dl>
1591
1592 </div>
1593 </div>
1594 <a id="ga4f23db5041240e03e348752f8bd6ec2d"></a>
1595 <h2 class="memtitle"><span class="permalink"><a href="#ga4f23db5041240e03e348752f8bd6ec2d">&#9670;&nbsp;</a></span>hwloc_bitmap_taskset_sscanf()</h2>
1596
1597 <div class="memitem">
1598 <div class="memproto">
1599 <table class="memname">
1600 <tr>
1601 <td class="memname">int hwloc_bitmap_taskset_sscanf </td>
1602 <td>(</td>
1603 <td class="paramtype"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
1604 <td class="paramname"><em>bitmap</em>, </td>
1605 </tr>
1606 <tr>
1607 <td class="paramkey"></td>
1608 <td></td>
1609 <td class="paramtype">const char *restrict&#160;</td>
1610 <td class="paramname"><em>string</em>&#160;</td>
1611 </tr>
1612 <tr>
1613 <td></td>
1614 <td>)</td>
1615 <td></td><td></td>
1616 </tr>
1617 </table>
1618 </div><div class="memdoc">
1619
1620 <p>Parse a taskset-specific bitmap string and stores it in bitmap <code>bitmap</code>. </p>
1621
1622 </div>
1623 </div>
1624 <a id="gac92e6404f648d6b99d2c626b05b2ffa4"></a>
1625 <h2 class="memtitle"><span class="permalink"><a href="#gac92e6404f648d6b99d2c626b05b2ffa4">&#9670;&nbsp;</a></span>hwloc_bitmap_to_ith_ulong()</h2>
1626
1627 <div class="memitem">
1628 <div class="memproto">
1629 <table class="memname">
1630 <tr>
1631 <td class="memname">unsigned long hwloc_bitmap_to_ith_ulong </td>
1632 <td>(</td>
1633 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1634 <td class="paramname"><em>bitmap</em>, </td>
1635 </tr>
1636 <tr>
1637 <td class="paramkey"></td>
1638 <td></td>
1639 <td class="paramtype">unsigned&#160;</td>
1640 <td class="paramname"><em>i</em>&#160;</td>
1641 </tr>
1642 <tr>
1643 <td></td>
1644 <td>)</td>
1645 <td></td><td></td>
1646 </tr>
1647 </table>
1648 </div><div class="memdoc">
1649
1650 <p>Convert the <code>i</code> -th subset of bitmap <code>bitmap</code> into unsigned long mask. </p>
1651
1652 </div>
1653 </div>
1654 <a id="gab6a6bae22a33ec6adfc169a953c13e6c"></a>
1655 <h2 class="memtitle"><span class="permalink"><a href="#gab6a6bae22a33ec6adfc169a953c13e6c">&#9670;&nbsp;</a></span>hwloc_bitmap_to_ulong()</h2>
1656
1657 <div class="memitem">
1658 <div class="memproto">
1659 <table class="memname">
1660 <tr>
1661 <td class="memname">unsigned long hwloc_bitmap_to_ulong </td>
1662 <td>(</td>
1663 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1664 <td class="paramname"><em>bitmap</em></td><td>)</td>
1665 <td></td>
1666 </tr>
1667 </table>
1668 </div><div class="memdoc">
1669
1670 <p>Convert the beginning part of bitmap <code>bitmap</code> into unsigned long <code>mask</code>. </p>
1671
1672 </div>
1673 </div>
1674 <a id="gacd215a2348732de25d94a4ecd76d528c"></a>
1675 <h2 class="memtitle"><span class="permalink"><a href="#gacd215a2348732de25d94a4ecd76d528c">&#9670;&nbsp;</a></span>hwloc_bitmap_to_ulongs()</h2>
1676
1677 <div class="memitem">
1678 <div class="memproto">
1679 <table class="memname">
1680 <tr>
1681 <td class="memname">int hwloc_bitmap_to_ulongs </td>
1682 <td>(</td>
1683 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1684 <td class="paramname"><em>bitmap</em>, </td>
1685 </tr>
1686 <tr>
1687 <td class="paramkey"></td>
1688 <td></td>
1689 <td class="paramtype">unsigned&#160;</td>
1690 <td class="paramname"><em>nr</em>, </td>
1691 </tr>
1692 <tr>
1693 <td class="paramkey"></td>
1694 <td></td>
1695 <td class="paramtype">unsigned long *&#160;</td>
1696 <td class="paramname"><em>masks</em>&#160;</td>
1697 </tr>
1698 <tr>
1699 <td></td>
1700 <td>)</td>
1701 <td></td><td></td>
1702 </tr>
1703 </table>
1704 </div><div class="memdoc">
1705
1706 <p>Convert the first <code>nr</code> subsets of bitmap <code>bitmap</code> into the array of <code>nr</code> unsigned long <code>masks</code>. </p>
1707 <p><code>nr</code> may be determined earlier with <a class="el" href="a00211.html#gac0744734d761d65c977aece565364908" title="Return the number of unsigned longs required for storing bitmap bitmap entirely.">hwloc_bitmap_nr_ulongs()</a>.</p>
1708 <dl class="section return"><dt>Returns</dt><dd>0 </dd></dl>
1709
1710 </div>
1711 </div>
1712 <a id="ga0200466842c0e1f5da75e84dde460b10"></a>
1713 <h2 class="memtitle"><span class="permalink"><a href="#ga0200466842c0e1f5da75e84dde460b10">&#9670;&nbsp;</a></span>hwloc_bitmap_weight()</h2>
1714
1715 <div class="memitem">
1716 <div class="memproto">
1717 <table class="memname">
1718 <tr>
1719 <td class="memname">int hwloc_bitmap_weight </td>
1720 <td>(</td>
1721 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1722 <td class="paramname"><em>bitmap</em></td><td>)</td>
1723 <td></td>
1724 </tr>
1725 </table>
1726 </div><div class="memdoc">
1727
1728 <p>Compute the "weight" of bitmap <code>bitmap</code> (i.e., number of indexes that are in the bitmap). </p>
1729 <dl class="section return"><dt>Returns</dt><dd>the number of indexes that are in the bitmap.</dd>
1730 <dd>
1731 -1 if <code>bitmap</code> is infinitely set. </dd></dl>
1732
1733 </div>
1734 </div>
1735 <a id="ga205508218e09cb9befd0687f16409f09"></a>
1736 <h2 class="memtitle"><span class="permalink"><a href="#ga205508218e09cb9befd0687f16409f09">&#9670;&nbsp;</a></span>hwloc_bitmap_xor()</h2>
1737
1738 <div class="memitem">
1739 <div class="memproto">
1740 <table class="memname">
1741 <tr>
1742 <td class="memname">int hwloc_bitmap_xor </td>
1743 <td>(</td>
1744 <td class="paramtype"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
1745 <td class="paramname"><em>res</em>, </td>
1746 </tr>
1747 <tr>
1748 <td class="paramkey"></td>
1749 <td></td>
1750 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1751 <td class="paramname"><em>bitmap1</em>, </td>
1752 </tr>
1753 <tr>
1754 <td class="paramkey"></td>
1755 <td></td>
1756 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1757 <td class="paramname"><em>bitmap2</em>&#160;</td>
1758 </tr>
1759 <tr>
1760 <td></td>
1761 <td>)</td>
1762 <td></td><td></td>
1763 </tr>
1764 </table>
1765 </div><div class="memdoc">
1766
1767 <p>Xor bitmaps <code>bitmap1</code> and <code>bitmap2</code> and store the result in bitmap <code>res</code>. </p>
1768 <p><code>res</code> can be the same as <code>bitmap1</code> or <code>bitmap2</code> </p>
1769
1770 </div>
1771 </div>
1772 <a id="gaa97c5217613c8cae9862287170ea2132"></a>
1773 <h2 class="memtitle"><span class="permalink"><a href="#gaa97c5217613c8cae9862287170ea2132">&#9670;&nbsp;</a></span>hwloc_bitmap_zero()</h2>
1774
1775 <div class="memitem">
1776 <div class="memproto">
1777 <table class="memname">
1778 <tr>
1779 <td class="memname">void hwloc_bitmap_zero </td>
1780 <td>(</td>
1781 <td class="paramtype"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
1782 <td class="paramname"><em>bitmap</em></td><td>)</td>
1783 <td></td>
1784 </tr>
1785 </table>
1786 </div><div class="memdoc">
1787
1788 <p>Empty the bitmap <code>bitmap</code>. </p>
65 <a id="ga517d5d68ec9f24583d8933aab713be8e"></a>
66 <h2 class="memtitle"><span class="permalink"><a href="#ga517d5d68ec9f24583d8933aab713be8e">&#9670;&nbsp;</a></span>hwloc_topology_get_allowed_cpuset()</h2>
67
68 <div class="memitem">
69 <div class="memproto">
70 <table class="memname">
71 <tr>
72 <td class="memname"><a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> hwloc_topology_get_allowed_cpuset </td>
73 <td>(</td>
74 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
75 <td class="paramname"><em>topology</em></td><td>)</td>
76 <td></td>
77 </tr>
78 </table>
79 </div><div class="memdoc">
80
81 <p>Get allowed CPU set. </p>
82 <dl class="section return"><dt>Returns</dt><dd>the CPU set of allowed processors of the system.</dd></dl>
83 <dl class="section note"><dt>Note</dt><dd>If the topology flag <a class="el" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258" title="Detect the whole system, ignore reservations, include disallowed objects.">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a> was not set, this is identical to <a class="el" href="a00211.html#ga79212faa07b70dd26588941b17d9fa82" title="Get topology CPU set.">hwloc_topology_get_topology_cpuset()</a>, which means all PUs are allowed.</dd>
84 <dd>
85 If <a class="el" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258" title="Detect the whole system, ignore reservations, include disallowed objects.">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a> was set, applying <a class="el" href="a00214.html#gaefa070f9232857ba5a57297ea9a08ea2" title="Test whether bitmaps bitmap1 and bitmap2 intersects.">hwloc_bitmap_intersects()</a> on the result of this function and on an object cpuset checks whether there are allowed PUs inside that object. Applying <a class="el" href="a00214.html#ga674533016ffed922a28b4f0b49b82cd4" title="And bitmaps bitmap1 and bitmap2 and store the result in bitmap res.">hwloc_bitmap_and()</a> returns the list of these allowed PUs.</dd>
86 <dd>
87 The returned cpuset is not newly allocated and should thus not be changed or freed, <a class="el" href="a00214.html#gae679434c1a5f41d3560a8a7e2c1b0dee" title="Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.">hwloc_bitmap_dup()</a> must be used to obtain a local copy. </dd></dl>
88
89 </div>
90 </div>
91 <a id="ga21a4d7237a11e76b912ed4524ab78cbd"></a>
92 <h2 class="memtitle"><span class="permalink"><a href="#ga21a4d7237a11e76b912ed4524ab78cbd">&#9670;&nbsp;</a></span>hwloc_topology_get_allowed_nodeset()</h2>
93
94 <div class="memitem">
95 <div class="memproto">
96 <table class="memname">
97 <tr>
98 <td class="memname"><a class="el" href="a00192.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> hwloc_topology_get_allowed_nodeset </td>
99 <td>(</td>
100 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
101 <td class="paramname"><em>topology</em></td><td>)</td>
102 <td></td>
103 </tr>
104 </table>
105 </div><div class="memdoc">
106
107 <p>Get allowed node set. </p>
108 <dl class="section return"><dt>Returns</dt><dd>the node set of allowed memory of the system.</dd></dl>
109 <dl class="section note"><dt>Note</dt><dd>If the topology flag <a class="el" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258" title="Detect the whole system, ignore reservations, include disallowed objects.">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a> was not set, this is identical to <a class="el" href="a00211.html#ga3fd37303e99ace8b0d0ea03f95f8c514" title="Get topology node set.">hwloc_topology_get_topology_nodeset()</a>, which means all NUMA nodes are allowed.</dd>
110 <dd>
111 If <a class="el" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258" title="Detect the whole system, ignore reservations, include disallowed objects.">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a> was set, applying <a class="el" href="a00214.html#gaefa070f9232857ba5a57297ea9a08ea2" title="Test whether bitmaps bitmap1 and bitmap2 intersects.">hwloc_bitmap_intersects()</a> on the result of this function and on an object nodeset checks whether there are allowed NUMA nodes inside that object. Applying <a class="el" href="a00214.html#ga674533016ffed922a28b4f0b49b82cd4" title="And bitmaps bitmap1 and bitmap2 and store the result in bitmap res.">hwloc_bitmap_and()</a> returns the list of these allowed NUMA nodes.</dd>
112 <dd>
113 The returned nodeset is not newly allocated and should thus not be changed or freed, <a class="el" href="a00214.html#gae679434c1a5f41d3560a8a7e2c1b0dee" title="Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.">hwloc_bitmap_dup()</a> must be used to obtain a local copy. </dd></dl>
114
115 </div>
116 </div>
117 <a id="gaee30e03391c1ed7dfd617fb5c7bbb033"></a>
118 <h2 class="memtitle"><span class="permalink"><a href="#gaee30e03391c1ed7dfd617fb5c7bbb033">&#9670;&nbsp;</a></span>hwloc_topology_get_complete_cpuset()</h2>
119
120 <div class="memitem">
121 <div class="memproto">
122 <table class="memname">
123 <tr>
124 <td class="memname"><a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> hwloc_topology_get_complete_cpuset </td>
125 <td>(</td>
126 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
127 <td class="paramname"><em>topology</em></td><td>)</td>
128 <td></td>
129 </tr>
130 </table>
131 </div><div class="memdoc">
132
133 <p>Get complete CPU set. </p>
134 <dl class="section return"><dt>Returns</dt><dd>the complete CPU set of processors of the system.</dd></dl>
135 <dl class="section note"><dt>Note</dt><dd>The returned cpuset is not newly allocated and should thus not be changed or freed; <a class="el" href="a00214.html#gae679434c1a5f41d3560a8a7e2c1b0dee" title="Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.">hwloc_bitmap_dup()</a> must be used to obtain a local copy.</dd>
136 <dd>
137 This is equivalent to retrieving the root object complete CPU-set. </dd></dl>
138
139 </div>
140 </div>
141 <a id="ga773fd98949461ef4c1e3170bb0c0418f"></a>
142 <h2 class="memtitle"><span class="permalink"><a href="#ga773fd98949461ef4c1e3170bb0c0418f">&#9670;&nbsp;</a></span>hwloc_topology_get_complete_nodeset()</h2>
143
144 <div class="memitem">
145 <div class="memproto">
146 <table class="memname">
147 <tr>
148 <td class="memname"><a class="el" href="a00192.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> hwloc_topology_get_complete_nodeset </td>
149 <td>(</td>
150 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
151 <td class="paramname"><em>topology</em></td><td>)</td>
152 <td></td>
153 </tr>
154 </table>
155 </div><div class="memdoc">
156
157 <p>Get complete node set. </p>
158 <dl class="section return"><dt>Returns</dt><dd>the complete node set of memory of the system.</dd></dl>
159 <dl class="section note"><dt>Note</dt><dd>The returned nodeset is not newly allocated and should thus not be changed or freed; <a class="el" href="a00214.html#gae679434c1a5f41d3560a8a7e2c1b0dee" title="Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.">hwloc_bitmap_dup()</a> must be used to obtain a local copy.</dd>
160 <dd>
161 This is equivalent to retrieving the root object complete nodeset. </dd></dl>
162
163 </div>
164 </div>
165 <a id="ga79212faa07b70dd26588941b17d9fa82"></a>
166 <h2 class="memtitle"><span class="permalink"><a href="#ga79212faa07b70dd26588941b17d9fa82">&#9670;&nbsp;</a></span>hwloc_topology_get_topology_cpuset()</h2>
167
168 <div class="memitem">
169 <div class="memproto">
170 <table class="memname">
171 <tr>
172 <td class="memname"><a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> hwloc_topology_get_topology_cpuset </td>
173 <td>(</td>
174 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
175 <td class="paramname"><em>topology</em></td><td>)</td>
176 <td></td>
177 </tr>
178 </table>
179 </div><div class="memdoc">
180
181 <p>Get topology CPU set. </p>
182 <dl class="section return"><dt>Returns</dt><dd>the CPU set of processors of the system for which hwloc provides topology information. This is equivalent to the cpuset of the system object.</dd></dl>
183 <dl class="section note"><dt>Note</dt><dd>The returned cpuset is not newly allocated and should thus not be changed or freed; <a class="el" href="a00214.html#gae679434c1a5f41d3560a8a7e2c1b0dee" title="Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.">hwloc_bitmap_dup()</a> must be used to obtain a local copy.</dd>
184 <dd>
185 This is equivalent to retrieving the root object CPU-set. </dd></dl>
186
187 </div>
188 </div>
189 <a id="ga3fd37303e99ace8b0d0ea03f95f8c514"></a>
190 <h2 class="memtitle"><span class="permalink"><a href="#ga3fd37303e99ace8b0d0ea03f95f8c514">&#9670;&nbsp;</a></span>hwloc_topology_get_topology_nodeset()</h2>
191
192 <div class="memitem">
193 <div class="memproto">
194 <table class="memname">
195 <tr>
196 <td class="memname"><a class="el" href="a00192.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> hwloc_topology_get_topology_nodeset </td>
197 <td>(</td>
198 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
199 <td class="paramname"><em>topology</em></td><td>)</td>
200 <td></td>
201 </tr>
202 </table>
203 </div><div class="memdoc">
204
205 <p>Get topology node set. </p>
206 <dl class="section return"><dt>Returns</dt><dd>the node set of memory of the system for which hwloc provides topology information. This is equivalent to the nodeset of the system object.</dd></dl>
207 <dl class="section note"><dt>Note</dt><dd>The returned nodeset is not newly allocated and should thus not be changed or freed; <a class="el" href="a00214.html#gae679434c1a5f41d3560a8a7e2c1b0dee" title="Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.">hwloc_bitmap_dup()</a> must be used to obtain a local copy.</dd>
208 <dd>
209 This is equivalent to retrieving the root object nodeset. </dd></dl>
1789210
1790211 </div>
1791212 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Exporting Topologies to XML</title>
7 <title>Hardware Locality (hwloc): Converting between CPU sets and node sets</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="header">
4141 <div class="summary">
42 <a href="#enum-members">Enumerations</a> &#124;
4342 <a href="#func-members">Functions</a> </div>
4443 <div class="headertitle">
45 <div class="title">Exporting Topologies to XML</div> </div>
44 <div class="title">Converting between CPU sets and node sets</div> </div>
4645 </div><!--header-->
4746 <div class="contents">
4847 <table class="memberdecls">
49 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
50 Enumerations</h2></td></tr>
51 <tr class="memitem:ga0eb99636aff71fe2704e1fa0ffe8c18d"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00212.html#ga0eb99636aff71fe2704e1fa0ffe8c18d">hwloc_topology_export_xml_flags_e</a> { <a class="el" href="a00212.html#gga0eb99636aff71fe2704e1fa0ffe8c18dae7d6d96546131ef0043867b836b02e0f">HWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1</a>
52 }</td></tr>
53 <tr class="separator:ga0eb99636aff71fe2704e1fa0ffe8c18d"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 </table><table class="memberdecls">
5548 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
5649 Functions</h2></td></tr>
57 <tr class="memitem:ga333f79975b4eeb28a3d8fad3373583ce"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00212.html#ga333f79975b4eeb28a3d8fad3373583ce">hwloc_topology_export_xml</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const char *xmlpath, unsigned long flags)</td></tr>
58 <tr class="separator:ga333f79975b4eeb28a3d8fad3373583ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
59 <tr class="memitem:gad33b7f7c11db10459505a3b1634fd3f1"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00212.html#gad33b7f7c11db10459505a3b1634fd3f1">hwloc_topology_export_xmlbuffer</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, char **xmlbuffer, int *buflen, unsigned long flags)</td></tr>
60 <tr class="separator:gad33b7f7c11db10459505a3b1634fd3f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
61 <tr class="memitem:ga293e4a6489f15fd16ad22a5734561cf1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00212.html#ga293e4a6489f15fd16ad22a5734561cf1">hwloc_free_xmlbuffer</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, char *xmlbuffer)</td></tr>
62 <tr class="separator:ga293e4a6489f15fd16ad22a5734561cf1"><td class="memSeparator" colspan="2">&#160;</td></tr>
63 <tr class="memitem:ga9d6ff0f7a8dd45be9aa8575ef31978cc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00212.html#ga9d6ff0f7a8dd45be9aa8575ef31978cc">hwloc_topology_set_userdata_export_callback</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, void(*export_cb)(void *reserved, <a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj))</td></tr>
64 <tr class="separator:ga9d6ff0f7a8dd45be9aa8575ef31978cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
65 <tr class="memitem:gaa541bdd628416dbbe97d0df69d3de958"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00212.html#gaa541bdd628416dbbe97d0df69d3de958">hwloc_export_obj_userdata</a> (void *reserved, <a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj, const char *name, const void *buffer, size_t length)</td></tr>
66 <tr class="separator:gaa541bdd628416dbbe97d0df69d3de958"><td class="memSeparator" colspan="2">&#160;</td></tr>
67 <tr class="memitem:ga1b7358137cec27bd073f58a606ecbaba"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00212.html#ga1b7358137cec27bd073f58a606ecbaba">hwloc_export_obj_userdata_base64</a> (void *reserved, <a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj, const char *name, const void *buffer, size_t length)</td></tr>
68 <tr class="separator:ga1b7358137cec27bd073f58a606ecbaba"><td class="memSeparator" colspan="2">&#160;</td></tr>
69 <tr class="memitem:ga5ac6917ea7289955fb1ffda4353af9b0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00212.html#ga5ac6917ea7289955fb1ffda4353af9b0">hwloc_topology_set_userdata_import_callback</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, void(*import_cb)(<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj, const char *name, const void *buffer, size_t length))</td></tr>
70 <tr class="separator:ga5ac6917ea7289955fb1ffda4353af9b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
50 <tr class="memitem:ga185751c1653fedbeb7cc480840f38cde"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00212.html#ga185751c1653fedbeb7cc480840f38cde">hwloc_cpuset_to_nodeset</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> _cpuset, <a class="el" href="a00192.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a> nodeset)</td></tr>
51 <tr class="separator:ga185751c1653fedbeb7cc480840f38cde"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:gad5ee8691e08a3538ea7633344c00456d"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00212.html#gad5ee8691e08a3538ea7633344c00456d">hwloc_cpuset_from_nodeset</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> _cpuset, <a class="el" href="a00192.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> nodeset)</td></tr>
53 <tr class="separator:gad5ee8691e08a3538ea7633344c00456d"><td class="memSeparator" colspan="2">&#160;</td></tr>
7154 </table>
7255 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
73 <h2 class="groupheader">Enumeration Type Documentation</h2>
74 <a id="ga0eb99636aff71fe2704e1fa0ffe8c18d"></a>
75 <h2 class="memtitle"><span class="permalink"><a href="#ga0eb99636aff71fe2704e1fa0ffe8c18d">&#9670;&nbsp;</a></span>hwloc_topology_export_xml_flags_e</h2>
56 <h2 class="groupheader">Function Documentation</h2>
57 <a id="gad5ee8691e08a3538ea7633344c00456d"></a>
58 <h2 class="memtitle"><span class="permalink"><a href="#gad5ee8691e08a3538ea7633344c00456d">&#9670;&nbsp;</a></span>hwloc_cpuset_from_nodeset()</h2>
7659
7760 <div class="memitem">
7861 <div class="memproto">
62 <table class="mlabels">
63 <tr>
64 <td class="mlabels-left">
7965 <table class="memname">
8066 <tr>
81 <td class="memname">enum <a class="el" href="a00212.html#ga0eb99636aff71fe2704e1fa0ffe8c18d">hwloc_topology_export_xml_flags_e</a></td>
82 </tr>
83 </table>
84 </div><div class="memdoc">
85
86 <p>Flags for exporting XML topologies. </p>
87 <p>Flags to be given as a OR'ed set to <a class="el" href="a00212.html#ga333f79975b4eeb28a3d8fad3373583ce" title="Export the topology into an XML file.">hwloc_topology_export_xml()</a>. </p>
88 <table class="fieldtable">
89 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga0eb99636aff71fe2704e1fa0ffe8c18dae7d6d96546131ef0043867b836b02e0f"></a>HWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1&#160;</td><td class="fielddoc"><p>Export XML that is loadable by hwloc v1.x. However, the export may miss some details about the topology. </p>
90 </td></tr>
91 </table>
92
93 </div>
94 </div>
95 <h2 class="groupheader">Function Documentation</h2>
96 <a id="gaa541bdd628416dbbe97d0df69d3de958"></a>
97 <h2 class="memtitle"><span class="permalink"><a href="#gaa541bdd628416dbbe97d0df69d3de958">&#9670;&nbsp;</a></span>hwloc_export_obj_userdata()</h2>
98
99 <div class="memitem">
100 <div class="memproto">
101 <table class="memname">
102 <tr>
103 <td class="memname">int hwloc_export_obj_userdata </td>
67 <td class="memname">static int hwloc_cpuset_from_nodeset </td>
10468 <td>(</td>
105 <td class="paramtype">void *&#160;</td>
106 <td class="paramname"><em>reserved</em>, </td>
107 </tr>
108 <tr>
109 <td class="paramkey"></td>
110 <td></td>
111 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
69 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
11270 <td class="paramname"><em>topology</em>, </td>
11371 </tr>
11472 <tr>
11573 <td class="paramkey"></td>
11674 <td></td>
117 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
118 <td class="paramname"><em>obj</em>, </td>
75 <td class="paramtype"><a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
76 <td class="paramname"><em>_cpuset</em>, </td>
11977 </tr>
12078 <tr>
12179 <td class="paramkey"></td>
12280 <td></td>
123 <td class="paramtype">const char *&#160;</td>
124 <td class="paramname"><em>name</em>, </td>
125 </tr>
126 <tr>
127 <td class="paramkey"></td>
128 <td></td>
129 <td class="paramtype">const void *&#160;</td>
130 <td class="paramname"><em>buffer</em>, </td>
131 </tr>
132 <tr>
133 <td class="paramkey"></td>
134 <td></td>
135 <td class="paramtype">size_t&#160;</td>
136 <td class="paramname"><em>length</em>&#160;</td>
81 <td class="paramtype"><a class="el" href="a00192.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a>&#160;</td>
82 <td class="paramname"><em>nodeset</em>&#160;</td>
13783 </tr>
13884 <tr>
13985 <td></td>
14187 <td></td><td></td>
14288 </tr>
14389 </table>
90 </td>
91 <td class="mlabels-right">
92 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
93 </tr>
94 </table>
14495 </div><div class="memdoc">
14596
146 <p>Export some object userdata to XML. </p>
147 <p>This function may only be called from within the export() callback passed to <a class="el" href="a00212.html#ga9d6ff0f7a8dd45be9aa8575ef31978cc" title="Set the application-specific callback for exporting object userdata.">hwloc_topology_set_userdata_export_callback()</a>. It may be invoked one of multiple times to export some userdata to XML. The <code>buffer</code> content of length <code>length</code> is stored with optional name <code>name</code>.</p>
148 <p>When importing this XML file, the import() callback (if set) will be called exactly as many times as <a class="el" href="a00212.html#gaa541bdd628416dbbe97d0df69d3de958" title="Export some object userdata to XML.">hwloc_export_obj_userdata()</a> was called during export(). It will receive the corresponding <code>name</code>, <code>buffer</code> and <code>length</code> arguments.</p>
149 <p><code>reserved</code>, <code>topology</code> and <code>obj</code> must be the first three parameters that were given to the export callback.</p>
150 <p>Only printable characters may be exported to XML string attributes. If a non-printable character is passed in <code>name</code> or <code>buffer</code>, the function returns -1 with errno set to EINVAL.</p>
151 <p>If exporting binary data, the application should first encode into printable characters only (or use <a class="el" href="a00212.html#ga1b7358137cec27bd073f58a606ecbaba" title="Encode and export some object userdata to XML.">hwloc_export_obj_userdata_base64()</a>). It should also take care of portability issues if the export may be reimported on a different architecture. </p>
97 <p>Convert a NUMA node set into a CPU set. </p>
98 <p>For each NUMA node included in the input <code>nodeset</code>, set the corresponding local PUs in the output <code>_cpuset</code>.</p>
99 <p>If some CPUs have no local NUMA nodes, this function never sets their indexes in the output CPU set, even if a full node set is given in input.</p>
100 <p>Hence the entire topology node set is converted into the set of all CPUs that have some local NUMA nodes. </p>
152101
153102 </div>
154103 </div>
155 <a id="ga1b7358137cec27bd073f58a606ecbaba"></a>
156 <h2 class="memtitle"><span class="permalink"><a href="#ga1b7358137cec27bd073f58a606ecbaba">&#9670;&nbsp;</a></span>hwloc_export_obj_userdata_base64()</h2>
104 <a id="ga185751c1653fedbeb7cc480840f38cde"></a>
105 <h2 class="memtitle"><span class="permalink"><a href="#ga185751c1653fedbeb7cc480840f38cde">&#9670;&nbsp;</a></span>hwloc_cpuset_to_nodeset()</h2>
157106
158107 <div class="memitem">
159108 <div class="memproto">
109 <table class="mlabels">
110 <tr>
111 <td class="mlabels-left">
160112 <table class="memname">
161113 <tr>
162 <td class="memname">int hwloc_export_obj_userdata_base64 </td>
114 <td class="memname">static int hwloc_cpuset_to_nodeset </td>
163115 <td>(</td>
164 <td class="paramtype">void *&#160;</td>
165 <td class="paramname"><em>reserved</em>, </td>
166 </tr>
167 <tr>
168 <td class="paramkey"></td>
169 <td></td>
170 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
116 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
171117 <td class="paramname"><em>topology</em>, </td>
172118 </tr>
173119 <tr>
174120 <td class="paramkey"></td>
175121 <td></td>
176 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
177 <td class="paramname"><em>obj</em>, </td>
122 <td class="paramtype"><a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
123 <td class="paramname"><em>_cpuset</em>, </td>
178124 </tr>
179125 <tr>
180126 <td class="paramkey"></td>
181127 <td></td>
182 <td class="paramtype">const char *&#160;</td>
183 <td class="paramname"><em>name</em>, </td>
184 </tr>
185 <tr>
186 <td class="paramkey"></td>
187 <td></td>
188 <td class="paramtype">const void *&#160;</td>
189 <td class="paramname"><em>buffer</em>, </td>
190 </tr>
191 <tr>
192 <td class="paramkey"></td>
193 <td></td>
194 <td class="paramtype">size_t&#160;</td>
195 <td class="paramname"><em>length</em>&#160;</td>
128 <td class="paramtype"><a class="el" href="a00192.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a>&#160;</td>
129 <td class="paramname"><em>nodeset</em>&#160;</td>
196130 </tr>
197131 <tr>
198132 <td></td>
200134 <td></td><td></td>
201135 </tr>
202136 </table>
137 </td>
138 <td class="mlabels-right">
139 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
140 </tr>
141 </table>
203142 </div><div class="memdoc">
204143
205 <p>Encode and export some object userdata to XML. </p>
206 <p>This function is similar to <a class="el" href="a00212.html#gaa541bdd628416dbbe97d0df69d3de958" title="Export some object userdata to XML.">hwloc_export_obj_userdata()</a> but it encodes the input buffer into printable characters before exporting. On import, decoding is automatically performed before the data is given to the import() callback if any.</p>
207 <p>This function may only be called from within the export() callback passed to <a class="el" href="a00212.html#ga9d6ff0f7a8dd45be9aa8575ef31978cc" title="Set the application-specific callback for exporting object userdata.">hwloc_topology_set_userdata_export_callback()</a>.</p>
208 <p>The function does not take care of portability issues if the export may be reimported on a different architecture. </p>
209
210 </div>
211 </div>
212 <a id="ga293e4a6489f15fd16ad22a5734561cf1"></a>
213 <h2 class="memtitle"><span class="permalink"><a href="#ga293e4a6489f15fd16ad22a5734561cf1">&#9670;&nbsp;</a></span>hwloc_free_xmlbuffer()</h2>
214
215 <div class="memitem">
216 <div class="memproto">
217 <table class="memname">
218 <tr>
219 <td class="memname">void hwloc_free_xmlbuffer </td>
220 <td>(</td>
221 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
222 <td class="paramname"><em>topology</em>, </td>
223 </tr>
224 <tr>
225 <td class="paramkey"></td>
226 <td></td>
227 <td class="paramtype">char *&#160;</td>
228 <td class="paramname"><em>xmlbuffer</em>&#160;</td>
229 </tr>
230 <tr>
231 <td></td>
232 <td>)</td>
233 <td></td><td></td>
234 </tr>
235 </table>
236 </div><div class="memdoc">
237
238 <p>Free a buffer allocated by <a class="el" href="a00212.html#gad33b7f7c11db10459505a3b1634fd3f1" title="Export the topology into a newly-allocated XML memory buffer.">hwloc_topology_export_xmlbuffer()</a> </p>
239
240 </div>
241 </div>
242 <a id="ga333f79975b4eeb28a3d8fad3373583ce"></a>
243 <h2 class="memtitle"><span class="permalink"><a href="#ga333f79975b4eeb28a3d8fad3373583ce">&#9670;&nbsp;</a></span>hwloc_topology_export_xml()</h2>
244
245 <div class="memitem">
246 <div class="memproto">
247 <table class="memname">
248 <tr>
249 <td class="memname">int hwloc_topology_export_xml </td>
250 <td>(</td>
251 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
252 <td class="paramname"><em>topology</em>, </td>
253 </tr>
254 <tr>
255 <td class="paramkey"></td>
256 <td></td>
257 <td class="paramtype">const char *&#160;</td>
258 <td class="paramname"><em>xmlpath</em>, </td>
259 </tr>
260 <tr>
261 <td class="paramkey"></td>
262 <td></td>
263 <td class="paramtype">unsigned long&#160;</td>
264 <td class="paramname"><em>flags</em>&#160;</td>
265 </tr>
266 <tr>
267 <td></td>
268 <td>)</td>
269 <td></td><td></td>
270 </tr>
271 </table>
272 </div><div class="memdoc">
273
274 <p>Export the topology into an XML file. </p>
275 <p>This file may be loaded later through <a class="el" href="a00198.html#ga879439b7ee99407ee911b3ac64e9a25e" title="Enable XML-file based topology.">hwloc_topology_set_xml()</a>.</p>
276 <p>By default, the latest export format is used, which means older hwloc releases (e.g. v1.x) will not be able to import it. Exporting to v1.x specific XML format is possible using flag <a class="el" href="a00212.html#gga0eb99636aff71fe2704e1fa0ffe8c18dae7d6d96546131ef0043867b836b02e0f" title="Export XML that is loadable by hwloc v1.x. However, the export may miss some details about the topolo...">HWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1</a> but it may miss some details about the topology. If there is any chance that the exported file may ever be imported back by a process using hwloc 1.x, one should consider detecting it at runtime and using the corresponding export format.</p>
277 <p><code>flags</code> is a OR'ed set of <a class="el" href="a00212.html#ga0eb99636aff71fe2704e1fa0ffe8c18d" title="Flags for exporting XML topologies.">hwloc_topology_export_xml_flags_e</a>.</p>
278 <dl class="section return"><dt>Returns</dt><dd>-1 if a failure occured.</dd></dl>
279 <dl class="section note"><dt>Note</dt><dd>See also <a class="el" href="a00212.html#ga9d6ff0f7a8dd45be9aa8575ef31978cc" title="Set the application-specific callback for exporting object userdata.">hwloc_topology_set_userdata_export_callback()</a> for exporting application-specific object userdata.</dd>
280 <dd>
281 The topology-specific userdata pointer is ignored when exporting to XML.</dd>
282 <dd>
283 Only printable characters may be exported to XML string attributes. Any other character, especially any non-ASCII character, will be silently dropped.</dd>
284 <dd>
285 If <code>name</code> is "-", the XML output is sent to the standard output. </dd></dl>
286
287 </div>
288 </div>
289 <a id="gad33b7f7c11db10459505a3b1634fd3f1"></a>
290 <h2 class="memtitle"><span class="permalink"><a href="#gad33b7f7c11db10459505a3b1634fd3f1">&#9670;&nbsp;</a></span>hwloc_topology_export_xmlbuffer()</h2>
291
292 <div class="memitem">
293 <div class="memproto">
294 <table class="memname">
295 <tr>
296 <td class="memname">int hwloc_topology_export_xmlbuffer </td>
297 <td>(</td>
298 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
299 <td class="paramname"><em>topology</em>, </td>
300 </tr>
301 <tr>
302 <td class="paramkey"></td>
303 <td></td>
304 <td class="paramtype">char **&#160;</td>
305 <td class="paramname"><em>xmlbuffer</em>, </td>
306 </tr>
307 <tr>
308 <td class="paramkey"></td>
309 <td></td>
310 <td class="paramtype">int *&#160;</td>
311 <td class="paramname"><em>buflen</em>, </td>
312 </tr>
313 <tr>
314 <td class="paramkey"></td>
315 <td></td>
316 <td class="paramtype">unsigned long&#160;</td>
317 <td class="paramname"><em>flags</em>&#160;</td>
318 </tr>
319 <tr>
320 <td></td>
321 <td>)</td>
322 <td></td><td></td>
323 </tr>
324 </table>
325 </div><div class="memdoc">
326
327 <p>Export the topology into a newly-allocated XML memory buffer. </p>
328 <p><code>xmlbuffer</code> is allocated by the callee and should be freed with <a class="el" href="a00212.html#ga293e4a6489f15fd16ad22a5734561cf1" title="Free a buffer allocated by hwloc_topology_export_xmlbuffer()">hwloc_free_xmlbuffer()</a> later in the caller.</p>
329 <p>This memory buffer may be loaded later through <a class="el" href="a00198.html#ga2745616b65595e1c1e579ecc7e461fa8" title="Enable XML based topology using a memory buffer (instead of a file, as with hwloc_topology_set_xml())...">hwloc_topology_set_xmlbuffer()</a>.</p>
330 <p>By default, the latest export format is used, which means older hwloc releases (e.g. v1.x) will not be able to import it. Exporting to v1.x specific XML format is possible using flag <a class="el" href="a00212.html#gga0eb99636aff71fe2704e1fa0ffe8c18dae7d6d96546131ef0043867b836b02e0f" title="Export XML that is loadable by hwloc v1.x. However, the export may miss some details about the topolo...">HWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1</a> but it may miss some details about the topology. If there is any chance that the exported buffer may ever be imported back by a process using hwloc 1.x, one should consider detecting it at runtime and using the corresponding export format.</p>
331 <p>The returned buffer ends with a \0 that is included in the returned length.</p>
332 <p><code>flags</code> is a OR'ed set of <a class="el" href="a00212.html#ga0eb99636aff71fe2704e1fa0ffe8c18d" title="Flags for exporting XML topologies.">hwloc_topology_export_xml_flags_e</a>.</p>
333 <dl class="section return"><dt>Returns</dt><dd>-1 if a failure occured.</dd></dl>
334 <dl class="section note"><dt>Note</dt><dd>See also <a class="el" href="a00212.html#ga9d6ff0f7a8dd45be9aa8575ef31978cc" title="Set the application-specific callback for exporting object userdata.">hwloc_topology_set_userdata_export_callback()</a> for exporting application-specific object userdata.</dd>
335 <dd>
336 The topology-specific userdata pointer is ignored when exporting to XML.</dd>
337 <dd>
338 Only printable characters may be exported to XML string attributes. Any other character, especially any non-ASCII character, will be silently dropped. </dd></dl>
339
340 </div>
341 </div>
342 <a id="ga9d6ff0f7a8dd45be9aa8575ef31978cc"></a>
343 <h2 class="memtitle"><span class="permalink"><a href="#ga9d6ff0f7a8dd45be9aa8575ef31978cc">&#9670;&nbsp;</a></span>hwloc_topology_set_userdata_export_callback()</h2>
344
345 <div class="memitem">
346 <div class="memproto">
347 <table class="memname">
348 <tr>
349 <td class="memname">void hwloc_topology_set_userdata_export_callback </td>
350 <td>(</td>
351 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
352 <td class="paramname"><em>topology</em>, </td>
353 </tr>
354 <tr>
355 <td class="paramkey"></td>
356 <td></td>
357 <td class="paramtype">void(*)(void *reserved, <a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj)&#160;</td>
358 <td class="paramname"><em>export_cb</em>&#160;</td>
359 </tr>
360 <tr>
361 <td></td>
362 <td>)</td>
363 <td></td><td></td>
364 </tr>
365 </table>
366 </div><div class="memdoc">
367
368 <p>Set the application-specific callback for exporting object userdata. </p>
369 <p>The object userdata pointer is not exported to XML by default because hwloc does not know what it contains.</p>
370 <p>This function lets applications set <code>export_cb</code> to a callback function that converts this opaque userdata into an exportable string.</p>
371 <p><code>export_cb</code> is invoked during XML export for each object whose <code>userdata</code> pointer is not <code>NULL</code>. The callback should use <a class="el" href="a00212.html#gaa541bdd628416dbbe97d0df69d3de958" title="Export some object userdata to XML.">hwloc_export_obj_userdata()</a> or <a class="el" href="a00212.html#ga1b7358137cec27bd073f58a606ecbaba" title="Encode and export some object userdata to XML.">hwloc_export_obj_userdata_base64()</a> to actually export something to XML (possibly multiple times per object).</p>
372 <p><code>export_cb</code> may be set to <code>NULL</code> if userdata should not be exported to XML.</p>
373 <dl class="section note"><dt>Note</dt><dd>The topology-specific userdata pointer is ignored when exporting to XML. </dd></dl>
374
375 </div>
376 </div>
377 <a id="ga5ac6917ea7289955fb1ffda4353af9b0"></a>
378 <h2 class="memtitle"><span class="permalink"><a href="#ga5ac6917ea7289955fb1ffda4353af9b0">&#9670;&nbsp;</a></span>hwloc_topology_set_userdata_import_callback()</h2>
379
380 <div class="memitem">
381 <div class="memproto">
382 <table class="memname">
383 <tr>
384 <td class="memname">void hwloc_topology_set_userdata_import_callback </td>
385 <td>(</td>
386 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
387 <td class="paramname"><em>topology</em>, </td>
388 </tr>
389 <tr>
390 <td class="paramkey"></td>
391 <td></td>
392 <td class="paramtype">void(*)(<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj, const char *name, const void *buffer, size_t length)&#160;</td>
393 <td class="paramname"><em>import_cb</em>&#160;</td>
394 </tr>
395 <tr>
396 <td></td>
397 <td>)</td>
398 <td></td><td></td>
399 </tr>
400 </table>
401 </div><div class="memdoc">
402
403 <p>Set the application-specific callback for importing userdata. </p>
404 <p>On XML import, userdata is ignored by default because hwloc does not know how to store it in memory.</p>
405 <p>This function lets applications set <code>import_cb</code> to a callback function that will get the XML-stored userdata and store it in the object as expected by the application.</p>
406 <p><code>import_cb</code> is called during <a class="el" href="a00192.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a> as many times as <a class="el" href="a00212.html#gaa541bdd628416dbbe97d0df69d3de958" title="Export some object userdata to XML.">hwloc_export_obj_userdata()</a> was called during export. The topology is not entirely setup yet. Object attributes are ready to consult, but links between objects are not.</p>
407 <p><code>import_cb</code> may be <code>NULL</code> if userdata should be ignored during import.</p>
408 <dl class="section note"><dt>Note</dt><dd><code>buffer</code> contains <code>length</code> characters followed by a null byte ('\0').</dd>
409 <dd>
410 This function should be called before <a class="el" href="a00192.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a>.</dd>
411 <dd>
412 The topology-specific userdata pointer is ignored when importing from XML. </dd></dl>
144 <p>Convert a CPU set into a NUMA node set. </p>
145 <p>For each PU included in the input <code>_cpuset</code>, set the corresponding local NUMA node(s) in the output <code>nodeset</code>.</p>
146 <p>If some NUMA nodes have no CPUs at all, this function never sets their indexes in the output node set, even if a full CPU set is given in input.</p>
147 <p>Hence the entire topology CPU set is converted into the set of all nodes that have some local CPUs. </p>
413148
414149 </div>
415150 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Exporting Topologies to Synthetic</title>
7 <title>Hardware Locality (hwloc): Finding I/O objects</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="header">
4141 <div class="summary">
42 <a href="#enum-members">Enumerations</a> &#124;
4342 <a href="#func-members">Functions</a> </div>
4443 <div class="headertitle">
45 <div class="title">Exporting Topologies to Synthetic</div> </div>
44 <div class="title">Finding I/O objects</div> </div>
4645 </div><!--header-->
4746 <div class="contents">
4847 <table class="memberdecls">
49 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
50 Enumerations</h2></td></tr>
51 <tr class="memitem:ga7ac6f97cc40bd50c40285084f869ba63"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00213.html#ga7ac6f97cc40bd50c40285084f869ba63">hwloc_topology_export_synthetic_flags_e</a> { <a class="el" href="a00213.html#gga7ac6f97cc40bd50c40285084f869ba63a3b3bd4ba2ef9990810865e561034ccc9">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_EXTENDED_TYPES</a>
52 , <a class="el" href="a00213.html#gga7ac6f97cc40bd50c40285084f869ba63aaa2702ffba050bab079b3041aec737d4">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_ATTRS</a>
53 , <a class="el" href="a00213.html#gga7ac6f97cc40bd50c40285084f869ba63a7896bdf4ccfcdcd09a9f76c0f5e3a5b8">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_V1</a>
54 , <a class="el" href="a00213.html#gga7ac6f97cc40bd50c40285084f869ba63a22c57cf18e1da4a6c584fb783b552f9f">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_IGNORE_MEMORY</a>
55 }</td></tr>
56 <tr class="separator:ga7ac6f97cc40bd50c40285084f869ba63"><td class="memSeparator" colspan="2">&#160;</td></tr>
57 </table><table class="memberdecls">
5848 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
5949 Functions</h2></td></tr>
60 <tr class="memitem:ga24b7864a1c588309c4749f621f03b4c7"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00213.html#ga24b7864a1c588309c4749f621f03b4c7">hwloc_topology_export_synthetic</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, char *buffer, size_t buflen, unsigned long flags)</td></tr>
61 <tr class="separator:ga24b7864a1c588309c4749f621f03b4c7"><td class="memSeparator" colspan="2">&#160;</td></tr>
50 <tr class="memitem:gaf139bb61375178e90cc3f1835b452ab6"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00213.html#gaf139bb61375178e90cc3f1835b452ab6">hwloc_get_non_io_ancestor_obj</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> ioobj)</td></tr>
51 <tr class="separator:gaf139bb61375178e90cc3f1835b452ab6"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:ga66470dabce9db19a57c5940a909d0baa"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00213.html#ga66470dabce9db19a57c5940a909d0baa">hwloc_get_next_pcidev</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> prev)</td></tr>
53 <tr class="separator:ga66470dabce9db19a57c5940a909d0baa"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:gacdbaf0db98872e224b7883a84bfb0455"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00213.html#gacdbaf0db98872e224b7883a84bfb0455">hwloc_get_pcidev_by_busid</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)</td></tr>
55 <tr class="separator:gacdbaf0db98872e224b7883a84bfb0455"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:ga23a978469353134b3104b846fe2efceb"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00213.html#ga23a978469353134b3104b846fe2efceb">hwloc_get_pcidev_by_busidstring</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const char *busid)</td></tr>
57 <tr class="separator:ga23a978469353134b3104b846fe2efceb"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:ga8b4584c8949e2c5f1c97ba7fe92b8145"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00213.html#ga8b4584c8949e2c5f1c97ba7fe92b8145">hwloc_get_next_osdev</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> prev)</td></tr>
59 <tr class="separator:ga8b4584c8949e2c5f1c97ba7fe92b8145"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:ga9dba22a3f4f701f2a46780ba9a0bbbe7"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00213.html#ga9dba22a3f4f701f2a46780ba9a0bbbe7">hwloc_get_next_bridge</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> prev)</td></tr>
61 <tr class="separator:ga9dba22a3f4f701f2a46780ba9a0bbbe7"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:ga0d92a9462a3d317f29ecb4442a307fb1"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00213.html#ga0d92a9462a3d317f29ecb4442a307fb1">hwloc_bridge_covers_pcibus</a> (<a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> bridge, unsigned domain, unsigned bus)</td></tr>
63 <tr class="separator:ga0d92a9462a3d317f29ecb4442a307fb1"><td class="memSeparator" colspan="2">&#160;</td></tr>
6264 </table>
6365 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
64 <h2 class="groupheader">Enumeration Type Documentation</h2>
65 <a id="ga7ac6f97cc40bd50c40285084f869ba63"></a>
66 <h2 class="memtitle"><span class="permalink"><a href="#ga7ac6f97cc40bd50c40285084f869ba63">&#9670;&nbsp;</a></span>hwloc_topology_export_synthetic_flags_e</h2>
67
68 <div class="memitem">
69 <div class="memproto">
70 <table class="memname">
71 <tr>
72 <td class="memname">enum <a class="el" href="a00213.html#ga7ac6f97cc40bd50c40285084f869ba63">hwloc_topology_export_synthetic_flags_e</a></td>
73 </tr>
74 </table>
75 </div><div class="memdoc">
76
77 <p>Flags for exporting synthetic topologies. </p>
78 <p>Flags to be given as a OR'ed set to <a class="el" href="a00213.html#ga24b7864a1c588309c4749f621f03b4c7" title="Export the topology as a synthetic string.">hwloc_topology_export_synthetic()</a>. </p>
79 <table class="fieldtable">
80 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga7ac6f97cc40bd50c40285084f869ba63a3b3bd4ba2ef9990810865e561034ccc9"></a>HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_EXTENDED_TYPES&#160;</td><td class="fielddoc"><p>Export extended types such as L2dcache as basic types such as Cache. </p>
81 <p>This is required if loading the synthetic description with hwloc &lt; 1.9. </p>
82 </td></tr>
83 <tr><td class="fieldname"><a id="gga7ac6f97cc40bd50c40285084f869ba63aaa2702ffba050bab079b3041aec737d4"></a>HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_ATTRS&#160;</td><td class="fielddoc"><p>Do not export level attributes. </p>
84 <p>Ignore level attributes such as memory/cache sizes or PU indexes. This is required if loading the synthetic description with hwloc &lt; 1.10. </p>
85 </td></tr>
86 <tr><td class="fieldname"><a id="gga7ac6f97cc40bd50c40285084f869ba63a7896bdf4ccfcdcd09a9f76c0f5e3a5b8"></a>HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_V1&#160;</td><td class="fielddoc"><p>Export the memory hierarchy as expected in hwloc 1.x. </p>
87 <p>Instead of attaching memory children to levels, export single NUMA node child as normal intermediate levels, when possible. This is required if loading the synthetic description with hwloc 1.x. However this may fail if some objects have multiple local NUMA nodes. </p>
88 </td></tr>
89 <tr><td class="fieldname"><a id="gga7ac6f97cc40bd50c40285084f869ba63a22c57cf18e1da4a6c584fb783b552f9f"></a>HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_IGNORE_MEMORY&#160;</td><td class="fielddoc"><p>Do not export memory information. </p>
90 <p>Only export the actual hierarchy of normal CPU-side objects and ignore where memory is attached. This is useful for when the hierarchy of CPUs is what really matters, but it behaves as if there was a single machine-wide NUMA node. </p>
91 </td></tr>
92 </table>
93
94 </div>
95 </div>
9666 <h2 class="groupheader">Function Documentation</h2>
97 <a id="ga24b7864a1c588309c4749f621f03b4c7"></a>
98 <h2 class="memtitle"><span class="permalink"><a href="#ga24b7864a1c588309c4749f621f03b4c7">&#9670;&nbsp;</a></span>hwloc_topology_export_synthetic()</h2>
99
100 <div class="memitem">
101 <div class="memproto">
102 <table class="memname">
103 <tr>
104 <td class="memname">int hwloc_topology_export_synthetic </td>
105 <td>(</td>
106 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
107 <td class="paramname"><em>topology</em>, </td>
108 </tr>
109 <tr>
110 <td class="paramkey"></td>
111 <td></td>
112 <td class="paramtype">char *&#160;</td>
113 <td class="paramname"><em>buffer</em>, </td>
114 </tr>
115 <tr>
116 <td class="paramkey"></td>
117 <td></td>
118 <td class="paramtype">size_t&#160;</td>
119 <td class="paramname"><em>buflen</em>, </td>
120 </tr>
121 <tr>
122 <td class="paramkey"></td>
123 <td></td>
124 <td class="paramtype">unsigned long&#160;</td>
125 <td class="paramname"><em>flags</em>&#160;</td>
126 </tr>
127 <tr>
128 <td></td>
129 <td>)</td>
130 <td></td><td></td>
131 </tr>
132 </table>
133 </div><div class="memdoc">
134
135 <p>Export the topology as a synthetic string. </p>
136 <p>At most <code>buflen</code> characters will be written in <code>buffer</code>, including the terminating \0.</p>
137 <p>This exported string may be given back to <a class="el" href="a00198.html#ga4fab186bb6181a00bcf585825fddd38d" title="Enable synthetic topology.">hwloc_topology_set_synthetic()</a>.</p>
138 <p><code>flags</code> is a OR'ed set of <a class="el" href="a00213.html#ga7ac6f97cc40bd50c40285084f869ba63" title="Flags for exporting synthetic topologies.">hwloc_topology_export_synthetic_flags_e</a>.</p>
139 <dl class="section return"><dt>Returns</dt><dd>The number of characters that were written, not including the terminating \0.</dd>
140 <dd>
141 -1 if the topology could not be exported, for instance if it is not symmetric.</dd></dl>
142 <dl class="section note"><dt>Note</dt><dd>I/O and Misc children are ignored, the synthetic string only describes normal children.</dd>
143 <dd>
144 A 1024-byte buffer should be large enough for exporting topologies in the vast majority of cases. </dd></dl>
67 <a id="ga0d92a9462a3d317f29ecb4442a307fb1"></a>
68 <h2 class="memtitle"><span class="permalink"><a href="#ga0d92a9462a3d317f29ecb4442a307fb1">&#9670;&nbsp;</a></span>hwloc_bridge_covers_pcibus()</h2>
69
70 <div class="memitem">
71 <div class="memproto">
72 <table class="mlabels">
73 <tr>
74 <td class="mlabels-left">
75 <table class="memname">
76 <tr>
77 <td class="memname">static int hwloc_bridge_covers_pcibus </td>
78 <td>(</td>
79 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
80 <td class="paramname"><em>bridge</em>, </td>
81 </tr>
82 <tr>
83 <td class="paramkey"></td>
84 <td></td>
85 <td class="paramtype">unsigned&#160;</td>
86 <td class="paramname"><em>domain</em>, </td>
87 </tr>
88 <tr>
89 <td class="paramkey"></td>
90 <td></td>
91 <td class="paramtype">unsigned&#160;</td>
92 <td class="paramname"><em>bus</em>&#160;</td>
93 </tr>
94 <tr>
95 <td></td>
96 <td>)</td>
97 <td></td><td></td>
98 </tr>
99 </table>
100 </td>
101 <td class="mlabels-right">
102 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
103 </tr>
104 </table>
105 </div><div class="memdoc">
106
107 </div>
108 </div>
109 <a id="ga9dba22a3f4f701f2a46780ba9a0bbbe7"></a>
110 <h2 class="memtitle"><span class="permalink"><a href="#ga9dba22a3f4f701f2a46780ba9a0bbbe7">&#9670;&nbsp;</a></span>hwloc_get_next_bridge()</h2>
111
112 <div class="memitem">
113 <div class="memproto">
114 <table class="mlabels">
115 <tr>
116 <td class="mlabels-left">
117 <table class="memname">
118 <tr>
119 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_next_bridge </td>
120 <td>(</td>
121 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
122 <td class="paramname"><em>topology</em>, </td>
123 </tr>
124 <tr>
125 <td class="paramkey"></td>
126 <td></td>
127 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
128 <td class="paramname"><em>prev</em>&#160;</td>
129 </tr>
130 <tr>
131 <td></td>
132 <td>)</td>
133 <td></td><td></td>
134 </tr>
135 </table>
136 </td>
137 <td class="mlabels-right">
138 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
139 </tr>
140 </table>
141 </div><div class="memdoc">
142
143 <p>Get the next bridge in the system. </p>
144 <dl class="section return"><dt>Returns</dt><dd>the first bridge if <code>prev</code> is <code>NULL</code>. </dd></dl>
145
146 </div>
147 </div>
148 <a id="ga8b4584c8949e2c5f1c97ba7fe92b8145"></a>
149 <h2 class="memtitle"><span class="permalink"><a href="#ga8b4584c8949e2c5f1c97ba7fe92b8145">&#9670;&nbsp;</a></span>hwloc_get_next_osdev()</h2>
150
151 <div class="memitem">
152 <div class="memproto">
153 <table class="mlabels">
154 <tr>
155 <td class="mlabels-left">
156 <table class="memname">
157 <tr>
158 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_next_osdev </td>
159 <td>(</td>
160 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
161 <td class="paramname"><em>topology</em>, </td>
162 </tr>
163 <tr>
164 <td class="paramkey"></td>
165 <td></td>
166 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
167 <td class="paramname"><em>prev</em>&#160;</td>
168 </tr>
169 <tr>
170 <td></td>
171 <td>)</td>
172 <td></td><td></td>
173 </tr>
174 </table>
175 </td>
176 <td class="mlabels-right">
177 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
178 </tr>
179 </table>
180 </div><div class="memdoc">
181
182 <p>Get the next OS device in the system. </p>
183 <dl class="section return"><dt>Returns</dt><dd>the first OS device if <code>prev</code> is <code>NULL</code>. </dd></dl>
184
185 </div>
186 </div>
187 <a id="ga66470dabce9db19a57c5940a909d0baa"></a>
188 <h2 class="memtitle"><span class="permalink"><a href="#ga66470dabce9db19a57c5940a909d0baa">&#9670;&nbsp;</a></span>hwloc_get_next_pcidev()</h2>
189
190 <div class="memitem">
191 <div class="memproto">
192 <table class="mlabels">
193 <tr>
194 <td class="mlabels-left">
195 <table class="memname">
196 <tr>
197 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_next_pcidev </td>
198 <td>(</td>
199 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
200 <td class="paramname"><em>topology</em>, </td>
201 </tr>
202 <tr>
203 <td class="paramkey"></td>
204 <td></td>
205 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
206 <td class="paramname"><em>prev</em>&#160;</td>
207 </tr>
208 <tr>
209 <td></td>
210 <td>)</td>
211 <td></td><td></td>
212 </tr>
213 </table>
214 </td>
215 <td class="mlabels-right">
216 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
217 </tr>
218 </table>
219 </div><div class="memdoc">
220
221 <p>Get the next PCI device in the system. </p>
222 <dl class="section return"><dt>Returns</dt><dd>the first PCI device if <code>prev</code> is <code>NULL</code>. </dd></dl>
223
224 </div>
225 </div>
226 <a id="gaf139bb61375178e90cc3f1835b452ab6"></a>
227 <h2 class="memtitle"><span class="permalink"><a href="#gaf139bb61375178e90cc3f1835b452ab6">&#9670;&nbsp;</a></span>hwloc_get_non_io_ancestor_obj()</h2>
228
229 <div class="memitem">
230 <div class="memproto">
231 <table class="mlabels">
232 <tr>
233 <td class="mlabels-left">
234 <table class="memname">
235 <tr>
236 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_non_io_ancestor_obj </td>
237 <td>(</td>
238 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
239 <td class="paramname"><em>topology</em>, </td>
240 </tr>
241 <tr>
242 <td class="paramkey"></td>
243 <td></td>
244 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
245 <td class="paramname"><em>ioobj</em>&#160;</td>
246 </tr>
247 <tr>
248 <td></td>
249 <td>)</td>
250 <td></td><td></td>
251 </tr>
252 </table>
253 </td>
254 <td class="mlabels-right">
255 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
256 </tr>
257 </table>
258 </div><div class="memdoc">
259
260 <p>Get the first non-I/O ancestor object. </p>
261 <p>Given the I/O object <code>ioobj</code>, find the smallest non-I/O ancestor object. This object (normal or memory) may then be used for binding because it has non-NULL CPU and node sets and because its locality is the same as <code>ioobj</code>.</p>
262 <dl class="section note"><dt>Note</dt><dd>The resulting object is usually a normal object but it could also be a memory object (e.g. NUMA node) in future platforms if I/O objects ever get attached to memory instead of CPUs. </dd></dl>
263
264 </div>
265 </div>
266 <a id="gacdbaf0db98872e224b7883a84bfb0455"></a>
267 <h2 class="memtitle"><span class="permalink"><a href="#gacdbaf0db98872e224b7883a84bfb0455">&#9670;&nbsp;</a></span>hwloc_get_pcidev_by_busid()</h2>
268
269 <div class="memitem">
270 <div class="memproto">
271 <table class="mlabels">
272 <tr>
273 <td class="mlabels-left">
274 <table class="memname">
275 <tr>
276 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_pcidev_by_busid </td>
277 <td>(</td>
278 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
279 <td class="paramname"><em>topology</em>, </td>
280 </tr>
281 <tr>
282 <td class="paramkey"></td>
283 <td></td>
284 <td class="paramtype">unsigned&#160;</td>
285 <td class="paramname"><em>domain</em>, </td>
286 </tr>
287 <tr>
288 <td class="paramkey"></td>
289 <td></td>
290 <td class="paramtype">unsigned&#160;</td>
291 <td class="paramname"><em>bus</em>, </td>
292 </tr>
293 <tr>
294 <td class="paramkey"></td>
295 <td></td>
296 <td class="paramtype">unsigned&#160;</td>
297 <td class="paramname"><em>dev</em>, </td>
298 </tr>
299 <tr>
300 <td class="paramkey"></td>
301 <td></td>
302 <td class="paramtype">unsigned&#160;</td>
303 <td class="paramname"><em>func</em>&#160;</td>
304 </tr>
305 <tr>
306 <td></td>
307 <td>)</td>
308 <td></td><td></td>
309 </tr>
310 </table>
311 </td>
312 <td class="mlabels-right">
313 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
314 </tr>
315 </table>
316 </div><div class="memdoc">
317
318 <p>Find the PCI device object matching the PCI bus id given domain, bus device and function PCI bus id. </p>
319
320 </div>
321 </div>
322 <a id="ga23a978469353134b3104b846fe2efceb"></a>
323 <h2 class="memtitle"><span class="permalink"><a href="#ga23a978469353134b3104b846fe2efceb">&#9670;&nbsp;</a></span>hwloc_get_pcidev_by_busidstring()</h2>
324
325 <div class="memitem">
326 <div class="memproto">
327 <table class="mlabels">
328 <tr>
329 <td class="mlabels-left">
330 <table class="memname">
331 <tr>
332 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_get_pcidev_by_busidstring </td>
333 <td>(</td>
334 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
335 <td class="paramname"><em>topology</em>, </td>
336 </tr>
337 <tr>
338 <td class="paramkey"></td>
339 <td></td>
340 <td class="paramtype">const char *&#160;</td>
341 <td class="paramname"><em>busid</em>&#160;</td>
342 </tr>
343 <tr>
344 <td></td>
345 <td>)</td>
346 <td></td><td></td>
347 </tr>
348 </table>
349 </td>
350 <td class="mlabels-right">
351 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
352 </tr>
353 </table>
354 </div><div class="memdoc">
355
356 <p>Find the PCI device object matching the PCI bus id given as a string xxxx:yy:zz.t or yy:zz.t. </p>
145357
146358 </div>
147359 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Retrieve distances between objects</title>
7 <title>Hardware Locality (hwloc): The bitmap API</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="header">
4141 <div class="summary">
42 <a href="#nested-classes">Data Structures</a> &#124;
43 <a href="#enum-members">Enumerations</a> &#124;
42 <a href="#define-members">Macros</a> &#124;
43 <a href="#typedef-members">Typedefs</a> &#124;
4444 <a href="#func-members">Functions</a> </div>
4545 <div class="headertitle">
46 <div class="title">Retrieve distances between objects</div> </div>
46 <div class="title">The bitmap API</div> </div>
4747 </div><!--header-->
4848 <div class="contents">
4949 <table class="memberdecls">
50 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
51 Data Structures</h2></td></tr>
52 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00316.html">hwloc_distances_s</a></td></tr>
53 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
50 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
51 Macros</h2></td></tr>
52 <tr class="memitem:ga3f6861045a8029ade373510ffa727d2a"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga3f6861045a8029ade373510ffa727d2a">hwloc_bitmap_foreach_begin</a>(id, bitmap)</td></tr>
53 <tr class="separator:ga3f6861045a8029ade373510ffa727d2a"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:gafcf3246db406218d4e155735b3fa6528"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#gafcf3246db406218d4e155735b3fa6528">hwloc_bitmap_foreach_end</a>()</td></tr>
55 <tr class="separator:gafcf3246db406218d4e155735b3fa6528"><td class="memSeparator" colspan="2">&#160;</td></tr>
5456 </table><table class="memberdecls">
55 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
56 Enumerations</h2></td></tr>
57 <tr class="memitem:gab1bb10d3adb85b52cdc6fe5a7f74f108"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#gab1bb10d3adb85b52cdc6fe5a7f74f108">hwloc_distances_kind_e</a> { <br />
58 &#160;&#160;<a class="el" href="a00214.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a90dc38248c8d5392d4dd3e88f391e984">HWLOC_DISTANCES_KIND_FROM_OS</a>
59 , <a class="el" href="a00214.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a0148d7f9be833a04f5a55455437c227b">HWLOC_DISTANCES_KIND_FROM_USER</a>
60 , <a class="el" href="a00214.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108afd6a3503fbc8f7c1a31235373cefc4c6">HWLOC_DISTANCES_KIND_MEANS_LATENCY</a>
61 , <a class="el" href="a00214.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a41b19f141a3c0ffe85f9affaca4b0293">HWLOC_DISTANCES_KIND_MEANS_BANDWIDTH</a>
62 , <br />
63 &#160;&#160;<a class="el" href="a00214.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108aa6cf2b6dfcf148b65952f811814efbe1">HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES</a>
64 <br />
65 }</td></tr>
66 <tr class="separator:gab1bb10d3adb85b52cdc6fe5a7f74f108"><td class="memSeparator" colspan="2">&#160;</td></tr>
57 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
58 Typedefs</h2></td></tr>
59 <tr class="memitem:gaa3c2bf4c776d603dcebbb61b0c923d84"><td class="memItemLeft" align="right" valign="top">typedef struct hwloc_bitmap_s *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a></td></tr>
60 <tr class="separator:gaa3c2bf4c776d603dcebbb61b0c923d84"><td class="memSeparator" colspan="2">&#160;</td></tr>
61 <tr class="memitem:gae991a108af01d408be2776c5b2c467b2"><td class="memItemLeft" align="right" valign="top">typedef const struct hwloc_bitmap_s *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a></td></tr>
62 <tr class="separator:gae991a108af01d408be2776c5b2c467b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
6763 </table><table class="memberdecls">
6864 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
6965 Functions</h2></td></tr>
70 <tr class="memitem:ga613e6b2a5d0f06626ee8d0c12fa46691"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga613e6b2a5d0f06626ee8d0c12fa46691">hwloc_distances_get</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned *nr, struct <a class="el" href="a00316.html">hwloc_distances_s</a> **distances, unsigned long kind, unsigned long flags)</td></tr>
71 <tr class="separator:ga613e6b2a5d0f06626ee8d0c12fa46691"><td class="memSeparator" colspan="2">&#160;</td></tr>
72 <tr class="memitem:ga5d1d35eccfcc2ebcef71a10972ce9b03"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga5d1d35eccfcc2ebcef71a10972ce9b03">hwloc_distances_get_by_depth</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int depth, unsigned *nr, struct <a class="el" href="a00316.html">hwloc_distances_s</a> **distances, unsigned long kind, unsigned long flags)</td></tr>
73 <tr class="separator:ga5d1d35eccfcc2ebcef71a10972ce9b03"><td class="memSeparator" colspan="2">&#160;</td></tr>
74 <tr class="memitem:gaaa6bfbc20072a4f4de132eec859067f6"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#gaaa6bfbc20072a4f4de132eec859067f6">hwloc_distances_get_by_type</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, unsigned *nr, struct <a class="el" href="a00316.html">hwloc_distances_s</a> **distances, unsigned long kind, unsigned long flags)</td></tr>
75 <tr class="separator:gaaa6bfbc20072a4f4de132eec859067f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
76 <tr class="memitem:gaa457f35b8745ca41ec17797c0d7b20f0"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#gaa457f35b8745ca41ec17797c0d7b20f0">hwloc_distances_get_by_name</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const char *name, unsigned *nr, struct <a class="el" href="a00316.html">hwloc_distances_s</a> **distances, unsigned long flags)</td></tr>
77 <tr class="separator:gaa457f35b8745ca41ec17797c0d7b20f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
78 <tr class="memitem:gaa6f9697028c589cef0458edef5fe273f"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#gaa6f9697028c589cef0458edef5fe273f">hwloc_distances_get_name</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, struct <a class="el" href="a00316.html">hwloc_distances_s</a> *distances)</td></tr>
79 <tr class="separator:gaa6f9697028c589cef0458edef5fe273f"><td class="memSeparator" colspan="2">&#160;</td></tr>
80 <tr class="memitem:ga1dd78c1f9acd54f26aba0e284e97e51d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga1dd78c1f9acd54f26aba0e284e97e51d">hwloc_distances_release</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, struct <a class="el" href="a00316.html">hwloc_distances_s</a> *distances)</td></tr>
81 <tr class="separator:ga1dd78c1f9acd54f26aba0e284e97e51d"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 <tr class="memitem:gadece3d1eb5199fc2fb99bc7dcf1ccc05"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#gadece3d1eb5199fc2fb99bc7dcf1ccc05">hwloc_bitmap_alloc</a> (void)</td></tr>
67 <tr class="separator:gadece3d1eb5199fc2fb99bc7dcf1ccc05"><td class="memSeparator" colspan="2">&#160;</td></tr>
68 <tr class="memitem:ga02853b4a224970587b9d7a0e20d857c0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga02853b4a224970587b9d7a0e20d857c0">hwloc_bitmap_alloc_full</a> (void)</td></tr>
69 <tr class="separator:ga02853b4a224970587b9d7a0e20d857c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
70 <tr class="memitem:ga156130d85b3a0674d6e0e6770fe68fbe"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga156130d85b3a0674d6e0e6770fe68fbe">hwloc_bitmap_free</a> (<a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap)</td></tr>
71 <tr class="separator:ga156130d85b3a0674d6e0e6770fe68fbe"><td class="memSeparator" colspan="2">&#160;</td></tr>
72 <tr class="memitem:gae679434c1a5f41d3560a8a7e2c1b0dee"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#gae679434c1a5f41d3560a8a7e2c1b0dee">hwloc_bitmap_dup</a> (<a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
73 <tr class="separator:gae679434c1a5f41d3560a8a7e2c1b0dee"><td class="memSeparator" colspan="2">&#160;</td></tr>
74 <tr class="memitem:ga72a29824798b48784b8217471ec8f14c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga72a29824798b48784b8217471ec8f14c">hwloc_bitmap_copy</a> (<a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> dst, <a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> src)</td></tr>
75 <tr class="separator:ga72a29824798b48784b8217471ec8f14c"><td class="memSeparator" colspan="2">&#160;</td></tr>
76 <tr class="memitem:ga9511644657030a021dce9941e3cda583"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga9511644657030a021dce9941e3cda583">hwloc_bitmap_snprintf</a> (char *restrict buf, size_t buflen, <a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
77 <tr class="separator:ga9511644657030a021dce9941e3cda583"><td class="memSeparator" colspan="2">&#160;</td></tr>
78 <tr class="memitem:ga0fece972134fdecf2da9bc7a11dd827e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga0fece972134fdecf2da9bc7a11dd827e">hwloc_bitmap_asprintf</a> (char **strp, <a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
79 <tr class="separator:ga0fece972134fdecf2da9bc7a11dd827e"><td class="memSeparator" colspan="2">&#160;</td></tr>
80 <tr class="memitem:ga064a85c643a364b60acbfa0f3663fc18"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga064a85c643a364b60acbfa0f3663fc18">hwloc_bitmap_sscanf</a> (<a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, const char *restrict string)</td></tr>
81 <tr class="separator:ga064a85c643a364b60acbfa0f3663fc18"><td class="memSeparator" colspan="2">&#160;</td></tr>
82 <tr class="memitem:ga3d06e6447edeb61e56a9ad83f31f0a37"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga3d06e6447edeb61e56a9ad83f31f0a37">hwloc_bitmap_list_snprintf</a> (char *restrict buf, size_t buflen, <a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
83 <tr class="separator:ga3d06e6447edeb61e56a9ad83f31f0a37"><td class="memSeparator" colspan="2">&#160;</td></tr>
84 <tr class="memitem:ga39c0f1b02053de66d205c9f8260b3665"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga39c0f1b02053de66d205c9f8260b3665">hwloc_bitmap_list_asprintf</a> (char **strp, <a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
85 <tr class="separator:ga39c0f1b02053de66d205c9f8260b3665"><td class="memSeparator" colspan="2">&#160;</td></tr>
86 <tr class="memitem:gaf9314311d482c621e17c6a53a9fe993e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#gaf9314311d482c621e17c6a53a9fe993e">hwloc_bitmap_list_sscanf</a> (<a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, const char *restrict string)</td></tr>
87 <tr class="separator:gaf9314311d482c621e17c6a53a9fe993e"><td class="memSeparator" colspan="2">&#160;</td></tr>
88 <tr class="memitem:ga5beb68a987fe48e5c5edef06ab260e14"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga5beb68a987fe48e5c5edef06ab260e14">hwloc_bitmap_taskset_snprintf</a> (char *restrict buf, size_t buflen, <a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
89 <tr class="separator:ga5beb68a987fe48e5c5edef06ab260e14"><td class="memSeparator" colspan="2">&#160;</td></tr>
90 <tr class="memitem:ga391312513f17c985d871f18367c59512"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga391312513f17c985d871f18367c59512">hwloc_bitmap_taskset_asprintf</a> (char **strp, <a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
91 <tr class="separator:ga391312513f17c985d871f18367c59512"><td class="memSeparator" colspan="2">&#160;</td></tr>
92 <tr class="memitem:ga4f23db5041240e03e348752f8bd6ec2d"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga4f23db5041240e03e348752f8bd6ec2d">hwloc_bitmap_taskset_sscanf</a> (<a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, const char *restrict string)</td></tr>
93 <tr class="separator:ga4f23db5041240e03e348752f8bd6ec2d"><td class="memSeparator" colspan="2">&#160;</td></tr>
94 <tr class="memitem:gaa97c5217613c8cae9862287170ea2132"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#gaa97c5217613c8cae9862287170ea2132">hwloc_bitmap_zero</a> (<a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap)</td></tr>
95 <tr class="separator:gaa97c5217613c8cae9862287170ea2132"><td class="memSeparator" colspan="2">&#160;</td></tr>
96 <tr class="memitem:ga07b2de8786b3cdb22f21d9dd42588275"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga07b2de8786b3cdb22f21d9dd42588275">hwloc_bitmap_fill</a> (<a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap)</td></tr>
97 <tr class="separator:ga07b2de8786b3cdb22f21d9dd42588275"><td class="memSeparator" colspan="2">&#160;</td></tr>
98 <tr class="memitem:ga10be0840cdeb7ce26d862819dd303baa"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga10be0840cdeb7ce26d862819dd303baa">hwloc_bitmap_only</a> (<a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, unsigned id)</td></tr>
99 <tr class="separator:ga10be0840cdeb7ce26d862819dd303baa"><td class="memSeparator" colspan="2">&#160;</td></tr>
100 <tr class="memitem:ga06d505f8a1c0a536614f65f503ee6d93"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga06d505f8a1c0a536614f65f503ee6d93">hwloc_bitmap_allbut</a> (<a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, unsigned id)</td></tr>
101 <tr class="separator:ga06d505f8a1c0a536614f65f503ee6d93"><td class="memSeparator" colspan="2">&#160;</td></tr>
102 <tr class="memitem:gad59b0ebeb29c1bfabbb2a379e55c1159"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#gad59b0ebeb29c1bfabbb2a379e55c1159">hwloc_bitmap_from_ulong</a> (<a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, unsigned long mask)</td></tr>
103 <tr class="separator:gad59b0ebeb29c1bfabbb2a379e55c1159"><td class="memSeparator" colspan="2">&#160;</td></tr>
104 <tr class="memitem:ga4947c46d47bcfcd3faf3f59569be3e37"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga4947c46d47bcfcd3faf3f59569be3e37">hwloc_bitmap_from_ith_ulong</a> (<a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, unsigned i, unsigned long mask)</td></tr>
105 <tr class="separator:ga4947c46d47bcfcd3faf3f59569be3e37"><td class="memSeparator" colspan="2">&#160;</td></tr>
106 <tr class="memitem:gabcfef22f6fc4d4b33f068dd91a1c38f5"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#gabcfef22f6fc4d4b33f068dd91a1c38f5">hwloc_bitmap_from_ulongs</a> (<a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, unsigned nr, const unsigned long *masks)</td></tr>
107 <tr class="separator:gabcfef22f6fc4d4b33f068dd91a1c38f5"><td class="memSeparator" colspan="2">&#160;</td></tr>
108 <tr class="memitem:ga062dbff93baeff3b425a7260c5463646"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga062dbff93baeff3b425a7260c5463646">hwloc_bitmap_set</a> (<a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, unsigned id)</td></tr>
109 <tr class="separator:ga062dbff93baeff3b425a7260c5463646"><td class="memSeparator" colspan="2">&#160;</td></tr>
110 <tr class="memitem:ga9c9a8433732fb9f24899e7aa4c014d7e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga9c9a8433732fb9f24899e7aa4c014d7e">hwloc_bitmap_set_range</a> (<a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, unsigned begin, int end)</td></tr>
111 <tr class="separator:ga9c9a8433732fb9f24899e7aa4c014d7e"><td class="memSeparator" colspan="2">&#160;</td></tr>
112 <tr class="memitem:ga3daeed965c35c6d2fd4820a318219985"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga3daeed965c35c6d2fd4820a318219985">hwloc_bitmap_set_ith_ulong</a> (<a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, unsigned i, unsigned long mask)</td></tr>
113 <tr class="separator:ga3daeed965c35c6d2fd4820a318219985"><td class="memSeparator" colspan="2">&#160;</td></tr>
114 <tr class="memitem:gaf20bb350b6844d08931a064a73f86743"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#gaf20bb350b6844d08931a064a73f86743">hwloc_bitmap_clr</a> (<a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, unsigned id)</td></tr>
115 <tr class="separator:gaf20bb350b6844d08931a064a73f86743"><td class="memSeparator" colspan="2">&#160;</td></tr>
116 <tr class="memitem:ga833776709df94d727f8c22304b3388cf"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga833776709df94d727f8c22304b3388cf">hwloc_bitmap_clr_range</a> (<a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap, unsigned begin, int end)</td></tr>
117 <tr class="separator:ga833776709df94d727f8c22304b3388cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
118 <tr class="memitem:gaa611a77c092e679246afdf9a60d5db8b"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#gaa611a77c092e679246afdf9a60d5db8b">hwloc_bitmap_singlify</a> (<a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> bitmap)</td></tr>
119 <tr class="separator:gaa611a77c092e679246afdf9a60d5db8b"><td class="memSeparator" colspan="2">&#160;</td></tr>
120 <tr class="memitem:gab6a6bae22a33ec6adfc169a953c13e6c"><td class="memItemLeft" align="right" valign="top">unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#gab6a6bae22a33ec6adfc169a953c13e6c">hwloc_bitmap_to_ulong</a> (<a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
121 <tr class="separator:gab6a6bae22a33ec6adfc169a953c13e6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
122 <tr class="memitem:gac92e6404f648d6b99d2c626b05b2ffa4"><td class="memItemLeft" align="right" valign="top">unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#gac92e6404f648d6b99d2c626b05b2ffa4">hwloc_bitmap_to_ith_ulong</a> (<a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap, unsigned i)</td></tr>
123 <tr class="separator:gac92e6404f648d6b99d2c626b05b2ffa4"><td class="memSeparator" colspan="2">&#160;</td></tr>
124 <tr class="memitem:gacd215a2348732de25d94a4ecd76d528c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#gacd215a2348732de25d94a4ecd76d528c">hwloc_bitmap_to_ulongs</a> (<a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap, unsigned nr, unsigned long *masks)</td></tr>
125 <tr class="separator:gacd215a2348732de25d94a4ecd76d528c"><td class="memSeparator" colspan="2">&#160;</td></tr>
126 <tr class="memitem:gac0744734d761d65c977aece565364908"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#gac0744734d761d65c977aece565364908">hwloc_bitmap_nr_ulongs</a> (<a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
127 <tr class="separator:gac0744734d761d65c977aece565364908"><td class="memSeparator" colspan="2">&#160;</td></tr>
128 <tr class="memitem:ga11340dd487f110bb84f0a6e4ae90bd06"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga11340dd487f110bb84f0a6e4ae90bd06">hwloc_bitmap_isset</a> (<a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap, unsigned id)</td></tr>
129 <tr class="separator:ga11340dd487f110bb84f0a6e4ae90bd06"><td class="memSeparator" colspan="2">&#160;</td></tr>
130 <tr class="memitem:ga5b64be28f5a7176ed8ad0d6a90bdf108"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga5b64be28f5a7176ed8ad0d6a90bdf108">hwloc_bitmap_iszero</a> (<a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
131 <tr class="separator:ga5b64be28f5a7176ed8ad0d6a90bdf108"><td class="memSeparator" colspan="2">&#160;</td></tr>
132 <tr class="memitem:ga5fdcb8c19c336511c37076d649e74af4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga5fdcb8c19c336511c37076d649e74af4">hwloc_bitmap_isfull</a> (<a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
133 <tr class="separator:ga5fdcb8c19c336511c37076d649e74af4"><td class="memSeparator" colspan="2">&#160;</td></tr>
134 <tr class="memitem:ga3ec1ced43afadf8c0a7197320bc016ed"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga3ec1ced43afadf8c0a7197320bc016ed">hwloc_bitmap_first</a> (<a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
135 <tr class="separator:ga3ec1ced43afadf8c0a7197320bc016ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
136 <tr class="memitem:gaab7240b4b644693b775dad17b44ffd68"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#gaab7240b4b644693b775dad17b44ffd68">hwloc_bitmap_next</a> (<a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap, int prev)</td></tr>
137 <tr class="separator:gaab7240b4b644693b775dad17b44ffd68"><td class="memSeparator" colspan="2">&#160;</td></tr>
138 <tr class="memitem:ga3d9b08b060a59bbab5a4ea6d0a1ed7a6"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga3d9b08b060a59bbab5a4ea6d0a1ed7a6">hwloc_bitmap_last</a> (<a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
139 <tr class="separator:ga3d9b08b060a59bbab5a4ea6d0a1ed7a6"><td class="memSeparator" colspan="2">&#160;</td></tr>
140 <tr class="memitem:ga0200466842c0e1f5da75e84dde460b10"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga0200466842c0e1f5da75e84dde460b10">hwloc_bitmap_weight</a> (<a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
141 <tr class="separator:ga0200466842c0e1f5da75e84dde460b10"><td class="memSeparator" colspan="2">&#160;</td></tr>
142 <tr class="memitem:gae408841487b288e148a478ba0465c99e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#gae408841487b288e148a478ba0465c99e">hwloc_bitmap_first_unset</a> (<a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
143 <tr class="separator:gae408841487b288e148a478ba0465c99e"><td class="memSeparator" colspan="2">&#160;</td></tr>
144 <tr class="memitem:ga9653af34d1460ef106b7df25af4cdca8"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga9653af34d1460ef106b7df25af4cdca8">hwloc_bitmap_next_unset</a> (<a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap, int prev)</td></tr>
145 <tr class="separator:ga9653af34d1460ef106b7df25af4cdca8"><td class="memSeparator" colspan="2">&#160;</td></tr>
146 <tr class="memitem:ga45d49aeb45c7da631b1480a93dc3fc92"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga45d49aeb45c7da631b1480a93dc3fc92">hwloc_bitmap_last_unset</a> (<a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
147 <tr class="separator:ga45d49aeb45c7da631b1480a93dc3fc92"><td class="memSeparator" colspan="2">&#160;</td></tr>
148 <tr class="memitem:ga120b8aefb9ce7ef349929656359b1859"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga120b8aefb9ce7ef349929656359b1859">hwloc_bitmap_or</a> (<a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> res, <a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2)</td></tr>
149 <tr class="separator:ga120b8aefb9ce7ef349929656359b1859"><td class="memSeparator" colspan="2">&#160;</td></tr>
150 <tr class="memitem:ga674533016ffed922a28b4f0b49b82cd4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga674533016ffed922a28b4f0b49b82cd4">hwloc_bitmap_and</a> (<a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> res, <a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2)</td></tr>
151 <tr class="separator:ga674533016ffed922a28b4f0b49b82cd4"><td class="memSeparator" colspan="2">&#160;</td></tr>
152 <tr class="memitem:ga7ca5c72db65406b85aca032c8a990f9e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga7ca5c72db65406b85aca032c8a990f9e">hwloc_bitmap_andnot</a> (<a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> res, <a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2)</td></tr>
153 <tr class="separator:ga7ca5c72db65406b85aca032c8a990f9e"><td class="memSeparator" colspan="2">&#160;</td></tr>
154 <tr class="memitem:ga205508218e09cb9befd0687f16409f09"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga205508218e09cb9befd0687f16409f09">hwloc_bitmap_xor</a> (<a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> res, <a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2)</td></tr>
155 <tr class="separator:ga205508218e09cb9befd0687f16409f09"><td class="memSeparator" colspan="2">&#160;</td></tr>
156 <tr class="memitem:ga84cfdb4f8ab8c1f7e097728e613a2a3f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga84cfdb4f8ab8c1f7e097728e613a2a3f">hwloc_bitmap_not</a> (<a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> res, <a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap)</td></tr>
157 <tr class="separator:ga84cfdb4f8ab8c1f7e097728e613a2a3f"><td class="memSeparator" colspan="2">&#160;</td></tr>
158 <tr class="memitem:gaefa070f9232857ba5a57297ea9a08ea2"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#gaefa070f9232857ba5a57297ea9a08ea2">hwloc_bitmap_intersects</a> (<a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2)</td></tr>
159 <tr class="separator:gaefa070f9232857ba5a57297ea9a08ea2"><td class="memSeparator" colspan="2">&#160;</td></tr>
160 <tr class="memitem:ga0526e03db81956fb02acc8260b66d6a4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga0526e03db81956fb02acc8260b66d6a4">hwloc_bitmap_isincluded</a> (<a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> sub_bitmap, <a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> super_bitmap)</td></tr>
161 <tr class="separator:ga0526e03db81956fb02acc8260b66d6a4"><td class="memSeparator" colspan="2">&#160;</td></tr>
162 <tr class="memitem:ga32376b1405e57472b73c3aa53bb39663"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga32376b1405e57472b73c3aa53bb39663">hwloc_bitmap_isequal</a> (<a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2)</td></tr>
163 <tr class="separator:ga32376b1405e57472b73c3aa53bb39663"><td class="memSeparator" colspan="2">&#160;</td></tr>
164 <tr class="memitem:gaa39cda1510ab721b5c012c76ead72365"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#gaa39cda1510ab721b5c012c76ead72365">hwloc_bitmap_compare_first</a> (<a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2)</td></tr>
165 <tr class="separator:gaa39cda1510ab721b5c012c76ead72365"><td class="memSeparator" colspan="2">&#160;</td></tr>
166 <tr class="memitem:ga14cdbc0ef0a705e84999bd48a2e649f3"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00214.html#ga14cdbc0ef0a705e84999bd48a2e649f3">hwloc_bitmap_compare</a> (<a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap1, <a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> bitmap2)</td></tr>
167 <tr class="separator:ga14cdbc0ef0a705e84999bd48a2e649f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
82168 </table>
83169 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
84 <h2 class="groupheader">Enumeration Type Documentation</h2>
85 <a id="gab1bb10d3adb85b52cdc6fe5a7f74f108"></a>
86 <h2 class="memtitle"><span class="permalink"><a href="#gab1bb10d3adb85b52cdc6fe5a7f74f108">&#9670;&nbsp;</a></span>hwloc_distances_kind_e</h2>
87
88 <div class="memitem">
89 <div class="memproto">
90 <table class="memname">
91 <tr>
92 <td class="memname">enum <a class="el" href="a00214.html#gab1bb10d3adb85b52cdc6fe5a7f74f108">hwloc_distances_kind_e</a></td>
93 </tr>
94 </table>
95 </div><div class="memdoc">
96
97 <p>Kinds of distance matrices. </p>
98 <p>The <code>kind</code> attribute of struct <a class="el" href="a00316.html" title="Matrix of distances between a set of objects.">hwloc_distances_s</a> is a OR'ed set of kinds.</p>
99 <p>A kind of format HWLOC_DISTANCES_KIND_FROM_* specifies where the distance information comes from, if known.</p>
100 <p>A kind of format HWLOC_DISTANCES_KIND_MEANS_* specifies whether values are latencies or bandwidths, if applicable. </p>
101 <table class="fieldtable">
102 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggab1bb10d3adb85b52cdc6fe5a7f74f108a90dc38248c8d5392d4dd3e88f391e984"></a>HWLOC_DISTANCES_KIND_FROM_OS&#160;</td><td class="fielddoc"><p>These distances were obtained from the operating system or hardware. </p>
103 </td></tr>
104 <tr><td class="fieldname"><a id="ggab1bb10d3adb85b52cdc6fe5a7f74f108a0148d7f9be833a04f5a55455437c227b"></a>HWLOC_DISTANCES_KIND_FROM_USER&#160;</td><td class="fielddoc"><p>These distances were provided by the user. </p>
105 </td></tr>
106 <tr><td class="fieldname"><a id="ggab1bb10d3adb85b52cdc6fe5a7f74f108afd6a3503fbc8f7c1a31235373cefc4c6"></a>HWLOC_DISTANCES_KIND_MEANS_LATENCY&#160;</td><td class="fielddoc"><p>Distance values are similar to latencies between objects. Values are smaller for closer objects, hence minimal on the diagonal of the matrix (distance between an object and itself). It could also be the number of network hops between objects, etc. </p>
107 </td></tr>
108 <tr><td class="fieldname"><a id="ggab1bb10d3adb85b52cdc6fe5a7f74f108a41b19f141a3c0ffe85f9affaca4b0293"></a>HWLOC_DISTANCES_KIND_MEANS_BANDWIDTH&#160;</td><td class="fielddoc"><p>Distance values are similar to bandwidths between objects. Values are higher for closer objects, hence maximal on the diagonal of the matrix (distance between an object and itself). Such values are currently ignored for distance-based grouping. </p>
109 </td></tr>
110 <tr><td class="fieldname"><a id="ggab1bb10d3adb85b52cdc6fe5a7f74f108aa6cf2b6dfcf148b65952f811814efbe1"></a>HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES&#160;</td><td class="fielddoc"><p>This distances structure covers objects of different types. </p>
111 </td></tr>
112 </table>
170 <p>The <a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84" title="Set of bits represented as an opaque pointer to an internal bitmap.">hwloc_bitmap_t</a> type represents a set of integers (positive or null). A bitmap may be of infinite size (all bits are set after some point). A bitmap may even be full if all bits are set.</p>
171 <p>Bitmaps are used by hwloc for sets of OS processors (which may actually be hardware threads) as by <a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801" title="A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.">hwloc_cpuset_t</a> (a typedef for <a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84" title="Set of bits represented as an opaque pointer to an internal bitmap.">hwloc_bitmap_t</a>), or sets of NUMA memory nodes as <a class="el" href="a00192.html#ga37e35730fa7e775b5bb0afe893d6d508" title="A node set is a bitmap whose bits are set according to NUMA memory node physical OS indexes.">hwloc_nodeset_t</a> (also a typedef for <a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84" title="Set of bits represented as an opaque pointer to an internal bitmap.">hwloc_bitmap_t</a>). Those are used for cpuset and nodeset fields in the <a class="el" href="a00250.html" title="Structure of a topology object.">hwloc_obj</a> structure, see <a class="el" href="a00192.html">Object Sets (hwloc_cpuset_t and hwloc_nodeset_t)</a>.</p>
172 <p><em>Both CPU and node sets are always indexed by OS physical number.</em> However users should usually not build CPU and node sets manually (e.g. with <a class="el" href="a00214.html#ga062dbff93baeff3b425a7260c5463646" title="Add index id in bitmap bitmap.">hwloc_bitmap_set()</a>). One should rather use existing object sets and combine them with <a class="el" href="a00214.html#ga120b8aefb9ce7ef349929656359b1859" title="Or bitmaps bitmap1 and bitmap2 and store the result in bitmap res.">hwloc_bitmap_or()</a>, etc. For instance, binding the current thread on a pair of cores may be performed with: </p><div class="fragment"><div class="line"><a class="code" href="a00250.html">hwloc_obj_t</a> core1 = ... , core2 = ... ;</div>
173 <div class="line"><a class="code" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set = <a class="code" href="a00214.html#gadece3d1eb5199fc2fb99bc7dcf1ccc05">hwloc_bitmap_alloc</a>();</div>
174 <div class="line"><a class="code" href="a00214.html#ga120b8aefb9ce7ef349929656359b1859">hwloc_bitmap_or</a>(set, core1-&gt;<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>, core2-&gt;cpuset);</div>
175 <div class="line"><a class="code" href="a00199.html#ga80bc07473a8edf840cae17bd7ec21d48">hwloc_set_cpubind</a>(topology, set, <a class="code" href="a00199.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421">HWLOC_CPUBIND_THREAD</a>);</div>
176 <div class="line"><a class="code" href="a00214.html#ga156130d85b3a0674d6e0e6770fe68fbe">hwloc_bitmap_free</a>(set);</div>
177 <div class="ttc" id="aa00199_html_ga80bc07473a8edf840cae17bd7ec21d48"><div class="ttname"><a href="a00199.html#ga80bc07473a8edf840cae17bd7ec21d48">hwloc_set_cpubind</a></div><div class="ttdeci">int hwloc_set_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t set, int flags)</div><div class="ttdoc">Bind current process or thread on cpus given in physical bitmap set.</div></div>
178 <div class="ttc" id="aa00199_html_gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421"><div class="ttname"><a href="a00199.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421">HWLOC_CPUBIND_THREAD</a></div><div class="ttdeci">@ HWLOC_CPUBIND_THREAD</div><div class="ttdoc">Bind current thread of current process.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1161</div></div>
179 <div class="ttc" id="aa00214_html_ga120b8aefb9ce7ef349929656359b1859"><div class="ttname"><a href="a00214.html#ga120b8aefb9ce7ef349929656359b1859">hwloc_bitmap_or</a></div><div class="ttdeci">int hwloc_bitmap_or(hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</div><div class="ttdoc">Or bitmaps bitmap1 and bitmap2 and store the result in bitmap res.</div></div>
180 <div class="ttc" id="aa00214_html_ga156130d85b3a0674d6e0e6770fe68fbe"><div class="ttname"><a href="a00214.html#ga156130d85b3a0674d6e0e6770fe68fbe">hwloc_bitmap_free</a></div><div class="ttdeci">void hwloc_bitmap_free(hwloc_bitmap_t bitmap)</div><div class="ttdoc">Free bitmap bitmap.</div></div>
181 <div class="ttc" id="aa00214_html_gaa3c2bf4c776d603dcebbb61b0c923d84"><div class="ttname"><a href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a></div><div class="ttdeci">struct hwloc_bitmap_s * hwloc_bitmap_t</div><div class="ttdoc">Set of bits represented as an opaque pointer to an internal bitmap.</div><div class="ttdef"><b>Definition:</b> bitmap.h:68</div></div>
182 <div class="ttc" id="aa00214_html_gadece3d1eb5199fc2fb99bc7dcf1ccc05"><div class="ttname"><a href="a00214.html#gadece3d1eb5199fc2fb99bc7dcf1ccc05">hwloc_bitmap_alloc</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_bitmap_alloc(void)</div><div class="ttdoc">Allocate a new empty bitmap.</div></div>
183 <div class="ttc" id="aa00250_html"><div class="ttname"><a href="a00250.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:395</div></div>
184 <div class="ttc" id="aa00250_html_a67925e0f2c47f50408fbdb9bddd0790f"><div class="ttname"><a href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">hwloc_obj::cpuset</a></div><div class="ttdeci">hwloc_cpuset_t cpuset</div><div class="ttdoc">CPUs covered by this object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:511</div></div>
185 </div><!-- fragment --><dl class="section note"><dt>Note</dt><dd>Most functions below return an int that may be negative in case of error. The usual error case would be an internal failure to realloc/extend the storage of the bitmap (<code>errno</code> would be set to <code>ENOMEM</code>).</dd>
186 <dd>
187 Several examples of using the bitmap API are available under the doc/examples/ directory in the source tree. Regression tests such as tests/hwloc/hwloc_bitmap*.c also make intensive use of this API. </dd></dl>
188 <h2 class="groupheader">Macro Definition Documentation</h2>
189 <a id="ga3f6861045a8029ade373510ffa727d2a"></a>
190 <h2 class="memtitle"><span class="permalink"><a href="#ga3f6861045a8029ade373510ffa727d2a">&#9670;&nbsp;</a></span>hwloc_bitmap_foreach_begin</h2>
191
192 <div class="memitem">
193 <div class="memproto">
194 <table class="memname">
195 <tr>
196 <td class="memname">#define hwloc_bitmap_foreach_begin</td>
197 <td>(</td>
198 <td class="paramtype">&#160;</td>
199 <td class="paramname">id, </td>
200 </tr>
201 <tr>
202 <td class="paramkey"></td>
203 <td></td>
204 <td class="paramtype">&#160;</td>
205 <td class="paramname">bitmap&#160;</td>
206 </tr>
207 <tr>
208 <td></td>
209 <td>)</td>
210 <td></td><td></td>
211 </tr>
212 </table>
213 </div><div class="memdoc">
214
215 <p>Loop macro iterating on bitmap <code>bitmap</code>. </p>
216 <p>The loop must start with <a class="el" href="a00214.html#ga3f6861045a8029ade373510ffa727d2a" title="Loop macro iterating on bitmap bitmap.">hwloc_bitmap_foreach_begin()</a> and end with <a class="el" href="a00214.html#gafcf3246db406218d4e155735b3fa6528" title="End of loop macro iterating on a bitmap.">hwloc_bitmap_foreach_end()</a> followed by a terminating ';'.</p>
217 <p><code>index</code> is the loop variable; it should be an unsigned int. The first iteration will set <code>index</code> to the lowest index in the bitmap. Successive iterations will iterate through, in order, all remaining indexes set in the bitmap. To be specific: each iteration will return a value for <code>index</code> such that hwloc_bitmap_isset(bitmap, index) is true.</p>
218 <p>The assert prevents the loop from being infinite if the bitmap is infinitely set. </p>
219
220 </div>
221 </div>
222 <a id="gafcf3246db406218d4e155735b3fa6528"></a>
223 <h2 class="memtitle"><span class="permalink"><a href="#gafcf3246db406218d4e155735b3fa6528">&#9670;&nbsp;</a></span>hwloc_bitmap_foreach_end</h2>
224
225 <div class="memitem">
226 <div class="memproto">
227 <table class="memname">
228 <tr>
229 <td class="memname">#define hwloc_bitmap_foreach_end</td>
230 <td>(</td>
231 <td class="paramname"></td><td>)</td>
232 <td></td>
233 </tr>
234 </table>
235 </div><div class="memdoc">
236
237 <p>End of loop macro iterating on a bitmap. </p>
238 <p>Needs a terminating ';'.</p>
239 <dl class="section see"><dt>See also</dt><dd><a class="el" href="a00214.html#ga3f6861045a8029ade373510ffa727d2a" title="Loop macro iterating on bitmap bitmap.">hwloc_bitmap_foreach_begin()</a> </dd></dl>
240
241 </div>
242 </div>
243 <h2 class="groupheader">Typedef Documentation</h2>
244 <a id="gaa3c2bf4c776d603dcebbb61b0c923d84"></a>
245 <h2 class="memtitle"><span class="permalink"><a href="#gaa3c2bf4c776d603dcebbb61b0c923d84">&#9670;&nbsp;</a></span>hwloc_bitmap_t</h2>
246
247 <div class="memitem">
248 <div class="memproto">
249 <table class="memname">
250 <tr>
251 <td class="memname">typedef struct hwloc_bitmap_s* <a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a></td>
252 </tr>
253 </table>
254 </div><div class="memdoc">
255
256 <p>Set of bits represented as an opaque pointer to an internal bitmap. </p>
257
258 </div>
259 </div>
260 <a id="gae991a108af01d408be2776c5b2c467b2"></a>
261 <h2 class="memtitle"><span class="permalink"><a href="#gae991a108af01d408be2776c5b2c467b2">&#9670;&nbsp;</a></span>hwloc_const_bitmap_t</h2>
262
263 <div class="memitem">
264 <div class="memproto">
265 <table class="memname">
266 <tr>
267 <td class="memname">typedef const struct hwloc_bitmap_s* <a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a></td>
268 </tr>
269 </table>
270 </div><div class="memdoc">
271
272 <p>a non-modifiable <a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84" title="Set of bits represented as an opaque pointer to an internal bitmap.">hwloc_bitmap_t</a> </p>
113273
114274 </div>
115275 </div>
116276 <h2 class="groupheader">Function Documentation</h2>
117 <a id="ga613e6b2a5d0f06626ee8d0c12fa46691"></a>
118 <h2 class="memtitle"><span class="permalink"><a href="#ga613e6b2a5d0f06626ee8d0c12fa46691">&#9670;&nbsp;</a></span>hwloc_distances_get()</h2>
119
120 <div class="memitem">
121 <div class="memproto">
122 <table class="memname">
123 <tr>
124 <td class="memname">int hwloc_distances_get </td>
125 <td>(</td>
126 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
127 <td class="paramname"><em>topology</em>, </td>
128 </tr>
129 <tr>
130 <td class="paramkey"></td>
131 <td></td>
132 <td class="paramtype">unsigned *&#160;</td>
277 <a id="ga06d505f8a1c0a536614f65f503ee6d93"></a>
278 <h2 class="memtitle"><span class="permalink"><a href="#ga06d505f8a1c0a536614f65f503ee6d93">&#9670;&nbsp;</a></span>hwloc_bitmap_allbut()</h2>
279
280 <div class="memitem">
281 <div class="memproto">
282 <table class="memname">
283 <tr>
284 <td class="memname">int hwloc_bitmap_allbut </td>
285 <td>(</td>
286 <td class="paramtype"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
287 <td class="paramname"><em>bitmap</em>, </td>
288 </tr>
289 <tr>
290 <td class="paramkey"></td>
291 <td></td>
292 <td class="paramtype">unsigned&#160;</td>
293 <td class="paramname"><em>id</em>&#160;</td>
294 </tr>
295 <tr>
296 <td></td>
297 <td>)</td>
298 <td></td><td></td>
299 </tr>
300 </table>
301 </div><div class="memdoc">
302
303 <p>Fill the bitmap <code>and</code> clear the index <code>id</code>. </p>
304
305 </div>
306 </div>
307 <a id="gadece3d1eb5199fc2fb99bc7dcf1ccc05"></a>
308 <h2 class="memtitle"><span class="permalink"><a href="#gadece3d1eb5199fc2fb99bc7dcf1ccc05">&#9670;&nbsp;</a></span>hwloc_bitmap_alloc()</h2>
309
310 <div class="memitem">
311 <div class="memproto">
312 <table class="memname">
313 <tr>
314 <td class="memname"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> hwloc_bitmap_alloc </td>
315 <td>(</td>
316 <td class="paramtype">void&#160;</td>
317 <td class="paramname"></td><td>)</td>
318 <td></td>
319 </tr>
320 </table>
321 </div><div class="memdoc">
322
323 <p>Allocate a new empty bitmap. </p>
324 <dl class="section return"><dt>Returns</dt><dd>A valid bitmap or <code>NULL</code>.</dd></dl>
325 <p>The bitmap should be freed by a corresponding call to <a class="el" href="a00214.html#ga156130d85b3a0674d6e0e6770fe68fbe" title="Free bitmap bitmap.">hwloc_bitmap_free()</a>. </p>
326
327 </div>
328 </div>
329 <a id="ga02853b4a224970587b9d7a0e20d857c0"></a>
330 <h2 class="memtitle"><span class="permalink"><a href="#ga02853b4a224970587b9d7a0e20d857c0">&#9670;&nbsp;</a></span>hwloc_bitmap_alloc_full()</h2>
331
332 <div class="memitem">
333 <div class="memproto">
334 <table class="memname">
335 <tr>
336 <td class="memname"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> hwloc_bitmap_alloc_full </td>
337 <td>(</td>
338 <td class="paramtype">void&#160;</td>
339 <td class="paramname"></td><td>)</td>
340 <td></td>
341 </tr>
342 </table>
343 </div><div class="memdoc">
344
345 <p>Allocate a new full bitmap. </p>
346
347 </div>
348 </div>
349 <a id="ga674533016ffed922a28b4f0b49b82cd4"></a>
350 <h2 class="memtitle"><span class="permalink"><a href="#ga674533016ffed922a28b4f0b49b82cd4">&#9670;&nbsp;</a></span>hwloc_bitmap_and()</h2>
351
352 <div class="memitem">
353 <div class="memproto">
354 <table class="memname">
355 <tr>
356 <td class="memname">int hwloc_bitmap_and </td>
357 <td>(</td>
358 <td class="paramtype"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
359 <td class="paramname"><em>res</em>, </td>
360 </tr>
361 <tr>
362 <td class="paramkey"></td>
363 <td></td>
364 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
365 <td class="paramname"><em>bitmap1</em>, </td>
366 </tr>
367 <tr>
368 <td class="paramkey"></td>
369 <td></td>
370 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
371 <td class="paramname"><em>bitmap2</em>&#160;</td>
372 </tr>
373 <tr>
374 <td></td>
375 <td>)</td>
376 <td></td><td></td>
377 </tr>
378 </table>
379 </div><div class="memdoc">
380
381 <p>And bitmaps <code>bitmap1</code> and <code>bitmap2</code> and store the result in bitmap <code>res</code>. </p>
382 <p><code>res</code> can be the same as <code>bitmap1</code> or <code>bitmap2</code> </p>
383
384 </div>
385 </div>
386 <a id="ga7ca5c72db65406b85aca032c8a990f9e"></a>
387 <h2 class="memtitle"><span class="permalink"><a href="#ga7ca5c72db65406b85aca032c8a990f9e">&#9670;&nbsp;</a></span>hwloc_bitmap_andnot()</h2>
388
389 <div class="memitem">
390 <div class="memproto">
391 <table class="memname">
392 <tr>
393 <td class="memname">int hwloc_bitmap_andnot </td>
394 <td>(</td>
395 <td class="paramtype"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
396 <td class="paramname"><em>res</em>, </td>
397 </tr>
398 <tr>
399 <td class="paramkey"></td>
400 <td></td>
401 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
402 <td class="paramname"><em>bitmap1</em>, </td>
403 </tr>
404 <tr>
405 <td class="paramkey"></td>
406 <td></td>
407 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
408 <td class="paramname"><em>bitmap2</em>&#160;</td>
409 </tr>
410 <tr>
411 <td></td>
412 <td>)</td>
413 <td></td><td></td>
414 </tr>
415 </table>
416 </div><div class="memdoc">
417
418 <p>And bitmap <code>bitmap1</code> and the negation of <code>bitmap2</code> and store the result in bitmap <code>res</code>. </p>
419 <p><code>res</code> can be the same as <code>bitmap1</code> or <code>bitmap2</code> </p>
420
421 </div>
422 </div>
423 <a id="ga0fece972134fdecf2da9bc7a11dd827e"></a>
424 <h2 class="memtitle"><span class="permalink"><a href="#ga0fece972134fdecf2da9bc7a11dd827e">&#9670;&nbsp;</a></span>hwloc_bitmap_asprintf()</h2>
425
426 <div class="memitem">
427 <div class="memproto">
428 <table class="memname">
429 <tr>
430 <td class="memname">int hwloc_bitmap_asprintf </td>
431 <td>(</td>
432 <td class="paramtype">char **&#160;</td>
433 <td class="paramname"><em>strp</em>, </td>
434 </tr>
435 <tr>
436 <td class="paramkey"></td>
437 <td></td>
438 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
439 <td class="paramname"><em>bitmap</em>&#160;</td>
440 </tr>
441 <tr>
442 <td></td>
443 <td>)</td>
444 <td></td><td></td>
445 </tr>
446 </table>
447 </div><div class="memdoc">
448
449 <p>Stringify a bitmap into a newly allocated string. </p>
450 <dl class="section return"><dt>Returns</dt><dd>-1 on error. </dd></dl>
451
452 </div>
453 </div>
454 <a id="gaf20bb350b6844d08931a064a73f86743"></a>
455 <h2 class="memtitle"><span class="permalink"><a href="#gaf20bb350b6844d08931a064a73f86743">&#9670;&nbsp;</a></span>hwloc_bitmap_clr()</h2>
456
457 <div class="memitem">
458 <div class="memproto">
459 <table class="memname">
460 <tr>
461 <td class="memname">int hwloc_bitmap_clr </td>
462 <td>(</td>
463 <td class="paramtype"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
464 <td class="paramname"><em>bitmap</em>, </td>
465 </tr>
466 <tr>
467 <td class="paramkey"></td>
468 <td></td>
469 <td class="paramtype">unsigned&#160;</td>
470 <td class="paramname"><em>id</em>&#160;</td>
471 </tr>
472 <tr>
473 <td></td>
474 <td>)</td>
475 <td></td><td></td>
476 </tr>
477 </table>
478 </div><div class="memdoc">
479
480 <p>Remove index <code>id</code> from bitmap <code>bitmap</code>. </p>
481
482 </div>
483 </div>
484 <a id="ga833776709df94d727f8c22304b3388cf"></a>
485 <h2 class="memtitle"><span class="permalink"><a href="#ga833776709df94d727f8c22304b3388cf">&#9670;&nbsp;</a></span>hwloc_bitmap_clr_range()</h2>
486
487 <div class="memitem">
488 <div class="memproto">
489 <table class="memname">
490 <tr>
491 <td class="memname">int hwloc_bitmap_clr_range </td>
492 <td>(</td>
493 <td class="paramtype"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
494 <td class="paramname"><em>bitmap</em>, </td>
495 </tr>
496 <tr>
497 <td class="paramkey"></td>
498 <td></td>
499 <td class="paramtype">unsigned&#160;</td>
500 <td class="paramname"><em>begin</em>, </td>
501 </tr>
502 <tr>
503 <td class="paramkey"></td>
504 <td></td>
505 <td class="paramtype">int&#160;</td>
506 <td class="paramname"><em>end</em>&#160;</td>
507 </tr>
508 <tr>
509 <td></td>
510 <td>)</td>
511 <td></td><td></td>
512 </tr>
513 </table>
514 </div><div class="memdoc">
515
516 <p>Remove indexes from <code>begin</code> to <code>end</code> in bitmap <code>bitmap</code>. </p>
517 <p>If <code>end</code> is <code>-1</code>, the range is infinite. </p>
518
519 </div>
520 </div>
521 <a id="ga14cdbc0ef0a705e84999bd48a2e649f3"></a>
522 <h2 class="memtitle"><span class="permalink"><a href="#ga14cdbc0ef0a705e84999bd48a2e649f3">&#9670;&nbsp;</a></span>hwloc_bitmap_compare()</h2>
523
524 <div class="memitem">
525 <div class="memproto">
526 <table class="memname">
527 <tr>
528 <td class="memname">int hwloc_bitmap_compare </td>
529 <td>(</td>
530 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
531 <td class="paramname"><em>bitmap1</em>, </td>
532 </tr>
533 <tr>
534 <td class="paramkey"></td>
535 <td></td>
536 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
537 <td class="paramname"><em>bitmap2</em>&#160;</td>
538 </tr>
539 <tr>
540 <td></td>
541 <td>)</td>
542 <td></td><td></td>
543 </tr>
544 </table>
545 </div><div class="memdoc">
546
547 <p>Compare bitmaps <code>bitmap1</code> and <code>bitmap2</code> in lexicographic order. </p>
548 <p>Lexicographic comparison of bitmaps, starting for their highest indexes. Compare last indexes first, then second, etc. The empty bitmap is considered lower than anything.</p>
549 <dl class="section return"><dt>Returns</dt><dd>-1 if <code>bitmap1</code> is considered smaller than <code>bitmap2</code>. </dd>
550 <dd>
551 1 if <code>bitmap1</code> is considered larger than <code>bitmap2</code>. </dd>
552 <dd>
553 0 if bitmaps are equal (contrary to <a class="el" href="a00214.html#gaa39cda1510ab721b5c012c76ead72365" title="Compare bitmaps bitmap1 and bitmap2 using their lowest index.">hwloc_bitmap_compare_first()</a>).</dd></dl>
554 <p>For instance comparing binary bitmaps 0011 and 0110 returns -1 (hence 0011 is considered smaller than 0110). Comparing 00101 and 01010 returns -1 too.</p>
555 <dl class="section note"><dt>Note</dt><dd>This is different from the non-existing hwloc_bitmap_compare_last() which would only compare the highest index of each bitmap. </dd></dl>
556
557 </div>
558 </div>
559 <a id="gaa39cda1510ab721b5c012c76ead72365"></a>
560 <h2 class="memtitle"><span class="permalink"><a href="#gaa39cda1510ab721b5c012c76ead72365">&#9670;&nbsp;</a></span>hwloc_bitmap_compare_first()</h2>
561
562 <div class="memitem">
563 <div class="memproto">
564 <table class="memname">
565 <tr>
566 <td class="memname">int hwloc_bitmap_compare_first </td>
567 <td>(</td>
568 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
569 <td class="paramname"><em>bitmap1</em>, </td>
570 </tr>
571 <tr>
572 <td class="paramkey"></td>
573 <td></td>
574 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
575 <td class="paramname"><em>bitmap2</em>&#160;</td>
576 </tr>
577 <tr>
578 <td></td>
579 <td>)</td>
580 <td></td><td></td>
581 </tr>
582 </table>
583 </div><div class="memdoc">
584
585 <p>Compare bitmaps <code>bitmap1</code> and <code>bitmap2</code> using their lowest index. </p>
586 <p>A bitmap is considered smaller if its least significant bit is smaller. The empty bitmap is considered higher than anything (because its least significant bit does not exist).</p>
587 <dl class="section return"><dt>Returns</dt><dd>-1 if <code>bitmap1</code> is considered smaller than <code>bitmap2</code>. </dd>
588 <dd>
589 1 if <code>bitmap1</code> is considered larger than <code>bitmap2</code>.</dd></dl>
590 <p>For instance comparing binary bitmaps 0011 and 0110 returns -1 (hence 0011 is considered smaller than 0110) because least significant bit of 0011 (0001) is smaller than least significant bit of 0110 (0010). Comparing 01001 and 00110 would also return -1 for the same reason.</p>
591 <dl class="section return"><dt>Returns</dt><dd>0 if bitmaps are considered equal, even if they are not strictly equal. They just need to have the same least significant bit. For instance, comparing binary bitmaps 0010 and 0110 returns 0 because they have the same least significant bit. </dd></dl>
592
593 </div>
594 </div>
595 <a id="ga72a29824798b48784b8217471ec8f14c"></a>
596 <h2 class="memtitle"><span class="permalink"><a href="#ga72a29824798b48784b8217471ec8f14c">&#9670;&nbsp;</a></span>hwloc_bitmap_copy()</h2>
597
598 <div class="memitem">
599 <div class="memproto">
600 <table class="memname">
601 <tr>
602 <td class="memname">int hwloc_bitmap_copy </td>
603 <td>(</td>
604 <td class="paramtype"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
605 <td class="paramname"><em>dst</em>, </td>
606 </tr>
607 <tr>
608 <td class="paramkey"></td>
609 <td></td>
610 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
611 <td class="paramname"><em>src</em>&#160;</td>
612 </tr>
613 <tr>
614 <td></td>
615 <td>)</td>
616 <td></td><td></td>
617 </tr>
618 </table>
619 </div><div class="memdoc">
620
621 <p>Copy the contents of bitmap <code>src</code> into the already allocated bitmap <code>dst</code>. </p>
622
623 </div>
624 </div>
625 <a id="gae679434c1a5f41d3560a8a7e2c1b0dee"></a>
626 <h2 class="memtitle"><span class="permalink"><a href="#gae679434c1a5f41d3560a8a7e2c1b0dee">&#9670;&nbsp;</a></span>hwloc_bitmap_dup()</h2>
627
628 <div class="memitem">
629 <div class="memproto">
630 <table class="memname">
631 <tr>
632 <td class="memname"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> hwloc_bitmap_dup </td>
633 <td>(</td>
634 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
635 <td class="paramname"><em>bitmap</em></td><td>)</td>
636 <td></td>
637 </tr>
638 </table>
639 </div><div class="memdoc">
640
641 <p>Duplicate bitmap <code>bitmap</code> by allocating a new bitmap and copying <code>bitmap</code> contents. </p>
642 <p>If <code>bitmap</code> is <code>NULL</code>, <code>NULL</code> is returned. </p>
643
644 </div>
645 </div>
646 <a id="ga07b2de8786b3cdb22f21d9dd42588275"></a>
647 <h2 class="memtitle"><span class="permalink"><a href="#ga07b2de8786b3cdb22f21d9dd42588275">&#9670;&nbsp;</a></span>hwloc_bitmap_fill()</h2>
648
649 <div class="memitem">
650 <div class="memproto">
651 <table class="memname">
652 <tr>
653 <td class="memname">void hwloc_bitmap_fill </td>
654 <td>(</td>
655 <td class="paramtype"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
656 <td class="paramname"><em>bitmap</em></td><td>)</td>
657 <td></td>
658 </tr>
659 </table>
660 </div><div class="memdoc">
661
662 <p>Fill bitmap <code>bitmap</code> with all possible indexes (even if those objects don't exist or are otherwise unavailable) </p>
663
664 </div>
665 </div>
666 <a id="ga3ec1ced43afadf8c0a7197320bc016ed"></a>
667 <h2 class="memtitle"><span class="permalink"><a href="#ga3ec1ced43afadf8c0a7197320bc016ed">&#9670;&nbsp;</a></span>hwloc_bitmap_first()</h2>
668
669 <div class="memitem">
670 <div class="memproto">
671 <table class="memname">
672 <tr>
673 <td class="memname">int hwloc_bitmap_first </td>
674 <td>(</td>
675 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
676 <td class="paramname"><em>bitmap</em></td><td>)</td>
677 <td></td>
678 </tr>
679 </table>
680 </div><div class="memdoc">
681
682 <p>Compute the first index (least significant bit) in bitmap <code>bitmap</code>. </p>
683 <dl class="section return"><dt>Returns</dt><dd>-1 if no index is set in <code>bitmap</code>. </dd></dl>
684
685 </div>
686 </div>
687 <a id="gae408841487b288e148a478ba0465c99e"></a>
688 <h2 class="memtitle"><span class="permalink"><a href="#gae408841487b288e148a478ba0465c99e">&#9670;&nbsp;</a></span>hwloc_bitmap_first_unset()</h2>
689
690 <div class="memitem">
691 <div class="memproto">
692 <table class="memname">
693 <tr>
694 <td class="memname">int hwloc_bitmap_first_unset </td>
695 <td>(</td>
696 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
697 <td class="paramname"><em>bitmap</em></td><td>)</td>
698 <td></td>
699 </tr>
700 </table>
701 </div><div class="memdoc">
702
703 <p>Compute the first unset index (least significant bit) in bitmap <code>bitmap</code>. </p>
704 <dl class="section return"><dt>Returns</dt><dd>-1 if no index is unset in <code>bitmap</code>. </dd></dl>
705
706 </div>
707 </div>
708 <a id="ga156130d85b3a0674d6e0e6770fe68fbe"></a>
709 <h2 class="memtitle"><span class="permalink"><a href="#ga156130d85b3a0674d6e0e6770fe68fbe">&#9670;&nbsp;</a></span>hwloc_bitmap_free()</h2>
710
711 <div class="memitem">
712 <div class="memproto">
713 <table class="memname">
714 <tr>
715 <td class="memname">void hwloc_bitmap_free </td>
716 <td>(</td>
717 <td class="paramtype"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
718 <td class="paramname"><em>bitmap</em></td><td>)</td>
719 <td></td>
720 </tr>
721 </table>
722 </div><div class="memdoc">
723
724 <p>Free bitmap <code>bitmap</code>. </p>
725 <p>If <code>bitmap</code> is <code>NULL</code>, no operation is performed. </p>
726
727 </div>
728 </div>
729 <a id="ga4947c46d47bcfcd3faf3f59569be3e37"></a>
730 <h2 class="memtitle"><span class="permalink"><a href="#ga4947c46d47bcfcd3faf3f59569be3e37">&#9670;&nbsp;</a></span>hwloc_bitmap_from_ith_ulong()</h2>
731
732 <div class="memitem">
733 <div class="memproto">
734 <table class="memname">
735 <tr>
736 <td class="memname">int hwloc_bitmap_from_ith_ulong </td>
737 <td>(</td>
738 <td class="paramtype"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
739 <td class="paramname"><em>bitmap</em>, </td>
740 </tr>
741 <tr>
742 <td class="paramkey"></td>
743 <td></td>
744 <td class="paramtype">unsigned&#160;</td>
745 <td class="paramname"><em>i</em>, </td>
746 </tr>
747 <tr>
748 <td class="paramkey"></td>
749 <td></td>
750 <td class="paramtype">unsigned long&#160;</td>
751 <td class="paramname"><em>mask</em>&#160;</td>
752 </tr>
753 <tr>
754 <td></td>
755 <td>)</td>
756 <td></td><td></td>
757 </tr>
758 </table>
759 </div><div class="memdoc">
760
761 <p>Setup bitmap <code>bitmap</code> from unsigned long <code>mask</code> used as <code>i</code> -th subset. </p>
762
763 </div>
764 </div>
765 <a id="gad59b0ebeb29c1bfabbb2a379e55c1159"></a>
766 <h2 class="memtitle"><span class="permalink"><a href="#gad59b0ebeb29c1bfabbb2a379e55c1159">&#9670;&nbsp;</a></span>hwloc_bitmap_from_ulong()</h2>
767
768 <div class="memitem">
769 <div class="memproto">
770 <table class="memname">
771 <tr>
772 <td class="memname">int hwloc_bitmap_from_ulong </td>
773 <td>(</td>
774 <td class="paramtype"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
775 <td class="paramname"><em>bitmap</em>, </td>
776 </tr>
777 <tr>
778 <td class="paramkey"></td>
779 <td></td>
780 <td class="paramtype">unsigned long&#160;</td>
781 <td class="paramname"><em>mask</em>&#160;</td>
782 </tr>
783 <tr>
784 <td></td>
785 <td>)</td>
786 <td></td><td></td>
787 </tr>
788 </table>
789 </div><div class="memdoc">
790
791 <p>Setup bitmap <code>bitmap</code> from unsigned long <code>mask</code>. </p>
792
793 </div>
794 </div>
795 <a id="gabcfef22f6fc4d4b33f068dd91a1c38f5"></a>
796 <h2 class="memtitle"><span class="permalink"><a href="#gabcfef22f6fc4d4b33f068dd91a1c38f5">&#9670;&nbsp;</a></span>hwloc_bitmap_from_ulongs()</h2>
797
798 <div class="memitem">
799 <div class="memproto">
800 <table class="memname">
801 <tr>
802 <td class="memname">int hwloc_bitmap_from_ulongs </td>
803 <td>(</td>
804 <td class="paramtype"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
805 <td class="paramname"><em>bitmap</em>, </td>
806 </tr>
807 <tr>
808 <td class="paramkey"></td>
809 <td></td>
810 <td class="paramtype">unsigned&#160;</td>
133811 <td class="paramname"><em>nr</em>, </td>
134812 </tr>
135813 <tr>
136814 <td class="paramkey"></td>
137815 <td></td>
138 <td class="paramtype">struct <a class="el" href="a00316.html">hwloc_distances_s</a> **&#160;</td>
139 <td class="paramname"><em>distances</em>, </td>
816 <td class="paramtype">const unsigned long *&#160;</td>
817 <td class="paramname"><em>masks</em>&#160;</td>
818 </tr>
819 <tr>
820 <td></td>
821 <td>)</td>
822 <td></td><td></td>
823 </tr>
824 </table>
825 </div><div class="memdoc">
826
827 <p>Setup bitmap <code>bitmap</code> from unsigned longs <code>masks</code> used as first <code>nr</code> subsets. </p>
828
829 </div>
830 </div>
831 <a id="gaefa070f9232857ba5a57297ea9a08ea2"></a>
832 <h2 class="memtitle"><span class="permalink"><a href="#gaefa070f9232857ba5a57297ea9a08ea2">&#9670;&nbsp;</a></span>hwloc_bitmap_intersects()</h2>
833
834 <div class="memitem">
835 <div class="memproto">
836 <table class="memname">
837 <tr>
838 <td class="memname">int hwloc_bitmap_intersects </td>
839 <td>(</td>
840 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
841 <td class="paramname"><em>bitmap1</em>, </td>
842 </tr>
843 <tr>
844 <td class="paramkey"></td>
845 <td></td>
846 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
847 <td class="paramname"><em>bitmap2</em>&#160;</td>
848 </tr>
849 <tr>
850 <td></td>
851 <td>)</td>
852 <td></td><td></td>
853 </tr>
854 </table>
855 </div><div class="memdoc">
856
857 <p>Test whether bitmaps <code>bitmap1</code> and <code>bitmap2</code> intersects. </p>
858 <dl class="section return"><dt>Returns</dt><dd>1 if bitmaps intersect, 0 otherwise. </dd></dl>
859
860 </div>
861 </div>
862 <a id="ga32376b1405e57472b73c3aa53bb39663"></a>
863 <h2 class="memtitle"><span class="permalink"><a href="#ga32376b1405e57472b73c3aa53bb39663">&#9670;&nbsp;</a></span>hwloc_bitmap_isequal()</h2>
864
865 <div class="memitem">
866 <div class="memproto">
867 <table class="memname">
868 <tr>
869 <td class="memname">int hwloc_bitmap_isequal </td>
870 <td>(</td>
871 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
872 <td class="paramname"><em>bitmap1</em>, </td>
873 </tr>
874 <tr>
875 <td class="paramkey"></td>
876 <td></td>
877 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
878 <td class="paramname"><em>bitmap2</em>&#160;</td>
879 </tr>
880 <tr>
881 <td></td>
882 <td>)</td>
883 <td></td><td></td>
884 </tr>
885 </table>
886 </div><div class="memdoc">
887
888 <p>Test whether bitmap <code>bitmap1</code> is equal to bitmap <code>bitmap2</code>. </p>
889 <dl class="section return"><dt>Returns</dt><dd>1 if bitmaps are equal, 0 otherwise. </dd></dl>
890
891 </div>
892 </div>
893 <a id="ga5fdcb8c19c336511c37076d649e74af4"></a>
894 <h2 class="memtitle"><span class="permalink"><a href="#ga5fdcb8c19c336511c37076d649e74af4">&#9670;&nbsp;</a></span>hwloc_bitmap_isfull()</h2>
895
896 <div class="memitem">
897 <div class="memproto">
898 <table class="memname">
899 <tr>
900 <td class="memname">int hwloc_bitmap_isfull </td>
901 <td>(</td>
902 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
903 <td class="paramname"><em>bitmap</em></td><td>)</td>
904 <td></td>
905 </tr>
906 </table>
907 </div><div class="memdoc">
908
909 <p>Test whether bitmap <code>bitmap</code> is completely full. </p>
910 <dl class="section return"><dt>Returns</dt><dd>1 if bitmap is full, 0 otherwise.</dd></dl>
911 <dl class="section note"><dt>Note</dt><dd>A full bitmap is always infinitely set. </dd></dl>
912
913 </div>
914 </div>
915 <a id="ga0526e03db81956fb02acc8260b66d6a4"></a>
916 <h2 class="memtitle"><span class="permalink"><a href="#ga0526e03db81956fb02acc8260b66d6a4">&#9670;&nbsp;</a></span>hwloc_bitmap_isincluded()</h2>
917
918 <div class="memitem">
919 <div class="memproto">
920 <table class="memname">
921 <tr>
922 <td class="memname">int hwloc_bitmap_isincluded </td>
923 <td>(</td>
924 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
925 <td class="paramname"><em>sub_bitmap</em>, </td>
926 </tr>
927 <tr>
928 <td class="paramkey"></td>
929 <td></td>
930 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
931 <td class="paramname"><em>super_bitmap</em>&#160;</td>
932 </tr>
933 <tr>
934 <td></td>
935 <td>)</td>
936 <td></td><td></td>
937 </tr>
938 </table>
939 </div><div class="memdoc">
940
941 <p>Test whether bitmap <code>sub_bitmap</code> is part of bitmap <code>super_bitmap</code>. </p>
942 <dl class="section return"><dt>Returns</dt><dd>1 if <code>sub_bitmap</code> is included in <code>super_bitmap</code>, 0 otherwise.</dd></dl>
943 <dl class="section note"><dt>Note</dt><dd>The empty bitmap is considered included in any other bitmap. </dd></dl>
944
945 </div>
946 </div>
947 <a id="ga11340dd487f110bb84f0a6e4ae90bd06"></a>
948 <h2 class="memtitle"><span class="permalink"><a href="#ga11340dd487f110bb84f0a6e4ae90bd06">&#9670;&nbsp;</a></span>hwloc_bitmap_isset()</h2>
949
950 <div class="memitem">
951 <div class="memproto">
952 <table class="memname">
953 <tr>
954 <td class="memname">int hwloc_bitmap_isset </td>
955 <td>(</td>
956 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
957 <td class="paramname"><em>bitmap</em>, </td>
958 </tr>
959 <tr>
960 <td class="paramkey"></td>
961 <td></td>
962 <td class="paramtype">unsigned&#160;</td>
963 <td class="paramname"><em>id</em>&#160;</td>
964 </tr>
965 <tr>
966 <td></td>
967 <td>)</td>
968 <td></td><td></td>
969 </tr>
970 </table>
971 </div><div class="memdoc">
972
973 <p>Test whether index <code>id</code> is part of bitmap <code>bitmap</code>. </p>
974 <dl class="section return"><dt>Returns</dt><dd>1 if the bit at index <code>id</code> is set in bitmap <code>bitmap</code>, 0 otherwise. </dd></dl>
975
976 </div>
977 </div>
978 <a id="ga5b64be28f5a7176ed8ad0d6a90bdf108"></a>
979 <h2 class="memtitle"><span class="permalink"><a href="#ga5b64be28f5a7176ed8ad0d6a90bdf108">&#9670;&nbsp;</a></span>hwloc_bitmap_iszero()</h2>
980
981 <div class="memitem">
982 <div class="memproto">
983 <table class="memname">
984 <tr>
985 <td class="memname">int hwloc_bitmap_iszero </td>
986 <td>(</td>
987 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
988 <td class="paramname"><em>bitmap</em></td><td>)</td>
989 <td></td>
990 </tr>
991 </table>
992 </div><div class="memdoc">
993
994 <p>Test whether bitmap <code>bitmap</code> is empty. </p>
995 <dl class="section return"><dt>Returns</dt><dd>1 if bitmap is empty, 0 otherwise. </dd></dl>
996
997 </div>
998 </div>
999 <a id="ga3d9b08b060a59bbab5a4ea6d0a1ed7a6"></a>
1000 <h2 class="memtitle"><span class="permalink"><a href="#ga3d9b08b060a59bbab5a4ea6d0a1ed7a6">&#9670;&nbsp;</a></span>hwloc_bitmap_last()</h2>
1001
1002 <div class="memitem">
1003 <div class="memproto">
1004 <table class="memname">
1005 <tr>
1006 <td class="memname">int hwloc_bitmap_last </td>
1007 <td>(</td>
1008 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1009 <td class="paramname"><em>bitmap</em></td><td>)</td>
1010 <td></td>
1011 </tr>
1012 </table>
1013 </div><div class="memdoc">
1014
1015 <p>Compute the last index (most significant bit) in bitmap <code>bitmap</code>. </p>
1016 <dl class="section return"><dt>Returns</dt><dd>-1 if no index is set in <code>bitmap</code>, or if <code>bitmap</code> is infinitely set. </dd></dl>
1017
1018 </div>
1019 </div>
1020 <a id="ga45d49aeb45c7da631b1480a93dc3fc92"></a>
1021 <h2 class="memtitle"><span class="permalink"><a href="#ga45d49aeb45c7da631b1480a93dc3fc92">&#9670;&nbsp;</a></span>hwloc_bitmap_last_unset()</h2>
1022
1023 <div class="memitem">
1024 <div class="memproto">
1025 <table class="memname">
1026 <tr>
1027 <td class="memname">int hwloc_bitmap_last_unset </td>
1028 <td>(</td>
1029 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1030 <td class="paramname"><em>bitmap</em></td><td>)</td>
1031 <td></td>
1032 </tr>
1033 </table>
1034 </div><div class="memdoc">
1035
1036 <p>Compute the last unset index (most significant bit) in bitmap <code>bitmap</code>. </p>
1037 <dl class="section return"><dt>Returns</dt><dd>-1 if no index is unset in <code>bitmap</code>, or if <code>bitmap</code> is infinitely set. </dd></dl>
1038
1039 </div>
1040 </div>
1041 <a id="ga39c0f1b02053de66d205c9f8260b3665"></a>
1042 <h2 class="memtitle"><span class="permalink"><a href="#ga39c0f1b02053de66d205c9f8260b3665">&#9670;&nbsp;</a></span>hwloc_bitmap_list_asprintf()</h2>
1043
1044 <div class="memitem">
1045 <div class="memproto">
1046 <table class="memname">
1047 <tr>
1048 <td class="memname">int hwloc_bitmap_list_asprintf </td>
1049 <td>(</td>
1050 <td class="paramtype">char **&#160;</td>
1051 <td class="paramname"><em>strp</em>, </td>
1052 </tr>
1053 <tr>
1054 <td class="paramkey"></td>
1055 <td></td>
1056 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1057 <td class="paramname"><em>bitmap</em>&#160;</td>
1058 </tr>
1059 <tr>
1060 <td></td>
1061 <td>)</td>
1062 <td></td><td></td>
1063 </tr>
1064 </table>
1065 </div><div class="memdoc">
1066
1067 <p>Stringify a bitmap into a newly allocated list string. </p>
1068 <dl class="section return"><dt>Returns</dt><dd>-1 on error. </dd></dl>
1069
1070 </div>
1071 </div>
1072 <a id="ga3d06e6447edeb61e56a9ad83f31f0a37"></a>
1073 <h2 class="memtitle"><span class="permalink"><a href="#ga3d06e6447edeb61e56a9ad83f31f0a37">&#9670;&nbsp;</a></span>hwloc_bitmap_list_snprintf()</h2>
1074
1075 <div class="memitem">
1076 <div class="memproto">
1077 <table class="memname">
1078 <tr>
1079 <td class="memname">int hwloc_bitmap_list_snprintf </td>
1080 <td>(</td>
1081 <td class="paramtype">char *restrict&#160;</td>
1082 <td class="paramname"><em>buf</em>, </td>
1083 </tr>
1084 <tr>
1085 <td class="paramkey"></td>
1086 <td></td>
1087 <td class="paramtype">size_t&#160;</td>
1088 <td class="paramname"><em>buflen</em>, </td>
1089 </tr>
1090 <tr>
1091 <td class="paramkey"></td>
1092 <td></td>
1093 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1094 <td class="paramname"><em>bitmap</em>&#160;</td>
1095 </tr>
1096 <tr>
1097 <td></td>
1098 <td>)</td>
1099 <td></td><td></td>
1100 </tr>
1101 </table>
1102 </div><div class="memdoc">
1103
1104 <p>Stringify a bitmap in the list format. </p>
1105 <p>Lists are comma-separated indexes or ranges. Ranges are dash separated indexes. The last range may not have an ending indexes if the bitmap is infinitely set.</p>
1106 <p>Up to <code>buflen</code> characters may be written in buffer <code>buf</code>.</p>
1107 <p>If <code>buflen</code> is 0, <code>buf</code> may safely be <code>NULL</code>.</p>
1108 <dl class="section return"><dt>Returns</dt><dd>the number of character that were actually written if not truncating, or that would have been written (not including the ending \0). </dd></dl>
1109
1110 </div>
1111 </div>
1112 <a id="gaf9314311d482c621e17c6a53a9fe993e"></a>
1113 <h2 class="memtitle"><span class="permalink"><a href="#gaf9314311d482c621e17c6a53a9fe993e">&#9670;&nbsp;</a></span>hwloc_bitmap_list_sscanf()</h2>
1114
1115 <div class="memitem">
1116 <div class="memproto">
1117 <table class="memname">
1118 <tr>
1119 <td class="memname">int hwloc_bitmap_list_sscanf </td>
1120 <td>(</td>
1121 <td class="paramtype"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
1122 <td class="paramname"><em>bitmap</em>, </td>
1123 </tr>
1124 <tr>
1125 <td class="paramkey"></td>
1126 <td></td>
1127 <td class="paramtype">const char *restrict&#160;</td>
1128 <td class="paramname"><em>string</em>&#160;</td>
1129 </tr>
1130 <tr>
1131 <td></td>
1132 <td>)</td>
1133 <td></td><td></td>
1134 </tr>
1135 </table>
1136 </div><div class="memdoc">
1137
1138 <p>Parse a list string and stores it in bitmap <code>bitmap</code>. </p>
1139
1140 </div>
1141 </div>
1142 <a id="gaab7240b4b644693b775dad17b44ffd68"></a>
1143 <h2 class="memtitle"><span class="permalink"><a href="#gaab7240b4b644693b775dad17b44ffd68">&#9670;&nbsp;</a></span>hwloc_bitmap_next()</h2>
1144
1145 <div class="memitem">
1146 <div class="memproto">
1147 <table class="memname">
1148 <tr>
1149 <td class="memname">int hwloc_bitmap_next </td>
1150 <td>(</td>
1151 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1152 <td class="paramname"><em>bitmap</em>, </td>
1153 </tr>
1154 <tr>
1155 <td class="paramkey"></td>
1156 <td></td>
1157 <td class="paramtype">int&#160;</td>
1158 <td class="paramname"><em>prev</em>&#160;</td>
1159 </tr>
1160 <tr>
1161 <td></td>
1162 <td>)</td>
1163 <td></td><td></td>
1164 </tr>
1165 </table>
1166 </div><div class="memdoc">
1167
1168 <p>Compute the next index in bitmap <code>bitmap</code> which is after index <code>prev</code>. </p>
1169 <p>If <code>prev</code> is -1, the first index is returned.</p>
1170 <dl class="section return"><dt>Returns</dt><dd>-1 if no index with higher index is set in <code>bitmap</code>. </dd></dl>
1171
1172 </div>
1173 </div>
1174 <a id="ga9653af34d1460ef106b7df25af4cdca8"></a>
1175 <h2 class="memtitle"><span class="permalink"><a href="#ga9653af34d1460ef106b7df25af4cdca8">&#9670;&nbsp;</a></span>hwloc_bitmap_next_unset()</h2>
1176
1177 <div class="memitem">
1178 <div class="memproto">
1179 <table class="memname">
1180 <tr>
1181 <td class="memname">int hwloc_bitmap_next_unset </td>
1182 <td>(</td>
1183 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1184 <td class="paramname"><em>bitmap</em>, </td>
1185 </tr>
1186 <tr>
1187 <td class="paramkey"></td>
1188 <td></td>
1189 <td class="paramtype">int&#160;</td>
1190 <td class="paramname"><em>prev</em>&#160;</td>
1191 </tr>
1192 <tr>
1193 <td></td>
1194 <td>)</td>
1195 <td></td><td></td>
1196 </tr>
1197 </table>
1198 </div><div class="memdoc">
1199
1200 <p>Compute the next unset index in bitmap <code>bitmap</code> which is after index <code>prev</code>. </p>
1201 <p>If <code>prev</code> is -1, the first unset index is returned.</p>
1202 <dl class="section return"><dt>Returns</dt><dd>-1 if no index with higher index is unset in <code>bitmap</code>. </dd></dl>
1203
1204 </div>
1205 </div>
1206 <a id="ga84cfdb4f8ab8c1f7e097728e613a2a3f"></a>
1207 <h2 class="memtitle"><span class="permalink"><a href="#ga84cfdb4f8ab8c1f7e097728e613a2a3f">&#9670;&nbsp;</a></span>hwloc_bitmap_not()</h2>
1208
1209 <div class="memitem">
1210 <div class="memproto">
1211 <table class="memname">
1212 <tr>
1213 <td class="memname">int hwloc_bitmap_not </td>
1214 <td>(</td>
1215 <td class="paramtype"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
1216 <td class="paramname"><em>res</em>, </td>
1217 </tr>
1218 <tr>
1219 <td class="paramkey"></td>
1220 <td></td>
1221 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1222 <td class="paramname"><em>bitmap</em>&#160;</td>
1223 </tr>
1224 <tr>
1225 <td></td>
1226 <td>)</td>
1227 <td></td><td></td>
1228 </tr>
1229 </table>
1230 </div><div class="memdoc">
1231
1232 <p>Negate bitmap <code>bitmap</code> and store the result in bitmap <code>res</code>. </p>
1233 <p><code>res</code> can be the same as <code>bitmap</code> </p>
1234
1235 </div>
1236 </div>
1237 <a id="gac0744734d761d65c977aece565364908"></a>
1238 <h2 class="memtitle"><span class="permalink"><a href="#gac0744734d761d65c977aece565364908">&#9670;&nbsp;</a></span>hwloc_bitmap_nr_ulongs()</h2>
1239
1240 <div class="memitem">
1241 <div class="memproto">
1242 <table class="memname">
1243 <tr>
1244 <td class="memname">int hwloc_bitmap_nr_ulongs </td>
1245 <td>(</td>
1246 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1247 <td class="paramname"><em>bitmap</em></td><td>)</td>
1248 <td></td>
1249 </tr>
1250 </table>
1251 </div><div class="memdoc">
1252
1253 <p>Return the number of unsigned longs required for storing bitmap <code>bitmap</code> entirely. </p>
1254 <p>This is the number of contiguous unsigned longs from the very first bit of the bitmap (even if unset) up to the last set bit. This is useful for knowing the <code>nr</code> parameter to pass to <a class="el" href="a00214.html#gacd215a2348732de25d94a4ecd76d528c" title="Convert the first nr subsets of bitmap bitmap into the array of nr unsigned long masks.">hwloc_bitmap_to_ulongs()</a> (or which calls to <a class="el" href="a00214.html#gac92e6404f648d6b99d2c626b05b2ffa4" title="Convert the i -th subset of bitmap bitmap into unsigned long mask.">hwloc_bitmap_to_ith_ulong()</a> are needed) to entirely convert a bitmap into multiple unsigned longs.</p>
1255 <p>When called on the output of <a class="el" href="a00211.html#ga79212faa07b70dd26588941b17d9fa82" title="Get topology CPU set.">hwloc_topology_get_topology_cpuset()</a>, the returned number is large enough for all cpusets of the topology.</p>
1256 <dl class="section return"><dt>Returns</dt><dd>-1 if <code>bitmap</code> is infinite. </dd></dl>
1257
1258 </div>
1259 </div>
1260 <a id="ga10be0840cdeb7ce26d862819dd303baa"></a>
1261 <h2 class="memtitle"><span class="permalink"><a href="#ga10be0840cdeb7ce26d862819dd303baa">&#9670;&nbsp;</a></span>hwloc_bitmap_only()</h2>
1262
1263 <div class="memitem">
1264 <div class="memproto">
1265 <table class="memname">
1266 <tr>
1267 <td class="memname">int hwloc_bitmap_only </td>
1268 <td>(</td>
1269 <td class="paramtype"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
1270 <td class="paramname"><em>bitmap</em>, </td>
1271 </tr>
1272 <tr>
1273 <td class="paramkey"></td>
1274 <td></td>
1275 <td class="paramtype">unsigned&#160;</td>
1276 <td class="paramname"><em>id</em>&#160;</td>
1277 </tr>
1278 <tr>
1279 <td></td>
1280 <td>)</td>
1281 <td></td><td></td>
1282 </tr>
1283 </table>
1284 </div><div class="memdoc">
1285
1286 <p>Empty the bitmap <code>bitmap</code> and add bit <code>id</code>. </p>
1287
1288 </div>
1289 </div>
1290 <a id="ga120b8aefb9ce7ef349929656359b1859"></a>
1291 <h2 class="memtitle"><span class="permalink"><a href="#ga120b8aefb9ce7ef349929656359b1859">&#9670;&nbsp;</a></span>hwloc_bitmap_or()</h2>
1292
1293 <div class="memitem">
1294 <div class="memproto">
1295 <table class="memname">
1296 <tr>
1297 <td class="memname">int hwloc_bitmap_or </td>
1298 <td>(</td>
1299 <td class="paramtype"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
1300 <td class="paramname"><em>res</em>, </td>
1301 </tr>
1302 <tr>
1303 <td class="paramkey"></td>
1304 <td></td>
1305 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1306 <td class="paramname"><em>bitmap1</em>, </td>
1307 </tr>
1308 <tr>
1309 <td class="paramkey"></td>
1310 <td></td>
1311 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1312 <td class="paramname"><em>bitmap2</em>&#160;</td>
1313 </tr>
1314 <tr>
1315 <td></td>
1316 <td>)</td>
1317 <td></td><td></td>
1318 </tr>
1319 </table>
1320 </div><div class="memdoc">
1321
1322 <p>Or bitmaps <code>bitmap1</code> and <code>bitmap2</code> and store the result in bitmap <code>res</code>. </p>
1323 <p><code>res</code> can be the same as <code>bitmap1</code> or <code>bitmap2</code> </p>
1324
1325 </div>
1326 </div>
1327 <a id="ga062dbff93baeff3b425a7260c5463646"></a>
1328 <h2 class="memtitle"><span class="permalink"><a href="#ga062dbff93baeff3b425a7260c5463646">&#9670;&nbsp;</a></span>hwloc_bitmap_set()</h2>
1329
1330 <div class="memitem">
1331 <div class="memproto">
1332 <table class="memname">
1333 <tr>
1334 <td class="memname">int hwloc_bitmap_set </td>
1335 <td>(</td>
1336 <td class="paramtype"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
1337 <td class="paramname"><em>bitmap</em>, </td>
1338 </tr>
1339 <tr>
1340 <td class="paramkey"></td>
1341 <td></td>
1342 <td class="paramtype">unsigned&#160;</td>
1343 <td class="paramname"><em>id</em>&#160;</td>
1344 </tr>
1345 <tr>
1346 <td></td>
1347 <td>)</td>
1348 <td></td><td></td>
1349 </tr>
1350 </table>
1351 </div><div class="memdoc">
1352
1353 <p>Add index <code>id</code> in bitmap <code>bitmap</code>. </p>
1354
1355 </div>
1356 </div>
1357 <a id="ga3daeed965c35c6d2fd4820a318219985"></a>
1358 <h2 class="memtitle"><span class="permalink"><a href="#ga3daeed965c35c6d2fd4820a318219985">&#9670;&nbsp;</a></span>hwloc_bitmap_set_ith_ulong()</h2>
1359
1360 <div class="memitem">
1361 <div class="memproto">
1362 <table class="memname">
1363 <tr>
1364 <td class="memname">int hwloc_bitmap_set_ith_ulong </td>
1365 <td>(</td>
1366 <td class="paramtype"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
1367 <td class="paramname"><em>bitmap</em>, </td>
1368 </tr>
1369 <tr>
1370 <td class="paramkey"></td>
1371 <td></td>
1372 <td class="paramtype">unsigned&#160;</td>
1373 <td class="paramname"><em>i</em>, </td>
1401374 </tr>
1411375 <tr>
1421376 <td class="paramkey"></td>
1431377 <td></td>
1441378 <td class="paramtype">unsigned long&#160;</td>
145 <td class="paramname"><em>kind</em>, </td>
146 </tr>
147 <tr>
148 <td class="paramkey"></td>
149 <td></td>
150 <td class="paramtype">unsigned long&#160;</td>
151 <td class="paramname"><em>flags</em>&#160;</td>
152 </tr>
153 <tr>
154 <td></td>
155 <td>)</td>
156 <td></td><td></td>
157 </tr>
158 </table>
159 </div><div class="memdoc">
160
161 <p>Retrieve distance matrices. </p>
162 <p>Retrieve distance matrices from the topology into the <code>distances</code> array.</p>
163 <p><code>flags</code> is currently unused, should be <code>0</code>.</p>
164 <p><code>kind</code> serves as a filter. If <code>0</code>, all distance matrices are returned. If it contains some HWLOC_DISTANCES_KIND_FROM_*, only distance matrices whose kind matches one of these are returned. If it contains some HWLOC_DISTANCES_KIND_MEANS_*, only distance matrices whose kind matches one of these are returned.</p>
165 <p>On input, <code>nr</code> points to the number of distance matrices that may be stored in <code>distances</code>. On output, <code>nr</code> points to the number of distance matrices that were actually found, even if some of them couldn't be stored in <code>distances</code>. Distance matrices that couldn't be stored are ignored, but the function still returns success (<code>0</code>). The caller may find out by comparing the value pointed by <code>nr</code> before and after the function call.</p>
166 <p>Each distance matrix returned in the <code>distances</code> array should be released by the caller using <a class="el" href="a00214.html#ga1dd78c1f9acd54f26aba0e284e97e51d" title="Release a distance matrix structure previously returned by hwloc_distances_get().">hwloc_distances_release()</a>. </p>
167
168 </div>
169 </div>
170 <a id="ga5d1d35eccfcc2ebcef71a10972ce9b03"></a>
171 <h2 class="memtitle"><span class="permalink"><a href="#ga5d1d35eccfcc2ebcef71a10972ce9b03">&#9670;&nbsp;</a></span>hwloc_distances_get_by_depth()</h2>
172
173 <div class="memitem">
174 <div class="memproto">
175 <table class="memname">
176 <tr>
177 <td class="memname">int hwloc_distances_get_by_depth </td>
178 <td>(</td>
179 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
180 <td class="paramname"><em>topology</em>, </td>
1379 <td class="paramname"><em>mask</em>&#160;</td>
1380 </tr>
1381 <tr>
1382 <td></td>
1383 <td>)</td>
1384 <td></td><td></td>
1385 </tr>
1386 </table>
1387 </div><div class="memdoc">
1388
1389 <p>Replace <code>i</code> -th subset of bitmap <code>bitmap</code> with unsigned long <code>mask</code>. </p>
1390
1391 </div>
1392 </div>
1393 <a id="ga9c9a8433732fb9f24899e7aa4c014d7e"></a>
1394 <h2 class="memtitle"><span class="permalink"><a href="#ga9c9a8433732fb9f24899e7aa4c014d7e">&#9670;&nbsp;</a></span>hwloc_bitmap_set_range()</h2>
1395
1396 <div class="memitem">
1397 <div class="memproto">
1398 <table class="memname">
1399 <tr>
1400 <td class="memname">int hwloc_bitmap_set_range </td>
1401 <td>(</td>
1402 <td class="paramtype"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
1403 <td class="paramname"><em>bitmap</em>, </td>
1404 </tr>
1405 <tr>
1406 <td class="paramkey"></td>
1407 <td></td>
1408 <td class="paramtype">unsigned&#160;</td>
1409 <td class="paramname"><em>begin</em>, </td>
1811410 </tr>
1821411 <tr>
1831412 <td class="paramkey"></td>
1841413 <td></td>
1851414 <td class="paramtype">int&#160;</td>
186 <td class="paramname"><em>depth</em>, </td>
187 </tr>
188 <tr>
189 <td class="paramkey"></td>
190 <td></td>
191 <td class="paramtype">unsigned *&#160;</td>
1415 <td class="paramname"><em>end</em>&#160;</td>
1416 </tr>
1417 <tr>
1418 <td></td>
1419 <td>)</td>
1420 <td></td><td></td>
1421 </tr>
1422 </table>
1423 </div><div class="memdoc">
1424
1425 <p>Add indexes from <code>begin</code> to <code>end</code> in bitmap <code>bitmap</code>. </p>
1426 <p>If <code>end</code> is <code>-1</code>, the range is infinite. </p>
1427
1428 </div>
1429 </div>
1430 <a id="gaa611a77c092e679246afdf9a60d5db8b"></a>
1431 <h2 class="memtitle"><span class="permalink"><a href="#gaa611a77c092e679246afdf9a60d5db8b">&#9670;&nbsp;</a></span>hwloc_bitmap_singlify()</h2>
1432
1433 <div class="memitem">
1434 <div class="memproto">
1435 <table class="memname">
1436 <tr>
1437 <td class="memname">int hwloc_bitmap_singlify </td>
1438 <td>(</td>
1439 <td class="paramtype"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
1440 <td class="paramname"><em>bitmap</em></td><td>)</td>
1441 <td></td>
1442 </tr>
1443 </table>
1444 </div><div class="memdoc">
1445
1446 <p>Keep a single index among those set in bitmap <code>bitmap</code>. </p>
1447 <p>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.</p>
1448 <dl class="section note"><dt>Note</dt><dd>This function is NOT meant to distribute multiple processes within a single CPU set. It always return the same single bit when called multiple times on the same input set. <a class="el" href="a00210.html#ga7b0c28f797c2ff17fa2f244ebbd55b33" title="Distribute n items over the topology under roots.">hwloc_distrib()</a> may be used for generating CPU sets to distribute multiple tasks below a single multi-PU object.</dd>
1449 <dd>
1450 This function cannot be applied to an object set directly. It should be applied to a copy (which may be obtained with <a class="el" href="a00214.html#gae679434c1a5f41d3560a8a7e2c1b0dee" title="Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.">hwloc_bitmap_dup()</a>). </dd></dl>
1451
1452 </div>
1453 </div>
1454 <a id="ga9511644657030a021dce9941e3cda583"></a>
1455 <h2 class="memtitle"><span class="permalink"><a href="#ga9511644657030a021dce9941e3cda583">&#9670;&nbsp;</a></span>hwloc_bitmap_snprintf()</h2>
1456
1457 <div class="memitem">
1458 <div class="memproto">
1459 <table class="memname">
1460 <tr>
1461 <td class="memname">int hwloc_bitmap_snprintf </td>
1462 <td>(</td>
1463 <td class="paramtype">char *restrict&#160;</td>
1464 <td class="paramname"><em>buf</em>, </td>
1465 </tr>
1466 <tr>
1467 <td class="paramkey"></td>
1468 <td></td>
1469 <td class="paramtype">size_t&#160;</td>
1470 <td class="paramname"><em>buflen</em>, </td>
1471 </tr>
1472 <tr>
1473 <td class="paramkey"></td>
1474 <td></td>
1475 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1476 <td class="paramname"><em>bitmap</em>&#160;</td>
1477 </tr>
1478 <tr>
1479 <td></td>
1480 <td>)</td>
1481 <td></td><td></td>
1482 </tr>
1483 </table>
1484 </div><div class="memdoc">
1485
1486 <p>Stringify a bitmap. </p>
1487 <p>Up to <code>buflen</code> characters may be written in buffer <code>buf</code>.</p>
1488 <p>If <code>buflen</code> is 0, <code>buf</code> may safely be <code>NULL</code>.</p>
1489 <dl class="section return"><dt>Returns</dt><dd>the number of character that were actually written if not truncating, or that would have been written (not including the ending \0). </dd></dl>
1490
1491 </div>
1492 </div>
1493 <a id="ga064a85c643a364b60acbfa0f3663fc18"></a>
1494 <h2 class="memtitle"><span class="permalink"><a href="#ga064a85c643a364b60acbfa0f3663fc18">&#9670;&nbsp;</a></span>hwloc_bitmap_sscanf()</h2>
1495
1496 <div class="memitem">
1497 <div class="memproto">
1498 <table class="memname">
1499 <tr>
1500 <td class="memname">int hwloc_bitmap_sscanf </td>
1501 <td>(</td>
1502 <td class="paramtype"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
1503 <td class="paramname"><em>bitmap</em>, </td>
1504 </tr>
1505 <tr>
1506 <td class="paramkey"></td>
1507 <td></td>
1508 <td class="paramtype">const char *restrict&#160;</td>
1509 <td class="paramname"><em>string</em>&#160;</td>
1510 </tr>
1511 <tr>
1512 <td></td>
1513 <td>)</td>
1514 <td></td><td></td>
1515 </tr>
1516 </table>
1517 </div><div class="memdoc">
1518
1519 <p>Parse a bitmap string and stores it in bitmap <code>bitmap</code>. </p>
1520
1521 </div>
1522 </div>
1523 <a id="ga391312513f17c985d871f18367c59512"></a>
1524 <h2 class="memtitle"><span class="permalink"><a href="#ga391312513f17c985d871f18367c59512">&#9670;&nbsp;</a></span>hwloc_bitmap_taskset_asprintf()</h2>
1525
1526 <div class="memitem">
1527 <div class="memproto">
1528 <table class="memname">
1529 <tr>
1530 <td class="memname">int hwloc_bitmap_taskset_asprintf </td>
1531 <td>(</td>
1532 <td class="paramtype">char **&#160;</td>
1533 <td class="paramname"><em>strp</em>, </td>
1534 </tr>
1535 <tr>
1536 <td class="paramkey"></td>
1537 <td></td>
1538 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1539 <td class="paramname"><em>bitmap</em>&#160;</td>
1540 </tr>
1541 <tr>
1542 <td></td>
1543 <td>)</td>
1544 <td></td><td></td>
1545 </tr>
1546 </table>
1547 </div><div class="memdoc">
1548
1549 <p>Stringify a bitmap into a newly allocated taskset-specific string. </p>
1550 <dl class="section return"><dt>Returns</dt><dd>-1 on error. </dd></dl>
1551
1552 </div>
1553 </div>
1554 <a id="ga5beb68a987fe48e5c5edef06ab260e14"></a>
1555 <h2 class="memtitle"><span class="permalink"><a href="#ga5beb68a987fe48e5c5edef06ab260e14">&#9670;&nbsp;</a></span>hwloc_bitmap_taskset_snprintf()</h2>
1556
1557 <div class="memitem">
1558 <div class="memproto">
1559 <table class="memname">
1560 <tr>
1561 <td class="memname">int hwloc_bitmap_taskset_snprintf </td>
1562 <td>(</td>
1563 <td class="paramtype">char *restrict&#160;</td>
1564 <td class="paramname"><em>buf</em>, </td>
1565 </tr>
1566 <tr>
1567 <td class="paramkey"></td>
1568 <td></td>
1569 <td class="paramtype">size_t&#160;</td>
1570 <td class="paramname"><em>buflen</em>, </td>
1571 </tr>
1572 <tr>
1573 <td class="paramkey"></td>
1574 <td></td>
1575 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1576 <td class="paramname"><em>bitmap</em>&#160;</td>
1577 </tr>
1578 <tr>
1579 <td></td>
1580 <td>)</td>
1581 <td></td><td></td>
1582 </tr>
1583 </table>
1584 </div><div class="memdoc">
1585
1586 <p>Stringify a bitmap in the taskset-specific format. </p>
1587 <p>The taskset command manipulates bitmap strings that contain a single (possible very long) hexadecimal number starting with 0x.</p>
1588 <p>Up to <code>buflen</code> characters may be written in buffer <code>buf</code>.</p>
1589 <p>If <code>buflen</code> is 0, <code>buf</code> may safely be <code>NULL</code>.</p>
1590 <dl class="section return"><dt>Returns</dt><dd>the number of character that were actually written if not truncating, or that would have been written (not including the ending \0). </dd></dl>
1591
1592 </div>
1593 </div>
1594 <a id="ga4f23db5041240e03e348752f8bd6ec2d"></a>
1595 <h2 class="memtitle"><span class="permalink"><a href="#ga4f23db5041240e03e348752f8bd6ec2d">&#9670;&nbsp;</a></span>hwloc_bitmap_taskset_sscanf()</h2>
1596
1597 <div class="memitem">
1598 <div class="memproto">
1599 <table class="memname">
1600 <tr>
1601 <td class="memname">int hwloc_bitmap_taskset_sscanf </td>
1602 <td>(</td>
1603 <td class="paramtype"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
1604 <td class="paramname"><em>bitmap</em>, </td>
1605 </tr>
1606 <tr>
1607 <td class="paramkey"></td>
1608 <td></td>
1609 <td class="paramtype">const char *restrict&#160;</td>
1610 <td class="paramname"><em>string</em>&#160;</td>
1611 </tr>
1612 <tr>
1613 <td></td>
1614 <td>)</td>
1615 <td></td><td></td>
1616 </tr>
1617 </table>
1618 </div><div class="memdoc">
1619
1620 <p>Parse a taskset-specific bitmap string and stores it in bitmap <code>bitmap</code>. </p>
1621
1622 </div>
1623 </div>
1624 <a id="gac92e6404f648d6b99d2c626b05b2ffa4"></a>
1625 <h2 class="memtitle"><span class="permalink"><a href="#gac92e6404f648d6b99d2c626b05b2ffa4">&#9670;&nbsp;</a></span>hwloc_bitmap_to_ith_ulong()</h2>
1626
1627 <div class="memitem">
1628 <div class="memproto">
1629 <table class="memname">
1630 <tr>
1631 <td class="memname">unsigned long hwloc_bitmap_to_ith_ulong </td>
1632 <td>(</td>
1633 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1634 <td class="paramname"><em>bitmap</em>, </td>
1635 </tr>
1636 <tr>
1637 <td class="paramkey"></td>
1638 <td></td>
1639 <td class="paramtype">unsigned&#160;</td>
1640 <td class="paramname"><em>i</em>&#160;</td>
1641 </tr>
1642 <tr>
1643 <td></td>
1644 <td>)</td>
1645 <td></td><td></td>
1646 </tr>
1647 </table>
1648 </div><div class="memdoc">
1649
1650 <p>Convert the <code>i</code> -th subset of bitmap <code>bitmap</code> into unsigned long mask. </p>
1651
1652 </div>
1653 </div>
1654 <a id="gab6a6bae22a33ec6adfc169a953c13e6c"></a>
1655 <h2 class="memtitle"><span class="permalink"><a href="#gab6a6bae22a33ec6adfc169a953c13e6c">&#9670;&nbsp;</a></span>hwloc_bitmap_to_ulong()</h2>
1656
1657 <div class="memitem">
1658 <div class="memproto">
1659 <table class="memname">
1660 <tr>
1661 <td class="memname">unsigned long hwloc_bitmap_to_ulong </td>
1662 <td>(</td>
1663 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1664 <td class="paramname"><em>bitmap</em></td><td>)</td>
1665 <td></td>
1666 </tr>
1667 </table>
1668 </div><div class="memdoc">
1669
1670 <p>Convert the beginning part of bitmap <code>bitmap</code> into unsigned long <code>mask</code>. </p>
1671
1672 </div>
1673 </div>
1674 <a id="gacd215a2348732de25d94a4ecd76d528c"></a>
1675 <h2 class="memtitle"><span class="permalink"><a href="#gacd215a2348732de25d94a4ecd76d528c">&#9670;&nbsp;</a></span>hwloc_bitmap_to_ulongs()</h2>
1676
1677 <div class="memitem">
1678 <div class="memproto">
1679 <table class="memname">
1680 <tr>
1681 <td class="memname">int hwloc_bitmap_to_ulongs </td>
1682 <td>(</td>
1683 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1684 <td class="paramname"><em>bitmap</em>, </td>
1685 </tr>
1686 <tr>
1687 <td class="paramkey"></td>
1688 <td></td>
1689 <td class="paramtype">unsigned&#160;</td>
1921690 <td class="paramname"><em>nr</em>, </td>
1931691 </tr>
1941692 <tr>
1951693 <td class="paramkey"></td>
1961694 <td></td>
197 <td class="paramtype">struct <a class="el" href="a00316.html">hwloc_distances_s</a> **&#160;</td>
198 <td class="paramname"><em>distances</em>, </td>
199 </tr>
200 <tr>
201 <td class="paramkey"></td>
202 <td></td>
203 <td class="paramtype">unsigned long&#160;</td>
204 <td class="paramname"><em>kind</em>, </td>
205 </tr>
206 <tr>
207 <td class="paramkey"></td>
208 <td></td>
209 <td class="paramtype">unsigned long&#160;</td>
210 <td class="paramname"><em>flags</em>&#160;</td>
211 </tr>
212 <tr>
213 <td></td>
214 <td>)</td>
215 <td></td><td></td>
216 </tr>
217 </table>
218 </div><div class="memdoc">
219
220 <p>Retrieve distance matrices for object at a specific depth in the topology. </p>
221 <p>Identical to <a class="el" href="a00214.html#ga613e6b2a5d0f06626ee8d0c12fa46691" title="Retrieve distance matrices.">hwloc_distances_get()</a> with the additional <code>depth</code> filter. </p>
222
223 </div>
224 </div>
225 <a id="gaa457f35b8745ca41ec17797c0d7b20f0"></a>
226 <h2 class="memtitle"><span class="permalink"><a href="#gaa457f35b8745ca41ec17797c0d7b20f0">&#9670;&nbsp;</a></span>hwloc_distances_get_by_name()</h2>
227
228 <div class="memitem">
229 <div class="memproto">
230 <table class="memname">
231 <tr>
232 <td class="memname">int hwloc_distances_get_by_name </td>
233 <td>(</td>
234 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
235 <td class="paramname"><em>topology</em>, </td>
236 </tr>
237 <tr>
238 <td class="paramkey"></td>
239 <td></td>
240 <td class="paramtype">const char *&#160;</td>
241 <td class="paramname"><em>name</em>, </td>
242 </tr>
243 <tr>
244 <td class="paramkey"></td>
245 <td></td>
246 <td class="paramtype">unsigned *&#160;</td>
247 <td class="paramname"><em>nr</em>, </td>
248 </tr>
249 <tr>
250 <td class="paramkey"></td>
251 <td></td>
252 <td class="paramtype">struct <a class="el" href="a00316.html">hwloc_distances_s</a> **&#160;</td>
253 <td class="paramname"><em>distances</em>, </td>
254 </tr>
255 <tr>
256 <td class="paramkey"></td>
257 <td></td>
258 <td class="paramtype">unsigned long&#160;</td>
259 <td class="paramname"><em>flags</em>&#160;</td>
260 </tr>
261 <tr>
262 <td></td>
263 <td>)</td>
264 <td></td><td></td>
265 </tr>
266 </table>
267 </div><div class="memdoc">
268
269 <p>Retrieve a distance matrix with the given name. </p>
270 <p>Usually only one distances structure may match a given name.</p>
271 <p>The name of the most common structure is "NUMALatency". </p>
272
273 </div>
274 </div>
275 <a id="gaaa6bfbc20072a4f4de132eec859067f6"></a>
276 <h2 class="memtitle"><span class="permalink"><a href="#gaaa6bfbc20072a4f4de132eec859067f6">&#9670;&nbsp;</a></span>hwloc_distances_get_by_type()</h2>
277
278 <div class="memitem">
279 <div class="memproto">
280 <table class="memname">
281 <tr>
282 <td class="memname">int hwloc_distances_get_by_type </td>
283 <td>(</td>
284 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
285 <td class="paramname"><em>topology</em>, </td>
286 </tr>
287 <tr>
288 <td class="paramkey"></td>
289 <td></td>
290 <td class="paramtype"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
291 <td class="paramname"><em>type</em>, </td>
292 </tr>
293 <tr>
294 <td class="paramkey"></td>
295 <td></td>
296 <td class="paramtype">unsigned *&#160;</td>
297 <td class="paramname"><em>nr</em>, </td>
298 </tr>
299 <tr>
300 <td class="paramkey"></td>
301 <td></td>
302 <td class="paramtype">struct <a class="el" href="a00316.html">hwloc_distances_s</a> **&#160;</td>
303 <td class="paramname"><em>distances</em>, </td>
304 </tr>
305 <tr>
306 <td class="paramkey"></td>
307 <td></td>
308 <td class="paramtype">unsigned long&#160;</td>
309 <td class="paramname"><em>kind</em>, </td>
310 </tr>
311 <tr>
312 <td class="paramkey"></td>
313 <td></td>
314 <td class="paramtype">unsigned long&#160;</td>
315 <td class="paramname"><em>flags</em>&#160;</td>
316 </tr>
317 <tr>
318 <td></td>
319 <td>)</td>
320 <td></td><td></td>
321 </tr>
322 </table>
323 </div><div class="memdoc">
324
325 <p>Retrieve distance matrices for object of a specific type. </p>
326 <p>Identical to <a class="el" href="a00214.html#ga613e6b2a5d0f06626ee8d0c12fa46691" title="Retrieve distance matrices.">hwloc_distances_get()</a> with the additional <code>type</code> filter. </p>
327
328 </div>
329 </div>
330 <a id="gaa6f9697028c589cef0458edef5fe273f"></a>
331 <h2 class="memtitle"><span class="permalink"><a href="#gaa6f9697028c589cef0458edef5fe273f">&#9670;&nbsp;</a></span>hwloc_distances_get_name()</h2>
332
333 <div class="memitem">
334 <div class="memproto">
335 <table class="memname">
336 <tr>
337 <td class="memname">const char* hwloc_distances_get_name </td>
338 <td>(</td>
339 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
340 <td class="paramname"><em>topology</em>, </td>
341 </tr>
342 <tr>
343 <td class="paramkey"></td>
344 <td></td>
345 <td class="paramtype">struct <a class="el" href="a00316.html">hwloc_distances_s</a> *&#160;</td>
346 <td class="paramname"><em>distances</em>&#160;</td>
347 </tr>
348 <tr>
349 <td></td>
350 <td>)</td>
351 <td></td><td></td>
352 </tr>
353 </table>
354 </div><div class="memdoc">
355
356 <p>Get a description of what a distances structure contains. </p>
357 <p>For instance "NUMALatency" for hardware-provided NUMA distances (ACPI SLIT), or NULL if unknown. </p>
358
359 </div>
360 </div>
361 <a id="ga1dd78c1f9acd54f26aba0e284e97e51d"></a>
362 <h2 class="memtitle"><span class="permalink"><a href="#ga1dd78c1f9acd54f26aba0e284e97e51d">&#9670;&nbsp;</a></span>hwloc_distances_release()</h2>
363
364 <div class="memitem">
365 <div class="memproto">
366 <table class="memname">
367 <tr>
368 <td class="memname">void hwloc_distances_release </td>
369 <td>(</td>
370 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
371 <td class="paramname"><em>topology</em>, </td>
372 </tr>
373 <tr>
374 <td class="paramkey"></td>
375 <td></td>
376 <td class="paramtype">struct <a class="el" href="a00316.html">hwloc_distances_s</a> *&#160;</td>
377 <td class="paramname"><em>distances</em>&#160;</td>
378 </tr>
379 <tr>
380 <td></td>
381 <td>)</td>
382 <td></td><td></td>
383 </tr>
384 </table>
385 </div><div class="memdoc">
386
387 <p>Release a distance matrix structure previously returned by <a class="el" href="a00214.html#ga613e6b2a5d0f06626ee8d0c12fa46691" title="Retrieve distance matrices.">hwloc_distances_get()</a>. </p>
388 <dl class="section note"><dt>Note</dt><dd>This function is not required if the structure is removed with <a class="el" href="a00216.html#ga80bbf6f0db9af48c61780dd5152664c2" title="Release and remove the given distance matrice from the topology.">hwloc_distances_release_remove()</a>. </dd></dl>
1695 <td class="paramtype">unsigned long *&#160;</td>
1696 <td class="paramname"><em>masks</em>&#160;</td>
1697 </tr>
1698 <tr>
1699 <td></td>
1700 <td>)</td>
1701 <td></td><td></td>
1702 </tr>
1703 </table>
1704 </div><div class="memdoc">
1705
1706 <p>Convert the first <code>nr</code> subsets of bitmap <code>bitmap</code> into the array of <code>nr</code> unsigned long <code>masks</code>. </p>
1707 <p><code>nr</code> may be determined earlier with <a class="el" href="a00214.html#gac0744734d761d65c977aece565364908" title="Return the number of unsigned longs required for storing bitmap bitmap entirely.">hwloc_bitmap_nr_ulongs()</a>.</p>
1708 <dl class="section return"><dt>Returns</dt><dd>0 </dd></dl>
1709
1710 </div>
1711 </div>
1712 <a id="ga0200466842c0e1f5da75e84dde460b10"></a>
1713 <h2 class="memtitle"><span class="permalink"><a href="#ga0200466842c0e1f5da75e84dde460b10">&#9670;&nbsp;</a></span>hwloc_bitmap_weight()</h2>
1714
1715 <div class="memitem">
1716 <div class="memproto">
1717 <table class="memname">
1718 <tr>
1719 <td class="memname">int hwloc_bitmap_weight </td>
1720 <td>(</td>
1721 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1722 <td class="paramname"><em>bitmap</em></td><td>)</td>
1723 <td></td>
1724 </tr>
1725 </table>
1726 </div><div class="memdoc">
1727
1728 <p>Compute the "weight" of bitmap <code>bitmap</code> (i.e., number of indexes that are in the bitmap). </p>
1729 <dl class="section return"><dt>Returns</dt><dd>the number of indexes that are in the bitmap.</dd>
1730 <dd>
1731 -1 if <code>bitmap</code> is infinitely set. </dd></dl>
1732
1733 </div>
1734 </div>
1735 <a id="ga205508218e09cb9befd0687f16409f09"></a>
1736 <h2 class="memtitle"><span class="permalink"><a href="#ga205508218e09cb9befd0687f16409f09">&#9670;&nbsp;</a></span>hwloc_bitmap_xor()</h2>
1737
1738 <div class="memitem">
1739 <div class="memproto">
1740 <table class="memname">
1741 <tr>
1742 <td class="memname">int hwloc_bitmap_xor </td>
1743 <td>(</td>
1744 <td class="paramtype"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
1745 <td class="paramname"><em>res</em>, </td>
1746 </tr>
1747 <tr>
1748 <td class="paramkey"></td>
1749 <td></td>
1750 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1751 <td class="paramname"><em>bitmap1</em>, </td>
1752 </tr>
1753 <tr>
1754 <td class="paramkey"></td>
1755 <td></td>
1756 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
1757 <td class="paramname"><em>bitmap2</em>&#160;</td>
1758 </tr>
1759 <tr>
1760 <td></td>
1761 <td>)</td>
1762 <td></td><td></td>
1763 </tr>
1764 </table>
1765 </div><div class="memdoc">
1766
1767 <p>Xor bitmaps <code>bitmap1</code> and <code>bitmap2</code> and store the result in bitmap <code>res</code>. </p>
1768 <p><code>res</code> can be the same as <code>bitmap1</code> or <code>bitmap2</code> </p>
1769
1770 </div>
1771 </div>
1772 <a id="gaa97c5217613c8cae9862287170ea2132"></a>
1773 <h2 class="memtitle"><span class="permalink"><a href="#gaa97c5217613c8cae9862287170ea2132">&#9670;&nbsp;</a></span>hwloc_bitmap_zero()</h2>
1774
1775 <div class="memitem">
1776 <div class="memproto">
1777 <table class="memname">
1778 <tr>
1779 <td class="memname">void hwloc_bitmap_zero </td>
1780 <td>(</td>
1781 <td class="paramtype"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
1782 <td class="paramname"><em>bitmap</em></td><td>)</td>
1783 <td></td>
1784 </tr>
1785 </table>
1786 </div><div class="memdoc">
1787
1788 <p>Empty the bitmap <code>bitmap</code>. </p>
3891789
3901790 </div>
3911791 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Helpers for consulting distance matrices</title>
7 <title>Hardware Locality (hwloc): Exporting Topologies to XML</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="header">
4141 <div class="summary">
42 <a href="#enum-members">Enumerations</a> &#124;
4243 <a href="#func-members">Functions</a> </div>
4344 <div class="headertitle">
44 <div class="title">Helpers for consulting distance matrices</div> </div>
45 <div class="title">Exporting Topologies to XML</div> </div>
4546 </div><!--header-->
4647 <div class="contents">
4748 <table class="memberdecls">
49 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
50 Enumerations</h2></td></tr>
51 <tr class="memitem:ga0eb99636aff71fe2704e1fa0ffe8c18d"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00215.html#ga0eb99636aff71fe2704e1fa0ffe8c18d">hwloc_topology_export_xml_flags_e</a> { <a class="el" href="a00215.html#gga0eb99636aff71fe2704e1fa0ffe8c18dae7d6d96546131ef0043867b836b02e0f">HWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1</a>
52 }</td></tr>
53 <tr class="separator:ga0eb99636aff71fe2704e1fa0ffe8c18d"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 </table><table class="memberdecls">
4855 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
4956 Functions</h2></td></tr>
50 <tr class="memitem:gab9e770c7d56c5d6040f26bd1dc8854cd"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00215.html#gab9e770c7d56c5d6040f26bd1dc8854cd">hwloc_distances_obj_index</a> (struct <a class="el" href="a00316.html">hwloc_distances_s</a> *distances, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj)</td></tr>
51 <tr class="separator:gab9e770c7d56c5d6040f26bd1dc8854cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:ga3c665b23056e3269f777b21a67148c82"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00215.html#ga3c665b23056e3269f777b21a67148c82">hwloc_distances_obj_pair_values</a> (struct <a class="el" href="a00316.html">hwloc_distances_s</a> *distances, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj1, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj2, hwloc_uint64_t *value1to2, hwloc_uint64_t *value2to1)</td></tr>
53 <tr class="separator:ga3c665b23056e3269f777b21a67148c82"><td class="memSeparator" colspan="2">&#160;</td></tr>
57 <tr class="memitem:ga333f79975b4eeb28a3d8fad3373583ce"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00215.html#ga333f79975b4eeb28a3d8fad3373583ce">hwloc_topology_export_xml</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const char *xmlpath, unsigned long flags)</td></tr>
58 <tr class="separator:ga333f79975b4eeb28a3d8fad3373583ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
59 <tr class="memitem:gad33b7f7c11db10459505a3b1634fd3f1"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00215.html#gad33b7f7c11db10459505a3b1634fd3f1">hwloc_topology_export_xmlbuffer</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, char **xmlbuffer, int *buflen, unsigned long flags)</td></tr>
60 <tr class="separator:gad33b7f7c11db10459505a3b1634fd3f1"><td class="memSeparator" colspan="2">&#160;</td></tr>
61 <tr class="memitem:ga293e4a6489f15fd16ad22a5734561cf1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00215.html#ga293e4a6489f15fd16ad22a5734561cf1">hwloc_free_xmlbuffer</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, char *xmlbuffer)</td></tr>
62 <tr class="separator:ga293e4a6489f15fd16ad22a5734561cf1"><td class="memSeparator" colspan="2">&#160;</td></tr>
63 <tr class="memitem:ga9d6ff0f7a8dd45be9aa8575ef31978cc"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00215.html#ga9d6ff0f7a8dd45be9aa8575ef31978cc">hwloc_topology_set_userdata_export_callback</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, void(*export_cb)(void *reserved, <a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj))</td></tr>
64 <tr class="separator:ga9d6ff0f7a8dd45be9aa8575ef31978cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
65 <tr class="memitem:gaa541bdd628416dbbe97d0df69d3de958"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00215.html#gaa541bdd628416dbbe97d0df69d3de958">hwloc_export_obj_userdata</a> (void *reserved, <a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj, const char *name, const void *buffer, size_t length)</td></tr>
66 <tr class="separator:gaa541bdd628416dbbe97d0df69d3de958"><td class="memSeparator" colspan="2">&#160;</td></tr>
67 <tr class="memitem:ga1b7358137cec27bd073f58a606ecbaba"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00215.html#ga1b7358137cec27bd073f58a606ecbaba">hwloc_export_obj_userdata_base64</a> (void *reserved, <a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj, const char *name, const void *buffer, size_t length)</td></tr>
68 <tr class="separator:ga1b7358137cec27bd073f58a606ecbaba"><td class="memSeparator" colspan="2">&#160;</td></tr>
69 <tr class="memitem:ga5ac6917ea7289955fb1ffda4353af9b0"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00215.html#ga5ac6917ea7289955fb1ffda4353af9b0">hwloc_topology_set_userdata_import_callback</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, void(*import_cb)(<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj, const char *name, const void *buffer, size_t length))</td></tr>
70 <tr class="separator:ga5ac6917ea7289955fb1ffda4353af9b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
5471 </table>
5572 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
73 <h2 class="groupheader">Enumeration Type Documentation</h2>
74 <a id="ga0eb99636aff71fe2704e1fa0ffe8c18d"></a>
75 <h2 class="memtitle"><span class="permalink"><a href="#ga0eb99636aff71fe2704e1fa0ffe8c18d">&#9670;&nbsp;</a></span>hwloc_topology_export_xml_flags_e</h2>
76
77 <div class="memitem">
78 <div class="memproto">
79 <table class="memname">
80 <tr>
81 <td class="memname">enum <a class="el" href="a00215.html#ga0eb99636aff71fe2704e1fa0ffe8c18d">hwloc_topology_export_xml_flags_e</a></td>
82 </tr>
83 </table>
84 </div><div class="memdoc">
85
86 <p>Flags for exporting XML topologies. </p>
87 <p>Flags to be given as a OR'ed set to <a class="el" href="a00215.html#ga333f79975b4eeb28a3d8fad3373583ce" title="Export the topology into an XML file.">hwloc_topology_export_xml()</a>. </p>
88 <table class="fieldtable">
89 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga0eb99636aff71fe2704e1fa0ffe8c18dae7d6d96546131ef0043867b836b02e0f"></a>HWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1&#160;</td><td class="fielddoc"><p>Export XML that is loadable by hwloc v1.x. However, the export may miss some details about the topology. </p>
90 </td></tr>
91 </table>
92
93 </div>
94 </div>
5695 <h2 class="groupheader">Function Documentation</h2>
57 <a id="gab9e770c7d56c5d6040f26bd1dc8854cd"></a>
58 <h2 class="memtitle"><span class="permalink"><a href="#gab9e770c7d56c5d6040f26bd1dc8854cd">&#9670;&nbsp;</a></span>hwloc_distances_obj_index()</h2>
59
60 <div class="memitem">
61 <div class="memproto">
62 <table class="mlabels">
63 <tr>
64 <td class="mlabels-left">
65 <table class="memname">
66 <tr>
67 <td class="memname">static int hwloc_distances_obj_index </td>
68 <td>(</td>
69 <td class="paramtype">struct <a class="el" href="a00316.html">hwloc_distances_s</a> *&#160;</td>
70 <td class="paramname"><em>distances</em>, </td>
71 </tr>
72 <tr>
73 <td class="paramkey"></td>
74 <td></td>
75 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
76 <td class="paramname"><em>obj</em>&#160;</td>
77 </tr>
78 <tr>
79 <td></td>
80 <td>)</td>
81 <td></td><td></td>
82 </tr>
83 </table>
84 </td>
85 <td class="mlabels-right">
86 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
87 </tr>
88 </table>
89 </div><div class="memdoc">
90
91 <p>Find the index of an object in a distances structure. </p>
92 <dl class="section return"><dt>Returns</dt><dd>-1 if object <code>obj</code> is not involved in structure <code>distances</code>. </dd></dl>
93
94 </div>
95 </div>
96 <a id="ga3c665b23056e3269f777b21a67148c82"></a>
97 <h2 class="memtitle"><span class="permalink"><a href="#ga3c665b23056e3269f777b21a67148c82">&#9670;&nbsp;</a></span>hwloc_distances_obj_pair_values()</h2>
98
99 <div class="memitem">
100 <div class="memproto">
101 <table class="mlabels">
102 <tr>
103 <td class="mlabels-left">
104 <table class="memname">
105 <tr>
106 <td class="memname">static int hwloc_distances_obj_pair_values </td>
107 <td>(</td>
108 <td class="paramtype">struct <a class="el" href="a00316.html">hwloc_distances_s</a> *&#160;</td>
109 <td class="paramname"><em>distances</em>, </td>
110 </tr>
111 <tr>
112 <td class="paramkey"></td>
113 <td></td>
114 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
115 <td class="paramname"><em>obj1</em>, </td>
116 </tr>
117 <tr>
118 <td class="paramkey"></td>
119 <td></td>
120 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
121 <td class="paramname"><em>obj2</em>, </td>
122 </tr>
123 <tr>
124 <td class="paramkey"></td>
125 <td></td>
126 <td class="paramtype">hwloc_uint64_t *&#160;</td>
127 <td class="paramname"><em>value1to2</em>, </td>
128 </tr>
129 <tr>
130 <td class="paramkey"></td>
131 <td></td>
132 <td class="paramtype">hwloc_uint64_t *&#160;</td>
133 <td class="paramname"><em>value2to1</em>&#160;</td>
134 </tr>
135 <tr>
136 <td></td>
137 <td>)</td>
138 <td></td><td></td>
139 </tr>
140 </table>
141 </td>
142 <td class="mlabels-right">
143 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
144 </tr>
145 </table>
146 </div><div class="memdoc">
147
148 <p>Find the values between two objects in a distance matrices. </p>
149 <p>The distance from <code>obj1</code> to <code>obj2</code> is stored in the value pointed by <code>value1to2</code> and reciprocally.</p>
150 <dl class="section return"><dt>Returns</dt><dd>-1 if object <code>obj1</code> or <code>obj2</code> is not involved in structure <code>distances</code>. </dd></dl>
96 <a id="gaa541bdd628416dbbe97d0df69d3de958"></a>
97 <h2 class="memtitle"><span class="permalink"><a href="#gaa541bdd628416dbbe97d0df69d3de958">&#9670;&nbsp;</a></span>hwloc_export_obj_userdata()</h2>
98
99 <div class="memitem">
100 <div class="memproto">
101 <table class="memname">
102 <tr>
103 <td class="memname">int hwloc_export_obj_userdata </td>
104 <td>(</td>
105 <td class="paramtype">void *&#160;</td>
106 <td class="paramname"><em>reserved</em>, </td>
107 </tr>
108 <tr>
109 <td class="paramkey"></td>
110 <td></td>
111 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
112 <td class="paramname"><em>topology</em>, </td>
113 </tr>
114 <tr>
115 <td class="paramkey"></td>
116 <td></td>
117 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
118 <td class="paramname"><em>obj</em>, </td>
119 </tr>
120 <tr>
121 <td class="paramkey"></td>
122 <td></td>
123 <td class="paramtype">const char *&#160;</td>
124 <td class="paramname"><em>name</em>, </td>
125 </tr>
126 <tr>
127 <td class="paramkey"></td>
128 <td></td>
129 <td class="paramtype">const void *&#160;</td>
130 <td class="paramname"><em>buffer</em>, </td>
131 </tr>
132 <tr>
133 <td class="paramkey"></td>
134 <td></td>
135 <td class="paramtype">size_t&#160;</td>
136 <td class="paramname"><em>length</em>&#160;</td>
137 </tr>
138 <tr>
139 <td></td>
140 <td>)</td>
141 <td></td><td></td>
142 </tr>
143 </table>
144 </div><div class="memdoc">
145
146 <p>Export some object userdata to XML. </p>
147 <p>This function may only be called from within the export() callback passed to <a class="el" href="a00215.html#ga9d6ff0f7a8dd45be9aa8575ef31978cc" title="Set the application-specific callback for exporting object userdata.">hwloc_topology_set_userdata_export_callback()</a>. It may be invoked one of multiple times to export some userdata to XML. The <code>buffer</code> content of length <code>length</code> is stored with optional name <code>name</code>.</p>
148 <p>When importing this XML file, the import() callback (if set) will be called exactly as many times as <a class="el" href="a00215.html#gaa541bdd628416dbbe97d0df69d3de958" title="Export some object userdata to XML.">hwloc_export_obj_userdata()</a> was called during export(). It will receive the corresponding <code>name</code>, <code>buffer</code> and <code>length</code> arguments.</p>
149 <p><code>reserved</code>, <code>topology</code> and <code>obj</code> must be the first three parameters that were given to the export callback.</p>
150 <p>Only printable characters may be exported to XML string attributes. If a non-printable character is passed in <code>name</code> or <code>buffer</code>, the function returns -1 with errno set to EINVAL.</p>
151 <p>If exporting binary data, the application should first encode into printable characters only (or use <a class="el" href="a00215.html#ga1b7358137cec27bd073f58a606ecbaba" title="Encode and export some object userdata to XML.">hwloc_export_obj_userdata_base64()</a>). It should also take care of portability issues if the export may be reimported on a different architecture. </p>
152
153 </div>
154 </div>
155 <a id="ga1b7358137cec27bd073f58a606ecbaba"></a>
156 <h2 class="memtitle"><span class="permalink"><a href="#ga1b7358137cec27bd073f58a606ecbaba">&#9670;&nbsp;</a></span>hwloc_export_obj_userdata_base64()</h2>
157
158 <div class="memitem">
159 <div class="memproto">
160 <table class="memname">
161 <tr>
162 <td class="memname">int hwloc_export_obj_userdata_base64 </td>
163 <td>(</td>
164 <td class="paramtype">void *&#160;</td>
165 <td class="paramname"><em>reserved</em>, </td>
166 </tr>
167 <tr>
168 <td class="paramkey"></td>
169 <td></td>
170 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
171 <td class="paramname"><em>topology</em>, </td>
172 </tr>
173 <tr>
174 <td class="paramkey"></td>
175 <td></td>
176 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
177 <td class="paramname"><em>obj</em>, </td>
178 </tr>
179 <tr>
180 <td class="paramkey"></td>
181 <td></td>
182 <td class="paramtype">const char *&#160;</td>
183 <td class="paramname"><em>name</em>, </td>
184 </tr>
185 <tr>
186 <td class="paramkey"></td>
187 <td></td>
188 <td class="paramtype">const void *&#160;</td>
189 <td class="paramname"><em>buffer</em>, </td>
190 </tr>
191 <tr>
192 <td class="paramkey"></td>
193 <td></td>
194 <td class="paramtype">size_t&#160;</td>
195 <td class="paramname"><em>length</em>&#160;</td>
196 </tr>
197 <tr>
198 <td></td>
199 <td>)</td>
200 <td></td><td></td>
201 </tr>
202 </table>
203 </div><div class="memdoc">
204
205 <p>Encode and export some object userdata to XML. </p>
206 <p>This function is similar to <a class="el" href="a00215.html#gaa541bdd628416dbbe97d0df69d3de958" title="Export some object userdata to XML.">hwloc_export_obj_userdata()</a> but it encodes the input buffer into printable characters before exporting. On import, decoding is automatically performed before the data is given to the import() callback if any.</p>
207 <p>This function may only be called from within the export() callback passed to <a class="el" href="a00215.html#ga9d6ff0f7a8dd45be9aa8575ef31978cc" title="Set the application-specific callback for exporting object userdata.">hwloc_topology_set_userdata_export_callback()</a>.</p>
208 <p>The function does not take care of portability issues if the export may be reimported on a different architecture. </p>
209
210 </div>
211 </div>
212 <a id="ga293e4a6489f15fd16ad22a5734561cf1"></a>
213 <h2 class="memtitle"><span class="permalink"><a href="#ga293e4a6489f15fd16ad22a5734561cf1">&#9670;&nbsp;</a></span>hwloc_free_xmlbuffer()</h2>
214
215 <div class="memitem">
216 <div class="memproto">
217 <table class="memname">
218 <tr>
219 <td class="memname">void hwloc_free_xmlbuffer </td>
220 <td>(</td>
221 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
222 <td class="paramname"><em>topology</em>, </td>
223 </tr>
224 <tr>
225 <td class="paramkey"></td>
226 <td></td>
227 <td class="paramtype">char *&#160;</td>
228 <td class="paramname"><em>xmlbuffer</em>&#160;</td>
229 </tr>
230 <tr>
231 <td></td>
232 <td>)</td>
233 <td></td><td></td>
234 </tr>
235 </table>
236 </div><div class="memdoc">
237
238 <p>Free a buffer allocated by <a class="el" href="a00215.html#gad33b7f7c11db10459505a3b1634fd3f1" title="Export the topology into a newly-allocated XML memory buffer.">hwloc_topology_export_xmlbuffer()</a> </p>
239
240 </div>
241 </div>
242 <a id="ga333f79975b4eeb28a3d8fad3373583ce"></a>
243 <h2 class="memtitle"><span class="permalink"><a href="#ga333f79975b4eeb28a3d8fad3373583ce">&#9670;&nbsp;</a></span>hwloc_topology_export_xml()</h2>
244
245 <div class="memitem">
246 <div class="memproto">
247 <table class="memname">
248 <tr>
249 <td class="memname">int hwloc_topology_export_xml </td>
250 <td>(</td>
251 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
252 <td class="paramname"><em>topology</em>, </td>
253 </tr>
254 <tr>
255 <td class="paramkey"></td>
256 <td></td>
257 <td class="paramtype">const char *&#160;</td>
258 <td class="paramname"><em>xmlpath</em>, </td>
259 </tr>
260 <tr>
261 <td class="paramkey"></td>
262 <td></td>
263 <td class="paramtype">unsigned long&#160;</td>
264 <td class="paramname"><em>flags</em>&#160;</td>
265 </tr>
266 <tr>
267 <td></td>
268 <td>)</td>
269 <td></td><td></td>
270 </tr>
271 </table>
272 </div><div class="memdoc">
273
274 <p>Export the topology into an XML file. </p>
275 <p>This file may be loaded later through <a class="el" href="a00201.html#ga879439b7ee99407ee911b3ac64e9a25e" title="Enable XML-file based topology.">hwloc_topology_set_xml()</a>.</p>
276 <p>By default, the latest export format is used, which means older hwloc releases (e.g. v1.x) will not be able to import it. Exporting to v1.x specific XML format is possible using flag <a class="el" href="a00215.html#gga0eb99636aff71fe2704e1fa0ffe8c18dae7d6d96546131ef0043867b836b02e0f" title="Export XML that is loadable by hwloc v1.x. However, the export may miss some details about the topolo...">HWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1</a> but it may miss some details about the topology. If there is any chance that the exported file may ever be imported back by a process using hwloc 1.x, one should consider detecting it at runtime and using the corresponding export format.</p>
277 <p><code>flags</code> is a OR'ed set of <a class="el" href="a00215.html#ga0eb99636aff71fe2704e1fa0ffe8c18d" title="Flags for exporting XML topologies.">hwloc_topology_export_xml_flags_e</a>.</p>
278 <dl class="section return"><dt>Returns</dt><dd>-1 if a failure occured.</dd></dl>
279 <dl class="section note"><dt>Note</dt><dd>See also <a class="el" href="a00215.html#ga9d6ff0f7a8dd45be9aa8575ef31978cc" title="Set the application-specific callback for exporting object userdata.">hwloc_topology_set_userdata_export_callback()</a> for exporting application-specific object userdata.</dd>
280 <dd>
281 The topology-specific userdata pointer is ignored when exporting to XML.</dd>
282 <dd>
283 Only printable characters may be exported to XML string attributes. Any other character, especially any non-ASCII character, will be silently dropped.</dd>
284 <dd>
285 If <code>name</code> is "-", the XML output is sent to the standard output. </dd></dl>
286
287 </div>
288 </div>
289 <a id="gad33b7f7c11db10459505a3b1634fd3f1"></a>
290 <h2 class="memtitle"><span class="permalink"><a href="#gad33b7f7c11db10459505a3b1634fd3f1">&#9670;&nbsp;</a></span>hwloc_topology_export_xmlbuffer()</h2>
291
292 <div class="memitem">
293 <div class="memproto">
294 <table class="memname">
295 <tr>
296 <td class="memname">int hwloc_topology_export_xmlbuffer </td>
297 <td>(</td>
298 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
299 <td class="paramname"><em>topology</em>, </td>
300 </tr>
301 <tr>
302 <td class="paramkey"></td>
303 <td></td>
304 <td class="paramtype">char **&#160;</td>
305 <td class="paramname"><em>xmlbuffer</em>, </td>
306 </tr>
307 <tr>
308 <td class="paramkey"></td>
309 <td></td>
310 <td class="paramtype">int *&#160;</td>
311 <td class="paramname"><em>buflen</em>, </td>
312 </tr>
313 <tr>
314 <td class="paramkey"></td>
315 <td></td>
316 <td class="paramtype">unsigned long&#160;</td>
317 <td class="paramname"><em>flags</em>&#160;</td>
318 </tr>
319 <tr>
320 <td></td>
321 <td>)</td>
322 <td></td><td></td>
323 </tr>
324 </table>
325 </div><div class="memdoc">
326
327 <p>Export the topology into a newly-allocated XML memory buffer. </p>
328 <p><code>xmlbuffer</code> is allocated by the callee and should be freed with <a class="el" href="a00215.html#ga293e4a6489f15fd16ad22a5734561cf1" title="Free a buffer allocated by hwloc_topology_export_xmlbuffer()">hwloc_free_xmlbuffer()</a> later in the caller.</p>
329 <p>This memory buffer may be loaded later through <a class="el" href="a00201.html#ga2745616b65595e1c1e579ecc7e461fa8" title="Enable XML based topology using a memory buffer (instead of a file, as with hwloc_topology_set_xml())...">hwloc_topology_set_xmlbuffer()</a>.</p>
330 <p>By default, the latest export format is used, which means older hwloc releases (e.g. v1.x) will not be able to import it. Exporting to v1.x specific XML format is possible using flag <a class="el" href="a00215.html#gga0eb99636aff71fe2704e1fa0ffe8c18dae7d6d96546131ef0043867b836b02e0f" title="Export XML that is loadable by hwloc v1.x. However, the export may miss some details about the topolo...">HWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1</a> but it may miss some details about the topology. If there is any chance that the exported buffer may ever be imported back by a process using hwloc 1.x, one should consider detecting it at runtime and using the corresponding export format.</p>
331 <p>The returned buffer ends with a \0 that is included in the returned length.</p>
332 <p><code>flags</code> is a OR'ed set of <a class="el" href="a00215.html#ga0eb99636aff71fe2704e1fa0ffe8c18d" title="Flags for exporting XML topologies.">hwloc_topology_export_xml_flags_e</a>.</p>
333 <dl class="section return"><dt>Returns</dt><dd>-1 if a failure occured.</dd></dl>
334 <dl class="section note"><dt>Note</dt><dd>See also <a class="el" href="a00215.html#ga9d6ff0f7a8dd45be9aa8575ef31978cc" title="Set the application-specific callback for exporting object userdata.">hwloc_topology_set_userdata_export_callback()</a> for exporting application-specific object userdata.</dd>
335 <dd>
336 The topology-specific userdata pointer is ignored when exporting to XML.</dd>
337 <dd>
338 Only printable characters may be exported to XML string attributes. Any other character, especially any non-ASCII character, will be silently dropped. </dd></dl>
339
340 </div>
341 </div>
342 <a id="ga9d6ff0f7a8dd45be9aa8575ef31978cc"></a>
343 <h2 class="memtitle"><span class="permalink"><a href="#ga9d6ff0f7a8dd45be9aa8575ef31978cc">&#9670;&nbsp;</a></span>hwloc_topology_set_userdata_export_callback()</h2>
344
345 <div class="memitem">
346 <div class="memproto">
347 <table class="memname">
348 <tr>
349 <td class="memname">void hwloc_topology_set_userdata_export_callback </td>
350 <td>(</td>
351 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
352 <td class="paramname"><em>topology</em>, </td>
353 </tr>
354 <tr>
355 <td class="paramkey"></td>
356 <td></td>
357 <td class="paramtype">void(*)(void *reserved, <a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj)&#160;</td>
358 <td class="paramname"><em>export_cb</em>&#160;</td>
359 </tr>
360 <tr>
361 <td></td>
362 <td>)</td>
363 <td></td><td></td>
364 </tr>
365 </table>
366 </div><div class="memdoc">
367
368 <p>Set the application-specific callback for exporting object userdata. </p>
369 <p>The object userdata pointer is not exported to XML by default because hwloc does not know what it contains.</p>
370 <p>This function lets applications set <code>export_cb</code> to a callback function that converts this opaque userdata into an exportable string.</p>
371 <p><code>export_cb</code> is invoked during XML export for each object whose <code>userdata</code> pointer is not <code>NULL</code>. The callback should use <a class="el" href="a00215.html#gaa541bdd628416dbbe97d0df69d3de958" title="Export some object userdata to XML.">hwloc_export_obj_userdata()</a> or <a class="el" href="a00215.html#ga1b7358137cec27bd073f58a606ecbaba" title="Encode and export some object userdata to XML.">hwloc_export_obj_userdata_base64()</a> to actually export something to XML (possibly multiple times per object).</p>
372 <p><code>export_cb</code> may be set to <code>NULL</code> if userdata should not be exported to XML.</p>
373 <dl class="section note"><dt>Note</dt><dd>The topology-specific userdata pointer is ignored when exporting to XML. </dd></dl>
374
375 </div>
376 </div>
377 <a id="ga5ac6917ea7289955fb1ffda4353af9b0"></a>
378 <h2 class="memtitle"><span class="permalink"><a href="#ga5ac6917ea7289955fb1ffda4353af9b0">&#9670;&nbsp;</a></span>hwloc_topology_set_userdata_import_callback()</h2>
379
380 <div class="memitem">
381 <div class="memproto">
382 <table class="memname">
383 <tr>
384 <td class="memname">void hwloc_topology_set_userdata_import_callback </td>
385 <td>(</td>
386 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
387 <td class="paramname"><em>topology</em>, </td>
388 </tr>
389 <tr>
390 <td class="paramkey"></td>
391 <td></td>
392 <td class="paramtype">void(*)(<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj, const char *name, const void *buffer, size_t length)&#160;</td>
393 <td class="paramname"><em>import_cb</em>&#160;</td>
394 </tr>
395 <tr>
396 <td></td>
397 <td>)</td>
398 <td></td><td></td>
399 </tr>
400 </table>
401 </div><div class="memdoc">
402
403 <p>Set the application-specific callback for importing userdata. </p>
404 <p>On XML import, userdata is ignored by default because hwloc does not know how to store it in memory.</p>
405 <p>This function lets applications set <code>import_cb</code> to a callback function that will get the XML-stored userdata and store it in the object as expected by the application.</p>
406 <p><code>import_cb</code> is called during <a class="el" href="a00195.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a> as many times as <a class="el" href="a00215.html#gaa541bdd628416dbbe97d0df69d3de958" title="Export some object userdata to XML.">hwloc_export_obj_userdata()</a> was called during export. The topology is not entirely setup yet. Object attributes are ready to consult, but links between objects are not.</p>
407 <p><code>import_cb</code> may be <code>NULL</code> if userdata should be ignored during import.</p>
408 <dl class="section note"><dt>Note</dt><dd><code>buffer</code> contains <code>length</code> characters followed by a null byte ('\0').</dd>
409 <dd>
410 This function should be called before <a class="el" href="a00195.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a>.</dd>
411 <dd>
412 The topology-specific userdata pointer is ignored when importing from XML. </dd></dl>
151413
152414 </div>
153415 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Add or remove distances between objects</title>
7 <title>Hardware Locality (hwloc): Exporting Topologies to Synthetic</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4242 <a href="#enum-members">Enumerations</a> &#124;
4343 <a href="#func-members">Functions</a> </div>
4444 <div class="headertitle">
45 <div class="title">Add or remove distances between objects</div> </div>
45 <div class="title">Exporting Topologies to Synthetic</div> </div>
4646 </div><!--header-->
4747 <div class="contents">
4848 <table class="memberdecls">
4949 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
5050 Enumerations</h2></td></tr>
51 <tr class="memitem:ga22428b6bab271411e3834e6b4ca22e37"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00216.html#ga22428b6bab271411e3834e6b4ca22e37">hwloc_distances_add_flag_e</a> { <a class="el" href="a00216.html#gga22428b6bab271411e3834e6b4ca22e37a7f6baba797d70538d03c9d13052c62ab">HWLOC_DISTANCES_ADD_FLAG_GROUP</a>
52 , <a class="el" href="a00216.html#gga22428b6bab271411e3834e6b4ca22e37a5233ccf631c3bc53dd5c3e7a5d5c9b77">HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE</a>
51 <tr class="memitem:ga7ac6f97cc40bd50c40285084f869ba63"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00216.html#ga7ac6f97cc40bd50c40285084f869ba63">hwloc_topology_export_synthetic_flags_e</a> { <a class="el" href="a00216.html#gga7ac6f97cc40bd50c40285084f869ba63a3b3bd4ba2ef9990810865e561034ccc9">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_EXTENDED_TYPES</a>
52 , <a class="el" href="a00216.html#gga7ac6f97cc40bd50c40285084f869ba63aaa2702ffba050bab079b3041aec737d4">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_ATTRS</a>
53 , <a class="el" href="a00216.html#gga7ac6f97cc40bd50c40285084f869ba63a7896bdf4ccfcdcd09a9f76c0f5e3a5b8">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_V1</a>
54 , <a class="el" href="a00216.html#gga7ac6f97cc40bd50c40285084f869ba63a22c57cf18e1da4a6c584fb783b552f9f">HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_IGNORE_MEMORY</a>
5355 }</td></tr>
54 <tr class="separator:ga22428b6bab271411e3834e6b4ca22e37"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="separator:ga7ac6f97cc40bd50c40285084f869ba63"><td class="memSeparator" colspan="2">&#160;</td></tr>
5557 </table><table class="memberdecls">
5658 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
5759 Functions</h2></td></tr>
58 <tr class="memitem:gac5a71d96cd86efe31d6f8d282aae3d97"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00216.html#gac5a71d96cd86efe31d6f8d282aae3d97">hwloc_distances_add</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned nbobjs, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *objs, hwloc_uint64_t *values, unsigned long kind, unsigned long flags)</td></tr>
59 <tr class="separator:gac5a71d96cd86efe31d6f8d282aae3d97"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:gac188d9b64d9560255ce5f6d0a20f9c0a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00216.html#gac188d9b64d9560255ce5f6d0a20f9c0a">hwloc_distances_remove</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
61 <tr class="separator:gac188d9b64d9560255ce5f6d0a20f9c0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:gaa642a4c1a21c84f38ae23fca8a27845d"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00216.html#gaa642a4c1a21c84f38ae23fca8a27845d">hwloc_distances_remove_by_depth</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int depth)</td></tr>
63 <tr class="separator:gaa642a4c1a21c84f38ae23fca8a27845d"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 <tr class="memitem:ga93db53773c96f5b83815e8441e2ebb93"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00216.html#ga93db53773c96f5b83815e8441e2ebb93">hwloc_distances_remove_by_type</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
65 <tr class="separator:ga93db53773c96f5b83815e8441e2ebb93"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 <tr class="memitem:ga80bbf6f0db9af48c61780dd5152664c2"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00216.html#ga80bbf6f0db9af48c61780dd5152664c2">hwloc_distances_release_remove</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, struct <a class="el" href="a00316.html">hwloc_distances_s</a> *distances)</td></tr>
67 <tr class="separator:ga80bbf6f0db9af48c61780dd5152664c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:ga24b7864a1c588309c4749f621f03b4c7"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00216.html#ga24b7864a1c588309c4749f621f03b4c7">hwloc_topology_export_synthetic</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, char *buffer, size_t buflen, unsigned long flags)</td></tr>
61 <tr class="separator:ga24b7864a1c588309c4749f621f03b4c7"><td class="memSeparator" colspan="2">&#160;</td></tr>
6862 </table>
6963 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
7064 <h2 class="groupheader">Enumeration Type Documentation</h2>
71 <a id="ga22428b6bab271411e3834e6b4ca22e37"></a>
72 <h2 class="memtitle"><span class="permalink"><a href="#ga22428b6bab271411e3834e6b4ca22e37">&#9670;&nbsp;</a></span>hwloc_distances_add_flag_e</h2>
65 <a id="ga7ac6f97cc40bd50c40285084f869ba63"></a>
66 <h2 class="memtitle"><span class="permalink"><a href="#ga7ac6f97cc40bd50c40285084f869ba63">&#9670;&nbsp;</a></span>hwloc_topology_export_synthetic_flags_e</h2>
7367
7468 <div class="memitem">
7569 <div class="memproto">
7670 <table class="memname">
7771 <tr>
78 <td class="memname">enum <a class="el" href="a00216.html#ga22428b6bab271411e3834e6b4ca22e37">hwloc_distances_add_flag_e</a></td>
72 <td class="memname">enum <a class="el" href="a00216.html#ga7ac6f97cc40bd50c40285084f869ba63">hwloc_topology_export_synthetic_flags_e</a></td>
7973 </tr>
8074 </table>
8175 </div><div class="memdoc">
8276
83 <p>Flags for adding a new distances to a topology. </p>
77 <p>Flags for exporting synthetic topologies. </p>
78 <p>Flags to be given as a OR'ed set to <a class="el" href="a00216.html#ga24b7864a1c588309c4749f621f03b4c7" title="Export the topology as a synthetic string.">hwloc_topology_export_synthetic()</a>. </p>
8479 <table class="fieldtable">
85 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga22428b6bab271411e3834e6b4ca22e37a7f6baba797d70538d03c9d13052c62ab"></a>HWLOC_DISTANCES_ADD_FLAG_GROUP&#160;</td><td class="fielddoc"><p>Try to group objects based on the newly provided distance information. </p>
80 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga7ac6f97cc40bd50c40285084f869ba63a3b3bd4ba2ef9990810865e561034ccc9"></a>HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_EXTENDED_TYPES&#160;</td><td class="fielddoc"><p>Export extended types such as L2dcache as basic types such as Cache. </p>
81 <p>This is required if loading the synthetic description with hwloc &lt; 1.9. </p>
8682 </td></tr>
87 <tr><td class="fieldname"><a id="gga22428b6bab271411e3834e6b4ca22e37a5233ccf631c3bc53dd5c3e7a5d5c9b77"></a>HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE&#160;</td><td class="fielddoc"><p>If grouping, consider the distance values as inaccurate and relax the comparisons during the grouping algorithms. The actual accuracy may be modified through the HWLOC_GROUPING_ACCURACY environment variable (see <a class="el" href="a00388.html">Environment Variables</a>). </p>
83 <tr><td class="fieldname"><a id="gga7ac6f97cc40bd50c40285084f869ba63aaa2702ffba050bab079b3041aec737d4"></a>HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_ATTRS&#160;</td><td class="fielddoc"><p>Do not export level attributes. </p>
84 <p>Ignore level attributes such as memory/cache sizes or PU indexes. This is required if loading the synthetic description with hwloc &lt; 1.10. </p>
85 </td></tr>
86 <tr><td class="fieldname"><a id="gga7ac6f97cc40bd50c40285084f869ba63a7896bdf4ccfcdcd09a9f76c0f5e3a5b8"></a>HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_V1&#160;</td><td class="fielddoc"><p>Export the memory hierarchy as expected in hwloc 1.x. </p>
87 <p>Instead of attaching memory children to levels, export single NUMA node child as normal intermediate levels, when possible. This is required if loading the synthetic description with hwloc 1.x. However this may fail if some objects have multiple local NUMA nodes. </p>
88 </td></tr>
89 <tr><td class="fieldname"><a id="gga7ac6f97cc40bd50c40285084f869ba63a22c57cf18e1da4a6c584fb783b552f9f"></a>HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_IGNORE_MEMORY&#160;</td><td class="fielddoc"><p>Do not export memory information. </p>
90 <p>Only export the actual hierarchy of normal CPU-side objects and ignore where memory is attached. This is useful for when the hierarchy of CPUs is what really matters, but it behaves as if there was a single machine-wide NUMA node. </p>
8891 </td></tr>
8992 </table>
9093
9194 </div>
9295 </div>
9396 <h2 class="groupheader">Function Documentation</h2>
94 <a id="gac5a71d96cd86efe31d6f8d282aae3d97"></a>
95 <h2 class="memtitle"><span class="permalink"><a href="#gac5a71d96cd86efe31d6f8d282aae3d97">&#9670;&nbsp;</a></span>hwloc_distances_add()</h2>
97 <a id="ga24b7864a1c588309c4749f621f03b4c7"></a>
98 <h2 class="memtitle"><span class="permalink"><a href="#ga24b7864a1c588309c4749f621f03b4c7">&#9670;&nbsp;</a></span>hwloc_topology_export_synthetic()</h2>
9699
97100 <div class="memitem">
98101 <div class="memproto">
99102 <table class="memname">
100103 <tr>
101 <td class="memname">int hwloc_distances_add </td>
104 <td class="memname">int hwloc_topology_export_synthetic </td>
102105 <td>(</td>
103 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
106 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
104107 <td class="paramname"><em>topology</em>, </td>
105108 </tr>
106109 <tr>
107110 <td class="paramkey"></td>
108111 <td></td>
109 <td class="paramtype">unsigned&#160;</td>
110 <td class="paramname"><em>nbobjs</em>, </td>
112 <td class="paramtype">char *&#160;</td>
113 <td class="paramname"><em>buffer</em>, </td>
111114 </tr>
112115 <tr>
113116 <td class="paramkey"></td>
114117 <td></td>
115 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *&#160;</td>
116 <td class="paramname"><em>objs</em>, </td>
117 </tr>
118 <tr>
119 <td class="paramkey"></td>
120 <td></td>
121 <td class="paramtype">hwloc_uint64_t *&#160;</td>
122 <td class="paramname"><em>values</em>, </td>
123 </tr>
124 <tr>
125 <td class="paramkey"></td>
126 <td></td>
127 <td class="paramtype">unsigned long&#160;</td>
128 <td class="paramname"><em>kind</em>, </td>
118 <td class="paramtype">size_t&#160;</td>
119 <td class="paramname"><em>buflen</em>, </td>
129120 </tr>
130121 <tr>
131122 <td class="paramkey"></td>
141132 </table>
142133 </div><div class="memdoc">
143134
144 <p>Provide a new distance matrix. </p>
145 <p>Provide the matrix of distances between a set of objects given by <code>nbobjs</code> and the <code>objs</code> array. <code>nbobjs</code> must be at least 2. The distances are stored as a one-dimension array in <code>values</code>. The distance from object i to object j is in slot i*nbobjs+j.</p>
146 <p><code>kind</code> specifies the kind of distance as a OR'ed set of <a class="el" href="a00214.html#gab1bb10d3adb85b52cdc6fe5a7f74f108" title="Kinds of distance matrices.">hwloc_distances_kind_e</a>. Kind <a class="el" href="a00214.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108aa6cf2b6dfcf148b65952f811814efbe1" title="This distances structure covers objects of different types.">HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES</a> will be automatically added if objects of different types are given.</p>
147 <p><code>flags</code> configures the behavior of the function using an optional OR'ed set of <a class="el" href="a00216.html#ga22428b6bab271411e3834e6b4ca22e37" title="Flags for adding a new distances to a topology.">hwloc_distances_add_flag_e</a>. </p>
148
149 </div>
150 </div>
151 <a id="ga80bbf6f0db9af48c61780dd5152664c2"></a>
152 <h2 class="memtitle"><span class="permalink"><a href="#ga80bbf6f0db9af48c61780dd5152664c2">&#9670;&nbsp;</a></span>hwloc_distances_release_remove()</h2>
153
154 <div class="memitem">
155 <div class="memproto">
156 <table class="memname">
157 <tr>
158 <td class="memname">int hwloc_distances_release_remove </td>
159 <td>(</td>
160 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
161 <td class="paramname"><em>topology</em>, </td>
162 </tr>
163 <tr>
164 <td class="paramkey"></td>
165 <td></td>
166 <td class="paramtype">struct <a class="el" href="a00316.html">hwloc_distances_s</a> *&#160;</td>
167 <td class="paramname"><em>distances</em>&#160;</td>
168 </tr>
169 <tr>
170 <td></td>
171 <td>)</td>
172 <td></td><td></td>
173 </tr>
174 </table>
175 </div><div class="memdoc">
176
177 <p>Release and remove the given distance matrice from the topology. </p>
178 <p>This function includes a call to <a class="el" href="a00214.html#ga1dd78c1f9acd54f26aba0e284e97e51d" title="Release a distance matrix structure previously returned by hwloc_distances_get().">hwloc_distances_release()</a>. </p>
179
180 </div>
181 </div>
182 <a id="gac188d9b64d9560255ce5f6d0a20f9c0a"></a>
183 <h2 class="memtitle"><span class="permalink"><a href="#gac188d9b64d9560255ce5f6d0a20f9c0a">&#9670;&nbsp;</a></span>hwloc_distances_remove()</h2>
184
185 <div class="memitem">
186 <div class="memproto">
187 <table class="memname">
188 <tr>
189 <td class="memname">int hwloc_distances_remove </td>
190 <td>(</td>
191 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
192 <td class="paramname"><em>topology</em></td><td>)</td>
193 <td></td>
194 </tr>
195 </table>
196 </div><div class="memdoc">
197
198 <p>Remove all distance matrices from a topology. </p>
199 <p>Remove all distance matrices, either provided by the user or gathered through the OS.</p>
200 <p>If these distances were used to group objects, these additional Group objects are not removed from the topology. </p>
201
202 </div>
203 </div>
204 <a id="gaa642a4c1a21c84f38ae23fca8a27845d"></a>
205 <h2 class="memtitle"><span class="permalink"><a href="#gaa642a4c1a21c84f38ae23fca8a27845d">&#9670;&nbsp;</a></span>hwloc_distances_remove_by_depth()</h2>
206
207 <div class="memitem">
208 <div class="memproto">
209 <table class="memname">
210 <tr>
211 <td class="memname">int hwloc_distances_remove_by_depth </td>
212 <td>(</td>
213 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
214 <td class="paramname"><em>topology</em>, </td>
215 </tr>
216 <tr>
217 <td class="paramkey"></td>
218 <td></td>
219 <td class="paramtype">int&#160;</td>
220 <td class="paramname"><em>depth</em>&#160;</td>
221 </tr>
222 <tr>
223 <td></td>
224 <td>)</td>
225 <td></td><td></td>
226 </tr>
227 </table>
228 </div><div class="memdoc">
229
230 <p>Remove distance matrices for objects at a specific depth in the topology. </p>
231 <p>Identical to <a class="el" href="a00216.html#gac188d9b64d9560255ce5f6d0a20f9c0a" title="Remove all distance matrices from a topology.">hwloc_distances_remove()</a> but only applies to one level of the topology. </p>
232
233 </div>
234 </div>
235 <a id="ga93db53773c96f5b83815e8441e2ebb93"></a>
236 <h2 class="memtitle"><span class="permalink"><a href="#ga93db53773c96f5b83815e8441e2ebb93">&#9670;&nbsp;</a></span>hwloc_distances_remove_by_type()</h2>
237
238 <div class="memitem">
239 <div class="memproto">
240 <table class="mlabels">
241 <tr>
242 <td class="mlabels-left">
243 <table class="memname">
244 <tr>
245 <td class="memname">static int hwloc_distances_remove_by_type </td>
246 <td>(</td>
247 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
248 <td class="paramname"><em>topology</em>, </td>
249 </tr>
250 <tr>
251 <td class="paramkey"></td>
252 <td></td>
253 <td class="paramtype"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
254 <td class="paramname"><em>type</em>&#160;</td>
255 </tr>
256 <tr>
257 <td></td>
258 <td>)</td>
259 <td></td><td></td>
260 </tr>
261 </table>
262 </td>
263 <td class="mlabels-right">
264 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
265 </tr>
266 </table>
267 </div><div class="memdoc">
268
269 <p>Remove distance matrices for objects of a specific type in the topology. </p>
270 <p>Identical to <a class="el" href="a00216.html#gac188d9b64d9560255ce5f6d0a20f9c0a" title="Remove all distance matrices from a topology.">hwloc_distances_remove()</a> but only applies to one level of the topology. </p>
135 <p>Export the topology as a synthetic string. </p>
136 <p>At most <code>buflen</code> characters will be written in <code>buffer</code>, including the terminating \0.</p>
137 <p>This exported string may be given back to <a class="el" href="a00201.html#ga4fab186bb6181a00bcf585825fddd38d" title="Enable synthetic topology.">hwloc_topology_set_synthetic()</a>.</p>
138 <p><code>flags</code> is a OR'ed set of <a class="el" href="a00216.html#ga7ac6f97cc40bd50c40285084f869ba63" title="Flags for exporting synthetic topologies.">hwloc_topology_export_synthetic_flags_e</a>.</p>
139 <dl class="section return"><dt>Returns</dt><dd>The number of characters that were written, not including the terminating \0.</dd>
140 <dd>
141 -1 if the topology could not be exported, for instance if it is not symmetric.</dd></dl>
142 <dl class="section note"><dt>Note</dt><dd>I/O and Misc children are ignored, the synthetic string only describes normal children.</dd>
143 <dd>
144 A 1024-byte buffer should be large enough for exporting topologies in the vast majority of cases. </dd></dl>
271145
272146 </div>
273147 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Comparing memory node attributes for finding where to allocate on</title>
7 <title>Hardware Locality (hwloc): Retrieve distances between objects</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4040 <div class="header">
4141 <div class="summary">
4242 <a href="#nested-classes">Data Structures</a> &#124;
43 <a href="#typedef-members">Typedefs</a> &#124;
4443 <a href="#enum-members">Enumerations</a> &#124;
4544 <a href="#func-members">Functions</a> </div>
4645 <div class="headertitle">
47 <div class="title">Comparing memory node attributes for finding where to allocate on</div> </div>
46 <div class="title">Retrieve distances between objects</div> </div>
4847 </div><!--header-->
4948 <div class="contents">
5049 <table class="memberdecls">
5150 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
5251 Data Structures</h2></td></tr>
53 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00320.html">hwloc_location</a></td></tr>
52 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00322.html">hwloc_distances_s</a></td></tr>
5453 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
55 </table><table class="memberdecls">
56 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
57 Typedefs</h2></td></tr>
58 <tr class="memitem:gacc82003a8610be554615995f0996c888"><td class="memItemLeft" align="right" valign="top">typedef unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a></td></tr>
59 <tr class="separator:gacc82003a8610be554615995f0996c888"><td class="memSeparator" colspan="2">&#160;</td></tr>
6054 </table><table class="memberdecls">
6155 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
6256 Enumerations</h2></td></tr>
63 <tr class="memitem:gab4bde745db676fc2ea4b47011cd9a80e"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#gab4bde745db676fc2ea4b47011cd9a80e">hwloc_memattr_id_e</a> { <a class="el" href="a00217.html#ggab4bde745db676fc2ea4b47011cd9a80eaa1cfa3ff3d56ff00ecabf7da4f5642cc">HWLOC_MEMATTR_ID_CAPACITY</a> = 0
64 , <a class="el" href="a00217.html#ggab4bde745db676fc2ea4b47011cd9a80ea9334e3a4c30a67f491c6523255134efe">HWLOC_MEMATTR_ID_LOCALITY</a> = 1
65 , <a class="el" href="a00217.html#ggab4bde745db676fc2ea4b47011cd9a80ea25fe3c7376ae6f9b584bacdb039f8c0f">HWLOC_MEMATTR_ID_BANDWIDTH</a> = 2
66 , <a class="el" href="a00217.html#ggab4bde745db676fc2ea4b47011cd9a80ead1796413759b8b87b61ad195a9349b19">HWLOC_MEMATTR_ID_LATENCY</a> = 3
57 <tr class="memitem:gab1bb10d3adb85b52cdc6fe5a7f74f108"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#gab1bb10d3adb85b52cdc6fe5a7f74f108">hwloc_distances_kind_e</a> { <br />
58 &#160;&#160;<a class="el" href="a00217.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a90dc38248c8d5392d4dd3e88f391e984">HWLOC_DISTANCES_KIND_FROM_OS</a>
59 , <a class="el" href="a00217.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a0148d7f9be833a04f5a55455437c227b">HWLOC_DISTANCES_KIND_FROM_USER</a>
60 , <a class="el" href="a00217.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108afd6a3503fbc8f7c1a31235373cefc4c6">HWLOC_DISTANCES_KIND_MEANS_LATENCY</a>
61 , <a class="el" href="a00217.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a41b19f141a3c0ffe85f9affaca4b0293">HWLOC_DISTANCES_KIND_MEANS_BANDWIDTH</a>
62 , <br />
63 &#160;&#160;<a class="el" href="a00217.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108aa6cf2b6dfcf148b65952f811814efbe1">HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES</a>
64 <br />
6765 }</td></tr>
68 <tr class="separator:gab4bde745db676fc2ea4b47011cd9a80e"><td class="memSeparator" colspan="2">&#160;</td></tr>
69 <tr class="memitem:ga33099ba58f607fc70925da3777688586"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga33099ba58f607fc70925da3777688586">hwloc_location_type_e</a> { <a class="el" href="a00217.html#gga33099ba58f607fc70925da3777688586a7135318a86361ad75fd1648e6bf6d174">HWLOC_LOCATION_TYPE_CPUSET</a>
70 , <a class="el" href="a00217.html#gga33099ba58f607fc70925da3777688586af637c39b23d48cff15ddb008644aaa84">HWLOC_LOCATION_TYPE_OBJECT</a>
66 <tr class="separator:gab1bb10d3adb85b52cdc6fe5a7f74f108"><td class="memSeparator" colspan="2">&#160;</td></tr>
67 <tr class="memitem:ga42859b651adec5ef0aaacb53ff220b00"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga42859b651adec5ef0aaacb53ff220b00">hwloc_distances_transform_e</a> { <a class="el" href="a00217.html#gga42859b651adec5ef0aaacb53ff220b00a4b7bdb7e3ccca30e03b7ae671e7f6dc1">HWLOC_DISTANCES_TRANSFORM_REMOVE_NULL</a>
68 , <a class="el" href="a00217.html#gga42859b651adec5ef0aaacb53ff220b00a441e6bb393558319af3bb1f89f51f44d">HWLOC_DISTANCES_TRANSFORM_LINKS</a>
69 , <a class="el" href="a00217.html#gga42859b651adec5ef0aaacb53ff220b00a3d2aaf03e17be54eddbb94aab327fded">HWLOC_DISTANCES_TRANSFORM_MERGE_SWITCH_PORTS</a>
70 , <a class="el" href="a00217.html#gga42859b651adec5ef0aaacb53ff220b00a1264abf9b9463f252995f37eb1057047">HWLOC_DISTANCES_TRANSFORM_TRANSITIVE_CLOSURE</a>
7171 }</td></tr>
72 <tr class="separator:ga33099ba58f607fc70925da3777688586"><td class="memSeparator" colspan="2">&#160;</td></tr>
73 <tr class="memitem:gab9c963ca37255da71b00d94e1b106f9d"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#gab9c963ca37255da71b00d94e1b106f9d">hwloc_local_numanode_flag_e</a> { <a class="el" href="a00217.html#ggab9c963ca37255da71b00d94e1b106f9da200c6c133bb2125ba36d77ce9ca268cc">HWLOC_LOCAL_NUMANODE_FLAG_LARGER_LOCALITY</a>
74 , <a class="el" href="a00217.html#ggab9c963ca37255da71b00d94e1b106f9daac9c5e3a2cfb1b193e4acfceaf3bad57">HWLOC_LOCAL_NUMANODE_FLAG_SMALLER_LOCALITY</a>
75 , <a class="el" href="a00217.html#ggab9c963ca37255da71b00d94e1b106f9dab5778b34c961a5d56f98f1549edeaed0">HWLOC_LOCAL_NUMANODE_FLAG_ALL</a>
76 }</td></tr>
77 <tr class="separator:gab9c963ca37255da71b00d94e1b106f9d"><td class="memSeparator" colspan="2">&#160;</td></tr>
72 <tr class="separator:ga42859b651adec5ef0aaacb53ff220b00"><td class="memSeparator" colspan="2">&#160;</td></tr>
7873 </table><table class="memberdecls">
7974 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
8075 Functions</h2></td></tr>
81 <tr class="memitem:ga79f44f8e1cfd2f97a19171417a75a137"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga79f44f8e1cfd2f97a19171417a75a137">hwloc_memattr_get_by_name</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const char *name, <a class="el" href="a00217.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> *id)</td></tr>
82 <tr class="separator:ga79f44f8e1cfd2f97a19171417a75a137"><td class="memSeparator" colspan="2">&#160;</td></tr>
83 <tr class="memitem:ga569e80c5be7ef27649b0ef5aa52ffcdc"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga569e80c5be7ef27649b0ef5aa52ffcdc">hwloc_get_local_numanode_objs</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, struct <a class="el" href="a00320.html">hwloc_location</a> *location, unsigned *nr, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *nodes, unsigned long flags)</td></tr>
84 <tr class="separator:ga569e80c5be7ef27649b0ef5aa52ffcdc"><td class="memSeparator" colspan="2">&#160;</td></tr>
85 <tr class="memitem:ga297e4a9adc2272446a4c7449dacef0df"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga297e4a9adc2272446a4c7449dacef0df">hwloc_memattr_get_value</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00217.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> target_node, struct <a class="el" href="a00320.html">hwloc_location</a> *initiator, unsigned long flags, hwloc_uint64_t *value)</td></tr>
86 <tr class="separator:ga297e4a9adc2272446a4c7449dacef0df"><td class="memSeparator" colspan="2">&#160;</td></tr>
87 <tr class="memitem:ga884d1f2ad745c2fa69c1583c82d28f10"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga884d1f2ad745c2fa69c1583c82d28f10">hwloc_memattr_get_best_target</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00217.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute, struct <a class="el" href="a00320.html">hwloc_location</a> *initiator, unsigned long flags, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *best_target, hwloc_uint64_t *value)</td></tr>
88 <tr class="separator:ga884d1f2ad745c2fa69c1583c82d28f10"><td class="memSeparator" colspan="2">&#160;</td></tr>
89 <tr class="memitem:ga9a453879892893cf8a3fcd431ade84cd"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga9a453879892893cf8a3fcd431ade84cd">hwloc_memattr_get_best_initiator</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00217.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> target, unsigned long flags, struct <a class="el" href="a00320.html">hwloc_location</a> *best_initiator, hwloc_uint64_t *value)</td></tr>
90 <tr class="separator:ga9a453879892893cf8a3fcd431ade84cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
76 <tr class="memitem:ga613e6b2a5d0f06626ee8d0c12fa46691"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga613e6b2a5d0f06626ee8d0c12fa46691">hwloc_distances_get</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned *nr, struct <a class="el" href="a00322.html">hwloc_distances_s</a> **distances, unsigned long kind, unsigned long flags)</td></tr>
77 <tr class="separator:ga613e6b2a5d0f06626ee8d0c12fa46691"><td class="memSeparator" colspan="2">&#160;</td></tr>
78 <tr class="memitem:ga5d1d35eccfcc2ebcef71a10972ce9b03"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga5d1d35eccfcc2ebcef71a10972ce9b03">hwloc_distances_get_by_depth</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int depth, unsigned *nr, struct <a class="el" href="a00322.html">hwloc_distances_s</a> **distances, unsigned long kind, unsigned long flags)</td></tr>
79 <tr class="separator:ga5d1d35eccfcc2ebcef71a10972ce9b03"><td class="memSeparator" colspan="2">&#160;</td></tr>
80 <tr class="memitem:gaaa6bfbc20072a4f4de132eec859067f6"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#gaaa6bfbc20072a4f4de132eec859067f6">hwloc_distances_get_by_type</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, unsigned *nr, struct <a class="el" href="a00322.html">hwloc_distances_s</a> **distances, unsigned long kind, unsigned long flags)</td></tr>
81 <tr class="separator:gaaa6bfbc20072a4f4de132eec859067f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
82 <tr class="memitem:gaa457f35b8745ca41ec17797c0d7b20f0"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#gaa457f35b8745ca41ec17797c0d7b20f0">hwloc_distances_get_by_name</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const char *name, unsigned *nr, struct <a class="el" href="a00322.html">hwloc_distances_s</a> **distances, unsigned long flags)</td></tr>
83 <tr class="separator:gaa457f35b8745ca41ec17797c0d7b20f0"><td class="memSeparator" colspan="2">&#160;</td></tr>
84 <tr class="memitem:gaa6f9697028c589cef0458edef5fe273f"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#gaa6f9697028c589cef0458edef5fe273f">hwloc_distances_get_name</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, struct <a class="el" href="a00322.html">hwloc_distances_s</a> *distances)</td></tr>
85 <tr class="separator:gaa6f9697028c589cef0458edef5fe273f"><td class="memSeparator" colspan="2">&#160;</td></tr>
86 <tr class="memitem:ga1dd78c1f9acd54f26aba0e284e97e51d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#ga1dd78c1f9acd54f26aba0e284e97e51d">hwloc_distances_release</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, struct <a class="el" href="a00322.html">hwloc_distances_s</a> *distances)</td></tr>
87 <tr class="separator:ga1dd78c1f9acd54f26aba0e284e97e51d"><td class="memSeparator" colspan="2">&#160;</td></tr>
88 <tr class="memitem:gabcadd041f3072999d68f2d94e38670f7"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00217.html#gabcadd041f3072999d68f2d94e38670f7">hwloc_distances_transform</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, struct <a class="el" href="a00322.html">hwloc_distances_s</a> *distances, enum <a class="el" href="a00217.html#ga42859b651adec5ef0aaacb53ff220b00">hwloc_distances_transform_e</a> transform, void *transform_attr, unsigned long flags)</td></tr>
89 <tr class="separator:gabcadd041f3072999d68f2d94e38670f7"><td class="memSeparator" colspan="2">&#160;</td></tr>
9190 </table>
9291 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
93 <p>Platforms with heterogeneous memory require ways to decide whether a buffer should be allocated on "fast" memory (such as HBM), "normal" memory (DDR) or even "slow" but large-capacity memory (non-volatile memory). These memory nodes are called "Targets" while the CPU accessing them is called the "Initiator". Access performance depends on their locality (NUMA platforms) as well as the intrinsic performance of the targets (heterogeneous platforms).</p>
94 <p>The following attributes describe the performance of memory accesses from an Initiator to a memory Target, for instance their latency or bandwidth. Initiators performing these memory accesses are usually some PUs or Cores (described as a CPU set). Hence a Core may choose where to allocate a memory buffer by comparing the attributes of different target memory nodes nearby.</p>
95 <p>There are also some attributes that are system-wide. Their value does not depend on a specific initiator performing an access. The memory node Capacity is an example of such attribute without initiator.</p>
96 <p>One way to use this API is to start with a cpuset describing the Cores where a program is bound. The best target NUMA node for allocating memory in this program on these Cores may be obtained by passing this cpuset as an initiator to <a class="el" href="a00217.html#ga884d1f2ad745c2fa69c1583c82d28f10" title="Return the best target NUMA node for the given attribute and initiator.">hwloc_memattr_get_best_target()</a> with the relevant memory attribute. For instance, if the code is latency limited, use the Latency attribute.</p>
97 <p>A more flexible approach consists in getting the list of local NUMA nodes by passing this cpuset to <a class="el" href="a00217.html#ga569e80c5be7ef27649b0ef5aa52ffcdc" title="Return an array of local NUMA nodes.">hwloc_get_local_numanode_objs()</a>. Attribute values for these nodes, if any, may then be obtained with <a class="el" href="a00217.html#ga297e4a9adc2272446a4c7449dacef0df" title="Return an attribute value for a specific target NUMA node.">hwloc_memattr_get_value()</a> and manually compared with the desired criteria.</p>
98 <dl class="section note"><dt>Note</dt><dd>The API also supports specific objects as initiator, but it is currently not used internally by hwloc. Users may for instance use it to provide custom performance values for host memory accesses performed by GPUs.</dd>
99 <dd>
100 The interface actually also accepts targets that are not NUMA nodes. </dd></dl>
101 <h2 class="groupheader">Typedef Documentation</h2>
102 <a id="gacc82003a8610be554615995f0996c888"></a>
103 <h2 class="memtitle"><span class="permalink"><a href="#gacc82003a8610be554615995f0996c888">&#9670;&nbsp;</a></span>hwloc_memattr_id_t</h2>
104
105 <div class="memitem">
106 <div class="memproto">
107 <table class="memname">
108 <tr>
109 <td class="memname">typedef unsigned <a class="el" href="a00217.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a></td>
110 </tr>
111 </table>
112 </div><div class="memdoc">
113
114 <p>A memory attribute identifier. May be either one of <a class="el" href="a00217.html#gab4bde745db676fc2ea4b47011cd9a80e" title="Memory node attributes.">hwloc_memattr_id_e</a> or a new id returned by <a class="el" href="a00218.html#ga770657d1e44b09e93e09f623936c1e5f" title="Register a new memory attribute.">hwloc_memattr_register()</a>. </p>
115
116 </div>
117 </div>
11892 <h2 class="groupheader">Enumeration Type Documentation</h2>
119 <a id="gab9c963ca37255da71b00d94e1b106f9d"></a>
120 <h2 class="memtitle"><span class="permalink"><a href="#gab9c963ca37255da71b00d94e1b106f9d">&#9670;&nbsp;</a></span>hwloc_local_numanode_flag_e</h2>
121
122 <div class="memitem">
123 <div class="memproto">
124 <table class="memname">
125 <tr>
126 <td class="memname">enum <a class="el" href="a00217.html#gab9c963ca37255da71b00d94e1b106f9d">hwloc_local_numanode_flag_e</a></td>
127 </tr>
128 </table>
129 </div><div class="memdoc">
130
131 <p>Flags for selecting target NUMA nodes. </p>
93 <a id="gab1bb10d3adb85b52cdc6fe5a7f74f108"></a>
94 <h2 class="memtitle"><span class="permalink"><a href="#gab1bb10d3adb85b52cdc6fe5a7f74f108">&#9670;&nbsp;</a></span>hwloc_distances_kind_e</h2>
95
96 <div class="memitem">
97 <div class="memproto">
98 <table class="memname">
99 <tr>
100 <td class="memname">enum <a class="el" href="a00217.html#gab1bb10d3adb85b52cdc6fe5a7f74f108">hwloc_distances_kind_e</a></td>
101 </tr>
102 </table>
103 </div><div class="memdoc">
104
105 <p>Kinds of distance matrices. </p>
106 <p>The <code>kind</code> attribute of struct <a class="el" href="a00322.html" title="Matrix of distances between a set of objects.">hwloc_distances_s</a> is a OR'ed set of kinds.</p>
107 <p>A kind of format HWLOC_DISTANCES_KIND_FROM_* specifies where the distance information comes from, if known.</p>
108 <p>A kind of format HWLOC_DISTANCES_KIND_MEANS_* specifies whether values are latencies or bandwidths, if applicable. </p>
132109 <table class="fieldtable">
133 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggab9c963ca37255da71b00d94e1b106f9da200c6c133bb2125ba36d77ce9ca268cc"></a>HWLOC_LOCAL_NUMANODE_FLAG_LARGER_LOCALITY&#160;</td><td class="fielddoc"><p>Select NUMA nodes whose locality is larger than the given cpuset. For instance, if a single PU (or its cpuset) is given in <code>initiator</code>, select all nodes close to the package that contains this PU. </p>
134 </td></tr>
135 <tr><td class="fieldname"><a id="ggab9c963ca37255da71b00d94e1b106f9daac9c5e3a2cfb1b193e4acfceaf3bad57"></a>HWLOC_LOCAL_NUMANODE_FLAG_SMALLER_LOCALITY&#160;</td><td class="fielddoc"><p>Select NUMA nodes whose locality is smaller than the given cpuset. For instance, if a package (or its cpuset) is given in <code>initiator</code>, also select nodes that are attached to only a half of that package. </p>
136 </td></tr>
137 <tr><td class="fieldname"><a id="ggab9c963ca37255da71b00d94e1b106f9dab5778b34c961a5d56f98f1549edeaed0"></a>HWLOC_LOCAL_NUMANODE_FLAG_ALL&#160;</td><td class="fielddoc"><p>Select all NUMA nodes in the topology. The initiator <code>initiator</code> is ignored. </p>
110 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggab1bb10d3adb85b52cdc6fe5a7f74f108a90dc38248c8d5392d4dd3e88f391e984"></a>HWLOC_DISTANCES_KIND_FROM_OS&#160;</td><td class="fielddoc"><p>These distances were obtained from the operating system or hardware. </p>
111 </td></tr>
112 <tr><td class="fieldname"><a id="ggab1bb10d3adb85b52cdc6fe5a7f74f108a0148d7f9be833a04f5a55455437c227b"></a>HWLOC_DISTANCES_KIND_FROM_USER&#160;</td><td class="fielddoc"><p>These distances were provided by the user. </p>
113 </td></tr>
114 <tr><td class="fieldname"><a id="ggab1bb10d3adb85b52cdc6fe5a7f74f108afd6a3503fbc8f7c1a31235373cefc4c6"></a>HWLOC_DISTANCES_KIND_MEANS_LATENCY&#160;</td><td class="fielddoc"><p>Distance values are similar to latencies between objects. Values are smaller for closer objects, hence minimal on the diagonal of the matrix (distance between an object and itself). It could also be the number of network hops between objects, etc. </p>
115 </td></tr>
116 <tr><td class="fieldname"><a id="ggab1bb10d3adb85b52cdc6fe5a7f74f108a41b19f141a3c0ffe85f9affaca4b0293"></a>HWLOC_DISTANCES_KIND_MEANS_BANDWIDTH&#160;</td><td class="fielddoc"><p>Distance values are similar to bandwidths between objects. Values are higher for closer objects, hence maximal on the diagonal of the matrix (distance between an object and itself). Such values are currently ignored for distance-based grouping. </p>
117 </td></tr>
118 <tr><td class="fieldname"><a id="ggab1bb10d3adb85b52cdc6fe5a7f74f108aa6cf2b6dfcf148b65952f811814efbe1"></a>HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES&#160;</td><td class="fielddoc"><p>This distances structure covers objects of different types. This may apply to the "NVLinkBandwidth" structure in presence of a NVSwitch or POWER processor NVLink port. </p>
138119 </td></tr>
139120 </table>
140121
141122 </div>
142123 </div>
143 <a id="ga33099ba58f607fc70925da3777688586"></a>
144 <h2 class="memtitle"><span class="permalink"><a href="#ga33099ba58f607fc70925da3777688586">&#9670;&nbsp;</a></span>hwloc_location_type_e</h2>
145
146 <div class="memitem">
147 <div class="memproto">
148 <table class="memname">
149 <tr>
150 <td class="memname">enum <a class="el" href="a00217.html#ga33099ba58f607fc70925da3777688586">hwloc_location_type_e</a></td>
151 </tr>
152 </table>
153 </div><div class="memdoc">
154
155 <p>Type of location. </p>
124 <a id="ga42859b651adec5ef0aaacb53ff220b00"></a>
125 <h2 class="memtitle"><span class="permalink"><a href="#ga42859b651adec5ef0aaacb53ff220b00">&#9670;&nbsp;</a></span>hwloc_distances_transform_e</h2>
126
127 <div class="memitem">
128 <div class="memproto">
129 <table class="memname">
130 <tr>
131 <td class="memname">enum <a class="el" href="a00217.html#ga42859b651adec5ef0aaacb53ff220b00">hwloc_distances_transform_e</a></td>
132 </tr>
133 </table>
134 </div><div class="memdoc">
135
136 <p>Transformations of distances structures. </p>
156137 <table class="fieldtable">
157 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga33099ba58f607fc70925da3777688586a7135318a86361ad75fd1648e6bf6d174"></a>HWLOC_LOCATION_TYPE_CPUSET&#160;</td><td class="fielddoc"><p>Location is given as a cpuset, in the location cpuset union field. </p>
158 </td></tr>
159 <tr><td class="fieldname"><a id="gga33099ba58f607fc70925da3777688586af637c39b23d48cff15ddb008644aaa84"></a>HWLOC_LOCATION_TYPE_OBJECT&#160;</td><td class="fielddoc"><p>Location is given as an object, in the location object union field. </p>
138 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga42859b651adec5ef0aaacb53ff220b00a4b7bdb7e3ccca30e03b7ae671e7f6dc1"></a>HWLOC_DISTANCES_TRANSFORM_REMOVE_NULL&#160;</td><td class="fielddoc"><p>Remove <code>NULL</code> objects from the distances structure. </p>
139 <p>Every object that was replaced with <code>NULL</code> in the <code>objs</code> array is removed and the <code>values</code> array is updated accordingly.</p>
140 <p>At least <code>2</code> objects must remain, otherwise <a class="el" href="a00217.html#gabcadd041f3072999d68f2d94e38670f7" title="Apply a transformation to a distances structure.">hwloc_distances_transform()</a> will return <code>-1</code> with <code>errno</code> set to <code>EINVAL</code>.</p>
141 <p><code>kind</code> will be updated with or without <a class="el" href="a00217.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108aa6cf2b6dfcf148b65952f811814efbe1" title="This distances structure covers objects of different types. This may apply to the &quot;NVLinkBandwidth&quot; s...">HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES</a> according to the remaining objects. </p>
142 </td></tr>
143 <tr><td class="fieldname"><a id="gga42859b651adec5ef0aaacb53ff220b00a441e6bb393558319af3bb1f89f51f44d"></a>HWLOC_DISTANCES_TRANSFORM_LINKS&#160;</td><td class="fielddoc"><p>Replace bandwidth values with a number of links. </p>
144 <p>Usually all values will be either <code>0</code> (no link) or <code>1</code> (one link). However some matrices could get larger values if some pairs of peers are connected by different numbers of links.</p>
145 <p>Values on the diagonal are set to <code>0</code>.</p>
146 <p>This transformation only applies to bandwidth matrices. </p>
147 </td></tr>
148 <tr><td class="fieldname"><a id="gga42859b651adec5ef0aaacb53ff220b00a3d2aaf03e17be54eddbb94aab327fded"></a>HWLOC_DISTANCES_TRANSFORM_MERGE_SWITCH_PORTS&#160;</td><td class="fielddoc"><p>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 <a class="el" href="a00217.html#gga42859b651adec5ef0aaacb53ff220b00a4b7bdb7e3ccca30e03b7ae671e7f6dc1" title="Remove NULL objects from the distances structure.">HWLOC_DISTANCES_TRANSFORM_REMOVE_NULL</a> internally. </p>
149 </td></tr>
150 <tr><td class="fieldname"><a id="gga42859b651adec5ef0aaacb53ff220b00a1264abf9b9463f252995f37eb1057047"></a>HWLOC_DISTANCES_TRANSFORM_TRANSITIVE_CLOSURE&#160;</td><td class="fielddoc"><p>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. </p>
160151 </td></tr>
161152 </table>
162153
163154 </div>
164155 </div>
165 <a id="gab4bde745db676fc2ea4b47011cd9a80e"></a>
166 <h2 class="memtitle"><span class="permalink"><a href="#gab4bde745db676fc2ea4b47011cd9a80e">&#9670;&nbsp;</a></span>hwloc_memattr_id_e</h2>
167
168 <div class="memitem">
169 <div class="memproto">
170 <table class="memname">
171 <tr>
172 <td class="memname">enum <a class="el" href="a00217.html#gab4bde745db676fc2ea4b47011cd9a80e">hwloc_memattr_id_e</a></td>
173 </tr>
174 </table>
175 </div><div class="memdoc">
176
177 <p>Memory node attributes. </p>
178 <table class="fieldtable">
179 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggab4bde745db676fc2ea4b47011cd9a80eaa1cfa3ff3d56ff00ecabf7da4f5642cc"></a>HWLOC_MEMATTR_ID_CAPACITY&#160;</td><td class="fielddoc"><p>"Capacity". The capacity is returned in bytes (local_memory attribute in objects). </p>
180 <p>Best capacity nodes are nodes with <b>higher capacity</b>.</p>
181 <p>No initiator is involved when looking at this attribute. The corresponding attribute flags are <a class="el" href="a00218.html#gga78aceb4cac4d614c0f5e82dbfeb779e5af29e65444a6ed00f5cc246df06f65815" title="The best nodes for this memory attribute are those with the higher values. For instance Bandwidth.">HWLOC_MEMATTR_FLAG_HIGHER_FIRST</a>. </p>
182 </td></tr>
183 <tr><td class="fieldname"><a id="ggab4bde745db676fc2ea4b47011cd9a80ea9334e3a4c30a67f491c6523255134efe"></a>HWLOC_MEMATTR_ID_LOCALITY&#160;</td><td class="fielddoc"><p>"Locality". The locality is returned as the number of PUs in that locality (e.g. the weight of its cpuset). </p>
184 <p>Best locality nodes are nodes with <b>smaller locality</b> (nodes that are local to very few PUs). Poor locality nodes are nodes with larger locality (nodes that are local to the entire machine).</p>
185 <p>No initiator is involved when looking at this attribute. The corresponding attribute flags are <a class="el" href="a00218.html#gga78aceb4cac4d614c0f5e82dbfeb779e5af29e65444a6ed00f5cc246df06f65815" title="The best nodes for this memory attribute are those with the higher values. For instance Bandwidth.">HWLOC_MEMATTR_FLAG_HIGHER_FIRST</a>. </p>
186 </td></tr>
187 <tr><td class="fieldname"><a id="ggab4bde745db676fc2ea4b47011cd9a80ea25fe3c7376ae6f9b584bacdb039f8c0f"></a>HWLOC_MEMATTR_ID_BANDWIDTH&#160;</td><td class="fielddoc"><p>"Bandwidth". The bandwidth is returned in MiB/s, as seen from the given initiator location. Best bandwidth nodes are nodes with <b>higher bandwidth</b>. The corresponding attribute flags are <a class="el" href="a00218.html#gga78aceb4cac4d614c0f5e82dbfeb779e5af29e65444a6ed00f5cc246df06f65815" title="The best nodes for this memory attribute are those with the higher values. For instance Bandwidth.">HWLOC_MEMATTR_FLAG_HIGHER_FIRST</a> and <a class="el" href="a00218.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96" title="The value returned for this memory attribute depends on the given initiator. For instance Bandwidth a...">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a>. </p>
188 </td></tr>
189 <tr><td class="fieldname"><a id="ggab4bde745db676fc2ea4b47011cd9a80ead1796413759b8b87b61ad195a9349b19"></a>HWLOC_MEMATTR_ID_LATENCY&#160;</td><td class="fielddoc"><p>"Latency". The latency is returned as nanoseconds, as seen from the given initiator location. Best latency nodes are nodes with <b>smaller latency</b>. The corresponding attribute flags are <a class="el" href="a00218.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9601b5b0e1e68635e7e9901f28bd93bf" title="The best nodes for this memory attribute are those with the lower values. For instance Latency.">HWLOC_MEMATTR_FLAG_LOWER_FIRST</a> and <a class="el" href="a00218.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96" title="The value returned for this memory attribute depends on the given initiator. For instance Bandwidth a...">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a>. </p>
190 </td></tr>
191 </table>
192
193 </div>
194 </div>
195156 <h2 class="groupheader">Function Documentation</h2>
196 <a id="ga569e80c5be7ef27649b0ef5aa52ffcdc"></a>
197 <h2 class="memtitle"><span class="permalink"><a href="#ga569e80c5be7ef27649b0ef5aa52ffcdc">&#9670;&nbsp;</a></span>hwloc_get_local_numanode_objs()</h2>
198
199 <div class="memitem">
200 <div class="memproto">
201 <table class="memname">
202 <tr>
203 <td class="memname">int hwloc_get_local_numanode_objs </td>
204 <td>(</td>
205 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
206 <td class="paramname"><em>topology</em>, </td>
207 </tr>
208 <tr>
209 <td class="paramkey"></td>
210 <td></td>
211 <td class="paramtype">struct <a class="el" href="a00320.html">hwloc_location</a> *&#160;</td>
212 <td class="paramname"><em>location</em>, </td>
157 <a id="ga613e6b2a5d0f06626ee8d0c12fa46691"></a>
158 <h2 class="memtitle"><span class="permalink"><a href="#ga613e6b2a5d0f06626ee8d0c12fa46691">&#9670;&nbsp;</a></span>hwloc_distances_get()</h2>
159
160 <div class="memitem">
161 <div class="memproto">
162 <table class="memname">
163 <tr>
164 <td class="memname">int hwloc_distances_get </td>
165 <td>(</td>
166 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
167 <td class="paramname"><em>topology</em>, </td>
213168 </tr>
214169 <tr>
215170 <td class="paramkey"></td>
220175 <tr>
221176 <td class="paramkey"></td>
222177 <td></td>
223 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *&#160;</td>
224 <td class="paramname"><em>nodes</em>, </td>
178 <td class="paramtype">struct <a class="el" href="a00322.html">hwloc_distances_s</a> **&#160;</td>
179 <td class="paramname"><em>distances</em>, </td>
180 </tr>
181 <tr>
182 <td class="paramkey"></td>
183 <td></td>
184 <td class="paramtype">unsigned long&#160;</td>
185 <td class="paramname"><em>kind</em>, </td>
225186 </tr>
226187 <tr>
227188 <td class="paramkey"></td>
237198 </table>
238199 </div><div class="memdoc">
239200
240 <p>Return an array of local NUMA nodes. </p>
241 <p>By default only select the NUMA nodes whose locality is exactly the given <code>location</code>. More nodes may be selected if additional flags are given as a OR'ed set of <a class="el" href="a00217.html#gab9c963ca37255da71b00d94e1b106f9d" title="Flags for selecting target NUMA nodes.">hwloc_local_numanode_flag_e</a>.</p>
242 <p>If <code>location</code> is given as an explicit object, its CPU set is used to find NUMA nodes with the corresponding locality. If the object does not have a CPU set (e.g. I/O object), the CPU parent (where the I/O object is attached) is used.</p>
243 <p>On input, <code>nr</code> points to the number of nodes that may be stored in the <code>nodes</code> array. On output, <code>nr</code> will be changed to the number of stored nodes, or the number of nodes that would have been stored if there were enough room.</p>
244 <dl class="section note"><dt>Note</dt><dd>Some of these NUMA nodes may not have any memory attribute values and hence not be reported as actual targets in other functions.</dd>
245 <dd>
246 The number of NUMA nodes in the topology (obtained by <a class="el" href="a00211.html#ga0200466842c0e1f5da75e84dde460b10" title="Compute the &quot;weight&quot; of bitmap bitmap (i.e., number of indexes that are in the bitmap).">hwloc_bitmap_weight()</a> on the root object nodeset) may be used to allocate the <code>nodes</code> array.</dd>
247 <dd>
248 When an object CPU set is given as locality, for instance a Package, and when flags contain both <a class="el" href="a00217.html#ggab9c963ca37255da71b00d94e1b106f9da200c6c133bb2125ba36d77ce9ca268cc" title="Select NUMA nodes whose locality is larger than the given cpuset. For instance, if a single PU (or it...">HWLOC_LOCAL_NUMANODE_FLAG_LARGER_LOCALITY</a> and <a class="el" href="a00217.html#ggab9c963ca37255da71b00d94e1b106f9daac9c5e3a2cfb1b193e4acfceaf3bad57" title="Select NUMA nodes whose locality is smaller than the given cpuset. For instance, if a package (or its...">HWLOC_LOCAL_NUMANODE_FLAG_SMALLER_LOCALITY</a>, the returned array corresponds to the nodeset of that object. </dd></dl>
249
250 </div>
251 </div>
252 <a id="ga9a453879892893cf8a3fcd431ade84cd"></a>
253 <h2 class="memtitle"><span class="permalink"><a href="#ga9a453879892893cf8a3fcd431ade84cd">&#9670;&nbsp;</a></span>hwloc_memattr_get_best_initiator()</h2>
254
255 <div class="memitem">
256 <div class="memproto">
257 <table class="memname">
258 <tr>
259 <td class="memname">int hwloc_memattr_get_best_initiator </td>
260 <td>(</td>
261 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
262 <td class="paramname"><em>topology</em>, </td>
263 </tr>
264 <tr>
265 <td class="paramkey"></td>
266 <td></td>
267 <td class="paramtype"><a class="el" href="a00217.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a>&#160;</td>
268 <td class="paramname"><em>attribute</em>, </td>
269 </tr>
270 <tr>
271 <td class="paramkey"></td>
272 <td></td>
273 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
274 <td class="paramname"><em>target</em>, </td>
275 </tr>
276 <tr>
277 <td class="paramkey"></td>
278 <td></td>
279 <td class="paramtype">unsigned long&#160;</td>
280 <td class="paramname"><em>flags</em>, </td>
281 </tr>
282 <tr>
283 <td class="paramkey"></td>
284 <td></td>
285 <td class="paramtype">struct <a class="el" href="a00320.html">hwloc_location</a> *&#160;</td>
286 <td class="paramname"><em>best_initiator</em>, </td>
287 </tr>
288 <tr>
289 <td class="paramkey"></td>
290 <td></td>
291 <td class="paramtype">hwloc_uint64_t *&#160;</td>
292 <td class="paramname"><em>value</em>&#160;</td>
293 </tr>
294 <tr>
295 <td></td>
296 <td>)</td>
297 <td></td><td></td>
298 </tr>
299 </table>
300 </div><div class="memdoc">
301
302 <p>Return the best initiator for the given attribute and target NUMA node. </p>
303 <p>If the attribute does not relate to a specific initiator (it does not have the flag <a class="el" href="a00218.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96" title="The value returned for this memory attribute depends on the given initiator. For instance Bandwidth a...">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a>), <code>-1</code> is returned and <code>errno</code> is set to <code>EINVAL</code>.</p>
304 <p>If <code>value</code> is non <code>NULL</code>, the corresponding value is returned there.</p>
305 <p>If multiple initiators have the same attribute values, only one is returned (and there is no way to clarify how that one is chosen). Applications that want to detect initiators with identical/similar values, or that want to look at values for multiple attributes, should rather get all values using <a class="el" href="a00217.html#ga297e4a9adc2272446a4c7449dacef0df" title="Return an attribute value for a specific target NUMA node.">hwloc_memattr_get_value()</a> and manually select the initiator they consider the best.</p>
306 <p>The returned initiator should not be modified or freed, it belongs to the topology.</p>
307 <p><code>flags</code> must be <code>0</code> for now.</p>
308 <p>If there are no matching initiators, <code>-1</code> is returned with <code>errno</code> set to <code>ENOENT</code>; </p>
309
310 </div>
311 </div>
312 <a id="ga884d1f2ad745c2fa69c1583c82d28f10"></a>
313 <h2 class="memtitle"><span class="permalink"><a href="#ga884d1f2ad745c2fa69c1583c82d28f10">&#9670;&nbsp;</a></span>hwloc_memattr_get_best_target()</h2>
314
315 <div class="memitem">
316 <div class="memproto">
317 <table class="memname">
318 <tr>
319 <td class="memname">int hwloc_memattr_get_best_target </td>
320 <td>(</td>
321 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
322 <td class="paramname"><em>topology</em>, </td>
323 </tr>
324 <tr>
325 <td class="paramkey"></td>
326 <td></td>
327 <td class="paramtype"><a class="el" href="a00217.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a>&#160;</td>
328 <td class="paramname"><em>attribute</em>, </td>
329 </tr>
330 <tr>
331 <td class="paramkey"></td>
332 <td></td>
333 <td class="paramtype">struct <a class="el" href="a00320.html">hwloc_location</a> *&#160;</td>
334 <td class="paramname"><em>initiator</em>, </td>
335 </tr>
336 <tr>
337 <td class="paramkey"></td>
338 <td></td>
339 <td class="paramtype">unsigned long&#160;</td>
340 <td class="paramname"><em>flags</em>, </td>
341 </tr>
342 <tr>
343 <td class="paramkey"></td>
344 <td></td>
345 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *&#160;</td>
346 <td class="paramname"><em>best_target</em>, </td>
347 </tr>
348 <tr>
349 <td class="paramkey"></td>
350 <td></td>
351 <td class="paramtype">hwloc_uint64_t *&#160;</td>
352 <td class="paramname"><em>value</em>&#160;</td>
353 </tr>
354 <tr>
355 <td></td>
356 <td>)</td>
357 <td></td><td></td>
358 </tr>
359 </table>
360 </div><div class="memdoc">
361
362 <p>Return the best target NUMA node for the given attribute and initiator. </p>
363 <p>If the attribute does not relate to a specific initiator (it does not have the flag <a class="el" href="a00218.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96" title="The value returned for this memory attribute depends on the given initiator. For instance Bandwidth a...">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a>), location <code>initiator</code> is ignored and may be <code>NULL</code>.</p>
364 <p>If <code>value</code> is non <code>NULL</code>, the corresponding value is returned there.</p>
365 <p>If multiple targets have the same attribute values, only one is returned (and there is no way to clarify how that one is chosen). Applications that want to detect targets with identical/similar values, or that want to look at values for multiple attributes, should rather get all values using <a class="el" href="a00217.html#ga297e4a9adc2272446a4c7449dacef0df" title="Return an attribute value for a specific target NUMA node.">hwloc_memattr_get_value()</a> and manually select the target they consider the best.</p>
366 <p><code>flags</code> must be <code>0</code> for now.</p>
367 <p>If there are no matching targets, <code>-1</code> is returned with <code>errno</code> set to <code>ENOENT</code>;</p>
368 <dl class="section note"><dt>Note</dt><dd>The initiator <code>initiator</code> should be of type <a class="el" href="a00217.html#gga33099ba58f607fc70925da3777688586a7135318a86361ad75fd1648e6bf6d174" title="Location is given as a cpuset, in the location cpuset union field.">HWLOC_LOCATION_TYPE_CPUSET</a> when refering to accesses performed by CPU cores. <a class="el" href="a00217.html#gga33099ba58f607fc70925da3777688586af637c39b23d48cff15ddb008644aaa84" title="Location is given as an object, in the location object union field.">HWLOC_LOCATION_TYPE_OBJECT</a> is currently unused internally by hwloc, but users may for instance use it to provide custom information about host memory accesses performed by GPUs. </dd></dl>
369
370 </div>
371 </div>
372 <a id="ga79f44f8e1cfd2f97a19171417a75a137"></a>
373 <h2 class="memtitle"><span class="permalink"><a href="#ga79f44f8e1cfd2f97a19171417a75a137">&#9670;&nbsp;</a></span>hwloc_memattr_get_by_name()</h2>
374
375 <div class="memitem">
376 <div class="memproto">
377 <table class="memname">
378 <tr>
379 <td class="memname">int hwloc_memattr_get_by_name </td>
380 <td>(</td>
381 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
201 <p>Retrieve distance matrices. </p>
202 <p>Retrieve distance matrices from the topology into the <code>distances</code> array.</p>
203 <p><code>flags</code> is currently unused, should be <code>0</code>.</p>
204 <p><code>kind</code> serves as a filter. If <code>0</code>, all distance matrices are returned. If it contains some HWLOC_DISTANCES_KIND_FROM_*, only distance matrices whose kind matches one of these are returned. If it contains some HWLOC_DISTANCES_KIND_MEANS_*, only distance matrices whose kind matches one of these are returned.</p>
205 <p>On input, <code>nr</code> points to the number of distance matrices that may be stored in <code>distances</code>. On output, <code>nr</code> points to the number of distance matrices that were actually found, even if some of them couldn't be stored in <code>distances</code>. Distance matrices that couldn't be stored are ignored, but the function still returns success (<code>0</code>). The caller may find out by comparing the value pointed by <code>nr</code> before and after the function call.</p>
206 <p>Each distance matrix returned in the <code>distances</code> array should be released by the caller using <a class="el" href="a00217.html#ga1dd78c1f9acd54f26aba0e284e97e51d" title="Release a distance matrix structure previously returned by hwloc_distances_get().">hwloc_distances_release()</a>. </p>
207
208 </div>
209 </div>
210 <a id="ga5d1d35eccfcc2ebcef71a10972ce9b03"></a>
211 <h2 class="memtitle"><span class="permalink"><a href="#ga5d1d35eccfcc2ebcef71a10972ce9b03">&#9670;&nbsp;</a></span>hwloc_distances_get_by_depth()</h2>
212
213 <div class="memitem">
214 <div class="memproto">
215 <table class="memname">
216 <tr>
217 <td class="memname">int hwloc_distances_get_by_depth </td>
218 <td>(</td>
219 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
220 <td class="paramname"><em>topology</em>, </td>
221 </tr>
222 <tr>
223 <td class="paramkey"></td>
224 <td></td>
225 <td class="paramtype">int&#160;</td>
226 <td class="paramname"><em>depth</em>, </td>
227 </tr>
228 <tr>
229 <td class="paramkey"></td>
230 <td></td>
231 <td class="paramtype">unsigned *&#160;</td>
232 <td class="paramname"><em>nr</em>, </td>
233 </tr>
234 <tr>
235 <td class="paramkey"></td>
236 <td></td>
237 <td class="paramtype">struct <a class="el" href="a00322.html">hwloc_distances_s</a> **&#160;</td>
238 <td class="paramname"><em>distances</em>, </td>
239 </tr>
240 <tr>
241 <td class="paramkey"></td>
242 <td></td>
243 <td class="paramtype">unsigned long&#160;</td>
244 <td class="paramname"><em>kind</em>, </td>
245 </tr>
246 <tr>
247 <td class="paramkey"></td>
248 <td></td>
249 <td class="paramtype">unsigned long&#160;</td>
250 <td class="paramname"><em>flags</em>&#160;</td>
251 </tr>
252 <tr>
253 <td></td>
254 <td>)</td>
255 <td></td><td></td>
256 </tr>
257 </table>
258 </div><div class="memdoc">
259
260 <p>Retrieve distance matrices for object at a specific depth in the topology. </p>
261 <p>Identical to <a class="el" href="a00217.html#ga613e6b2a5d0f06626ee8d0c12fa46691" title="Retrieve distance matrices.">hwloc_distances_get()</a> with the additional <code>depth</code> filter. </p>
262
263 </div>
264 </div>
265 <a id="gaa457f35b8745ca41ec17797c0d7b20f0"></a>
266 <h2 class="memtitle"><span class="permalink"><a href="#gaa457f35b8745ca41ec17797c0d7b20f0">&#9670;&nbsp;</a></span>hwloc_distances_get_by_name()</h2>
267
268 <div class="memitem">
269 <div class="memproto">
270 <table class="memname">
271 <tr>
272 <td class="memname">int hwloc_distances_get_by_name </td>
273 <td>(</td>
274 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
382275 <td class="paramname"><em>topology</em>, </td>
383276 </tr>
384277 <tr>
390283 <tr>
391284 <td class="paramkey"></td>
392285 <td></td>
393 <td class="paramtype"><a class="el" href="a00217.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> *&#160;</td>
394 <td class="paramname"><em>id</em>&#160;</td>
395 </tr>
396 <tr>
397 <td></td>
398 <td>)</td>
399 <td></td><td></td>
400 </tr>
401 </table>
402 </div><div class="memdoc">
403
404 <p>Return the identifier of the memory attribute with the given name. </p>
405
406 </div>
407 </div>
408 <a id="ga297e4a9adc2272446a4c7449dacef0df"></a>
409 <h2 class="memtitle"><span class="permalink"><a href="#ga297e4a9adc2272446a4c7449dacef0df">&#9670;&nbsp;</a></span>hwloc_memattr_get_value()</h2>
410
411 <div class="memitem">
412 <div class="memproto">
413 <table class="memname">
414 <tr>
415 <td class="memname">int hwloc_memattr_get_value </td>
416 <td>(</td>
417 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
418 <td class="paramname"><em>topology</em>, </td>
419 </tr>
420 <tr>
421 <td class="paramkey"></td>
422 <td></td>
423 <td class="paramtype"><a class="el" href="a00217.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a>&#160;</td>
424 <td class="paramname"><em>attribute</em>, </td>
425 </tr>
426 <tr>
427 <td class="paramkey"></td>
428 <td></td>
429 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
430 <td class="paramname"><em>target_node</em>, </td>
431 </tr>
432 <tr>
433 <td class="paramkey"></td>
434 <td></td>
435 <td class="paramtype">struct <a class="el" href="a00320.html">hwloc_location</a> *&#160;</td>
436 <td class="paramname"><em>initiator</em>, </td>
437 </tr>
438 <tr>
439 <td class="paramkey"></td>
440 <td></td>
441 <td class="paramtype">unsigned long&#160;</td>
442 <td class="paramname"><em>flags</em>, </td>
443 </tr>
444 <tr>
445 <td class="paramkey"></td>
446 <td></td>
447 <td class="paramtype">hwloc_uint64_t *&#160;</td>
448 <td class="paramname"><em>value</em>&#160;</td>
449 </tr>
450 <tr>
451 <td></td>
452 <td>)</td>
453 <td></td><td></td>
454 </tr>
455 </table>
456 </div><div class="memdoc">
457
458 <p>Return an attribute value for a specific target NUMA node. </p>
459 <p>If the attribute does not relate to a specific initiator (it does not have the flag <a class="el" href="a00218.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96" title="The value returned for this memory attribute depends on the given initiator. For instance Bandwidth a...">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a>), location <code>initiator</code> is ignored and may be <code>NULL</code>.</p>
286 <td class="paramtype">unsigned *&#160;</td>
287 <td class="paramname"><em>nr</em>, </td>
288 </tr>
289 <tr>
290 <td class="paramkey"></td>
291 <td></td>
292 <td class="paramtype">struct <a class="el" href="a00322.html">hwloc_distances_s</a> **&#160;</td>
293 <td class="paramname"><em>distances</em>, </td>
294 </tr>
295 <tr>
296 <td class="paramkey"></td>
297 <td></td>
298 <td class="paramtype">unsigned long&#160;</td>
299 <td class="paramname"><em>flags</em>&#160;</td>
300 </tr>
301 <tr>
302 <td></td>
303 <td>)</td>
304 <td></td><td></td>
305 </tr>
306 </table>
307 </div><div class="memdoc">
308
309 <p>Retrieve a distance matrix with the given name. </p>
310 <p>Usually only one distances structure may match a given name.</p>
311 <p>The name of the most common structure is "NUMALatency". Others include "XGMIBandwidth" and "NVLinkBandwidth". </p>
312
313 </div>
314 </div>
315 <a id="gaaa6bfbc20072a4f4de132eec859067f6"></a>
316 <h2 class="memtitle"><span class="permalink"><a href="#gaaa6bfbc20072a4f4de132eec859067f6">&#9670;&nbsp;</a></span>hwloc_distances_get_by_type()</h2>
317
318 <div class="memitem">
319 <div class="memproto">
320 <table class="memname">
321 <tr>
322 <td class="memname">int hwloc_distances_get_by_type </td>
323 <td>(</td>
324 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
325 <td class="paramname"><em>topology</em>, </td>
326 </tr>
327 <tr>
328 <td class="paramkey"></td>
329 <td></td>
330 <td class="paramtype"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
331 <td class="paramname"><em>type</em>, </td>
332 </tr>
333 <tr>
334 <td class="paramkey"></td>
335 <td></td>
336 <td class="paramtype">unsigned *&#160;</td>
337 <td class="paramname"><em>nr</em>, </td>
338 </tr>
339 <tr>
340 <td class="paramkey"></td>
341 <td></td>
342 <td class="paramtype">struct <a class="el" href="a00322.html">hwloc_distances_s</a> **&#160;</td>
343 <td class="paramname"><em>distances</em>, </td>
344 </tr>
345 <tr>
346 <td class="paramkey"></td>
347 <td></td>
348 <td class="paramtype">unsigned long&#160;</td>
349 <td class="paramname"><em>kind</em>, </td>
350 </tr>
351 <tr>
352 <td class="paramkey"></td>
353 <td></td>
354 <td class="paramtype">unsigned long&#160;</td>
355 <td class="paramname"><em>flags</em>&#160;</td>
356 </tr>
357 <tr>
358 <td></td>
359 <td>)</td>
360 <td></td><td></td>
361 </tr>
362 </table>
363 </div><div class="memdoc">
364
365 <p>Retrieve distance matrices for object of a specific type. </p>
366 <p>Identical to <a class="el" href="a00217.html#ga613e6b2a5d0f06626ee8d0c12fa46691" title="Retrieve distance matrices.">hwloc_distances_get()</a> with the additional <code>type</code> filter. </p>
367
368 </div>
369 </div>
370 <a id="gaa6f9697028c589cef0458edef5fe273f"></a>
371 <h2 class="memtitle"><span class="permalink"><a href="#gaa6f9697028c589cef0458edef5fe273f">&#9670;&nbsp;</a></span>hwloc_distances_get_name()</h2>
372
373 <div class="memitem">
374 <div class="memproto">
375 <table class="memname">
376 <tr>
377 <td class="memname">const char* hwloc_distances_get_name </td>
378 <td>(</td>
379 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
380 <td class="paramname"><em>topology</em>, </td>
381 </tr>
382 <tr>
383 <td class="paramkey"></td>
384 <td></td>
385 <td class="paramtype">struct <a class="el" href="a00322.html">hwloc_distances_s</a> *&#160;</td>
386 <td class="paramname"><em>distances</em>&#160;</td>
387 </tr>
388 <tr>
389 <td></td>
390 <td>)</td>
391 <td></td><td></td>
392 </tr>
393 </table>
394 </div><div class="memdoc">
395
396 <p>Get a description of what a distances structure contains. </p>
397 <p>For instance "NUMALatency" for hardware-provided NUMA distances (ACPI SLIT), or NULL if unknown. </p>
398
399 </div>
400 </div>
401 <a id="ga1dd78c1f9acd54f26aba0e284e97e51d"></a>
402 <h2 class="memtitle"><span class="permalink"><a href="#ga1dd78c1f9acd54f26aba0e284e97e51d">&#9670;&nbsp;</a></span>hwloc_distances_release()</h2>
403
404 <div class="memitem">
405 <div class="memproto">
406 <table class="memname">
407 <tr>
408 <td class="memname">void hwloc_distances_release </td>
409 <td>(</td>
410 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
411 <td class="paramname"><em>topology</em>, </td>
412 </tr>
413 <tr>
414 <td class="paramkey"></td>
415 <td></td>
416 <td class="paramtype">struct <a class="el" href="a00322.html">hwloc_distances_s</a> *&#160;</td>
417 <td class="paramname"><em>distances</em>&#160;</td>
418 </tr>
419 <tr>
420 <td></td>
421 <td>)</td>
422 <td></td><td></td>
423 </tr>
424 </table>
425 </div><div class="memdoc">
426
427 <p>Release a distance matrix structure previously returned by <a class="el" href="a00217.html#ga613e6b2a5d0f06626ee8d0c12fa46691" title="Retrieve distance matrices.">hwloc_distances_get()</a>. </p>
428 <dl class="section note"><dt>Note</dt><dd>This function is not required if the structure is removed with <a class="el" href="a00220.html#ga80bbf6f0db9af48c61780dd5152664c2" title="Release and remove the given distance matrice from the topology.">hwloc_distances_release_remove()</a>. </dd></dl>
429
430 </div>
431 </div>
432 <a id="gabcadd041f3072999d68f2d94e38670f7"></a>
433 <h2 class="memtitle"><span class="permalink"><a href="#gabcadd041f3072999d68f2d94e38670f7">&#9670;&nbsp;</a></span>hwloc_distances_transform()</h2>
434
435 <div class="memitem">
436 <div class="memproto">
437 <table class="memname">
438 <tr>
439 <td class="memname">int hwloc_distances_transform </td>
440 <td>(</td>
441 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
442 <td class="paramname"><em>topology</em>, </td>
443 </tr>
444 <tr>
445 <td class="paramkey"></td>
446 <td></td>
447 <td class="paramtype">struct <a class="el" href="a00322.html">hwloc_distances_s</a> *&#160;</td>
448 <td class="paramname"><em>distances</em>, </td>
449 </tr>
450 <tr>
451 <td class="paramkey"></td>
452 <td></td>
453 <td class="paramtype">enum <a class="el" href="a00217.html#ga42859b651adec5ef0aaacb53ff220b00">hwloc_distances_transform_e</a>&#160;</td>
454 <td class="paramname"><em>transform</em>, </td>
455 </tr>
456 <tr>
457 <td class="paramkey"></td>
458 <td></td>
459 <td class="paramtype">void *&#160;</td>
460 <td class="paramname"><em>transform_attr</em>, </td>
461 </tr>
462 <tr>
463 <td class="paramkey"></td>
464 <td></td>
465 <td class="paramtype">unsigned long&#160;</td>
466 <td class="paramname"><em>flags</em>&#160;</td>
467 </tr>
468 <tr>
469 <td></td>
470 <td>)</td>
471 <td></td><td></td>
472 </tr>
473 </table>
474 </div><div class="memdoc">
475
476 <p>Apply a transformation to a distances structure. </p>
477 <p>Modify a distances structure that was previously obtained with <a class="el" href="a00217.html#ga613e6b2a5d0f06626ee8d0c12fa46691" title="Retrieve distance matrices.">hwloc_distances_get()</a> or one of its variants.</p>
478 <p>This modifies the local copy of the distances structures but does not modify the distances information stored inside the topology (retrieved by another call to <a class="el" href="a00217.html#ga613e6b2a5d0f06626ee8d0c12fa46691" title="Retrieve distance matrices.">hwloc_distances_get()</a> or exported to XML). To do so, one should add a new distances structure with same name, kind, objects and values (see <a class="el" href="a00219.html">Add distances between objects</a>) and then remove this old one with <a class="el" href="a00220.html#ga80bbf6f0db9af48c61780dd5152664c2" title="Release and remove the given distance matrice from the topology.">hwloc_distances_release_remove()</a>.</p>
479 <p><code>transform</code> must be one of the transformations listed in <a class="el" href="a00217.html#ga42859b651adec5ef0aaacb53ff220b00" title="Transformations of distances structures.">hwloc_distances_transform_e</a>.</p>
480 <p>These transformations may modify the contents of the <code>objs</code> or <code>values</code> arrays.</p>
481 <p><code>transform_attr</code> must be <code>NULL</code> for now.</p>
460482 <p><code>flags</code> must be <code>0</code> for now.</p>
461 <dl class="section note"><dt>Note</dt><dd>The initiator <code>initiator</code> should be of type <a class="el" href="a00217.html#gga33099ba58f607fc70925da3777688586a7135318a86361ad75fd1648e6bf6d174" title="Location is given as a cpuset, in the location cpuset union field.">HWLOC_LOCATION_TYPE_CPUSET</a> when refering to accesses performed by CPU cores. <a class="el" href="a00217.html#gga33099ba58f607fc70925da3777688586af637c39b23d48cff15ddb008644aaa84" title="Location is given as an object, in the location object union field.">HWLOC_LOCATION_TYPE_OBJECT</a> is currently unused internally by hwloc, but users may for instance use it to provide custom information about host memory accesses performed by GPUs. </dd></dl>
483 <dl class="section note"><dt>Note</dt><dd>Objects in distances array <code>objs</code> may be directly modified in place without using <a class="el" href="a00217.html#gabcadd041f3072999d68f2d94e38670f7" title="Apply a transformation to a distances structure.">hwloc_distances_transform()</a>. One may use <a class="el" href="a00209.html#gab5df3ad1e8565ea0c2cf06412f6f6233" title="Return an object of a different type with same locality.">hwloc_get_obj_with_same_locality()</a> to easily convert between similar objects of different types. </dd></dl>
462484
463485 </div>
464486 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Managing memory attributes</title>
7 <title>Hardware Locality (hwloc): Helpers for consulting distance matrices</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="header">
4141 <div class="summary">
42 <a href="#enum-members">Enumerations</a> &#124;
4342 <a href="#func-members">Functions</a> </div>
4443 <div class="headertitle">
45 <div class="title">Managing memory attributes</div> </div>
44 <div class="title">Helpers for consulting distance matrices</div> </div>
4645 </div><!--header-->
4746 <div class="contents">
4847 <table class="memberdecls">
49 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
50 Enumerations</h2></td></tr>
51 <tr class="memitem:ga78aceb4cac4d614c0f5e82dbfeb779e5"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00218.html#ga78aceb4cac4d614c0f5e82dbfeb779e5">hwloc_memattr_flag_e</a> { <a class="el" href="a00218.html#gga78aceb4cac4d614c0f5e82dbfeb779e5af29e65444a6ed00f5cc246df06f65815">HWLOC_MEMATTR_FLAG_HIGHER_FIRST</a> = (1UL&lt;&lt;0)
52 , <a class="el" href="a00218.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9601b5b0e1e68635e7e9901f28bd93bf">HWLOC_MEMATTR_FLAG_LOWER_FIRST</a> = (1UL&lt;&lt;1)
53 , <a class="el" href="a00218.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a> = (1UL&lt;&lt;2)
54 }</td></tr>
55 <tr class="separator:ga78aceb4cac4d614c0f5e82dbfeb779e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 </table><table class="memberdecls">
5748 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
5849 Functions</h2></td></tr>
59 <tr class="memitem:ga5300e9be1abdea2e00c18492148aecd0"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00218.html#ga5300e9be1abdea2e00c18492148aecd0">hwloc_memattr_get_name</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00217.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute, const char **name)</td></tr>
60 <tr class="separator:ga5300e9be1abdea2e00c18492148aecd0"><td class="memSeparator" colspan="2">&#160;</td></tr>
61 <tr class="memitem:ga4c62b626085adeaffb233e5f2a03a5eb"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00218.html#ga4c62b626085adeaffb233e5f2a03a5eb">hwloc_memattr_get_flags</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00217.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute, unsigned long *flags)</td></tr>
62 <tr class="separator:ga4c62b626085adeaffb233e5f2a03a5eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
63 <tr class="memitem:ga770657d1e44b09e93e09f623936c1e5f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00218.html#ga770657d1e44b09e93e09f623936c1e5f">hwloc_memattr_register</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const char *name, unsigned long flags, <a class="el" href="a00217.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> *id)</td></tr>
64 <tr class="separator:ga770657d1e44b09e93e09f623936c1e5f"><td class="memSeparator" colspan="2">&#160;</td></tr>
65 <tr class="memitem:ga960529c08b25cf15825e0f72ecceb504"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00218.html#ga960529c08b25cf15825e0f72ecceb504">hwloc_memattr_set_value</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00217.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> target_node, struct <a class="el" href="a00320.html">hwloc_location</a> *initiator, unsigned long flags, hwloc_uint64_t value)</td></tr>
66 <tr class="separator:ga960529c08b25cf15825e0f72ecceb504"><td class="memSeparator" colspan="2">&#160;</td></tr>
67 <tr class="memitem:ga3177cc0ab47e4dd1fa69ca1df4c7cb1a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00218.html#ga3177cc0ab47e4dd1fa69ca1df4c7cb1a">hwloc_memattr_get_targets</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00217.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute, struct <a class="el" href="a00320.html">hwloc_location</a> *initiator, unsigned long flags, unsigned *nrp, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *targets, hwloc_uint64_t *values)</td></tr>
68 <tr class="separator:ga3177cc0ab47e4dd1fa69ca1df4c7cb1a"><td class="memSeparator" colspan="2">&#160;</td></tr>
69 <tr class="memitem:ga049aaa860dcbbf0792f0fd4251a99ec0"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00218.html#ga049aaa860dcbbf0792f0fd4251a99ec0">hwloc_memattr_get_initiators</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00217.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> target_node, unsigned long flags, unsigned *nr, struct <a class="el" href="a00320.html">hwloc_location</a> *initiators, hwloc_uint64_t *values)</td></tr>
70 <tr class="separator:ga049aaa860dcbbf0792f0fd4251a99ec0"><td class="memSeparator" colspan="2">&#160;</td></tr>
50 <tr class="memitem:gab9e770c7d56c5d6040f26bd1dc8854cd"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00218.html#gab9e770c7d56c5d6040f26bd1dc8854cd">hwloc_distances_obj_index</a> (struct <a class="el" href="a00322.html">hwloc_distances_s</a> *distances, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj)</td></tr>
51 <tr class="separator:gab9e770c7d56c5d6040f26bd1dc8854cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:ga3c665b23056e3269f777b21a67148c82"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00218.html#ga3c665b23056e3269f777b21a67148c82">hwloc_distances_obj_pair_values</a> (struct <a class="el" href="a00322.html">hwloc_distances_s</a> *distances, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj1, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj2, hwloc_uint64_t *value1to2, hwloc_uint64_t *value2to1)</td></tr>
53 <tr class="separator:ga3c665b23056e3269f777b21a67148c82"><td class="memSeparator" colspan="2">&#160;</td></tr>
7154 </table>
7255 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
73 <h2 class="groupheader">Enumeration Type Documentation</h2>
74 <a id="ga78aceb4cac4d614c0f5e82dbfeb779e5"></a>
75 <h2 class="memtitle"><span class="permalink"><a href="#ga78aceb4cac4d614c0f5e82dbfeb779e5">&#9670;&nbsp;</a></span>hwloc_memattr_flag_e</h2>
56 <h2 class="groupheader">Function Documentation</h2>
57 <a id="gab9e770c7d56c5d6040f26bd1dc8854cd"></a>
58 <h2 class="memtitle"><span class="permalink"><a href="#gab9e770c7d56c5d6040f26bd1dc8854cd">&#9670;&nbsp;</a></span>hwloc_distances_obj_index()</h2>
7659
7760 <div class="memitem">
7861 <div class="memproto">
62 <table class="mlabels">
63 <tr>
64 <td class="mlabels-left">
7965 <table class="memname">
8066 <tr>
81 <td class="memname">enum <a class="el" href="a00218.html#ga78aceb4cac4d614c0f5e82dbfeb779e5">hwloc_memattr_flag_e</a></td>
82 </tr>
83 </table>
84 </div><div class="memdoc">
85
86 <p>Memory attribute flags. Given to <a class="el" href="a00218.html#ga770657d1e44b09e93e09f623936c1e5f" title="Register a new memory attribute.">hwloc_memattr_register()</a> and returned by <a class="el" href="a00218.html#ga4c62b626085adeaffb233e5f2a03a5eb" title="Return the flags of the given attribute.">hwloc_memattr_get_flags()</a>. </p>
87 <table class="fieldtable">
88 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga78aceb4cac4d614c0f5e82dbfeb779e5af29e65444a6ed00f5cc246df06f65815"></a>HWLOC_MEMATTR_FLAG_HIGHER_FIRST&#160;</td><td class="fielddoc"><p>The best nodes for this memory attribute are those with the higher values. For instance Bandwidth. </p>
89 </td></tr>
90 <tr><td class="fieldname"><a id="gga78aceb4cac4d614c0f5e82dbfeb779e5a9601b5b0e1e68635e7e9901f28bd93bf"></a>HWLOC_MEMATTR_FLAG_LOWER_FIRST&#160;</td><td class="fielddoc"><p>The best nodes for this memory attribute are those with the lower values. For instance Latency. </p>
91 </td></tr>
92 <tr><td class="fieldname"><a id="gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96"></a>HWLOC_MEMATTR_FLAG_NEED_INITIATOR&#160;</td><td class="fielddoc"><p>The value returned for this memory attribute depends on the given initiator. For instance Bandwidth and Latency, but not Capacity. </p>
93 </td></tr>
94 </table>
95
96 </div>
97 </div>
98 <h2 class="groupheader">Function Documentation</h2>
99 <a id="ga4c62b626085adeaffb233e5f2a03a5eb"></a>
100 <h2 class="memtitle"><span class="permalink"><a href="#ga4c62b626085adeaffb233e5f2a03a5eb">&#9670;&nbsp;</a></span>hwloc_memattr_get_flags()</h2>
101
102 <div class="memitem">
103 <div class="memproto">
104 <table class="memname">
105 <tr>
106 <td class="memname">int hwloc_memattr_get_flags </td>
67 <td class="memname">static int hwloc_distances_obj_index </td>
10768 <td>(</td>
108 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
109 <td class="paramname"><em>topology</em>, </td>
69 <td class="paramtype">struct <a class="el" href="a00322.html">hwloc_distances_s</a> *&#160;</td>
70 <td class="paramname"><em>distances</em>, </td>
11071 </tr>
11172 <tr>
11273 <td class="paramkey"></td>
11374 <td></td>
114 <td class="paramtype"><a class="el" href="a00217.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a>&#160;</td>
115 <td class="paramname"><em>attribute</em>, </td>
116 </tr>
117 <tr>
118 <td class="paramkey"></td>
119 <td></td>
120 <td class="paramtype">unsigned long *&#160;</td>
121 <td class="paramname"><em>flags</em>&#160;</td>
75 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
76 <td class="paramname"><em>obj</em>&#160;</td>
12277 </tr>
12378 <tr>
12479 <td></td>
12681 <td></td><td></td>
12782 </tr>
12883 </table>
84 </td>
85 <td class="mlabels-right">
86 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
87 </tr>
88 </table>
12989 </div><div class="memdoc">
13090
131 <p>Return the flags of the given attribute. </p>
132 <p>Flags are a OR'ed set of <a class="el" href="a00218.html#ga78aceb4cac4d614c0f5e82dbfeb779e5" title="Memory attribute flags. Given to hwloc_memattr_register() and returned by hwloc_memattr_get_flags().">hwloc_memattr_flag_e</a>. </p>
91 <p>Find the index of an object in a distances structure. </p>
92 <dl class="section return"><dt>Returns</dt><dd>-1 if object <code>obj</code> is not involved in structure <code>distances</code>. </dd></dl>
13393
13494 </div>
13595 </div>
136 <a id="ga049aaa860dcbbf0792f0fd4251a99ec0"></a>
137 <h2 class="memtitle"><span class="permalink"><a href="#ga049aaa860dcbbf0792f0fd4251a99ec0">&#9670;&nbsp;</a></span>hwloc_memattr_get_initiators()</h2>
96 <a id="ga3c665b23056e3269f777b21a67148c82"></a>
97 <h2 class="memtitle"><span class="permalink"><a href="#ga3c665b23056e3269f777b21a67148c82">&#9670;&nbsp;</a></span>hwloc_distances_obj_pair_values()</h2>
13898
13999 <div class="memitem">
140100 <div class="memproto">
101 <table class="mlabels">
102 <tr>
103 <td class="mlabels-left">
141104 <table class="memname">
142105 <tr>
143 <td class="memname">int hwloc_memattr_get_initiators </td>
106 <td class="memname">static int hwloc_distances_obj_pair_values </td>
144107 <td>(</td>
145 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
146 <td class="paramname"><em>topology</em>, </td>
108 <td class="paramtype">struct <a class="el" href="a00322.html">hwloc_distances_s</a> *&#160;</td>
109 <td class="paramname"><em>distances</em>, </td>
147110 </tr>
148111 <tr>
149112 <td class="paramkey"></td>
150113 <td></td>
151 <td class="paramtype"><a class="el" href="a00217.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a>&#160;</td>
152 <td class="paramname"><em>attribute</em>, </td>
114 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
115 <td class="paramname"><em>obj1</em>, </td>
153116 </tr>
154117 <tr>
155118 <td class="paramkey"></td>
156119 <td></td>
157 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
158 <td class="paramname"><em>target_node</em>, </td>
159 </tr>
160 <tr>
161 <td class="paramkey"></td>
162 <td></td>
163 <td class="paramtype">unsigned long&#160;</td>
164 <td class="paramname"><em>flags</em>, </td>
165 </tr>
166 <tr>
167 <td class="paramkey"></td>
168 <td></td>
169 <td class="paramtype">unsigned *&#160;</td>
170 <td class="paramname"><em>nr</em>, </td>
171 </tr>
172 <tr>
173 <td class="paramkey"></td>
174 <td></td>
175 <td class="paramtype">struct <a class="el" href="a00320.html">hwloc_location</a> *&#160;</td>
176 <td class="paramname"><em>initiators</em>, </td>
120 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
121 <td class="paramname"><em>obj2</em>, </td>
177122 </tr>
178123 <tr>
179124 <td class="paramkey"></td>
180125 <td></td>
181126 <td class="paramtype">hwloc_uint64_t *&#160;</td>
182 <td class="paramname"><em>values</em>&#160;</td>
127 <td class="paramname"><em>value1to2</em>, </td>
128 </tr>
129 <tr>
130 <td class="paramkey"></td>
131 <td></td>
132 <td class="paramtype">hwloc_uint64_t *&#160;</td>
133 <td class="paramname"><em>value2to1</em>&#160;</td>
183134 </tr>
184135 <tr>
185136 <td></td>
187138 <td></td><td></td>
188139 </tr>
189140 </table>
141 </td>
142 <td class="mlabels-right">
143 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
144 </tr>
145 </table>
190146 </div><div class="memdoc">
191147
192 <p>Return the initiators that have values for a given attribute for a specific target NUMA node. </p>
193 <p>Return initiators for the given attribute and target node in the <code>initiators</code> array. If <code>values</code> is not <code>NULL</code>, the corresponding attribute values are stored in the array it points to.</p>
194 <p>On input, <code>nr</code> points to the number of initiators that may be stored in the array <code>initiators</code> (and <code>values</code>). On output, <code>nr</code> points to the number of initiators (and values) that were actually found, even if some of them couldn't be stored in the array. Initiators that couldn't be stored are ignored, but the function still returns success (<code>0</code>). The caller may find out by comparing the value pointed by <code>nr</code> before and after the function call.</p>
195 <p>The returned initiators should not be modified or freed, they belong to the topology.</p>
196 <p><code>flags</code> must be <code>0</code> for now.</p>
197 <p>If the attribute does not relate to a specific initiator (it does not have the flag <a class="el" href="a00218.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96" title="The value returned for this memory attribute depends on the given initiator. For instance Bandwidth a...">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a>), no initiator is returned.</p>
198 <dl class="section note"><dt>Note</dt><dd>This function is meant for tools and debugging (listing internal information) rather than for application queries. Applications should rather select useful NUMA nodes with <a class="el" href="a00217.html#ga569e80c5be7ef27649b0ef5aa52ffcdc" title="Return an array of local NUMA nodes.">hwloc_get_local_numanode_objs()</a> and then look at their attribute values for some relevant initiators. </dd></dl>
199
200 </div>
201 </div>
202 <a id="ga5300e9be1abdea2e00c18492148aecd0"></a>
203 <h2 class="memtitle"><span class="permalink"><a href="#ga5300e9be1abdea2e00c18492148aecd0">&#9670;&nbsp;</a></span>hwloc_memattr_get_name()</h2>
204
205 <div class="memitem">
206 <div class="memproto">
207 <table class="memname">
208 <tr>
209 <td class="memname">int hwloc_memattr_get_name </td>
210 <td>(</td>
211 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
212 <td class="paramname"><em>topology</em>, </td>
213 </tr>
214 <tr>
215 <td class="paramkey"></td>
216 <td></td>
217 <td class="paramtype"><a class="el" href="a00217.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a>&#160;</td>
218 <td class="paramname"><em>attribute</em>, </td>
219 </tr>
220 <tr>
221 <td class="paramkey"></td>
222 <td></td>
223 <td class="paramtype">const char **&#160;</td>
224 <td class="paramname"><em>name</em>&#160;</td>
225 </tr>
226 <tr>
227 <td></td>
228 <td>)</td>
229 <td></td><td></td>
230 </tr>
231 </table>
232 </div><div class="memdoc">
233
234 <p>Return the name of a memory attribute. </p>
235
236 </div>
237 </div>
238 <a id="ga3177cc0ab47e4dd1fa69ca1df4c7cb1a"></a>
239 <h2 class="memtitle"><span class="permalink"><a href="#ga3177cc0ab47e4dd1fa69ca1df4c7cb1a">&#9670;&nbsp;</a></span>hwloc_memattr_get_targets()</h2>
240
241 <div class="memitem">
242 <div class="memproto">
243 <table class="memname">
244 <tr>
245 <td class="memname">int hwloc_memattr_get_targets </td>
246 <td>(</td>
247 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
248 <td class="paramname"><em>topology</em>, </td>
249 </tr>
250 <tr>
251 <td class="paramkey"></td>
252 <td></td>
253 <td class="paramtype"><a class="el" href="a00217.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a>&#160;</td>
254 <td class="paramname"><em>attribute</em>, </td>
255 </tr>
256 <tr>
257 <td class="paramkey"></td>
258 <td></td>
259 <td class="paramtype">struct <a class="el" href="a00320.html">hwloc_location</a> *&#160;</td>
260 <td class="paramname"><em>initiator</em>, </td>
261 </tr>
262 <tr>
263 <td class="paramkey"></td>
264 <td></td>
265 <td class="paramtype">unsigned long&#160;</td>
266 <td class="paramname"><em>flags</em>, </td>
267 </tr>
268 <tr>
269 <td class="paramkey"></td>
270 <td></td>
271 <td class="paramtype">unsigned *&#160;</td>
272 <td class="paramname"><em>nrp</em>, </td>
273 </tr>
274 <tr>
275 <td class="paramkey"></td>
276 <td></td>
277 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *&#160;</td>
278 <td class="paramname"><em>targets</em>, </td>
279 </tr>
280 <tr>
281 <td class="paramkey"></td>
282 <td></td>
283 <td class="paramtype">hwloc_uint64_t *&#160;</td>
284 <td class="paramname"><em>values</em>&#160;</td>
285 </tr>
286 <tr>
287 <td></td>
288 <td>)</td>
289 <td></td><td></td>
290 </tr>
291 </table>
292 </div><div class="memdoc">
293
294 <p>Return the target NUMA nodes that have some values for a given attribute. </p>
295 <p>Return targets for the given attribute in the <code>targets</code> array (for the given initiator if any). If <code>values</code> is not <code>NULL</code>, the corresponding attribute values are stored in the array it points to.</p>
296 <p>On input, <code>nr</code> points to the number of targets that may be stored in the array <code>targets</code> (and <code>values</code>). On output, <code>nr</code> points to the number of targets (and values) that were actually found, even if some of them couldn't be stored in the array. Targets that couldn't be stored are ignored, but the function still returns success (<code>0</code>). The caller may find out by comparing the value pointed by <code>nr</code> before and after the function call.</p>
297 <p>The returned targets should not be modified or freed, they belong to the topology.</p>
298 <p>Argument <code>initiator</code> is ignored if the attribute does not relate to a specific initiator (it does not have the flag <a class="el" href="a00218.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96" title="The value returned for this memory attribute depends on the given initiator. For instance Bandwidth a...">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a>). Otherwise <code>initiator</code> may be non <code>NULL</code> to report only targets that have a value for that initiator.</p>
299 <p><code>flags</code> must be <code>0</code> for now.</p>
300 <dl class="section note"><dt>Note</dt><dd>This function is meant for tools and debugging (listing internal information) rather than for application queries. Applications should rather select useful NUMA nodes with <a class="el" href="a00217.html#ga569e80c5be7ef27649b0ef5aa52ffcdc" title="Return an array of local NUMA nodes.">hwloc_get_local_numanode_objs()</a> and then look at their attribute values.</dd>
301 <dd>
302 The initiator <code>initiator</code> should be of type <a class="el" href="a00217.html#gga33099ba58f607fc70925da3777688586a7135318a86361ad75fd1648e6bf6d174" title="Location is given as a cpuset, in the location cpuset union field.">HWLOC_LOCATION_TYPE_CPUSET</a> when refering to accesses performed by CPU cores. <a class="el" href="a00217.html#gga33099ba58f607fc70925da3777688586af637c39b23d48cff15ddb008644aaa84" title="Location is given as an object, in the location object union field.">HWLOC_LOCATION_TYPE_OBJECT</a> is currently unused internally by hwloc, but users may for instance use it to provide custom information about host memory accesses performed by GPUs. </dd></dl>
303
304 </div>
305 </div>
306 <a id="ga770657d1e44b09e93e09f623936c1e5f"></a>
307 <h2 class="memtitle"><span class="permalink"><a href="#ga770657d1e44b09e93e09f623936c1e5f">&#9670;&nbsp;</a></span>hwloc_memattr_register()</h2>
308
309 <div class="memitem">
310 <div class="memproto">
311 <table class="memname">
312 <tr>
313 <td class="memname">int hwloc_memattr_register </td>
314 <td>(</td>
315 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
316 <td class="paramname"><em>topology</em>, </td>
317 </tr>
318 <tr>
319 <td class="paramkey"></td>
320 <td></td>
321 <td class="paramtype">const char *&#160;</td>
322 <td class="paramname"><em>name</em>, </td>
323 </tr>
324 <tr>
325 <td class="paramkey"></td>
326 <td></td>
327 <td class="paramtype">unsigned long&#160;</td>
328 <td class="paramname"><em>flags</em>, </td>
329 </tr>
330 <tr>
331 <td class="paramkey"></td>
332 <td></td>
333 <td class="paramtype"><a class="el" href="a00217.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> *&#160;</td>
334 <td class="paramname"><em>id</em>&#160;</td>
335 </tr>
336 <tr>
337 <td></td>
338 <td>)</td>
339 <td></td><td></td>
340 </tr>
341 </table>
342 </div><div class="memdoc">
343
344 <p>Register a new memory attribute. </p>
345 <p>Add a specific memory attribute that is not defined in <a class="el" href="a00217.html#gab4bde745db676fc2ea4b47011cd9a80e" title="Memory node attributes.">hwloc_memattr_id_e</a>. Flags are a OR'ed set of <a class="el" href="a00218.html#ga78aceb4cac4d614c0f5e82dbfeb779e5" title="Memory attribute flags. Given to hwloc_memattr_register() and returned by hwloc_memattr_get_flags().">hwloc_memattr_flag_e</a>. It must contain at least one of <a class="el" href="a00218.html#gga78aceb4cac4d614c0f5e82dbfeb779e5af29e65444a6ed00f5cc246df06f65815" title="The best nodes for this memory attribute are those with the higher values. For instance Bandwidth.">HWLOC_MEMATTR_FLAG_HIGHER_FIRST</a> or <a class="el" href="a00218.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9601b5b0e1e68635e7e9901f28bd93bf" title="The best nodes for this memory attribute are those with the lower values. For instance Latency.">HWLOC_MEMATTR_FLAG_LOWER_FIRST</a>. </p>
346
347 </div>
348 </div>
349 <a id="ga960529c08b25cf15825e0f72ecceb504"></a>
350 <h2 class="memtitle"><span class="permalink"><a href="#ga960529c08b25cf15825e0f72ecceb504">&#9670;&nbsp;</a></span>hwloc_memattr_set_value()</h2>
351
352 <div class="memitem">
353 <div class="memproto">
354 <table class="memname">
355 <tr>
356 <td class="memname">int hwloc_memattr_set_value </td>
357 <td>(</td>
358 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
359 <td class="paramname"><em>topology</em>, </td>
360 </tr>
361 <tr>
362 <td class="paramkey"></td>
363 <td></td>
364 <td class="paramtype"><a class="el" href="a00217.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a>&#160;</td>
365 <td class="paramname"><em>attribute</em>, </td>
366 </tr>
367 <tr>
368 <td class="paramkey"></td>
369 <td></td>
370 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
371 <td class="paramname"><em>target_node</em>, </td>
372 </tr>
373 <tr>
374 <td class="paramkey"></td>
375 <td></td>
376 <td class="paramtype">struct <a class="el" href="a00320.html">hwloc_location</a> *&#160;</td>
377 <td class="paramname"><em>initiator</em>, </td>
378 </tr>
379 <tr>
380 <td class="paramkey"></td>
381 <td></td>
382 <td class="paramtype">unsigned long&#160;</td>
383 <td class="paramname"><em>flags</em>, </td>
384 </tr>
385 <tr>
386 <td class="paramkey"></td>
387 <td></td>
388 <td class="paramtype">hwloc_uint64_t&#160;</td>
389 <td class="paramname"><em>value</em>&#160;</td>
390 </tr>
391 <tr>
392 <td></td>
393 <td>)</td>
394 <td></td><td></td>
395 </tr>
396 </table>
397 </div><div class="memdoc">
398
399 <p>Set an attribute value for a specific target NUMA node. </p>
400 <p>If the attribute does not relate to a specific initiator (it does not have the flag <a class="el" href="a00218.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96" title="The value returned for this memory attribute depends on the given initiator. For instance Bandwidth a...">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a>), location <code>initiator</code> is ignored and may be <code>NULL</code>.</p>
401 <p>The initiator will be copied into the topology, the caller should free anything allocated to store the initiator, for instance the cpuset.</p>
402 <p><code>flags</code> must be <code>0</code> for now.</p>
403 <dl class="section note"><dt>Note</dt><dd>The initiator <code>initiator</code> should be of type <a class="el" href="a00217.html#gga33099ba58f607fc70925da3777688586a7135318a86361ad75fd1648e6bf6d174" title="Location is given as a cpuset, in the location cpuset union field.">HWLOC_LOCATION_TYPE_CPUSET</a> when refering to accesses performed by CPU cores. <a class="el" href="a00217.html#gga33099ba58f607fc70925da3777688586af637c39b23d48cff15ddb008644aaa84" title="Location is given as an object, in the location object union field.">HWLOC_LOCATION_TYPE_OBJECT</a> is currently unused internally by hwloc, but users may for instance use it to provide custom information about host memory accesses performed by GPUs. </dd></dl>
148 <p>Find the values between two objects in a distance matrices. </p>
149 <p>The distance from <code>obj1</code> to <code>obj2</code> is stored in the value pointed by <code>value1to2</code> and reciprocally.</p>
150 <dl class="section return"><dt>Returns</dt><dd>-1 if object <code>obj1</code> or <code>obj2</code> is not involved in structure <code>distances</code>. </dd></dl>
404151
405152 </div>
406153 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Kinds of CPU cores</title>
7 <title>Hardware Locality (hwloc): Add distances between objects</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="header">
4141 <div class="summary">
42 <a href="#typedef-members">Typedefs</a> &#124;
43 <a href="#enum-members">Enumerations</a> &#124;
4244 <a href="#func-members">Functions</a> </div>
4345 <div class="headertitle">
44 <div class="title">Kinds of CPU cores</div> </div>
46 <div class="title">Add distances between objects</div> </div>
4547 </div><!--header-->
4648 <div class="contents">
4749 <table class="memberdecls">
50 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
51 Typedefs</h2></td></tr>
52 <tr class="memitem:ga554a4c1e315265f961830e2b616e4989"><td class="memItemLeft" align="right" valign="top">typedef void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00219.html#ga554a4c1e315265f961830e2b616e4989">hwloc_distances_add_handle_t</a></td></tr>
53 <tr class="separator:ga554a4c1e315265f961830e2b616e4989"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 </table><table class="memberdecls">
55 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
56 Enumerations</h2></td></tr>
57 <tr class="memitem:ga22428b6bab271411e3834e6b4ca22e37"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00219.html#ga22428b6bab271411e3834e6b4ca22e37">hwloc_distances_add_flag_e</a> { <a class="el" href="a00219.html#gga22428b6bab271411e3834e6b4ca22e37a7f6baba797d70538d03c9d13052c62ab">HWLOC_DISTANCES_ADD_FLAG_GROUP</a>
58 , <a class="el" href="a00219.html#gga22428b6bab271411e3834e6b4ca22e37a5233ccf631c3bc53dd5c3e7a5d5c9b77">HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE</a>
59 }</td></tr>
60 <tr class="separator:ga22428b6bab271411e3834e6b4ca22e37"><td class="memSeparator" colspan="2">&#160;</td></tr>
61 </table><table class="memberdecls">
4862 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
4963 Functions</h2></td></tr>
50 <tr class="memitem:ga7553f7c6d3920b169f3fc18dfe6a33e3"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00219.html#ga7553f7c6d3920b169f3fc18dfe6a33e3">hwloc_cpukinds_get_nr</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned long flags)</td></tr>
51 <tr class="separator:ga7553f7c6d3920b169f3fc18dfe6a33e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:gaf979833aab18d2e7f4b17c932cbcf5d8"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00219.html#gaf979833aab18d2e7f4b17c932cbcf5d8">hwloc_cpukinds_get_by_cpuset</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> cpuset, unsigned long flags)</td></tr>
53 <tr class="separator:gaf979833aab18d2e7f4b17c932cbcf5d8"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:gae1b38fbe9c645583fc16052ce6fbb275"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00219.html#gae1b38fbe9c645583fc16052ce6fbb275">hwloc_cpukinds_get_info</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned kind_index, <a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> cpuset, int *efficiency, unsigned *nr_infos, struct <a class="el" href="a00292.html">hwloc_info_s</a> **infos, unsigned long flags)</td></tr>
55 <tr class="separator:gae1b38fbe9c645583fc16052ce6fbb275"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:ga6164ba92cfd06f530ec2c4a18a0dd5a9"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00219.html#ga6164ba92cfd06f530ec2c4a18a0dd5a9">hwloc_cpukinds_register</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> cpuset, int forced_efficiency, unsigned nr_infos, struct <a class="el" href="a00292.html">hwloc_info_s</a> *infos, unsigned long flags)</td></tr>
57 <tr class="separator:ga6164ba92cfd06f530ec2c4a18a0dd5a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 <tr class="memitem:ga823d38fa8d21dc338497fb0f79c96704"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00219.html#ga554a4c1e315265f961830e2b616e4989">hwloc_distances_add_handle_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00219.html#ga823d38fa8d21dc338497fb0f79c96704">hwloc_distances_add_create</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const char *name, unsigned long kind, unsigned long flags)</td></tr>
65 <tr class="separator:ga823d38fa8d21dc338497fb0f79c96704"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 <tr class="memitem:ga8c9715481b0bce344c8a33c6e6a56469"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00219.html#ga8c9715481b0bce344c8a33c6e6a56469">hwloc_distances_add_values</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00219.html#ga554a4c1e315265f961830e2b616e4989">hwloc_distances_add_handle_t</a> handle, unsigned nbobjs, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *objs, hwloc_uint64_t *values, unsigned long flags)</td></tr>
67 <tr class="separator:ga8c9715481b0bce344c8a33c6e6a56469"><td class="memSeparator" colspan="2">&#160;</td></tr>
68 <tr class="memitem:ga1f5a29760ebb8f9af831e645315f553c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00219.html#ga1f5a29760ebb8f9af831e645315f553c">hwloc_distances_add_commit</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00219.html#ga554a4c1e315265f961830e2b616e4989">hwloc_distances_add_handle_t</a> handle, unsigned long flags)</td></tr>
69 <tr class="separator:ga1f5a29760ebb8f9af831e645315f553c"><td class="memSeparator" colspan="2">&#160;</td></tr>
5870 </table>
5971 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
60 <p>Platforms with heterogeneous CPUs may have some cores with different features or frequencies. This API exposes identical PUs in sets called CPU kinds. Each PU of the topology may only be in a single kind.</p>
61 <p>The number of kinds may be obtained with <a class="el" href="a00219.html#ga7553f7c6d3920b169f3fc18dfe6a33e3" title="Get the number of different kinds of CPU cores in the topology.">hwloc_cpukinds_get_nr()</a>. If the platform is homogeneous, there may be a single kind with all PUs. If the platform or operating system does not expose any information about CPU cores, there may be no kind at all.</p>
62 <p>The index of the kind that describes a given CPU set (if any, and not partially) may be obtained with <a class="el" href="a00219.html#gaf979833aab18d2e7f4b17c932cbcf5d8" title="Get the index of the CPU kind that contains CPUs listed in cpuset.">hwloc_cpukinds_get_by_cpuset()</a>.</p>
63 <p>From the index of a kind, it is possible to retrieve information with <a class="el" href="a00219.html#gae1b38fbe9c645583fc16052ce6fbb275" title="Get the CPU set and infos about a CPU kind in the topology.">hwloc_cpukinds_get_info()</a>: an abstracted efficiency value, and an array of info attributes (for instance the "CoreType" and "FrequencyMaxMHz", see <a class="el" href="a00393.html#topoattrs_cpukinds">CPU Kinds</a>).</p>
64 <p>A higher efficiency value means intrinsic greater performance (and possibly less performance/power efficiency). Kinds with lower efficiency are ranked first: Passing 0 as <code>kind_index</code> to <a class="el" href="a00219.html#gae1b38fbe9c645583fc16052ce6fbb275" title="Get the CPU set and infos about a CPU kind in the topology.">hwloc_cpukinds_get_info()</a> will return information about the less efficient CPU kind.</p>
65 <p>When available, efficiency values are gathered from the operating system (when <code>cpukind_efficiency</code> is set in the struct <a class="el" href="a00296.html" title="Flags describing actual discovery support for this topology.">hwloc_topology_discovery_support</a> array, only on Windows 10 for now). Otherwise hwloc tries to compute efficiencies by comparing CPU kinds using frequencies (on ARM), or core types and frequencies (on other architectures). The environment variable HWLOC_CPUKINDS_RANKING may be used to change this heuristics, see <a class="el" href="a00388.html">Environment Variables</a>.</p>
66 <p>If hwloc fails to rank any kind, for instance because the operating system does not expose efficiencies and core frequencies, all kinds will have an unknown efficiency (<code>-1</code>), and they are not indexed/ordered in any specific way. </p>
72 <p>The usual way to add distances is: </p><div class="fragment"><div class="line"><a class="code" href="a00219.html#ga554a4c1e315265f961830e2b616e4989">hwloc_distances_add_handle_t</a> handle;</div>
73 <div class="line"><span class="keywordtype">int</span> err = -1;</div>
74 <div class="line">handle = <a class="code" href="a00219.html#ga823d38fa8d21dc338497fb0f79c96704">hwloc_distances_add_create</a>(topology, <span class="stringliteral">&quot;name&quot;</span>, kind, 0);</div>
75 <div class="line"><span class="keywordflow">if</span> (handle) {</div>
76 <div class="line"> err = <a class="code" href="a00219.html#ga8c9715481b0bce344c8a33c6e6a56469">hwloc_distances_add_values</a>(topology, handle, nbobjs, objs, values, 0);</div>
77 <div class="line"> <span class="keywordflow">if</span> (!err)</div>
78 <div class="line"> err = <a class="code" href="a00219.html#ga1f5a29760ebb8f9af831e645315f553c">hwloc_distances_add_commit</a>(topology, handle, flags);</div>
79 <div class="line">}</div>
80 <div class="ttc" id="aa00219_html_ga1f5a29760ebb8f9af831e645315f553c"><div class="ttname"><a href="a00219.html#ga1f5a29760ebb8f9af831e645315f553c">hwloc_distances_add_commit</a></div><div class="ttdeci">int hwloc_distances_add_commit(hwloc_topology_t topology, hwloc_distances_add_handle_t handle, unsigned long flags)</div><div class="ttdoc">Commit a new distances structure.</div></div>
81 <div class="ttc" id="aa00219_html_ga554a4c1e315265f961830e2b616e4989"><div class="ttname"><a href="a00219.html#ga554a4c1e315265f961830e2b616e4989">hwloc_distances_add_handle_t</a></div><div class="ttdeci">void * hwloc_distances_add_handle_t</div><div class="ttdoc">Handle to a new distances structure during its addition to the topology.</div><div class="ttdef"><b>Definition:</b> distances.h:329</div></div>
82 <div class="ttc" id="aa00219_html_ga823d38fa8d21dc338497fb0f79c96704"><div class="ttname"><a href="a00219.html#ga823d38fa8d21dc338497fb0f79c96704">hwloc_distances_add_create</a></div><div class="ttdeci">hwloc_distances_add_handle_t hwloc_distances_add_create(hwloc_topology_t topology, const char *name, unsigned long kind, unsigned long flags)</div><div class="ttdoc">Create a new empty distances structure.</div></div>
83 <div class="ttc" id="aa00219_html_ga8c9715481b0bce344c8a33c6e6a56469"><div class="ttname"><a href="a00219.html#ga8c9715481b0bce344c8a33c6e6a56469">hwloc_distances_add_values</a></div><div class="ttdeci">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)</div><div class="ttdoc">Specify the objects and values in a new empty distances structure.</div></div>
84 </div><!-- fragment --><p> If <code>err</code> is <code>0</code> at the end, then addition was successful. </p>
85 <h2 class="groupheader">Typedef Documentation</h2>
86 <a id="ga554a4c1e315265f961830e2b616e4989"></a>
87 <h2 class="memtitle"><span class="permalink"><a href="#ga554a4c1e315265f961830e2b616e4989">&#9670;&nbsp;</a></span>hwloc_distances_add_handle_t</h2>
88
89 <div class="memitem">
90 <div class="memproto">
91 <table class="memname">
92 <tr>
93 <td class="memname">typedef void* <a class="el" href="a00219.html#ga554a4c1e315265f961830e2b616e4989">hwloc_distances_add_handle_t</a></td>
94 </tr>
95 </table>
96 </div><div class="memdoc">
97
98 <p>Handle to a new distances structure during its addition to the topology. </p>
99
100 </div>
101 </div>
102 <h2 class="groupheader">Enumeration Type Documentation</h2>
103 <a id="ga22428b6bab271411e3834e6b4ca22e37"></a>
104 <h2 class="memtitle"><span class="permalink"><a href="#ga22428b6bab271411e3834e6b4ca22e37">&#9670;&nbsp;</a></span>hwloc_distances_add_flag_e</h2>
105
106 <div class="memitem">
107 <div class="memproto">
108 <table class="memname">
109 <tr>
110 <td class="memname">enum <a class="el" href="a00219.html#ga22428b6bab271411e3834e6b4ca22e37">hwloc_distances_add_flag_e</a></td>
111 </tr>
112 </table>
113 </div><div class="memdoc">
114
115 <p>Flags for adding a new distances to a topology. </p>
116 <table class="fieldtable">
117 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga22428b6bab271411e3834e6b4ca22e37a7f6baba797d70538d03c9d13052c62ab"></a>HWLOC_DISTANCES_ADD_FLAG_GROUP&#160;</td><td class="fielddoc"><p>Try to group objects based on the newly provided distance information. This is ignored for distances between objects of different types. </p>
118 </td></tr>
119 <tr><td class="fieldname"><a id="gga22428b6bab271411e3834e6b4ca22e37a5233ccf631c3bc53dd5c3e7a5d5c9b77"></a>HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE&#160;</td><td class="fielddoc"><p>If grouping, consider the distance values as inaccurate and relax the comparisons during the grouping algorithms. The actual accuracy may be modified through the HWLOC_GROUPING_ACCURACY environment variable (see <a class="el" href="a00394.html">Environment Variables</a>). </p>
120 </td></tr>
121 </table>
122
123 </div>
124 </div>
67125 <h2 class="groupheader">Function Documentation</h2>
68 <a id="gaf979833aab18d2e7f4b17c932cbcf5d8"></a>
69 <h2 class="memtitle"><span class="permalink"><a href="#gaf979833aab18d2e7f4b17c932cbcf5d8">&#9670;&nbsp;</a></span>hwloc_cpukinds_get_by_cpuset()</h2>
70
71 <div class="memitem">
72 <div class="memproto">
73 <table class="memname">
74 <tr>
75 <td class="memname">int hwloc_cpukinds_get_by_cpuset </td>
126 <a id="ga1f5a29760ebb8f9af831e645315f553c"></a>
127 <h2 class="memtitle"><span class="permalink"><a href="#ga1f5a29760ebb8f9af831e645315f553c">&#9670;&nbsp;</a></span>hwloc_distances_add_commit()</h2>
128
129 <div class="memitem">
130 <div class="memproto">
131 <table class="memname">
132 <tr>
133 <td class="memname">int hwloc_distances_add_commit </td>
76134 <td>(</td>
77 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
135 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
78136 <td class="paramname"><em>topology</em>, </td>
79137 </tr>
80138 <tr>
81139 <td class="paramkey"></td>
82140 <td></td>
83 <td class="paramtype"><a class="el" href="a00211.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
84 <td class="paramname"><em>cpuset</em>, </td>
141 <td class="paramtype"><a class="el" href="a00219.html#ga554a4c1e315265f961830e2b616e4989">hwloc_distances_add_handle_t</a>&#160;</td>
142 <td class="paramname"><em>handle</em>, </td>
85143 </tr>
86144 <tr>
87145 <td class="paramkey"></td>
97155 </table>
98156 </div><div class="memdoc">
99157
100 <p>Get the index of the CPU kind that contains CPUs listed in <code>cpuset</code>. </p>
101 <p><code>flags</code> must be <code>0</code> for now.</p>
102 <dl class="section return"><dt>Returns</dt><dd>The index of the CPU kind (positive integer or 0) on success. </dd>
158 <p>Commit a new distances structure. </p>
159 <p>This function finalizes the distances structure and inserts in it the topology.</p>
160 <p>Parameter <code>handle</code> was previously returned by <a class="el" href="a00219.html#ga823d38fa8d21dc338497fb0f79c96704" title="Create a new empty distances structure.">hwloc_distances_add_create()</a>. Then objects and values were specified with <a class="el" href="a00219.html#ga8c9715481b0bce344c8a33c6e6a56469" title="Specify the objects and values in a new empty distances structure.">hwloc_distances_add_values()</a>.</p>
161 <p><code>flags</code> configures the behavior of the function using an optional OR'ed set of <a class="el" href="a00219.html#ga22428b6bab271411e3834e6b4ca22e37" title="Flags for adding a new distances to a topology.">hwloc_distances_add_flag_e</a>. It may be used to request the grouping of existing objects based on distances.</p>
162 <p>On error, the temporary distances structure and its content are destroyed.</p>
163 <dl class="section return"><dt>Returns</dt><dd><code>0</code> on success. </dd>
103164 <dd>
104 <code>-1</code> with <code>errno</code> set to <code>EXDEV</code> if <code>cpuset</code> is only partially included in the some kind. </dd>
105 <dd>
106 <code>-1</code> with <code>errno</code> set to <code>ENOENT</code> if <code>cpuset</code> is not included in any kind, even partially. </dd>
107 <dd>
108 <code>-1</code> with <code>errno</code> set to <code>EINVAL</code> if parameters are invalid. </dd></dl>
109
110 </div>
111 </div>
112 <a id="gae1b38fbe9c645583fc16052ce6fbb275"></a>
113 <h2 class="memtitle"><span class="permalink"><a href="#gae1b38fbe9c645583fc16052ce6fbb275">&#9670;&nbsp;</a></span>hwloc_cpukinds_get_info()</h2>
114
115 <div class="memitem">
116 <div class="memproto">
117 <table class="memname">
118 <tr>
119 <td class="memname">int hwloc_cpukinds_get_info </td>
165 <code>-1</code> on error. </dd></dl>
166
167 </div>
168 </div>
169 <a id="ga823d38fa8d21dc338497fb0f79c96704"></a>
170 <h2 class="memtitle"><span class="permalink"><a href="#ga823d38fa8d21dc338497fb0f79c96704">&#9670;&nbsp;</a></span>hwloc_distances_add_create()</h2>
171
172 <div class="memitem">
173 <div class="memproto">
174 <table class="memname">
175 <tr>
176 <td class="memname"><a class="el" href="a00219.html#ga554a4c1e315265f961830e2b616e4989">hwloc_distances_add_handle_t</a> hwloc_distances_add_create </td>
120177 <td>(</td>
121 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
178 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
122179 <td class="paramname"><em>topology</em>, </td>
123180 </tr>
124181 <tr>
125182 <td class="paramkey"></td>
126183 <td></td>
127 <td class="paramtype">unsigned&#160;</td>
128 <td class="paramname"><em>kind_index</em>, </td>
129 </tr>
130 <tr>
131 <td class="paramkey"></td>
132 <td></td>
133 <td class="paramtype"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
134 <td class="paramname"><em>cpuset</em>, </td>
135 </tr>
136 <tr>
137 <td class="paramkey"></td>
138 <td></td>
139 <td class="paramtype">int *&#160;</td>
140 <td class="paramname"><em>efficiency</em>, </td>
141 </tr>
142 <tr>
143 <td class="paramkey"></td>
144 <td></td>
145 <td class="paramtype">unsigned *&#160;</td>
146 <td class="paramname"><em>nr_infos</em>, </td>
147 </tr>
148 <tr>
149 <td class="paramkey"></td>
150 <td></td>
151 <td class="paramtype">struct <a class="el" href="a00292.html">hwloc_info_s</a> **&#160;</td>
152 <td class="paramname"><em>infos</em>, </td>
184 <td class="paramtype">const char *&#160;</td>
185 <td class="paramname"><em>name</em>, </td>
186 </tr>
187 <tr>
188 <td class="paramkey"></td>
189 <td></td>
190 <td class="paramtype">unsigned long&#160;</td>
191 <td class="paramname"><em>kind</em>, </td>
153192 </tr>
154193 <tr>
155194 <td class="paramkey"></td>
165204 </table>
166205 </div><div class="memdoc">
167206
168 <p>Get the CPU set and infos about a CPU kind in the topology. </p>
169 <p><code>kind_index</code> identifies one kind of CPU between 0 and the number of kinds returned by <a class="el" href="a00219.html#ga7553f7c6d3920b169f3fc18dfe6a33e3" title="Get the number of different kinds of CPU cores in the topology.">hwloc_cpukinds_get_nr()</a> minus 1.</p>
170 <p>If not <code>NULL</code>, the bitmap <code>cpuset</code> will be filled with the set of PUs of this kind.</p>
171 <p>The integer pointed by <code>efficiency</code>, if not <code>NULL</code> will, be filled with the ranking of this kind of CPU in term of efficiency (see above). It ranges from <code>0</code> to the number of kinds (as reported by <a class="el" href="a00219.html#ga7553f7c6d3920b169f3fc18dfe6a33e3" title="Get the number of different kinds of CPU cores in the topology.">hwloc_cpukinds_get_nr()</a>) minus 1.</p>
172 <p>Kinds with lower efficiency are reported first.</p>
173 <p>If there is a single kind in the topology, its efficiency <code>0</code>. If the efficiency of some kinds of cores is unknown, the efficiency of all kinds is set to <code>-1</code>, and kinds are reported in no specific order.</p>
174 <p>The array of info attributes (for instance the "CoreType", "FrequencyMaxMHz" or "FrequencyBaseMHz", see <a class="el" href="a00393.html#topoattrs_cpukinds">CPU Kinds</a>) and its length are returned in <code>infos</code> or <code>nr_infos</code>. The array belongs to the topology, it should not be freed or modified.</p>
175 <p>If <code>nr_infos</code> or <code>infos</code> is <code>NULL</code>, no info is returned.</p>
207 <p>Create a new empty distances structure. </p>
208 <p>Create an empty distances structure to be filled with <a class="el" href="a00219.html#ga8c9715481b0bce344c8a33c6e6a56469" title="Specify the objects and values in a new empty distances structure.">hwloc_distances_add_values()</a> and then committed with <a class="el" href="a00219.html#ga1f5a29760ebb8f9af831e645315f553c" title="Commit a new distances structure.">hwloc_distances_add_commit()</a>.</p>
209 <p>Parameter <code>name</code> is optional, it may be <code>NULL</code>. Otherwise, it will be copied internally and may later be freed by the caller.</p>
210 <p><code>kind</code> specifies the kind of distance as a OR'ed set of <a class="el" href="a00217.html#gab1bb10d3adb85b52cdc6fe5a7f74f108" title="Kinds of distance matrices.">hwloc_distances_kind_e</a>. Kind <a class="el" href="a00217.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108aa6cf2b6dfcf148b65952f811814efbe1" title="This distances structure covers objects of different types. This may apply to the &quot;NVLinkBandwidth&quot; s...">HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES</a> will be automatically set according to objects having different types in <a class="el" href="a00219.html#ga8c9715481b0bce344c8a33c6e6a56469" title="Specify the objects and values in a new empty distances structure.">hwloc_distances_add_values()</a>.</p>
211 <p><code>flags</code> must be <code>0</code> for now.</p>
212 <dl class="section return"><dt>Returns</dt><dd>A hwloc_distances_add_handle_t that should then be passed to <a class="el" href="a00219.html#ga8c9715481b0bce344c8a33c6e6a56469" title="Specify the objects and values in a new empty distances structure.">hwloc_distances_add_values()</a> and <a class="el" href="a00219.html#ga1f5a29760ebb8f9af831e645315f553c" title="Commit a new distances structure.">hwloc_distances_add_commit()</a>.</dd>
213 <dd>
214 <code>NULL</code> on error. </dd></dl>
215
216 </div>
217 </div>
218 <a id="ga8c9715481b0bce344c8a33c6e6a56469"></a>
219 <h2 class="memtitle"><span class="permalink"><a href="#ga8c9715481b0bce344c8a33c6e6a56469">&#9670;&nbsp;</a></span>hwloc_distances_add_values()</h2>
220
221 <div class="memitem">
222 <div class="memproto">
223 <table class="memname">
224 <tr>
225 <td class="memname">int hwloc_distances_add_values </td>
226 <td>(</td>
227 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
228 <td class="paramname"><em>topology</em>, </td>
229 </tr>
230 <tr>
231 <td class="paramkey"></td>
232 <td></td>
233 <td class="paramtype"><a class="el" href="a00219.html#ga554a4c1e315265f961830e2b616e4989">hwloc_distances_add_handle_t</a>&#160;</td>
234 <td class="paramname"><em>handle</em>, </td>
235 </tr>
236 <tr>
237 <td class="paramkey"></td>
238 <td></td>
239 <td class="paramtype">unsigned&#160;</td>
240 <td class="paramname"><em>nbobjs</em>, </td>
241 </tr>
242 <tr>
243 <td class="paramkey"></td>
244 <td></td>
245 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *&#160;</td>
246 <td class="paramname"><em>objs</em>, </td>
247 </tr>
248 <tr>
249 <td class="paramkey"></td>
250 <td></td>
251 <td class="paramtype">hwloc_uint64_t *&#160;</td>
252 <td class="paramname"><em>values</em>, </td>
253 </tr>
254 <tr>
255 <td class="paramkey"></td>
256 <td></td>
257 <td class="paramtype">unsigned long&#160;</td>
258 <td class="paramname"><em>flags</em>&#160;</td>
259 </tr>
260 <tr>
261 <td></td>
262 <td>)</td>
263 <td></td><td></td>
264 </tr>
265 </table>
266 </div><div class="memdoc">
267
268 <p>Specify the objects and values in a new empty distances structure. </p>
269 <p>Specify the objects and values for a new distances structure that was returned as a handle by <a class="el" href="a00219.html#ga823d38fa8d21dc338497fb0f79c96704" title="Create a new empty distances structure.">hwloc_distances_add_create()</a>. The structure must then be committed with <a class="el" href="a00219.html#ga1f5a29760ebb8f9af831e645315f553c" title="Commit a new distances structure.">hwloc_distances_add_commit()</a>.</p>
270 <p>The number of objects is <code>nbobjs</code> and the array of objects is <code>objs</code>. Distance values are stored as a one-dimension array in <code>values</code>. The distance from object i to object j is in slot i*nbobjs+j.</p>
271 <p><code>nbobjs</code> must be at least 2.</p>
272 <p>Arrays <code>objs</code> and <code>values</code> will be copied internally, they may later be freed by the caller.</p>
273 <p>On error, the temporary distances structure and its content are destroyed.</p>
176274 <p><code>flags</code> must be <code>0</code> for now.</p>
177275 <dl class="section return"><dt>Returns</dt><dd><code>0</code> on success. </dd>
178276 <dd>
179 <code>-1</code> with <code>errno</code> set to <code>ENOENT</code> if <code>kind_index</code> does not match any CPU kind. </dd>
180 <dd>
181 <code>-1</code> with <code>errno</code> set to <code>EINVAL</code> if parameters are invalid. </dd></dl>
182
183 </div>
184 </div>
185 <a id="ga7553f7c6d3920b169f3fc18dfe6a33e3"></a>
186 <h2 class="memtitle"><span class="permalink"><a href="#ga7553f7c6d3920b169f3fc18dfe6a33e3">&#9670;&nbsp;</a></span>hwloc_cpukinds_get_nr()</h2>
187
188 <div class="memitem">
189 <div class="memproto">
190 <table class="memname">
191 <tr>
192 <td class="memname">int hwloc_cpukinds_get_nr </td>
193 <td>(</td>
194 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
195 <td class="paramname"><em>topology</em>, </td>
196 </tr>
197 <tr>
198 <td class="paramkey"></td>
199 <td></td>
200 <td class="paramtype">unsigned long&#160;</td>
201 <td class="paramname"><em>flags</em>&#160;</td>
202 </tr>
203 <tr>
204 <td></td>
205 <td>)</td>
206 <td></td><td></td>
207 </tr>
208 </table>
209 </div><div class="memdoc">
210
211 <p>Get the number of different kinds of CPU cores in the topology. </p>
212 <p><code>flags</code> must be <code>0</code> for now.</p>
213 <dl class="section return"><dt>Returns</dt><dd>The number of CPU kinds (positive integer) on success. </dd>
214 <dd>
215 <code>0</code> if no information about kinds was found. </dd>
216 <dd>
217 <code>-1</code> with <code>errno</code> set to <code>EINVAL</code> if <code>flags</code> is invalid. </dd></dl>
218
219 </div>
220 </div>
221 <a id="ga6164ba92cfd06f530ec2c4a18a0dd5a9"></a>
222 <h2 class="memtitle"><span class="permalink"><a href="#ga6164ba92cfd06f530ec2c4a18a0dd5a9">&#9670;&nbsp;</a></span>hwloc_cpukinds_register()</h2>
223
224 <div class="memitem">
225 <div class="memproto">
226 <table class="memname">
227 <tr>
228 <td class="memname">int hwloc_cpukinds_register </td>
229 <td>(</td>
230 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
231 <td class="paramname"><em>topology</em>, </td>
232 </tr>
233 <tr>
234 <td class="paramkey"></td>
235 <td></td>
236 <td class="paramtype"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
237 <td class="paramname"><em>cpuset</em>, </td>
238 </tr>
239 <tr>
240 <td class="paramkey"></td>
241 <td></td>
242 <td class="paramtype">int&#160;</td>
243 <td class="paramname"><em>forced_efficiency</em>, </td>
244 </tr>
245 <tr>
246 <td class="paramkey"></td>
247 <td></td>
248 <td class="paramtype">unsigned&#160;</td>
249 <td class="paramname"><em>nr_infos</em>, </td>
250 </tr>
251 <tr>
252 <td class="paramkey"></td>
253 <td></td>
254 <td class="paramtype">struct <a class="el" href="a00292.html">hwloc_info_s</a> *&#160;</td>
255 <td class="paramname"><em>infos</em>, </td>
256 </tr>
257 <tr>
258 <td class="paramkey"></td>
259 <td></td>
260 <td class="paramtype">unsigned long&#160;</td>
261 <td class="paramname"><em>flags</em>&#160;</td>
262 </tr>
263 <tr>
264 <td></td>
265 <td>)</td>
266 <td></td><td></td>
267 </tr>
268 </table>
269 </div><div class="memdoc">
270
271 <p>Register a kind of CPU in the topology. </p>
272 <p>Mark the PUs listed in <code>cpuset</code> as being of the same kind with respect to the given attributes.</p>
273 <p><code>forced_efficiency</code> should be <code>-1</code> if unknown. Otherwise it is an abstracted efficiency value to enforce the ranking of all kinds if all of them have valid (and different) efficiencies.</p>
274 <p>The array <code>infos</code> of size <code>nr_infos</code> may be used to provide info names and values describing this kind of PUs.</p>
275 <p><code>flags</code> must be <code>0</code> for now.</p>
276 <p>Parameters <code>cpuset</code> and <code>infos</code> will be duplicated internally, the caller is responsible for freeing them.</p>
277 <p>If <code>cpuset</code> overlaps with some existing kinds, those might get modified or split. For instance if existing kind A contains PUs 0 and 1, and one registers another kind for PU 1 and 2, there will be 3 resulting kinds: existing kind A is restricted to only PU 0; new kind B contains only PU 1 and combines information from A and from the newly-registered kind; new kind C contains only PU 2 and only gets information from the newly-registered kind.</p>
278 <dl class="section note"><dt>Note</dt><dd>The efficiency <code>forced_efficiency</code> provided to this function may be different from the one reported later by <a class="el" href="a00219.html#gae1b38fbe9c645583fc16052ce6fbb275" title="Get the CPU set and infos about a CPU kind in the topology.">hwloc_cpukinds_get_info()</a> because hwloc will scale efficiency values down to between 0 and the number of kinds minus 1.</dd></dl>
279 <dl class="section return"><dt>Returns</dt><dd><code>0</code> on success. </dd>
280 <dd>
281 <code>-1</code> with <code>errno</code> set to <code>EINVAL</code> if some parameters are invalid, for instance if <code>cpuset</code> is <code>NULL</code> or empty. </dd></dl>
277 <code>-1</code> on error. </dd></dl>
282278
283279 </div>
284280 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Linux-specific helpers</title>
7 <title>Hardware Locality (hwloc): Remove distances between objects</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4141 <div class="summary">
4242 <a href="#func-members">Functions</a> </div>
4343 <div class="headertitle">
44 <div class="title">Linux-specific helpers</div> </div>
44 <div class="title">Remove distances between objects</div> </div>
4545 </div><!--header-->
4646 <div class="contents">
4747 <table class="memberdecls">
4848 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
4949 Functions</h2></td></tr>
50 <tr class="memitem:ga630e699c56b5f3d2e534b475944c216e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html#ga630e699c56b5f3d2e534b475944c216e">hwloc_linux_set_tid_cpubind</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, pid_t tid, <a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set)</td></tr>
51 <tr class="separator:ga630e699c56b5f3d2e534b475944c216e"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:gaddcb985cb56337a4d6693cee72e7bf94"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html#gaddcb985cb56337a4d6693cee72e7bf94">hwloc_linux_get_tid_cpubind</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, pid_t tid, <a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</td></tr>
53 <tr class="separator:gaddcb985cb56337a4d6693cee72e7bf94"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:gacc7945c2d06c6db1e58f8fd953009134"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html#gacc7945c2d06c6db1e58f8fd953009134">hwloc_linux_get_tid_last_cpu_location</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, pid_t tid, <a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set)</td></tr>
55 <tr class="separator:gacc7945c2d06c6db1e58f8fd953009134"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:gaf72d83e273803226ce772973e37b85de"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a> (const char *path, <a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set)</td></tr>
57 <tr class="separator:gaf72d83e273803226ce772973e37b85de"><td class="memSeparator" colspan="2">&#160;</td></tr>
50 <tr class="memitem:gac188d9b64d9560255ce5f6d0a20f9c0a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html#gac188d9b64d9560255ce5f6d0a20f9c0a">hwloc_distances_remove</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology)</td></tr>
51 <tr class="separator:gac188d9b64d9560255ce5f6d0a20f9c0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:gaa642a4c1a21c84f38ae23fca8a27845d"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html#gaa642a4c1a21c84f38ae23fca8a27845d">hwloc_distances_remove_by_depth</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int depth)</td></tr>
53 <tr class="separator:gaa642a4c1a21c84f38ae23fca8a27845d"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:ga93db53773c96f5b83815e8441e2ebb93"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html#ga93db53773c96f5b83815e8441e2ebb93">hwloc_distances_remove_by_type</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
55 <tr class="separator:ga93db53773c96f5b83815e8441e2ebb93"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:ga80bbf6f0db9af48c61780dd5152664c2"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00220.html#ga80bbf6f0db9af48c61780dd5152664c2">hwloc_distances_release_remove</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, struct <a class="el" href="a00322.html">hwloc_distances_s</a> *distances)</td></tr>
57 <tr class="separator:ga80bbf6f0db9af48c61780dd5152664c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
5858 </table>
5959 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
60 <p>This includes helpers for manipulating Linux kernel cpumap files, and hwloc equivalents of the Linux sched_setaffinity and sched_getaffinity system calls. </p>
6160 <h2 class="groupheader">Function Documentation</h2>
62 <a id="gaddcb985cb56337a4d6693cee72e7bf94"></a>
63 <h2 class="memtitle"><span class="permalink"><a href="#gaddcb985cb56337a4d6693cee72e7bf94">&#9670;&nbsp;</a></span>hwloc_linux_get_tid_cpubind()</h2>
61 <a id="ga80bbf6f0db9af48c61780dd5152664c2"></a>
62 <h2 class="memtitle"><span class="permalink"><a href="#ga80bbf6f0db9af48c61780dd5152664c2">&#9670;&nbsp;</a></span>hwloc_distances_release_remove()</h2>
6463
6564 <div class="memitem">
6665 <div class="memproto">
6766 <table class="memname">
6867 <tr>
69 <td class="memname">int hwloc_linux_get_tid_cpubind </td>
68 <td class="memname">int hwloc_distances_release_remove </td>
7069 <td>(</td>
71 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
70 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
7271 <td class="paramname"><em>topology</em>, </td>
7372 </tr>
7473 <tr>
7574 <td class="paramkey"></td>
7675 <td></td>
77 <td class="paramtype">pid_t&#160;</td>
78 <td class="paramname"><em>tid</em>, </td>
79 </tr>
80 <tr>
81 <td class="paramkey"></td>
82 <td></td>
83 <td class="paramtype"><a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
84 <td class="paramname"><em>set</em>&#160;</td>
76 <td class="paramtype">struct <a class="el" href="a00322.html">hwloc_distances_s</a> *&#160;</td>
77 <td class="paramname"><em>distances</em>&#160;</td>
8578 </tr>
8679 <tr>
8780 <td></td>
9184 </table>
9285 </div><div class="memdoc">
9386
94 <p>Get the current binding of thread <code>tid</code>. </p>
95 <p>The behavior is exactly the same as the Linux sched_getaffinity system call, but uses a hwloc cpuset.</p>
96 <dl class="section note"><dt>Note</dt><dd>This is equivalent to calling <a class="el" href="a00196.html#gac82de91f788fa82dacf99c6e0d4b7158" title="Get the current physical binding of process pid.">hwloc_get_proc_cpubind()</a> with <a class="el" href="a00196.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421" title="Bind current thread of current process.">HWLOC_CPUBIND_THREAD</a> as flags. </dd></dl>
87 <p>Release and remove the given distance matrice from the topology. </p>
88 <p>This function includes a call to <a class="el" href="a00217.html#ga1dd78c1f9acd54f26aba0e284e97e51d" title="Release a distance matrix structure previously returned by hwloc_distances_get().">hwloc_distances_release()</a>. </p>
9789
9890 </div>
9991 </div>
100 <a id="gacc7945c2d06c6db1e58f8fd953009134"></a>
101 <h2 class="memtitle"><span class="permalink"><a href="#gacc7945c2d06c6db1e58f8fd953009134">&#9670;&nbsp;</a></span>hwloc_linux_get_tid_last_cpu_location()</h2>
92 <a id="gac188d9b64d9560255ce5f6d0a20f9c0a"></a>
93 <h2 class="memtitle"><span class="permalink"><a href="#gac188d9b64d9560255ce5f6d0a20f9c0a">&#9670;&nbsp;</a></span>hwloc_distances_remove()</h2>
10294
10395 <div class="memitem">
10496 <div class="memproto">
10597 <table class="memname">
10698 <tr>
107 <td class="memname">int hwloc_linux_get_tid_last_cpu_location </td>
99 <td class="memname">int hwloc_distances_remove </td>
108100 <td>(</td>
109 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
101 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
102 <td class="paramname"><em>topology</em></td><td>)</td>
103 <td></td>
104 </tr>
105 </table>
106 </div><div class="memdoc">
107
108 <p>Remove all distance matrices from a topology. </p>
109 <p>Remove all distance matrices, either provided by the user or gathered through the OS.</p>
110 <p>If these distances were used to group objects, these additional Group objects are not removed from the topology. </p>
111
112 </div>
113 </div>
114 <a id="gaa642a4c1a21c84f38ae23fca8a27845d"></a>
115 <h2 class="memtitle"><span class="permalink"><a href="#gaa642a4c1a21c84f38ae23fca8a27845d">&#9670;&nbsp;</a></span>hwloc_distances_remove_by_depth()</h2>
116
117 <div class="memitem">
118 <div class="memproto">
119 <table class="memname">
120 <tr>
121 <td class="memname">int hwloc_distances_remove_by_depth </td>
122 <td>(</td>
123 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
110124 <td class="paramname"><em>topology</em>, </td>
111125 </tr>
112126 <tr>
113127 <td class="paramkey"></td>
114128 <td></td>
115 <td class="paramtype">pid_t&#160;</td>
116 <td class="paramname"><em>tid</em>, </td>
117 </tr>
118 <tr>
119 <td class="paramkey"></td>
120 <td></td>
121 <td class="paramtype"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
122 <td class="paramname"><em>set</em>&#160;</td>
129 <td class="paramtype">int&#160;</td>
130 <td class="paramname"><em>depth</em>&#160;</td>
123131 </tr>
124132 <tr>
125133 <td></td>
129137 </table>
130138 </div><div class="memdoc">
131139
132 <p>Get the last physical CPU where thread <code>tid</code> ran. </p>
133 <dl class="section note"><dt>Note</dt><dd>This is equivalent to calling <a class="el" href="a00196.html#ga910a05c2d47f68a3155bf176b50fa555" title="Get the last physical CPU where a process ran.">hwloc_get_proc_last_cpu_location()</a> with <a class="el" href="a00196.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421" title="Bind current thread of current process.">HWLOC_CPUBIND_THREAD</a> as flags. </dd></dl>
140 <p>Remove distance matrices for objects at a specific depth in the topology. </p>
141 <p>Identical to <a class="el" href="a00220.html#gac188d9b64d9560255ce5f6d0a20f9c0a" title="Remove all distance matrices from a topology.">hwloc_distances_remove()</a> but only applies to one level of the topology. </p>
134142
135143 </div>
136144 </div>
137 <a id="gaf72d83e273803226ce772973e37b85de"></a>
138 <h2 class="memtitle"><span class="permalink"><a href="#gaf72d83e273803226ce772973e37b85de">&#9670;&nbsp;</a></span>hwloc_linux_read_path_as_cpumask()</h2>
145 <a id="ga93db53773c96f5b83815e8441e2ebb93"></a>
146 <h2 class="memtitle"><span class="permalink"><a href="#ga93db53773c96f5b83815e8441e2ebb93">&#9670;&nbsp;</a></span>hwloc_distances_remove_by_type()</h2>
139147
140148 <div class="memitem">
141149 <div class="memproto">
150 <table class="mlabels">
151 <tr>
152 <td class="mlabels-left">
142153 <table class="memname">
143154 <tr>
144 <td class="memname">int hwloc_linux_read_path_as_cpumask </td>
155 <td class="memname">static int hwloc_distances_remove_by_type </td>
145156 <td>(</td>
146 <td class="paramtype">const char *&#160;</td>
147 <td class="paramname"><em>path</em>, </td>
157 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
158 <td class="paramname"><em>topology</em>, </td>
148159 </tr>
149160 <tr>
150161 <td class="paramkey"></td>
151162 <td></td>
152 <td class="paramtype"><a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
153 <td class="paramname"><em>set</em>&#160;</td>
163 <td class="paramtype"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
164 <td class="paramname"><em>type</em>&#160;</td>
154165 </tr>
155166 <tr>
156167 <td></td>
158169 <td></td><td></td>
159170 </tr>
160171 </table>
172 </td>
173 <td class="mlabels-right">
174 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
175 </tr>
176 </table>
161177 </div><div class="memdoc">
162178
163 <p>Convert a linux kernel cpumask file <code>path</code> into a hwloc bitmap <code>set</code>. </p>
164 <p>Might be used when reading CPU set from sysfs attributes such as topology and caches for processors, or local_cpus for devices.</p>
165 <dl class="section note"><dt>Note</dt><dd>This function ignores the HWLOC_FSROOT environment variable. </dd></dl>
166
167 </div>
168 </div>
169 <a id="ga630e699c56b5f3d2e534b475944c216e"></a>
170 <h2 class="memtitle"><span class="permalink"><a href="#ga630e699c56b5f3d2e534b475944c216e">&#9670;&nbsp;</a></span>hwloc_linux_set_tid_cpubind()</h2>
171
172 <div class="memitem">
173 <div class="memproto">
174 <table class="memname">
175 <tr>
176 <td class="memname">int hwloc_linux_set_tid_cpubind </td>
177 <td>(</td>
178 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
179 <td class="paramname"><em>topology</em>, </td>
180 </tr>
181 <tr>
182 <td class="paramkey"></td>
183 <td></td>
184 <td class="paramtype">pid_t&#160;</td>
185 <td class="paramname"><em>tid</em>, </td>
186 </tr>
187 <tr>
188 <td class="paramkey"></td>
189 <td></td>
190 <td class="paramtype"><a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
191 <td class="paramname"><em>set</em>&#160;</td>
192 </tr>
193 <tr>
194 <td></td>
195 <td>)</td>
196 <td></td><td></td>
197 </tr>
198 </table>
199 </div><div class="memdoc">
200
201 <p>Bind a thread <code>tid</code> on cpus given in cpuset <code>set</code>. </p>
202 <p>The behavior is exactly the same as the Linux sched_setaffinity system call, but uses a hwloc cpuset.</p>
203 <dl class="section note"><dt>Note</dt><dd>This is equivalent to calling <a class="el" href="a00196.html#ga296db8a3c6d49b51fb83d6f3e45c02a6" title="Bind a process pid on cpus given in physical bitmap set.">hwloc_set_proc_cpubind()</a> with HWLOC_CPUBIND_THREAD as flags. </dd></dl>
179 <p>Remove distance matrices for objects of a specific type in the topology. </p>
180 <p>Identical to <a class="el" href="a00220.html#gac188d9b64d9560255ce5f6d0a20f9c0a" title="Remove all distance matrices from a topology.">hwloc_distances_remove()</a> but only applies to one level of the topology. </p>
204181
205182 </div>
206183 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Interoperability with Linux libnuma unsigned long masks</title>
7 <title>Hardware Locality (hwloc): Comparing memory node attributes for finding where to allocate on</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="header">
4141 <div class="summary">
42 <a href="#nested-classes">Data Structures</a> &#124;
43 <a href="#typedef-members">Typedefs</a> &#124;
44 <a href="#enum-members">Enumerations</a> &#124;
4245 <a href="#func-members">Functions</a> </div>
4346 <div class="headertitle">
44 <div class="title">Interoperability with Linux libnuma unsigned long masks</div> </div>
47 <div class="title">Comparing memory node attributes for finding where to allocate on</div> </div>
4548 </div><!--header-->
4649 <div class="contents">
4750 <table class="memberdecls">
51 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
52 Data Structures</h2></td></tr>
53 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00326.html">hwloc_location</a></td></tr>
54 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
55 </table><table class="memberdecls">
56 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
57 Typedefs</h2></td></tr>
58 <tr class="memitem:gacc82003a8610be554615995f0996c888"><td class="memItemLeft" align="right" valign="top">typedef unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00221.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a></td></tr>
59 <tr class="separator:gacc82003a8610be554615995f0996c888"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 </table><table class="memberdecls">
61 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
62 Enumerations</h2></td></tr>
63 <tr class="memitem:gab4bde745db676fc2ea4b47011cd9a80e"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00221.html#gab4bde745db676fc2ea4b47011cd9a80e">hwloc_memattr_id_e</a> { <a class="el" href="a00221.html#ggab4bde745db676fc2ea4b47011cd9a80eaa1cfa3ff3d56ff00ecabf7da4f5642cc">HWLOC_MEMATTR_ID_CAPACITY</a> = 0
64 , <a class="el" href="a00221.html#ggab4bde745db676fc2ea4b47011cd9a80ea9334e3a4c30a67f491c6523255134efe">HWLOC_MEMATTR_ID_LOCALITY</a> = 1
65 , <a class="el" href="a00221.html#ggab4bde745db676fc2ea4b47011cd9a80ea25fe3c7376ae6f9b584bacdb039f8c0f">HWLOC_MEMATTR_ID_BANDWIDTH</a> = 2
66 , <a class="el" href="a00221.html#ggab4bde745db676fc2ea4b47011cd9a80ead1796413759b8b87b61ad195a9349b19">HWLOC_MEMATTR_ID_LATENCY</a> = 3
67 }</td></tr>
68 <tr class="separator:gab4bde745db676fc2ea4b47011cd9a80e"><td class="memSeparator" colspan="2">&#160;</td></tr>
69 <tr class="memitem:ga33099ba58f607fc70925da3777688586"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00221.html#ga33099ba58f607fc70925da3777688586">hwloc_location_type_e</a> { <a class="el" href="a00221.html#gga33099ba58f607fc70925da3777688586a7135318a86361ad75fd1648e6bf6d174">HWLOC_LOCATION_TYPE_CPUSET</a>
70 , <a class="el" href="a00221.html#gga33099ba58f607fc70925da3777688586af637c39b23d48cff15ddb008644aaa84">HWLOC_LOCATION_TYPE_OBJECT</a>
71 }</td></tr>
72 <tr class="separator:ga33099ba58f607fc70925da3777688586"><td class="memSeparator" colspan="2">&#160;</td></tr>
73 <tr class="memitem:gab9c963ca37255da71b00d94e1b106f9d"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00221.html#gab9c963ca37255da71b00d94e1b106f9d">hwloc_local_numanode_flag_e</a> { <a class="el" href="a00221.html#ggab9c963ca37255da71b00d94e1b106f9da200c6c133bb2125ba36d77ce9ca268cc">HWLOC_LOCAL_NUMANODE_FLAG_LARGER_LOCALITY</a>
74 , <a class="el" href="a00221.html#ggab9c963ca37255da71b00d94e1b106f9daac9c5e3a2cfb1b193e4acfceaf3bad57">HWLOC_LOCAL_NUMANODE_FLAG_SMALLER_LOCALITY</a>
75 , <a class="el" href="a00221.html#ggab9c963ca37255da71b00d94e1b106f9dab5778b34c961a5d56f98f1549edeaed0">HWLOC_LOCAL_NUMANODE_FLAG_ALL</a>
76 }</td></tr>
77 <tr class="separator:gab9c963ca37255da71b00d94e1b106f9d"><td class="memSeparator" colspan="2">&#160;</td></tr>
78 </table><table class="memberdecls">
4879 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
4980 Functions</h2></td></tr>
50 <tr class="memitem:gae577962390f84b0b12f503314ab0f972"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00221.html#gae577962390f84b0b12f503314ab0f972">hwloc_cpuset_to_linux_libnuma_ulongs</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> cpuset, unsigned long *mask, unsigned long *maxnode)</td></tr>
51 <tr class="separator:gae577962390f84b0b12f503314ab0f972"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:ga585ccf818d2f217f4e53f9c6506c3128"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00221.html#ga585ccf818d2f217f4e53f9c6506c3128">hwloc_nodeset_to_linux_libnuma_ulongs</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00189.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> nodeset, unsigned long *mask, unsigned long *maxnode)</td></tr>
53 <tr class="separator:ga585ccf818d2f217f4e53f9c6506c3128"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:ga0e9d051e068940f722f6fdc61814149d"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00221.html#ga0e9d051e068940f722f6fdc61814149d">hwloc_cpuset_from_linux_libnuma_ulongs</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> cpuset, const unsigned long *mask, unsigned long maxnode)</td></tr>
55 <tr class="separator:ga0e9d051e068940f722f6fdc61814149d"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:gad8491c672eb2594cc5e7b0a026867192"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00221.html#gad8491c672eb2594cc5e7b0a026867192">hwloc_nodeset_from_linux_libnuma_ulongs</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00189.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a> nodeset, const unsigned long *mask, unsigned long maxnode)</td></tr>
57 <tr class="separator:gad8491c672eb2594cc5e7b0a026867192"><td class="memSeparator" colspan="2">&#160;</td></tr>
81 <tr class="memitem:ga79f44f8e1cfd2f97a19171417a75a137"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00221.html#ga79f44f8e1cfd2f97a19171417a75a137">hwloc_memattr_get_by_name</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const char *name, <a class="el" href="a00221.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> *id)</td></tr>
82 <tr class="separator:ga79f44f8e1cfd2f97a19171417a75a137"><td class="memSeparator" colspan="2">&#160;</td></tr>
83 <tr class="memitem:ga569e80c5be7ef27649b0ef5aa52ffcdc"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00221.html#ga569e80c5be7ef27649b0ef5aa52ffcdc">hwloc_get_local_numanode_objs</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, struct <a class="el" href="a00326.html">hwloc_location</a> *location, unsigned *nr, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *nodes, unsigned long flags)</td></tr>
84 <tr class="separator:ga569e80c5be7ef27649b0ef5aa52ffcdc"><td class="memSeparator" colspan="2">&#160;</td></tr>
85 <tr class="memitem:ga297e4a9adc2272446a4c7449dacef0df"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00221.html#ga297e4a9adc2272446a4c7449dacef0df">hwloc_memattr_get_value</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00221.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> target_node, struct <a class="el" href="a00326.html">hwloc_location</a> *initiator, unsigned long flags, hwloc_uint64_t *value)</td></tr>
86 <tr class="separator:ga297e4a9adc2272446a4c7449dacef0df"><td class="memSeparator" colspan="2">&#160;</td></tr>
87 <tr class="memitem:ga884d1f2ad745c2fa69c1583c82d28f10"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00221.html#ga884d1f2ad745c2fa69c1583c82d28f10">hwloc_memattr_get_best_target</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00221.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute, struct <a class="el" href="a00326.html">hwloc_location</a> *initiator, unsigned long flags, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *best_target, hwloc_uint64_t *value)</td></tr>
88 <tr class="separator:ga884d1f2ad745c2fa69c1583c82d28f10"><td class="memSeparator" colspan="2">&#160;</td></tr>
89 <tr class="memitem:ga9a453879892893cf8a3fcd431ade84cd"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00221.html#ga9a453879892893cf8a3fcd431ade84cd">hwloc_memattr_get_best_initiator</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00221.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> target, unsigned long flags, struct <a class="el" href="a00326.html">hwloc_location</a> *best_initiator, hwloc_uint64_t *value)</td></tr>
90 <tr class="separator:ga9a453879892893cf8a3fcd431ade84cd"><td class="memSeparator" colspan="2">&#160;</td></tr>
5891 </table>
5992 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
60 <p>This interface helps converting between Linux libnuma unsigned long masks and hwloc cpusets and nodesets.</p>
61 <dl class="section note"><dt>Note</dt><dd>Topology <code>topology</code> must match the current machine.</dd>
93 <p>Platforms with heterogeneous memory require ways to decide whether a buffer should be allocated on "fast" memory (such as HBM), "normal" memory (DDR) or even "slow" but large-capacity memory (non-volatile memory). These memory nodes are called "Targets" while the CPU accessing them is called the "Initiator". Access performance depends on their locality (NUMA platforms) as well as the intrinsic performance of the targets (heterogeneous platforms).</p>
94 <p>The following attributes describe the performance of memory accesses from an Initiator to a memory Target, for instance their latency or bandwidth. Initiators performing these memory accesses are usually some PUs or Cores (described as a CPU set). Hence a Core may choose where to allocate a memory buffer by comparing the attributes of different target memory nodes nearby.</p>
95 <p>There are also some attributes that are system-wide. Their value does not depend on a specific initiator performing an access. The memory node Capacity is an example of such attribute without initiator.</p>
96 <p>One way to use this API is to start with a cpuset describing the Cores where a program is bound. The best target NUMA node for allocating memory in this program on these Cores may be obtained by passing this cpuset as an initiator to <a class="el" href="a00221.html#ga884d1f2ad745c2fa69c1583c82d28f10" title="Return the best target NUMA node for the given attribute and initiator.">hwloc_memattr_get_best_target()</a> with the relevant memory attribute. For instance, if the code is latency limited, use the Latency attribute.</p>
97 <p>A more flexible approach consists in getting the list of local NUMA nodes by passing this cpuset to <a class="el" href="a00221.html#ga569e80c5be7ef27649b0ef5aa52ffcdc" title="Return an array of local NUMA nodes.">hwloc_get_local_numanode_objs()</a>. Attribute values for these nodes, if any, may then be obtained with <a class="el" href="a00221.html#ga297e4a9adc2272446a4c7449dacef0df" title="Return an attribute value for a specific target NUMA node.">hwloc_memattr_get_value()</a> and manually compared with the desired criteria.</p>
98 <dl class="section note"><dt>Note</dt><dd>The API also supports specific objects as initiator, but it is currently not used internally by hwloc. Users may for instance use it to provide custom performance values for host memory accesses performed by GPUs.</dd>
6299 <dd>
63 The behavior of libnuma is undefined if the kernel is not NUMA-aware. (when CONFIG_NUMA is not set in the kernel configuration). This helper and libnuma may thus not be strictly compatible in this case, which may be detected by checking whether numa_available() returns -1. </dd></dl>
100 The interface actually also accepts targets that are not NUMA nodes. </dd></dl>
101 <h2 class="groupheader">Typedef Documentation</h2>
102 <a id="gacc82003a8610be554615995f0996c888"></a>
103 <h2 class="memtitle"><span class="permalink"><a href="#gacc82003a8610be554615995f0996c888">&#9670;&nbsp;</a></span>hwloc_memattr_id_t</h2>
104
105 <div class="memitem">
106 <div class="memproto">
107 <table class="memname">
108 <tr>
109 <td class="memname">typedef unsigned <a class="el" href="a00221.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a></td>
110 </tr>
111 </table>
112 </div><div class="memdoc">
113
114 <p>A memory attribute identifier. May be either one of <a class="el" href="a00221.html#gab4bde745db676fc2ea4b47011cd9a80e" title="Memory node attributes.">hwloc_memattr_id_e</a> or a new id returned by <a class="el" href="a00222.html#ga770657d1e44b09e93e09f623936c1e5f" title="Register a new memory attribute.">hwloc_memattr_register()</a>. </p>
115
116 </div>
117 </div>
118 <h2 class="groupheader">Enumeration Type Documentation</h2>
119 <a id="gab9c963ca37255da71b00d94e1b106f9d"></a>
120 <h2 class="memtitle"><span class="permalink"><a href="#gab9c963ca37255da71b00d94e1b106f9d">&#9670;&nbsp;</a></span>hwloc_local_numanode_flag_e</h2>
121
122 <div class="memitem">
123 <div class="memproto">
124 <table class="memname">
125 <tr>
126 <td class="memname">enum <a class="el" href="a00221.html#gab9c963ca37255da71b00d94e1b106f9d">hwloc_local_numanode_flag_e</a></td>
127 </tr>
128 </table>
129 </div><div class="memdoc">
130
131 <p>Flags for selecting target NUMA nodes. </p>
132 <table class="fieldtable">
133 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggab9c963ca37255da71b00d94e1b106f9da200c6c133bb2125ba36d77ce9ca268cc"></a>HWLOC_LOCAL_NUMANODE_FLAG_LARGER_LOCALITY&#160;</td><td class="fielddoc"><p>Select NUMA nodes whose locality is larger than the given cpuset. For instance, if a single PU (or its cpuset) is given in <code>initiator</code>, select all nodes close to the package that contains this PU. </p>
134 </td></tr>
135 <tr><td class="fieldname"><a id="ggab9c963ca37255da71b00d94e1b106f9daac9c5e3a2cfb1b193e4acfceaf3bad57"></a>HWLOC_LOCAL_NUMANODE_FLAG_SMALLER_LOCALITY&#160;</td><td class="fielddoc"><p>Select NUMA nodes whose locality is smaller than the given cpuset. For instance, if a package (or its cpuset) is given in <code>initiator</code>, also select nodes that are attached to only a half of that package. </p>
136 </td></tr>
137 <tr><td class="fieldname"><a id="ggab9c963ca37255da71b00d94e1b106f9dab5778b34c961a5d56f98f1549edeaed0"></a>HWLOC_LOCAL_NUMANODE_FLAG_ALL&#160;</td><td class="fielddoc"><p>Select all NUMA nodes in the topology. The initiator <code>initiator</code> is ignored. </p>
138 </td></tr>
139 </table>
140
141 </div>
142 </div>
143 <a id="ga33099ba58f607fc70925da3777688586"></a>
144 <h2 class="memtitle"><span class="permalink"><a href="#ga33099ba58f607fc70925da3777688586">&#9670;&nbsp;</a></span>hwloc_location_type_e</h2>
145
146 <div class="memitem">
147 <div class="memproto">
148 <table class="memname">
149 <tr>
150 <td class="memname">enum <a class="el" href="a00221.html#ga33099ba58f607fc70925da3777688586">hwloc_location_type_e</a></td>
151 </tr>
152 </table>
153 </div><div class="memdoc">
154
155 <p>Type of location. </p>
156 <table class="fieldtable">
157 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga33099ba58f607fc70925da3777688586a7135318a86361ad75fd1648e6bf6d174"></a>HWLOC_LOCATION_TYPE_CPUSET&#160;</td><td class="fielddoc"><p>Location is given as a cpuset, in the location cpuset union field. </p>
158 </td></tr>
159 <tr><td class="fieldname"><a id="gga33099ba58f607fc70925da3777688586af637c39b23d48cff15ddb008644aaa84"></a>HWLOC_LOCATION_TYPE_OBJECT&#160;</td><td class="fielddoc"><p>Location is given as an object, in the location object union field. </p>
160 </td></tr>
161 </table>
162
163 </div>
164 </div>
165 <a id="gab4bde745db676fc2ea4b47011cd9a80e"></a>
166 <h2 class="memtitle"><span class="permalink"><a href="#gab4bde745db676fc2ea4b47011cd9a80e">&#9670;&nbsp;</a></span>hwloc_memattr_id_e</h2>
167
168 <div class="memitem">
169 <div class="memproto">
170 <table class="memname">
171 <tr>
172 <td class="memname">enum <a class="el" href="a00221.html#gab4bde745db676fc2ea4b47011cd9a80e">hwloc_memattr_id_e</a></td>
173 </tr>
174 </table>
175 </div><div class="memdoc">
176
177 <p>Memory node attributes. </p>
178 <table class="fieldtable">
179 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggab4bde745db676fc2ea4b47011cd9a80eaa1cfa3ff3d56ff00ecabf7da4f5642cc"></a>HWLOC_MEMATTR_ID_CAPACITY&#160;</td><td class="fielddoc"><p>"Capacity". The capacity is returned in bytes (local_memory attribute in objects). </p>
180 <p>Best capacity nodes are nodes with <b>higher capacity</b>.</p>
181 <p>No initiator is involved when looking at this attribute. The corresponding attribute flags are <a class="el" href="a00222.html#gga78aceb4cac4d614c0f5e82dbfeb779e5af29e65444a6ed00f5cc246df06f65815" title="The best nodes for this memory attribute are those with the higher values. For instance Bandwidth.">HWLOC_MEMATTR_FLAG_HIGHER_FIRST</a>. </p>
182 </td></tr>
183 <tr><td class="fieldname"><a id="ggab4bde745db676fc2ea4b47011cd9a80ea9334e3a4c30a67f491c6523255134efe"></a>HWLOC_MEMATTR_ID_LOCALITY&#160;</td><td class="fielddoc"><p>"Locality". The locality is returned as the number of PUs in that locality (e.g. the weight of its cpuset). </p>
184 <p>Best locality nodes are nodes with <b>smaller locality</b> (nodes that are local to very few PUs). Poor locality nodes are nodes with larger locality (nodes that are local to the entire machine).</p>
185 <p>No initiator is involved when looking at this attribute. The corresponding attribute flags are <a class="el" href="a00222.html#gga78aceb4cac4d614c0f5e82dbfeb779e5af29e65444a6ed00f5cc246df06f65815" title="The best nodes for this memory attribute are those with the higher values. For instance Bandwidth.">HWLOC_MEMATTR_FLAG_HIGHER_FIRST</a>. </p>
186 </td></tr>
187 <tr><td class="fieldname"><a id="ggab4bde745db676fc2ea4b47011cd9a80ea25fe3c7376ae6f9b584bacdb039f8c0f"></a>HWLOC_MEMATTR_ID_BANDWIDTH&#160;</td><td class="fielddoc"><p>"Bandwidth". The bandwidth is returned in MiB/s, as seen from the given initiator location. Best bandwidth nodes are nodes with <b>higher bandwidth</b>. The corresponding attribute flags are <a class="el" href="a00222.html#gga78aceb4cac4d614c0f5e82dbfeb779e5af29e65444a6ed00f5cc246df06f65815" title="The best nodes for this memory attribute are those with the higher values. For instance Bandwidth.">HWLOC_MEMATTR_FLAG_HIGHER_FIRST</a> and <a class="el" href="a00222.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96" title="The value returned for this memory attribute depends on the given initiator. For instance Bandwidth a...">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a>. </p>
188 </td></tr>
189 <tr><td class="fieldname"><a id="ggab4bde745db676fc2ea4b47011cd9a80ead1796413759b8b87b61ad195a9349b19"></a>HWLOC_MEMATTR_ID_LATENCY&#160;</td><td class="fielddoc"><p>"Latency". The latency is returned as nanoseconds, as seen from the given initiator location. Best latency nodes are nodes with <b>smaller latency</b>. The corresponding attribute flags are <a class="el" href="a00222.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9601b5b0e1e68635e7e9901f28bd93bf" title="The best nodes for this memory attribute are those with the lower values. For instance Latency.">HWLOC_MEMATTR_FLAG_LOWER_FIRST</a> and <a class="el" href="a00222.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96" title="The value returned for this memory attribute depends on the given initiator. For instance Bandwidth a...">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a>. </p>
190 </td></tr>
191 </table>
192
193 </div>
194 </div>
64195 <h2 class="groupheader">Function Documentation</h2>
65 <a id="ga0e9d051e068940f722f6fdc61814149d"></a>
66 <h2 class="memtitle"><span class="permalink"><a href="#ga0e9d051e068940f722f6fdc61814149d">&#9670;&nbsp;</a></span>hwloc_cpuset_from_linux_libnuma_ulongs()</h2>
67
68 <div class="memitem">
69 <div class="memproto">
70 <table class="mlabels">
71 <tr>
72 <td class="mlabels-left">
73 <table class="memname">
74 <tr>
75 <td class="memname">static int hwloc_cpuset_from_linux_libnuma_ulongs </td>
196 <a id="ga569e80c5be7ef27649b0ef5aa52ffcdc"></a>
197 <h2 class="memtitle"><span class="permalink"><a href="#ga569e80c5be7ef27649b0ef5aa52ffcdc">&#9670;&nbsp;</a></span>hwloc_get_local_numanode_objs()</h2>
198
199 <div class="memitem">
200 <div class="memproto">
201 <table class="memname">
202 <tr>
203 <td class="memname">int hwloc_get_local_numanode_objs </td>
76204 <td>(</td>
77 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
205 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
78206 <td class="paramname"><em>topology</em>, </td>
79207 </tr>
80208 <tr>
81209 <td class="paramkey"></td>
82210 <td></td>
83 <td class="paramtype"><a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
84 <td class="paramname"><em>cpuset</em>, </td>
85 </tr>
86 <tr>
87 <td class="paramkey"></td>
88 <td></td>
89 <td class="paramtype">const unsigned long *&#160;</td>
90 <td class="paramname"><em>mask</em>, </td>
211 <td class="paramtype">struct <a class="el" href="a00326.html">hwloc_location</a> *&#160;</td>
212 <td class="paramname"><em>location</em>, </td>
213 </tr>
214 <tr>
215 <td class="paramkey"></td>
216 <td></td>
217 <td class="paramtype">unsigned *&#160;</td>
218 <td class="paramname"><em>nr</em>, </td>
219 </tr>
220 <tr>
221 <td class="paramkey"></td>
222 <td></td>
223 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *&#160;</td>
224 <td class="paramname"><em>nodes</em>, </td>
91225 </tr>
92226 <tr>
93227 <td class="paramkey"></td>
94228 <td></td>
95229 <td class="paramtype">unsigned long&#160;</td>
96 <td class="paramname"><em>maxnode</em>&#160;</td>
230 <td class="paramname"><em>flags</em>&#160;</td>
97231 </tr>
98232 <tr>
99233 <td></td>
101235 <td></td><td></td>
102236 </tr>
103237 </table>
104 </td>
105 <td class="mlabels-right">
106 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
107 </tr>
108 </table>
109 </div><div class="memdoc">
110
111 <p>Convert the array of unsigned long <code>mask</code> into hwloc CPU set. </p>
112 <p><code>mask</code> is a array of unsigned long that will be read. <code>maxnode</code> contains the maximal node number that may be read in <code>mask</code>.</p>
113 <p>This function may be used after calling get_mempolicy or any other function that takes an array of unsigned long as output parameter (and possibly a maximal node number as input parameter). </p>
114
115 </div>
116 </div>
117 <a id="gae577962390f84b0b12f503314ab0f972"></a>
118 <h2 class="memtitle"><span class="permalink"><a href="#gae577962390f84b0b12f503314ab0f972">&#9670;&nbsp;</a></span>hwloc_cpuset_to_linux_libnuma_ulongs()</h2>
119
120 <div class="memitem">
121 <div class="memproto">
122 <table class="mlabels">
123 <tr>
124 <td class="mlabels-left">
125 <table class="memname">
126 <tr>
127 <td class="memname">static int hwloc_cpuset_to_linux_libnuma_ulongs </td>
238 </div><div class="memdoc">
239
240 <p>Return an array of local NUMA nodes. </p>
241 <p>By default only select the NUMA nodes whose locality is exactly the given <code>location</code>. More nodes may be selected if additional flags are given as a OR'ed set of <a class="el" href="a00221.html#gab9c963ca37255da71b00d94e1b106f9d" title="Flags for selecting target NUMA nodes.">hwloc_local_numanode_flag_e</a>.</p>
242 <p>If <code>location</code> is given as an explicit object, its CPU set is used to find NUMA nodes with the corresponding locality. If the object does not have a CPU set (e.g. I/O object), the CPU parent (where the I/O object is attached) is used.</p>
243 <p>On input, <code>nr</code> points to the number of nodes that may be stored in the <code>nodes</code> array. On output, <code>nr</code> will be changed to the number of stored nodes, or the number of nodes that would have been stored if there were enough room.</p>
244 <dl class="section note"><dt>Note</dt><dd>Some of these NUMA nodes may not have any memory attribute values and hence not be reported as actual targets in other functions.</dd>
245 <dd>
246 The number of NUMA nodes in the topology (obtained by <a class="el" href="a00214.html#ga0200466842c0e1f5da75e84dde460b10" title="Compute the &quot;weight&quot; of bitmap bitmap (i.e., number of indexes that are in the bitmap).">hwloc_bitmap_weight()</a> on the root object nodeset) may be used to allocate the <code>nodes</code> array.</dd>
247 <dd>
248 When an object CPU set is given as locality, for instance a Package, and when flags contain both <a class="el" href="a00221.html#ggab9c963ca37255da71b00d94e1b106f9da200c6c133bb2125ba36d77ce9ca268cc" title="Select NUMA nodes whose locality is larger than the given cpuset. For instance, if a single PU (or it...">HWLOC_LOCAL_NUMANODE_FLAG_LARGER_LOCALITY</a> and <a class="el" href="a00221.html#ggab9c963ca37255da71b00d94e1b106f9daac9c5e3a2cfb1b193e4acfceaf3bad57" title="Select NUMA nodes whose locality is smaller than the given cpuset. For instance, if a package (or its...">HWLOC_LOCAL_NUMANODE_FLAG_SMALLER_LOCALITY</a>, the returned array corresponds to the nodeset of that object. </dd></dl>
249
250 </div>
251 </div>
252 <a id="ga9a453879892893cf8a3fcd431ade84cd"></a>
253 <h2 class="memtitle"><span class="permalink"><a href="#ga9a453879892893cf8a3fcd431ade84cd">&#9670;&nbsp;</a></span>hwloc_memattr_get_best_initiator()</h2>
254
255 <div class="memitem">
256 <div class="memproto">
257 <table class="memname">
258 <tr>
259 <td class="memname">int hwloc_memattr_get_best_initiator </td>
128260 <td>(</td>
129 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
261 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
130262 <td class="paramname"><em>topology</em>, </td>
131263 </tr>
132264 <tr>
133265 <td class="paramkey"></td>
134266 <td></td>
135 <td class="paramtype"><a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
136 <td class="paramname"><em>cpuset</em>, </td>
137 </tr>
138 <tr>
139 <td class="paramkey"></td>
140 <td></td>
141 <td class="paramtype">unsigned long *&#160;</td>
142 <td class="paramname"><em>mask</em>, </td>
143 </tr>
144 <tr>
145 <td class="paramkey"></td>
146 <td></td>
147 <td class="paramtype">unsigned long *&#160;</td>
148 <td class="paramname"><em>maxnode</em>&#160;</td>
267 <td class="paramtype"><a class="el" href="a00221.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a>&#160;</td>
268 <td class="paramname"><em>attribute</em>, </td>
269 </tr>
270 <tr>
271 <td class="paramkey"></td>
272 <td></td>
273 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
274 <td class="paramname"><em>target</em>, </td>
275 </tr>
276 <tr>
277 <td class="paramkey"></td>
278 <td></td>
279 <td class="paramtype">unsigned long&#160;</td>
280 <td class="paramname"><em>flags</em>, </td>
281 </tr>
282 <tr>
283 <td class="paramkey"></td>
284 <td></td>
285 <td class="paramtype">struct <a class="el" href="a00326.html">hwloc_location</a> *&#160;</td>
286 <td class="paramname"><em>best_initiator</em>, </td>
287 </tr>
288 <tr>
289 <td class="paramkey"></td>
290 <td></td>
291 <td class="paramtype">hwloc_uint64_t *&#160;</td>
292 <td class="paramname"><em>value</em>&#160;</td>
149293 </tr>
150294 <tr>
151295 <td></td>
153297 <td></td><td></td>
154298 </tr>
155299 </table>
156 </td>
157 <td class="mlabels-right">
158 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
159 </tr>
160 </table>
161 </div><div class="memdoc">
162
163 <p>Convert hwloc CPU set <code>cpuset</code> into the array of unsigned long <code>mask</code>. </p>
164 <p><code>mask</code> is the array of unsigned long that will be filled. <code>maxnode</code> contains the maximal node number that may be stored in <code>mask</code>. <code>maxnode</code> will be set to the maximal node number that was found, plus one.</p>
165 <p>This function may be used before calling set_mempolicy, mbind, migrate_pages or any other function that takes an array of unsigned long and a maximal node number as input parameter. </p>
166
167 </div>
168 </div>
169 <a id="gad8491c672eb2594cc5e7b0a026867192"></a>
170 <h2 class="memtitle"><span class="permalink"><a href="#gad8491c672eb2594cc5e7b0a026867192">&#9670;&nbsp;</a></span>hwloc_nodeset_from_linux_libnuma_ulongs()</h2>
171
172 <div class="memitem">
173 <div class="memproto">
174 <table class="mlabels">
175 <tr>
176 <td class="mlabels-left">
177 <table class="memname">
178 <tr>
179 <td class="memname">static int hwloc_nodeset_from_linux_libnuma_ulongs </td>
300 </div><div class="memdoc">
301
302 <p>Return the best initiator for the given attribute and target NUMA node. </p>
303 <p>If the attribute does not relate to a specific initiator (it does not have the flag <a class="el" href="a00222.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96" title="The value returned for this memory attribute depends on the given initiator. For instance Bandwidth a...">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a>), <code>-1</code> is returned and <code>errno</code> is set to <code>EINVAL</code>.</p>
304 <p>If <code>value</code> is non <code>NULL</code>, the corresponding value is returned there.</p>
305 <p>If multiple initiators have the same attribute values, only one is returned (and there is no way to clarify how that one is chosen). Applications that want to detect initiators with identical/similar values, or that want to look at values for multiple attributes, should rather get all values using <a class="el" href="a00221.html#ga297e4a9adc2272446a4c7449dacef0df" title="Return an attribute value for a specific target NUMA node.">hwloc_memattr_get_value()</a> and manually select the initiator they consider the best.</p>
306 <p>The returned initiator should not be modified or freed, it belongs to the topology.</p>
307 <p><code>flags</code> must be <code>0</code> for now.</p>
308 <p>If there are no matching initiators, <code>-1</code> is returned with <code>errno</code> set to <code>ENOENT</code>; </p>
309
310 </div>
311 </div>
312 <a id="ga884d1f2ad745c2fa69c1583c82d28f10"></a>
313 <h2 class="memtitle"><span class="permalink"><a href="#ga884d1f2ad745c2fa69c1583c82d28f10">&#9670;&nbsp;</a></span>hwloc_memattr_get_best_target()</h2>
314
315 <div class="memitem">
316 <div class="memproto">
317 <table class="memname">
318 <tr>
319 <td class="memname">int hwloc_memattr_get_best_target </td>
180320 <td>(</td>
181 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
321 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
182322 <td class="paramname"><em>topology</em>, </td>
183323 </tr>
184324 <tr>
185325 <td class="paramkey"></td>
186326 <td></td>
187 <td class="paramtype"><a class="el" href="a00189.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a>&#160;</td>
188 <td class="paramname"><em>nodeset</em>, </td>
189 </tr>
190 <tr>
191 <td class="paramkey"></td>
192 <td></td>
193 <td class="paramtype">const unsigned long *&#160;</td>
194 <td class="paramname"><em>mask</em>, </td>
327 <td class="paramtype"><a class="el" href="a00221.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a>&#160;</td>
328 <td class="paramname"><em>attribute</em>, </td>
329 </tr>
330 <tr>
331 <td class="paramkey"></td>
332 <td></td>
333 <td class="paramtype">struct <a class="el" href="a00326.html">hwloc_location</a> *&#160;</td>
334 <td class="paramname"><em>initiator</em>, </td>
195335 </tr>
196336 <tr>
197337 <td class="paramkey"></td>
198338 <td></td>
199339 <td class="paramtype">unsigned long&#160;</td>
200 <td class="paramname"><em>maxnode</em>&#160;</td>
340 <td class="paramname"><em>flags</em>, </td>
341 </tr>
342 <tr>
343 <td class="paramkey"></td>
344 <td></td>
345 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *&#160;</td>
346 <td class="paramname"><em>best_target</em>, </td>
347 </tr>
348 <tr>
349 <td class="paramkey"></td>
350 <td></td>
351 <td class="paramtype">hwloc_uint64_t *&#160;</td>
352 <td class="paramname"><em>value</em>&#160;</td>
201353 </tr>
202354 <tr>
203355 <td></td>
205357 <td></td><td></td>
206358 </tr>
207359 </table>
208 </td>
209 <td class="mlabels-right">
210 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
211 </tr>
212 </table>
213 </div><div class="memdoc">
214
215 <p>Convert the array of unsigned long <code>mask</code> into hwloc NUMA node set. </p>
216 <p><code>mask</code> is a array of unsigned long that will be read. <code>maxnode</code> contains the maximal node number that may be read in <code>mask</code>.</p>
217 <p>This function may be used after calling get_mempolicy or any other function that takes an array of unsigned long as output parameter (and possibly a maximal node number as input parameter). </p>
218
219 </div>
220 </div>
221 <a id="ga585ccf818d2f217f4e53f9c6506c3128"></a>
222 <h2 class="memtitle"><span class="permalink"><a href="#ga585ccf818d2f217f4e53f9c6506c3128">&#9670;&nbsp;</a></span>hwloc_nodeset_to_linux_libnuma_ulongs()</h2>
223
224 <div class="memitem">
225 <div class="memproto">
226 <table class="mlabels">
227 <tr>
228 <td class="mlabels-left">
229 <table class="memname">
230 <tr>
231 <td class="memname">static int hwloc_nodeset_to_linux_libnuma_ulongs </td>
360 </div><div class="memdoc">
361
362 <p>Return the best target NUMA node for the given attribute and initiator. </p>
363 <p>If the attribute does not relate to a specific initiator (it does not have the flag <a class="el" href="a00222.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96" title="The value returned for this memory attribute depends on the given initiator. For instance Bandwidth a...">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a>), location <code>initiator</code> is ignored and may be <code>NULL</code>.</p>
364 <p>If <code>value</code> is non <code>NULL</code>, the corresponding value is returned there.</p>
365 <p>If multiple targets have the same attribute values, only one is returned (and there is no way to clarify how that one is chosen). Applications that want to detect targets with identical/similar values, or that want to look at values for multiple attributes, should rather get all values using <a class="el" href="a00221.html#ga297e4a9adc2272446a4c7449dacef0df" title="Return an attribute value for a specific target NUMA node.">hwloc_memattr_get_value()</a> and manually select the target they consider the best.</p>
366 <p><code>flags</code> must be <code>0</code> for now.</p>
367 <p>If there are no matching targets, <code>-1</code> is returned with <code>errno</code> set to <code>ENOENT</code>;</p>
368 <dl class="section note"><dt>Note</dt><dd>The initiator <code>initiator</code> should be of type <a class="el" href="a00221.html#gga33099ba58f607fc70925da3777688586a7135318a86361ad75fd1648e6bf6d174" title="Location is given as a cpuset, in the location cpuset union field.">HWLOC_LOCATION_TYPE_CPUSET</a> when refering to accesses performed by CPU cores. <a class="el" href="a00221.html#gga33099ba58f607fc70925da3777688586af637c39b23d48cff15ddb008644aaa84" title="Location is given as an object, in the location object union field.">HWLOC_LOCATION_TYPE_OBJECT</a> is currently unused internally by hwloc, but users may for instance use it to provide custom information about host memory accesses performed by GPUs. </dd></dl>
369
370 </div>
371 </div>
372 <a id="ga79f44f8e1cfd2f97a19171417a75a137"></a>
373 <h2 class="memtitle"><span class="permalink"><a href="#ga79f44f8e1cfd2f97a19171417a75a137">&#9670;&nbsp;</a></span>hwloc_memattr_get_by_name()</h2>
374
375 <div class="memitem">
376 <div class="memproto">
377 <table class="memname">
378 <tr>
379 <td class="memname">int hwloc_memattr_get_by_name </td>
232380 <td>(</td>
233 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
381 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
234382 <td class="paramname"><em>topology</em>, </td>
235383 </tr>
236384 <tr>
237385 <td class="paramkey"></td>
238386 <td></td>
239 <td class="paramtype"><a class="el" href="a00189.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a>&#160;</td>
240 <td class="paramname"><em>nodeset</em>, </td>
241 </tr>
242 <tr>
243 <td class="paramkey"></td>
244 <td></td>
245 <td class="paramtype">unsigned long *&#160;</td>
246 <td class="paramname"><em>mask</em>, </td>
247 </tr>
248 <tr>
249 <td class="paramkey"></td>
250 <td></td>
251 <td class="paramtype">unsigned long *&#160;</td>
252 <td class="paramname"><em>maxnode</em>&#160;</td>
387 <td class="paramtype">const char *&#160;</td>
388 <td class="paramname"><em>name</em>, </td>
389 </tr>
390 <tr>
391 <td class="paramkey"></td>
392 <td></td>
393 <td class="paramtype"><a class="el" href="a00221.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> *&#160;</td>
394 <td class="paramname"><em>id</em>&#160;</td>
253395 </tr>
254396 <tr>
255397 <td></td>
257399 <td></td><td></td>
258400 </tr>
259401 </table>
260 </td>
261 <td class="mlabels-right">
262 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
263 </tr>
264 </table>
265 </div><div class="memdoc">
266
267 <p>Convert hwloc NUMA node set <code>nodeset</code> into the array of unsigned long <code>mask</code>. </p>
268 <p><code>mask</code> is the array of unsigned long that will be filled. <code>maxnode</code> contains the maximal node number that may be stored in <code>mask</code>. <code>maxnode</code> will be set to the maximal node number that was found, plus one.</p>
269 <p>This function may be used before calling set_mempolicy, mbind, migrate_pages or any other function that takes an array of unsigned long and a maximal node number as input parameter. </p>
402 </div><div class="memdoc">
403
404 <p>Return the identifier of the memory attribute with the given name. </p>
405
406 </div>
407 </div>
408 <a id="ga297e4a9adc2272446a4c7449dacef0df"></a>
409 <h2 class="memtitle"><span class="permalink"><a href="#ga297e4a9adc2272446a4c7449dacef0df">&#9670;&nbsp;</a></span>hwloc_memattr_get_value()</h2>
410
411 <div class="memitem">
412 <div class="memproto">
413 <table class="memname">
414 <tr>
415 <td class="memname">int hwloc_memattr_get_value </td>
416 <td>(</td>
417 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
418 <td class="paramname"><em>topology</em>, </td>
419 </tr>
420 <tr>
421 <td class="paramkey"></td>
422 <td></td>
423 <td class="paramtype"><a class="el" href="a00221.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a>&#160;</td>
424 <td class="paramname"><em>attribute</em>, </td>
425 </tr>
426 <tr>
427 <td class="paramkey"></td>
428 <td></td>
429 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
430 <td class="paramname"><em>target_node</em>, </td>
431 </tr>
432 <tr>
433 <td class="paramkey"></td>
434 <td></td>
435 <td class="paramtype">struct <a class="el" href="a00326.html">hwloc_location</a> *&#160;</td>
436 <td class="paramname"><em>initiator</em>, </td>
437 </tr>
438 <tr>
439 <td class="paramkey"></td>
440 <td></td>
441 <td class="paramtype">unsigned long&#160;</td>
442 <td class="paramname"><em>flags</em>, </td>
443 </tr>
444 <tr>
445 <td class="paramkey"></td>
446 <td></td>
447 <td class="paramtype">hwloc_uint64_t *&#160;</td>
448 <td class="paramname"><em>value</em>&#160;</td>
449 </tr>
450 <tr>
451 <td></td>
452 <td>)</td>
453 <td></td><td></td>
454 </tr>
455 </table>
456 </div><div class="memdoc">
457
458 <p>Return an attribute value for a specific target NUMA node. </p>
459 <p>If the attribute does not relate to a specific initiator (it does not have the flag <a class="el" href="a00222.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96" title="The value returned for this memory attribute depends on the given initiator. For instance Bandwidth a...">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a>), location <code>initiator</code> is ignored and may be <code>NULL</code>.</p>
460 <p><code>flags</code> must be <code>0</code> for now.</p>
461 <dl class="section note"><dt>Note</dt><dd>The initiator <code>initiator</code> should be of type <a class="el" href="a00221.html#gga33099ba58f607fc70925da3777688586a7135318a86361ad75fd1648e6bf6d174" title="Location is given as a cpuset, in the location cpuset union field.">HWLOC_LOCATION_TYPE_CPUSET</a> when refering to accesses performed by CPU cores. <a class="el" href="a00221.html#gga33099ba58f607fc70925da3777688586af637c39b23d48cff15ddb008644aaa84" title="Location is given as an object, in the location object union field.">HWLOC_LOCATION_TYPE_OBJECT</a> is currently unused internally by hwloc, but users may for instance use it to provide custom information about host memory accesses performed by GPUs. </dd></dl>
270462
271463 </div>
272464 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Interoperability with Linux libnuma bitmask</title>
7 <title>Hardware Locality (hwloc): Managing memory attributes</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="header">
4141 <div class="summary">
42 <a href="#enum-members">Enumerations</a> &#124;
4243 <a href="#func-members">Functions</a> </div>
4344 <div class="headertitle">
44 <div class="title">Interoperability with Linux libnuma bitmask</div> </div>
45 <div class="title">Managing memory attributes</div> </div>
4546 </div><!--header-->
4647 <div class="contents">
4748 <table class="memberdecls">
49 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
50 Enumerations</h2></td></tr>
51 <tr class="memitem:ga78aceb4cac4d614c0f5e82dbfeb779e5"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html#ga78aceb4cac4d614c0f5e82dbfeb779e5">hwloc_memattr_flag_e</a> { <a class="el" href="a00222.html#gga78aceb4cac4d614c0f5e82dbfeb779e5af29e65444a6ed00f5cc246df06f65815">HWLOC_MEMATTR_FLAG_HIGHER_FIRST</a> = (1UL&lt;&lt;0)
52 , <a class="el" href="a00222.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9601b5b0e1e68635e7e9901f28bd93bf">HWLOC_MEMATTR_FLAG_LOWER_FIRST</a> = (1UL&lt;&lt;1)
53 , <a class="el" href="a00222.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a> = (1UL&lt;&lt;2)
54 }</td></tr>
55 <tr class="separator:ga78aceb4cac4d614c0f5e82dbfeb779e5"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 </table><table class="memberdecls">
4857 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
4958 Functions</h2></td></tr>
50 <tr class="memitem:gad8769b4544c0aeef154fc8223144e343"><td class="memItemLeft" align="right" valign="top">static struct bitmask *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html#gad8769b4544c0aeef154fc8223144e343">hwloc_cpuset_to_linux_libnuma_bitmask</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> cpuset)</td></tr>
51 <tr class="separator:gad8769b4544c0aeef154fc8223144e343"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:gadfaa14c1bec76965ac2e05f0c3f3473b"><td class="memItemLeft" align="right" valign="top">static struct bitmask *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html#gadfaa14c1bec76965ac2e05f0c3f3473b">hwloc_nodeset_to_linux_libnuma_bitmask</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00189.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> nodeset)</td></tr>
53 <tr class="separator:gadfaa14c1bec76965ac2e05f0c3f3473b"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:ga37c8421110b1842414809019098794ef"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html#ga37c8421110b1842414809019098794ef">hwloc_cpuset_from_linux_libnuma_bitmask</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> cpuset, const struct bitmask *bitmask)</td></tr>
55 <tr class="separator:ga37c8421110b1842414809019098794ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:gaaca6bff3086aad5bdbd2f4c5f0ad14cc"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html#gaaca6bff3086aad5bdbd2f4c5f0ad14cc">hwloc_nodeset_from_linux_libnuma_bitmask</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00189.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a> nodeset, const struct bitmask *bitmask)</td></tr>
57 <tr class="separator:gaaca6bff3086aad5bdbd2f4c5f0ad14cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
59 <tr class="memitem:ga5300e9be1abdea2e00c18492148aecd0"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html#ga5300e9be1abdea2e00c18492148aecd0">hwloc_memattr_get_name</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00221.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute, const char **name)</td></tr>
60 <tr class="separator:ga5300e9be1abdea2e00c18492148aecd0"><td class="memSeparator" colspan="2">&#160;</td></tr>
61 <tr class="memitem:ga4c62b626085adeaffb233e5f2a03a5eb"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html#ga4c62b626085adeaffb233e5f2a03a5eb">hwloc_memattr_get_flags</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00221.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute, unsigned long *flags)</td></tr>
62 <tr class="separator:ga4c62b626085adeaffb233e5f2a03a5eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
63 <tr class="memitem:ga770657d1e44b09e93e09f623936c1e5f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html#ga770657d1e44b09e93e09f623936c1e5f">hwloc_memattr_register</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const char *name, unsigned long flags, <a class="el" href="a00221.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> *id)</td></tr>
64 <tr class="separator:ga770657d1e44b09e93e09f623936c1e5f"><td class="memSeparator" colspan="2">&#160;</td></tr>
65 <tr class="memitem:ga960529c08b25cf15825e0f72ecceb504"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html#ga960529c08b25cf15825e0f72ecceb504">hwloc_memattr_set_value</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00221.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> target_node, struct <a class="el" href="a00326.html">hwloc_location</a> *initiator, unsigned long flags, hwloc_uint64_t value)</td></tr>
66 <tr class="separator:ga960529c08b25cf15825e0f72ecceb504"><td class="memSeparator" colspan="2">&#160;</td></tr>
67 <tr class="memitem:ga3177cc0ab47e4dd1fa69ca1df4c7cb1a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html#ga3177cc0ab47e4dd1fa69ca1df4c7cb1a">hwloc_memattr_get_targets</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00221.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute, struct <a class="el" href="a00326.html">hwloc_location</a> *initiator, unsigned long flags, unsigned *nrp, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *targets, hwloc_uint64_t *values)</td></tr>
68 <tr class="separator:ga3177cc0ab47e4dd1fa69ca1df4c7cb1a"><td class="memSeparator" colspan="2">&#160;</td></tr>
69 <tr class="memitem:ga049aaa860dcbbf0792f0fd4251a99ec0"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00222.html#ga049aaa860dcbbf0792f0fd4251a99ec0">hwloc_memattr_get_initiators</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00221.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> attribute, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> target_node, unsigned long flags, unsigned *nr, struct <a class="el" href="a00326.html">hwloc_location</a> *initiators, hwloc_uint64_t *values)</td></tr>
70 <tr class="separator:ga049aaa860dcbbf0792f0fd4251a99ec0"><td class="memSeparator" colspan="2">&#160;</td></tr>
5871 </table>
5972 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
60 <p>This interface helps converting between Linux libnuma bitmasks and hwloc cpusets and nodesets.</p>
61 <dl class="section note"><dt>Note</dt><dd>Topology <code>topology</code> must match the current machine.</dd>
73 <h2 class="groupheader">Enumeration Type Documentation</h2>
74 <a id="ga78aceb4cac4d614c0f5e82dbfeb779e5"></a>
75 <h2 class="memtitle"><span class="permalink"><a href="#ga78aceb4cac4d614c0f5e82dbfeb779e5">&#9670;&nbsp;</a></span>hwloc_memattr_flag_e</h2>
76
77 <div class="memitem">
78 <div class="memproto">
79 <table class="memname">
80 <tr>
81 <td class="memname">enum <a class="el" href="a00222.html#ga78aceb4cac4d614c0f5e82dbfeb779e5">hwloc_memattr_flag_e</a></td>
82 </tr>
83 </table>
84 </div><div class="memdoc">
85
86 <p>Memory attribute flags. Given to <a class="el" href="a00222.html#ga770657d1e44b09e93e09f623936c1e5f" title="Register a new memory attribute.">hwloc_memattr_register()</a> and returned by <a class="el" href="a00222.html#ga4c62b626085adeaffb233e5f2a03a5eb" title="Return the flags of the given attribute.">hwloc_memattr_get_flags()</a>. </p>
87 <table class="fieldtable">
88 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga78aceb4cac4d614c0f5e82dbfeb779e5af29e65444a6ed00f5cc246df06f65815"></a>HWLOC_MEMATTR_FLAG_HIGHER_FIRST&#160;</td><td class="fielddoc"><p>The best nodes for this memory attribute are those with the higher values. For instance Bandwidth. </p>
89 </td></tr>
90 <tr><td class="fieldname"><a id="gga78aceb4cac4d614c0f5e82dbfeb779e5a9601b5b0e1e68635e7e9901f28bd93bf"></a>HWLOC_MEMATTR_FLAG_LOWER_FIRST&#160;</td><td class="fielddoc"><p>The best nodes for this memory attribute are those with the lower values. For instance Latency. </p>
91 </td></tr>
92 <tr><td class="fieldname"><a id="gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96"></a>HWLOC_MEMATTR_FLAG_NEED_INITIATOR&#160;</td><td class="fielddoc"><p>The value returned for this memory attribute depends on the given initiator. For instance Bandwidth and Latency, but not Capacity. </p>
93 </td></tr>
94 </table>
95
96 </div>
97 </div>
98 <h2 class="groupheader">Function Documentation</h2>
99 <a id="ga4c62b626085adeaffb233e5f2a03a5eb"></a>
100 <h2 class="memtitle"><span class="permalink"><a href="#ga4c62b626085adeaffb233e5f2a03a5eb">&#9670;&nbsp;</a></span>hwloc_memattr_get_flags()</h2>
101
102 <div class="memitem">
103 <div class="memproto">
104 <table class="memname">
105 <tr>
106 <td class="memname">int hwloc_memattr_get_flags </td>
107 <td>(</td>
108 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
109 <td class="paramname"><em>topology</em>, </td>
110 </tr>
111 <tr>
112 <td class="paramkey"></td>
113 <td></td>
114 <td class="paramtype"><a class="el" href="a00221.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a>&#160;</td>
115 <td class="paramname"><em>attribute</em>, </td>
116 </tr>
117 <tr>
118 <td class="paramkey"></td>
119 <td></td>
120 <td class="paramtype">unsigned long *&#160;</td>
121 <td class="paramname"><em>flags</em>&#160;</td>
122 </tr>
123 <tr>
124 <td></td>
125 <td>)</td>
126 <td></td><td></td>
127 </tr>
128 </table>
129 </div><div class="memdoc">
130
131 <p>Return the flags of the given attribute. </p>
132 <p>Flags are a OR'ed set of <a class="el" href="a00222.html#ga78aceb4cac4d614c0f5e82dbfeb779e5" title="Memory attribute flags. Given to hwloc_memattr_register() and returned by hwloc_memattr_get_flags().">hwloc_memattr_flag_e</a>. </p>
133
134 </div>
135 </div>
136 <a id="ga049aaa860dcbbf0792f0fd4251a99ec0"></a>
137 <h2 class="memtitle"><span class="permalink"><a href="#ga049aaa860dcbbf0792f0fd4251a99ec0">&#9670;&nbsp;</a></span>hwloc_memattr_get_initiators()</h2>
138
139 <div class="memitem">
140 <div class="memproto">
141 <table class="memname">
142 <tr>
143 <td class="memname">int hwloc_memattr_get_initiators </td>
144 <td>(</td>
145 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
146 <td class="paramname"><em>topology</em>, </td>
147 </tr>
148 <tr>
149 <td class="paramkey"></td>
150 <td></td>
151 <td class="paramtype"><a class="el" href="a00221.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a>&#160;</td>
152 <td class="paramname"><em>attribute</em>, </td>
153 </tr>
154 <tr>
155 <td class="paramkey"></td>
156 <td></td>
157 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
158 <td class="paramname"><em>target_node</em>, </td>
159 </tr>
160 <tr>
161 <td class="paramkey"></td>
162 <td></td>
163 <td class="paramtype">unsigned long&#160;</td>
164 <td class="paramname"><em>flags</em>, </td>
165 </tr>
166 <tr>
167 <td class="paramkey"></td>
168 <td></td>
169 <td class="paramtype">unsigned *&#160;</td>
170 <td class="paramname"><em>nr</em>, </td>
171 </tr>
172 <tr>
173 <td class="paramkey"></td>
174 <td></td>
175 <td class="paramtype">struct <a class="el" href="a00326.html">hwloc_location</a> *&#160;</td>
176 <td class="paramname"><em>initiators</em>, </td>
177 </tr>
178 <tr>
179 <td class="paramkey"></td>
180 <td></td>
181 <td class="paramtype">hwloc_uint64_t *&#160;</td>
182 <td class="paramname"><em>values</em>&#160;</td>
183 </tr>
184 <tr>
185 <td></td>
186 <td>)</td>
187 <td></td><td></td>
188 </tr>
189 </table>
190 </div><div class="memdoc">
191
192 <p>Return the initiators that have values for a given attribute for a specific target NUMA node. </p>
193 <p>Return initiators for the given attribute and target node in the <code>initiators</code> array. If <code>values</code> is not <code>NULL</code>, the corresponding attribute values are stored in the array it points to.</p>
194 <p>On input, <code>nr</code> points to the number of initiators that may be stored in the array <code>initiators</code> (and <code>values</code>). On output, <code>nr</code> points to the number of initiators (and values) that were actually found, even if some of them couldn't be stored in the array. Initiators that couldn't be stored are ignored, but the function still returns success (<code>0</code>). The caller may find out by comparing the value pointed by <code>nr</code> before and after the function call.</p>
195 <p>The returned initiators should not be modified or freed, they belong to the topology.</p>
196 <p><code>flags</code> must be <code>0</code> for now.</p>
197 <p>If the attribute does not relate to a specific initiator (it does not have the flag <a class="el" href="a00222.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96" title="The value returned for this memory attribute depends on the given initiator. For instance Bandwidth a...">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a>), no initiator is returned.</p>
198 <dl class="section note"><dt>Note</dt><dd>This function is meant for tools and debugging (listing internal information) rather than for application queries. Applications should rather select useful NUMA nodes with <a class="el" href="a00221.html#ga569e80c5be7ef27649b0ef5aa52ffcdc" title="Return an array of local NUMA nodes.">hwloc_get_local_numanode_objs()</a> and then look at their attribute values for some relevant initiators. </dd></dl>
199
200 </div>
201 </div>
202 <a id="ga5300e9be1abdea2e00c18492148aecd0"></a>
203 <h2 class="memtitle"><span class="permalink"><a href="#ga5300e9be1abdea2e00c18492148aecd0">&#9670;&nbsp;</a></span>hwloc_memattr_get_name()</h2>
204
205 <div class="memitem">
206 <div class="memproto">
207 <table class="memname">
208 <tr>
209 <td class="memname">int hwloc_memattr_get_name </td>
210 <td>(</td>
211 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
212 <td class="paramname"><em>topology</em>, </td>
213 </tr>
214 <tr>
215 <td class="paramkey"></td>
216 <td></td>
217 <td class="paramtype"><a class="el" href="a00221.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a>&#160;</td>
218 <td class="paramname"><em>attribute</em>, </td>
219 </tr>
220 <tr>
221 <td class="paramkey"></td>
222 <td></td>
223 <td class="paramtype">const char **&#160;</td>
224 <td class="paramname"><em>name</em>&#160;</td>
225 </tr>
226 <tr>
227 <td></td>
228 <td>)</td>
229 <td></td><td></td>
230 </tr>
231 </table>
232 </div><div class="memdoc">
233
234 <p>Return the name of a memory attribute. </p>
235
236 </div>
237 </div>
238 <a id="ga3177cc0ab47e4dd1fa69ca1df4c7cb1a"></a>
239 <h2 class="memtitle"><span class="permalink"><a href="#ga3177cc0ab47e4dd1fa69ca1df4c7cb1a">&#9670;&nbsp;</a></span>hwloc_memattr_get_targets()</h2>
240
241 <div class="memitem">
242 <div class="memproto">
243 <table class="memname">
244 <tr>
245 <td class="memname">int hwloc_memattr_get_targets </td>
246 <td>(</td>
247 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
248 <td class="paramname"><em>topology</em>, </td>
249 </tr>
250 <tr>
251 <td class="paramkey"></td>
252 <td></td>
253 <td class="paramtype"><a class="el" href="a00221.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a>&#160;</td>
254 <td class="paramname"><em>attribute</em>, </td>
255 </tr>
256 <tr>
257 <td class="paramkey"></td>
258 <td></td>
259 <td class="paramtype">struct <a class="el" href="a00326.html">hwloc_location</a> *&#160;</td>
260 <td class="paramname"><em>initiator</em>, </td>
261 </tr>
262 <tr>
263 <td class="paramkey"></td>
264 <td></td>
265 <td class="paramtype">unsigned long&#160;</td>
266 <td class="paramname"><em>flags</em>, </td>
267 </tr>
268 <tr>
269 <td class="paramkey"></td>
270 <td></td>
271 <td class="paramtype">unsigned *&#160;</td>
272 <td class="paramname"><em>nrp</em>, </td>
273 </tr>
274 <tr>
275 <td class="paramkey"></td>
276 <td></td>
277 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *&#160;</td>
278 <td class="paramname"><em>targets</em>, </td>
279 </tr>
280 <tr>
281 <td class="paramkey"></td>
282 <td></td>
283 <td class="paramtype">hwloc_uint64_t *&#160;</td>
284 <td class="paramname"><em>values</em>&#160;</td>
285 </tr>
286 <tr>
287 <td></td>
288 <td>)</td>
289 <td></td><td></td>
290 </tr>
291 </table>
292 </div><div class="memdoc">
293
294 <p>Return the target NUMA nodes that have some values for a given attribute. </p>
295 <p>Return targets for the given attribute in the <code>targets</code> array (for the given initiator if any). If <code>values</code> is not <code>NULL</code>, the corresponding attribute values are stored in the array it points to.</p>
296 <p>On input, <code>nr</code> points to the number of targets that may be stored in the array <code>targets</code> (and <code>values</code>). On output, <code>nr</code> points to the number of targets (and values) that were actually found, even if some of them couldn't be stored in the array. Targets that couldn't be stored are ignored, but the function still returns success (<code>0</code>). The caller may find out by comparing the value pointed by <code>nr</code> before and after the function call.</p>
297 <p>The returned targets should not be modified or freed, they belong to the topology.</p>
298 <p>Argument <code>initiator</code> is ignored if the attribute does not relate to a specific initiator (it does not have the flag <a class="el" href="a00222.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96" title="The value returned for this memory attribute depends on the given initiator. For instance Bandwidth a...">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a>). Otherwise <code>initiator</code> may be non <code>NULL</code> to report only targets that have a value for that initiator.</p>
299 <p><code>flags</code> must be <code>0</code> for now.</p>
300 <dl class="section note"><dt>Note</dt><dd>This function is meant for tools and debugging (listing internal information) rather than for application queries. Applications should rather select useful NUMA nodes with <a class="el" href="a00221.html#ga569e80c5be7ef27649b0ef5aa52ffcdc" title="Return an array of local NUMA nodes.">hwloc_get_local_numanode_objs()</a> and then look at their attribute values.</dd>
62301 <dd>
63 The behavior of libnuma is undefined if the kernel is not NUMA-aware. (when CONFIG_NUMA is not set in the kernel configuration). This helper and libnuma may thus not be strictly compatible in this case, which may be detected by checking whether numa_available() returns -1. </dd></dl>
64 <h2 class="groupheader">Function Documentation</h2>
65 <a id="ga37c8421110b1842414809019098794ef"></a>
66 <h2 class="memtitle"><span class="permalink"><a href="#ga37c8421110b1842414809019098794ef">&#9670;&nbsp;</a></span>hwloc_cpuset_from_linux_libnuma_bitmask()</h2>
67
68 <div class="memitem">
69 <div class="memproto">
70 <table class="mlabels">
71 <tr>
72 <td class="mlabels-left">
73 <table class="memname">
74 <tr>
75 <td class="memname">static int hwloc_cpuset_from_linux_libnuma_bitmask </td>
76 <td>(</td>
77 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
78 <td class="paramname"><em>topology</em>, </td>
79 </tr>
80 <tr>
81 <td class="paramkey"></td>
82 <td></td>
83 <td class="paramtype"><a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
84 <td class="paramname"><em>cpuset</em>, </td>
85 </tr>
86 <tr>
87 <td class="paramkey"></td>
88 <td></td>
89 <td class="paramtype">const struct bitmask *&#160;</td>
90 <td class="paramname"><em>bitmask</em>&#160;</td>
91 </tr>
92 <tr>
93 <td></td>
94 <td>)</td>
95 <td></td><td></td>
96 </tr>
97 </table>
98 </td>
99 <td class="mlabels-right">
100 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
101 </tr>
102 </table>
103 </div><div class="memdoc">
104
105 <p>Convert libnuma bitmask <code>bitmask</code> into hwloc CPU set <code>cpuset</code>. </p>
106 <p>This function may be used after calling many numa_ functions that use a struct bitmask as an output parameter. </p>
107
108 </div>
109 </div>
110 <a id="gad8769b4544c0aeef154fc8223144e343"></a>
111 <h2 class="memtitle"><span class="permalink"><a href="#gad8769b4544c0aeef154fc8223144e343">&#9670;&nbsp;</a></span>hwloc_cpuset_to_linux_libnuma_bitmask()</h2>
112
113 <div class="memitem">
114 <div class="memproto">
115 <table class="mlabels">
116 <tr>
117 <td class="mlabels-left">
118 <table class="memname">
119 <tr>
120 <td class="memname">static struct bitmask * hwloc_cpuset_to_linux_libnuma_bitmask </td>
121 <td>(</td>
122 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
123 <td class="paramname"><em>topology</em>, </td>
124 </tr>
125 <tr>
126 <td class="paramkey"></td>
127 <td></td>
128 <td class="paramtype"><a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
129 <td class="paramname"><em>cpuset</em>&#160;</td>
130 </tr>
131 <tr>
132 <td></td>
133 <td>)</td>
134 <td></td><td></td>
135 </tr>
136 </table>
137 </td>
138 <td class="mlabels-right">
139 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
140 </tr>
141 </table>
142 </div><div class="memdoc">
143
144 <p>Convert hwloc CPU set <code>cpuset</code> into the returned libnuma bitmask. </p>
145 <p>The returned bitmask should later be freed with numa_bitmask_free.</p>
146 <p>This function may be used before calling many numa_ functions that use a struct bitmask as an input parameter.</p>
147 <dl class="section return"><dt>Returns</dt><dd>newly allocated struct bitmask. </dd></dl>
148
149 </div>
150 </div>
151 <a id="gaaca6bff3086aad5bdbd2f4c5f0ad14cc"></a>
152 <h2 class="memtitle"><span class="permalink"><a href="#gaaca6bff3086aad5bdbd2f4c5f0ad14cc">&#9670;&nbsp;</a></span>hwloc_nodeset_from_linux_libnuma_bitmask()</h2>
153
154 <div class="memitem">
155 <div class="memproto">
156 <table class="mlabels">
157 <tr>
158 <td class="mlabels-left">
159 <table class="memname">
160 <tr>
161 <td class="memname">static int hwloc_nodeset_from_linux_libnuma_bitmask </td>
162 <td>(</td>
163 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
164 <td class="paramname"><em>topology</em>, </td>
165 </tr>
166 <tr>
167 <td class="paramkey"></td>
168 <td></td>
169 <td class="paramtype"><a class="el" href="a00189.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a>&#160;</td>
170 <td class="paramname"><em>nodeset</em>, </td>
171 </tr>
172 <tr>
173 <td class="paramkey"></td>
174 <td></td>
175 <td class="paramtype">const struct bitmask *&#160;</td>
176 <td class="paramname"><em>bitmask</em>&#160;</td>
177 </tr>
178 <tr>
179 <td></td>
180 <td>)</td>
181 <td></td><td></td>
182 </tr>
183 </table>
184 </td>
185 <td class="mlabels-right">
186 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
187 </tr>
188 </table>
189 </div><div class="memdoc">
190
191 <p>Convert libnuma bitmask <code>bitmask</code> into hwloc NUMA node set <code>nodeset</code>. </p>
192 <p>This function may be used after calling many numa_ functions that use a struct bitmask as an output parameter. </p>
193
194 </div>
195 </div>
196 <a id="gadfaa14c1bec76965ac2e05f0c3f3473b"></a>
197 <h2 class="memtitle"><span class="permalink"><a href="#gadfaa14c1bec76965ac2e05f0c3f3473b">&#9670;&nbsp;</a></span>hwloc_nodeset_to_linux_libnuma_bitmask()</h2>
198
199 <div class="memitem">
200 <div class="memproto">
201 <table class="mlabels">
202 <tr>
203 <td class="mlabels-left">
204 <table class="memname">
205 <tr>
206 <td class="memname">static struct bitmask * hwloc_nodeset_to_linux_libnuma_bitmask </td>
207 <td>(</td>
208 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
209 <td class="paramname"><em>topology</em>, </td>
210 </tr>
211 <tr>
212 <td class="paramkey"></td>
213 <td></td>
214 <td class="paramtype"><a class="el" href="a00189.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a>&#160;</td>
215 <td class="paramname"><em>nodeset</em>&#160;</td>
216 </tr>
217 <tr>
218 <td></td>
219 <td>)</td>
220 <td></td><td></td>
221 </tr>
222 </table>
223 </td>
224 <td class="mlabels-right">
225 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
226 </tr>
227 </table>
228 </div><div class="memdoc">
229
230 <p>Convert hwloc NUMA node set <code>nodeset</code> into the returned libnuma bitmask. </p>
231 <p>The returned bitmask should later be freed with numa_bitmask_free.</p>
232 <p>This function may be used before calling many numa_ functions that use a struct bitmask as an input parameter.</p>
233 <dl class="section return"><dt>Returns</dt><dd>newly allocated struct bitmask. </dd></dl>
302 The initiator <code>initiator</code> should be of type <a class="el" href="a00221.html#gga33099ba58f607fc70925da3777688586a7135318a86361ad75fd1648e6bf6d174" title="Location is given as a cpuset, in the location cpuset union field.">HWLOC_LOCATION_TYPE_CPUSET</a> when refering to accesses performed by CPU cores. <a class="el" href="a00221.html#gga33099ba58f607fc70925da3777688586af637c39b23d48cff15ddb008644aaa84" title="Location is given as an object, in the location object union field.">HWLOC_LOCATION_TYPE_OBJECT</a> is currently unused internally by hwloc, but users may for instance use it to provide custom information about host memory accesses performed by GPUs. </dd></dl>
303
304 </div>
305 </div>
306 <a id="ga770657d1e44b09e93e09f623936c1e5f"></a>
307 <h2 class="memtitle"><span class="permalink"><a href="#ga770657d1e44b09e93e09f623936c1e5f">&#9670;&nbsp;</a></span>hwloc_memattr_register()</h2>
308
309 <div class="memitem">
310 <div class="memproto">
311 <table class="memname">
312 <tr>
313 <td class="memname">int hwloc_memattr_register </td>
314 <td>(</td>
315 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
316 <td class="paramname"><em>topology</em>, </td>
317 </tr>
318 <tr>
319 <td class="paramkey"></td>
320 <td></td>
321 <td class="paramtype">const char *&#160;</td>
322 <td class="paramname"><em>name</em>, </td>
323 </tr>
324 <tr>
325 <td class="paramkey"></td>
326 <td></td>
327 <td class="paramtype">unsigned long&#160;</td>
328 <td class="paramname"><em>flags</em>, </td>
329 </tr>
330 <tr>
331 <td class="paramkey"></td>
332 <td></td>
333 <td class="paramtype"><a class="el" href="a00221.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a> *&#160;</td>
334 <td class="paramname"><em>id</em>&#160;</td>
335 </tr>
336 <tr>
337 <td></td>
338 <td>)</td>
339 <td></td><td></td>
340 </tr>
341 </table>
342 </div><div class="memdoc">
343
344 <p>Register a new memory attribute. </p>
345 <p>Add a specific memory attribute that is not defined in <a class="el" href="a00221.html#gab4bde745db676fc2ea4b47011cd9a80e" title="Memory node attributes.">hwloc_memattr_id_e</a>. Flags are a OR'ed set of <a class="el" href="a00222.html#ga78aceb4cac4d614c0f5e82dbfeb779e5" title="Memory attribute flags. Given to hwloc_memattr_register() and returned by hwloc_memattr_get_flags().">hwloc_memattr_flag_e</a>. It must contain at least one of <a class="el" href="a00222.html#gga78aceb4cac4d614c0f5e82dbfeb779e5af29e65444a6ed00f5cc246df06f65815" title="The best nodes for this memory attribute are those with the higher values. For instance Bandwidth.">HWLOC_MEMATTR_FLAG_HIGHER_FIRST</a> or <a class="el" href="a00222.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9601b5b0e1e68635e7e9901f28bd93bf" title="The best nodes for this memory attribute are those with the lower values. For instance Latency.">HWLOC_MEMATTR_FLAG_LOWER_FIRST</a>. </p>
346
347 </div>
348 </div>
349 <a id="ga960529c08b25cf15825e0f72ecceb504"></a>
350 <h2 class="memtitle"><span class="permalink"><a href="#ga960529c08b25cf15825e0f72ecceb504">&#9670;&nbsp;</a></span>hwloc_memattr_set_value()</h2>
351
352 <div class="memitem">
353 <div class="memproto">
354 <table class="memname">
355 <tr>
356 <td class="memname">int hwloc_memattr_set_value </td>
357 <td>(</td>
358 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
359 <td class="paramname"><em>topology</em>, </td>
360 </tr>
361 <tr>
362 <td class="paramkey"></td>
363 <td></td>
364 <td class="paramtype"><a class="el" href="a00221.html#gacc82003a8610be554615995f0996c888">hwloc_memattr_id_t</a>&#160;</td>
365 <td class="paramname"><em>attribute</em>, </td>
366 </tr>
367 <tr>
368 <td class="paramkey"></td>
369 <td></td>
370 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
371 <td class="paramname"><em>target_node</em>, </td>
372 </tr>
373 <tr>
374 <td class="paramkey"></td>
375 <td></td>
376 <td class="paramtype">struct <a class="el" href="a00326.html">hwloc_location</a> *&#160;</td>
377 <td class="paramname"><em>initiator</em>, </td>
378 </tr>
379 <tr>
380 <td class="paramkey"></td>
381 <td></td>
382 <td class="paramtype">unsigned long&#160;</td>
383 <td class="paramname"><em>flags</em>, </td>
384 </tr>
385 <tr>
386 <td class="paramkey"></td>
387 <td></td>
388 <td class="paramtype">hwloc_uint64_t&#160;</td>
389 <td class="paramname"><em>value</em>&#160;</td>
390 </tr>
391 <tr>
392 <td></td>
393 <td>)</td>
394 <td></td><td></td>
395 </tr>
396 </table>
397 </div><div class="memdoc">
398
399 <p>Set an attribute value for a specific target NUMA node. </p>
400 <p>If the attribute does not relate to a specific initiator (it does not have the flag <a class="el" href="a00222.html#gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96" title="The value returned for this memory attribute depends on the given initiator. For instance Bandwidth a...">HWLOC_MEMATTR_FLAG_NEED_INITIATOR</a>), location <code>initiator</code> is ignored and may be <code>NULL</code>.</p>
401 <p>The initiator will be copied into the topology, the caller should free anything allocated to store the initiator, for instance the cpuset.</p>
402 <p><code>flags</code> must be <code>0</code> for now.</p>
403 <dl class="section note"><dt>Note</dt><dd>The initiator <code>initiator</code> should be of type <a class="el" href="a00221.html#gga33099ba58f607fc70925da3777688586a7135318a86361ad75fd1648e6bf6d174" title="Location is given as a cpuset, in the location cpuset union field.">HWLOC_LOCATION_TYPE_CPUSET</a> when refering to accesses performed by CPU cores. <a class="el" href="a00221.html#gga33099ba58f607fc70925da3777688586af637c39b23d48cff15ddb008644aaa84" title="Location is given as an object, in the location object union field.">HWLOC_LOCATION_TYPE_OBJECT</a> is currently unused internally by hwloc, but users may for instance use it to provide custom information about host memory accesses performed by GPUs. </dd></dl>
234404
235405 </div>
236406 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Interoperability with glibc sched affinity</title>
7 <title>Hardware Locality (hwloc): Kinds of CPU cores</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4141 <div class="summary">
4242 <a href="#func-members">Functions</a> </div>
4343 <div class="headertitle">
44 <div class="title">Interoperability with glibc sched affinity</div> </div>
44 <div class="title">Kinds of CPU cores</div> </div>
4545 </div><!--header-->
4646 <div class="contents">
4747 <table class="memberdecls">
4848 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
4949 Functions</h2></td></tr>
50 <tr class="memitem:ga88699a0c86c66a9b7baa3468cd9d24c3"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00223.html#ga88699a0c86c66a9b7baa3468cd9d24c3">hwloc_cpuset_to_glibc_sched_affinity</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> hwlocset, cpu_set_t *schedset, size_t schedsetsize)</td></tr>
51 <tr class="separator:ga88699a0c86c66a9b7baa3468cd9d24c3"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:ga8ec807ec17de57fa77aa5cfd6c8e4bfb"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00223.html#ga8ec807ec17de57fa77aa5cfd6c8e4bfb">hwloc_cpuset_from_glibc_sched_affinity</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> hwlocset, const cpu_set_t *schedset, size_t schedsetsize)</td></tr>
53 <tr class="separator:ga8ec807ec17de57fa77aa5cfd6c8e4bfb"><td class="memSeparator" colspan="2">&#160;</td></tr>
50 <tr class="memitem:ga7553f7c6d3920b169f3fc18dfe6a33e3"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00223.html#ga7553f7c6d3920b169f3fc18dfe6a33e3">hwloc_cpukinds_get_nr</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned long flags)</td></tr>
51 <tr class="separator:ga7553f7c6d3920b169f3fc18dfe6a33e3"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:gaf979833aab18d2e7f4b17c932cbcf5d8"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00223.html#gaf979833aab18d2e7f4b17c932cbcf5d8">hwloc_cpukinds_get_by_cpuset</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a> cpuset, unsigned long flags)</td></tr>
53 <tr class="separator:gaf979833aab18d2e7f4b17c932cbcf5d8"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:gae1b38fbe9c645583fc16052ce6fbb275"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00223.html#gae1b38fbe9c645583fc16052ce6fbb275">hwloc_cpukinds_get_info</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned kind_index, <a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> cpuset, int *efficiency, unsigned *nr_infos, struct <a class="el" href="a00298.html">hwloc_info_s</a> **infos, unsigned long flags)</td></tr>
55 <tr class="separator:gae1b38fbe9c645583fc16052ce6fbb275"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:ga6164ba92cfd06f530ec2c4a18a0dd5a9"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00223.html#ga6164ba92cfd06f530ec2c4a18a0dd5a9">hwloc_cpukinds_register</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> cpuset, int forced_efficiency, unsigned nr_infos, struct <a class="el" href="a00298.html">hwloc_info_s</a> *infos, unsigned long flags)</td></tr>
57 <tr class="separator:ga6164ba92cfd06f530ec2c4a18a0dd5a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
5458 </table>
5559 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
56 <p>This interface offers ways to convert between hwloc cpusets and glibc cpusets such as those manipulated by sched_getaffinity() or pthread_attr_setaffinity_np().</p>
57 <dl class="section note"><dt>Note</dt><dd>Topology <code>topology</code> must match the current machine. </dd></dl>
60 <p>Platforms with heterogeneous CPUs may have some cores with different features or frequencies. This API exposes identical PUs in sets called CPU kinds. Each PU of the topology may only be in a single kind.</p>
61 <p>The number of kinds may be obtained with <a class="el" href="a00223.html#ga7553f7c6d3920b169f3fc18dfe6a33e3" title="Get the number of different kinds of CPU cores in the topology.">hwloc_cpukinds_get_nr()</a>. If the platform is homogeneous, there may be a single kind with all PUs. If the platform or operating system does not expose any information about CPU cores, there may be no kind at all.</p>
62 <p>The index of the kind that describes a given CPU set (if any, and not partially) may be obtained with <a class="el" href="a00223.html#gaf979833aab18d2e7f4b17c932cbcf5d8" title="Get the index of the CPU kind that contains CPUs listed in cpuset.">hwloc_cpukinds_get_by_cpuset()</a>.</p>
63 <p>From the index of a kind, it is possible to retrieve information with <a class="el" href="a00223.html#gae1b38fbe9c645583fc16052ce6fbb275" title="Get the CPU set and infos about a CPU kind in the topology.">hwloc_cpukinds_get_info()</a>: an abstracted efficiency value, and an array of info attributes (for instance the "CoreType" and "FrequencyMaxMHz", see <a class="el" href="a00399.html#topoattrs_cpukinds">CPU Kinds</a>).</p>
64 <p>A higher efficiency value means intrinsic greater performance (and possibly less performance/power efficiency). Kinds with lower efficiency are ranked first: Passing 0 as <code>kind_index</code> to <a class="el" href="a00223.html#gae1b38fbe9c645583fc16052ce6fbb275" title="Get the CPU set and infos about a CPU kind in the topology.">hwloc_cpukinds_get_info()</a> will return information about the less efficient CPU kind.</p>
65 <p>When available, efficiency values are gathered from the operating system (when <code>cpukind_efficiency</code> is set in the struct <a class="el" href="a00302.html" title="Flags describing actual discovery support for this topology.">hwloc_topology_discovery_support</a> array, only on Windows 10 for now). Otherwise hwloc tries to compute efficiencies by comparing CPU kinds using frequencies (on ARM), or core types and frequencies (on other architectures). The environment variable HWLOC_CPUKINDS_RANKING may be used to change this heuristics, see <a class="el" href="a00394.html">Environment Variables</a>.</p>
66 <p>If hwloc fails to rank any kind, for instance because the operating system does not expose efficiencies and core frequencies, all kinds will have an unknown efficiency (<code>-1</code>), and they are not indexed/ordered in any specific way. </p>
5867 <h2 class="groupheader">Function Documentation</h2>
59 <a id="ga8ec807ec17de57fa77aa5cfd6c8e4bfb"></a>
60 <h2 class="memtitle"><span class="permalink"><a href="#ga8ec807ec17de57fa77aa5cfd6c8e4bfb">&#9670;&nbsp;</a></span>hwloc_cpuset_from_glibc_sched_affinity()</h2>
61
62 <div class="memitem">
63 <div class="memproto">
64 <table class="mlabels">
65 <tr>
66 <td class="mlabels-left">
67 <table class="memname">
68 <tr>
69 <td class="memname">static int hwloc_cpuset_from_glibc_sched_affinity </td>
70 <td>(</td>
71 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
72 <td class="paramname"><em>topology</em>, </td>
73 </tr>
74 <tr>
75 <td class="paramkey"></td>
76 <td></td>
77 <td class="paramtype"><a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
78 <td class="paramname"><em>hwlocset</em>, </td>
79 </tr>
80 <tr>
81 <td class="paramkey"></td>
82 <td></td>
83 <td class="paramtype">const cpu_set_t *&#160;</td>
84 <td class="paramname"><em>schedset</em>, </td>
85 </tr>
86 <tr>
87 <td class="paramkey"></td>
88 <td></td>
89 <td class="paramtype">size_t&#160;</td>
90 <td class="paramname"><em>schedsetsize</em>&#160;</td>
91 </tr>
92 <tr>
93 <td></td>
94 <td>)</td>
95 <td></td><td></td>
96 </tr>
97 </table>
98 </td>
99 <td class="mlabels-right">
100 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
101 </tr>
102 </table>
103 </div><div class="memdoc">
104
105 <p>Convert glibc sched affinity CPU set <code>schedset</code> into hwloc CPU set. </p>
106 <p>This function may be used before calling sched_setaffinity or any other function that takes a cpu_set_t as input parameter.</p>
107 <p><code>schedsetsize</code> should be sizeof(cpu_set_t) unless <code>schedset</code> was dynamically allocated with CPU_ALLOC </p>
108
109 </div>
110 </div>
111 <a id="ga88699a0c86c66a9b7baa3468cd9d24c3"></a>
112 <h2 class="memtitle"><span class="permalink"><a href="#ga88699a0c86c66a9b7baa3468cd9d24c3">&#9670;&nbsp;</a></span>hwloc_cpuset_to_glibc_sched_affinity()</h2>
113
114 <div class="memitem">
115 <div class="memproto">
116 <table class="mlabels">
117 <tr>
118 <td class="mlabels-left">
119 <table class="memname">
120 <tr>
121 <td class="memname">static int hwloc_cpuset_to_glibc_sched_affinity </td>
122 <td>(</td>
123 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
124 <td class="paramname"><em>topology</em>, </td>
125 </tr>
126 <tr>
127 <td class="paramkey"></td>
128 <td></td>
129 <td class="paramtype"><a class="el" href="a00189.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
130 <td class="paramname"><em>hwlocset</em>, </td>
131 </tr>
132 <tr>
133 <td class="paramkey"></td>
134 <td></td>
135 <td class="paramtype">cpu_set_t *&#160;</td>
136 <td class="paramname"><em>schedset</em>, </td>
137 </tr>
138 <tr>
139 <td class="paramkey"></td>
140 <td></td>
141 <td class="paramtype">size_t&#160;</td>
142 <td class="paramname"><em>schedsetsize</em>&#160;</td>
143 </tr>
144 <tr>
145 <td></td>
146 <td>)</td>
147 <td></td><td></td>
148 </tr>
149 </table>
150 </td>
151 <td class="mlabels-right">
152 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
153 </tr>
154 </table>
155 </div><div class="memdoc">
156
157 <p>Convert hwloc CPU set <code>toposet</code> into glibc sched affinity CPU set <code>schedset</code>. </p>
158 <p>This function may be used before calling sched_setaffinity or any other function that takes a cpu_set_t as input parameter.</p>
159 <p><code>schedsetsize</code> should be sizeof(cpu_set_t) unless <code>schedset</code> was dynamically allocated with CPU_ALLOC </p>
68 <a id="gaf979833aab18d2e7f4b17c932cbcf5d8"></a>
69 <h2 class="memtitle"><span class="permalink"><a href="#gaf979833aab18d2e7f4b17c932cbcf5d8">&#9670;&nbsp;</a></span>hwloc_cpukinds_get_by_cpuset()</h2>
70
71 <div class="memitem">
72 <div class="memproto">
73 <table class="memname">
74 <tr>
75 <td class="memname">int hwloc_cpukinds_get_by_cpuset </td>
76 <td>(</td>
77 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
78 <td class="paramname"><em>topology</em>, </td>
79 </tr>
80 <tr>
81 <td class="paramkey"></td>
82 <td></td>
83 <td class="paramtype"><a class="el" href="a00214.html#gae991a108af01d408be2776c5b2c467b2">hwloc_const_bitmap_t</a>&#160;</td>
84 <td class="paramname"><em>cpuset</em>, </td>
85 </tr>
86 <tr>
87 <td class="paramkey"></td>
88 <td></td>
89 <td class="paramtype">unsigned long&#160;</td>
90 <td class="paramname"><em>flags</em>&#160;</td>
91 </tr>
92 <tr>
93 <td></td>
94 <td>)</td>
95 <td></td><td></td>
96 </tr>
97 </table>
98 </div><div class="memdoc">
99
100 <p>Get the index of the CPU kind that contains CPUs listed in <code>cpuset</code>. </p>
101 <p><code>flags</code> must be <code>0</code> for now.</p>
102 <dl class="section return"><dt>Returns</dt><dd>The index of the CPU kind (positive integer or 0) on success. </dd>
103 <dd>
104 <code>-1</code> with <code>errno</code> set to <code>EXDEV</code> if <code>cpuset</code> is only partially included in the some kind. </dd>
105 <dd>
106 <code>-1</code> with <code>errno</code> set to <code>ENOENT</code> if <code>cpuset</code> is not included in any kind, even partially. </dd>
107 <dd>
108 <code>-1</code> with <code>errno</code> set to <code>EINVAL</code> if parameters are invalid. </dd></dl>
109
110 </div>
111 </div>
112 <a id="gae1b38fbe9c645583fc16052ce6fbb275"></a>
113 <h2 class="memtitle"><span class="permalink"><a href="#gae1b38fbe9c645583fc16052ce6fbb275">&#9670;&nbsp;</a></span>hwloc_cpukinds_get_info()</h2>
114
115 <div class="memitem">
116 <div class="memproto">
117 <table class="memname">
118 <tr>
119 <td class="memname">int hwloc_cpukinds_get_info </td>
120 <td>(</td>
121 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
122 <td class="paramname"><em>topology</em>, </td>
123 </tr>
124 <tr>
125 <td class="paramkey"></td>
126 <td></td>
127 <td class="paramtype">unsigned&#160;</td>
128 <td class="paramname"><em>kind_index</em>, </td>
129 </tr>
130 <tr>
131 <td class="paramkey"></td>
132 <td></td>
133 <td class="paramtype"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
134 <td class="paramname"><em>cpuset</em>, </td>
135 </tr>
136 <tr>
137 <td class="paramkey"></td>
138 <td></td>
139 <td class="paramtype">int *&#160;</td>
140 <td class="paramname"><em>efficiency</em>, </td>
141 </tr>
142 <tr>
143 <td class="paramkey"></td>
144 <td></td>
145 <td class="paramtype">unsigned *&#160;</td>
146 <td class="paramname"><em>nr_infos</em>, </td>
147 </tr>
148 <tr>
149 <td class="paramkey"></td>
150 <td></td>
151 <td class="paramtype">struct <a class="el" href="a00298.html">hwloc_info_s</a> **&#160;</td>
152 <td class="paramname"><em>infos</em>, </td>
153 </tr>
154 <tr>
155 <td class="paramkey"></td>
156 <td></td>
157 <td class="paramtype">unsigned long&#160;</td>
158 <td class="paramname"><em>flags</em>&#160;</td>
159 </tr>
160 <tr>
161 <td></td>
162 <td>)</td>
163 <td></td><td></td>
164 </tr>
165 </table>
166 </div><div class="memdoc">
167
168 <p>Get the CPU set and infos about a CPU kind in the topology. </p>
169 <p><code>kind_index</code> identifies one kind of CPU between 0 and the number of kinds returned by <a class="el" href="a00223.html#ga7553f7c6d3920b169f3fc18dfe6a33e3" title="Get the number of different kinds of CPU cores in the topology.">hwloc_cpukinds_get_nr()</a> minus 1.</p>
170 <p>If not <code>NULL</code>, the bitmap <code>cpuset</code> will be filled with the set of PUs of this kind.</p>
171 <p>The integer pointed by <code>efficiency</code>, if not <code>NULL</code> will, be filled with the ranking of this kind of CPU in term of efficiency (see above). It ranges from <code>0</code> to the number of kinds (as reported by <a class="el" href="a00223.html#ga7553f7c6d3920b169f3fc18dfe6a33e3" title="Get the number of different kinds of CPU cores in the topology.">hwloc_cpukinds_get_nr()</a>) minus 1.</p>
172 <p>Kinds with lower efficiency are reported first.</p>
173 <p>If there is a single kind in the topology, its efficiency <code>0</code>. If the efficiency of some kinds of cores is unknown, the efficiency of all kinds is set to <code>-1</code>, and kinds are reported in no specific order.</p>
174 <p>The array of info attributes (for instance the "CoreType", "FrequencyMaxMHz" or "FrequencyBaseMHz", see <a class="el" href="a00399.html#topoattrs_cpukinds">CPU Kinds</a>) and its length are returned in <code>infos</code> or <code>nr_infos</code>. The array belongs to the topology, it should not be freed or modified.</p>
175 <p>If <code>nr_infos</code> or <code>infos</code> is <code>NULL</code>, no info is returned.</p>
176 <p><code>flags</code> must be <code>0</code> for now.</p>
177 <dl class="section return"><dt>Returns</dt><dd><code>0</code> on success. </dd>
178 <dd>
179 <code>-1</code> with <code>errno</code> set to <code>ENOENT</code> if <code>kind_index</code> does not match any CPU kind. </dd>
180 <dd>
181 <code>-1</code> with <code>errno</code> set to <code>EINVAL</code> if parameters are invalid. </dd></dl>
182
183 </div>
184 </div>
185 <a id="ga7553f7c6d3920b169f3fc18dfe6a33e3"></a>
186 <h2 class="memtitle"><span class="permalink"><a href="#ga7553f7c6d3920b169f3fc18dfe6a33e3">&#9670;&nbsp;</a></span>hwloc_cpukinds_get_nr()</h2>
187
188 <div class="memitem">
189 <div class="memproto">
190 <table class="memname">
191 <tr>
192 <td class="memname">int hwloc_cpukinds_get_nr </td>
193 <td>(</td>
194 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
195 <td class="paramname"><em>topology</em>, </td>
196 </tr>
197 <tr>
198 <td class="paramkey"></td>
199 <td></td>
200 <td class="paramtype">unsigned long&#160;</td>
201 <td class="paramname"><em>flags</em>&#160;</td>
202 </tr>
203 <tr>
204 <td></td>
205 <td>)</td>
206 <td></td><td></td>
207 </tr>
208 </table>
209 </div><div class="memdoc">
210
211 <p>Get the number of different kinds of CPU cores in the topology. </p>
212 <p><code>flags</code> must be <code>0</code> for now.</p>
213 <dl class="section return"><dt>Returns</dt><dd>The number of CPU kinds (positive integer) on success. </dd>
214 <dd>
215 <code>0</code> if no information about kinds was found. </dd>
216 <dd>
217 <code>-1</code> with <code>errno</code> set to <code>EINVAL</code> if <code>flags</code> is invalid. </dd></dl>
218
219 </div>
220 </div>
221 <a id="ga6164ba92cfd06f530ec2c4a18a0dd5a9"></a>
222 <h2 class="memtitle"><span class="permalink"><a href="#ga6164ba92cfd06f530ec2c4a18a0dd5a9">&#9670;&nbsp;</a></span>hwloc_cpukinds_register()</h2>
223
224 <div class="memitem">
225 <div class="memproto">
226 <table class="memname">
227 <tr>
228 <td class="memname">int hwloc_cpukinds_register </td>
229 <td>(</td>
230 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
231 <td class="paramname"><em>topology</em>, </td>
232 </tr>
233 <tr>
234 <td class="paramkey"></td>
235 <td></td>
236 <td class="paramtype"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
237 <td class="paramname"><em>cpuset</em>, </td>
238 </tr>
239 <tr>
240 <td class="paramkey"></td>
241 <td></td>
242 <td class="paramtype">int&#160;</td>
243 <td class="paramname"><em>forced_efficiency</em>, </td>
244 </tr>
245 <tr>
246 <td class="paramkey"></td>
247 <td></td>
248 <td class="paramtype">unsigned&#160;</td>
249 <td class="paramname"><em>nr_infos</em>, </td>
250 </tr>
251 <tr>
252 <td class="paramkey"></td>
253 <td></td>
254 <td class="paramtype">struct <a class="el" href="a00298.html">hwloc_info_s</a> *&#160;</td>
255 <td class="paramname"><em>infos</em>, </td>
256 </tr>
257 <tr>
258 <td class="paramkey"></td>
259 <td></td>
260 <td class="paramtype">unsigned long&#160;</td>
261 <td class="paramname"><em>flags</em>&#160;</td>
262 </tr>
263 <tr>
264 <td></td>
265 <td>)</td>
266 <td></td><td></td>
267 </tr>
268 </table>
269 </div><div class="memdoc">
270
271 <p>Register a kind of CPU in the topology. </p>
272 <p>Mark the PUs listed in <code>cpuset</code> as being of the same kind with respect to the given attributes.</p>
273 <p><code>forced_efficiency</code> should be <code>-1</code> if unknown. Otherwise it is an abstracted efficiency value to enforce the ranking of all kinds if all of them have valid (and different) efficiencies.</p>
274 <p>The array <code>infos</code> of size <code>nr_infos</code> may be used to provide info names and values describing this kind of PUs.</p>
275 <p><code>flags</code> must be <code>0</code> for now.</p>
276 <p>Parameters <code>cpuset</code> and <code>infos</code> will be duplicated internally, the caller is responsible for freeing them.</p>
277 <p>If <code>cpuset</code> overlaps with some existing kinds, those might get modified or split. For instance if existing kind A contains PUs 0 and 1, and one registers another kind for PU 1 and 2, there will be 3 resulting kinds: existing kind A is restricted to only PU 0; new kind B contains only PU 1 and combines information from A and from the newly-registered kind; new kind C contains only PU 2 and only gets information from the newly-registered kind.</p>
278 <dl class="section note"><dt>Note</dt><dd>The efficiency <code>forced_efficiency</code> provided to this function may be different from the one reported later by <a class="el" href="a00223.html#gae1b38fbe9c645583fc16052ce6fbb275" title="Get the CPU set and infos about a CPU kind in the topology.">hwloc_cpukinds_get_info()</a> because hwloc will scale efficiency values down to between 0 and the number of kinds minus 1.</dd></dl>
279 <dl class="section return"><dt>Returns</dt><dd><code>0</code> on success. </dd>
280 <dd>
281 <code>-1</code> with <code>errno</code> set to <code>EINVAL</code> if some parameters are invalid, for instance if <code>cpuset</code> is <code>NULL</code> or empty. </dd></dl>
160282
161283 </div>
162284 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Interoperability with OpenCL</title>
7 <title>Hardware Locality (hwloc): Linux-specific helpers</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4141 <div class="summary">
4242 <a href="#func-members">Functions</a> </div>
4343 <div class="headertitle">
44 <div class="title">Interoperability with OpenCL</div> </div>
44 <div class="title">Linux-specific helpers</div> </div>
4545 </div><!--header-->
4646 <div class="contents">
4747 <table class="memberdecls">
4848 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
4949 Functions</h2></td></tr>
50 <tr class="memitem:gab89e4d20f8a353299351b41849e35ac9"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00224.html#gab89e4d20f8a353299351b41849e35ac9">hwloc_opencl_get_device_pci_busid</a> (cl_device_id device, unsigned *domain, unsigned *bus, unsigned *dev, unsigned *func)</td></tr>
51 <tr class="separator:gab89e4d20f8a353299351b41849e35ac9"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:gacc32737d4648d16b0d292438f210ec90"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00224.html#gacc32737d4648d16b0d292438f210ec90">hwloc_opencl_get_device_cpuset</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, cl_device_id device, <a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</td></tr>
53 <tr class="separator:gacc32737d4648d16b0d292438f210ec90"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:gae39352d124cb330eb37b84b418ed6cc5"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00224.html#gae39352d124cb330eb37b84b418ed6cc5">hwloc_opencl_get_device_osdev_by_index</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned platform_index, unsigned device_index)</td></tr>
55 <tr class="separator:gae39352d124cb330eb37b84b418ed6cc5"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:gadabfa6516aa12e5d8f79b9b4dd9f3cf8"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00224.html#gadabfa6516aa12e5d8f79b9b4dd9f3cf8">hwloc_opencl_get_device_osdev</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, cl_device_id device)</td></tr>
57 <tr class="separator:gadabfa6516aa12e5d8f79b9b4dd9f3cf8"><td class="memSeparator" colspan="2">&#160;</td></tr>
50 <tr class="memitem:ga630e699c56b5f3d2e534b475944c216e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00224.html#ga630e699c56b5f3d2e534b475944c216e">hwloc_linux_set_tid_cpubind</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, pid_t tid, <a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> set)</td></tr>
51 <tr class="separator:ga630e699c56b5f3d2e534b475944c216e"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:gaddcb985cb56337a4d6693cee72e7bf94"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00224.html#gaddcb985cb56337a4d6693cee72e7bf94">hwloc_linux_get_tid_cpubind</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, pid_t tid, <a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</td></tr>
53 <tr class="separator:gaddcb985cb56337a4d6693cee72e7bf94"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:gacc7945c2d06c6db1e58f8fd953009134"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00224.html#gacc7945c2d06c6db1e58f8fd953009134">hwloc_linux_get_tid_last_cpu_location</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, pid_t tid, <a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set)</td></tr>
55 <tr class="separator:gacc7945c2d06c6db1e58f8fd953009134"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:gaf72d83e273803226ce772973e37b85de"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00224.html#gaf72d83e273803226ce772973e37b85de">hwloc_linux_read_path_as_cpumask</a> (const char *path, <a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> set)</td></tr>
57 <tr class="separator:gaf72d83e273803226ce772973e37b85de"><td class="memSeparator" colspan="2">&#160;</td></tr>
5858 </table>
5959 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
60 <p>This interface offers ways to retrieve topology information about OpenCL devices.</p>
61 <p>Only AMD and NVIDIA OpenCL implementations currently offer useful locality information about their devices. </p>
60 <p>This includes helpers for manipulating Linux kernel cpumap files, and hwloc equivalents of the Linux sched_setaffinity and sched_getaffinity system calls. </p>
6261 <h2 class="groupheader">Function Documentation</h2>
63 <a id="gacc32737d4648d16b0d292438f210ec90"></a>
64 <h2 class="memtitle"><span class="permalink"><a href="#gacc32737d4648d16b0d292438f210ec90">&#9670;&nbsp;</a></span>hwloc_opencl_get_device_cpuset()</h2>
65
66 <div class="memitem">
67 <div class="memproto">
68 <table class="mlabels">
69 <tr>
70 <td class="mlabels-left">
71 <table class="memname">
72 <tr>
73 <td class="memname">static int hwloc_opencl_get_device_cpuset </td>
74 <td>(</td>
75 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
62 <a id="gaddcb985cb56337a4d6693cee72e7bf94"></a>
63 <h2 class="memtitle"><span class="permalink"><a href="#gaddcb985cb56337a4d6693cee72e7bf94">&#9670;&nbsp;</a></span>hwloc_linux_get_tid_cpubind()</h2>
64
65 <div class="memitem">
66 <div class="memproto">
67 <table class="memname">
68 <tr>
69 <td class="memname">int hwloc_linux_get_tid_cpubind </td>
70 <td>(</td>
71 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
7672 <td class="paramname"><em>topology</em>, </td>
7773 </tr>
7874 <tr>
7975 <td class="paramkey"></td>
8076 <td></td>
81 <td class="paramtype">cl_device_id&#160;</td>
82 <td class="paramname"><em>device</em>, </td>
83 </tr>
84 <tr>
85 <td class="paramkey"></td>
86 <td></td>
87 <td class="paramtype"><a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
88 <td class="paramname"><em>set</em>&#160;</td>
89 </tr>
90 <tr>
91 <td></td>
92 <td>)</td>
93 <td></td><td></td>
94 </tr>
95 </table>
96 </td>
97 <td class="mlabels-right">
98 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
99 </tr>
100 </table>
101 </div><div class="memdoc">
102
103 <p>Get the CPU set of processors that are physically close to OpenCL device <code>device</code>. </p>
104 <p>Return the CPU set describing the locality of the OpenCL device <code>device</code>.</p>
105 <p>Topology <code>topology</code> and device <code>device</code> must match the local machine. I/O devices detection and the OpenCL component are not needed in the topology.</p>
106 <p>The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see <a class="el" href="a00224.html#gadabfa6516aa12e5d8f79b9b4dd9f3cf8" title="Get the hwloc OS device object corresponding to OpenCL device deviceX.">hwloc_opencl_get_device_osdev()</a> and <a class="el" href="a00224.html#gae39352d124cb330eb37b84b418ed6cc5" title="Get the hwloc OS device object corresponding to the OpenCL device for the given indexes.">hwloc_opencl_get_device_osdev_by_index()</a>.</p>
107 <p>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. </p>
108
109 </div>
110 </div>
111 <a id="gadabfa6516aa12e5d8f79b9b4dd9f3cf8"></a>
112 <h2 class="memtitle"><span class="permalink"><a href="#gadabfa6516aa12e5d8f79b9b4dd9f3cf8">&#9670;&nbsp;</a></span>hwloc_opencl_get_device_osdev()</h2>
113
114 <div class="memitem">
115 <div class="memproto">
116 <table class="mlabels">
117 <tr>
118 <td class="mlabels-left">
119 <table class="memname">
120 <tr>
121 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_opencl_get_device_osdev </td>
122 <td>(</td>
123 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
77 <td class="paramtype">pid_t&#160;</td>
78 <td class="paramname"><em>tid</em>, </td>
79 </tr>
80 <tr>
81 <td class="paramkey"></td>
82 <td></td>
83 <td class="paramtype"><a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
84 <td class="paramname"><em>set</em>&#160;</td>
85 </tr>
86 <tr>
87 <td></td>
88 <td>)</td>
89 <td></td><td></td>
90 </tr>
91 </table>
92 </div><div class="memdoc">
93
94 <p>Get the current binding of thread <code>tid</code>. </p>
95 <p>The behavior is exactly the same as the Linux sched_getaffinity system call, but uses a hwloc cpuset.</p>
96 <dl class="section note"><dt>Note</dt><dd>This is equivalent to calling <a class="el" href="a00199.html#gac82de91f788fa82dacf99c6e0d4b7158" title="Get the current physical binding of process pid.">hwloc_get_proc_cpubind()</a> with <a class="el" href="a00199.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421" title="Bind current thread of current process.">HWLOC_CPUBIND_THREAD</a> as flags. </dd></dl>
97
98 </div>
99 </div>
100 <a id="gacc7945c2d06c6db1e58f8fd953009134"></a>
101 <h2 class="memtitle"><span class="permalink"><a href="#gacc7945c2d06c6db1e58f8fd953009134">&#9670;&nbsp;</a></span>hwloc_linux_get_tid_last_cpu_location()</h2>
102
103 <div class="memitem">
104 <div class="memproto">
105 <table class="memname">
106 <tr>
107 <td class="memname">int hwloc_linux_get_tid_last_cpu_location </td>
108 <td>(</td>
109 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
124110 <td class="paramname"><em>topology</em>, </td>
125111 </tr>
126112 <tr>
127113 <td class="paramkey"></td>
128114 <td></td>
129 <td class="paramtype">cl_device_id&#160;</td>
130 <td class="paramname"><em>device</em>&#160;</td>
131 </tr>
132 <tr>
133 <td></td>
134 <td>)</td>
135 <td></td><td></td>
136 </tr>
137 </table>
138 </td>
139 <td class="mlabels-right">
140 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
141 </tr>
142 </table>
143 </div><div class="memdoc">
144
145 <p>Get the hwloc OS device object corresponding to OpenCL device <code>deviceX</code>. </p>
146 <p>Use OpenCL device attributes to find the corresponding hwloc OS device object. Return NULL if there is none or if useful attributes are not available.</p>
147 <p>This function currently only works on AMD and NVIDIA OpenCL devices that support relevant OpenCL extensions. <a class="el" href="a00224.html#gae39352d124cb330eb37b84b418ed6cc5" title="Get the hwloc OS device object corresponding to the OpenCL device for the given indexes.">hwloc_opencl_get_device_osdev_by_index()</a> should be preferred whenever possible, i.e. when platform and device index are known.</p>
148 <p>Topology <code>topology</code> and device <code>device</code> 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 <a class="el" href="a00224.html#gacc32737d4648d16b0d292438f210ec90" title="Get the CPU set of processors that are physically close to OpenCL device device.">hwloc_opencl_get_device_cpuset()</a>.</p>
149 <dl class="section note"><dt>Note</dt><dd>This function cannot work if PCI devices are filtered out.</dd>
150 <dd>
151 The corresponding hwloc PCI device may be found by looking at the result parent pointer (unless PCI devices are filtered out). </dd></dl>
152
153 </div>
154 </div>
155 <a id="gae39352d124cb330eb37b84b418ed6cc5"></a>
156 <h2 class="memtitle"><span class="permalink"><a href="#gae39352d124cb330eb37b84b418ed6cc5">&#9670;&nbsp;</a></span>hwloc_opencl_get_device_osdev_by_index()</h2>
157
158 <div class="memitem">
159 <div class="memproto">
160 <table class="mlabels">
161 <tr>
162 <td class="mlabels-left">
163 <table class="memname">
164 <tr>
165 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_opencl_get_device_osdev_by_index </td>
166 <td>(</td>
167 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
115 <td class="paramtype">pid_t&#160;</td>
116 <td class="paramname"><em>tid</em>, </td>
117 </tr>
118 <tr>
119 <td class="paramkey"></td>
120 <td></td>
121 <td class="paramtype"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
122 <td class="paramname"><em>set</em>&#160;</td>
123 </tr>
124 <tr>
125 <td></td>
126 <td>)</td>
127 <td></td><td></td>
128 </tr>
129 </table>
130 </div><div class="memdoc">
131
132 <p>Get the last physical CPU where thread <code>tid</code> ran. </p>
133 <dl class="section note"><dt>Note</dt><dd>This is equivalent to calling <a class="el" href="a00199.html#ga910a05c2d47f68a3155bf176b50fa555" title="Get the last physical CPU where a process ran.">hwloc_get_proc_last_cpu_location()</a> with <a class="el" href="a00199.html#gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421" title="Bind current thread of current process.">HWLOC_CPUBIND_THREAD</a> as flags. </dd></dl>
134
135 </div>
136 </div>
137 <a id="gaf72d83e273803226ce772973e37b85de"></a>
138 <h2 class="memtitle"><span class="permalink"><a href="#gaf72d83e273803226ce772973e37b85de">&#9670;&nbsp;</a></span>hwloc_linux_read_path_as_cpumask()</h2>
139
140 <div class="memitem">
141 <div class="memproto">
142 <table class="memname">
143 <tr>
144 <td class="memname">int hwloc_linux_read_path_as_cpumask </td>
145 <td>(</td>
146 <td class="paramtype">const char *&#160;</td>
147 <td class="paramname"><em>path</em>, </td>
148 </tr>
149 <tr>
150 <td class="paramkey"></td>
151 <td></td>
152 <td class="paramtype"><a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a>&#160;</td>
153 <td class="paramname"><em>set</em>&#160;</td>
154 </tr>
155 <tr>
156 <td></td>
157 <td>)</td>
158 <td></td><td></td>
159 </tr>
160 </table>
161 </div><div class="memdoc">
162
163 <p>Convert a linux kernel cpumask file <code>path</code> into a hwloc bitmap <code>set</code>. </p>
164 <p>Might be used when reading CPU set from sysfs attributes such as topology and caches for processors, or local_cpus for devices.</p>
165 <dl class="section note"><dt>Note</dt><dd>This function ignores the HWLOC_FSROOT environment variable. </dd></dl>
166
167 </div>
168 </div>
169 <a id="ga630e699c56b5f3d2e534b475944c216e"></a>
170 <h2 class="memtitle"><span class="permalink"><a href="#ga630e699c56b5f3d2e534b475944c216e">&#9670;&nbsp;</a></span>hwloc_linux_set_tid_cpubind()</h2>
171
172 <div class="memitem">
173 <div class="memproto">
174 <table class="memname">
175 <tr>
176 <td class="memname">int hwloc_linux_set_tid_cpubind </td>
177 <td>(</td>
178 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
168179 <td class="paramname"><em>topology</em>, </td>
169180 </tr>
170181 <tr>
171182 <td class="paramkey"></td>
172183 <td></td>
173 <td class="paramtype">unsigned&#160;</td>
174 <td class="paramname"><em>platform_index</em>, </td>
175 </tr>
176 <tr>
177 <td class="paramkey"></td>
178 <td></td>
179 <td class="paramtype">unsigned&#160;</td>
180 <td class="paramname"><em>device_index</em>&#160;</td>
181 </tr>
182 <tr>
183 <td></td>
184 <td>)</td>
185 <td></td><td></td>
186 </tr>
187 </table>
188 </td>
189 <td class="mlabels-right">
190 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
191 </tr>
192 </table>
193 </div><div class="memdoc">
194
195 <p>Get the hwloc OS device object corresponding to the OpenCL device for the given indexes. </p>
196 <p>Return the OS device object describing the OpenCL device whose platform index is <code>platform_index</code>, and whose device index within this platform if <code>device_index</code>. Return NULL if there is none.</p>
197 <p>The topology <code>topology</code> 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 OpenCL component must be enabled in the topology.</p>
198 <dl class="section note"><dt>Note</dt><dd>The corresponding PCI device object can be obtained by looking at the OS device parent object (unless PCI devices are filtered out). </dd></dl>
199
200 </div>
201 </div>
202 <a id="gab89e4d20f8a353299351b41849e35ac9"></a>
203 <h2 class="memtitle"><span class="permalink"><a href="#gab89e4d20f8a353299351b41849e35ac9">&#9670;&nbsp;</a></span>hwloc_opencl_get_device_pci_busid()</h2>
204
205 <div class="memitem">
206 <div class="memproto">
207 <table class="mlabels">
208 <tr>
209 <td class="mlabels-left">
210 <table class="memname">
211 <tr>
212 <td class="memname">static int hwloc_opencl_get_device_pci_busid </td>
213 <td>(</td>
214 <td class="paramtype">cl_device_id&#160;</td>
215 <td class="paramname"><em>device</em>, </td>
216 </tr>
217 <tr>
218 <td class="paramkey"></td>
219 <td></td>
220 <td class="paramtype">unsigned *&#160;</td>
221 <td class="paramname"><em>domain</em>, </td>
222 </tr>
223 <tr>
224 <td class="paramkey"></td>
225 <td></td>
226 <td class="paramtype">unsigned *&#160;</td>
227 <td class="paramname"><em>bus</em>, </td>
228 </tr>
229 <tr>
230 <td class="paramkey"></td>
231 <td></td>
232 <td class="paramtype">unsigned *&#160;</td>
233 <td class="paramname"><em>dev</em>, </td>
234 </tr>
235 <tr>
236 <td class="paramkey"></td>
237 <td></td>
238 <td class="paramtype">unsigned *&#160;</td>
239 <td class="paramname"><em>func</em>&#160;</td>
240 </tr>
241 <tr>
242 <td></td>
243 <td>)</td>
244 <td></td><td></td>
245 </tr>
246 </table>
247 </td>
248 <td class="mlabels-right">
249 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
250 </tr>
251 </table>
252 </div><div class="memdoc">
253
254 <p>Return the domain, bus and device IDs of the OpenCL device <code>device</code>. </p>
255 <p>Device <code>device</code> must match the local machine. </p>
184 <td class="paramtype">pid_t&#160;</td>
185 <td class="paramname"><em>tid</em>, </td>
186 </tr>
187 <tr>
188 <td class="paramkey"></td>
189 <td></td>
190 <td class="paramtype"><a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
191 <td class="paramname"><em>set</em>&#160;</td>
192 </tr>
193 <tr>
194 <td></td>
195 <td>)</td>
196 <td></td><td></td>
197 </tr>
198 </table>
199 </div><div class="memdoc">
200
201 <p>Bind a thread <code>tid</code> on cpus given in cpuset <code>set</code>. </p>
202 <p>The behavior is exactly the same as the Linux sched_setaffinity system call, but uses a hwloc cpuset.</p>
203 <dl class="section note"><dt>Note</dt><dd>This is equivalent to calling <a class="el" href="a00199.html#ga296db8a3c6d49b51fb83d6f3e45c02a6" title="Bind a process pid on cpus given in physical bitmap set.">hwloc_set_proc_cpubind()</a> with HWLOC_CPUBIND_THREAD as flags. </dd></dl>
256204
257205 </div>
258206 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Interoperability with the CUDA Driver API</title>
7 <title>Hardware Locality (hwloc): Interoperability with Linux libnuma unsigned long masks</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4141 <div class="summary">
4242 <a href="#func-members">Functions</a> </div>
4343 <div class="headertitle">
44 <div class="title">Interoperability with the CUDA Driver API</div> </div>
44 <div class="title">Interoperability with Linux libnuma unsigned long masks</div> </div>
4545 </div><!--header-->
4646 <div class="contents">
4747 <table class="memberdecls">
4848 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
4949 Functions</h2></td></tr>
50 <tr class="memitem:ga1084285e8ff8b7df91c28917637481c6"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html#ga1084285e8ff8b7df91c28917637481c6">hwloc_cuda_get_device_pci_ids</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, CUdevice cudevice, int *domain, int *bus, int *dev)</td></tr>
51 <tr class="separator:ga1084285e8ff8b7df91c28917637481c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:gaec41c6b4dc3361156beb7dea2a74f5a3"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html#gaec41c6b4dc3361156beb7dea2a74f5a3">hwloc_cuda_get_device_cpuset</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, CUdevice cudevice, <a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</td></tr>
53 <tr class="separator:gaec41c6b4dc3361156beb7dea2a74f5a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:ga11fed607fa404e29e8da010f3ec128e4"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html#ga11fed607fa404e29e8da010f3ec128e4">hwloc_cuda_get_device_pcidev</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, CUdevice cudevice)</td></tr>
55 <tr class="separator:ga11fed607fa404e29e8da010f3ec128e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:ga252cb72175f1a2d682f883a0add80a66"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html#ga252cb72175f1a2d682f883a0add80a66">hwloc_cuda_get_device_osdev</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, CUdevice cudevice)</td></tr>
57 <tr class="separator:ga252cb72175f1a2d682f883a0add80a66"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:ga12ee892994ed037e8f64bbffda02cf2e"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html#ga12ee892994ed037e8f64bbffda02cf2e">hwloc_cuda_get_device_osdev_by_index</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned idx)</td></tr>
59 <tr class="separator:ga12ee892994ed037e8f64bbffda02cf2e"><td class="memSeparator" colspan="2">&#160;</td></tr>
50 <tr class="memitem:gae577962390f84b0b12f503314ab0f972"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html#gae577962390f84b0b12f503314ab0f972">hwloc_cpuset_to_linux_libnuma_ulongs</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> cpuset, unsigned long *mask, unsigned long *maxnode)</td></tr>
51 <tr class="separator:gae577962390f84b0b12f503314ab0f972"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:ga585ccf818d2f217f4e53f9c6506c3128"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html#ga585ccf818d2f217f4e53f9c6506c3128">hwloc_nodeset_to_linux_libnuma_ulongs</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00192.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> nodeset, unsigned long *mask, unsigned long *maxnode)</td></tr>
53 <tr class="separator:ga585ccf818d2f217f4e53f9c6506c3128"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:ga0e9d051e068940f722f6fdc61814149d"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html#ga0e9d051e068940f722f6fdc61814149d">hwloc_cpuset_from_linux_libnuma_ulongs</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> cpuset, const unsigned long *mask, unsigned long maxnode)</td></tr>
55 <tr class="separator:ga0e9d051e068940f722f6fdc61814149d"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:gad8491c672eb2594cc5e7b0a026867192"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00225.html#gad8491c672eb2594cc5e7b0a026867192">hwloc_nodeset_from_linux_libnuma_ulongs</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00192.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a> nodeset, const unsigned long *mask, unsigned long maxnode)</td></tr>
57 <tr class="separator:gad8491c672eb2594cc5e7b0a026867192"><td class="memSeparator" colspan="2">&#160;</td></tr>
6058 </table>
6159 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
62 <p>This interface offers ways to retrieve topology information about CUDA devices when using the CUDA Driver API. </p>
60 <p>This interface helps converting between Linux libnuma unsigned long masks and hwloc cpusets and nodesets.</p>
61 <dl class="section note"><dt>Note</dt><dd>Topology <code>topology</code> must match the current machine.</dd>
62 <dd>
63 The behavior of libnuma is undefined if the kernel is not NUMA-aware. (when CONFIG_NUMA is not set in the kernel configuration). This helper and libnuma may thus not be strictly compatible in this case, which may be detected by checking whether numa_available() returns -1. </dd></dl>
6364 <h2 class="groupheader">Function Documentation</h2>
64 <a id="gaec41c6b4dc3361156beb7dea2a74f5a3"></a>
65 <h2 class="memtitle"><span class="permalink"><a href="#gaec41c6b4dc3361156beb7dea2a74f5a3">&#9670;&nbsp;</a></span>hwloc_cuda_get_device_cpuset()</h2>
66
67 <div class="memitem">
68 <div class="memproto">
69 <table class="mlabels">
70 <tr>
71 <td class="mlabels-left">
72 <table class="memname">
73 <tr>
74 <td class="memname">static int hwloc_cuda_get_device_cpuset </td>
75 <td>(</td>
76 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
77 <td class="paramname"><em>topology</em>, </td>
78 </tr>
79 <tr>
80 <td class="paramkey"></td>
81 <td></td>
82 <td class="paramtype">CUdevice&#160;</td>
83 <td class="paramname"><em>cudevice</em>, </td>
84 </tr>
85 <tr>
86 <td class="paramkey"></td>
87 <td></td>
88 <td class="paramtype"><a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
89 <td class="paramname"><em>set</em>&#160;</td>
90 </tr>
91 <tr>
92 <td></td>
93 <td>)</td>
94 <td></td><td></td>
95 </tr>
96 </table>
97 </td>
98 <td class="mlabels-right">
99 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
100 </tr>
101 </table>
102 </div><div class="memdoc">
103
104 <p>Get the CPU set of processors that are physically close to device <code>cudevice</code>. </p>
105 <p>Return the CPU set describing the locality of the CUDA device <code>cudevice</code>.</p>
106 <p>Topology <code>topology</code> and device <code>cudevice</code> must match the local machine. I/O devices detection and the CUDA component are not needed in the topology.</p>
107 <p>The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see <a class="el" href="a00225.html#ga252cb72175f1a2d682f883a0add80a66" title="Get the hwloc OS device object corresponding to CUDA device cudevice.">hwloc_cuda_get_device_osdev()</a> and <a class="el" href="a00225.html#ga12ee892994ed037e8f64bbffda02cf2e" title="Get the hwloc OS device object corresponding to the CUDA device whose index is idx.">hwloc_cuda_get_device_osdev_by_index()</a>.</p>
108 <p>This function is currently only implemented in a meaningful way for Linux; other systems will simply get a full cpuset. </p>
109
110 </div>
111 </div>
112 <a id="ga252cb72175f1a2d682f883a0add80a66"></a>
113 <h2 class="memtitle"><span class="permalink"><a href="#ga252cb72175f1a2d682f883a0add80a66">&#9670;&nbsp;</a></span>hwloc_cuda_get_device_osdev()</h2>
114
115 <div class="memitem">
116 <div class="memproto">
117 <table class="mlabels">
118 <tr>
119 <td class="mlabels-left">
120 <table class="memname">
121 <tr>
122 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_cuda_get_device_osdev </td>
123 <td>(</td>
124 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
125 <td class="paramname"><em>topology</em>, </td>
126 </tr>
127 <tr>
128 <td class="paramkey"></td>
129 <td></td>
130 <td class="paramtype">CUdevice&#160;</td>
131 <td class="paramname"><em>cudevice</em>&#160;</td>
132 </tr>
133 <tr>
134 <td></td>
135 <td>)</td>
136 <td></td><td></td>
137 </tr>
138 </table>
139 </td>
140 <td class="mlabels-right">
141 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
142 </tr>
143 </table>
144 </div><div class="memdoc">
145
146 <p>Get the hwloc OS device object corresponding to CUDA device <code>cudevice</code>. </p>
147 <p>Return the hwloc OS device object that describes the given CUDA device <code>cudevice</code>. Return NULL if there is none.</p>
148 <p>Topology <code>topology</code> and device <code>cudevice</code> 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 <a class="el" href="a00225.html#gaec41c6b4dc3361156beb7dea2a74f5a3" title="Get the CPU set of processors that are physically close to device cudevice.">hwloc_cuda_get_device_cpuset()</a>.</p>
149 <dl class="section note"><dt>Note</dt><dd>This function cannot work if PCI devices are filtered out.</dd>
150 <dd>
151 The corresponding hwloc PCI device may be found by looking at the result parent pointer (unless PCI devices are filtered out). </dd></dl>
152
153 </div>
154 </div>
155 <a id="ga12ee892994ed037e8f64bbffda02cf2e"></a>
156 <h2 class="memtitle"><span class="permalink"><a href="#ga12ee892994ed037e8f64bbffda02cf2e">&#9670;&nbsp;</a></span>hwloc_cuda_get_device_osdev_by_index()</h2>
157
158 <div class="memitem">
159 <div class="memproto">
160 <table class="mlabels">
161 <tr>
162 <td class="mlabels-left">
163 <table class="memname">
164 <tr>
165 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_cuda_get_device_osdev_by_index </td>
166 <td>(</td>
167 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
168 <td class="paramname"><em>topology</em>, </td>
169 </tr>
170 <tr>
171 <td class="paramkey"></td>
172 <td></td>
173 <td class="paramtype">unsigned&#160;</td>
174 <td class="paramname"><em>idx</em>&#160;</td>
175 </tr>
176 <tr>
177 <td></td>
178 <td>)</td>
179 <td></td><td></td>
180 </tr>
181 </table>
182 </td>
183 <td class="mlabels-right">
184 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
185 </tr>
186 </table>
187 </div><div class="memdoc">
188
189 <p>Get the hwloc OS device object corresponding to the CUDA device whose index is <code>idx</code>. </p>
190 <p>Return the OS device object describing the CUDA device whose index is <code>idx</code>. Return NULL if there is none.</p>
191 <p>The topology <code>topology</code> 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.</p>
192 <dl class="section note"><dt>Note</dt><dd>The corresponding PCI device object can be obtained by looking at the OS device parent object (unless PCI devices are filtered out).</dd>
193 <dd>
194 This function is identical to <a class="el" href="a00226.html#gac0f3eeaf7712919f298097b1a21307b0" title="Get the hwloc OS device object corresponding to the CUDA device whose index is idx.">hwloc_cudart_get_device_osdev_by_index()</a>. </dd></dl>
195
196 </div>
197 </div>
198 <a id="ga1084285e8ff8b7df91c28917637481c6"></a>
199 <h2 class="memtitle"><span class="permalink"><a href="#ga1084285e8ff8b7df91c28917637481c6">&#9670;&nbsp;</a></span>hwloc_cuda_get_device_pci_ids()</h2>
200
201 <div class="memitem">
202 <div class="memproto">
203 <table class="mlabels">
204 <tr>
205 <td class="mlabels-left">
206 <table class="memname">
207 <tr>
208 <td class="memname">static int hwloc_cuda_get_device_pci_ids </td>
209 <td>(</td>
210 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
211 <td class="paramname"><em>topology</em>, </td>
212 </tr>
213 <tr>
214 <td class="paramkey"></td>
215 <td></td>
216 <td class="paramtype">CUdevice&#160;</td>
217 <td class="paramname"><em>cudevice</em>, </td>
218 </tr>
219 <tr>
220 <td class="paramkey"></td>
221 <td></td>
222 <td class="paramtype">int *&#160;</td>
223 <td class="paramname"><em>domain</em>, </td>
224 </tr>
225 <tr>
226 <td class="paramkey"></td>
227 <td></td>
228 <td class="paramtype">int *&#160;</td>
229 <td class="paramname"><em>bus</em>, </td>
230 </tr>
231 <tr>
232 <td class="paramkey"></td>
233 <td></td>
234 <td class="paramtype">int *&#160;</td>
235 <td class="paramname"><em>dev</em>&#160;</td>
236 </tr>
237 <tr>
238 <td></td>
239 <td>)</td>
240 <td></td><td></td>
241 </tr>
242 </table>
243 </td>
244 <td class="mlabels-right">
245 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
246 </tr>
247 </table>
248 </div><div class="memdoc">
249
250 <p>Return the domain, bus and device IDs of the CUDA device <code>cudevice</code>. </p>
251 <p>Device <code>cudevice</code> must match the local machine. </p>
252
253 </div>
254 </div>
255 <a id="ga11fed607fa404e29e8da010f3ec128e4"></a>
256 <h2 class="memtitle"><span class="permalink"><a href="#ga11fed607fa404e29e8da010f3ec128e4">&#9670;&nbsp;</a></span>hwloc_cuda_get_device_pcidev()</h2>
257
258 <div class="memitem">
259 <div class="memproto">
260 <table class="mlabels">
261 <tr>
262 <td class="mlabels-left">
263 <table class="memname">
264 <tr>
265 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_cuda_get_device_pcidev </td>
266 <td>(</td>
267 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
268 <td class="paramname"><em>topology</em>, </td>
269 </tr>
270 <tr>
271 <td class="paramkey"></td>
272 <td></td>
273 <td class="paramtype">CUdevice&#160;</td>
274 <td class="paramname"><em>cudevice</em>&#160;</td>
275 </tr>
276 <tr>
277 <td></td>
278 <td>)</td>
279 <td></td><td></td>
280 </tr>
281 </table>
282 </td>
283 <td class="mlabels-right">
284 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
285 </tr>
286 </table>
287 </div><div class="memdoc">
288
289 <p>Get the hwloc PCI device object corresponding to the CUDA device <code>cudevice</code>. </p>
290 <p>Return the PCI device object describing the CUDA device <code>cudevice</code>. Return NULL if there is none.</p>
291 <p>Topology <code>topology</code> and device <code>cudevice</code> must match the local machine. I/O devices detection must be enabled in topology <code>topology</code>. The CUDA component is not needed in the topology. </p>
65 <a id="ga0e9d051e068940f722f6fdc61814149d"></a>
66 <h2 class="memtitle"><span class="permalink"><a href="#ga0e9d051e068940f722f6fdc61814149d">&#9670;&nbsp;</a></span>hwloc_cpuset_from_linux_libnuma_ulongs()</h2>
67
68 <div class="memitem">
69 <div class="memproto">
70 <table class="mlabels">
71 <tr>
72 <td class="mlabels-left">
73 <table class="memname">
74 <tr>
75 <td class="memname">static int hwloc_cpuset_from_linux_libnuma_ulongs </td>
76 <td>(</td>
77 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
78 <td class="paramname"><em>topology</em>, </td>
79 </tr>
80 <tr>
81 <td class="paramkey"></td>
82 <td></td>
83 <td class="paramtype"><a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
84 <td class="paramname"><em>cpuset</em>, </td>
85 </tr>
86 <tr>
87 <td class="paramkey"></td>
88 <td></td>
89 <td class="paramtype">const unsigned long *&#160;</td>
90 <td class="paramname"><em>mask</em>, </td>
91 </tr>
92 <tr>
93 <td class="paramkey"></td>
94 <td></td>
95 <td class="paramtype">unsigned long&#160;</td>
96 <td class="paramname"><em>maxnode</em>&#160;</td>
97 </tr>
98 <tr>
99 <td></td>
100 <td>)</td>
101 <td></td><td></td>
102 </tr>
103 </table>
104 </td>
105 <td class="mlabels-right">
106 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
107 </tr>
108 </table>
109 </div><div class="memdoc">
110
111 <p>Convert the array of unsigned long <code>mask</code> into hwloc CPU set. </p>
112 <p><code>mask</code> is a array of unsigned long that will be read. <code>maxnode</code> contains the maximal node number that may be read in <code>mask</code>.</p>
113 <p>This function may be used after calling get_mempolicy or any other function that takes an array of unsigned long as output parameter (and possibly a maximal node number as input parameter). </p>
114
115 </div>
116 </div>
117 <a id="gae577962390f84b0b12f503314ab0f972"></a>
118 <h2 class="memtitle"><span class="permalink"><a href="#gae577962390f84b0b12f503314ab0f972">&#9670;&nbsp;</a></span>hwloc_cpuset_to_linux_libnuma_ulongs()</h2>
119
120 <div class="memitem">
121 <div class="memproto">
122 <table class="mlabels">
123 <tr>
124 <td class="mlabels-left">
125 <table class="memname">
126 <tr>
127 <td class="memname">static int hwloc_cpuset_to_linux_libnuma_ulongs </td>
128 <td>(</td>
129 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
130 <td class="paramname"><em>topology</em>, </td>
131 </tr>
132 <tr>
133 <td class="paramkey"></td>
134 <td></td>
135 <td class="paramtype"><a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
136 <td class="paramname"><em>cpuset</em>, </td>
137 </tr>
138 <tr>
139 <td class="paramkey"></td>
140 <td></td>
141 <td class="paramtype">unsigned long *&#160;</td>
142 <td class="paramname"><em>mask</em>, </td>
143 </tr>
144 <tr>
145 <td class="paramkey"></td>
146 <td></td>
147 <td class="paramtype">unsigned long *&#160;</td>
148 <td class="paramname"><em>maxnode</em>&#160;</td>
149 </tr>
150 <tr>
151 <td></td>
152 <td>)</td>
153 <td></td><td></td>
154 </tr>
155 </table>
156 </td>
157 <td class="mlabels-right">
158 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
159 </tr>
160 </table>
161 </div><div class="memdoc">
162
163 <p>Convert hwloc CPU set <code>cpuset</code> into the array of unsigned long <code>mask</code>. </p>
164 <p><code>mask</code> is the array of unsigned long that will be filled. <code>maxnode</code> contains the maximal node number that may be stored in <code>mask</code>. <code>maxnode</code> will be set to the maximal node number that was found, plus one.</p>
165 <p>This function may be used before calling set_mempolicy, mbind, migrate_pages or any other function that takes an array of unsigned long and a maximal node number as input parameter. </p>
166
167 </div>
168 </div>
169 <a id="gad8491c672eb2594cc5e7b0a026867192"></a>
170 <h2 class="memtitle"><span class="permalink"><a href="#gad8491c672eb2594cc5e7b0a026867192">&#9670;&nbsp;</a></span>hwloc_nodeset_from_linux_libnuma_ulongs()</h2>
171
172 <div class="memitem">
173 <div class="memproto">
174 <table class="mlabels">
175 <tr>
176 <td class="mlabels-left">
177 <table class="memname">
178 <tr>
179 <td class="memname">static int hwloc_nodeset_from_linux_libnuma_ulongs </td>
180 <td>(</td>
181 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
182 <td class="paramname"><em>topology</em>, </td>
183 </tr>
184 <tr>
185 <td class="paramkey"></td>
186 <td></td>
187 <td class="paramtype"><a class="el" href="a00192.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a>&#160;</td>
188 <td class="paramname"><em>nodeset</em>, </td>
189 </tr>
190 <tr>
191 <td class="paramkey"></td>
192 <td></td>
193 <td class="paramtype">const unsigned long *&#160;</td>
194 <td class="paramname"><em>mask</em>, </td>
195 </tr>
196 <tr>
197 <td class="paramkey"></td>
198 <td></td>
199 <td class="paramtype">unsigned long&#160;</td>
200 <td class="paramname"><em>maxnode</em>&#160;</td>
201 </tr>
202 <tr>
203 <td></td>
204 <td>)</td>
205 <td></td><td></td>
206 </tr>
207 </table>
208 </td>
209 <td class="mlabels-right">
210 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
211 </tr>
212 </table>
213 </div><div class="memdoc">
214
215 <p>Convert the array of unsigned long <code>mask</code> into hwloc NUMA node set. </p>
216 <p><code>mask</code> is a array of unsigned long that will be read. <code>maxnode</code> contains the maximal node number that may be read in <code>mask</code>.</p>
217 <p>This function may be used after calling get_mempolicy or any other function that takes an array of unsigned long as output parameter (and possibly a maximal node number as input parameter). </p>
218
219 </div>
220 </div>
221 <a id="ga585ccf818d2f217f4e53f9c6506c3128"></a>
222 <h2 class="memtitle"><span class="permalink"><a href="#ga585ccf818d2f217f4e53f9c6506c3128">&#9670;&nbsp;</a></span>hwloc_nodeset_to_linux_libnuma_ulongs()</h2>
223
224 <div class="memitem">
225 <div class="memproto">
226 <table class="mlabels">
227 <tr>
228 <td class="mlabels-left">
229 <table class="memname">
230 <tr>
231 <td class="memname">static int hwloc_nodeset_to_linux_libnuma_ulongs </td>
232 <td>(</td>
233 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
234 <td class="paramname"><em>topology</em>, </td>
235 </tr>
236 <tr>
237 <td class="paramkey"></td>
238 <td></td>
239 <td class="paramtype"><a class="el" href="a00192.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a>&#160;</td>
240 <td class="paramname"><em>nodeset</em>, </td>
241 </tr>
242 <tr>
243 <td class="paramkey"></td>
244 <td></td>
245 <td class="paramtype">unsigned long *&#160;</td>
246 <td class="paramname"><em>mask</em>, </td>
247 </tr>
248 <tr>
249 <td class="paramkey"></td>
250 <td></td>
251 <td class="paramtype">unsigned long *&#160;</td>
252 <td class="paramname"><em>maxnode</em>&#160;</td>
253 </tr>
254 <tr>
255 <td></td>
256 <td>)</td>
257 <td></td><td></td>
258 </tr>
259 </table>
260 </td>
261 <td class="mlabels-right">
262 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
263 </tr>
264 </table>
265 </div><div class="memdoc">
266
267 <p>Convert hwloc NUMA node set <code>nodeset</code> into the array of unsigned long <code>mask</code>. </p>
268 <p><code>mask</code> is the array of unsigned long that will be filled. <code>maxnode</code> contains the maximal node number that may be stored in <code>mask</code>. <code>maxnode</code> will be set to the maximal node number that was found, plus one.</p>
269 <p>This function may be used before calling set_mempolicy, mbind, migrate_pages or any other function that takes an array of unsigned long and a maximal node number as input parameter. </p>
292270
293271 </div>
294272 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Interoperability with the CUDA Runtime API</title>
7 <title>Hardware Locality (hwloc): Interoperability with Linux libnuma bitmask</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4141 <div class="summary">
4242 <a href="#func-members">Functions</a> </div>
4343 <div class="headertitle">
44 <div class="title">Interoperability with the CUDA Runtime API</div> </div>
44 <div class="title">Interoperability with Linux libnuma bitmask</div> </div>
4545 </div><!--header-->
4646 <div class="contents">
4747 <table class="memberdecls">
4848 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
4949 Functions</h2></td></tr>
50 <tr class="memitem:gad8b701d9a34923e34bd58defd4c1e704"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00226.html#gad8b701d9a34923e34bd58defd4c1e704">hwloc_cudart_get_device_pci_ids</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int idx, int *domain, int *bus, int *dev)</td></tr>
51 <tr class="separator:gad8b701d9a34923e34bd58defd4c1e704"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:ga187ca00c6e12800a25151ce331620980"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00226.html#ga187ca00c6e12800a25151ce331620980">hwloc_cudart_get_device_cpuset</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int idx, <a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</td></tr>
53 <tr class="separator:ga187ca00c6e12800a25151ce331620980"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:gaeda4e6efbb36b518b2c286434ad23bb2"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00226.html#gaeda4e6efbb36b518b2c286434ad23bb2">hwloc_cudart_get_device_pcidev</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int idx)</td></tr>
55 <tr class="separator:gaeda4e6efbb36b518b2c286434ad23bb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:gac0f3eeaf7712919f298097b1a21307b0"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00226.html#gac0f3eeaf7712919f298097b1a21307b0">hwloc_cudart_get_device_osdev_by_index</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned idx)</td></tr>
57 <tr class="separator:gac0f3eeaf7712919f298097b1a21307b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
50 <tr class="memitem:gad8769b4544c0aeef154fc8223144e343"><td class="memItemLeft" align="right" valign="top">static struct bitmask *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00226.html#gad8769b4544c0aeef154fc8223144e343">hwloc_cpuset_to_linux_libnuma_bitmask</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> cpuset)</td></tr>
51 <tr class="separator:gad8769b4544c0aeef154fc8223144e343"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:gadfaa14c1bec76965ac2e05f0c3f3473b"><td class="memItemLeft" align="right" valign="top">static struct bitmask *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00226.html#gadfaa14c1bec76965ac2e05f0c3f3473b">hwloc_nodeset_to_linux_libnuma_bitmask</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00192.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a> nodeset)</td></tr>
53 <tr class="separator:gadfaa14c1bec76965ac2e05f0c3f3473b"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:ga37c8421110b1842414809019098794ef"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00226.html#ga37c8421110b1842414809019098794ef">hwloc_cpuset_from_linux_libnuma_bitmask</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> cpuset, const struct bitmask *bitmask)</td></tr>
55 <tr class="separator:ga37c8421110b1842414809019098794ef"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:gaaca6bff3086aad5bdbd2f4c5f0ad14cc"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00226.html#gaaca6bff3086aad5bdbd2f4c5f0ad14cc">hwloc_nodeset_from_linux_libnuma_bitmask</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00192.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a> nodeset, const struct bitmask *bitmask)</td></tr>
57 <tr class="separator:gaaca6bff3086aad5bdbd2f4c5f0ad14cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
5858 </table>
5959 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
60 <p>This interface offers ways to retrieve topology information about CUDA devices when using the CUDA Runtime API. </p>
60 <p>This interface helps converting between Linux libnuma bitmasks and hwloc cpusets and nodesets.</p>
61 <dl class="section note"><dt>Note</dt><dd>Topology <code>topology</code> must match the current machine.</dd>
62 <dd>
63 The behavior of libnuma is undefined if the kernel is not NUMA-aware. (when CONFIG_NUMA is not set in the kernel configuration). This helper and libnuma may thus not be strictly compatible in this case, which may be detected by checking whether numa_available() returns -1. </dd></dl>
6164 <h2 class="groupheader">Function Documentation</h2>
62 <a id="ga187ca00c6e12800a25151ce331620980"></a>
63 <h2 class="memtitle"><span class="permalink"><a href="#ga187ca00c6e12800a25151ce331620980">&#9670;&nbsp;</a></span>hwloc_cudart_get_device_cpuset()</h2>
64
65 <div class="memitem">
66 <div class="memproto">
67 <table class="mlabels">
68 <tr>
69 <td class="mlabels-left">
70 <table class="memname">
71 <tr>
72 <td class="memname">static int hwloc_cudart_get_device_cpuset </td>
73 <td>(</td>
74 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
75 <td class="paramname"><em>topology</em>, </td>
76 </tr>
77 <tr>
78 <td class="paramkey"></td>
79 <td></td>
80 <td class="paramtype">int&#160;</td>
81 <td class="paramname"><em>idx</em>, </td>
82 </tr>
83 <tr>
84 <td class="paramkey"></td>
85 <td></td>
86 <td class="paramtype"><a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
87 <td class="paramname"><em>set</em>&#160;</td>
88 </tr>
89 <tr>
90 <td></td>
91 <td>)</td>
92 <td></td><td></td>
93 </tr>
94 </table>
95 </td>
96 <td class="mlabels-right">
97 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
98 </tr>
99 </table>
100 </div><div class="memdoc">
101
102 <p>Get the CPU set of processors that are physically close to device <code>idx</code>. </p>
103 <p>Return the CPU set describing the locality of the CUDA device whose index is <code>idx</code>.</p>
104 <p>Topology <code>topology</code> and device <code>idx</code> must match the local machine. I/O devices detection and the CUDA component are not needed in the topology.</p>
105 <p>The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see <a class="el" href="a00226.html#gac0f3eeaf7712919f298097b1a21307b0" title="Get the hwloc OS device object corresponding to the CUDA device whose index is idx.">hwloc_cudart_get_device_osdev_by_index()</a>.</p>
106 <p>This function is currently only implemented in a meaningful way for Linux; other systems will simply get a full cpuset. </p>
107
108 </div>
109 </div>
110 <a id="gac0f3eeaf7712919f298097b1a21307b0"></a>
111 <h2 class="memtitle"><span class="permalink"><a href="#gac0f3eeaf7712919f298097b1a21307b0">&#9670;&nbsp;</a></span>hwloc_cudart_get_device_osdev_by_index()</h2>
112
113 <div class="memitem">
114 <div class="memproto">
115 <table class="mlabels">
116 <tr>
117 <td class="mlabels-left">
118 <table class="memname">
119 <tr>
120 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_cudart_get_device_osdev_by_index </td>
121 <td>(</td>
122 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
123 <td class="paramname"><em>topology</em>, </td>
124 </tr>
125 <tr>
126 <td class="paramkey"></td>
127 <td></td>
128 <td class="paramtype">unsigned&#160;</td>
129 <td class="paramname"><em>idx</em>&#160;</td>
130 </tr>
131 <tr>
132 <td></td>
133 <td>)</td>
134 <td></td><td></td>
135 </tr>
136 </table>
137 </td>
138 <td class="mlabels-right">
139 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
140 </tr>
141 </table>
142 </div><div class="memdoc">
143
144 <p>Get the hwloc OS device object corresponding to the CUDA device whose index is <code>idx</code>. </p>
145 <p>Return the OS device object describing the CUDA device whose index is <code>idx</code>. Return NULL if there is none.</p>
146 <p>The topology <code>topology</code> 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 <a class="el" href="a00226.html#ga187ca00c6e12800a25151ce331620980" title="Get the CPU set of processors that are physically close to device idx.">hwloc_cudart_get_device_cpuset()</a>.</p>
147 <dl class="section note"><dt>Note</dt><dd>The corresponding PCI device object can be obtained by looking at the OS device parent object (unless PCI devices are filtered out).</dd>
148 <dd>
149 This function is identical to <a class="el" href="a00225.html#ga12ee892994ed037e8f64bbffda02cf2e" title="Get the hwloc OS device object corresponding to the CUDA device whose index is idx.">hwloc_cuda_get_device_osdev_by_index()</a>. </dd></dl>
150
151 </div>
152 </div>
153 <a id="gad8b701d9a34923e34bd58defd4c1e704"></a>
154 <h2 class="memtitle"><span class="permalink"><a href="#gad8b701d9a34923e34bd58defd4c1e704">&#9670;&nbsp;</a></span>hwloc_cudart_get_device_pci_ids()</h2>
155
156 <div class="memitem">
157 <div class="memproto">
158 <table class="mlabels">
159 <tr>
160 <td class="mlabels-left">
161 <table class="memname">
162 <tr>
163 <td class="memname">static int hwloc_cudart_get_device_pci_ids </td>
164 <td>(</td>
165 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
166 <td class="paramname"><em>topology</em>, </td>
167 </tr>
168 <tr>
169 <td class="paramkey"></td>
170 <td></td>
171 <td class="paramtype">int&#160;</td>
172 <td class="paramname"><em>idx</em>, </td>
173 </tr>
174 <tr>
175 <td class="paramkey"></td>
176 <td></td>
177 <td class="paramtype">int *&#160;</td>
178 <td class="paramname"><em>domain</em>, </td>
179 </tr>
180 <tr>
181 <td class="paramkey"></td>
182 <td></td>
183 <td class="paramtype">int *&#160;</td>
184 <td class="paramname"><em>bus</em>, </td>
185 </tr>
186 <tr>
187 <td class="paramkey"></td>
188 <td></td>
189 <td class="paramtype">int *&#160;</td>
190 <td class="paramname"><em>dev</em>&#160;</td>
191 </tr>
192 <tr>
193 <td></td>
194 <td>)</td>
195 <td></td><td></td>
196 </tr>
197 </table>
198 </td>
199 <td class="mlabels-right">
200 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
201 </tr>
202 </table>
203 </div><div class="memdoc">
204
205 <p>Return the domain, bus and device IDs of the CUDA device whose index is <code>idx</code>. </p>
206 <p>Device index <code>idx</code> must match the local machine. </p>
207
208 </div>
209 </div>
210 <a id="gaeda4e6efbb36b518b2c286434ad23bb2"></a>
211 <h2 class="memtitle"><span class="permalink"><a href="#gaeda4e6efbb36b518b2c286434ad23bb2">&#9670;&nbsp;</a></span>hwloc_cudart_get_device_pcidev()</h2>
212
213 <div class="memitem">
214 <div class="memproto">
215 <table class="mlabels">
216 <tr>
217 <td class="mlabels-left">
218 <table class="memname">
219 <tr>
220 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_cudart_get_device_pcidev </td>
221 <td>(</td>
222 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
223 <td class="paramname"><em>topology</em>, </td>
224 </tr>
225 <tr>
226 <td class="paramkey"></td>
227 <td></td>
228 <td class="paramtype">int&#160;</td>
229 <td class="paramname"><em>idx</em>&#160;</td>
230 </tr>
231 <tr>
232 <td></td>
233 <td>)</td>
234 <td></td><td></td>
235 </tr>
236 </table>
237 </td>
238 <td class="mlabels-right">
239 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
240 </tr>
241 </table>
242 </div><div class="memdoc">
243
244 <p>Get the hwloc PCI device object corresponding to the CUDA device whose index is <code>idx</code>. </p>
245 <p>Return the PCI device object describing the CUDA device whose index is <code>idx</code>. Return NULL if there is none.</p>
246 <p>Topology <code>topology</code> and device <code>idx</code> must match the local machine. I/O devices detection must be enabled in topology <code>topology</code>. The CUDA component is not needed in the topology. </p>
65 <a id="ga37c8421110b1842414809019098794ef"></a>
66 <h2 class="memtitle"><span class="permalink"><a href="#ga37c8421110b1842414809019098794ef">&#9670;&nbsp;</a></span>hwloc_cpuset_from_linux_libnuma_bitmask()</h2>
67
68 <div class="memitem">
69 <div class="memproto">
70 <table class="mlabels">
71 <tr>
72 <td class="mlabels-left">
73 <table class="memname">
74 <tr>
75 <td class="memname">static int hwloc_cpuset_from_linux_libnuma_bitmask </td>
76 <td>(</td>
77 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
78 <td class="paramname"><em>topology</em>, </td>
79 </tr>
80 <tr>
81 <td class="paramkey"></td>
82 <td></td>
83 <td class="paramtype"><a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
84 <td class="paramname"><em>cpuset</em>, </td>
85 </tr>
86 <tr>
87 <td class="paramkey"></td>
88 <td></td>
89 <td class="paramtype">const struct bitmask *&#160;</td>
90 <td class="paramname"><em>bitmask</em>&#160;</td>
91 </tr>
92 <tr>
93 <td></td>
94 <td>)</td>
95 <td></td><td></td>
96 </tr>
97 </table>
98 </td>
99 <td class="mlabels-right">
100 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
101 </tr>
102 </table>
103 </div><div class="memdoc">
104
105 <p>Convert libnuma bitmask <code>bitmask</code> into hwloc CPU set <code>cpuset</code>. </p>
106 <p>This function may be used after calling many numa_ functions that use a struct bitmask as an output parameter. </p>
107
108 </div>
109 </div>
110 <a id="gad8769b4544c0aeef154fc8223144e343"></a>
111 <h2 class="memtitle"><span class="permalink"><a href="#gad8769b4544c0aeef154fc8223144e343">&#9670;&nbsp;</a></span>hwloc_cpuset_to_linux_libnuma_bitmask()</h2>
112
113 <div class="memitem">
114 <div class="memproto">
115 <table class="mlabels">
116 <tr>
117 <td class="mlabels-left">
118 <table class="memname">
119 <tr>
120 <td class="memname">static struct bitmask * hwloc_cpuset_to_linux_libnuma_bitmask </td>
121 <td>(</td>
122 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
123 <td class="paramname"><em>topology</em>, </td>
124 </tr>
125 <tr>
126 <td class="paramkey"></td>
127 <td></td>
128 <td class="paramtype"><a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
129 <td class="paramname"><em>cpuset</em>&#160;</td>
130 </tr>
131 <tr>
132 <td></td>
133 <td>)</td>
134 <td></td><td></td>
135 </tr>
136 </table>
137 </td>
138 <td class="mlabels-right">
139 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
140 </tr>
141 </table>
142 </div><div class="memdoc">
143
144 <p>Convert hwloc CPU set <code>cpuset</code> into the returned libnuma bitmask. </p>
145 <p>The returned bitmask should later be freed with numa_bitmask_free.</p>
146 <p>This function may be used before calling many numa_ functions that use a struct bitmask as an input parameter.</p>
147 <dl class="section return"><dt>Returns</dt><dd>newly allocated struct bitmask. </dd></dl>
148
149 </div>
150 </div>
151 <a id="gaaca6bff3086aad5bdbd2f4c5f0ad14cc"></a>
152 <h2 class="memtitle"><span class="permalink"><a href="#gaaca6bff3086aad5bdbd2f4c5f0ad14cc">&#9670;&nbsp;</a></span>hwloc_nodeset_from_linux_libnuma_bitmask()</h2>
153
154 <div class="memitem">
155 <div class="memproto">
156 <table class="mlabels">
157 <tr>
158 <td class="mlabels-left">
159 <table class="memname">
160 <tr>
161 <td class="memname">static int hwloc_nodeset_from_linux_libnuma_bitmask </td>
162 <td>(</td>
163 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
164 <td class="paramname"><em>topology</em>, </td>
165 </tr>
166 <tr>
167 <td class="paramkey"></td>
168 <td></td>
169 <td class="paramtype"><a class="el" href="a00192.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a>&#160;</td>
170 <td class="paramname"><em>nodeset</em>, </td>
171 </tr>
172 <tr>
173 <td class="paramkey"></td>
174 <td></td>
175 <td class="paramtype">const struct bitmask *&#160;</td>
176 <td class="paramname"><em>bitmask</em>&#160;</td>
177 </tr>
178 <tr>
179 <td></td>
180 <td>)</td>
181 <td></td><td></td>
182 </tr>
183 </table>
184 </td>
185 <td class="mlabels-right">
186 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
187 </tr>
188 </table>
189 </div><div class="memdoc">
190
191 <p>Convert libnuma bitmask <code>bitmask</code> into hwloc NUMA node set <code>nodeset</code>. </p>
192 <p>This function may be used after calling many numa_ functions that use a struct bitmask as an output parameter. </p>
193
194 </div>
195 </div>
196 <a id="gadfaa14c1bec76965ac2e05f0c3f3473b"></a>
197 <h2 class="memtitle"><span class="permalink"><a href="#gadfaa14c1bec76965ac2e05f0c3f3473b">&#9670;&nbsp;</a></span>hwloc_nodeset_to_linux_libnuma_bitmask()</h2>
198
199 <div class="memitem">
200 <div class="memproto">
201 <table class="mlabels">
202 <tr>
203 <td class="mlabels-left">
204 <table class="memname">
205 <tr>
206 <td class="memname">static struct bitmask * hwloc_nodeset_to_linux_libnuma_bitmask </td>
207 <td>(</td>
208 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
209 <td class="paramname"><em>topology</em>, </td>
210 </tr>
211 <tr>
212 <td class="paramkey"></td>
213 <td></td>
214 <td class="paramtype"><a class="el" href="a00192.html#ga2f5276235841ad66a79bedad16a5a10c">hwloc_const_nodeset_t</a>&#160;</td>
215 <td class="paramname"><em>nodeset</em>&#160;</td>
216 </tr>
217 <tr>
218 <td></td>
219 <td>)</td>
220 <td></td><td></td>
221 </tr>
222 </table>
223 </td>
224 <td class="mlabels-right">
225 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
226 </tr>
227 </table>
228 </div><div class="memdoc">
229
230 <p>Convert hwloc NUMA node set <code>nodeset</code> into the returned libnuma bitmask. </p>
231 <p>The returned bitmask should later be freed with numa_bitmask_free.</p>
232 <p>This function may be used before calling many numa_ functions that use a struct bitmask as an input parameter.</p>
233 <dl class="section return"><dt>Returns</dt><dd>newly allocated struct bitmask. </dd></dl>
247234
248235 </div>
249236 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Interoperability with the NVIDIA Management Library</title>
7 <title>Hardware Locality (hwloc): Windows-specific helpers</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4141 <div class="summary">
4242 <a href="#func-members">Functions</a> </div>
4343 <div class="headertitle">
44 <div class="title">Interoperability with the NVIDIA Management Library</div> </div>
44 <div class="title">Windows-specific helpers</div> </div>
4545 </div><!--header-->
4646 <div class="contents">
4747 <table class="memberdecls">
4848 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
4949 Functions</h2></td></tr>
50 <tr class="memitem:ga26cf0036d09ec4d7cb692380fac9659d"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00227.html#ga26cf0036d09ec4d7cb692380fac9659d">hwloc_nvml_get_device_cpuset</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, nvmlDevice_t device, <a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</td></tr>
51 <tr class="separator:ga26cf0036d09ec4d7cb692380fac9659d"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:gacd50fd0e2766ee05bc13234b46714756"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00227.html#gacd50fd0e2766ee05bc13234b46714756">hwloc_nvml_get_device_osdev_by_index</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned idx)</td></tr>
53 <tr class="separator:gacd50fd0e2766ee05bc13234b46714756"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:gaf176159b5760a191871eff23f5a69ee9"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00227.html#gaf176159b5760a191871eff23f5a69ee9">hwloc_nvml_get_device_osdev</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, nvmlDevice_t device)</td></tr>
55 <tr class="separator:gaf176159b5760a191871eff23f5a69ee9"><td class="memSeparator" colspan="2">&#160;</td></tr>
50 <tr class="memitem:gaa4376a1969660a344911d117f645d3dd"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00227.html#gaa4376a1969660a344911d117f645d3dd">hwloc_windows_get_nr_processor_groups</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned long flags)</td></tr>
51 <tr class="separator:gaa4376a1969660a344911d117f645d3dd"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:ga167d1f28d3bd9defe1ffa940c14e8dd1"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00227.html#ga167d1f28d3bd9defe1ffa940c14e8dd1">hwloc_windows_get_processor_group_cpuset</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned pg_index, <a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> cpuset, unsigned long flags)</td></tr>
53 <tr class="separator:ga167d1f28d3bd9defe1ffa940c14e8dd1"><td class="memSeparator" colspan="2">&#160;</td></tr>
5654 </table>
5755 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
58 <p>This interface offers ways to retrieve topology information about devices managed by the NVIDIA Management Library (NVML). </p>
56 <p>These functions query Windows processor groups. These groups partition the operating system into virtual sets of up to 64 neighbor PUs. Threads and processes may only be bound inside a single group. Although Windows processor groups may be exposed in the hwloc hierarchy as hwloc Groups, they are also often merged into existing hwloc objects such as NUMA nodes or Packages. This API provides explicit information about Windows processor groups so that applications know whether binding to a large set of PUs may fail because it spans over multiple Windows processor groups. </p>
5957 <h2 class="groupheader">Function Documentation</h2>
60 <a id="ga26cf0036d09ec4d7cb692380fac9659d"></a>
61 <h2 class="memtitle"><span class="permalink"><a href="#ga26cf0036d09ec4d7cb692380fac9659d">&#9670;&nbsp;</a></span>hwloc_nvml_get_device_cpuset()</h2>
58 <a id="gaa4376a1969660a344911d117f645d3dd"></a>
59 <h2 class="memtitle"><span class="permalink"><a href="#gaa4376a1969660a344911d117f645d3dd">&#9670;&nbsp;</a></span>hwloc_windows_get_nr_processor_groups()</h2>
6260
6361 <div class="memitem">
6462 <div class="memproto">
65 <table class="mlabels">
66 <tr>
67 <td class="mlabels-left">
6863 <table class="memname">
6964 <tr>
70 <td class="memname">static int hwloc_nvml_get_device_cpuset </td>
65 <td class="memname">int hwloc_windows_get_nr_processor_groups </td>
7166 <td>(</td>
72 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
67 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
7368 <td class="paramname"><em>topology</em>, </td>
7469 </tr>
7570 <tr>
7671 <td class="paramkey"></td>
7772 <td></td>
78 <td class="paramtype">nvmlDevice_t&#160;</td>
79 <td class="paramname"><em>device</em>, </td>
80 </tr>
81 <tr>
82 <td class="paramkey"></td>
83 <td></td>
84 <td class="paramtype"><a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
85 <td class="paramname"><em>set</em>&#160;</td>
73 <td class="paramtype">unsigned long&#160;</td>
74 <td class="paramname"><em>flags</em>&#160;</td>
8675 </tr>
8776 <tr>
8877 <td></td>
9079 <td></td><td></td>
9180 </tr>
9281 </table>
93 </td>
94 <td class="mlabels-right">
95 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
96 </tr>
97 </table>
9882 </div><div class="memdoc">
9983
100 <p>Get the CPU set of processors that are physically close to NVML device <code>device</code>. </p>
101 <p>Return the CPU set describing the locality of the NVML device <code>device</code>.</p>
102 <p>Topology <code>topology</code> and device <code>device</code> must match the local machine. I/O devices detection and the NVML component are not needed in the topology.</p>
103 <p>The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see <a class="el" href="a00227.html#gaf176159b5760a191871eff23f5a69ee9" title="Get the hwloc OS device object corresponding to NVML device device.">hwloc_nvml_get_device_osdev()</a> and <a class="el" href="a00227.html#gacd50fd0e2766ee05bc13234b46714756" title="Get the hwloc OS device object corresponding to the NVML device whose index is idx.">hwloc_nvml_get_device_osdev_by_index()</a>.</p>
104 <p>This function is currently only implemented in a meaningful way for Linux; other systems will simply get a full cpuset. </p>
84 <p>Get the number of Windows processor groups. </p>
85 <p><code>flags</code> must be 0 for now.</p>
86 <dl class="section return"><dt>Returns</dt><dd>at least <code>1</code> on success. </dd>
87 <dd>
88 -1 on error, for instance if the topology does not match the current system (e.g. loaded from another machine through XML). </dd></dl>
10589
10690 </div>
10791 </div>
108 <a id="gaf176159b5760a191871eff23f5a69ee9"></a>
109 <h2 class="memtitle"><span class="permalink"><a href="#gaf176159b5760a191871eff23f5a69ee9">&#9670;&nbsp;</a></span>hwloc_nvml_get_device_osdev()</h2>
92 <a id="ga167d1f28d3bd9defe1ffa940c14e8dd1"></a>
93 <h2 class="memtitle"><span class="permalink"><a href="#ga167d1f28d3bd9defe1ffa940c14e8dd1">&#9670;&nbsp;</a></span>hwloc_windows_get_processor_group_cpuset()</h2>
11094
11195 <div class="memitem">
11296 <div class="memproto">
113 <table class="mlabels">
114 <tr>
115 <td class="mlabels-left">
11697 <table class="memname">
11798 <tr>
118 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_nvml_get_device_osdev </td>
99 <td class="memname">int hwloc_windows_get_processor_group_cpuset </td>
119100 <td>(</td>
120 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
101 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
121102 <td class="paramname"><em>topology</em>, </td>
122103 </tr>
123104 <tr>
124105 <td class="paramkey"></td>
125106 <td></td>
126 <td class="paramtype">nvmlDevice_t&#160;</td>
127 <td class="paramname"><em>device</em>&#160;</td>
107 <td class="paramtype">unsigned&#160;</td>
108 <td class="paramname"><em>pg_index</em>, </td>
109 </tr>
110 <tr>
111 <td class="paramkey"></td>
112 <td></td>
113 <td class="paramtype"><a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
114 <td class="paramname"><em>cpuset</em>, </td>
115 </tr>
116 <tr>
117 <td class="paramkey"></td>
118 <td></td>
119 <td class="paramtype">unsigned long&#160;</td>
120 <td class="paramname"><em>flags</em>&#160;</td>
128121 </tr>
129122 <tr>
130123 <td></td>
132125 <td></td><td></td>
133126 </tr>
134127 </table>
135 </td>
136 <td class="mlabels-right">
137 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
138 </tr>
139 </table>
140128 </div><div class="memdoc">
141129
142 <p>Get the hwloc OS device object corresponding to NVML device <code>device</code>. </p>
143 <p>Return the hwloc OS device object that describes the given NVML device <code>device</code>. Return NULL if there is none.</p>
144 <p>Topology <code>topology</code> and device <code>device</code> 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 <a class="el" href="a00227.html#ga26cf0036d09ec4d7cb692380fac9659d" title="Get the CPU set of processors that are physically close to NVML device device.">hwloc_nvml_get_device_cpuset()</a>.</p>
145 <dl class="section note"><dt>Note</dt><dd>The corresponding hwloc PCI device may be found by looking at the result parent pointer (unless PCI devices are filtered out). </dd></dl>
146
147 </div>
148 </div>
149 <a id="gacd50fd0e2766ee05bc13234b46714756"></a>
150 <h2 class="memtitle"><span class="permalink"><a href="#gacd50fd0e2766ee05bc13234b46714756">&#9670;&nbsp;</a></span>hwloc_nvml_get_device_osdev_by_index()</h2>
151
152 <div class="memitem">
153 <div class="memproto">
154 <table class="mlabels">
155 <tr>
156 <td class="mlabels-left">
157 <table class="memname">
158 <tr>
159 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_nvml_get_device_osdev_by_index </td>
160 <td>(</td>
161 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
162 <td class="paramname"><em>topology</em>, </td>
163 </tr>
164 <tr>
165 <td class="paramkey"></td>
166 <td></td>
167 <td class="paramtype">unsigned&#160;</td>
168 <td class="paramname"><em>idx</em>&#160;</td>
169 </tr>
170 <tr>
171 <td></td>
172 <td>)</td>
173 <td></td><td></td>
174 </tr>
175 </table>
176 </td>
177 <td class="mlabels-right">
178 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
179 </tr>
180 </table>
181 </div><div class="memdoc">
182
183 <p>Get the hwloc OS device object corresponding to the NVML device whose index is <code>idx</code>. </p>
184 <p>Return the OS device object describing the NVML device whose index is <code>idx</code>. Returns NULL if there is none.</p>
185 <p>The topology <code>topology</code> 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 NVML component must be enabled in the topology.</p>
186 <dl class="section note"><dt>Note</dt><dd>The corresponding PCI device object can be obtained by looking at the OS device parent object (unless PCI devices are filtered out). </dd></dl>
130 <p>Get the CPU-set of a Windows processor group. </p>
131 <p>Get the set of PU included in the processor group specified by <code>pg_index</code>. <code>pg_index</code> must be between <code>0</code> and the value returned by <a class="el" href="a00227.html#gaa4376a1969660a344911d117f645d3dd" title="Get the number of Windows processor groups.">hwloc_windows_get_nr_processor_groups()</a> minus 1.</p>
132 <p><code>flags</code> must be 0 for now.</p>
133 <dl class="section return"><dt>Returns</dt><dd><code>0</code> on success. </dd>
134 <dd>
135 <code>-1</code> on error, for instance if <code>pg_index</code> is invalid, or if the topology does not match the current system (e.g. loaded from another machine through XML). </dd></dl>
187136
188137 </div>
189138 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Interoperability with the ROCm SMI Management Library</title>
7 <title>Hardware Locality (hwloc): Interoperability with glibc sched affinity</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4141 <div class="summary">
4242 <a href="#func-members">Functions</a> </div>
4343 <div class="headertitle">
44 <div class="title">Interoperability with the ROCm SMI Management Library</div> </div>
44 <div class="title">Interoperability with glibc sched affinity</div> </div>
4545 </div><!--header-->
4646 <div class="contents">
4747 <table class="memberdecls">
4848 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
4949 Functions</h2></td></tr>
50 <tr class="memitem:gaf939e697e3769c3524255318262b9c29"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#gaf939e697e3769c3524255318262b9c29">hwloc_rsmi_get_device_cpuset</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, uint32_t dv_ind, <a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</td></tr>
51 <tr class="separator:gaf939e697e3769c3524255318262b9c29"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:ga507d0acdd5e9ac374a8d120d59604c80"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#ga507d0acdd5e9ac374a8d120d59604c80">hwloc_rsmi_get_device_osdev_by_index</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, uint32_t dv_ind)</td></tr>
53 <tr class="separator:ga507d0acdd5e9ac374a8d120d59604c80"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:gaba05bf9710655bb5b1439bee654340ba"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#gaba05bf9710655bb5b1439bee654340ba">hwloc_rsmi_get_device_osdev</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, uint32_t dv_ind)</td></tr>
55 <tr class="separator:gaba05bf9710655bb5b1439bee654340ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
50 <tr class="memitem:ga88699a0c86c66a9b7baa3468cd9d24c3"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#ga88699a0c86c66a9b7baa3468cd9d24c3">hwloc_cpuset_to_glibc_sched_affinity</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a> hwlocset, cpu_set_t *schedset, size_t schedsetsize)</td></tr>
51 <tr class="separator:ga88699a0c86c66a9b7baa3468cd9d24c3"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:ga8ec807ec17de57fa77aa5cfd6c8e4bfb"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00228.html#ga8ec807ec17de57fa77aa5cfd6c8e4bfb">hwloc_cpuset_from_glibc_sched_affinity</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> hwlocset, const cpu_set_t *schedset, size_t schedsetsize)</td></tr>
53 <tr class="separator:ga8ec807ec17de57fa77aa5cfd6c8e4bfb"><td class="memSeparator" colspan="2">&#160;</td></tr>
5654 </table>
5755 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
58 <p>This interface offers ways to retrieve topology information about devices managed by the ROCm SMI Management Library. </p>
56 <p>This interface offers ways to convert between hwloc cpusets and glibc cpusets such as those manipulated by sched_getaffinity() or pthread_attr_setaffinity_np().</p>
57 <dl class="section note"><dt>Note</dt><dd>Topology <code>topology</code> must match the current machine. </dd></dl>
5958 <h2 class="groupheader">Function Documentation</h2>
60 <a id="gaf939e697e3769c3524255318262b9c29"></a>
61 <h2 class="memtitle"><span class="permalink"><a href="#gaf939e697e3769c3524255318262b9c29">&#9670;&nbsp;</a></span>hwloc_rsmi_get_device_cpuset()</h2>
59 <a id="ga8ec807ec17de57fa77aa5cfd6c8e4bfb"></a>
60 <h2 class="memtitle"><span class="permalink"><a href="#ga8ec807ec17de57fa77aa5cfd6c8e4bfb">&#9670;&nbsp;</a></span>hwloc_cpuset_from_glibc_sched_affinity()</h2>
6261
6362 <div class="memitem">
6463 <div class="memproto">
6766 <td class="mlabels-left">
6867 <table class="memname">
6968 <tr>
70 <td class="memname">static int hwloc_rsmi_get_device_cpuset </td>
69 <td class="memname">static int hwloc_cpuset_from_glibc_sched_affinity </td>
7170 <td>(</td>
72 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
71 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
7372 <td class="paramname"><em>topology</em>, </td>
7473 </tr>
7574 <tr>
7675 <td class="paramkey"></td>
7776 <td></td>
78 <td class="paramtype">uint32_t&#160;</td>
79 <td class="paramname"><em>dv_ind</em>, </td>
77 <td class="paramtype"><a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
78 <td class="paramname"><em>hwlocset</em>, </td>
8079 </tr>
8180 <tr>
8281 <td class="paramkey"></td>
8382 <td></td>
84 <td class="paramtype"><a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
85 <td class="paramname"><em>set</em>&#160;</td>
83 <td class="paramtype">const cpu_set_t *&#160;</td>
84 <td class="paramname"><em>schedset</em>, </td>
85 </tr>
86 <tr>
87 <td class="paramkey"></td>
88 <td></td>
89 <td class="paramtype">size_t&#160;</td>
90 <td class="paramname"><em>schedsetsize</em>&#160;</td>
8691 </tr>
8792 <tr>
8893 <td></td>
97102 </table>
98103 </div><div class="memdoc">
99104
100 <p>Get the CPU set of logical processors that are physically close to AMD GPU device whose index is <code>dv_ind</code>. </p>
101 <p>Return the CPU set describing the locality of the AMD GPU device whose index is <code>dv_ind</code>.</p>
102 <p>Topology <code>topology</code> and device <code>dv_ind</code> must match the local machine. I/O devices detection and the ROCm SMI component are not needed in the topology.</p>
103 <p>The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see <a class="el" href="a00228.html#gaba05bf9710655bb5b1439bee654340ba" title="Get the hwloc OS device object corresponding to AMD GPU device, whose index is dv_ind.">hwloc_rsmi_get_device_osdev()</a> and <a class="el" href="a00228.html#ga507d0acdd5e9ac374a8d120d59604c80" title="Get the hwloc OS device object corresponding to the AMD GPU device whose index is dv_ind.">hwloc_rsmi_get_device_osdev_by_index()</a>.</p>
104 <p>This function is currently only implemented in a meaningful way for Linux; other systems will simply get a full cpuset. </p>
105 <p>Convert glibc sched affinity CPU set <code>schedset</code> into hwloc CPU set. </p>
106 <p>This function may be used before calling sched_setaffinity or any other function that takes a cpu_set_t as input parameter.</p>
107 <p><code>schedsetsize</code> should be sizeof(cpu_set_t) unless <code>schedset</code> was dynamically allocated with CPU_ALLOC </p>
105108
106109 </div>
107110 </div>
108 <a id="gaba05bf9710655bb5b1439bee654340ba"></a>
109 <h2 class="memtitle"><span class="permalink"><a href="#gaba05bf9710655bb5b1439bee654340ba">&#9670;&nbsp;</a></span>hwloc_rsmi_get_device_osdev()</h2>
111 <a id="ga88699a0c86c66a9b7baa3468cd9d24c3"></a>
112 <h2 class="memtitle"><span class="permalink"><a href="#ga88699a0c86c66a9b7baa3468cd9d24c3">&#9670;&nbsp;</a></span>hwloc_cpuset_to_glibc_sched_affinity()</h2>
110113
111114 <div class="memitem">
112115 <div class="memproto">
115118 <td class="mlabels-left">
116119 <table class="memname">
117120 <tr>
118 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_rsmi_get_device_osdev </td>
121 <td class="memname">static int hwloc_cpuset_to_glibc_sched_affinity </td>
119122 <td>(</td>
120 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
123 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
121124 <td class="paramname"><em>topology</em>, </td>
122125 </tr>
123126 <tr>
124127 <td class="paramkey"></td>
125128 <td></td>
126 <td class="paramtype">uint32_t&#160;</td>
127 <td class="paramname"><em>dv_ind</em>&#160;</td>
129 <td class="paramtype"><a class="el" href="a00192.html#ga1f784433e9b606261f62d1134f6a3b25">hwloc_const_cpuset_t</a>&#160;</td>
130 <td class="paramname"><em>hwlocset</em>, </td>
131 </tr>
132 <tr>
133 <td class="paramkey"></td>
134 <td></td>
135 <td class="paramtype">cpu_set_t *&#160;</td>
136 <td class="paramname"><em>schedset</em>, </td>
137 </tr>
138 <tr>
139 <td class="paramkey"></td>
140 <td></td>
141 <td class="paramtype">size_t&#160;</td>
142 <td class="paramname"><em>schedsetsize</em>&#160;</td>
128143 </tr>
129144 <tr>
130145 <td></td>
139154 </table>
140155 </div><div class="memdoc">
141156
142 <p>Get the hwloc OS device object corresponding to AMD GPU device, whose index is <code>dv_ind</code>. </p>
143 <p>Return the hwloc OS device object that describes the given AMD GPU, whose index is <code>dv_ind</code> Return NULL if there is none.</p>
144 <p>Topology <code>topology</code> and device <code>dv_ind</code> 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 <a class="el" href="a00228.html#gaf939e697e3769c3524255318262b9c29" title="Get the CPU set of logical processors that are physically close to AMD GPU device whose index is dv_i...">hwloc_rsmi_get_device_cpuset()</a>.</p>
145 <dl class="section note"><dt>Note</dt><dd>The corresponding hwloc PCI device may be found by looking at the result parent pointer (unless PCI devices are filtered out). </dd></dl>
146
147 </div>
148 </div>
149 <a id="ga507d0acdd5e9ac374a8d120d59604c80"></a>
150 <h2 class="memtitle"><span class="permalink"><a href="#ga507d0acdd5e9ac374a8d120d59604c80">&#9670;&nbsp;</a></span>hwloc_rsmi_get_device_osdev_by_index()</h2>
151
152 <div class="memitem">
153 <div class="memproto">
154 <table class="mlabels">
155 <tr>
156 <td class="mlabels-left">
157 <table class="memname">
158 <tr>
159 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_rsmi_get_device_osdev_by_index </td>
160 <td>(</td>
161 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
162 <td class="paramname"><em>topology</em>, </td>
163 </tr>
164 <tr>
165 <td class="paramkey"></td>
166 <td></td>
167 <td class="paramtype">uint32_t&#160;</td>
168 <td class="paramname"><em>dv_ind</em>&#160;</td>
169 </tr>
170 <tr>
171 <td></td>
172 <td>)</td>
173 <td></td><td></td>
174 </tr>
175 </table>
176 </td>
177 <td class="mlabels-right">
178 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
179 </tr>
180 </table>
181 </div><div class="memdoc">
182
183 <p>Get the hwloc OS device object corresponding to the AMD GPU device whose index is <code>dv_ind</code>. </p>
184 <p>Return the OS device object describing the AMD GPU device whose index is <code>dv_ind</code>. Returns NULL if there is none.</p>
185 <p>The topology <code>topology</code> 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 ROCm SMI component must be enabled in the topology.</p>
186 <dl class="section note"><dt>Note</dt><dd>The corresponding PCI device object can be obtained by looking at the OS device parent object (unless PCI devices are filtered out). </dd></dl>
157 <p>Convert hwloc CPU set <code>toposet</code> into glibc sched affinity CPU set <code>schedset</code>. </p>
158 <p>This function may be used before calling sched_setaffinity or any other function that takes a cpu_set_t as input parameter.</p>
159 <p><code>schedsetsize</code> should be sizeof(cpu_set_t) unless <code>schedset</code> was dynamically allocated with CPU_ALLOC </p>
187160
188161 </div>
189162 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Interoperability with OpenGL displays</title>
7 <title>Hardware Locality (hwloc): Interoperability with OpenCL</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4141 <div class="summary">
4242 <a href="#func-members">Functions</a> </div>
4343 <div class="headertitle">
44 <div class="title">Interoperability with OpenGL displays</div> </div>
44 <div class="title">Interoperability with OpenCL</div> </div>
4545 </div><!--header-->
4646 <div class="contents">
4747 <table class="memberdecls">
4848 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
4949 Functions</h2></td></tr>
50 <tr class="memitem:ga4d66a77e4fe4051d6e5b772c1b8fcec5"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#ga4d66a77e4fe4051d6e5b772c1b8fcec5">hwloc_gl_get_display_osdev_by_port_device</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned port, unsigned device)</td></tr>
51 <tr class="separator:ga4d66a77e4fe4051d6e5b772c1b8fcec5"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:ga2d36ef441d1dfddf49cfb5c01bd58d8e"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#ga2d36ef441d1dfddf49cfb5c01bd58d8e">hwloc_gl_get_display_osdev_by_name</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const char *name)</td></tr>
53 <tr class="separator:ga2d36ef441d1dfddf49cfb5c01bd58d8e"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:ga936665ab5f0d29a081c4b78d11f4ad07"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#ga936665ab5f0d29a081c4b78d11f4ad07">hwloc_gl_get_display_by_osdev</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> osdev, unsigned *port, unsigned *device)</td></tr>
55 <tr class="separator:ga936665ab5f0d29a081c4b78d11f4ad07"><td class="memSeparator" colspan="2">&#160;</td></tr>
50 <tr class="memitem:gab89e4d20f8a353299351b41849e35ac9"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#gab89e4d20f8a353299351b41849e35ac9">hwloc_opencl_get_device_pci_busid</a> (cl_device_id device, unsigned *domain, unsigned *bus, unsigned *dev, unsigned *func)</td></tr>
51 <tr class="separator:gab89e4d20f8a353299351b41849e35ac9"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:gacc32737d4648d16b0d292438f210ec90"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#gacc32737d4648d16b0d292438f210ec90">hwloc_opencl_get_device_cpuset</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, cl_device_id device, <a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</td></tr>
53 <tr class="separator:gacc32737d4648d16b0d292438f210ec90"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:gae39352d124cb330eb37b84b418ed6cc5"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#gae39352d124cb330eb37b84b418ed6cc5">hwloc_opencl_get_device_osdev_by_index</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned platform_index, unsigned device_index)</td></tr>
55 <tr class="separator:gae39352d124cb330eb37b84b418ed6cc5"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:gadabfa6516aa12e5d8f79b9b4dd9f3cf8"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00229.html#gadabfa6516aa12e5d8f79b9b4dd9f3cf8">hwloc_opencl_get_device_osdev</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, cl_device_id device)</td></tr>
57 <tr class="separator:gadabfa6516aa12e5d8f79b9b4dd9f3cf8"><td class="memSeparator" colspan="2">&#160;</td></tr>
5658 </table>
5759 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
58 <p>This interface offers ways to retrieve topology information about OpenGL displays.</p>
59 <p>Only the NVIDIA display locality information is currently available, using the NV-CONTROL X11 extension and the NVCtrl library. </p>
60 <p>This interface offers ways to retrieve topology information about OpenCL devices.</p>
61 <p>Only AMD and NVIDIA OpenCL implementations currently offer useful locality information about their devices. </p>
6062 <h2 class="groupheader">Function Documentation</h2>
61 <a id="ga936665ab5f0d29a081c4b78d11f4ad07"></a>
62 <h2 class="memtitle"><span class="permalink"><a href="#ga936665ab5f0d29a081c4b78d11f4ad07">&#9670;&nbsp;</a></span>hwloc_gl_get_display_by_osdev()</h2>
63
64 <div class="memitem">
65 <div class="memproto">
66 <table class="mlabels">
67 <tr>
68 <td class="mlabels-left">
69 <table class="memname">
70 <tr>
71 <td class="memname">static int hwloc_gl_get_display_by_osdev </td>
72 <td>(</td>
73 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
63 <a id="gacc32737d4648d16b0d292438f210ec90"></a>
64 <h2 class="memtitle"><span class="permalink"><a href="#gacc32737d4648d16b0d292438f210ec90">&#9670;&nbsp;</a></span>hwloc_opencl_get_device_cpuset()</h2>
65
66 <div class="memitem">
67 <div class="memproto">
68 <table class="mlabels">
69 <tr>
70 <td class="mlabels-left">
71 <table class="memname">
72 <tr>
73 <td class="memname">static int hwloc_opencl_get_device_cpuset </td>
74 <td>(</td>
75 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
7476 <td class="paramname"><em>topology</em>, </td>
7577 </tr>
7678 <tr>
7779 <td class="paramkey"></td>
7880 <td></td>
79 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
80 <td class="paramname"><em>osdev</em>, </td>
81 </tr>
82 <tr>
83 <td class="paramkey"></td>
84 <td></td>
85 <td class="paramtype">unsigned *&#160;</td>
86 <td class="paramname"><em>port</em>, </td>
87 </tr>
88 <tr>
89 <td class="paramkey"></td>
90 <td></td>
91 <td class="paramtype">unsigned *&#160;</td>
81 <td class="paramtype">cl_device_id&#160;</td>
82 <td class="paramname"><em>device</em>, </td>
83 </tr>
84 <tr>
85 <td class="paramkey"></td>
86 <td></td>
87 <td class="paramtype"><a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
88 <td class="paramname"><em>set</em>&#160;</td>
89 </tr>
90 <tr>
91 <td></td>
92 <td>)</td>
93 <td></td><td></td>
94 </tr>
95 </table>
96 </td>
97 <td class="mlabels-right">
98 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
99 </tr>
100 </table>
101 </div><div class="memdoc">
102
103 <p>Get the CPU set of processors that are physically close to OpenCL device <code>device</code>. </p>
104 <p>Store in <code>set</code> the CPU-set describing the locality of the OpenCL device <code>device</code>.</p>
105 <p>Topology <code>topology</code> and device <code>device</code> must match the local machine. I/O devices detection and the OpenCL component are not needed in the topology.</p>
106 <p>The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see <a class="el" href="a00229.html#gadabfa6516aa12e5d8f79b9b4dd9f3cf8" title="Get the hwloc OS device object corresponding to OpenCL device deviceX.">hwloc_opencl_get_device_osdev()</a> and <a class="el" href="a00229.html#gae39352d124cb330eb37b84b418ed6cc5" title="Get the hwloc OS device object corresponding to the OpenCL device for the given indexes.">hwloc_opencl_get_device_osdev_by_index()</a>.</p>
107 <p>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. </p>
108
109 </div>
110 </div>
111 <a id="gadabfa6516aa12e5d8f79b9b4dd9f3cf8"></a>
112 <h2 class="memtitle"><span class="permalink"><a href="#gadabfa6516aa12e5d8f79b9b4dd9f3cf8">&#9670;&nbsp;</a></span>hwloc_opencl_get_device_osdev()</h2>
113
114 <div class="memitem">
115 <div class="memproto">
116 <table class="mlabels">
117 <tr>
118 <td class="mlabels-left">
119 <table class="memname">
120 <tr>
121 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_opencl_get_device_osdev </td>
122 <td>(</td>
123 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
124 <td class="paramname"><em>topology</em>, </td>
125 </tr>
126 <tr>
127 <td class="paramkey"></td>
128 <td></td>
129 <td class="paramtype">cl_device_id&#160;</td>
92130 <td class="paramname"><em>device</em>&#160;</td>
93131 </tr>
94132 <tr>
104142 </table>
105143 </div><div class="memdoc">
106144
107 <p>Get the OpenGL display port and device corresponding to the given hwloc OS object. </p>
108 <p>Return the OpenGL display port (server) in <code>port</code> and device (screen) in <code>screen</code> that correspond to the given hwloc OS device object. Return <code>-1</code> if there is none.</p>
109 <p>The topology <code>topology</code> 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 GL component must be enabled in the topology. </p>
110
111 </div>
112 </div>
113 <a id="ga2d36ef441d1dfddf49cfb5c01bd58d8e"></a>
114 <h2 class="memtitle"><span class="permalink"><a href="#ga2d36ef441d1dfddf49cfb5c01bd58d8e">&#9670;&nbsp;</a></span>hwloc_gl_get_display_osdev_by_name()</h2>
115
116 <div class="memitem">
117 <div class="memproto">
118 <table class="mlabels">
119 <tr>
120 <td class="mlabels-left">
121 <table class="memname">
122 <tr>
123 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_gl_get_display_osdev_by_name </td>
124 <td>(</td>
125 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
145 <p>Get the hwloc OS device object corresponding to OpenCL device <code>deviceX</code>. </p>
146 <dl class="section return"><dt>Returns</dt><dd>The hwloc OS device object corresponding to the given OpenCL device <code>device</code>. </dd>
147 <dd>
148 <code>NULL</code> if none could be found, for instance if required OpenCL attributes are not available.</dd></dl>
149 <p>This function currently only works on AMD and NVIDIA OpenCL devices that support relevant OpenCL extensions. <a class="el" href="a00229.html#gae39352d124cb330eb37b84b418ed6cc5" title="Get the hwloc OS device object corresponding to the OpenCL device for the given indexes.">hwloc_opencl_get_device_osdev_by_index()</a> should be preferred whenever possible, i.e. when platform and device index are known.</p>
150 <p>Topology <code>topology</code> and device <code>device</code> 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 <a class="el" href="a00229.html#gacc32737d4648d16b0d292438f210ec90" title="Get the CPU set of processors that are physically close to OpenCL device device.">hwloc_opencl_get_device_cpuset()</a>.</p>
151 <dl class="section note"><dt>Note</dt><dd>This function cannot work if PCI devices are filtered out.</dd>
152 <dd>
153 The corresponding hwloc PCI device may be found by looking at the result parent pointer (unless PCI devices are filtered out). </dd></dl>
154
155 </div>
156 </div>
157 <a id="gae39352d124cb330eb37b84b418ed6cc5"></a>
158 <h2 class="memtitle"><span class="permalink"><a href="#gae39352d124cb330eb37b84b418ed6cc5">&#9670;&nbsp;</a></span>hwloc_opencl_get_device_osdev_by_index()</h2>
159
160 <div class="memitem">
161 <div class="memproto">
162 <table class="mlabels">
163 <tr>
164 <td class="mlabels-left">
165 <table class="memname">
166 <tr>
167 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_opencl_get_device_osdev_by_index </td>
168 <td>(</td>
169 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
126170 <td class="paramname"><em>topology</em>, </td>
127171 </tr>
128172 <tr>
129173 <td class="paramkey"></td>
130174 <td></td>
131 <td class="paramtype">const char *&#160;</td>
132 <td class="paramname"><em>name</em>&#160;</td>
133 </tr>
134 <tr>
135 <td></td>
136 <td>)</td>
137 <td></td><td></td>
138 </tr>
139 </table>
140 </td>
141 <td class="mlabels-right">
142 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
143 </tr>
144 </table>
145 </div><div class="memdoc">
146
147 <p>Get the hwloc OS device object corresponding to the OpenGL display given by name. </p>
148 <p>Return the OS device object describing the OpenGL display whose name is <code>name</code>, built as ":port.device" such as ":0.0" . Return NULL if there is none.</p>
149 <p>The topology <code>topology</code> 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 GL component must be enabled in the topology.</p>
175 <td class="paramtype">unsigned&#160;</td>
176 <td class="paramname"><em>platform_index</em>, </td>
177 </tr>
178 <tr>
179 <td class="paramkey"></td>
180 <td></td>
181 <td class="paramtype">unsigned&#160;</td>
182 <td class="paramname"><em>device_index</em>&#160;</td>
183 </tr>
184 <tr>
185 <td></td>
186 <td>)</td>
187 <td></td><td></td>
188 </tr>
189 </table>
190 </td>
191 <td class="mlabels-right">
192 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
193 </tr>
194 </table>
195 </div><div class="memdoc">
196
197 <p>Get the hwloc OS device object corresponding to the OpenCL device for the given indexes. </p>
198 <dl class="section return"><dt>Returns</dt><dd>The hwloc OS device object describing the OpenCL device whose platform index is <code>platform_index</code>, and whose device index within this platform if <code>device_index</code>. </dd>
199 <dd>
200 <code>NULL</code> if there is none.</dd></dl>
201 <p>The topology <code>topology</code> 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 OpenCL component must be enabled in the topology.</p>
150202 <dl class="section note"><dt>Note</dt><dd>The corresponding PCI device object can be obtained by looking at the OS device parent object (unless PCI devices are filtered out). </dd></dl>
151203
152204 </div>
153205 </div>
154 <a id="ga4d66a77e4fe4051d6e5b772c1b8fcec5"></a>
155 <h2 class="memtitle"><span class="permalink"><a href="#ga4d66a77e4fe4051d6e5b772c1b8fcec5">&#9670;&nbsp;</a></span>hwloc_gl_get_display_osdev_by_port_device()</h2>
156
157 <div class="memitem">
158 <div class="memproto">
159 <table class="mlabels">
160 <tr>
161 <td class="mlabels-left">
162 <table class="memname">
163 <tr>
164 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_gl_get_display_osdev_by_port_device </td>
165 <td>(</td>
166 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
167 <td class="paramname"><em>topology</em>, </td>
168 </tr>
169 <tr>
170 <td class="paramkey"></td>
171 <td></td>
172 <td class="paramtype">unsigned&#160;</td>
173 <td class="paramname"><em>port</em>, </td>
174 </tr>
175 <tr>
176 <td class="paramkey"></td>
177 <td></td>
178 <td class="paramtype">unsigned&#160;</td>
179 <td class="paramname"><em>device</em>&#160;</td>
180 </tr>
181 <tr>
182 <td></td>
183 <td>)</td>
184 <td></td><td></td>
185 </tr>
186 </table>
187 </td>
188 <td class="mlabels-right">
189 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
190 </tr>
191 </table>
192 </div><div class="memdoc">
193
194 <p>Get the hwloc OS device object corresponding to the OpenGL display given by port and device index. </p>
195 <p>Return the OS device object describing the OpenGL display whose port (server) is <code>port</code> and device (screen) is <code>device</code>. Return NULL if there is none.</p>
196 <p>The topology <code>topology</code> 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 GL component must be enabled in the topology.</p>
197 <dl class="section note"><dt>Note</dt><dd>The corresponding PCI device object can be obtained by looking at the OS device parent object (unless PCI devices are filtered out). </dd></dl>
206 <a id="gab89e4d20f8a353299351b41849e35ac9"></a>
207 <h2 class="memtitle"><span class="permalink"><a href="#gab89e4d20f8a353299351b41849e35ac9">&#9670;&nbsp;</a></span>hwloc_opencl_get_device_pci_busid()</h2>
208
209 <div class="memitem">
210 <div class="memproto">
211 <table class="mlabels">
212 <tr>
213 <td class="mlabels-left">
214 <table class="memname">
215 <tr>
216 <td class="memname">static int hwloc_opencl_get_device_pci_busid </td>
217 <td>(</td>
218 <td class="paramtype">cl_device_id&#160;</td>
219 <td class="paramname"><em>device</em>, </td>
220 </tr>
221 <tr>
222 <td class="paramkey"></td>
223 <td></td>
224 <td class="paramtype">unsigned *&#160;</td>
225 <td class="paramname"><em>domain</em>, </td>
226 </tr>
227 <tr>
228 <td class="paramkey"></td>
229 <td></td>
230 <td class="paramtype">unsigned *&#160;</td>
231 <td class="paramname"><em>bus</em>, </td>
232 </tr>
233 <tr>
234 <td class="paramkey"></td>
235 <td></td>
236 <td class="paramtype">unsigned *&#160;</td>
237 <td class="paramname"><em>dev</em>, </td>
238 </tr>
239 <tr>
240 <td class="paramkey"></td>
241 <td></td>
242 <td class="paramtype">unsigned *&#160;</td>
243 <td class="paramname"><em>func</em>&#160;</td>
244 </tr>
245 <tr>
246 <td></td>
247 <td>)</td>
248 <td></td><td></td>
249 </tr>
250 </table>
251 </td>
252 <td class="mlabels-right">
253 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
254 </tr>
255 </table>
256 </div><div class="memdoc">
257
258 <p>Return the domain, bus and device IDs of the OpenCL device <code>device</code>. </p>
259 <p>Device <code>device</code> must match the local machine. </p>
198260
199261 </div>
200262 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Interoperability with OpenFabrics</title>
7 <title>Hardware Locality (hwloc): Interoperability with the CUDA Driver API</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4141 <div class="summary">
4242 <a href="#func-members">Functions</a> </div>
4343 <div class="headertitle">
44 <div class="title">Interoperability with OpenFabrics</div> </div>
44 <div class="title">Interoperability with the CUDA Driver API</div> </div>
4545 </div><!--header-->
4646 <div class="contents">
4747 <table class="memberdecls">
4848 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
4949 Functions</h2></td></tr>
50 <tr class="memitem:ga3ea0d838c1e7f1671b35687aae2da6ae"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html#ga3ea0d838c1e7f1671b35687aae2da6ae">hwloc_ibv_get_device_cpuset</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, struct ibv_device *ibdev, <a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</td></tr>
51 <tr class="separator:ga3ea0d838c1e7f1671b35687aae2da6ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:ga31d794567f4420bbdc8baa7bf8bf6138"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html#ga31d794567f4420bbdc8baa7bf8bf6138">hwloc_ibv_get_device_osdev_by_name</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const char *ibname)</td></tr>
53 <tr class="separator:ga31d794567f4420bbdc8baa7bf8bf6138"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:ga7324cdfd5db6ed2669c051ef7e1b64e1"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html#ga7324cdfd5db6ed2669c051ef7e1b64e1">hwloc_ibv_get_device_osdev</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, struct ibv_device *ibdev)</td></tr>
55 <tr class="separator:ga7324cdfd5db6ed2669c051ef7e1b64e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
50 <tr class="memitem:ga1084285e8ff8b7df91c28917637481c6"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html#ga1084285e8ff8b7df91c28917637481c6">hwloc_cuda_get_device_pci_ids</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, CUdevice cudevice, int *domain, int *bus, int *dev)</td></tr>
51 <tr class="separator:ga1084285e8ff8b7df91c28917637481c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:gaec41c6b4dc3361156beb7dea2a74f5a3"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html#gaec41c6b4dc3361156beb7dea2a74f5a3">hwloc_cuda_get_device_cpuset</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, CUdevice cudevice, <a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</td></tr>
53 <tr class="separator:gaec41c6b4dc3361156beb7dea2a74f5a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:ga11fed607fa404e29e8da010f3ec128e4"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html#ga11fed607fa404e29e8da010f3ec128e4">hwloc_cuda_get_device_pcidev</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, CUdevice cudevice)</td></tr>
55 <tr class="separator:ga11fed607fa404e29e8da010f3ec128e4"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:ga252cb72175f1a2d682f883a0add80a66"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html#ga252cb72175f1a2d682f883a0add80a66">hwloc_cuda_get_device_osdev</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, CUdevice cudevice)</td></tr>
57 <tr class="separator:ga252cb72175f1a2d682f883a0add80a66"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:ga12ee892994ed037e8f64bbffda02cf2e"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00230.html#ga12ee892994ed037e8f64bbffda02cf2e">hwloc_cuda_get_device_osdev_by_index</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned idx)</td></tr>
59 <tr class="separator:ga12ee892994ed037e8f64bbffda02cf2e"><td class="memSeparator" colspan="2">&#160;</td></tr>
5660 </table>
5761 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
58 <p>This interface offers ways to retrieve topology information about OpenFabrics devices (InfiniBand, Omni-Path, usNIC, etc). </p>
62 <p>This interface offers ways to retrieve topology information about CUDA devices when using the CUDA Driver API. </p>
5963 <h2 class="groupheader">Function Documentation</h2>
60 <a id="ga3ea0d838c1e7f1671b35687aae2da6ae"></a>
61 <h2 class="memtitle"><span class="permalink"><a href="#ga3ea0d838c1e7f1671b35687aae2da6ae">&#9670;&nbsp;</a></span>hwloc_ibv_get_device_cpuset()</h2>
62
63 <div class="memitem">
64 <div class="memproto">
65 <table class="mlabels">
66 <tr>
67 <td class="mlabels-left">
68 <table class="memname">
69 <tr>
70 <td class="memname">static int hwloc_ibv_get_device_cpuset </td>
71 <td>(</td>
72 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
73 <td class="paramname"><em>topology</em>, </td>
74 </tr>
75 <tr>
76 <td class="paramkey"></td>
77 <td></td>
78 <td class="paramtype">struct ibv_device *&#160;</td>
79 <td class="paramname"><em>ibdev</em>, </td>
80 </tr>
81 <tr>
82 <td class="paramkey"></td>
83 <td></td>
84 <td class="paramtype"><a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
64 <a id="gaec41c6b4dc3361156beb7dea2a74f5a3"></a>
65 <h2 class="memtitle"><span class="permalink"><a href="#gaec41c6b4dc3361156beb7dea2a74f5a3">&#9670;&nbsp;</a></span>hwloc_cuda_get_device_cpuset()</h2>
66
67 <div class="memitem">
68 <div class="memproto">
69 <table class="mlabels">
70 <tr>
71 <td class="mlabels-left">
72 <table class="memname">
73 <tr>
74 <td class="memname">static int hwloc_cuda_get_device_cpuset </td>
75 <td>(</td>
76 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
77 <td class="paramname"><em>topology</em>, </td>
78 </tr>
79 <tr>
80 <td class="paramkey"></td>
81 <td></td>
82 <td class="paramtype">CUdevice&#160;</td>
83 <td class="paramname"><em>cudevice</em>, </td>
84 </tr>
85 <tr>
86 <td class="paramkey"></td>
87 <td></td>
88 <td class="paramtype"><a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
8589 <td class="paramname"><em>set</em>&#160;</td>
8690 </tr>
8791 <tr>
97101 </table>
98102 </div><div class="memdoc">
99103
100 <p>Get the CPU set of processors that are physically close to device <code>ibdev</code>. </p>
101 <p>Return the CPU set describing the locality of the OpenFabrics device <code>ibdev</code> (InfiniBand, etc).</p>
102 <p>Topology <code>topology</code> and device <code>ibdev</code> must match the local machine. I/O devices detection is not needed in the topology.</p>
103 <p>The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see <a class="el" href="a00230.html#ga7324cdfd5db6ed2669c051ef7e1b64e1" title="Get the hwloc OS device object corresponding to the OpenFabrics device ibdev.">hwloc_ibv_get_device_osdev()</a> and <a class="el" href="a00230.html#ga31d794567f4420bbdc8baa7bf8bf6138" title="Get the hwloc OS device object corresponding to the OpenFabrics device named ibname.">hwloc_ibv_get_device_osdev_by_name()</a>.</p>
104 <p>Get the CPU set of processors that are physically close to device <code>cudevice</code>. </p>
105 <p>Store in <code>set</code> the CPU-set describing the locality of the CUDA device <code>cudevice</code>.</p>
106 <p>Topology <code>topology</code> and device <code>cudevice</code> must match the local machine. I/O devices detection and the CUDA component are not needed in the topology.</p>
107 <p>The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see <a class="el" href="a00230.html#ga252cb72175f1a2d682f883a0add80a66" title="Get the hwloc OS device object corresponding to CUDA device cudevice.">hwloc_cuda_get_device_osdev()</a> and <a class="el" href="a00230.html#ga12ee892994ed037e8f64bbffda02cf2e" title="Get the hwloc OS device object corresponding to the CUDA device whose index is idx.">hwloc_cuda_get_device_osdev_by_index()</a>.</p>
104108 <p>This function is currently only implemented in a meaningful way for Linux; other systems will simply get a full cpuset. </p>
105109
106110 </div>
107111 </div>
108 <a id="ga7324cdfd5db6ed2669c051ef7e1b64e1"></a>
109 <h2 class="memtitle"><span class="permalink"><a href="#ga7324cdfd5db6ed2669c051ef7e1b64e1">&#9670;&nbsp;</a></span>hwloc_ibv_get_device_osdev()</h2>
110
111 <div class="memitem">
112 <div class="memproto">
113 <table class="mlabels">
114 <tr>
115 <td class="mlabels-left">
116 <table class="memname">
117 <tr>
118 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_ibv_get_device_osdev </td>
119 <td>(</td>
120 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
121 <td class="paramname"><em>topology</em>, </td>
122 </tr>
123 <tr>
124 <td class="paramkey"></td>
125 <td></td>
126 <td class="paramtype">struct ibv_device *&#160;</td>
127 <td class="paramname"><em>ibdev</em>&#160;</td>
128 </tr>
129 <tr>
130 <td></td>
131 <td>)</td>
132 <td></td><td></td>
133 </tr>
134 </table>
135 </td>
136 <td class="mlabels-right">
137 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
138 </tr>
139 </table>
140 </div><div class="memdoc">
141
142 <p>Get the hwloc OS device object corresponding to the OpenFabrics device <code>ibdev</code>. </p>
143 <p>Return the OS device object describing the OpenFabrics device <code>ibdev</code> (InfiniBand, etc). Returns NULL if there is none.</p>
144 <p>Topology <code>topology</code> and device <code>ibdev</code> 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 <a class="el" href="a00230.html#ga3ea0d838c1e7f1671b35687aae2da6ae" title="Get the CPU set of processors that are physically close to device ibdev.">hwloc_ibv_get_device_cpuset()</a>.</p>
145 <dl class="section note"><dt>Note</dt><dd>The corresponding PCI device object can be obtained by looking at the OS device parent object. </dd></dl>
146
147 </div>
148 </div>
149 <a id="ga31d794567f4420bbdc8baa7bf8bf6138"></a>
150 <h2 class="memtitle"><span class="permalink"><a href="#ga31d794567f4420bbdc8baa7bf8bf6138">&#9670;&nbsp;</a></span>hwloc_ibv_get_device_osdev_by_name()</h2>
151
152 <div class="memitem">
153 <div class="memproto">
154 <table class="mlabels">
155 <tr>
156 <td class="mlabels-left">
157 <table class="memname">
158 <tr>
159 <td class="memname">static <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_ibv_get_device_osdev_by_name </td>
160 <td>(</td>
161 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
162 <td class="paramname"><em>topology</em>, </td>
163 </tr>
164 <tr>
165 <td class="paramkey"></td>
166 <td></td>
167 <td class="paramtype">const char *&#160;</td>
168 <td class="paramname"><em>ibname</em>&#160;</td>
169 </tr>
170 <tr>
171 <td></td>
172 <td>)</td>
173 <td></td><td></td>
174 </tr>
175 </table>
176 </td>
177 <td class="mlabels-right">
178 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
179 </tr>
180 </table>
181 </div><div class="memdoc">
182
183 <p>Get the hwloc OS device object corresponding to the OpenFabrics device named <code>ibname</code>. </p>
184 <p>Return the OS device object describing the OpenFabrics device (InfiniBand, Omni-Path, usNIC, etc) whose name is <code>ibname</code> (mlx5_0, hfi1_0, usnic_0, qib0, etc). Returns NULL if there is none. The name <code>ibname</code> is usually obtained from ibv_get_device_name().</p>
185 <p>The topology <code>topology</code> 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 must be enabled in the topology.</p>
186 <dl class="section note"><dt>Note</dt><dd>The corresponding PCI device object can be obtained by looking at the OS device parent object. </dd></dl>
112 <a id="ga252cb72175f1a2d682f883a0add80a66"></a>
113 <h2 class="memtitle"><span class="permalink"><a href="#ga252cb72175f1a2d682f883a0add80a66">&#9670;&nbsp;</a></span>hwloc_cuda_get_device_osdev()</h2>
114
115 <div class="memitem">
116 <div class="memproto">
117 <table class="mlabels">
118 <tr>
119 <td class="mlabels-left">
120 <table class="memname">
121 <tr>
122 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_cuda_get_device_osdev </td>
123 <td>(</td>
124 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
125 <td class="paramname"><em>topology</em>, </td>
126 </tr>
127 <tr>
128 <td class="paramkey"></td>
129 <td></td>
130 <td class="paramtype">CUdevice&#160;</td>
131 <td class="paramname"><em>cudevice</em>&#160;</td>
132 </tr>
133 <tr>
134 <td></td>
135 <td>)</td>
136 <td></td><td></td>
137 </tr>
138 </table>
139 </td>
140 <td class="mlabels-right">
141 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
142 </tr>
143 </table>
144 </div><div class="memdoc">
145
146 <p>Get the hwloc OS device object corresponding to CUDA device <code>cudevice</code>. </p>
147 <dl class="section return"><dt>Returns</dt><dd>The hwloc OS device object that describes the given CUDA device <code>cudevice</code>. </dd>
148 <dd>
149 <code>NULL</code> if none could be found.</dd></dl>
150 <p>Topology <code>topology</code> and device <code>cudevice</code> 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 <a class="el" href="a00230.html#gaec41c6b4dc3361156beb7dea2a74f5a3" title="Get the CPU set of processors that are physically close to device cudevice.">hwloc_cuda_get_device_cpuset()</a>.</p>
151 <dl class="section note"><dt>Note</dt><dd>This function cannot work if PCI devices are filtered out.</dd>
152 <dd>
153 The corresponding hwloc PCI device may be found by looking at the result parent pointer (unless PCI devices are filtered out). </dd></dl>
154
155 </div>
156 </div>
157 <a id="ga12ee892994ed037e8f64bbffda02cf2e"></a>
158 <h2 class="memtitle"><span class="permalink"><a href="#ga12ee892994ed037e8f64bbffda02cf2e">&#9670;&nbsp;</a></span>hwloc_cuda_get_device_osdev_by_index()</h2>
159
160 <div class="memitem">
161 <div class="memproto">
162 <table class="mlabels">
163 <tr>
164 <td class="mlabels-left">
165 <table class="memname">
166 <tr>
167 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_cuda_get_device_osdev_by_index </td>
168 <td>(</td>
169 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
170 <td class="paramname"><em>topology</em>, </td>
171 </tr>
172 <tr>
173 <td class="paramkey"></td>
174 <td></td>
175 <td class="paramtype">unsigned&#160;</td>
176 <td class="paramname"><em>idx</em>&#160;</td>
177 </tr>
178 <tr>
179 <td></td>
180 <td>)</td>
181 <td></td><td></td>
182 </tr>
183 </table>
184 </td>
185 <td class="mlabels-right">
186 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
187 </tr>
188 </table>
189 </div><div class="memdoc">
190
191 <p>Get the hwloc OS device object corresponding to the CUDA device whose index is <code>idx</code>. </p>
192 <dl class="section return"><dt>Returns</dt><dd>The hwloc OS device object describing the CUDA device whose index is <code>idx</code>. </dd>
193 <dd>
194 <code>NULL</code> if none could be found.</dd></dl>
195 <p>The topology <code>topology</code> 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.</p>
196 <dl class="section note"><dt>Note</dt><dd>The corresponding PCI device object can be obtained by looking at the OS device parent object (unless PCI devices are filtered out).</dd>
197 <dd>
198 This function is identical to <a class="el" href="a00231.html#gac0f3eeaf7712919f298097b1a21307b0" title="Get the hwloc OS device object corresponding to the CUDA device whose index is idx.">hwloc_cudart_get_device_osdev_by_index()</a>. </dd></dl>
199
200 </div>
201 </div>
202 <a id="ga1084285e8ff8b7df91c28917637481c6"></a>
203 <h2 class="memtitle"><span class="permalink"><a href="#ga1084285e8ff8b7df91c28917637481c6">&#9670;&nbsp;</a></span>hwloc_cuda_get_device_pci_ids()</h2>
204
205 <div class="memitem">
206 <div class="memproto">
207 <table class="mlabels">
208 <tr>
209 <td class="mlabels-left">
210 <table class="memname">
211 <tr>
212 <td class="memname">static int hwloc_cuda_get_device_pci_ids </td>
213 <td>(</td>
214 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
215 <td class="paramname"><em>topology</em>, </td>
216 </tr>
217 <tr>
218 <td class="paramkey"></td>
219 <td></td>
220 <td class="paramtype">CUdevice&#160;</td>
221 <td class="paramname"><em>cudevice</em>, </td>
222 </tr>
223 <tr>
224 <td class="paramkey"></td>
225 <td></td>
226 <td class="paramtype">int *&#160;</td>
227 <td class="paramname"><em>domain</em>, </td>
228 </tr>
229 <tr>
230 <td class="paramkey"></td>
231 <td></td>
232 <td class="paramtype">int *&#160;</td>
233 <td class="paramname"><em>bus</em>, </td>
234 </tr>
235 <tr>
236 <td class="paramkey"></td>
237 <td></td>
238 <td class="paramtype">int *&#160;</td>
239 <td class="paramname"><em>dev</em>&#160;</td>
240 </tr>
241 <tr>
242 <td></td>
243 <td>)</td>
244 <td></td><td></td>
245 </tr>
246 </table>
247 </td>
248 <td class="mlabels-right">
249 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
250 </tr>
251 </table>
252 </div><div class="memdoc">
253
254 <p>Return the domain, bus and device IDs of the CUDA device <code>cudevice</code>. </p>
255 <p>Device <code>cudevice</code> must match the local machine. </p>
256
257 </div>
258 </div>
259 <a id="ga11fed607fa404e29e8da010f3ec128e4"></a>
260 <h2 class="memtitle"><span class="permalink"><a href="#ga11fed607fa404e29e8da010f3ec128e4">&#9670;&nbsp;</a></span>hwloc_cuda_get_device_pcidev()</h2>
261
262 <div class="memitem">
263 <div class="memproto">
264 <table class="mlabels">
265 <tr>
266 <td class="mlabels-left">
267 <table class="memname">
268 <tr>
269 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_cuda_get_device_pcidev </td>
270 <td>(</td>
271 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
272 <td class="paramname"><em>topology</em>, </td>
273 </tr>
274 <tr>
275 <td class="paramkey"></td>
276 <td></td>
277 <td class="paramtype">CUdevice&#160;</td>
278 <td class="paramname"><em>cudevice</em>&#160;</td>
279 </tr>
280 <tr>
281 <td></td>
282 <td>)</td>
283 <td></td><td></td>
284 </tr>
285 </table>
286 </td>
287 <td class="mlabels-right">
288 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
289 </tr>
290 </table>
291 </div><div class="memdoc">
292
293 <p>Get the hwloc PCI device object corresponding to the CUDA device <code>cudevice</code>. </p>
294 <dl class="section return"><dt>Returns</dt><dd>The hwloc PCI device object describing the CUDA device <code>cudevice</code>. </dd>
295 <dd>
296 <code>NULL</code> if none could be found.</dd></dl>
297 <p>Topology <code>topology</code> and device <code>cudevice</code> must match the local machine. I/O devices detection must be enabled in topology <code>topology</code>. The CUDA component is not needed in the topology. </p>
187298
188299 </div>
189300 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Topology differences</title>
7 <title>Hardware Locality (hwloc): Interoperability with the CUDA Runtime API</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="header">
4141 <div class="summary">
42 <a href="#nested-classes">Data Structures</a> &#124;
43 <a href="#typedef-members">Typedefs</a> &#124;
44 <a href="#enum-members">Enumerations</a> &#124;
4542 <a href="#func-members">Functions</a> </div>
4643 <div class="headertitle">
47 <div class="title">Topology differences</div> </div>
44 <div class="title">Interoperability with the CUDA Runtime API</div> </div>
4845 </div><!--header-->
4946 <div class="contents">
5047 <table class="memberdecls">
51 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
52 Data Structures</h2></td></tr>
53 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">union &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00340.html">hwloc_topology_diff_obj_attr_u</a></td></tr>
54 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
55 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">union &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00356.html">hwloc_topology_diff_u</a></td></tr>
56 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
57 </table><table class="memberdecls">
58 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
59 Typedefs</h2></td></tr>
60 <tr class="memitem:ga74a3fefbaa17582fea86d76b312d6254"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="a00231.html#ga86f044210b0a9e9fa83acbdbbf7e05fd">hwloc_topology_diff_obj_attr_type_e</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a></td></tr>
61 <tr class="separator:ga74a3fefbaa17582fea86d76b312d6254"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:ga8470f631b7365c839d3e40d38c5b6291"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="a00231.html#ga38b28b7423b85a3321e6d0062d5f83d0">hwloc_topology_diff_type_e</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a></td></tr>
63 <tr class="separator:ga8470f631b7365c839d3e40d38c5b6291"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 <tr class="memitem:ga1bd6363f26f7961f83153aaa484a9b85"><td class="memItemLeft" align="right" valign="top">typedef union <a class="el" href="a00356.html">hwloc_topology_diff_u</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a></td></tr>
65 <tr class="separator:ga1bd6363f26f7961f83153aaa484a9b85"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 </table><table class="memberdecls">
67 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
68 Enumerations</h2></td></tr>
69 <tr class="memitem:ga86f044210b0a9e9fa83acbdbbf7e05fd"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#ga86f044210b0a9e9fa83acbdbbf7e05fd">hwloc_topology_diff_obj_attr_type_e</a> { <a class="el" href="a00231.html#gga86f044210b0a9e9fa83acbdbbf7e05fdabc7f0c7ed0b6864e902f4b70f2c7bc94">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_SIZE</a>
70 , <a class="el" href="a00231.html#gga86f044210b0a9e9fa83acbdbbf7e05fda94a8f37c51d62d15ac6192665dd49310">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_NAME</a>
71 , <a class="el" href="a00231.html#gga86f044210b0a9e9fa83acbdbbf7e05fda63430bf932434bc456282f636d39c2c2">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_INFO</a>
72 }</td></tr>
73 <tr class="separator:ga86f044210b0a9e9fa83acbdbbf7e05fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
74 <tr class="memitem:ga38b28b7423b85a3321e6d0062d5f83d0"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#ga38b28b7423b85a3321e6d0062d5f83d0">hwloc_topology_diff_type_e</a> { <a class="el" href="a00231.html#gga38b28b7423b85a3321e6d0062d5f83d0accbcaee230f79989debb284c8626f0c0">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR</a>
75 , <a class="el" href="a00231.html#gga38b28b7423b85a3321e6d0062d5f83d0a3dc01fdeff355efe3fb2516bb454a147">HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX</a>
76 }</td></tr>
77 <tr class="separator:ga38b28b7423b85a3321e6d0062d5f83d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
78 <tr class="memitem:gada4c1273ce020afaf02b649496f7edf5"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#gada4c1273ce020afaf02b649496f7edf5">hwloc_topology_diff_apply_flags_e</a> { <a class="el" href="a00231.html#ggada4c1273ce020afaf02b649496f7edf5a821a160512d67ea0dd05dab873d2fc54">HWLOC_TOPOLOGY_DIFF_APPLY_REVERSE</a>
79 }</td></tr>
80 <tr class="separator:gada4c1273ce020afaf02b649496f7edf5"><td class="memSeparator" colspan="2">&#160;</td></tr>
81 </table><table class="memberdecls">
8248 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
8349 Functions</h2></td></tr>
84 <tr class="memitem:ga8a1754f69fbb31364ea3ea2c39827c9f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#ga8a1754f69fbb31364ea3ea2c39827c9f">hwloc_topology_diff_build</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> newtopology, unsigned long flags, <a class="el" href="a00231.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a> *diff)</td></tr>
85 <tr class="separator:ga8a1754f69fbb31364ea3ea2c39827c9f"><td class="memSeparator" colspan="2">&#160;</td></tr>
86 <tr class="memitem:gae7b350d7e7478a4c6047b08aa6544f40"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#gae7b350d7e7478a4c6047b08aa6544f40">hwloc_topology_diff_apply</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00231.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a> diff, unsigned long flags)</td></tr>
87 <tr class="separator:gae7b350d7e7478a4c6047b08aa6544f40"><td class="memSeparator" colspan="2">&#160;</td></tr>
88 <tr class="memitem:ga5dcff18f80583ac6505a94ba2877fd1b"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#ga5dcff18f80583ac6505a94ba2877fd1b">hwloc_topology_diff_destroy</a> (<a class="el" href="a00231.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a> diff)</td></tr>
89 <tr class="separator:ga5dcff18f80583ac6505a94ba2877fd1b"><td class="memSeparator" colspan="2">&#160;</td></tr>
90 <tr class="memitem:ga2cd902ce8766e90d4f2523a8e87640e9"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#ga2cd902ce8766e90d4f2523a8e87640e9">hwloc_topology_diff_load_xml</a> (const char *xmlpath, <a class="el" href="a00231.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a> *diff, char **refname)</td></tr>
91 <tr class="separator:ga2cd902ce8766e90d4f2523a8e87640e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
92 <tr class="memitem:ga8a14dd7d01efbdd97af7fe85e8b84b20"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#ga8a14dd7d01efbdd97af7fe85e8b84b20">hwloc_topology_diff_export_xml</a> (<a class="el" href="a00231.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a> diff, const char *refname, const char *xmlpath)</td></tr>
93 <tr class="separator:ga8a14dd7d01efbdd97af7fe85e8b84b20"><td class="memSeparator" colspan="2">&#160;</td></tr>
94 <tr class="memitem:gad693810a5c51628529b9dd56f040fb81"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#gad693810a5c51628529b9dd56f040fb81">hwloc_topology_diff_load_xmlbuffer</a> (const char *xmlbuffer, int buflen, <a class="el" href="a00231.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a> *diff, char **refname)</td></tr>
95 <tr class="separator:gad693810a5c51628529b9dd56f040fb81"><td class="memSeparator" colspan="2">&#160;</td></tr>
96 <tr class="memitem:gaa2f0918df60c1c4a0bef9411f7d92a13"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#gaa2f0918df60c1c4a0bef9411f7d92a13">hwloc_topology_diff_export_xmlbuffer</a> (<a class="el" href="a00231.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a> diff, const char *refname, char **xmlbuffer, int *buflen)</td></tr>
97 <tr class="separator:gaa2f0918df60c1c4a0bef9411f7d92a13"><td class="memSeparator" colspan="2">&#160;</td></tr>
50 <tr class="memitem:gad8b701d9a34923e34bd58defd4c1e704"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#gad8b701d9a34923e34bd58defd4c1e704">hwloc_cudart_get_device_pci_ids</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int idx, int *domain, int *bus, int *dev)</td></tr>
51 <tr class="separator:gad8b701d9a34923e34bd58defd4c1e704"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:ga187ca00c6e12800a25151ce331620980"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#ga187ca00c6e12800a25151ce331620980">hwloc_cudart_get_device_cpuset</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int idx, <a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</td></tr>
53 <tr class="separator:ga187ca00c6e12800a25151ce331620980"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:gaeda4e6efbb36b518b2c286434ad23bb2"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#gaeda4e6efbb36b518b2c286434ad23bb2">hwloc_cudart_get_device_pcidev</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int idx)</td></tr>
55 <tr class="separator:gaeda4e6efbb36b518b2c286434ad23bb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:gac0f3eeaf7712919f298097b1a21307b0"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00231.html#gac0f3eeaf7712919f298097b1a21307b0">hwloc_cudart_get_device_osdev_by_index</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned idx)</td></tr>
57 <tr class="separator:gac0f3eeaf7712919f298097b1a21307b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
9858 </table>
9959 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
100 <p>Applications that manipulate many similar topologies, for instance one for each node of a homogeneous cluster, may want to compress topologies to reduce the memory footprint.</p>
101 <p>This file offers a way to manipulate the difference between topologies and export/import it to/from XML. Compression may therefore be achieved by storing one topology entirely while the others are only described by their differences with the former. The actual topology can be reconstructed when actually needed by applying the precomputed difference to the reference topology.</p>
102 <p>This interface targets very similar nodes. Only very simple differences between topologies are actually supported, for instance a change in the memory size, the name of the object, or some info attribute. More complex differences such as adding or removing objects cannot be represented in the difference structures and therefore return errors. Differences between object sets or topology-wide allowed sets, cannot be represented either.</p>
103 <p>It means that there is no need to apply the difference when looking at the tree organization (how many levels, how many objects per level, what kind of objects, CPU and node sets, etc) and when binding to objects. However the difference must be applied when looking at object attributes such as the name, the memory size or info attributes. </p>
104 <h2 class="groupheader">Typedef Documentation</h2>
105 <a id="ga74a3fefbaa17582fea86d76b312d6254"></a>
106 <h2 class="memtitle"><span class="permalink"><a href="#ga74a3fefbaa17582fea86d76b312d6254">&#9670;&nbsp;</a></span>hwloc_topology_diff_obj_attr_type_t</h2>
107
108 <div class="memitem">
109 <div class="memproto">
110 <table class="memname">
111 <tr>
112 <td class="memname">typedef enum <a class="el" href="a00231.html#ga86f044210b0a9e9fa83acbdbbf7e05fd">hwloc_topology_diff_obj_attr_type_e</a> <a class="el" href="a00231.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a></td>
113 </tr>
114 </table>
115 </div><div class="memdoc">
116
117 <p>Type of one object attribute difference. </p>
118
119 </div>
120 </div>
121 <a id="ga1bd6363f26f7961f83153aaa484a9b85"></a>
122 <h2 class="memtitle"><span class="permalink"><a href="#ga1bd6363f26f7961f83153aaa484a9b85">&#9670;&nbsp;</a></span>hwloc_topology_diff_t</h2>
123
124 <div class="memitem">
125 <div class="memproto">
126 <table class="memname">
127 <tr>
128 <td class="memname">typedef union <a class="el" href="a00356.html">hwloc_topology_diff_u</a> * <a class="el" href="a00231.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a></td>
129 </tr>
130 </table>
131 </div><div class="memdoc">
132
133 <p>One element of a difference list between two topologies. </p>
134
135 </div>
136 </div>
137 <a id="ga8470f631b7365c839d3e40d38c5b6291"></a>
138 <h2 class="memtitle"><span class="permalink"><a href="#ga8470f631b7365c839d3e40d38c5b6291">&#9670;&nbsp;</a></span>hwloc_topology_diff_type_t</h2>
139
140 <div class="memitem">
141 <div class="memproto">
142 <table class="memname">
143 <tr>
144 <td class="memname">typedef enum <a class="el" href="a00231.html#ga38b28b7423b85a3321e6d0062d5f83d0">hwloc_topology_diff_type_e</a> <a class="el" href="a00231.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a></td>
145 </tr>
146 </table>
147 </div><div class="memdoc">
148
149 <p>Type of one element of a difference list. </p>
150
151 </div>
152 </div>
153 <h2 class="groupheader">Enumeration Type Documentation</h2>
154 <a id="gada4c1273ce020afaf02b649496f7edf5"></a>
155 <h2 class="memtitle"><span class="permalink"><a href="#gada4c1273ce020afaf02b649496f7edf5">&#9670;&nbsp;</a></span>hwloc_topology_diff_apply_flags_e</h2>
156
157 <div class="memitem">
158 <div class="memproto">
159 <table class="memname">
160 <tr>
161 <td class="memname">enum <a class="el" href="a00231.html#gada4c1273ce020afaf02b649496f7edf5">hwloc_topology_diff_apply_flags_e</a></td>
162 </tr>
163 </table>
164 </div><div class="memdoc">
165
166 <p>Flags to be given to <a class="el" href="a00231.html#gae7b350d7e7478a4c6047b08aa6544f40" title="Apply a topology diff to an existing topology.">hwloc_topology_diff_apply()</a>. </p>
167 <table class="fieldtable">
168 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggada4c1273ce020afaf02b649496f7edf5a821a160512d67ea0dd05dab873d2fc54"></a>HWLOC_TOPOLOGY_DIFF_APPLY_REVERSE&#160;</td><td class="fielddoc"><p>Apply topology diff in reverse direction. </p>
169 </td></tr>
170 </table>
171
172 </div>
173 </div>
174 <a id="ga86f044210b0a9e9fa83acbdbbf7e05fd"></a>
175 <h2 class="memtitle"><span class="permalink"><a href="#ga86f044210b0a9e9fa83acbdbbf7e05fd">&#9670;&nbsp;</a></span>hwloc_topology_diff_obj_attr_type_e</h2>
176
177 <div class="memitem">
178 <div class="memproto">
179 <table class="memname">
180 <tr>
181 <td class="memname">enum <a class="el" href="a00231.html#ga86f044210b0a9e9fa83acbdbbf7e05fd">hwloc_topology_diff_obj_attr_type_e</a></td>
182 </tr>
183 </table>
184 </div><div class="memdoc">
185
186 <p>Type of one object attribute difference. </p>
187 <table class="fieldtable">
188 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga86f044210b0a9e9fa83acbdbbf7e05fdabc7f0c7ed0b6864e902f4b70f2c7bc94"></a>HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_SIZE&#160;</td><td class="fielddoc"><p>The object local memory is modified. The union is a <a class="el" href="a00348.html" title="Integer attribute modification with an optional index.">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a> (and the index field is ignored). </p>
189 </td></tr>
190 <tr><td class="fieldname"><a id="gga86f044210b0a9e9fa83acbdbbf7e05fda94a8f37c51d62d15ac6192665dd49310"></a>HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_NAME&#160;</td><td class="fielddoc"><p>The object name is modified. The union is a <a class="el" href="a00352.html" title="String attribute modification with an optional name.">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a> (and the name field is ignored). </p>
191 </td></tr>
192 <tr><td class="fieldname"><a id="gga86f044210b0a9e9fa83acbdbbf7e05fda63430bf932434bc456282f636d39c2c2"></a>HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_INFO&#160;</td><td class="fielddoc"><p>the value of an info attribute is modified. The union is a <a class="el" href="a00352.html" title="String attribute modification with an optional name.">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a>. </p>
193 </td></tr>
194 </table>
195
196 </div>
197 </div>
198 <a id="ga38b28b7423b85a3321e6d0062d5f83d0"></a>
199 <h2 class="memtitle"><span class="permalink"><a href="#ga38b28b7423b85a3321e6d0062d5f83d0">&#9670;&nbsp;</a></span>hwloc_topology_diff_type_e</h2>
200
201 <div class="memitem">
202 <div class="memproto">
203 <table class="memname">
204 <tr>
205 <td class="memname">enum <a class="el" href="a00231.html#ga38b28b7423b85a3321e6d0062d5f83d0">hwloc_topology_diff_type_e</a></td>
206 </tr>
207 </table>
208 </div><div class="memdoc">
209
210 <p>Type of one element of a difference list. </p>
211 <table class="fieldtable">
212 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga38b28b7423b85a3321e6d0062d5f83d0accbcaee230f79989debb284c8626f0c0"></a>HWLOC_TOPOLOGY_DIFF_OBJ_ATTR&#160;</td><td class="fielddoc"><p>An object attribute was changed. The union is a <a class="el" href="a00364.html">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>. </p>
213 </td></tr>
214 <tr><td class="fieldname"><a id="gga38b28b7423b85a3321e6d0062d5f83d0a3dc01fdeff355efe3fb2516bb454a147"></a>HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX&#160;</td><td class="fielddoc"><p>The difference is too complex, it cannot be represented. The difference below this object has not been checked. <a class="el" href="a00231.html#ga8a1754f69fbb31364ea3ea2c39827c9f" title="Compute the difference between 2 topologies.">hwloc_topology_diff_build()</a> will return 1. </p>
215 <p>The union is a <a class="el" href="a00368.html">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a>. </p>
216 </td></tr>
217 </table>
218
219 </div>
220 </div>
60 <p>This interface offers ways to retrieve topology information about CUDA devices when using the CUDA Runtime API. </p>
22161 <h2 class="groupheader">Function Documentation</h2>
222 <a id="gae7b350d7e7478a4c6047b08aa6544f40"></a>
223 <h2 class="memtitle"><span class="permalink"><a href="#gae7b350d7e7478a4c6047b08aa6544f40">&#9670;&nbsp;</a></span>hwloc_topology_diff_apply()</h2>
224
225 <div class="memitem">
226 <div class="memproto">
227 <table class="memname">
228 <tr>
229 <td class="memname">int hwloc_topology_diff_apply </td>
230 <td>(</td>
231 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
232 <td class="paramname"><em>topology</em>, </td>
233 </tr>
234 <tr>
235 <td class="paramkey"></td>
236 <td></td>
237 <td class="paramtype"><a class="el" href="a00231.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a>&#160;</td>
238 <td class="paramname"><em>diff</em>, </td>
239 </tr>
240 <tr>
241 <td class="paramkey"></td>
242 <td></td>
243 <td class="paramtype">unsigned long&#160;</td>
244 <td class="paramname"><em>flags</em>&#160;</td>
245 </tr>
246 <tr>
247 <td></td>
248 <td>)</td>
249 <td></td><td></td>
250 </tr>
251 </table>
252 </div><div class="memdoc">
253
254 <p>Apply a topology diff to an existing topology. </p>
255 <p><code>flags</code> is an OR'ed set of <a class="el" href="a00231.html#gada4c1273ce020afaf02b649496f7edf5" title="Flags to be given to hwloc_topology_diff_apply().">hwloc_topology_diff_apply_flags_e</a>.</p>
256 <p>The new topology is modified in place. <a class="el" href="a00192.html#ga62a161fc5e6f120344dc69a7bee4e587" title="Duplicate a topology.">hwloc_topology_dup()</a> may be used to duplicate it before patching.</p>
257 <p>If the difference cannot be applied entirely, all previous applied elements are unapplied before returning.</p>
258 <dl class="section return"><dt>Returns</dt><dd>0 on success.</dd>
62 <a id="ga187ca00c6e12800a25151ce331620980"></a>
63 <h2 class="memtitle"><span class="permalink"><a href="#ga187ca00c6e12800a25151ce331620980">&#9670;&nbsp;</a></span>hwloc_cudart_get_device_cpuset()</h2>
64
65 <div class="memitem">
66 <div class="memproto">
67 <table class="mlabels">
68 <tr>
69 <td class="mlabels-left">
70 <table class="memname">
71 <tr>
72 <td class="memname">static int hwloc_cudart_get_device_cpuset </td>
73 <td>(</td>
74 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
75 <td class="paramname"><em>topology</em>, </td>
76 </tr>
77 <tr>
78 <td class="paramkey"></td>
79 <td></td>
80 <td class="paramtype">int&#160;</td>
81 <td class="paramname"><em>idx</em>, </td>
82 </tr>
83 <tr>
84 <td class="paramkey"></td>
85 <td></td>
86 <td class="paramtype"><a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
87 <td class="paramname"><em>set</em>&#160;</td>
88 </tr>
89 <tr>
90 <td></td>
91 <td>)</td>
92 <td></td><td></td>
93 </tr>
94 </table>
95 </td>
96 <td class="mlabels-right">
97 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
98 </tr>
99 </table>
100 </div><div class="memdoc">
101
102 <p>Get the CPU set of processors that are physically close to device <code>idx</code>. </p>
103 <p>Store in <code>set</code> the CPU-set describing the locality of the CUDA device whose index is <code>idx</code>.</p>
104 <p>Topology <code>topology</code> and device <code>idx</code> must match the local machine. I/O devices detection and the CUDA component are not needed in the topology.</p>
105 <p>The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see <a class="el" href="a00231.html#gac0f3eeaf7712919f298097b1a21307b0" title="Get the hwloc OS device object corresponding to the CUDA device whose index is idx.">hwloc_cudart_get_device_osdev_by_index()</a>.</p>
106 <p>This function is currently only implemented in a meaningful way for Linux; other systems will simply get a full cpuset. </p>
107
108 </div>
109 </div>
110 <a id="gac0f3eeaf7712919f298097b1a21307b0"></a>
111 <h2 class="memtitle"><span class="permalink"><a href="#gac0f3eeaf7712919f298097b1a21307b0">&#9670;&nbsp;</a></span>hwloc_cudart_get_device_osdev_by_index()</h2>
112
113 <div class="memitem">
114 <div class="memproto">
115 <table class="mlabels">
116 <tr>
117 <td class="mlabels-left">
118 <table class="memname">
119 <tr>
120 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_cudart_get_device_osdev_by_index </td>
121 <td>(</td>
122 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
123 <td class="paramname"><em>topology</em>, </td>
124 </tr>
125 <tr>
126 <td class="paramkey"></td>
127 <td></td>
128 <td class="paramtype">unsigned&#160;</td>
129 <td class="paramname"><em>idx</em>&#160;</td>
130 </tr>
131 <tr>
132 <td></td>
133 <td>)</td>
134 <td></td><td></td>
135 </tr>
136 </table>
137 </td>
138 <td class="mlabels-right">
139 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
140 </tr>
141 </table>
142 </div><div class="memdoc">
143
144 <p>Get the hwloc OS device object corresponding to the CUDA device whose index is <code>idx</code>. </p>
145 <dl class="section return"><dt>Returns</dt><dd>The hwloc OS device object describing the CUDA device whose index is <code>idx</code>. </dd>
259146 <dd>
260 -N if applying the difference failed while trying to apply the N-th part of the difference. For instance -1 is returned if the very first difference element could not be applied. </dd></dl>
261
262 </div>
263 </div>
264 <a id="ga8a1754f69fbb31364ea3ea2c39827c9f"></a>
265 <h2 class="memtitle"><span class="permalink"><a href="#ga8a1754f69fbb31364ea3ea2c39827c9f">&#9670;&nbsp;</a></span>hwloc_topology_diff_build()</h2>
266
267 <div class="memitem">
268 <div class="memproto">
269 <table class="memname">
270 <tr>
271 <td class="memname">int hwloc_topology_diff_build </td>
272 <td>(</td>
273 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
274 <td class="paramname"><em>topology</em>, </td>
275 </tr>
276 <tr>
277 <td class="paramkey"></td>
278 <td></td>
279 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
280 <td class="paramname"><em>newtopology</em>, </td>
281 </tr>
282 <tr>
283 <td class="paramkey"></td>
284 <td></td>
285 <td class="paramtype">unsigned long&#160;</td>
286 <td class="paramname"><em>flags</em>, </td>
287 </tr>
288 <tr>
289 <td class="paramkey"></td>
290 <td></td>
291 <td class="paramtype"><a class="el" href="a00231.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a> *&#160;</td>
292 <td class="paramname"><em>diff</em>&#160;</td>
293 </tr>
294 <tr>
295 <td></td>
296 <td>)</td>
297 <td></td><td></td>
298 </tr>
299 </table>
300 </div><div class="memdoc">
301
302 <p>Compute the difference between 2 topologies. </p>
303 <p>The difference is stored as a list of <a class="el" href="a00231.html#ga1bd6363f26f7961f83153aaa484a9b85" title="One element of a difference list between two topologies.">hwloc_topology_diff_t</a> entries starting at <code>diff</code>. It is computed by doing a depth-first traversal of both topology trees simultaneously.</p>
304 <p>If the difference between 2 objects is too complex to be represented (for instance if some objects have different types, or different numbers of children), a special diff entry of type <a class="el" href="a00231.html#gga38b28b7423b85a3321e6d0062d5f83d0a3dc01fdeff355efe3fb2516bb454a147" title="The difference is too complex, it cannot be represented. The difference below this object has not bee...">HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX</a> is queued. The computation of the diff does not continue below these objects. So each such diff entry means that the difference between two subtrees could not be computed.</p>
305 <dl class="section return"><dt>Returns</dt><dd>0 if the difference can be represented properly.</dd>
147 <code>NULL</code> if none could be found.</dd></dl>
148 <p>The topology <code>topology</code> 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 <a class="el" href="a00231.html#ga187ca00c6e12800a25151ce331620980" title="Get the CPU set of processors that are physically close to device idx.">hwloc_cudart_get_device_cpuset()</a>.</p>
149 <dl class="section note"><dt>Note</dt><dd>The corresponding PCI device object can be obtained by looking at the OS device parent object (unless PCI devices are filtered out).</dd>
306150 <dd>
307 0 with <code>diff</code> pointing to NULL if there is no difference between the topologies.</dd>
151 This function is identical to <a class="el" href="a00230.html#ga12ee892994ed037e8f64bbffda02cf2e" title="Get the hwloc OS device object corresponding to the CUDA device whose index is idx.">hwloc_cuda_get_device_osdev_by_index()</a>. </dd></dl>
152
153 </div>
154 </div>
155 <a id="gad8b701d9a34923e34bd58defd4c1e704"></a>
156 <h2 class="memtitle"><span class="permalink"><a href="#gad8b701d9a34923e34bd58defd4c1e704">&#9670;&nbsp;</a></span>hwloc_cudart_get_device_pci_ids()</h2>
157
158 <div class="memitem">
159 <div class="memproto">
160 <table class="mlabels">
161 <tr>
162 <td class="mlabels-left">
163 <table class="memname">
164 <tr>
165 <td class="memname">static int hwloc_cudart_get_device_pci_ids </td>
166 <td>(</td>
167 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
168 <td class="paramname"><em>topology</em>, </td>
169 </tr>
170 <tr>
171 <td class="paramkey"></td>
172 <td></td>
173 <td class="paramtype">int&#160;</td>
174 <td class="paramname"><em>idx</em>, </td>
175 </tr>
176 <tr>
177 <td class="paramkey"></td>
178 <td></td>
179 <td class="paramtype">int *&#160;</td>
180 <td class="paramname"><em>domain</em>, </td>
181 </tr>
182 <tr>
183 <td class="paramkey"></td>
184 <td></td>
185 <td class="paramtype">int *&#160;</td>
186 <td class="paramname"><em>bus</em>, </td>
187 </tr>
188 <tr>
189 <td class="paramkey"></td>
190 <td></td>
191 <td class="paramtype">int *&#160;</td>
192 <td class="paramname"><em>dev</em>&#160;</td>
193 </tr>
194 <tr>
195 <td></td>
196 <td>)</td>
197 <td></td><td></td>
198 </tr>
199 </table>
200 </td>
201 <td class="mlabels-right">
202 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
203 </tr>
204 </table>
205 </div><div class="memdoc">
206
207 <p>Return the domain, bus and device IDs of the CUDA device whose index is <code>idx</code>. </p>
208 <p>Device index <code>idx</code> must match the local machine. </p>
209
210 </div>
211 </div>
212 <a id="gaeda4e6efbb36b518b2c286434ad23bb2"></a>
213 <h2 class="memtitle"><span class="permalink"><a href="#gaeda4e6efbb36b518b2c286434ad23bb2">&#9670;&nbsp;</a></span>hwloc_cudart_get_device_pcidev()</h2>
214
215 <div class="memitem">
216 <div class="memproto">
217 <table class="mlabels">
218 <tr>
219 <td class="mlabels-left">
220 <table class="memname">
221 <tr>
222 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_cudart_get_device_pcidev </td>
223 <td>(</td>
224 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
225 <td class="paramname"><em>topology</em>, </td>
226 </tr>
227 <tr>
228 <td class="paramkey"></td>
229 <td></td>
230 <td class="paramtype">int&#160;</td>
231 <td class="paramname"><em>idx</em>&#160;</td>
232 </tr>
233 <tr>
234 <td></td>
235 <td>)</td>
236 <td></td><td></td>
237 </tr>
238 </table>
239 </td>
240 <td class="mlabels-right">
241 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
242 </tr>
243 </table>
244 </div><div class="memdoc">
245
246 <p>Get the hwloc PCI device object corresponding to the CUDA device whose index is <code>idx</code>. </p>
247 <dl class="section return"><dt>Returns</dt><dd>The hwloc PCI device object describing the CUDA device whose index is <code>idx</code>. </dd>
308248 <dd>
309 1 if the difference is too complex (see above). Some entries in the list will be of type <a class="el" href="a00231.html#gga38b28b7423b85a3321e6d0062d5f83d0a3dc01fdeff355efe3fb2516bb454a147" title="The difference is too complex, it cannot be represented. The difference below this object has not bee...">HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX</a>.</dd>
310 <dd>
311 -1 on any other error.</dd></dl>
312 <dl class="section note"><dt>Note</dt><dd><code>flags</code> is currently not used. It should be 0.</dd>
313 <dd>
314 The output diff has to be freed with <a class="el" href="a00231.html#ga5dcff18f80583ac6505a94ba2877fd1b" title="Destroy a list of topology differences.">hwloc_topology_diff_destroy()</a>.</dd>
315 <dd>
316 The output diff can only be exported to XML or passed to <a class="el" href="a00231.html#gae7b350d7e7478a4c6047b08aa6544f40" title="Apply a topology diff to an existing topology.">hwloc_topology_diff_apply()</a> if 0 was returned, i.e. if no entry of type <a class="el" href="a00231.html#gga38b28b7423b85a3321e6d0062d5f83d0a3dc01fdeff355efe3fb2516bb454a147" title="The difference is too complex, it cannot be represented. The difference below this object has not bee...">HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX</a> is listed.</dd>
317 <dd>
318 The output diff may be modified by removing some entries from the list. The removed entries should be freed by passing them to to <a class="el" href="a00231.html#ga5dcff18f80583ac6505a94ba2877fd1b" title="Destroy a list of topology differences.">hwloc_topology_diff_destroy()</a> (possible as another list). </dd></dl>
319
320 </div>
321 </div>
322 <a id="ga5dcff18f80583ac6505a94ba2877fd1b"></a>
323 <h2 class="memtitle"><span class="permalink"><a href="#ga5dcff18f80583ac6505a94ba2877fd1b">&#9670;&nbsp;</a></span>hwloc_topology_diff_destroy()</h2>
324
325 <div class="memitem">
326 <div class="memproto">
327 <table class="memname">
328 <tr>
329 <td class="memname">int hwloc_topology_diff_destroy </td>
330 <td>(</td>
331 <td class="paramtype"><a class="el" href="a00231.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a>&#160;</td>
332 <td class="paramname"><em>diff</em></td><td>)</td>
333 <td></td>
334 </tr>
335 </table>
336 </div><div class="memdoc">
337
338 <p>Destroy a list of topology differences. </p>
339
340 </div>
341 </div>
342 <a id="ga8a14dd7d01efbdd97af7fe85e8b84b20"></a>
343 <h2 class="memtitle"><span class="permalink"><a href="#ga8a14dd7d01efbdd97af7fe85e8b84b20">&#9670;&nbsp;</a></span>hwloc_topology_diff_export_xml()</h2>
344
345 <div class="memitem">
346 <div class="memproto">
347 <table class="memname">
348 <tr>
349 <td class="memname">int hwloc_topology_diff_export_xml </td>
350 <td>(</td>
351 <td class="paramtype"><a class="el" href="a00231.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a>&#160;</td>
352 <td class="paramname"><em>diff</em>, </td>
353 </tr>
354 <tr>
355 <td class="paramkey"></td>
356 <td></td>
357 <td class="paramtype">const char *&#160;</td>
358 <td class="paramname"><em>refname</em>, </td>
359 </tr>
360 <tr>
361 <td class="paramkey"></td>
362 <td></td>
363 <td class="paramtype">const char *&#160;</td>
364 <td class="paramname"><em>xmlpath</em>&#160;</td>
365 </tr>
366 <tr>
367 <td></td>
368 <td>)</td>
369 <td></td><td></td>
370 </tr>
371 </table>
372 </div><div class="memdoc">
373
374 <p>Export a list of topology differences to a XML file. </p>
375 <p>If not <code>NULL</code>, <code>refname</code> defines an identifier string for the reference topology which was used as a base when computing this difference. This identifier is usually the name of the other XML file that contains the reference topology. This attribute is given back when reading the diff from XML. </p>
376
377 </div>
378 </div>
379 <a id="gaa2f0918df60c1c4a0bef9411f7d92a13"></a>
380 <h2 class="memtitle"><span class="permalink"><a href="#gaa2f0918df60c1c4a0bef9411f7d92a13">&#9670;&nbsp;</a></span>hwloc_topology_diff_export_xmlbuffer()</h2>
381
382 <div class="memitem">
383 <div class="memproto">
384 <table class="memname">
385 <tr>
386 <td class="memname">int hwloc_topology_diff_export_xmlbuffer </td>
387 <td>(</td>
388 <td class="paramtype"><a class="el" href="a00231.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a>&#160;</td>
389 <td class="paramname"><em>diff</em>, </td>
390 </tr>
391 <tr>
392 <td class="paramkey"></td>
393 <td></td>
394 <td class="paramtype">const char *&#160;</td>
395 <td class="paramname"><em>refname</em>, </td>
396 </tr>
397 <tr>
398 <td class="paramkey"></td>
399 <td></td>
400 <td class="paramtype">char **&#160;</td>
401 <td class="paramname"><em>xmlbuffer</em>, </td>
402 </tr>
403 <tr>
404 <td class="paramkey"></td>
405 <td></td>
406 <td class="paramtype">int *&#160;</td>
407 <td class="paramname"><em>buflen</em>&#160;</td>
408 </tr>
409 <tr>
410 <td></td>
411 <td>)</td>
412 <td></td><td></td>
413 </tr>
414 </table>
415 </div><div class="memdoc">
416
417 <p>Export a list of topology differences to a XML buffer. </p>
418 <p>If not <code>NULL</code>, <code>refname</code> defines an identifier string for the reference topology which was used as a base when computing this difference. This identifier is usually the name of the other XML file that contains the reference topology. This attribute is given back when reading the diff from XML.</p>
419 <p>The returned buffer ends with a \0 that is included in the returned length.</p>
420 <dl class="section note"><dt>Note</dt><dd>The XML buffer should later be freed with <a class="el" href="a00212.html#ga293e4a6489f15fd16ad22a5734561cf1" title="Free a buffer allocated by hwloc_topology_export_xmlbuffer()">hwloc_free_xmlbuffer()</a>. </dd></dl>
421
422 </div>
423 </div>
424 <a id="ga2cd902ce8766e90d4f2523a8e87640e9"></a>
425 <h2 class="memtitle"><span class="permalink"><a href="#ga2cd902ce8766e90d4f2523a8e87640e9">&#9670;&nbsp;</a></span>hwloc_topology_diff_load_xml()</h2>
426
427 <div class="memitem">
428 <div class="memproto">
429 <table class="memname">
430 <tr>
431 <td class="memname">int hwloc_topology_diff_load_xml </td>
432 <td>(</td>
433 <td class="paramtype">const char *&#160;</td>
434 <td class="paramname"><em>xmlpath</em>, </td>
435 </tr>
436 <tr>
437 <td class="paramkey"></td>
438 <td></td>
439 <td class="paramtype"><a class="el" href="a00231.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a> *&#160;</td>
440 <td class="paramname"><em>diff</em>, </td>
441 </tr>
442 <tr>
443 <td class="paramkey"></td>
444 <td></td>
445 <td class="paramtype">char **&#160;</td>
446 <td class="paramname"><em>refname</em>&#160;</td>
447 </tr>
448 <tr>
449 <td></td>
450 <td>)</td>
451 <td></td><td></td>
452 </tr>
453 </table>
454 </div><div class="memdoc">
455
456 <p>Load a list of topology differences from a XML file. </p>
457 <p>If not <code>NULL</code>, <code>refname</code> will be filled with the identifier string of the reference topology for the difference file, if any was specified in the XML file. This identifier is usually the name of the other XML file that contains the reference topology.</p>
458 <dl class="section note"><dt>Note</dt><dd>the pointer returned in refname should later be freed by the caller. </dd></dl>
459
460 </div>
461 </div>
462 <a id="gad693810a5c51628529b9dd56f040fb81"></a>
463 <h2 class="memtitle"><span class="permalink"><a href="#gad693810a5c51628529b9dd56f040fb81">&#9670;&nbsp;</a></span>hwloc_topology_diff_load_xmlbuffer()</h2>
464
465 <div class="memitem">
466 <div class="memproto">
467 <table class="memname">
468 <tr>
469 <td class="memname">int hwloc_topology_diff_load_xmlbuffer </td>
470 <td>(</td>
471 <td class="paramtype">const char *&#160;</td>
472 <td class="paramname"><em>xmlbuffer</em>, </td>
473 </tr>
474 <tr>
475 <td class="paramkey"></td>
476 <td></td>
477 <td class="paramtype">int&#160;</td>
478 <td class="paramname"><em>buflen</em>, </td>
479 </tr>
480 <tr>
481 <td class="paramkey"></td>
482 <td></td>
483 <td class="paramtype"><a class="el" href="a00231.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a> *&#160;</td>
484 <td class="paramname"><em>diff</em>, </td>
485 </tr>
486 <tr>
487 <td class="paramkey"></td>
488 <td></td>
489 <td class="paramtype">char **&#160;</td>
490 <td class="paramname"><em>refname</em>&#160;</td>
491 </tr>
492 <tr>
493 <td></td>
494 <td>)</td>
495 <td></td><td></td>
496 </tr>
497 </table>
498 </div><div class="memdoc">
499
500 <p>Load a list of topology differences from a XML buffer. </p>
501 <p>If not <code>NULL</code>, <code>refname</code> will be filled with the identifier string of the reference topology for the difference file, if any was specified in the XML file. This identifier is usually the name of the other XML file that contains the reference topology.</p>
502 <dl class="section note"><dt>Note</dt><dd>the pointer returned in refname should later be freed by the caller. </dd></dl>
249 <code>NULL</code> if none could be found.</dd></dl>
250 <p>Topology <code>topology</code> and device <code>idx</code> must match the local machine. I/O devices detection must be enabled in topology <code>topology</code>. The CUDA component is not needed in the topology. </p>
503251
504252 </div>
505253 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Sharing topologies between processes</title>
7 <title>Hardware Locality (hwloc): Interoperability with the NVIDIA Management Library</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4141 <div class="summary">
4242 <a href="#func-members">Functions</a> </div>
4343 <div class="headertitle">
44 <div class="title">Sharing topologies between processes</div> </div>
44 <div class="title">Interoperability with the NVIDIA Management Library</div> </div>
4545 </div><!--header-->
4646 <div class="contents">
4747 <table class="memberdecls">
4848 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
4949 Functions</h2></td></tr>
50 <tr class="memitem:ga772ab52750cdd0eec85128df24888001"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00232.html#ga772ab52750cdd0eec85128df24888001">hwloc_shmem_topology_get_length</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, size_t *lengthp, unsigned long flags)</td></tr>
51 <tr class="separator:ga772ab52750cdd0eec85128df24888001"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:ga61b20e346fc76f76420e3a88cc80a671"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00232.html#ga61b20e346fc76f76420e3a88cc80a671">hwloc_shmem_topology_write</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int fd, hwloc_uint64_t fileoffset, void *mmap_address, size_t length, unsigned long flags)</td></tr>
53 <tr class="separator:ga61b20e346fc76f76420e3a88cc80a671"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:ga21545bd0f09d9b554c8e60a630e0e629"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00232.html#ga21545bd0f09d9b554c8e60a630e0e629">hwloc_shmem_topology_adopt</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> *topologyp, int fd, hwloc_uint64_t fileoffset, void *mmap_address, size_t length, unsigned long flags)</td></tr>
55 <tr class="separator:ga21545bd0f09d9b554c8e60a630e0e629"><td class="memSeparator" colspan="2">&#160;</td></tr>
50 <tr class="memitem:ga26cf0036d09ec4d7cb692380fac9659d"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00232.html#ga26cf0036d09ec4d7cb692380fac9659d">hwloc_nvml_get_device_cpuset</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, nvmlDevice_t device, <a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</td></tr>
51 <tr class="separator:ga26cf0036d09ec4d7cb692380fac9659d"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:gacd50fd0e2766ee05bc13234b46714756"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00232.html#gacd50fd0e2766ee05bc13234b46714756">hwloc_nvml_get_device_osdev_by_index</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned idx)</td></tr>
53 <tr class="separator:gacd50fd0e2766ee05bc13234b46714756"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:gaf176159b5760a191871eff23f5a69ee9"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00232.html#gaf176159b5760a191871eff23f5a69ee9">hwloc_nvml_get_device_osdev</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, nvmlDevice_t device)</td></tr>
55 <tr class="separator:gaf176159b5760a191871eff23f5a69ee9"><td class="memSeparator" colspan="2">&#160;</td></tr>
5656 </table>
5757 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
58 <p>These functions are used to share a topology between processes by duplicating it into a file-backed shared-memory buffer.</p>
59 <p>The master process must first get the required shared-memory size for storing this topology with <a class="el" href="a00232.html#ga772ab52750cdd0eec85128df24888001" title="Get the required shared memory length for storing a topology.">hwloc_shmem_topology_get_length()</a>.</p>
60 <p>Then it must find a virtual memory area of that size that is available in all processes (identical virtual addresses in all processes). On Linux, this can be done by comparing holes found in /proc/&lt;pid&gt;/maps for each process.</p>
61 <p>Once found, it must open a destination file for storing the buffer, and pass it to <a class="el" href="a00232.html#ga61b20e346fc76f76420e3a88cc80a671" title="Duplicate a topology to a shared memory file.">hwloc_shmem_topology_write()</a> together with virtual memory address and length obtained above.</p>
62 <p>Other processes may then adopt this shared topology by opening the same file and passing it to <a class="el" href="a00232.html#ga21545bd0f09d9b554c8e60a630e0e629" title="Adopt a shared memory topology stored in a file.">hwloc_shmem_topology_adopt()</a> with the exact same virtual memory address and length. </p>
58 <p>This interface offers ways to retrieve topology information about devices managed by the NVIDIA Management Library (NVML). </p>
6359 <h2 class="groupheader">Function Documentation</h2>
64 <a id="ga21545bd0f09d9b554c8e60a630e0e629"></a>
65 <h2 class="memtitle"><span class="permalink"><a href="#ga21545bd0f09d9b554c8e60a630e0e629">&#9670;&nbsp;</a></span>hwloc_shmem_topology_adopt()</h2>
60 <a id="ga26cf0036d09ec4d7cb692380fac9659d"></a>
61 <h2 class="memtitle"><span class="permalink"><a href="#ga26cf0036d09ec4d7cb692380fac9659d">&#9670;&nbsp;</a></span>hwloc_nvml_get_device_cpuset()</h2>
6662
6763 <div class="memitem">
6864 <div class="memproto">
65 <table class="mlabels">
66 <tr>
67 <td class="mlabels-left">
6968 <table class="memname">
7069 <tr>
71 <td class="memname">int hwloc_shmem_topology_adopt </td>
70 <td class="memname">static int hwloc_nvml_get_device_cpuset </td>
7271 <td>(</td>
73 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> *&#160;</td>
74 <td class="paramname"><em>topologyp</em>, </td>
75 </tr>
76 <tr>
77 <td class="paramkey"></td>
78 <td></td>
79 <td class="paramtype">int&#160;</td>
80 <td class="paramname"><em>fd</em>, </td>
81 </tr>
82 <tr>
83 <td class="paramkey"></td>
84 <td></td>
85 <td class="paramtype">hwloc_uint64_t&#160;</td>
86 <td class="paramname"><em>fileoffset</em>, </td>
87 </tr>
88 <tr>
89 <td class="paramkey"></td>
90 <td></td>
91 <td class="paramtype">void *&#160;</td>
92 <td class="paramname"><em>mmap_address</em>, </td>
93 </tr>
94 <tr>
95 <td class="paramkey"></td>
96 <td></td>
97 <td class="paramtype">size_t&#160;</td>
98 <td class="paramname"><em>length</em>, </td>
99 </tr>
100 <tr>
101 <td class="paramkey"></td>
102 <td></td>
103 <td class="paramtype">unsigned long&#160;</td>
104 <td class="paramname"><em>flags</em>&#160;</td>
72 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
73 <td class="paramname"><em>topology</em>, </td>
74 </tr>
75 <tr>
76 <td class="paramkey"></td>
77 <td></td>
78 <td class="paramtype">nvmlDevice_t&#160;</td>
79 <td class="paramname"><em>device</em>, </td>
80 </tr>
81 <tr>
82 <td class="paramkey"></td>
83 <td></td>
84 <td class="paramtype"><a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
85 <td class="paramname"><em>set</em>&#160;</td>
10586 </tr>
10687 <tr>
10788 <td></td>
10990 <td></td><td></td>
11091 </tr>
11192 </table>
93 </td>
94 <td class="mlabels-right">
95 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
96 </tr>
97 </table>
11298 </div><div class="memdoc">
11399
114 <p>Adopt a shared memory topology stored in a file. </p>
115 <p>Map a file in virtual memory and adopt the topology that was previously stored there with <a class="el" href="a00232.html#ga61b20e346fc76f76420e3a88cc80a671" title="Duplicate a topology to a shared memory file.">hwloc_shmem_topology_write()</a>.</p>
116 <p>The returned adopted topology in <code>topologyp</code> can be used just like any topology. And it must be destroyed with <a class="el" href="a00192.html#ga9f34a640b6fd28d23699d4d084667b15" title="Terminate and free a topology context.">hwloc_topology_destroy()</a> as usual.</p>
117 <p>However the topology is read-only. For instance, it cannot be modified with <a class="el" href="a00200.html#ga6db81ed13ac0a9d70cc80372ab537815" title="Restrict the topology to the given CPU set or nodeset.">hwloc_topology_restrict()</a> and object userdata pointers cannot be changed.</p>
118 <p>The segment of the file pointed by descriptor <code>fd</code>, starting at offset <code>fileoffset</code>, and of length <code>length</code> (in bytes), will be mapped at virtual address <code>mmap_address</code>.</p>
119 <p>The file pointed by descriptor <code>fd</code>, the offset <code>fileoffset</code>, the requested mapping virtual address <code>mmap_address</code> and the length <code>length</code> must be identical to what was given to <a class="el" href="a00232.html#ga61b20e346fc76f76420e3a88cc80a671" title="Duplicate a topology to a shared memory file.">hwloc_shmem_topology_write()</a> earlier.</p>
120 <dl class="section note"><dt>Note</dt><dd>Flags <code>flags</code> are currently unused, must be 0.</dd>
121 <dd>
122 The object userdata pointer should not be used unless the process that created the shared topology also placed userdata-pointed buffers in shared memory.</dd>
123 <dd>
124 This function takes care of calling <a class="el" href="a00192.html#ga0647ae66458fe68172eb5a320042f870" title="Verify that the topology is compatible with the current hwloc library.">hwloc_topology_abi_check()</a>.</dd></dl>
125 <dl class="section return"><dt>Returns</dt><dd>-1 with errno set to EBUSY if the virtual memory mapping defined by <code>mmap_address</code> and <code>length</code> isn't available in the process.</dd>
126 <dd>
127 -1 with errno set to EINVAL if <code>fileoffset</code>, <code>mmap_address</code> or <code>length</code> aren't page-aligned, or do not match what was given to <a class="el" href="a00232.html#ga61b20e346fc76f76420e3a88cc80a671" title="Duplicate a topology to a shared memory file.">hwloc_shmem_topology_write()</a> earlier.</dd>
128 <dd>
129 -1 with errno set to EINVAL if the layout of the topology structure is different between the writer process and the adopter process. </dd></dl>
130
131 </div>
132 </div>
133 <a id="ga772ab52750cdd0eec85128df24888001"></a>
134 <h2 class="memtitle"><span class="permalink"><a href="#ga772ab52750cdd0eec85128df24888001">&#9670;&nbsp;</a></span>hwloc_shmem_topology_get_length()</h2>
100 <p>Get the CPU set of processors that are physically close to NVML device <code>device</code>. </p>
101 <p>Store in <code>set</code> the CPU-set describing the locality of the NVML device <code>device</code>.</p>
102 <p>Topology <code>topology</code> and device <code>device</code> must match the local machine. I/O devices detection and the NVML component are not needed in the topology.</p>
103 <p>The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see <a class="el" href="a00232.html#gaf176159b5760a191871eff23f5a69ee9" title="Get the hwloc OS device object corresponding to NVML device device.">hwloc_nvml_get_device_osdev()</a> and <a class="el" href="a00232.html#gacd50fd0e2766ee05bc13234b46714756" title="Get the hwloc OS device object corresponding to the NVML device whose index is idx.">hwloc_nvml_get_device_osdev_by_index()</a>.</p>
104 <p>This function is currently only implemented in a meaningful way for Linux; other systems will simply get a full cpuset. </p>
105
106 </div>
107 </div>
108 <a id="gaf176159b5760a191871eff23f5a69ee9"></a>
109 <h2 class="memtitle"><span class="permalink"><a href="#gaf176159b5760a191871eff23f5a69ee9">&#9670;&nbsp;</a></span>hwloc_nvml_get_device_osdev()</h2>
135110
136111 <div class="memitem">
137112 <div class="memproto">
113 <table class="mlabels">
114 <tr>
115 <td class="mlabels-left">
138116 <table class="memname">
139117 <tr>
140 <td class="memname">int hwloc_shmem_topology_get_length </td>
118 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_nvml_get_device_osdev </td>
141119 <td>(</td>
142 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
120 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
143121 <td class="paramname"><em>topology</em>, </td>
144122 </tr>
145123 <tr>
146124 <td class="paramkey"></td>
147125 <td></td>
148 <td class="paramtype">size_t *&#160;</td>
149 <td class="paramname"><em>lengthp</em>, </td>
150 </tr>
151 <tr>
152 <td class="paramkey"></td>
153 <td></td>
154 <td class="paramtype">unsigned long&#160;</td>
155 <td class="paramname"><em>flags</em>&#160;</td>
126 <td class="paramtype">nvmlDevice_t&#160;</td>
127 <td class="paramname"><em>device</em>&#160;</td>
156128 </tr>
157129 <tr>
158130 <td></td>
160132 <td></td><td></td>
161133 </tr>
162134 </table>
135 </td>
136 <td class="mlabels-right">
137 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
138 </tr>
139 </table>
163140 </div><div class="memdoc">
164141
165 <p>Get the required shared memory length for storing a topology. </p>
166 <p>This length (in bytes) must be used in <a class="el" href="a00232.html#ga61b20e346fc76f76420e3a88cc80a671" title="Duplicate a topology to a shared memory file.">hwloc_shmem_topology_write()</a> and <a class="el" href="a00232.html#ga21545bd0f09d9b554c8e60a630e0e629" title="Adopt a shared memory topology stored in a file.">hwloc_shmem_topology_adopt()</a> later.</p>
167 <dl class="section note"><dt>Note</dt><dd>Flags <code>flags</code> are currently unused, must be 0. </dd></dl>
168
169 </div>
170 </div>
171 <a id="ga61b20e346fc76f76420e3a88cc80a671"></a>
172 <h2 class="memtitle"><span class="permalink"><a href="#ga61b20e346fc76f76420e3a88cc80a671">&#9670;&nbsp;</a></span>hwloc_shmem_topology_write()</h2>
142 <p>Get the hwloc OS device object corresponding to NVML device <code>device</code>. </p>
143 <dl class="section return"><dt>Returns</dt><dd>The hwloc OS device object that describes the given NVML device <code>device</code>. </dd>
144 <dd>
145 <code>NULL</code> if none could be found.</dd></dl>
146 <p>Topology <code>topology</code> and device <code>device</code> 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 <a class="el" href="a00232.html#ga26cf0036d09ec4d7cb692380fac9659d" title="Get the CPU set of processors that are physically close to NVML device device.">hwloc_nvml_get_device_cpuset()</a>.</p>
147 <dl class="section note"><dt>Note</dt><dd>The corresponding hwloc PCI device may be found by looking at the result parent pointer (unless PCI devices are filtered out). </dd></dl>
148
149 </div>
150 </div>
151 <a id="gacd50fd0e2766ee05bc13234b46714756"></a>
152 <h2 class="memtitle"><span class="permalink"><a href="#gacd50fd0e2766ee05bc13234b46714756">&#9670;&nbsp;</a></span>hwloc_nvml_get_device_osdev_by_index()</h2>
173153
174154 <div class="memitem">
175155 <div class="memproto">
156 <table class="mlabels">
157 <tr>
158 <td class="mlabels-left">
176159 <table class="memname">
177160 <tr>
178 <td class="memname">int hwloc_shmem_topology_write </td>
161 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_nvml_get_device_osdev_by_index </td>
179162 <td>(</td>
180 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
163 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
181164 <td class="paramname"><em>topology</em>, </td>
182165 </tr>
183166 <tr>
184167 <td class="paramkey"></td>
185168 <td></td>
186 <td class="paramtype">int&#160;</td>
187 <td class="paramname"><em>fd</em>, </td>
188 </tr>
189 <tr>
190 <td class="paramkey"></td>
191 <td></td>
192 <td class="paramtype">hwloc_uint64_t&#160;</td>
193 <td class="paramname"><em>fileoffset</em>, </td>
194 </tr>
195 <tr>
196 <td class="paramkey"></td>
197 <td></td>
198 <td class="paramtype">void *&#160;</td>
199 <td class="paramname"><em>mmap_address</em>, </td>
200 </tr>
201 <tr>
202 <td class="paramkey"></td>
203 <td></td>
204 <td class="paramtype">size_t&#160;</td>
205 <td class="paramname"><em>length</em>, </td>
206 </tr>
207 <tr>
208 <td class="paramkey"></td>
209 <td></td>
210 <td class="paramtype">unsigned long&#160;</td>
211 <td class="paramname"><em>flags</em>&#160;</td>
169 <td class="paramtype">unsigned&#160;</td>
170 <td class="paramname"><em>idx</em>&#160;</td>
212171 </tr>
213172 <tr>
214173 <td></td>
216175 <td></td><td></td>
217176 </tr>
218177 </table>
178 </td>
179 <td class="mlabels-right">
180 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
181 </tr>
182 </table>
219183 </div><div class="memdoc">
220184
221 <p>Duplicate a topology to a shared memory file. </p>
222 <p>Temporarily map a file in virtual memory and duplicate the topology <code>topology</code> by allocating duplicates in there.</p>
223 <p>The segment of the file pointed by descriptor <code>fd</code>, starting at offset <code>fileoffset</code>, and of length <code>length</code> (in bytes), will be temporarily mapped at virtual address <code>mmap_address</code> during the duplication.</p>
224 <p>The mapping length <code>length</code> must have been previously obtained with <a class="el" href="a00232.html#ga772ab52750cdd0eec85128df24888001" title="Get the required shared memory length for storing a topology.">hwloc_shmem_topology_get_length()</a> and the topology must not have been modified in the meantime.</p>
225 <dl class="section note"><dt>Note</dt><dd>Flags <code>flags</code> are currently unused, must be 0.</dd>
185 <p>Get the hwloc OS device object corresponding to the NVML device whose index is <code>idx</code>. </p>
186 <dl class="section return"><dt>Returns</dt><dd>The hwloc OS device object describing the NVML device whose index is <code>idx</code>. </dd>
226187 <dd>
227 The object userdata pointer is duplicated but the pointed buffer is not. However the caller may also allocate it manually in shared memory to share it as well.</dd></dl>
228 <dl class="section return"><dt>Returns</dt><dd>-1 with errno set to EBUSY if the virtual memory mapping defined by <code>mmap_address</code> and <code>length</code> isn't available in the process. </dd>
229 <dd>
230 -1 with errno set to EINVAL if <code>fileoffset</code>, <code>mmap_address</code> or <code>length</code> aren't page-aligned. </dd></dl>
188 <code>NULL</code> if none could be found.</dd></dl>
189 <p>The topology <code>topology</code> 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 NVML component must be enabled in the topology.</p>
190 <dl class="section note"><dt>Note</dt><dd>The corresponding PCI device object can be obtained by looking at the OS device parent object (unless PCI devices are filtered out). </dd></dl>
231191
232192 </div>
233193 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Components and Plugins: Discovery components</title>
7 <title>Hardware Locality (hwloc): Interoperability with the ROCm SMI Management Library</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="header">
4141 <div class="summary">
42 <a href="#nested-classes">Data Structures</a> </div>
42 <a href="#func-members">Functions</a> </div>
4343 <div class="headertitle">
44 <div class="title">Components and Plugins: Discovery components</div> </div>
44 <div class="title">Interoperability with the ROCm SMI Management Library</div> </div>
4545 </div><!--header-->
4646 <div class="contents">
4747 <table class="memberdecls">
48 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
49 Data Structures</h2></td></tr>
50 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00372.html">hwloc_disc_component</a></td></tr>
51 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
48 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
49 Functions</h2></td></tr>
50 <tr class="memitem:gaf939e697e3769c3524255318262b9c29"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00233.html#gaf939e697e3769c3524255318262b9c29">hwloc_rsmi_get_device_cpuset</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, uint32_t dv_ind, <a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</td></tr>
51 <tr class="separator:gaf939e697e3769c3524255318262b9c29"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:ga507d0acdd5e9ac374a8d120d59604c80"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00233.html#ga507d0acdd5e9ac374a8d120d59604c80">hwloc_rsmi_get_device_osdev_by_index</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, uint32_t dv_ind)</td></tr>
53 <tr class="separator:ga507d0acdd5e9ac374a8d120d59604c80"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:gaba05bf9710655bb5b1439bee654340ba"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00233.html#gaba05bf9710655bb5b1439bee654340ba">hwloc_rsmi_get_device_osdev</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, uint32_t dv_ind)</td></tr>
55 <tr class="separator:gaba05bf9710655bb5b1439bee654340ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
5256 </table>
5357 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
58 <p>This interface offers ways to retrieve topology information about devices managed by the ROCm SMI Management Library. </p>
59 <h2 class="groupheader">Function Documentation</h2>
60 <a id="gaf939e697e3769c3524255318262b9c29"></a>
61 <h2 class="memtitle"><span class="permalink"><a href="#gaf939e697e3769c3524255318262b9c29">&#9670;&nbsp;</a></span>hwloc_rsmi_get_device_cpuset()</h2>
62
63 <div class="memitem">
64 <div class="memproto">
65 <table class="mlabels">
66 <tr>
67 <td class="mlabels-left">
68 <table class="memname">
69 <tr>
70 <td class="memname">static int hwloc_rsmi_get_device_cpuset </td>
71 <td>(</td>
72 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
73 <td class="paramname"><em>topology</em>, </td>
74 </tr>
75 <tr>
76 <td class="paramkey"></td>
77 <td></td>
78 <td class="paramtype">uint32_t&#160;</td>
79 <td class="paramname"><em>dv_ind</em>, </td>
80 </tr>
81 <tr>
82 <td class="paramkey"></td>
83 <td></td>
84 <td class="paramtype"><a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
85 <td class="paramname"><em>set</em>&#160;</td>
86 </tr>
87 <tr>
88 <td></td>
89 <td>)</td>
90 <td></td><td></td>
91 </tr>
92 </table>
93 </td>
94 <td class="mlabels-right">
95 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
96 </tr>
97 </table>
98 </div><div class="memdoc">
99
100 <p>Get the CPU set of logical processors that are physically close to AMD GPU device whose index is <code>dv_ind</code>. </p>
101 <p>Store in <code>set</code> the CPU-set describing the locality of the AMD GPU device whose index is <code>dv_ind</code>.</p>
102 <p>Topology <code>topology</code> and device <code>dv_ind</code> must match the local machine. I/O devices detection and the ROCm SMI component are not needed in the topology.</p>
103 <p>The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see <a class="el" href="a00233.html#gaba05bf9710655bb5b1439bee654340ba" title="Get the hwloc OS device object corresponding to AMD GPU device, whose index is dv_ind.">hwloc_rsmi_get_device_osdev()</a> and <a class="el" href="a00233.html#ga507d0acdd5e9ac374a8d120d59604c80" title="Get the hwloc OS device object corresponding to the AMD GPU device whose index is dv_ind.">hwloc_rsmi_get_device_osdev_by_index()</a>.</p>
104 <p>This function is currently only implemented in a meaningful way for Linux; other systems will simply get a full cpuset. </p>
105
106 </div>
107 </div>
108 <a id="gaba05bf9710655bb5b1439bee654340ba"></a>
109 <h2 class="memtitle"><span class="permalink"><a href="#gaba05bf9710655bb5b1439bee654340ba">&#9670;&nbsp;</a></span>hwloc_rsmi_get_device_osdev()</h2>
110
111 <div class="memitem">
112 <div class="memproto">
113 <table class="mlabels">
114 <tr>
115 <td class="mlabels-left">
116 <table class="memname">
117 <tr>
118 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_rsmi_get_device_osdev </td>
119 <td>(</td>
120 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
121 <td class="paramname"><em>topology</em>, </td>
122 </tr>
123 <tr>
124 <td class="paramkey"></td>
125 <td></td>
126 <td class="paramtype">uint32_t&#160;</td>
127 <td class="paramname"><em>dv_ind</em>&#160;</td>
128 </tr>
129 <tr>
130 <td></td>
131 <td>)</td>
132 <td></td><td></td>
133 </tr>
134 </table>
135 </td>
136 <td class="mlabels-right">
137 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
138 </tr>
139 </table>
140 </div><div class="memdoc">
141
142 <p>Get the hwloc OS device object corresponding to AMD GPU device, whose index is <code>dv_ind</code>. </p>
143 <dl class="section return"><dt>Returns</dt><dd>The hwloc OS device object that describes the given AMD GPU, whose index is <code>dv_ind</code>. </dd>
144 <dd>
145 <code>NULL</code> if none could be found.</dd></dl>
146 <p>Topology <code>topology</code> and device <code>dv_ind</code> 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 <a class="el" href="a00233.html#gaf939e697e3769c3524255318262b9c29" title="Get the CPU set of logical processors that are physically close to AMD GPU device whose index is dv_i...">hwloc_rsmi_get_device_cpuset()</a>.</p>
147 <dl class="section note"><dt>Note</dt><dd>The corresponding hwloc PCI device may be found by looking at the result parent pointer (unless PCI devices are filtered out). </dd></dl>
148
149 </div>
150 </div>
151 <a id="ga507d0acdd5e9ac374a8d120d59604c80"></a>
152 <h2 class="memtitle"><span class="permalink"><a href="#ga507d0acdd5e9ac374a8d120d59604c80">&#9670;&nbsp;</a></span>hwloc_rsmi_get_device_osdev_by_index()</h2>
153
154 <div class="memitem">
155 <div class="memproto">
156 <table class="mlabels">
157 <tr>
158 <td class="mlabels-left">
159 <table class="memname">
160 <tr>
161 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_rsmi_get_device_osdev_by_index </td>
162 <td>(</td>
163 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
164 <td class="paramname"><em>topology</em>, </td>
165 </tr>
166 <tr>
167 <td class="paramkey"></td>
168 <td></td>
169 <td class="paramtype">uint32_t&#160;</td>
170 <td class="paramname"><em>dv_ind</em>&#160;</td>
171 </tr>
172 <tr>
173 <td></td>
174 <td>)</td>
175 <td></td><td></td>
176 </tr>
177 </table>
178 </td>
179 <td class="mlabels-right">
180 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
181 </tr>
182 </table>
183 </div><div class="memdoc">
184
185 <p>Get the hwloc OS device object corresponding to the AMD GPU device whose index is <code>dv_ind</code>. </p>
186 <dl class="section return"><dt>Returns</dt><dd>The hwloc OS device object describing the AMD GPU device whose index is <code>dv_ind</code>. </dd>
187 <dd>
188 <code>NULL</code> if none could be found.</dd></dl>
189 <p>The topology <code>topology</code> 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 ROCm SMI component must be enabled in the topology.</p>
190 <dl class="section note"><dt>Note</dt><dd>The corresponding PCI device object can be obtained by looking at the OS device parent object (unless PCI devices are filtered out). </dd></dl>
191
192 </div>
193 </div>
54194 </div><!-- contents -->
55195 <!-- start footer part -->
56196 <hr class="footer"/><address class="footer"><small>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Components and Plugins: Discovery backends</title>
7 <title>Hardware Locality (hwloc): Interoperability with the oneAPI Level Zero interface.</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="header">
4141 <div class="summary">
42 <a href="#nested-classes">Data Structures</a> &#124;
43 <a href="#typedef-members">Typedefs</a> &#124;
44 <a href="#enum-members">Enumerations</a> &#124;
4542 <a href="#func-members">Functions</a> </div>
4643 <div class="headertitle">
47 <div class="title">Components and Plugins: Discovery backends</div> </div>
44 <div class="title">Interoperability with the oneAPI Level Zero interface.</div> </div>
4845 </div><!--header-->
4946 <div class="contents">
5047 <table class="memberdecls">
51 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
52 Data Structures</h2></td></tr>
53 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00376.html">hwloc_disc_status</a></td></tr>
54 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
55 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00380.html">hwloc_backend</a></td></tr>
56 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
57 </table><table class="memberdecls">
58 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
59 Typedefs</h2></td></tr>
60 <tr class="memitem:ga600bba1a62022d5f516800649b1edb61"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="a00234.html#ga8c314121c2fc478161bcce758688b9a1">hwloc_disc_phase_e</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga600bba1a62022d5f516800649b1edb61">hwloc_disc_phase_t</a></td></tr>
61 <tr class="separator:ga600bba1a62022d5f516800649b1edb61"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 </table><table class="memberdecls">
63 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
64 Enumerations</h2></td></tr>
65 <tr class="memitem:ga8c314121c2fc478161bcce758688b9a1"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga8c314121c2fc478161bcce758688b9a1">hwloc_disc_phase_e</a> { <br />
66 &#160;&#160;<a class="el" href="a00234.html#gga8c314121c2fc478161bcce758688b9a1ab41c626c79e9ccb1e7d41e7076972283">HWLOC_DISC_PHASE_GLOBAL</a>
67 , <a class="el" href="a00234.html#gga8c314121c2fc478161bcce758688b9a1a6360474df197027761a69bd5fc620250">HWLOC_DISC_PHASE_CPU</a>
68 , <a class="el" href="a00234.html#gga8c314121c2fc478161bcce758688b9a1ac4264a243844c5fbbff495cdb1b4d51d">HWLOC_DISC_PHASE_MEMORY</a>
69 , <a class="el" href="a00234.html#gga8c314121c2fc478161bcce758688b9a1a677c52064dd987af4988346319b3675a">HWLOC_DISC_PHASE_PCI</a>
70 , <br />
71 &#160;&#160;<a class="el" href="a00234.html#gga8c314121c2fc478161bcce758688b9a1aa8e10626cba9af72f5605a1acbdc0015">HWLOC_DISC_PHASE_IO</a>
72 , <a class="el" href="a00234.html#gga8c314121c2fc478161bcce758688b9a1a8a7cde9bff0ab0d085b102a3e934939b">HWLOC_DISC_PHASE_MISC</a>
73 , <a class="el" href="a00234.html#gga8c314121c2fc478161bcce758688b9a1a68ca5c7ad75a6d9e5355689411621773">HWLOC_DISC_PHASE_ANNOTATE</a>
74 , <a class="el" href="a00234.html#gga8c314121c2fc478161bcce758688b9a1ada3ed3f00e74909353d6ea4a96cde5ad">HWLOC_DISC_PHASE_TWEAK</a>
75 <br />
76 }</td></tr>
77 <tr class="separator:ga8c314121c2fc478161bcce758688b9a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
78 <tr class="memitem:gaae1b38cf9b12e489884ce2a07275964b"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaae1b38cf9b12e489884ce2a07275964b">hwloc_disc_status_flag_e</a> { <a class="el" href="a00234.html#ggaae1b38cf9b12e489884ce2a07275964ba205d644d54a0840bd9165fce7d19e6b1">HWLOC_DISC_STATUS_FLAG_GOT_ALLOWED_RESOURCES</a>
79 }</td></tr>
80 <tr class="separator:gaae1b38cf9b12e489884ce2a07275964b"><td class="memSeparator" colspan="2">&#160;</td></tr>
81 </table><table class="memberdecls">
8248 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
8349 Functions</h2></td></tr>
84 <tr class="memitem:gadb068565ab6043cbe4d16bfcce067a61"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00380.html">hwloc_backend</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gadb068565ab6043cbe4d16bfcce067a61">hwloc_backend_alloc</a> (struct hwloc_topology *topology, struct <a class="el" href="a00372.html">hwloc_disc_component</a> *component)</td></tr>
85 <tr class="separator:gadb068565ab6043cbe4d16bfcce067a61"><td class="memSeparator" colspan="2">&#160;</td></tr>
86 <tr class="memitem:ga4715779d7191833e9b1a7490989a7497"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga4715779d7191833e9b1a7490989a7497">hwloc_backend_enable</a> (struct <a class="el" href="a00380.html">hwloc_backend</a> *backend)</td></tr>
87 <tr class="separator:ga4715779d7191833e9b1a7490989a7497"><td class="memSeparator" colspan="2">&#160;</td></tr>
50 <tr class="memitem:ga66281a9ba621357b1c7070b4fa19b5b8"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#ga66281a9ba621357b1c7070b4fa19b5b8">hwloc_levelzero_get_device_cpuset</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, ze_device_handle_t device, <a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</td></tr>
51 <tr class="separator:ga66281a9ba621357b1c7070b4fa19b5b8"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:gaf06cb737abcd2dc6db894c8914302d85"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00234.html#gaf06cb737abcd2dc6db894c8914302d85">hwloc_levelzero_get_device_osdev</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, ze_device_handle_t device)</td></tr>
53 <tr class="separator:gaf06cb737abcd2dc6db894c8914302d85"><td class="memSeparator" colspan="2">&#160;</td></tr>
8854 </table>
8955 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
90 <h2 class="groupheader">Typedef Documentation</h2>
91 <a id="ga600bba1a62022d5f516800649b1edb61"></a>
92 <h2 class="memtitle"><span class="permalink"><a href="#ga600bba1a62022d5f516800649b1edb61">&#9670;&nbsp;</a></span>hwloc_disc_phase_t</h2>
56 <p>This interface offers ways to retrieve topology information about devices managed by the Level Zero API. </p>
57 <h2 class="groupheader">Function Documentation</h2>
58 <a id="ga66281a9ba621357b1c7070b4fa19b5b8"></a>
59 <h2 class="memtitle"><span class="permalink"><a href="#ga66281a9ba621357b1c7070b4fa19b5b8">&#9670;&nbsp;</a></span>hwloc_levelzero_get_device_cpuset()</h2>
9360
9461 <div class="memitem">
9562 <div class="memproto">
63 <table class="mlabels">
64 <tr>
65 <td class="mlabels-left">
9666 <table class="memname">
9767 <tr>
98 <td class="memname">typedef enum <a class="el" href="a00234.html#ga8c314121c2fc478161bcce758688b9a1">hwloc_disc_phase_e</a> <a class="el" href="a00234.html#ga600bba1a62022d5f516800649b1edb61">hwloc_disc_phase_t</a></td>
99 </tr>
100 </table>
101 </div><div class="memdoc">
102
103 <p>Discovery phase. </p>
104
105 </div>
106 </div>
107 <h2 class="groupheader">Enumeration Type Documentation</h2>
108 <a id="ga8c314121c2fc478161bcce758688b9a1"></a>
109 <h2 class="memtitle"><span class="permalink"><a href="#ga8c314121c2fc478161bcce758688b9a1">&#9670;&nbsp;</a></span>hwloc_disc_phase_e</h2>
110
111 <div class="memitem">
112 <div class="memproto">
113 <table class="memname">
114 <tr>
115 <td class="memname">enum <a class="el" href="a00234.html#ga8c314121c2fc478161bcce758688b9a1">hwloc_disc_phase_e</a></td>
116 </tr>
117 </table>
118 </div><div class="memdoc">
119
120 <p>Discovery phase. </p>
121 <table class="fieldtable">
122 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga8c314121c2fc478161bcce758688b9a1ab41c626c79e9ccb1e7d41e7076972283"></a>HWLOC_DISC_PHASE_GLOBAL&#160;</td><td class="fielddoc"><p>xml or synthetic, platform-specific components such as bgq. Discovers everything including CPU, memory, I/O and everything else. A component with a Global phase usually excludes all other phases. </p>
123 </td></tr>
124 <tr><td class="fieldname"><a id="gga8c314121c2fc478161bcce758688b9a1a6360474df197027761a69bd5fc620250"></a>HWLOC_DISC_PHASE_CPU&#160;</td><td class="fielddoc"><p>CPU discovery. </p>
125 </td></tr>
126 <tr><td class="fieldname"><a id="gga8c314121c2fc478161bcce758688b9a1ac4264a243844c5fbbff495cdb1b4d51d"></a>HWLOC_DISC_PHASE_MEMORY&#160;</td><td class="fielddoc"><p>Attach memory to existing CPU objects. </p>
127 </td></tr>
128 <tr><td class="fieldname"><a id="gga8c314121c2fc478161bcce758688b9a1a677c52064dd987af4988346319b3675a"></a>HWLOC_DISC_PHASE_PCI&#160;</td><td class="fielddoc"><p>Attach PCI devices and bridges to existing CPU objects. </p>
129 </td></tr>
130 <tr><td class="fieldname"><a id="gga8c314121c2fc478161bcce758688b9a1aa8e10626cba9af72f5605a1acbdc0015"></a>HWLOC_DISC_PHASE_IO&#160;</td><td class="fielddoc"><p>I/O discovery that requires PCI devices (OS devices such as OpenCL, CUDA, etc.). </p>
131 </td></tr>
132 <tr><td class="fieldname"><a id="gga8c314121c2fc478161bcce758688b9a1a8a7cde9bff0ab0d085b102a3e934939b"></a>HWLOC_DISC_PHASE_MISC&#160;</td><td class="fielddoc"><p>Misc objects that gets added below anything else. </p>
133 </td></tr>
134 <tr><td class="fieldname"><a id="gga8c314121c2fc478161bcce758688b9a1a68ca5c7ad75a6d9e5355689411621773"></a>HWLOC_DISC_PHASE_ANNOTATE&#160;</td><td class="fielddoc"><p>Annotating existing objects, adding distances, etc. </p>
135 </td></tr>
136 <tr><td class="fieldname"><a id="gga8c314121c2fc478161bcce758688b9a1ada3ed3f00e74909353d6ea4a96cde5ad"></a>HWLOC_DISC_PHASE_TWEAK&#160;</td><td class="fielddoc"><p>Final tweaks to a ready-to-use topology. This phase runs once the topology is loaded, before it is returned to the topology. Hence it may only use the main hwloc API for modifying the topology, for instance by restricting it, adding info attributes, etc. </p>
137 </td></tr>
138 </table>
139
140 </div>
141 </div>
142 <a id="gaae1b38cf9b12e489884ce2a07275964b"></a>
143 <h2 class="memtitle"><span class="permalink"><a href="#gaae1b38cf9b12e489884ce2a07275964b">&#9670;&nbsp;</a></span>hwloc_disc_status_flag_e</h2>
144
145 <div class="memitem">
146 <div class="memproto">
147 <table class="memname">
148 <tr>
149 <td class="memname">enum <a class="el" href="a00234.html#gaae1b38cf9b12e489884ce2a07275964b">hwloc_disc_status_flag_e</a></td>
150 </tr>
151 </table>
152 </div><div class="memdoc">
153
154 <p>Discovery status flags. </p>
155 <table class="fieldtable">
156 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggaae1b38cf9b12e489884ce2a07275964ba205d644d54a0840bd9165fce7d19e6b1"></a>HWLOC_DISC_STATUS_FLAG_GOT_ALLOWED_RESOURCES&#160;</td><td class="fielddoc"><p>The sets of allowed resources were already retrieved. </p>
157 </td></tr>
158 </table>
159
160 </div>
161 </div>
162 <h2 class="groupheader">Function Documentation</h2>
163 <a id="gadb068565ab6043cbe4d16bfcce067a61"></a>
164 <h2 class="memtitle"><span class="permalink"><a href="#gadb068565ab6043cbe4d16bfcce067a61">&#9670;&nbsp;</a></span>hwloc_backend_alloc()</h2>
165
166 <div class="memitem">
167 <div class="memproto">
168 <table class="memname">
169 <tr>
170 <td class="memname">struct <a class="el" href="a00380.html">hwloc_backend</a>* hwloc_backend_alloc </td>
68 <td class="memname">static int hwloc_levelzero_get_device_cpuset </td>
17169 <td>(</td>
172 <td class="paramtype">struct hwloc_topology *&#160;</td>
70 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
17371 <td class="paramname"><em>topology</em>, </td>
17472 </tr>
17573 <tr>
17674 <td class="paramkey"></td>
17775 <td></td>
178 <td class="paramtype">struct <a class="el" href="a00372.html">hwloc_disc_component</a> *&#160;</td>
179 <td class="paramname"><em>component</em>&#160;</td>
76 <td class="paramtype">ze_device_handle_t&#160;</td>
77 <td class="paramname"><em>device</em>, </td>
78 </tr>
79 <tr>
80 <td class="paramkey"></td>
81 <td></td>
82 <td class="paramtype"><a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
83 <td class="paramname"><em>set</em>&#160;</td>
18084 </tr>
18185 <tr>
18286 <td></td>
18488 <td></td><td></td>
18589 </tr>
18690 </table>
91 </td>
92 <td class="mlabels-right">
93 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
94 </tr>
95 </table>
18796 </div><div class="memdoc">
18897
189 <p>Allocate a backend structure, set good default values, initialize backend-&gt;component and topology, etc. The caller will then modify whatever needed, and call <a class="el" href="a00234.html#ga4715779d7191833e9b1a7490989a7497" title="Enable a previously allocated and setup backend.">hwloc_backend_enable()</a>. </p>
98 <p>Get the CPU set of logical processors that are physically close to the Level Zero device <code>device</code>. </p>
99 <p>Store in <code>set</code> the CPU-set describing the locality of the Level Zero device <code>device</code>.</p>
100 <p>Topology <code>topology</code> and device <code>device</code> must match the local machine. The Level Zero must have been initialized with Sysman enabled (ZES_ENABLE_SYSMAN=1 in the environment). I/O devices detection and the Level Zero component are not needed in the topology.</p>
101 <p>The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see <a class="el" href="a00234.html#gaf06cb737abcd2dc6db894c8914302d85" title="Get the hwloc OS device object corresponding to Level Zero device device.">hwloc_levelzero_get_device_osdev()</a>.</p>
102 <p>This function is currently only implemented in a meaningful way for Linux; other systems will simply get a full cpuset. </p>
190103
191104 </div>
192105 </div>
193 <a id="ga4715779d7191833e9b1a7490989a7497"></a>
194 <h2 class="memtitle"><span class="permalink"><a href="#ga4715779d7191833e9b1a7490989a7497">&#9670;&nbsp;</a></span>hwloc_backend_enable()</h2>
106 <a id="gaf06cb737abcd2dc6db894c8914302d85"></a>
107 <h2 class="memtitle"><span class="permalink"><a href="#gaf06cb737abcd2dc6db894c8914302d85">&#9670;&nbsp;</a></span>hwloc_levelzero_get_device_osdev()</h2>
195108
196109 <div class="memitem">
197110 <div class="memproto">
111 <table class="mlabels">
112 <tr>
113 <td class="mlabels-left">
198114 <table class="memname">
199115 <tr>
200 <td class="memname">int hwloc_backend_enable </td>
116 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_levelzero_get_device_osdev </td>
201117 <td>(</td>
202 <td class="paramtype">struct <a class="el" href="a00380.html">hwloc_backend</a> *&#160;</td>
203 <td class="paramname"><em>backend</em></td><td>)</td>
118 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
119 <td class="paramname"><em>topology</em>, </td>
120 </tr>
121 <tr>
122 <td class="paramkey"></td>
204123 <td></td>
124 <td class="paramtype">ze_device_handle_t&#160;</td>
125 <td class="paramname"><em>device</em>&#160;</td>
126 </tr>
127 <tr>
128 <td></td>
129 <td>)</td>
130 <td></td><td></td>
205131 </tr>
206132 </table>
133 </td>
134 <td class="mlabels-right">
135 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
136 </tr>
137 </table>
207138 </div><div class="memdoc">
208139
209 <p>Enable a previously allocated and setup backend. </p>
140 <p>Get the hwloc OS device object corresponding to Level Zero device <code>device</code>. </p>
141 <dl class="section return"><dt>Returns</dt><dd>The hwloc OS device object that describes the given Level Zero device <code>device</code>. </dd>
142 <dd>
143 <code>NULL</code> if none could be found.</dd></dl>
144 <p>Topology <code>topology</code> and device <code>dv_ind</code> must match the local machine. 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 <a class="el" href="a00234.html#ga66281a9ba621357b1c7070b4fa19b5b8" title="Get the CPU set of logical processors that are physically close to the Level Zero device device.">hwloc_levelzero_get_device_cpuset()</a>.</p>
145 <dl class="section note"><dt>Note</dt><dd>The corresponding hwloc PCI device may be found by looking at the result parent pointer (unless PCI devices are filtered out). </dd></dl>
210146
211147 </div>
212148 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Components and Plugins: Generic components</title>
7 <title>Hardware Locality (hwloc): Interoperability with OpenGL displays</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="header">
4141 <div class="summary">
42 <a href="#nested-classes">Data Structures</a> &#124;
43 <a href="#typedef-members">Typedefs</a> &#124;
44 <a href="#enum-members">Enumerations</a> </div>
42 <a href="#func-members">Functions</a> </div>
4543 <div class="headertitle">
46 <div class="title">Components and Plugins: Generic components</div> </div>
44 <div class="title">Interoperability with OpenGL displays</div> </div>
4745 </div><!--header-->
4846 <div class="contents">
4947 <table class="memberdecls">
50 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
51 Data Structures</h2></td></tr>
52 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00384.html">hwloc_component</a></td></tr>
53 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 </table><table class="memberdecls">
55 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
56 Typedefs</h2></td></tr>
57 <tr class="memitem:ga31a5a455f4e666b936f0a9e8fb9a0f47"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="a00235.html#ga397a1bf7d21dd073320ad0045340f463">hwloc_component_type_e</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#ga31a5a455f4e666b936f0a9e8fb9a0f47">hwloc_component_type_t</a></td></tr>
58 <tr class="separator:ga31a5a455f4e666b936f0a9e8fb9a0f47"><td class="memSeparator" colspan="2">&#160;</td></tr>
59 </table><table class="memberdecls">
60 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
61 Enumerations</h2></td></tr>
62 <tr class="memitem:ga397a1bf7d21dd073320ad0045340f463"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#ga397a1bf7d21dd073320ad0045340f463">hwloc_component_type_e</a> { <a class="el" href="a00235.html#gga397a1bf7d21dd073320ad0045340f463a5d6e561f467fe9795a29e7368b613900">HWLOC_COMPONENT_TYPE_DISC</a>
63 , <a class="el" href="a00235.html#gga397a1bf7d21dd073320ad0045340f463adea00cd839c2141c032e1569fd5592bd">HWLOC_COMPONENT_TYPE_XML</a>
64 }</td></tr>
65 <tr class="separator:ga397a1bf7d21dd073320ad0045340f463"><td class="memSeparator" colspan="2">&#160;</td></tr>
48 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
49 Functions</h2></td></tr>
50 <tr class="memitem:ga4d66a77e4fe4051d6e5b772c1b8fcec5"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#ga4d66a77e4fe4051d6e5b772c1b8fcec5">hwloc_gl_get_display_osdev_by_port_device</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned port, unsigned device)</td></tr>
51 <tr class="separator:ga4d66a77e4fe4051d6e5b772c1b8fcec5"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:ga2d36ef441d1dfddf49cfb5c01bd58d8e"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#ga2d36ef441d1dfddf49cfb5c01bd58d8e">hwloc_gl_get_display_osdev_by_name</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const char *name)</td></tr>
53 <tr class="separator:ga2d36ef441d1dfddf49cfb5c01bd58d8e"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:ga936665ab5f0d29a081c4b78d11f4ad07"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00235.html#ga936665ab5f0d29a081c4b78d11f4ad07">hwloc_gl_get_display_by_osdev</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> osdev, unsigned *port, unsigned *device)</td></tr>
55 <tr class="separator:ga936665ab5f0d29a081c4b78d11f4ad07"><td class="memSeparator" colspan="2">&#160;</td></tr>
6656 </table>
6757 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
68 <h2 class="groupheader">Typedef Documentation</h2>
69 <a id="ga31a5a455f4e666b936f0a9e8fb9a0f47"></a>
70 <h2 class="memtitle"><span class="permalink"><a href="#ga31a5a455f4e666b936f0a9e8fb9a0f47">&#9670;&nbsp;</a></span>hwloc_component_type_t</h2>
58 <p>This interface offers ways to retrieve topology information about OpenGL displays.</p>
59 <p>Only the NVIDIA display locality information is currently available, using the NV-CONTROL X11 extension and the NVCtrl library. </p>
60 <h2 class="groupheader">Function Documentation</h2>
61 <a id="ga936665ab5f0d29a081c4b78d11f4ad07"></a>
62 <h2 class="memtitle"><span class="permalink"><a href="#ga936665ab5f0d29a081c4b78d11f4ad07">&#9670;&nbsp;</a></span>hwloc_gl_get_display_by_osdev()</h2>
7163
7264 <div class="memitem">
7365 <div class="memproto">
66 <table class="mlabels">
67 <tr>
68 <td class="mlabels-left">
7469 <table class="memname">
7570 <tr>
76 <td class="memname">typedef enum <a class="el" href="a00235.html#ga397a1bf7d21dd073320ad0045340f463">hwloc_component_type_e</a> <a class="el" href="a00235.html#ga31a5a455f4e666b936f0a9e8fb9a0f47">hwloc_component_type_t</a></td>
71 <td class="memname">static int hwloc_gl_get_display_by_osdev </td>
72 <td>(</td>
73 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
74 <td class="paramname"><em>topology</em>, </td>
75 </tr>
76 <tr>
77 <td class="paramkey"></td>
78 <td></td>
79 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
80 <td class="paramname"><em>osdev</em>, </td>
81 </tr>
82 <tr>
83 <td class="paramkey"></td>
84 <td></td>
85 <td class="paramtype">unsigned *&#160;</td>
86 <td class="paramname"><em>port</em>, </td>
87 </tr>
88 <tr>
89 <td class="paramkey"></td>
90 <td></td>
91 <td class="paramtype">unsigned *&#160;</td>
92 <td class="paramname"><em>device</em>&#160;</td>
93 </tr>
94 <tr>
95 <td></td>
96 <td>)</td>
97 <td></td><td></td>
7798 </tr>
7899 </table>
100 </td>
101 <td class="mlabels-right">
102 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
103 </tr>
104 </table>
79105 </div><div class="memdoc">
80106
81 <p>Generic component type. </p>
82
83 </div>
84 </div>
85 <h2 class="groupheader">Enumeration Type Documentation</h2>
86 <a id="ga397a1bf7d21dd073320ad0045340f463"></a>
87 <h2 class="memtitle"><span class="permalink"><a href="#ga397a1bf7d21dd073320ad0045340f463">&#9670;&nbsp;</a></span>hwloc_component_type_e</h2>
107 <p>Get the OpenGL display port and device corresponding to the given hwloc OS object. </p>
108 <p>Retrieves the OpenGL display port (server) in <code>port</code> and device (screen) in <code>screen</code> that correspond to the given hwloc OS device object.</p>
109 <dl class="section return"><dt>Returns</dt><dd><code>-1</code> if none could be found.</dd></dl>
110 <p>The topology <code>topology</code> 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 GL component must be enabled in the topology. </p>
111
112 </div>
113 </div>
114 <a id="ga2d36ef441d1dfddf49cfb5c01bd58d8e"></a>
115 <h2 class="memtitle"><span class="permalink"><a href="#ga2d36ef441d1dfddf49cfb5c01bd58d8e">&#9670;&nbsp;</a></span>hwloc_gl_get_display_osdev_by_name()</h2>
88116
89117 <div class="memitem">
90118 <div class="memproto">
119 <table class="mlabels">
120 <tr>
121 <td class="mlabels-left">
91122 <table class="memname">
92123 <tr>
93 <td class="memname">enum <a class="el" href="a00235.html#ga397a1bf7d21dd073320ad0045340f463">hwloc_component_type_e</a></td>
124 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_gl_get_display_osdev_by_name </td>
125 <td>(</td>
126 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
127 <td class="paramname"><em>topology</em>, </td>
128 </tr>
129 <tr>
130 <td class="paramkey"></td>
131 <td></td>
132 <td class="paramtype">const char *&#160;</td>
133 <td class="paramname"><em>name</em>&#160;</td>
134 </tr>
135 <tr>
136 <td></td>
137 <td>)</td>
138 <td></td><td></td>
94139 </tr>
95140 </table>
141 </td>
142 <td class="mlabels-right">
143 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
144 </tr>
145 </table>
96146 </div><div class="memdoc">
97147
98 <p>Generic component type. </p>
99 <table class="fieldtable">
100 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga397a1bf7d21dd073320ad0045340f463a5d6e561f467fe9795a29e7368b613900"></a>HWLOC_COMPONENT_TYPE_DISC&#160;</td><td class="fielddoc"><p>The data field must point to a struct <a class="el" href="a00372.html" title="Discovery component structure.">hwloc_disc_component</a>. </p>
101 </td></tr>
102 <tr><td class="fieldname"><a id="gga397a1bf7d21dd073320ad0045340f463adea00cd839c2141c032e1569fd5592bd"></a>HWLOC_COMPONENT_TYPE_XML&#160;</td><td class="fielddoc"><p>The data field must point to a struct hwloc_xml_component. </p>
103 </td></tr>
104 </table>
148 <p>Get the hwloc OS device object corresponding to the OpenGL display given by name. </p>
149 <dl class="section return"><dt>Returns</dt><dd>The hwloc OS device object describing the OpenGL display whose name is <code>name</code>, built as ":port.device" such as ":0.0" . </dd>
150 <dd>
151 <code>NULL</code> if none could be found.</dd></dl>
152 <p>The topology <code>topology</code> 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 GL component must be enabled in the topology.</p>
153 <dl class="section note"><dt>Note</dt><dd>The corresponding PCI device object can be obtained by looking at the OS device parent object (unless PCI devices are filtered out). </dd></dl>
154
155 </div>
156 </div>
157 <a id="ga4d66a77e4fe4051d6e5b772c1b8fcec5"></a>
158 <h2 class="memtitle"><span class="permalink"><a href="#ga4d66a77e4fe4051d6e5b772c1b8fcec5">&#9670;&nbsp;</a></span>hwloc_gl_get_display_osdev_by_port_device()</h2>
159
160 <div class="memitem">
161 <div class="memproto">
162 <table class="mlabels">
163 <tr>
164 <td class="mlabels-left">
165 <table class="memname">
166 <tr>
167 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_gl_get_display_osdev_by_port_device </td>
168 <td>(</td>
169 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
170 <td class="paramname"><em>topology</em>, </td>
171 </tr>
172 <tr>
173 <td class="paramkey"></td>
174 <td></td>
175 <td class="paramtype">unsigned&#160;</td>
176 <td class="paramname"><em>port</em>, </td>
177 </tr>
178 <tr>
179 <td class="paramkey"></td>
180 <td></td>
181 <td class="paramtype">unsigned&#160;</td>
182 <td class="paramname"><em>device</em>&#160;</td>
183 </tr>
184 <tr>
185 <td></td>
186 <td>)</td>
187 <td></td><td></td>
188 </tr>
189 </table>
190 </td>
191 <td class="mlabels-right">
192 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
193 </tr>
194 </table>
195 </div><div class="memdoc">
196
197 <p>Get the hwloc OS device object corresponding to the OpenGL display given by port and device index. </p>
198 <dl class="section return"><dt>Returns</dt><dd>The hwloc OS device object describing the OpenGL display whose port (server) is <code>port</code> and device (screen) is <code>device</code>. </dd>
199 <dd>
200 <code>NULL</code> if none could be found.</dd></dl>
201 <p>The topology <code>topology</code> 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 GL component must be enabled in the topology.</p>
202 <dl class="section note"><dt>Note</dt><dd>The corresponding PCI device object can be obtained by looking at the OS device parent object (unless PCI devices are filtered out). </dd></dl>
105203
106204 </div>
107205 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Components and Plugins: Core functions to be used by components</title>
7 <title>Hardware Locality (hwloc): Interoperability with OpenFabrics</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4141 <div class="summary">
4242 <a href="#func-members">Functions</a> </div>
4343 <div class="headertitle">
44 <div class="title">Components and Plugins: Core functions to be used by components</div> </div>
44 <div class="title">Interoperability with OpenFabrics</div> </div>
4545 </div><!--header-->
4646 <div class="contents">
4747 <table class="memberdecls">
4848 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
4949 Functions</h2></td></tr>
50 <tr class="memitem:gab527c1e0f243f057d31a724794ad9f88"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html#gab527c1e0f243f057d31a724794ad9f88">hwloc_hide_errors</a> (void)</td></tr>
51 <tr class="separator:gab527c1e0f243f057d31a724794ad9f88"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:ga1e105cfe3c8e77f34cc6df3841deebbc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html#ga1e105cfe3c8e77f34cc6df3841deebbc">hwloc__insert_object_by_cpuset</a> (struct hwloc_topology *topology, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> root, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj, const char *reason)</td></tr>
53 <tr class="separator:ga1e105cfe3c8e77f34cc6df3841deebbc"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:ga0ef97debde503b56367689b07bb3e901"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html#ga0ef97debde503b56367689b07bb3e901">hwloc_insert_object_by_parent</a> (struct hwloc_topology *topology, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> parent, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj)</td></tr>
55 <tr class="separator:ga0ef97debde503b56367689b07bb3e901"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:ga0b5c75b2dc37cea2e8a29c4812baf4b3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html#ga0b5c75b2dc37cea2e8a29c4812baf4b3">hwloc_alloc_setup_object</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, unsigned os_index)</td></tr>
57 <tr class="separator:ga0b5c75b2dc37cea2e8a29c4812baf4b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:ga754b61041ceee9685534a2c5d3cd0156"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html#ga754b61041ceee9685534a2c5d3cd0156">hwloc_obj_add_children_sets</a> (<a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj)</td></tr>
59 <tr class="separator:ga754b61041ceee9685534a2c5d3cd0156"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:ga120d8bd74922e1030b621409a6b0be61"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html#ga120d8bd74922e1030b621409a6b0be61">hwloc_topology_reconnect</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned long flags)</td></tr>
61 <tr class="separator:ga120d8bd74922e1030b621409a6b0be61"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:gac2eaed287bb215cf0bd33014e9e1d374"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html#gac2eaed287bb215cf0bd33014e9e1d374">hwloc_plugin_check_namespace</a> (const char *pluginname, const char *symbol)</td></tr>
63 <tr class="separator:gac2eaed287bb215cf0bd33014e9e1d374"><td class="memSeparator" colspan="2">&#160;</td></tr>
50 <tr class="memitem:ga3ea0d838c1e7f1671b35687aae2da6ae"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html#ga3ea0d838c1e7f1671b35687aae2da6ae">hwloc_ibv_get_device_cpuset</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, struct ibv_device *ibdev, <a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> set)</td></tr>
51 <tr class="separator:ga3ea0d838c1e7f1671b35687aae2da6ae"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:ga31d794567f4420bbdc8baa7bf8bf6138"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html#ga31d794567f4420bbdc8baa7bf8bf6138">hwloc_ibv_get_device_osdev_by_name</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const char *ibname)</td></tr>
53 <tr class="separator:ga31d794567f4420bbdc8baa7bf8bf6138"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:ga7324cdfd5db6ed2669c051ef7e1b64e1"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00236.html#ga7324cdfd5db6ed2669c051ef7e1b64e1">hwloc_ibv_get_device_osdev</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, struct ibv_device *ibdev)</td></tr>
55 <tr class="separator:ga7324cdfd5db6ed2669c051ef7e1b64e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
6456 </table>
6557 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
58 <p>This interface offers ways to retrieve topology information about OpenFabrics devices (InfiniBand, Omni-Path, usNIC, etc). </p>
6659 <h2 class="groupheader">Function Documentation</h2>
67 <a id="ga1e105cfe3c8e77f34cc6df3841deebbc"></a>
68 <h2 class="memtitle"><span class="permalink"><a href="#ga1e105cfe3c8e77f34cc6df3841deebbc">&#9670;&nbsp;</a></span>hwloc__insert_object_by_cpuset()</h2>
69
70 <div class="memitem">
71 <div class="memproto">
72 <table class="memname">
73 <tr>
74 <td class="memname"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc__insert_object_by_cpuset </td>
75 <td>(</td>
76 <td class="paramtype">struct hwloc_topology *&#160;</td>
77 <td class="paramname"><em>topology</em>, </td>
78 </tr>
79 <tr>
80 <td class="paramkey"></td>
81 <td></td>
82 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
83 <td class="paramname"><em>root</em>, </td>
84 </tr>
85 <tr>
86 <td class="paramkey"></td>
87 <td></td>
88 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
89 <td class="paramname"><em>obj</em>, </td>
90 </tr>
91 <tr>
92 <td class="paramkey"></td>
93 <td></td>
94 <td class="paramtype">const char *&#160;</td>
95 <td class="paramname"><em>reason</em>&#160;</td>
96 </tr>
97 <tr>
98 <td></td>
99 <td>)</td>
100 <td></td><td></td>
101 </tr>
102 </table>
103 </div><div class="memdoc">
104
105 <p>Add an object to the topology. </p>
106 <p>Insert new object <code>obj</code> in the topology starting under existing object <code>root</code> (if <code>NULL</code>, the topology root object is used).</p>
107 <p>It is sorted along the tree of other objects according to the inclusion of cpusets, to eventually be added as a child of the smallest object including this object.</p>
108 <p>If the cpuset is empty, the type of the object (and maybe some attributes) must be enough to find where to insert the object. This is especially true for NUMA nodes with memory and no CPUs.</p>
109 <p>The given object should not have children.</p>
110 <p>This shall only be called before levels are built.</p>
111 <p>The caller should check whether the object type is filtered-out before calling this function.</p>
112 <p>The topology cpuset/nodesets will be enlarged to include the object sets.</p>
113 <p><code>reason</code> is a unique string identifying where and why this insertion call was performed (it will be displayed in case of internal insertion error).</p>
114 <p>Returns the object on success. Returns NULL and frees obj on error. Returns another object and frees obj if it was merged with an identical pre-existing object. </p>
115
116 </div>
117 </div>
118 <a id="ga0b5c75b2dc37cea2e8a29c4812baf4b3"></a>
119 <h2 class="memtitle"><span class="permalink"><a href="#ga0b5c75b2dc37cea2e8a29c4812baf4b3">&#9670;&nbsp;</a></span>hwloc_alloc_setup_object()</h2>
120
121 <div class="memitem">
122 <div class="memproto">
123 <table class="memname">
124 <tr>
125 <td class="memname"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_alloc_setup_object </td>
126 <td>(</td>
127 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
128 <td class="paramname"><em>topology</em>, </td>
129 </tr>
130 <tr>
131 <td class="paramkey"></td>
132 <td></td>
133 <td class="paramtype"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
134 <td class="paramname"><em>type</em>, </td>
135 </tr>
136 <tr>
137 <td class="paramkey"></td>
138 <td></td>
139 <td class="paramtype">unsigned&#160;</td>
140 <td class="paramname"><em>os_index</em>&#160;</td>
141 </tr>
142 <tr>
143 <td></td>
144 <td>)</td>
145 <td></td><td></td>
146 </tr>
147 </table>
148 </div><div class="memdoc">
149
150 <p>Allocate and initialize an object of the given type and physical index. </p>
151 <p>If <code>os_index</code> is unknown or irrelevant, use <code>HWLOC_UNKNOWN_INDEX</code>. </p>
152
153 </div>
154 </div>
155 <a id="gab527c1e0f243f057d31a724794ad9f88"></a>
156 <h2 class="memtitle"><span class="permalink"><a href="#gab527c1e0f243f057d31a724794ad9f88">&#9670;&nbsp;</a></span>hwloc_hide_errors()</h2>
157
158 <div class="memitem">
159 <div class="memproto">
160 <table class="memname">
161 <tr>
162 <td class="memname">int hwloc_hide_errors </td>
163 <td>(</td>
164 <td class="paramtype">void&#160;</td>
165 <td class="paramname"></td><td>)</td>
166 <td></td>
167 </tr>
168 </table>
169 </div><div class="memdoc">
170
171 <p>Check whether insertion errors are hidden. </p>
172
173 </div>
174 </div>
175 <a id="ga0ef97debde503b56367689b07bb3e901"></a>
176 <h2 class="memtitle"><span class="permalink"><a href="#ga0ef97debde503b56367689b07bb3e901">&#9670;&nbsp;</a></span>hwloc_insert_object_by_parent()</h2>
177
178 <div class="memitem">
179 <div class="memproto">
180 <table class="memname">
181 <tr>
182 <td class="memname">void hwloc_insert_object_by_parent </td>
183 <td>(</td>
184 <td class="paramtype">struct hwloc_topology *&#160;</td>
185 <td class="paramname"><em>topology</em>, </td>
186 </tr>
187 <tr>
188 <td class="paramkey"></td>
189 <td></td>
190 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
191 <td class="paramname"><em>parent</em>, </td>
192 </tr>
193 <tr>
194 <td class="paramkey"></td>
195 <td></td>
196 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
197 <td class="paramname"><em>obj</em>&#160;</td>
198 </tr>
199 <tr>
200 <td></td>
201 <td>)</td>
202 <td></td><td></td>
203 </tr>
204 </table>
205 </div><div class="memdoc">
206
207 <p>Insert an object somewhere in the topology. </p>
208 <p>It is added as the last child of the given parent. The cpuset is completely ignored, so strange objects such as I/O devices should preferably be inserted with this.</p>
209 <p>When used for "normal" children with cpusets (when importing from XML when duplicating a topology), the caller should make sure that:</p><ul>
210 <li>children are inserted in order,</li>
211 <li>children cpusets do not intersect.</li>
212 </ul>
213 <p>The given object may have normal, I/O or Misc children, as long as they are in order as well. These children must have valid parent and next_sibling pointers.</p>
214 <p>The caller should check whether the object type is filtered-out before calling this function. </p>
215
216 </div>
217 </div>
218 <a id="ga754b61041ceee9685534a2c5d3cd0156"></a>
219 <h2 class="memtitle"><span class="permalink"><a href="#ga754b61041ceee9685534a2c5d3cd0156">&#9670;&nbsp;</a></span>hwloc_obj_add_children_sets()</h2>
220
221 <div class="memitem">
222 <div class="memproto">
223 <table class="memname">
224 <tr>
225 <td class="memname">int hwloc_obj_add_children_sets </td>
226 <td>(</td>
227 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
228 <td class="paramname"><em>obj</em></td><td>)</td>
229 <td></td>
230 </tr>
231 </table>
232 </div><div class="memdoc">
233
234 <p>Setup object cpusets/nodesets by OR'ing its children. </p>
235 <p>Used when adding an object late in the topology. Will update the new object by OR'ing all its new children sets.</p>
236 <p>Used when PCI backend adds a hostbridge parent, when distances add a new Group, etc. </p>
237
238 </div>
239 </div>
240 <a id="gac2eaed287bb215cf0bd33014e9e1d374"></a>
241 <h2 class="memtitle"><span class="permalink"><a href="#gac2eaed287bb215cf0bd33014e9e1d374">&#9670;&nbsp;</a></span>hwloc_plugin_check_namespace()</h2>
60 <a id="ga3ea0d838c1e7f1671b35687aae2da6ae"></a>
61 <h2 class="memtitle"><span class="permalink"><a href="#ga3ea0d838c1e7f1671b35687aae2da6ae">&#9670;&nbsp;</a></span>hwloc_ibv_get_device_cpuset()</h2>
24262
24363 <div class="memitem">
24464 <div class="memproto">
24767 <td class="mlabels-left">
24868 <table class="memname">
24969 <tr>
250 <td class="memname">static int hwloc_plugin_check_namespace </td>
70 <td class="memname">static int hwloc_ibv_get_device_cpuset </td>
25171 <td>(</td>
252 <td class="paramtype">const char *&#160;</td>
253 <td class="paramname"><em>pluginname</em>, </td>
254 </tr>
255 <tr>
256 <td class="paramkey"></td>
257 <td></td>
258 <td class="paramtype">const char *&#160;</td>
259 <td class="paramname"><em>symbol</em>&#160;</td>
72 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
73 <td class="paramname"><em>topology</em>, </td>
74 </tr>
75 <tr>
76 <td class="paramkey"></td>
77 <td></td>
78 <td class="paramtype">struct ibv_device *&#160;</td>
79 <td class="paramname"><em>ibdev</em>, </td>
80 </tr>
81 <tr>
82 <td class="paramkey"></td>
83 <td></td>
84 <td class="paramtype"><a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td>
85 <td class="paramname"><em>set</em>&#160;</td>
26086 </tr>
26187 <tr>
26288 <td></td>
27197 </table>
27298 </div><div class="memdoc">
27399
274 <p>Make sure that plugins can lookup core symbols. </p>
275 <p>This is a sanity check to avoid lazy-lookup failures when libhwloc is loaded within a plugin, and later tries to load its own plugins. This may fail (and abort the program) if libhwloc symbols are in a private namespace.</p>
276 <dl class="section return"><dt>Returns</dt><dd>0 on success. </dd>
277 <dd>
278 -1 if the plugin cannot be successfully loaded. The caller plugin init() callback should return a negative error code as well.</dd></dl>
279 <p>Plugins should call this function in their init() callback to avoid later crashes if lazy symbol resolution is used by the upper layer that loaded hwloc (e.g. OpenCL implementations using dlopen with RTLD_LAZY).</p>
280 <dl class="section note"><dt>Note</dt><dd>The build system must define HWLOC_INSIDE_PLUGIN if and only if building the caller as a plugin.</dd>
281 <dd>
282 This function should remain inline so plugins can call it even when they cannot find libhwloc symbols. </dd></dl>
283
284 </div>
285 </div>
286 <a id="ga120d8bd74922e1030b621409a6b0be61"></a>
287 <h2 class="memtitle"><span class="permalink"><a href="#ga120d8bd74922e1030b621409a6b0be61">&#9670;&nbsp;</a></span>hwloc_topology_reconnect()</h2>
100 <p>Get the CPU set of processors that are physically close to device <code>ibdev</code>. </p>
101 <p>Store in <code>set</code> the CPU-set describing the locality of the OpenFabrics device <code>ibdev</code> (InfiniBand, etc).</p>
102 <p>Topology <code>topology</code> and device <code>ibdev</code> must match the local machine. I/O devices detection is not needed in the topology.</p>
103 <p>The function only returns the locality of the device. If more information about the device is needed, OS objects should be used instead, see <a class="el" href="a00236.html#ga7324cdfd5db6ed2669c051ef7e1b64e1" title="Get the hwloc OS device object corresponding to the OpenFabrics device ibdev.">hwloc_ibv_get_device_osdev()</a> and <a class="el" href="a00236.html#ga31d794567f4420bbdc8baa7bf8bf6138" title="Get the hwloc OS device object corresponding to the OpenFabrics device named ibname.">hwloc_ibv_get_device_osdev_by_name()</a>.</p>
104 <p>This function is currently only implemented in a meaningful way for Linux; other systems will simply get a full cpuset. </p>
105
106 </div>
107 </div>
108 <a id="ga7324cdfd5db6ed2669c051ef7e1b64e1"></a>
109 <h2 class="memtitle"><span class="permalink"><a href="#ga7324cdfd5db6ed2669c051ef7e1b64e1">&#9670;&nbsp;</a></span>hwloc_ibv_get_device_osdev()</h2>
288110
289111 <div class="memitem">
290112 <div class="memproto">
113 <table class="mlabels">
114 <tr>
115 <td class="mlabels-left">
291116 <table class="memname">
292117 <tr>
293 <td class="memname">int hwloc_topology_reconnect </td>
118 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_ibv_get_device_osdev </td>
294119 <td>(</td>
295 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
120 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
296121 <td class="paramname"><em>topology</em>, </td>
297122 </tr>
298123 <tr>
299124 <td class="paramkey"></td>
300125 <td></td>
301 <td class="paramtype">unsigned long&#160;</td>
302 <td class="paramname"><em>flags</em>&#160;</td>
126 <td class="paramtype">struct ibv_device *&#160;</td>
127 <td class="paramname"><em>ibdev</em>&#160;</td>
303128 </tr>
304129 <tr>
305130 <td></td>
307132 <td></td><td></td>
308133 </tr>
309134 </table>
135 </td>
136 <td class="mlabels-right">
137 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
138 </tr>
139 </table>
310140 </div><div class="memdoc">
311141
312 <p>Request a reconnection of children and levels in the topology. </p>
313 <p>May be used by backends during discovery if they need arrays or lists of object within levels or children to be fully connected.</p>
314 <p><code>flags</code> is currently unused, must 0. </p>
142 <p>Get the hwloc OS device object corresponding to the OpenFabrics device <code>ibdev</code>. </p>
143 <dl class="section return"><dt>Returns</dt><dd>The hwloc OS device object describing the OpenFabrics device <code>ibdev</code> (InfiniBand, etc). </dd>
144 <dd>
145 <code>NULL</code> if none could be found.</dd></dl>
146 <p>Topology <code>topology</code> and device <code>ibdev</code> 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 <a class="el" href="a00236.html#ga3ea0d838c1e7f1671b35687aae2da6ae" title="Get the CPU set of processors that are physically close to device ibdev.">hwloc_ibv_get_device_cpuset()</a>.</p>
147 <dl class="section note"><dt>Note</dt><dd>The corresponding PCI device object can be obtained by looking at the OS device parent object. </dd></dl>
148
149 </div>
150 </div>
151 <a id="ga31d794567f4420bbdc8baa7bf8bf6138"></a>
152 <h2 class="memtitle"><span class="permalink"><a href="#ga31d794567f4420bbdc8baa7bf8bf6138">&#9670;&nbsp;</a></span>hwloc_ibv_get_device_osdev_by_name()</h2>
153
154 <div class="memitem">
155 <div class="memproto">
156 <table class="mlabels">
157 <tr>
158 <td class="mlabels-left">
159 <table class="memname">
160 <tr>
161 <td class="memname">static <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_ibv_get_device_osdev_by_name </td>
162 <td>(</td>
163 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
164 <td class="paramname"><em>topology</em>, </td>
165 </tr>
166 <tr>
167 <td class="paramkey"></td>
168 <td></td>
169 <td class="paramtype">const char *&#160;</td>
170 <td class="paramname"><em>ibname</em>&#160;</td>
171 </tr>
172 <tr>
173 <td></td>
174 <td>)</td>
175 <td></td><td></td>
176 </tr>
177 </table>
178 </td>
179 <td class="mlabels-right">
180 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
181 </tr>
182 </table>
183 </div><div class="memdoc">
184
185 <p>Get the hwloc OS device object corresponding to the OpenFabrics device named <code>ibname</code>. </p>
186 <dl class="section return"><dt>Returns</dt><dd>The hwloc OS device object describing the OpenFabrics device (InfiniBand, Omni-Path, usNIC, etc) whose name is <code>ibname</code> (mlx5_0, hfi1_0, usnic_0, qib0, etc). </dd>
187 <dd>
188 <code>NULL</code> if none could be found.</dd></dl>
189 <p>The name <code>ibname</code> is usually obtained from ibv_get_device_name().</p>
190 <p>The topology <code>topology</code> 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 must be enabled in the topology.</p>
191 <dl class="section note"><dt>Note</dt><dd>The corresponding PCI device object can be obtained by looking at the OS device parent object. </dd></dl>
315192
316193 </div>
317194 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Components and Plugins: Filtering objects</title>
7 <title>Hardware Locality (hwloc): Topology differences</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="header">
4141 <div class="summary">
42 <a href="#nested-classes">Data Structures</a> &#124;
43 <a href="#typedef-members">Typedefs</a> &#124;
44 <a href="#enum-members">Enumerations</a> &#124;
4245 <a href="#func-members">Functions</a> </div>
4346 <div class="headertitle">
44 <div class="title">Components and Plugins: Filtering objects</div> </div>
47 <div class="title">Topology differences</div> </div>
4548 </div><!--header-->
4649 <div class="contents">
4750 <table class="memberdecls">
51 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
52 Data Structures</h2></td></tr>
53 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">union &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00346.html">hwloc_topology_diff_obj_attr_u</a></td></tr>
54 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
55 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">union &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00362.html">hwloc_topology_diff_u</a></td></tr>
56 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
57 </table><table class="memberdecls">
58 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
59 Typedefs</h2></td></tr>
60 <tr class="memitem:ga74a3fefbaa17582fea86d76b312d6254"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="a00237.html#ga86f044210b0a9e9fa83acbdbbf7e05fd">hwloc_topology_diff_obj_attr_type_e</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a></td></tr>
61 <tr class="separator:ga74a3fefbaa17582fea86d76b312d6254"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:ga8470f631b7365c839d3e40d38c5b6291"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="a00237.html#ga38b28b7423b85a3321e6d0062d5f83d0">hwloc_topology_diff_type_e</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a></td></tr>
63 <tr class="separator:ga8470f631b7365c839d3e40d38c5b6291"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 <tr class="memitem:ga1bd6363f26f7961f83153aaa484a9b85"><td class="memItemLeft" align="right" valign="top">typedef union <a class="el" href="a00362.html">hwloc_topology_diff_u</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a></td></tr>
65 <tr class="separator:ga1bd6363f26f7961f83153aaa484a9b85"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 </table><table class="memberdecls">
67 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
68 Enumerations</h2></td></tr>
69 <tr class="memitem:ga86f044210b0a9e9fa83acbdbbf7e05fd"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#ga86f044210b0a9e9fa83acbdbbf7e05fd">hwloc_topology_diff_obj_attr_type_e</a> { <a class="el" href="a00237.html#gga86f044210b0a9e9fa83acbdbbf7e05fdabc7f0c7ed0b6864e902f4b70f2c7bc94">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_SIZE</a>
70 , <a class="el" href="a00237.html#gga86f044210b0a9e9fa83acbdbbf7e05fda94a8f37c51d62d15ac6192665dd49310">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_NAME</a>
71 , <a class="el" href="a00237.html#gga86f044210b0a9e9fa83acbdbbf7e05fda63430bf932434bc456282f636d39c2c2">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_INFO</a>
72 }</td></tr>
73 <tr class="separator:ga86f044210b0a9e9fa83acbdbbf7e05fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
74 <tr class="memitem:ga38b28b7423b85a3321e6d0062d5f83d0"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#ga38b28b7423b85a3321e6d0062d5f83d0">hwloc_topology_diff_type_e</a> { <a class="el" href="a00237.html#gga38b28b7423b85a3321e6d0062d5f83d0accbcaee230f79989debb284c8626f0c0">HWLOC_TOPOLOGY_DIFF_OBJ_ATTR</a>
75 , <a class="el" href="a00237.html#gga38b28b7423b85a3321e6d0062d5f83d0a3dc01fdeff355efe3fb2516bb454a147">HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX</a>
76 }</td></tr>
77 <tr class="separator:ga38b28b7423b85a3321e6d0062d5f83d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
78 <tr class="memitem:gada4c1273ce020afaf02b649496f7edf5"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#gada4c1273ce020afaf02b649496f7edf5">hwloc_topology_diff_apply_flags_e</a> { <a class="el" href="a00237.html#ggada4c1273ce020afaf02b649496f7edf5a821a160512d67ea0dd05dab873d2fc54">HWLOC_TOPOLOGY_DIFF_APPLY_REVERSE</a>
79 }</td></tr>
80 <tr class="separator:gada4c1273ce020afaf02b649496f7edf5"><td class="memSeparator" colspan="2">&#160;</td></tr>
81 </table><table class="memberdecls">
4882 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
4983 Functions</h2></td></tr>
50 <tr class="memitem:ga60203db6459ebf275bf48c40a37661a0"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#ga60203db6459ebf275bf48c40a37661a0">hwloc_filter_check_pcidev_subtype_important</a> (unsigned classid)</td></tr>
51 <tr class="separator:ga60203db6459ebf275bf48c40a37661a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:gac7d57a6d669820f360cf2a070a396560"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#gac7d57a6d669820f360cf2a070a396560">hwloc_filter_check_osdev_subtype_important</a> (<a class="el" href="a00190.html#gaa9a6941ef7b1c169412518d7ef71b3d2">hwloc_obj_osdev_type_t</a> subtype)</td></tr>
53 <tr class="separator:gac7d57a6d669820f360cf2a070a396560"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:ga2f402a43025a8a91e8513be1a15e4635"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#ga2f402a43025a8a91e8513be1a15e4635">hwloc_filter_check_keep_object_type</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
55 <tr class="separator:ga2f402a43025a8a91e8513be1a15e4635"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:ga4d2fdce071e5646ef147c9ff1539d1c9"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#ga4d2fdce071e5646ef147c9ff1539d1c9">hwloc_filter_check_keep_object</a> (<a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj)</td></tr>
57 <tr class="separator:ga4d2fdce071e5646ef147c9ff1539d1c9"><td class="memSeparator" colspan="2">&#160;</td></tr>
84 <tr class="memitem:ga8a1754f69fbb31364ea3ea2c39827c9f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#ga8a1754f69fbb31364ea3ea2c39827c9f">hwloc_topology_diff_build</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> newtopology, unsigned long flags, <a class="el" href="a00237.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a> *diff)</td></tr>
85 <tr class="separator:ga8a1754f69fbb31364ea3ea2c39827c9f"><td class="memSeparator" colspan="2">&#160;</td></tr>
86 <tr class="memitem:gae7b350d7e7478a4c6047b08aa6544f40"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#gae7b350d7e7478a4c6047b08aa6544f40">hwloc_topology_diff_apply</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00237.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a> diff, unsigned long flags)</td></tr>
87 <tr class="separator:gae7b350d7e7478a4c6047b08aa6544f40"><td class="memSeparator" colspan="2">&#160;</td></tr>
88 <tr class="memitem:ga5dcff18f80583ac6505a94ba2877fd1b"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#ga5dcff18f80583ac6505a94ba2877fd1b">hwloc_topology_diff_destroy</a> (<a class="el" href="a00237.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a> diff)</td></tr>
89 <tr class="separator:ga5dcff18f80583ac6505a94ba2877fd1b"><td class="memSeparator" colspan="2">&#160;</td></tr>
90 <tr class="memitem:ga2cd902ce8766e90d4f2523a8e87640e9"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#ga2cd902ce8766e90d4f2523a8e87640e9">hwloc_topology_diff_load_xml</a> (const char *xmlpath, <a class="el" href="a00237.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a> *diff, char **refname)</td></tr>
91 <tr class="separator:ga2cd902ce8766e90d4f2523a8e87640e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
92 <tr class="memitem:ga8a14dd7d01efbdd97af7fe85e8b84b20"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#ga8a14dd7d01efbdd97af7fe85e8b84b20">hwloc_topology_diff_export_xml</a> (<a class="el" href="a00237.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a> diff, const char *refname, const char *xmlpath)</td></tr>
93 <tr class="separator:ga8a14dd7d01efbdd97af7fe85e8b84b20"><td class="memSeparator" colspan="2">&#160;</td></tr>
94 <tr class="memitem:gad693810a5c51628529b9dd56f040fb81"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#gad693810a5c51628529b9dd56f040fb81">hwloc_topology_diff_load_xmlbuffer</a> (const char *xmlbuffer, int buflen, <a class="el" href="a00237.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a> *diff, char **refname)</td></tr>
95 <tr class="separator:gad693810a5c51628529b9dd56f040fb81"><td class="memSeparator" colspan="2">&#160;</td></tr>
96 <tr class="memitem:gaa2f0918df60c1c4a0bef9411f7d92a13"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00237.html#gaa2f0918df60c1c4a0bef9411f7d92a13">hwloc_topology_diff_export_xmlbuffer</a> (<a class="el" href="a00237.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a> diff, const char *refname, char **xmlbuffer, int *buflen)</td></tr>
97 <tr class="separator:gaa2f0918df60c1c4a0bef9411f7d92a13"><td class="memSeparator" colspan="2">&#160;</td></tr>
5898 </table>
5999 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
100 <p>Applications that manipulate many similar topologies, for instance one for each node of a homogeneous cluster, may want to compress topologies to reduce the memory footprint.</p>
101 <p>This file offers a way to manipulate the difference between topologies and export/import it to/from XML. Compression may therefore be achieved by storing one topology entirely while the others are only described by their differences with the former. The actual topology can be reconstructed when actually needed by applying the precomputed difference to the reference topology.</p>
102 <p>This interface targets very similar nodes. Only very simple differences between topologies are actually supported, for instance a change in the memory size, the name of the object, or some info attribute. More complex differences such as adding or removing objects cannot be represented in the difference structures and therefore return errors. Differences between object sets or topology-wide allowed sets, cannot be represented either.</p>
103 <p>It means that there is no need to apply the difference when looking at the tree organization (how many levels, how many objects per level, what kind of objects, CPU and node sets, etc) and when binding to objects. However the difference must be applied when looking at object attributes such as the name, the memory size or info attributes. </p>
104 <h2 class="groupheader">Typedef Documentation</h2>
105 <a id="ga74a3fefbaa17582fea86d76b312d6254"></a>
106 <h2 class="memtitle"><span class="permalink"><a href="#ga74a3fefbaa17582fea86d76b312d6254">&#9670;&nbsp;</a></span>hwloc_topology_diff_obj_attr_type_t</h2>
107
108 <div class="memitem">
109 <div class="memproto">
110 <table class="memname">
111 <tr>
112 <td class="memname">typedef enum <a class="el" href="a00237.html#ga86f044210b0a9e9fa83acbdbbf7e05fd">hwloc_topology_diff_obj_attr_type_e</a> <a class="el" href="a00237.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a></td>
113 </tr>
114 </table>
115 </div><div class="memdoc">
116
117 <p>Type of one object attribute difference. </p>
118
119 </div>
120 </div>
121 <a id="ga1bd6363f26f7961f83153aaa484a9b85"></a>
122 <h2 class="memtitle"><span class="permalink"><a href="#ga1bd6363f26f7961f83153aaa484a9b85">&#9670;&nbsp;</a></span>hwloc_topology_diff_t</h2>
123
124 <div class="memitem">
125 <div class="memproto">
126 <table class="memname">
127 <tr>
128 <td class="memname">typedef union <a class="el" href="a00362.html">hwloc_topology_diff_u</a> * <a class="el" href="a00237.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a></td>
129 </tr>
130 </table>
131 </div><div class="memdoc">
132
133 <p>One element of a difference list between two topologies. </p>
134
135 </div>
136 </div>
137 <a id="ga8470f631b7365c839d3e40d38c5b6291"></a>
138 <h2 class="memtitle"><span class="permalink"><a href="#ga8470f631b7365c839d3e40d38c5b6291">&#9670;&nbsp;</a></span>hwloc_topology_diff_type_t</h2>
139
140 <div class="memitem">
141 <div class="memproto">
142 <table class="memname">
143 <tr>
144 <td class="memname">typedef enum <a class="el" href="a00237.html#ga38b28b7423b85a3321e6d0062d5f83d0">hwloc_topology_diff_type_e</a> <a class="el" href="a00237.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a></td>
145 </tr>
146 </table>
147 </div><div class="memdoc">
148
149 <p>Type of one element of a difference list. </p>
150
151 </div>
152 </div>
153 <h2 class="groupheader">Enumeration Type Documentation</h2>
154 <a id="gada4c1273ce020afaf02b649496f7edf5"></a>
155 <h2 class="memtitle"><span class="permalink"><a href="#gada4c1273ce020afaf02b649496f7edf5">&#9670;&nbsp;</a></span>hwloc_topology_diff_apply_flags_e</h2>
156
157 <div class="memitem">
158 <div class="memproto">
159 <table class="memname">
160 <tr>
161 <td class="memname">enum <a class="el" href="a00237.html#gada4c1273ce020afaf02b649496f7edf5">hwloc_topology_diff_apply_flags_e</a></td>
162 </tr>
163 </table>
164 </div><div class="memdoc">
165
166 <p>Flags to be given to <a class="el" href="a00237.html#gae7b350d7e7478a4c6047b08aa6544f40" title="Apply a topology diff to an existing topology.">hwloc_topology_diff_apply()</a>. </p>
167 <table class="fieldtable">
168 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggada4c1273ce020afaf02b649496f7edf5a821a160512d67ea0dd05dab873d2fc54"></a>HWLOC_TOPOLOGY_DIFF_APPLY_REVERSE&#160;</td><td class="fielddoc"><p>Apply topology diff in reverse direction. </p>
169 </td></tr>
170 </table>
171
172 </div>
173 </div>
174 <a id="ga86f044210b0a9e9fa83acbdbbf7e05fd"></a>
175 <h2 class="memtitle"><span class="permalink"><a href="#ga86f044210b0a9e9fa83acbdbbf7e05fd">&#9670;&nbsp;</a></span>hwloc_topology_diff_obj_attr_type_e</h2>
176
177 <div class="memitem">
178 <div class="memproto">
179 <table class="memname">
180 <tr>
181 <td class="memname">enum <a class="el" href="a00237.html#ga86f044210b0a9e9fa83acbdbbf7e05fd">hwloc_topology_diff_obj_attr_type_e</a></td>
182 </tr>
183 </table>
184 </div><div class="memdoc">
185
186 <p>Type of one object attribute difference. </p>
187 <table class="fieldtable">
188 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga86f044210b0a9e9fa83acbdbbf7e05fdabc7f0c7ed0b6864e902f4b70f2c7bc94"></a>HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_SIZE&#160;</td><td class="fielddoc"><p>The object local memory is modified. The union is a <a class="el" href="a00354.html" title="Integer attribute modification with an optional index.">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a> (and the index field is ignored). </p>
189 </td></tr>
190 <tr><td class="fieldname"><a id="gga86f044210b0a9e9fa83acbdbbf7e05fda94a8f37c51d62d15ac6192665dd49310"></a>HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_NAME&#160;</td><td class="fielddoc"><p>The object name is modified. The union is a <a class="el" href="a00358.html" title="String attribute modification with an optional name.">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a> (and the name field is ignored). </p>
191 </td></tr>
192 <tr><td class="fieldname"><a id="gga86f044210b0a9e9fa83acbdbbf7e05fda63430bf932434bc456282f636d39c2c2"></a>HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_INFO&#160;</td><td class="fielddoc"><p>the value of an info attribute is modified. The union is a <a class="el" href="a00358.html" title="String attribute modification with an optional name.">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a>. </p>
193 </td></tr>
194 </table>
195
196 </div>
197 </div>
198 <a id="ga38b28b7423b85a3321e6d0062d5f83d0"></a>
199 <h2 class="memtitle"><span class="permalink"><a href="#ga38b28b7423b85a3321e6d0062d5f83d0">&#9670;&nbsp;</a></span>hwloc_topology_diff_type_e</h2>
200
201 <div class="memitem">
202 <div class="memproto">
203 <table class="memname">
204 <tr>
205 <td class="memname">enum <a class="el" href="a00237.html#ga38b28b7423b85a3321e6d0062d5f83d0">hwloc_topology_diff_type_e</a></td>
206 </tr>
207 </table>
208 </div><div class="memdoc">
209
210 <p>Type of one element of a difference list. </p>
211 <table class="fieldtable">
212 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga38b28b7423b85a3321e6d0062d5f83d0accbcaee230f79989debb284c8626f0c0"></a>HWLOC_TOPOLOGY_DIFF_OBJ_ATTR&#160;</td><td class="fielddoc"><p>An object attribute was changed. The union is a <a class="el" href="a00370.html">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>. </p>
213 </td></tr>
214 <tr><td class="fieldname"><a id="gga38b28b7423b85a3321e6d0062d5f83d0a3dc01fdeff355efe3fb2516bb454a147"></a>HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX&#160;</td><td class="fielddoc"><p>The difference is too complex, it cannot be represented. The difference below this object has not been checked. <a class="el" href="a00237.html#ga8a1754f69fbb31364ea3ea2c39827c9f" title="Compute the difference between 2 topologies.">hwloc_topology_diff_build()</a> will return 1. </p>
215 <p>The union is a <a class="el" href="a00374.html">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a>. </p>
216 </td></tr>
217 </table>
218
219 </div>
220 </div>
60221 <h2 class="groupheader">Function Documentation</h2>
61 <a id="ga4d2fdce071e5646ef147c9ff1539d1c9"></a>
62 <h2 class="memtitle"><span class="permalink"><a href="#ga4d2fdce071e5646ef147c9ff1539d1c9">&#9670;&nbsp;</a></span>hwloc_filter_check_keep_object()</h2>
63
64 <div class="memitem">
65 <div class="memproto">
66 <table class="mlabels">
67 <tr>
68 <td class="mlabels-left">
69 <table class="memname">
70 <tr>
71 <td class="memname">static int hwloc_filter_check_keep_object </td>
72 <td>(</td>
73 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
222 <a id="gae7b350d7e7478a4c6047b08aa6544f40"></a>
223 <h2 class="memtitle"><span class="permalink"><a href="#gae7b350d7e7478a4c6047b08aa6544f40">&#9670;&nbsp;</a></span>hwloc_topology_diff_apply()</h2>
224
225 <div class="memitem">
226 <div class="memproto">
227 <table class="memname">
228 <tr>
229 <td class="memname">int hwloc_topology_diff_apply </td>
230 <td>(</td>
231 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
74232 <td class="paramname"><em>topology</em>, </td>
75233 </tr>
76234 <tr>
77235 <td class="paramkey"></td>
78236 <td></td>
79 <td class="paramtype"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
80 <td class="paramname"><em>obj</em>&#160;</td>
237 <td class="paramtype"><a class="el" href="a00237.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a>&#160;</td>
238 <td class="paramname"><em>diff</em>, </td>
239 </tr>
240 <tr>
241 <td class="paramkey"></td>
242 <td></td>
243 <td class="paramtype">unsigned long&#160;</td>
244 <td class="paramname"><em>flags</em>&#160;</td>
81245 </tr>
82246 <tr>
83247 <td></td>
85249 <td></td><td></td>
86250 </tr>
87251 </table>
88 </td>
89 <td class="mlabels-right">
90 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
91 </tr>
92 </table>
93 </div><div class="memdoc">
94
95 <p>Check whether the given object should be filtered-out. </p>
96 <dl class="section return"><dt>Returns</dt><dd>1 if the object type should be kept, 0 otherwise. </dd></dl>
97
98 </div>
99 </div>
100 <a id="ga2f402a43025a8a91e8513be1a15e4635"></a>
101 <h2 class="memtitle"><span class="permalink"><a href="#ga2f402a43025a8a91e8513be1a15e4635">&#9670;&nbsp;</a></span>hwloc_filter_check_keep_object_type()</h2>
102
103 <div class="memitem">
104 <div class="memproto">
105 <table class="mlabels">
106 <tr>
107 <td class="mlabels-left">
108 <table class="memname">
109 <tr>
110 <td class="memname">static int hwloc_filter_check_keep_object_type </td>
111 <td>(</td>
112 <td class="paramtype"><a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
252 </div><div class="memdoc">
253
254 <p>Apply a topology diff to an existing topology. </p>
255 <p><code>flags</code> is an OR'ed set of <a class="el" href="a00237.html#gada4c1273ce020afaf02b649496f7edf5" title="Flags to be given to hwloc_topology_diff_apply().">hwloc_topology_diff_apply_flags_e</a>.</p>
256 <p>The new topology is modified in place. <a class="el" href="a00195.html#ga62a161fc5e6f120344dc69a7bee4e587" title="Duplicate a topology.">hwloc_topology_dup()</a> may be used to duplicate it before patching.</p>
257 <p>If the difference cannot be applied entirely, all previous applied elements are unapplied before returning.</p>
258 <dl class="section return"><dt>Returns</dt><dd>0 on success.</dd>
259 <dd>
260 -N if applying the difference failed while trying to apply the N-th part of the difference. For instance -1 is returned if the very first difference element could not be applied. </dd></dl>
261
262 </div>
263 </div>
264 <a id="ga8a1754f69fbb31364ea3ea2c39827c9f"></a>
265 <h2 class="memtitle"><span class="permalink"><a href="#ga8a1754f69fbb31364ea3ea2c39827c9f">&#9670;&nbsp;</a></span>hwloc_topology_diff_build()</h2>
266
267 <div class="memitem">
268 <div class="memproto">
269 <table class="memname">
270 <tr>
271 <td class="memname">int hwloc_topology_diff_build </td>
272 <td>(</td>
273 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
113274 <td class="paramname"><em>topology</em>, </td>
114275 </tr>
115276 <tr>
116277 <td class="paramkey"></td>
117278 <td></td>
118 <td class="paramtype"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
119 <td class="paramname"><em>type</em>&#160;</td>
279 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
280 <td class="paramname"><em>newtopology</em>, </td>
281 </tr>
282 <tr>
283 <td class="paramkey"></td>
284 <td></td>
285 <td class="paramtype">unsigned long&#160;</td>
286 <td class="paramname"><em>flags</em>, </td>
287 </tr>
288 <tr>
289 <td class="paramkey"></td>
290 <td></td>
291 <td class="paramtype"><a class="el" href="a00237.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a> *&#160;</td>
292 <td class="paramname"><em>diff</em>&#160;</td>
120293 </tr>
121294 <tr>
122295 <td></td>
124297 <td></td><td></td>
125298 </tr>
126299 </table>
127 </td>
128 <td class="mlabels-right">
129 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
130 </tr>
131 </table>
132 </div><div class="memdoc">
133
134 <p>Check whether a non-I/O object type should be filtered-out. </p>
135 <p>Cannot be used for I/O objects.</p>
136 <dl class="section return"><dt>Returns</dt><dd>1 if the object type should be kept, 0 otherwise. </dd></dl>
137
138 </div>
139 </div>
140 <a id="gac7d57a6d669820f360cf2a070a396560"></a>
141 <h2 class="memtitle"><span class="permalink"><a href="#gac7d57a6d669820f360cf2a070a396560">&#9670;&nbsp;</a></span>hwloc_filter_check_osdev_subtype_important()</h2>
142
143 <div class="memitem">
144 <div class="memproto">
145 <table class="mlabels">
146 <tr>
147 <td class="mlabels-left">
148 <table class="memname">
149 <tr>
150 <td class="memname">static int hwloc_filter_check_osdev_subtype_important </td>
151 <td>(</td>
152 <td class="paramtype"><a class="el" href="a00190.html#gaa9a6941ef7b1c169412518d7ef71b3d2">hwloc_obj_osdev_type_t</a>&#160;</td>
153 <td class="paramname"><em>subtype</em></td><td>)</td>
154 <td></td>
155 </tr>
156 </table>
157 </td>
158 <td class="mlabels-right">
159 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
160 </tr>
161 </table>
162 </div><div class="memdoc">
163
164 <p>Check whether the given OS device subtype is important. </p>
165 <dl class="section return"><dt>Returns</dt><dd>1 if important, 0 otherwise. </dd></dl>
166
167 </div>
168 </div>
169 <a id="ga60203db6459ebf275bf48c40a37661a0"></a>
170 <h2 class="memtitle"><span class="permalink"><a href="#ga60203db6459ebf275bf48c40a37661a0">&#9670;&nbsp;</a></span>hwloc_filter_check_pcidev_subtype_important()</h2>
171
172 <div class="memitem">
173 <div class="memproto">
174 <table class="mlabels">
175 <tr>
176 <td class="mlabels-left">
177 <table class="memname">
178 <tr>
179 <td class="memname">static int hwloc_filter_check_pcidev_subtype_important </td>
180 <td>(</td>
181 <td class="paramtype">unsigned&#160;</td>
182 <td class="paramname"><em>classid</em></td><td>)</td>
183 <td></td>
184 </tr>
185 </table>
186 </td>
187 <td class="mlabels-right">
188 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
189 </tr>
190 </table>
191 </div><div class="memdoc">
192
193 <p>Check whether the given PCI device classid is important. </p>
194 <dl class="section return"><dt>Returns</dt><dd>1 if important, 0 otherwise. </dd></dl>
300 </div><div class="memdoc">
301
302 <p>Compute the difference between 2 topologies. </p>
303 <p>The difference is stored as a list of <a class="el" href="a00237.html#ga1bd6363f26f7961f83153aaa484a9b85" title="One element of a difference list between two topologies.">hwloc_topology_diff_t</a> entries starting at <code>diff</code>. It is computed by doing a depth-first traversal of both topology trees simultaneously.</p>
304 <p>If the difference between 2 objects is too complex to be represented (for instance if some objects have different types, or different numbers of children), a special diff entry of type <a class="el" href="a00237.html#gga38b28b7423b85a3321e6d0062d5f83d0a3dc01fdeff355efe3fb2516bb454a147" title="The difference is too complex, it cannot be represented. The difference below this object has not bee...">HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX</a> is queued. The computation of the diff does not continue below these objects. So each such diff entry means that the difference between two subtrees could not be computed.</p>
305 <dl class="section return"><dt>Returns</dt><dd>0 if the difference can be represented properly.</dd>
306 <dd>
307 0 with <code>diff</code> pointing to NULL if there is no difference between the topologies.</dd>
308 <dd>
309 1 if the difference is too complex (see above). Some entries in the list will be of type <a class="el" href="a00237.html#gga38b28b7423b85a3321e6d0062d5f83d0a3dc01fdeff355efe3fb2516bb454a147" title="The difference is too complex, it cannot be represented. The difference below this object has not bee...">HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX</a>.</dd>
310 <dd>
311 -1 on any other error.</dd></dl>
312 <dl class="section note"><dt>Note</dt><dd><code>flags</code> is currently not used. It should be 0.</dd>
313 <dd>
314 The output diff has to be freed with <a class="el" href="a00237.html#ga5dcff18f80583ac6505a94ba2877fd1b" title="Destroy a list of topology differences.">hwloc_topology_diff_destroy()</a>.</dd>
315 <dd>
316 The output diff can only be exported to XML or passed to <a class="el" href="a00237.html#gae7b350d7e7478a4c6047b08aa6544f40" title="Apply a topology diff to an existing topology.">hwloc_topology_diff_apply()</a> if 0 was returned, i.e. if no entry of type <a class="el" href="a00237.html#gga38b28b7423b85a3321e6d0062d5f83d0a3dc01fdeff355efe3fb2516bb454a147" title="The difference is too complex, it cannot be represented. The difference below this object has not bee...">HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX</a> is listed.</dd>
317 <dd>
318 The output diff may be modified by removing some entries from the list. The removed entries should be freed by passing them to to <a class="el" href="a00237.html#ga5dcff18f80583ac6505a94ba2877fd1b" title="Destroy a list of topology differences.">hwloc_topology_diff_destroy()</a> (possible as another list). </dd></dl>
319
320 </div>
321 </div>
322 <a id="ga5dcff18f80583ac6505a94ba2877fd1b"></a>
323 <h2 class="memtitle"><span class="permalink"><a href="#ga5dcff18f80583ac6505a94ba2877fd1b">&#9670;&nbsp;</a></span>hwloc_topology_diff_destroy()</h2>
324
325 <div class="memitem">
326 <div class="memproto">
327 <table class="memname">
328 <tr>
329 <td class="memname">int hwloc_topology_diff_destroy </td>
330 <td>(</td>
331 <td class="paramtype"><a class="el" href="a00237.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a>&#160;</td>
332 <td class="paramname"><em>diff</em></td><td>)</td>
333 <td></td>
334 </tr>
335 </table>
336 </div><div class="memdoc">
337
338 <p>Destroy a list of topology differences. </p>
339
340 </div>
341 </div>
342 <a id="ga8a14dd7d01efbdd97af7fe85e8b84b20"></a>
343 <h2 class="memtitle"><span class="permalink"><a href="#ga8a14dd7d01efbdd97af7fe85e8b84b20">&#9670;&nbsp;</a></span>hwloc_topology_diff_export_xml()</h2>
344
345 <div class="memitem">
346 <div class="memproto">
347 <table class="memname">
348 <tr>
349 <td class="memname">int hwloc_topology_diff_export_xml </td>
350 <td>(</td>
351 <td class="paramtype"><a class="el" href="a00237.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a>&#160;</td>
352 <td class="paramname"><em>diff</em>, </td>
353 </tr>
354 <tr>
355 <td class="paramkey"></td>
356 <td></td>
357 <td class="paramtype">const char *&#160;</td>
358 <td class="paramname"><em>refname</em>, </td>
359 </tr>
360 <tr>
361 <td class="paramkey"></td>
362 <td></td>
363 <td class="paramtype">const char *&#160;</td>
364 <td class="paramname"><em>xmlpath</em>&#160;</td>
365 </tr>
366 <tr>
367 <td></td>
368 <td>)</td>
369 <td></td><td></td>
370 </tr>
371 </table>
372 </div><div class="memdoc">
373
374 <p>Export a list of topology differences to a XML file. </p>
375 <p>If not <code>NULL</code>, <code>refname</code> defines an identifier string for the reference topology which was used as a base when computing this difference. This identifier is usually the name of the other XML file that contains the reference topology. This attribute is given back when reading the diff from XML. </p>
376
377 </div>
378 </div>
379 <a id="gaa2f0918df60c1c4a0bef9411f7d92a13"></a>
380 <h2 class="memtitle"><span class="permalink"><a href="#gaa2f0918df60c1c4a0bef9411f7d92a13">&#9670;&nbsp;</a></span>hwloc_topology_diff_export_xmlbuffer()</h2>
381
382 <div class="memitem">
383 <div class="memproto">
384 <table class="memname">
385 <tr>
386 <td class="memname">int hwloc_topology_diff_export_xmlbuffer </td>
387 <td>(</td>
388 <td class="paramtype"><a class="el" href="a00237.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a>&#160;</td>
389 <td class="paramname"><em>diff</em>, </td>
390 </tr>
391 <tr>
392 <td class="paramkey"></td>
393 <td></td>
394 <td class="paramtype">const char *&#160;</td>
395 <td class="paramname"><em>refname</em>, </td>
396 </tr>
397 <tr>
398 <td class="paramkey"></td>
399 <td></td>
400 <td class="paramtype">char **&#160;</td>
401 <td class="paramname"><em>xmlbuffer</em>, </td>
402 </tr>
403 <tr>
404 <td class="paramkey"></td>
405 <td></td>
406 <td class="paramtype">int *&#160;</td>
407 <td class="paramname"><em>buflen</em>&#160;</td>
408 </tr>
409 <tr>
410 <td></td>
411 <td>)</td>
412 <td></td><td></td>
413 </tr>
414 </table>
415 </div><div class="memdoc">
416
417 <p>Export a list of topology differences to a XML buffer. </p>
418 <p>If not <code>NULL</code>, <code>refname</code> defines an identifier string for the reference topology which was used as a base when computing this difference. This identifier is usually the name of the other XML file that contains the reference topology. This attribute is given back when reading the diff from XML.</p>
419 <p>The returned buffer ends with a \0 that is included in the returned length.</p>
420 <dl class="section note"><dt>Note</dt><dd>The XML buffer should later be freed with <a class="el" href="a00215.html#ga293e4a6489f15fd16ad22a5734561cf1" title="Free a buffer allocated by hwloc_topology_export_xmlbuffer()">hwloc_free_xmlbuffer()</a>. </dd></dl>
421
422 </div>
423 </div>
424 <a id="ga2cd902ce8766e90d4f2523a8e87640e9"></a>
425 <h2 class="memtitle"><span class="permalink"><a href="#ga2cd902ce8766e90d4f2523a8e87640e9">&#9670;&nbsp;</a></span>hwloc_topology_diff_load_xml()</h2>
426
427 <div class="memitem">
428 <div class="memproto">
429 <table class="memname">
430 <tr>
431 <td class="memname">int hwloc_topology_diff_load_xml </td>
432 <td>(</td>
433 <td class="paramtype">const char *&#160;</td>
434 <td class="paramname"><em>xmlpath</em>, </td>
435 </tr>
436 <tr>
437 <td class="paramkey"></td>
438 <td></td>
439 <td class="paramtype"><a class="el" href="a00237.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a> *&#160;</td>
440 <td class="paramname"><em>diff</em>, </td>
441 </tr>
442 <tr>
443 <td class="paramkey"></td>
444 <td></td>
445 <td class="paramtype">char **&#160;</td>
446 <td class="paramname"><em>refname</em>&#160;</td>
447 </tr>
448 <tr>
449 <td></td>
450 <td>)</td>
451 <td></td><td></td>
452 </tr>
453 </table>
454 </div><div class="memdoc">
455
456 <p>Load a list of topology differences from a XML file. </p>
457 <p>If not <code>NULL</code>, <code>refname</code> will be filled with the identifier string of the reference topology for the difference file, if any was specified in the XML file. This identifier is usually the name of the other XML file that contains the reference topology.</p>
458 <dl class="section note"><dt>Note</dt><dd>the pointer returned in refname should later be freed by the caller. </dd></dl>
459
460 </div>
461 </div>
462 <a id="gad693810a5c51628529b9dd56f040fb81"></a>
463 <h2 class="memtitle"><span class="permalink"><a href="#gad693810a5c51628529b9dd56f040fb81">&#9670;&nbsp;</a></span>hwloc_topology_diff_load_xmlbuffer()</h2>
464
465 <div class="memitem">
466 <div class="memproto">
467 <table class="memname">
468 <tr>
469 <td class="memname">int hwloc_topology_diff_load_xmlbuffer </td>
470 <td>(</td>
471 <td class="paramtype">const char *&#160;</td>
472 <td class="paramname"><em>xmlbuffer</em>, </td>
473 </tr>
474 <tr>
475 <td class="paramkey"></td>
476 <td></td>
477 <td class="paramtype">int&#160;</td>
478 <td class="paramname"><em>buflen</em>, </td>
479 </tr>
480 <tr>
481 <td class="paramkey"></td>
482 <td></td>
483 <td class="paramtype"><a class="el" href="a00237.html#ga1bd6363f26f7961f83153aaa484a9b85">hwloc_topology_diff_t</a> *&#160;</td>
484 <td class="paramname"><em>diff</em>, </td>
485 </tr>
486 <tr>
487 <td class="paramkey"></td>
488 <td></td>
489 <td class="paramtype">char **&#160;</td>
490 <td class="paramname"><em>refname</em>&#160;</td>
491 </tr>
492 <tr>
493 <td></td>
494 <td>)</td>
495 <td></td><td></td>
496 </tr>
497 </table>
498 </div><div class="memdoc">
499
500 <p>Load a list of topology differences from a XML buffer. </p>
501 <p>If not <code>NULL</code>, <code>refname</code> will be filled with the identifier string of the reference topology for the difference file, if any was specified in the XML file. This identifier is usually the name of the other XML file that contains the reference topology.</p>
502 <dl class="section note"><dt>Note</dt><dd>the pointer returned in refname should later be freed by the caller. </dd></dl>
195503
196504 </div>
197505 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Components and Plugins: helpers for PCI discovery</title>
7 <title>Hardware Locality (hwloc): Sharing topologies between processes</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4141 <div class="summary">
4242 <a href="#func-members">Functions</a> </div>
4343 <div class="headertitle">
44 <div class="title">Components and Plugins: helpers for PCI discovery</div> </div>
44 <div class="title">Sharing topologies between processes</div> </div>
4545 </div><!--header-->
4646 <div class="contents">
4747 <table class="memberdecls">
4848 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
4949 Functions</h2></td></tr>
50 <tr class="memitem:ga706f71cfea09d547d2cbafa642d6e03b"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00238.html#ga706f71cfea09d547d2cbafa642d6e03b">hwloc_pcidisc_find_cap</a> (const unsigned char *config, unsigned cap)</td></tr>
51 <tr class="separator:ga706f71cfea09d547d2cbafa642d6e03b"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:ga51d1ebcbf9729987c9d17df3aa57d209"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00238.html#ga51d1ebcbf9729987c9d17df3aa57d209">hwloc_pcidisc_find_linkspeed</a> (const unsigned char *config, unsigned offset, float *linkspeed)</td></tr>
53 <tr class="separator:ga51d1ebcbf9729987c9d17df3aa57d209"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:ga6c55fb80c3d0c8c8e61078b3f38adde8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00238.html#ga6c55fb80c3d0c8c8e61078b3f38adde8">hwloc_pcidisc_check_bridge_type</a> (unsigned device_class, const unsigned char *config)</td></tr>
55 <tr class="separator:ga6c55fb80c3d0c8c8e61078b3f38adde8"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:ga95acf6822a49447c11067d0b843965ba"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00238.html#ga95acf6822a49447c11067d0b843965ba">hwloc_pcidisc_find_bridge_buses</a> (unsigned domain, unsigned bus, unsigned dev, unsigned func, unsigned *secondary_busp, unsigned *subordinate_busp, const unsigned char *config)</td></tr>
57 <tr class="separator:ga95acf6822a49447c11067d0b843965ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:gab76ddc4f55db8101ef0d44317965128c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00238.html#gab76ddc4f55db8101ef0d44317965128c">hwloc_pcidisc_tree_insert_by_busid</a> (struct <a class="el" href="a00244.html">hwloc_obj</a> **treep, struct <a class="el" href="a00244.html">hwloc_obj</a> *obj)</td></tr>
59 <tr class="separator:gab76ddc4f55db8101ef0d44317965128c"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:gabda1d6c1799e50b9226f8a4da9bd29ea"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00238.html#gabda1d6c1799e50b9226f8a4da9bd29ea">hwloc_pcidisc_tree_attach</a> (struct hwloc_topology *topology, struct <a class="el" href="a00244.html">hwloc_obj</a> *tree)</td></tr>
61 <tr class="separator:gabda1d6c1799e50b9226f8a4da9bd29ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
50 <tr class="memitem:ga772ab52750cdd0eec85128df24888001"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00238.html#ga772ab52750cdd0eec85128df24888001">hwloc_shmem_topology_get_length</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, size_t *lengthp, unsigned long flags)</td></tr>
51 <tr class="separator:ga772ab52750cdd0eec85128df24888001"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:ga61b20e346fc76f76420e3a88cc80a671"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00238.html#ga61b20e346fc76f76420e3a88cc80a671">hwloc_shmem_topology_write</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, int fd, hwloc_uint64_t fileoffset, void *mmap_address, size_t length, unsigned long flags)</td></tr>
53 <tr class="separator:ga61b20e346fc76f76420e3a88cc80a671"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:ga21545bd0f09d9b554c8e60a630e0e629"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00238.html#ga21545bd0f09d9b554c8e60a630e0e629">hwloc_shmem_topology_adopt</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> *topologyp, int fd, hwloc_uint64_t fileoffset, void *mmap_address, size_t length, unsigned long flags)</td></tr>
55 <tr class="separator:ga21545bd0f09d9b554c8e60a630e0e629"><td class="memSeparator" colspan="2">&#160;</td></tr>
6256 </table>
6357 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
58 <p>These functions are used to share a topology between processes by duplicating it into a file-backed shared-memory buffer.</p>
59 <p>The master process must first get the required shared-memory size for storing this topology with <a class="el" href="a00238.html#ga772ab52750cdd0eec85128df24888001" title="Get the required shared memory length for storing a topology.">hwloc_shmem_topology_get_length()</a>.</p>
60 <p>Then it must find a virtual memory area of that size that is available in all processes (identical virtual addresses in all processes). On Linux, this can be done by comparing holes found in /proc/&lt;pid&gt;/maps for each process.</p>
61 <p>Once found, it must open a destination file for storing the buffer, and pass it to <a class="el" href="a00238.html#ga61b20e346fc76f76420e3a88cc80a671" title="Duplicate a topology to a shared memory file.">hwloc_shmem_topology_write()</a> together with virtual memory address and length obtained above.</p>
62 <p>Other processes may then adopt this shared topology by opening the same file and passing it to <a class="el" href="a00238.html#ga21545bd0f09d9b554c8e60a630e0e629" title="Adopt a shared memory topology stored in a file.">hwloc_shmem_topology_adopt()</a> with the exact same virtual memory address and length. </p>
6463 <h2 class="groupheader">Function Documentation</h2>
65 <a id="ga6c55fb80c3d0c8c8e61078b3f38adde8"></a>
66 <h2 class="memtitle"><span class="permalink"><a href="#ga6c55fb80c3d0c8c8e61078b3f38adde8">&#9670;&nbsp;</a></span>hwloc_pcidisc_check_bridge_type()</h2>
64 <a id="ga21545bd0f09d9b554c8e60a630e0e629"></a>
65 <h2 class="memtitle"><span class="permalink"><a href="#ga21545bd0f09d9b554c8e60a630e0e629">&#9670;&nbsp;</a></span>hwloc_shmem_topology_adopt()</h2>
6766
6867 <div class="memitem">
6968 <div class="memproto">
7069 <table class="memname">
7170 <tr>
72 <td class="memname"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> hwloc_pcidisc_check_bridge_type </td>
71 <td class="memname">int hwloc_shmem_topology_adopt </td>
7372 <td>(</td>
74 <td class="paramtype">unsigned&#160;</td>
75 <td class="paramname"><em>device_class</em>, </td>
76 </tr>
77 <tr>
78 <td class="paramkey"></td>
79 <td></td>
80 <td class="paramtype">const unsigned char *&#160;</td>
81 <td class="paramname"><em>config</em>&#160;</td>
73 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> *&#160;</td>
74 <td class="paramname"><em>topologyp</em>, </td>
75 </tr>
76 <tr>
77 <td class="paramkey"></td>
78 <td></td>
79 <td class="paramtype">int&#160;</td>
80 <td class="paramname"><em>fd</em>, </td>
81 </tr>
82 <tr>
83 <td class="paramkey"></td>
84 <td></td>
85 <td class="paramtype">hwloc_uint64_t&#160;</td>
86 <td class="paramname"><em>fileoffset</em>, </td>
87 </tr>
88 <tr>
89 <td class="paramkey"></td>
90 <td></td>
91 <td class="paramtype">void *&#160;</td>
92 <td class="paramname"><em>mmap_address</em>, </td>
93 </tr>
94 <tr>
95 <td class="paramkey"></td>
96 <td></td>
97 <td class="paramtype">size_t&#160;</td>
98 <td class="paramname"><em>length</em>, </td>
99 </tr>
100 <tr>
101 <td class="paramkey"></td>
102 <td></td>
103 <td class="paramtype">unsigned long&#160;</td>
104 <td class="paramname"><em>flags</em>&#160;</td>
82105 </tr>
83106 <tr>
84107 <td></td>
88111 </table>
89112 </div><div class="memdoc">
90113
91 <p>Return the hwloc object type (PCI device or Bridge) for the given class and configuration space. </p>
92 <p>This function requires 16 bytes of common configuration header at the beginning of config. </p>
93
94 </div>
95 </div>
96 <a id="ga95acf6822a49447c11067d0b843965ba"></a>
97 <h2 class="memtitle"><span class="permalink"><a href="#ga95acf6822a49447c11067d0b843965ba">&#9670;&nbsp;</a></span>hwloc_pcidisc_find_bridge_buses()</h2>
114 <p>Adopt a shared memory topology stored in a file. </p>
115 <p>Map a file in virtual memory and adopt the topology that was previously stored there with <a class="el" href="a00238.html#ga61b20e346fc76f76420e3a88cc80a671" title="Duplicate a topology to a shared memory file.">hwloc_shmem_topology_write()</a>.</p>
116 <p>The returned adopted topology in <code>topologyp</code> can be used just like any topology. And it must be destroyed with <a class="el" href="a00195.html#ga9f34a640b6fd28d23699d4d084667b15" title="Terminate and free a topology context.">hwloc_topology_destroy()</a> as usual.</p>
117 <p>However the topology is read-only. For instance, it cannot be modified with <a class="el" href="a00203.html#ga6db81ed13ac0a9d70cc80372ab537815" title="Restrict the topology to the given CPU set or nodeset.">hwloc_topology_restrict()</a> and object userdata pointers cannot be changed.</p>
118 <p>The segment of the file pointed by descriptor <code>fd</code>, starting at offset <code>fileoffset</code>, and of length <code>length</code> (in bytes), will be mapped at virtual address <code>mmap_address</code>.</p>
119 <p>The file pointed by descriptor <code>fd</code>, the offset <code>fileoffset</code>, the requested mapping virtual address <code>mmap_address</code> and the length <code>length</code> must be identical to what was given to <a class="el" href="a00238.html#ga61b20e346fc76f76420e3a88cc80a671" title="Duplicate a topology to a shared memory file.">hwloc_shmem_topology_write()</a> earlier.</p>
120 <dl class="section note"><dt>Note</dt><dd>Flags <code>flags</code> are currently unused, must be 0.</dd>
121 <dd>
122 The object userdata pointer should not be used unless the process that created the shared topology also placed userdata-pointed buffers in shared memory.</dd>
123 <dd>
124 This function takes care of calling <a class="el" href="a00195.html#ga0647ae66458fe68172eb5a320042f870" title="Verify that the topology is compatible with the current hwloc library.">hwloc_topology_abi_check()</a>.</dd></dl>
125 <dl class="section return"><dt>Returns</dt><dd>-1 with errno set to EBUSY if the virtual memory mapping defined by <code>mmap_address</code> and <code>length</code> isn't available in the process.</dd>
126 <dd>
127 -1 with errno set to EINVAL if <code>fileoffset</code>, <code>mmap_address</code> or <code>length</code> aren't page-aligned, or do not match what was given to <a class="el" href="a00238.html#ga61b20e346fc76f76420e3a88cc80a671" title="Duplicate a topology to a shared memory file.">hwloc_shmem_topology_write()</a> earlier.</dd>
128 <dd>
129 -1 with errno set to EINVAL if the layout of the topology structure is different between the writer process and the adopter process. </dd></dl>
130
131 </div>
132 </div>
133 <a id="ga772ab52750cdd0eec85128df24888001"></a>
134 <h2 class="memtitle"><span class="permalink"><a href="#ga772ab52750cdd0eec85128df24888001">&#9670;&nbsp;</a></span>hwloc_shmem_topology_get_length()</h2>
98135
99136 <div class="memitem">
100137 <div class="memproto">
101138 <table class="memname">
102139 <tr>
103 <td class="memname">int hwloc_pcidisc_find_bridge_buses </td>
140 <td class="memname">int hwloc_shmem_topology_get_length </td>
104141 <td>(</td>
105 <td class="paramtype">unsigned&#160;</td>
106 <td class="paramname"><em>domain</em>, </td>
107 </tr>
108 <tr>
109 <td class="paramkey"></td>
110 <td></td>
111 <td class="paramtype">unsigned&#160;</td>
112 <td class="paramname"><em>bus</em>, </td>
113 </tr>
114 <tr>
115 <td class="paramkey"></td>
116 <td></td>
117 <td class="paramtype">unsigned&#160;</td>
118 <td class="paramname"><em>dev</em>, </td>
119 </tr>
120 <tr>
121 <td class="paramkey"></td>
122 <td></td>
123 <td class="paramtype">unsigned&#160;</td>
124 <td class="paramname"><em>func</em>, </td>
125 </tr>
126 <tr>
127 <td class="paramkey"></td>
128 <td></td>
129 <td class="paramtype">unsigned *&#160;</td>
130 <td class="paramname"><em>secondary_busp</em>, </td>
131 </tr>
132 <tr>
133 <td class="paramkey"></td>
134 <td></td>
135 <td class="paramtype">unsigned *&#160;</td>
136 <td class="paramname"><em>subordinate_busp</em>, </td>
137 </tr>
138 <tr>
139 <td class="paramkey"></td>
140 <td></td>
141 <td class="paramtype">const unsigned char *&#160;</td>
142 <td class="paramname"><em>config</em>&#160;</td>
142 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
143 <td class="paramname"><em>topology</em>, </td>
144 </tr>
145 <tr>
146 <td class="paramkey"></td>
147 <td></td>
148 <td class="paramtype">size_t *&#160;</td>
149 <td class="paramname"><em>lengthp</em>, </td>
150 </tr>
151 <tr>
152 <td class="paramkey"></td>
153 <td></td>
154 <td class="paramtype">unsigned long&#160;</td>
155 <td class="paramname"><em>flags</em>&#160;</td>
143156 </tr>
144157 <tr>
145158 <td></td>
149162 </table>
150163 </div><div class="memdoc">
151164
152 <p>Fills the attributes of the given PCI bridge using the given PCI config space. </p>
153 <p>This function requires 32 bytes of common configuration header at the beginning of config.</p>
154 <p>Returns -1 and destroys /p obj if bridge fields are invalid. </p>
155
156 </div>
157 </div>
158 <a id="ga706f71cfea09d547d2cbafa642d6e03b"></a>
159 <h2 class="memtitle"><span class="permalink"><a href="#ga706f71cfea09d547d2cbafa642d6e03b">&#9670;&nbsp;</a></span>hwloc_pcidisc_find_cap()</h2>
165 <p>Get the required shared memory length for storing a topology. </p>
166 <p>This length (in bytes) must be used in <a class="el" href="a00238.html#ga61b20e346fc76f76420e3a88cc80a671" title="Duplicate a topology to a shared memory file.">hwloc_shmem_topology_write()</a> and <a class="el" href="a00238.html#ga21545bd0f09d9b554c8e60a630e0e629" title="Adopt a shared memory topology stored in a file.">hwloc_shmem_topology_adopt()</a> later.</p>
167 <dl class="section note"><dt>Note</dt><dd>Flags <code>flags</code> are currently unused, must be 0. </dd></dl>
168
169 </div>
170 </div>
171 <a id="ga61b20e346fc76f76420e3a88cc80a671"></a>
172 <h2 class="memtitle"><span class="permalink"><a href="#ga61b20e346fc76f76420e3a88cc80a671">&#9670;&nbsp;</a></span>hwloc_shmem_topology_write()</h2>
160173
161174 <div class="memitem">
162175 <div class="memproto">
163176 <table class="memname">
164177 <tr>
165 <td class="memname">unsigned hwloc_pcidisc_find_cap </td>
178 <td class="memname">int hwloc_shmem_topology_write </td>
166179 <td>(</td>
167 <td class="paramtype">const unsigned char *&#160;</td>
168 <td class="paramname"><em>config</em>, </td>
169 </tr>
170 <tr>
171 <td class="paramkey"></td>
172 <td></td>
173 <td class="paramtype">unsigned&#160;</td>
174 <td class="paramname"><em>cap</em>&#160;</td>
180 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
181 <td class="paramname"><em>topology</em>, </td>
182 </tr>
183 <tr>
184 <td class="paramkey"></td>
185 <td></td>
186 <td class="paramtype">int&#160;</td>
187 <td class="paramname"><em>fd</em>, </td>
188 </tr>
189 <tr>
190 <td class="paramkey"></td>
191 <td></td>
192 <td class="paramtype">hwloc_uint64_t&#160;</td>
193 <td class="paramname"><em>fileoffset</em>, </td>
194 </tr>
195 <tr>
196 <td class="paramkey"></td>
197 <td></td>
198 <td class="paramtype">void *&#160;</td>
199 <td class="paramname"><em>mmap_address</em>, </td>
200 </tr>
201 <tr>
202 <td class="paramkey"></td>
203 <td></td>
204 <td class="paramtype">size_t&#160;</td>
205 <td class="paramname"><em>length</em>, </td>
206 </tr>
207 <tr>
208 <td class="paramkey"></td>
209 <td></td>
210 <td class="paramtype">unsigned long&#160;</td>
211 <td class="paramname"><em>flags</em>&#160;</td>
175212 </tr>
176213 <tr>
177214 <td></td>
181218 </table>
182219 </div><div class="memdoc">
183220
184 <p>Return the offset of the given capability in the PCI config space buffer. </p>
185 <p>This function requires a 256-bytes config space. Unknown/unavailable bytes should be set to 0xff. </p>
186
187 </div>
188 </div>
189 <a id="ga51d1ebcbf9729987c9d17df3aa57d209"></a>
190 <h2 class="memtitle"><span class="permalink"><a href="#ga51d1ebcbf9729987c9d17df3aa57d209">&#9670;&nbsp;</a></span>hwloc_pcidisc_find_linkspeed()</h2>
191
192 <div class="memitem">
193 <div class="memproto">
194 <table class="memname">
195 <tr>
196 <td class="memname">int hwloc_pcidisc_find_linkspeed </td>
197 <td>(</td>
198 <td class="paramtype">const unsigned char *&#160;</td>
199 <td class="paramname"><em>config</em>, </td>
200 </tr>
201 <tr>
202 <td class="paramkey"></td>
203 <td></td>
204 <td class="paramtype">unsigned&#160;</td>
205 <td class="paramname"><em>offset</em>, </td>
206 </tr>
207 <tr>
208 <td class="paramkey"></td>
209 <td></td>
210 <td class="paramtype">float *&#160;</td>
211 <td class="paramname"><em>linkspeed</em>&#160;</td>
212 </tr>
213 <tr>
214 <td></td>
215 <td>)</td>
216 <td></td><td></td>
217 </tr>
218 </table>
219 </div><div class="memdoc">
220
221 <p>Fill linkspeed by reading the PCI config space where PCI_CAP_ID_EXP is at position offset. </p>
222 <p>Needs 20 bytes of EXP capability block starting at offset in the config space for registers up to link status. </p>
223
224 </div>
225 </div>
226 <a id="gabda1d6c1799e50b9226f8a4da9bd29ea"></a>
227 <h2 class="memtitle"><span class="permalink"><a href="#gabda1d6c1799e50b9226f8a4da9bd29ea">&#9670;&nbsp;</a></span>hwloc_pcidisc_tree_attach()</h2>
228
229 <div class="memitem">
230 <div class="memproto">
231 <table class="memname">
232 <tr>
233 <td class="memname">int hwloc_pcidisc_tree_attach </td>
234 <td>(</td>
235 <td class="paramtype">struct hwloc_topology *&#160;</td>
236 <td class="paramname"><em>topology</em>, </td>
237 </tr>
238 <tr>
239 <td class="paramkey"></td>
240 <td></td>
241 <td class="paramtype">struct <a class="el" href="a00244.html">hwloc_obj</a> *&#160;</td>
242 <td class="paramname"><em>tree</em>&#160;</td>
243 </tr>
244 <tr>
245 <td></td>
246 <td>)</td>
247 <td></td><td></td>
248 </tr>
249 </table>
250 </div><div class="memdoc">
251
252 <p>Add some hostbridges on top of the given tree of PCI objects and attach them to the topology. </p>
253 <p>Other backends may lookup PCI objects or localities (for instance to attach OS devices) by using hwloc_pcidisc_find_by_busid() or hwloc_pcidisc_find_busid_parent(). </p>
254
255 </div>
256 </div>
257 <a id="gab76ddc4f55db8101ef0d44317965128c"></a>
258 <h2 class="memtitle"><span class="permalink"><a href="#gab76ddc4f55db8101ef0d44317965128c">&#9670;&nbsp;</a></span>hwloc_pcidisc_tree_insert_by_busid()</h2>
259
260 <div class="memitem">
261 <div class="memproto">
262 <table class="memname">
263 <tr>
264 <td class="memname">void hwloc_pcidisc_tree_insert_by_busid </td>
265 <td>(</td>
266 <td class="paramtype">struct <a class="el" href="a00244.html">hwloc_obj</a> **&#160;</td>
267 <td class="paramname"><em>treep</em>, </td>
268 </tr>
269 <tr>
270 <td class="paramkey"></td>
271 <td></td>
272 <td class="paramtype">struct <a class="el" href="a00244.html">hwloc_obj</a> *&#160;</td>
273 <td class="paramname"><em>obj</em>&#160;</td>
274 </tr>
275 <tr>
276 <td></td>
277 <td>)</td>
278 <td></td><td></td>
279 </tr>
280 </table>
281 </div><div class="memdoc">
282
283 <p>Insert a PCI object in the given PCI tree by looking at PCI bus IDs. </p>
284 <p>If <code>treep</code> points to <code>NULL</code>, the new object is inserted there. </p>
221 <p>Duplicate a topology to a shared memory file. </p>
222 <p>Temporarily map a file in virtual memory and duplicate the topology <code>topology</code> by allocating duplicates in there.</p>
223 <p>The segment of the file pointed by descriptor <code>fd</code>, starting at offset <code>fileoffset</code>, and of length <code>length</code> (in bytes), will be temporarily mapped at virtual address <code>mmap_address</code> during the duplication.</p>
224 <p>The mapping length <code>length</code> must have been previously obtained with <a class="el" href="a00238.html#ga772ab52750cdd0eec85128df24888001" title="Get the required shared memory length for storing a topology.">hwloc_shmem_topology_get_length()</a> and the topology must not have been modified in the meantime.</p>
225 <dl class="section note"><dt>Note</dt><dd>Flags <code>flags</code> are currently unused, must be 0.</dd>
226 <dd>
227 The object userdata pointer is duplicated but the pointed buffer is not. However the caller may also allocate it manually in shared memory to share it as well.</dd></dl>
228 <dl class="section return"><dt>Returns</dt><dd>-1 with errno set to EBUSY if the virtual memory mapping defined by <code>mmap_address</code> and <code>length</code> isn't available in the process. </dd>
229 <dd>
230 -1 with errno set to EINVAL if <code>fileoffset</code>, <code>mmap_address</code> or <code>length</code> aren't page-aligned. </dd></dl>
285231
286232 </div>
287233 </div>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Components and Plugins: finding PCI objects during other discoveries</title>
7 <title>Hardware Locality (hwloc): Components and Plugins: Discovery components</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="header">
4141 <div class="summary">
42 <a href="#func-members">Functions</a> </div>
42 <a href="#nested-classes">Data Structures</a> </div>
4343 <div class="headertitle">
44 <div class="title">Components and Plugins: finding PCI objects during other discoveries</div> </div>
44 <div class="title">Components and Plugins: Discovery components</div> </div>
4545 </div><!--header-->
4646 <div class="contents">
4747 <table class="memberdecls">
48 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
49 Functions</h2></td></tr>
50 <tr class="memitem:ga7964833550947636ab8975909de3fa98"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00244.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00239.html#ga7964833550947636ab8975909de3fa98">hwloc_pci_find_parent_by_busid</a> (struct hwloc_topology *topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)</td></tr>
51 <tr class="separator:ga7964833550947636ab8975909de3fa98"><td class="memSeparator" colspan="2">&#160;</td></tr>
48 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
49 Data Structures</h2></td></tr>
50 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00378.html">hwloc_disc_component</a></td></tr>
51 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
5252 </table>
5353 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
54 <h2 class="groupheader">Function Documentation</h2>
55 <a id="ga7964833550947636ab8975909de3fa98"></a>
56 <h2 class="memtitle"><span class="permalink"><a href="#ga7964833550947636ab8975909de3fa98">&#9670;&nbsp;</a></span>hwloc_pci_find_parent_by_busid()</h2>
57
58 <div class="memitem">
59 <div class="memproto">
60 <table class="memname">
61 <tr>
62 <td class="memname">struct <a class="el" href="a00244.html">hwloc_obj</a>* hwloc_pci_find_parent_by_busid </td>
63 <td>(</td>
64 <td class="paramtype">struct hwloc_topology *&#160;</td>
65 <td class="paramname"><em>topology</em>, </td>
66 </tr>
67 <tr>
68 <td class="paramkey"></td>
69 <td></td>
70 <td class="paramtype">unsigned&#160;</td>
71 <td class="paramname"><em>domain</em>, </td>
72 </tr>
73 <tr>
74 <td class="paramkey"></td>
75 <td></td>
76 <td class="paramtype">unsigned&#160;</td>
77 <td class="paramname"><em>bus</em>, </td>
78 </tr>
79 <tr>
80 <td class="paramkey"></td>
81 <td></td>
82 <td class="paramtype">unsigned&#160;</td>
83 <td class="paramname"><em>dev</em>, </td>
84 </tr>
85 <tr>
86 <td class="paramkey"></td>
87 <td></td>
88 <td class="paramtype">unsigned&#160;</td>
89 <td class="paramname"><em>func</em>&#160;</td>
90 </tr>
91 <tr>
92 <td></td>
93 <td>)</td>
94 <td></td><td></td>
95 </tr>
96 </table>
97 </div><div class="memdoc">
98
99 <p>Find the normal parent of a PCI bus ID. </p>
100 <p>Look at PCI affinity to find out where the given PCI bus ID should be attached.</p>
101 <p>This function should be used to attach an I/O device under the corresponding PCI object (if any), or under a normal (non-I/O) object with same locality. </p>
102
103 </div>
104 </div>
54 <dl class="section note"><dt>Note</dt><dd>These structures and functions may change when <a class="el" href="a00191.html#gaac5bc1f46f55e10ef0141a68ce70e21f" title="Current component and plugin ABI version (see hwloc/plugins.h)">HWLOC_COMPONENT_ABI</a> is modified. </dd></dl>
10555 </div><!-- contents -->
10656 <!-- start footer part -->
10757 <hr class="footer"/><address class="footer"><small>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Netloc API</title>
7 <title>Hardware Locality (hwloc): Components and Plugins: Discovery backends</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="header">
4141 <div class="summary">
42 <a href="#enum-members">Enumerations</a> </div>
42 <a href="#nested-classes">Data Structures</a> &#124;
43 <a href="#typedef-members">Typedefs</a> &#124;
44 <a href="#enum-members">Enumerations</a> &#124;
45 <a href="#func-members">Functions</a> </div>
4346 <div class="headertitle">
44 <div class="title">Netloc API</div> </div>
47 <div class="title">Components and Plugins: Discovery backends</div> </div>
4548 </div><!--header-->
4649 <div class="contents">
4750 <table class="memberdecls">
51 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
52 Data Structures</h2></td></tr>
53 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00382.html">hwloc_disc_status</a></td></tr>
54 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
55 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00386.html">hwloc_backend</a></td></tr>
56 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
57 </table><table class="memberdecls">
58 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
59 Typedefs</h2></td></tr>
60 <tr class="memitem:ga600bba1a62022d5f516800649b1edb61"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="a00240.html#ga8c314121c2fc478161bcce758688b9a1">hwloc_disc_phase_e</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html#ga600bba1a62022d5f516800649b1edb61">hwloc_disc_phase_t</a></td></tr>
61 <tr class="separator:ga600bba1a62022d5f516800649b1edb61"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 </table><table class="memberdecls">
4863 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
4964 Enumerations</h2></td></tr>
50 <tr class="memitem:ga61dadd085c1777f559549e05962b2c9e"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom">{ <br />
51 &#160;&#160;<a class="el" href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea4deb864e4b46fe70b83c3220442a627c">NETLOC_SUCCESS</a> = 0
52 , <a class="el" href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea4b33f8da6efc963562a93569ac8b349a">NETLOC_ERROR</a> = -1
53 , <a class="el" href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea6e4322619d38dec18dbd16a606b14aa8">NETLOC_ERROR_NOTDIR</a> = -2
54 , <a class="el" href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea81bc77a77d1a42054dc64b11a4cc8612">NETLOC_ERROR_NOENT</a> = -3
65 <tr class="memitem:ga8c314121c2fc478161bcce758688b9a1"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html#ga8c314121c2fc478161bcce758688b9a1">hwloc_disc_phase_e</a> { <br />
66 &#160;&#160;<a class="el" href="a00240.html#gga8c314121c2fc478161bcce758688b9a1ab41c626c79e9ccb1e7d41e7076972283">HWLOC_DISC_PHASE_GLOBAL</a>
67 , <a class="el" href="a00240.html#gga8c314121c2fc478161bcce758688b9a1a6360474df197027761a69bd5fc620250">HWLOC_DISC_PHASE_CPU</a>
68 , <a class="el" href="a00240.html#gga8c314121c2fc478161bcce758688b9a1ac4264a243844c5fbbff495cdb1b4d51d">HWLOC_DISC_PHASE_MEMORY</a>
69 , <a class="el" href="a00240.html#gga8c314121c2fc478161bcce758688b9a1a677c52064dd987af4988346319b3675a">HWLOC_DISC_PHASE_PCI</a>
5570 , <br />
56 &#160;&#160;<a class="el" href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea0dc7c18a5a3d027bf3f835eacdbed932">NETLOC_ERROR_EMPTY</a> = -4
57 , <a class="el" href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea4485021555c6cb24d5f6e391b1bd6dee">NETLOC_ERROR_MULTIPLE</a> = -5
58 , <a class="el" href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea4a55d10dfc1eb5c84027de7d48dfac4d">NETLOC_ERROR_NOT_IMPL</a> = -6
59 , <a class="el" href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea67dfc8498fa899900e2231fad4538556">NETLOC_ERROR_EXISTS</a> = -7
60 , <br />
61 &#160;&#160;<a class="el" href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea61b43e2553779d3610f894fd6698a6ee">NETLOC_ERROR_NOT_FOUND</a> = -8
62 , <a class="el" href="a00240.html#gga61dadd085c1777f559549e05962b2c9ea39974c6110bed527cb7658672b8eeeb9">NETLOC_ERROR_MAX</a> = -9
71 &#160;&#160;<a class="el" href="a00240.html#gga8c314121c2fc478161bcce758688b9a1aa8e10626cba9af72f5605a1acbdc0015">HWLOC_DISC_PHASE_IO</a>
72 , <a class="el" href="a00240.html#gga8c314121c2fc478161bcce758688b9a1a8a7cde9bff0ab0d085b102a3e934939b">HWLOC_DISC_PHASE_MISC</a>
73 , <a class="el" href="a00240.html#gga8c314121c2fc478161bcce758688b9a1a68ca5c7ad75a6d9e5355689411621773">HWLOC_DISC_PHASE_ANNOTATE</a>
74 , <a class="el" href="a00240.html#gga8c314121c2fc478161bcce758688b9a1ada3ed3f00e74909353d6ea4a96cde5ad">HWLOC_DISC_PHASE_TWEAK</a>
6375 <br />
6476 }</td></tr>
65 <tr class="separator:ga61dadd085c1777f559549e05962b2c9e"><td class="memSeparator" colspan="2">&#160;</td></tr>
77 <tr class="separator:ga8c314121c2fc478161bcce758688b9a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
78 <tr class="memitem:gaae1b38cf9b12e489884ce2a07275964b"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html#gaae1b38cf9b12e489884ce2a07275964b">hwloc_disc_status_flag_e</a> { <a class="el" href="a00240.html#ggaae1b38cf9b12e489884ce2a07275964ba205d644d54a0840bd9165fce7d19e6b1">HWLOC_DISC_STATUS_FLAG_GOT_ALLOWED_RESOURCES</a>
79 }</td></tr>
80 <tr class="separator:gaae1b38cf9b12e489884ce2a07275964b"><td class="memSeparator" colspan="2">&#160;</td></tr>
81 </table><table class="memberdecls">
82 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
83 Functions</h2></td></tr>
84 <tr class="memitem:gadb068565ab6043cbe4d16bfcce067a61"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00386.html">hwloc_backend</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html#gadb068565ab6043cbe4d16bfcce067a61">hwloc_backend_alloc</a> (struct hwloc_topology *topology, struct <a class="el" href="a00378.html">hwloc_disc_component</a> *component)</td></tr>
85 <tr class="separator:gadb068565ab6043cbe4d16bfcce067a61"><td class="memSeparator" colspan="2">&#160;</td></tr>
86 <tr class="memitem:ga4715779d7191833e9b1a7490989a7497"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00240.html#ga4715779d7191833e9b1a7490989a7497">hwloc_backend_enable</a> (struct <a class="el" href="a00386.html">hwloc_backend</a> *backend)</td></tr>
87 <tr class="separator:ga4715779d7191833e9b1a7490989a7497"><td class="memSeparator" colspan="2">&#160;</td></tr>
6688 </table>
6789 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
90 <dl class="section note"><dt>Note</dt><dd>These structures and functions may change when <a class="el" href="a00191.html#gaac5bc1f46f55e10ef0141a68ce70e21f" title="Current component and plugin ABI version (see hwloc/plugins.h)">HWLOC_COMPONENT_ABI</a> is modified. </dd></dl>
91 <h2 class="groupheader">Typedef Documentation</h2>
92 <a id="ga600bba1a62022d5f516800649b1edb61"></a>
93 <h2 class="memtitle"><span class="permalink"><a href="#ga600bba1a62022d5f516800649b1edb61">&#9670;&nbsp;</a></span>hwloc_disc_phase_t</h2>
94
95 <div class="memitem">
96 <div class="memproto">
97 <table class="memname">
98 <tr>
99 <td class="memname">typedef enum <a class="el" href="a00240.html#ga8c314121c2fc478161bcce758688b9a1">hwloc_disc_phase_e</a> <a class="el" href="a00240.html#ga600bba1a62022d5f516800649b1edb61">hwloc_disc_phase_t</a></td>
100 </tr>
101 </table>
102 </div><div class="memdoc">
103
104 <p>Discovery phase. </p>
105
106 </div>
107 </div>
68108 <h2 class="groupheader">Enumeration Type Documentation</h2>
69 <a id="ga61dadd085c1777f559549e05962b2c9e"></a>
70 <h2 class="memtitle"><span class="permalink"><a href="#ga61dadd085c1777f559549e05962b2c9e">&#9670;&nbsp;</a></span>anonymous enum</h2>
71
72 <div class="memitem">
73 <div class="memproto">
74 <table class="memname">
75 <tr>
76 <td class="memname">anonymous enum</td>
77 </tr>
78 </table>
79 </div><div class="memdoc">
80 <p>Return codes </p>
109 <a id="ga8c314121c2fc478161bcce758688b9a1"></a>
110 <h2 class="memtitle"><span class="permalink"><a href="#ga8c314121c2fc478161bcce758688b9a1">&#9670;&nbsp;</a></span>hwloc_disc_phase_e</h2>
111
112 <div class="memitem">
113 <div class="memproto">
114 <table class="memname">
115 <tr>
116 <td class="memname">enum <a class="el" href="a00240.html#ga8c314121c2fc478161bcce758688b9a1">hwloc_disc_phase_e</a></td>
117 </tr>
118 </table>
119 </div><div class="memdoc">
120
121 <p>Discovery phase. </p>
81122 <table class="fieldtable">
82 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga61dadd085c1777f559549e05962b2c9ea4deb864e4b46fe70b83c3220442a627c"></a>NETLOC_SUCCESS&#160;</td><td class="fielddoc"><p>Success </p>
83 </td></tr>
84 <tr><td class="fieldname"><a id="gga61dadd085c1777f559549e05962b2c9ea4b33f8da6efc963562a93569ac8b349a"></a>NETLOC_ERROR&#160;</td><td class="fielddoc"><p>Error: General condition </p>
85 </td></tr>
86 <tr><td class="fieldname"><a id="gga61dadd085c1777f559549e05962b2c9ea6e4322619d38dec18dbd16a606b14aa8"></a>NETLOC_ERROR_NOTDIR&#160;</td><td class="fielddoc"><p>Error: URI is not a directory </p>
87 </td></tr>
88 <tr><td class="fieldname"><a id="gga61dadd085c1777f559549e05962b2c9ea81bc77a77d1a42054dc64b11a4cc8612"></a>NETLOC_ERROR_NOENT&#160;</td><td class="fielddoc"><p>Error: URI is invalid, no such entry </p>
89 </td></tr>
90 <tr><td class="fieldname"><a id="gga61dadd085c1777f559549e05962b2c9ea0dc7c18a5a3d027bf3f835eacdbed932"></a>NETLOC_ERROR_EMPTY&#160;</td><td class="fielddoc"><p>Error: No networks found </p>
91 </td></tr>
92 <tr><td class="fieldname"><a id="gga61dadd085c1777f559549e05962b2c9ea4485021555c6cb24d5f6e391b1bd6dee"></a>NETLOC_ERROR_MULTIPLE&#160;</td><td class="fielddoc"><p>Error: Multiple matching networks found </p>
93 </td></tr>
94 <tr><td class="fieldname"><a id="gga61dadd085c1777f559549e05962b2c9ea4a55d10dfc1eb5c84027de7d48dfac4d"></a>NETLOC_ERROR_NOT_IMPL&#160;</td><td class="fielddoc"><p>Error: Interface not implemented </p>
95 </td></tr>
96 <tr><td class="fieldname"><a id="gga61dadd085c1777f559549e05962b2c9ea67dfc8498fa899900e2231fad4538556"></a>NETLOC_ERROR_EXISTS&#160;</td><td class="fielddoc"><p>Error: If the entry already exists when trying to add to a lookup table </p>
97 </td></tr>
98 <tr><td class="fieldname"><a id="gga61dadd085c1777f559549e05962b2c9ea61b43e2553779d3610f894fd6698a6ee"></a>NETLOC_ERROR_NOT_FOUND&#160;</td><td class="fielddoc"><p>Error: No path found </p>
99 </td></tr>
100 <tr><td class="fieldname"><a id="gga61dadd085c1777f559549e05962b2c9ea39974c6110bed527cb7658672b8eeeb9"></a>NETLOC_ERROR_MAX&#160;</td><td class="fielddoc"><p>Error: Enum upper bound marker. No errors less than this number Will not be returned externally. </p>
101 </td></tr>
102 </table>
123 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga8c314121c2fc478161bcce758688b9a1ab41c626c79e9ccb1e7d41e7076972283"></a>HWLOC_DISC_PHASE_GLOBAL&#160;</td><td class="fielddoc"><p>xml or synthetic, platform-specific components such as bgq. Discovers everything including CPU, memory, I/O and everything else. A component with a Global phase usually excludes all other phases. </p>
124 </td></tr>
125 <tr><td class="fieldname"><a id="gga8c314121c2fc478161bcce758688b9a1a6360474df197027761a69bd5fc620250"></a>HWLOC_DISC_PHASE_CPU&#160;</td><td class="fielddoc"><p>CPU discovery. </p>
126 </td></tr>
127 <tr><td class="fieldname"><a id="gga8c314121c2fc478161bcce758688b9a1ac4264a243844c5fbbff495cdb1b4d51d"></a>HWLOC_DISC_PHASE_MEMORY&#160;</td><td class="fielddoc"><p>Attach memory to existing CPU objects. </p>
128 </td></tr>
129 <tr><td class="fieldname"><a id="gga8c314121c2fc478161bcce758688b9a1a677c52064dd987af4988346319b3675a"></a>HWLOC_DISC_PHASE_PCI&#160;</td><td class="fielddoc"><p>Attach PCI devices and bridges to existing CPU objects. </p>
130 </td></tr>
131 <tr><td class="fieldname"><a id="gga8c314121c2fc478161bcce758688b9a1aa8e10626cba9af72f5605a1acbdc0015"></a>HWLOC_DISC_PHASE_IO&#160;</td><td class="fielddoc"><p>I/O discovery that requires PCI devices (OS devices such as OpenCL, CUDA, etc.). </p>
132 </td></tr>
133 <tr><td class="fieldname"><a id="gga8c314121c2fc478161bcce758688b9a1a8a7cde9bff0ab0d085b102a3e934939b"></a>HWLOC_DISC_PHASE_MISC&#160;</td><td class="fielddoc"><p>Misc objects that gets added below anything else. </p>
134 </td></tr>
135 <tr><td class="fieldname"><a id="gga8c314121c2fc478161bcce758688b9a1a68ca5c7ad75a6d9e5355689411621773"></a>HWLOC_DISC_PHASE_ANNOTATE&#160;</td><td class="fielddoc"><p>Annotating existing objects, adding distances, etc. </p>
136 </td></tr>
137 <tr><td class="fieldname"><a id="gga8c314121c2fc478161bcce758688b9a1ada3ed3f00e74909353d6ea4a96cde5ad"></a>HWLOC_DISC_PHASE_TWEAK&#160;</td><td class="fielddoc"><p>Final tweaks to a ready-to-use topology. This phase runs once the topology is loaded, before it is returned to the topology. Hence it may only use the main hwloc API for modifying the topology, for instance by restricting it, adding info attributes, etc. </p>
138 </td></tr>
139 </table>
140
141 </div>
142 </div>
143 <a id="gaae1b38cf9b12e489884ce2a07275964b"></a>
144 <h2 class="memtitle"><span class="permalink"><a href="#gaae1b38cf9b12e489884ce2a07275964b">&#9670;&nbsp;</a></span>hwloc_disc_status_flag_e</h2>
145
146 <div class="memitem">
147 <div class="memproto">
148 <table class="memname">
149 <tr>
150 <td class="memname">enum <a class="el" href="a00240.html#gaae1b38cf9b12e489884ce2a07275964b">hwloc_disc_status_flag_e</a></td>
151 </tr>
152 </table>
153 </div><div class="memdoc">
154
155 <p>Discovery status flags. </p>
156 <table class="fieldtable">
157 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="ggaae1b38cf9b12e489884ce2a07275964ba205d644d54a0840bd9165fce7d19e6b1"></a>HWLOC_DISC_STATUS_FLAG_GOT_ALLOWED_RESOURCES&#160;</td><td class="fielddoc"><p>The sets of allowed resources were already retrieved. </p>
158 </td></tr>
159 </table>
160
161 </div>
162 </div>
163 <h2 class="groupheader">Function Documentation</h2>
164 <a id="gadb068565ab6043cbe4d16bfcce067a61"></a>
165 <h2 class="memtitle"><span class="permalink"><a href="#gadb068565ab6043cbe4d16bfcce067a61">&#9670;&nbsp;</a></span>hwloc_backend_alloc()</h2>
166
167 <div class="memitem">
168 <div class="memproto">
169 <table class="memname">
170 <tr>
171 <td class="memname">struct <a class="el" href="a00386.html">hwloc_backend</a>* hwloc_backend_alloc </td>
172 <td>(</td>
173 <td class="paramtype">struct hwloc_topology *&#160;</td>
174 <td class="paramname"><em>topology</em>, </td>
175 </tr>
176 <tr>
177 <td class="paramkey"></td>
178 <td></td>
179 <td class="paramtype">struct <a class="el" href="a00378.html">hwloc_disc_component</a> *&#160;</td>
180 <td class="paramname"><em>component</em>&#160;</td>
181 </tr>
182 <tr>
183 <td></td>
184 <td>)</td>
185 <td></td><td></td>
186 </tr>
187 </table>
188 </div><div class="memdoc">
189
190 <p>Allocate a backend structure, set good default values, initialize backend-&gt;component and topology, etc. The caller will then modify whatever needed, and call <a class="el" href="a00240.html#ga4715779d7191833e9b1a7490989a7497" title="Enable a previously allocated and setup backend.">hwloc_backend_enable()</a>. </p>
191
192 </div>
193 </div>
194 <a id="ga4715779d7191833e9b1a7490989a7497"></a>
195 <h2 class="memtitle"><span class="permalink"><a href="#ga4715779d7191833e9b1a7490989a7497">&#9670;&nbsp;</a></span>hwloc_backend_enable()</h2>
196
197 <div class="memitem">
198 <div class="memproto">
199 <table class="memname">
200 <tr>
201 <td class="memname">int hwloc_backend_enable </td>
202 <td>(</td>
203 <td class="paramtype">struct <a class="el" href="a00386.html">hwloc_backend</a> *&#160;</td>
204 <td class="paramname"><em>backend</em></td><td>)</td>
205 <td></td>
206 </tr>
207 </table>
208 </div><div class="memdoc">
209
210 <p>Enable a previously allocated and setup backend. </p>
103211
104212 </div>
105213 </div>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Components and Plugins: Generic components</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#nested-classes">Data Structures</a> &#124;
43 <a href="#typedef-members">Typedefs</a> &#124;
44 <a href="#enum-members">Enumerations</a> </div>
45 <div class="headertitle">
46 <div class="title">Components and Plugins: Generic components</div> </div>
47 </div><!--header-->
48 <div class="contents">
49 <table class="memberdecls">
50 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
51 Data Structures</h2></td></tr>
52 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00390.html">hwloc_component</a></td></tr>
53 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 </table><table class="memberdecls">
55 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
56 Typedefs</h2></td></tr>
57 <tr class="memitem:ga31a5a455f4e666b936f0a9e8fb9a0f47"><td class="memItemLeft" align="right" valign="top">typedef enum <a class="el" href="a00241.html#ga397a1bf7d21dd073320ad0045340f463">hwloc_component_type_e</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html#ga31a5a455f4e666b936f0a9e8fb9a0f47">hwloc_component_type_t</a></td></tr>
58 <tr class="separator:ga31a5a455f4e666b936f0a9e8fb9a0f47"><td class="memSeparator" colspan="2">&#160;</td></tr>
59 </table><table class="memberdecls">
60 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
61 Enumerations</h2></td></tr>
62 <tr class="memitem:ga397a1bf7d21dd073320ad0045340f463"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00241.html#ga397a1bf7d21dd073320ad0045340f463">hwloc_component_type_e</a> { <a class="el" href="a00241.html#gga397a1bf7d21dd073320ad0045340f463a5d6e561f467fe9795a29e7368b613900">HWLOC_COMPONENT_TYPE_DISC</a>
63 , <a class="el" href="a00241.html#gga397a1bf7d21dd073320ad0045340f463adea00cd839c2141c032e1569fd5592bd">HWLOC_COMPONENT_TYPE_XML</a>
64 }</td></tr>
65 <tr class="separator:ga397a1bf7d21dd073320ad0045340f463"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 </table>
67 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
68 <dl class="section note"><dt>Note</dt><dd>These structures and functions may change when <a class="el" href="a00191.html#gaac5bc1f46f55e10ef0141a68ce70e21f" title="Current component and plugin ABI version (see hwloc/plugins.h)">HWLOC_COMPONENT_ABI</a> is modified. </dd></dl>
69 <h2 class="groupheader">Typedef Documentation</h2>
70 <a id="ga31a5a455f4e666b936f0a9e8fb9a0f47"></a>
71 <h2 class="memtitle"><span class="permalink"><a href="#ga31a5a455f4e666b936f0a9e8fb9a0f47">&#9670;&nbsp;</a></span>hwloc_component_type_t</h2>
72
73 <div class="memitem">
74 <div class="memproto">
75 <table class="memname">
76 <tr>
77 <td class="memname">typedef enum <a class="el" href="a00241.html#ga397a1bf7d21dd073320ad0045340f463">hwloc_component_type_e</a> <a class="el" href="a00241.html#ga31a5a455f4e666b936f0a9e8fb9a0f47">hwloc_component_type_t</a></td>
78 </tr>
79 </table>
80 </div><div class="memdoc">
81
82 <p>Generic component type. </p>
83
84 </div>
85 </div>
86 <h2 class="groupheader">Enumeration Type Documentation</h2>
87 <a id="ga397a1bf7d21dd073320ad0045340f463"></a>
88 <h2 class="memtitle"><span class="permalink"><a href="#ga397a1bf7d21dd073320ad0045340f463">&#9670;&nbsp;</a></span>hwloc_component_type_e</h2>
89
90 <div class="memitem">
91 <div class="memproto">
92 <table class="memname">
93 <tr>
94 <td class="memname">enum <a class="el" href="a00241.html#ga397a1bf7d21dd073320ad0045340f463">hwloc_component_type_e</a></td>
95 </tr>
96 </table>
97 </div><div class="memdoc">
98
99 <p>Generic component type. </p>
100 <table class="fieldtable">
101 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga397a1bf7d21dd073320ad0045340f463a5d6e561f467fe9795a29e7368b613900"></a>HWLOC_COMPONENT_TYPE_DISC&#160;</td><td class="fielddoc"><p>The data field must point to a struct <a class="el" href="a00378.html" title="Discovery component structure.">hwloc_disc_component</a>. </p>
102 </td></tr>
103 <tr><td class="fieldname"><a id="gga397a1bf7d21dd073320ad0045340f463adea00cd839c2141c032e1569fd5592bd"></a>HWLOC_COMPONENT_TYPE_XML&#160;</td><td class="fielddoc"><p>The data field must point to a struct hwloc_xml_component. </p>
104 </td></tr>
105 </table>
106
107 </div>
108 </div>
109 </div><!-- contents -->
110 <!-- start footer part -->
111 <hr class="footer"/><address class="footer"><small>
112 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
113 </small></address>
114 </body>
115 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Components and Plugins: Core functions to be used by components</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#func-members">Functions</a> </div>
43 <div class="headertitle">
44 <div class="title">Components and Plugins: Core functions to be used by components</div> </div>
45 </div><!--header-->
46 <div class="contents">
47 <table class="memberdecls">
48 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
49 Functions</h2></td></tr>
50 <tr class="memitem:gab527c1e0f243f057d31a724794ad9f88"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00242.html#gab527c1e0f243f057d31a724794ad9f88">hwloc_hide_errors</a> (void)</td></tr>
51 <tr class="separator:gab527c1e0f243f057d31a724794ad9f88"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:ga1e105cfe3c8e77f34cc6df3841deebbc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00242.html#ga1e105cfe3c8e77f34cc6df3841deebbc">hwloc__insert_object_by_cpuset</a> (struct hwloc_topology *topology, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> root, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj, const char *reason)</td></tr>
53 <tr class="separator:ga1e105cfe3c8e77f34cc6df3841deebbc"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:ga0ef97debde503b56367689b07bb3e901"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00242.html#ga0ef97debde503b56367689b07bb3e901">hwloc_insert_object_by_parent</a> (struct hwloc_topology *topology, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> parent, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj)</td></tr>
55 <tr class="separator:ga0ef97debde503b56367689b07bb3e901"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:ga0b5c75b2dc37cea2e8a29c4812baf4b3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00242.html#ga0b5c75b2dc37cea2e8a29c4812baf4b3">hwloc_alloc_setup_object</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type, unsigned os_index)</td></tr>
57 <tr class="separator:ga0b5c75b2dc37cea2e8a29c4812baf4b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:ga754b61041ceee9685534a2c5d3cd0156"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00242.html#ga754b61041ceee9685534a2c5d3cd0156">hwloc_obj_add_children_sets</a> (<a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj)</td></tr>
59 <tr class="separator:ga754b61041ceee9685534a2c5d3cd0156"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:ga120d8bd74922e1030b621409a6b0be61"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00242.html#ga120d8bd74922e1030b621409a6b0be61">hwloc_topology_reconnect</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, unsigned long flags)</td></tr>
61 <tr class="separator:ga120d8bd74922e1030b621409a6b0be61"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:gac2eaed287bb215cf0bd33014e9e1d374"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00242.html#gac2eaed287bb215cf0bd33014e9e1d374">hwloc_plugin_check_namespace</a> (const char *pluginname, const char *symbol)</td></tr>
63 <tr class="separator:gac2eaed287bb215cf0bd33014e9e1d374"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 </table>
65 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
66 <dl class="section note"><dt>Note</dt><dd>These structures and functions may change when <a class="el" href="a00191.html#gaac5bc1f46f55e10ef0141a68ce70e21f" title="Current component and plugin ABI version (see hwloc/plugins.h)">HWLOC_COMPONENT_ABI</a> is modified. </dd></dl>
67 <h2 class="groupheader">Function Documentation</h2>
68 <a id="ga1e105cfe3c8e77f34cc6df3841deebbc"></a>
69 <h2 class="memtitle"><span class="permalink"><a href="#ga1e105cfe3c8e77f34cc6df3841deebbc">&#9670;&nbsp;</a></span>hwloc__insert_object_by_cpuset()</h2>
70
71 <div class="memitem">
72 <div class="memproto">
73 <table class="memname">
74 <tr>
75 <td class="memname"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc__insert_object_by_cpuset </td>
76 <td>(</td>
77 <td class="paramtype">struct hwloc_topology *&#160;</td>
78 <td class="paramname"><em>topology</em>, </td>
79 </tr>
80 <tr>
81 <td class="paramkey"></td>
82 <td></td>
83 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
84 <td class="paramname"><em>root</em>, </td>
85 </tr>
86 <tr>
87 <td class="paramkey"></td>
88 <td></td>
89 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
90 <td class="paramname"><em>obj</em>, </td>
91 </tr>
92 <tr>
93 <td class="paramkey"></td>
94 <td></td>
95 <td class="paramtype">const char *&#160;</td>
96 <td class="paramname"><em>reason</em>&#160;</td>
97 </tr>
98 <tr>
99 <td></td>
100 <td>)</td>
101 <td></td><td></td>
102 </tr>
103 </table>
104 </div><div class="memdoc">
105
106 <p>Add an object to the topology. </p>
107 <p>Insert new object <code>obj</code> in the topology starting under existing object <code>root</code> (if <code>NULL</code>, the topology root object is used).</p>
108 <p>It is sorted along the tree of other objects according to the inclusion of cpusets, to eventually be added as a child of the smallest object including this object.</p>
109 <p>If the cpuset is empty, the type of the object (and maybe some attributes) must be enough to find where to insert the object. This is especially true for NUMA nodes with memory and no CPUs.</p>
110 <p>The given object should not have children.</p>
111 <p>This shall only be called before levels are built.</p>
112 <p>The caller should check whether the object type is filtered-out before calling this function.</p>
113 <p>The topology cpuset/nodesets will be enlarged to include the object sets.</p>
114 <p><code>reason</code> is a unique string identifying where and why this insertion call was performed (it will be displayed in case of internal insertion error).</p>
115 <p>Returns the object on success. Returns NULL and frees obj on error. Returns another object and frees obj if it was merged with an identical pre-existing object. </p>
116
117 </div>
118 </div>
119 <a id="ga0b5c75b2dc37cea2e8a29c4812baf4b3"></a>
120 <h2 class="memtitle"><span class="permalink"><a href="#ga0b5c75b2dc37cea2e8a29c4812baf4b3">&#9670;&nbsp;</a></span>hwloc_alloc_setup_object()</h2>
121
122 <div class="memitem">
123 <div class="memproto">
124 <table class="memname">
125 <tr>
126 <td class="memname"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_alloc_setup_object </td>
127 <td>(</td>
128 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
129 <td class="paramname"><em>topology</em>, </td>
130 </tr>
131 <tr>
132 <td class="paramkey"></td>
133 <td></td>
134 <td class="paramtype"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
135 <td class="paramname"><em>type</em>, </td>
136 </tr>
137 <tr>
138 <td class="paramkey"></td>
139 <td></td>
140 <td class="paramtype">unsigned&#160;</td>
141 <td class="paramname"><em>os_index</em>&#160;</td>
142 </tr>
143 <tr>
144 <td></td>
145 <td>)</td>
146 <td></td><td></td>
147 </tr>
148 </table>
149 </div><div class="memdoc">
150
151 <p>Allocate and initialize an object of the given type and physical index. </p>
152 <p>If <code>os_index</code> is unknown or irrelevant, use <code>HWLOC_UNKNOWN_INDEX</code>. </p>
153
154 </div>
155 </div>
156 <a id="gab527c1e0f243f057d31a724794ad9f88"></a>
157 <h2 class="memtitle"><span class="permalink"><a href="#gab527c1e0f243f057d31a724794ad9f88">&#9670;&nbsp;</a></span>hwloc_hide_errors()</h2>
158
159 <div class="memitem">
160 <div class="memproto">
161 <table class="memname">
162 <tr>
163 <td class="memname">int hwloc_hide_errors </td>
164 <td>(</td>
165 <td class="paramtype">void&#160;</td>
166 <td class="paramname"></td><td>)</td>
167 <td></td>
168 </tr>
169 </table>
170 </div><div class="memdoc">
171
172 <p>Check whether error messages are hidden. </p>
173 <p>Callers should print critical error messages (e.g. invalid hw topo info, invalid config) only if this function returns strictly less than 2.</p>
174 <p>Callers should print non-critical error messages (e.g. failure to initialize CUDA) if this function returns 0.</p>
175 <p>This function return 1 by default (show critical only), 0 in lstopo (show all), or anything set in HWLOC_HIDE_ERRORS in the environment. </p>
176
177 </div>
178 </div>
179 <a id="ga0ef97debde503b56367689b07bb3e901"></a>
180 <h2 class="memtitle"><span class="permalink"><a href="#ga0ef97debde503b56367689b07bb3e901">&#9670;&nbsp;</a></span>hwloc_insert_object_by_parent()</h2>
181
182 <div class="memitem">
183 <div class="memproto">
184 <table class="memname">
185 <tr>
186 <td class="memname">void hwloc_insert_object_by_parent </td>
187 <td>(</td>
188 <td class="paramtype">struct hwloc_topology *&#160;</td>
189 <td class="paramname"><em>topology</em>, </td>
190 </tr>
191 <tr>
192 <td class="paramkey"></td>
193 <td></td>
194 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
195 <td class="paramname"><em>parent</em>, </td>
196 </tr>
197 <tr>
198 <td class="paramkey"></td>
199 <td></td>
200 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
201 <td class="paramname"><em>obj</em>&#160;</td>
202 </tr>
203 <tr>
204 <td></td>
205 <td>)</td>
206 <td></td><td></td>
207 </tr>
208 </table>
209 </div><div class="memdoc">
210
211 <p>Insert an object somewhere in the topology. </p>
212 <p>It is added as the last child of the given parent. The cpuset is completely ignored, so strange objects such as I/O devices should preferably be inserted with this.</p>
213 <p>When used for "normal" children with cpusets (when importing from XML when duplicating a topology), the caller should make sure that:</p><ul>
214 <li>children are inserted in order,</li>
215 <li>children cpusets do not intersect.</li>
216 </ul>
217 <p>The given object may have normal, I/O or Misc children, as long as they are in order as well. These children must have valid parent and next_sibling pointers.</p>
218 <p>The caller should check whether the object type is filtered-out before calling this function. </p>
219
220 </div>
221 </div>
222 <a id="ga754b61041ceee9685534a2c5d3cd0156"></a>
223 <h2 class="memtitle"><span class="permalink"><a href="#ga754b61041ceee9685534a2c5d3cd0156">&#9670;&nbsp;</a></span>hwloc_obj_add_children_sets()</h2>
224
225 <div class="memitem">
226 <div class="memproto">
227 <table class="memname">
228 <tr>
229 <td class="memname">int hwloc_obj_add_children_sets </td>
230 <td>(</td>
231 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
232 <td class="paramname"><em>obj</em></td><td>)</td>
233 <td></td>
234 </tr>
235 </table>
236 </div><div class="memdoc">
237
238 <p>Setup object cpusets/nodesets by OR'ing its children. </p>
239 <p>Used when adding an object late in the topology. Will update the new object by OR'ing all its new children sets.</p>
240 <p>Used when PCI backend adds a hostbridge parent, when distances add a new Group, etc. </p>
241
242 </div>
243 </div>
244 <a id="gac2eaed287bb215cf0bd33014e9e1d374"></a>
245 <h2 class="memtitle"><span class="permalink"><a href="#gac2eaed287bb215cf0bd33014e9e1d374">&#9670;&nbsp;</a></span>hwloc_plugin_check_namespace()</h2>
246
247 <div class="memitem">
248 <div class="memproto">
249 <table class="mlabels">
250 <tr>
251 <td class="mlabels-left">
252 <table class="memname">
253 <tr>
254 <td class="memname">static int hwloc_plugin_check_namespace </td>
255 <td>(</td>
256 <td class="paramtype">const char *&#160;</td>
257 <td class="paramname"><em>pluginname</em>, </td>
258 </tr>
259 <tr>
260 <td class="paramkey"></td>
261 <td></td>
262 <td class="paramtype">const char *&#160;</td>
263 <td class="paramname"><em>symbol</em>&#160;</td>
264 </tr>
265 <tr>
266 <td></td>
267 <td>)</td>
268 <td></td><td></td>
269 </tr>
270 </table>
271 </td>
272 <td class="mlabels-right">
273 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
274 </tr>
275 </table>
276 </div><div class="memdoc">
277
278 <p>Make sure that plugins can lookup core symbols. </p>
279 <p>This is a sanity check to avoid lazy-lookup failures when libhwloc is loaded within a plugin, and later tries to load its own plugins. This may fail (and abort the program) if libhwloc symbols are in a private namespace.</p>
280 <dl class="section return"><dt>Returns</dt><dd>0 on success. </dd>
281 <dd>
282 -1 if the plugin cannot be successfully loaded. The caller plugin init() callback should return a negative error code as well.</dd></dl>
283 <p>Plugins should call this function in their init() callback to avoid later crashes if lazy symbol resolution is used by the upper layer that loaded hwloc (e.g. OpenCL implementations using dlopen with RTLD_LAZY).</p>
284 <dl class="section note"><dt>Note</dt><dd>The build system must define HWLOC_INSIDE_PLUGIN if and only if building the caller as a plugin.</dd>
285 <dd>
286 This function should remain inline so plugins can call it even when they cannot find libhwloc symbols. </dd></dl>
287
288 </div>
289 </div>
290 <a id="ga120d8bd74922e1030b621409a6b0be61"></a>
291 <h2 class="memtitle"><span class="permalink"><a href="#ga120d8bd74922e1030b621409a6b0be61">&#9670;&nbsp;</a></span>hwloc_topology_reconnect()</h2>
292
293 <div class="memitem">
294 <div class="memproto">
295 <table class="memname">
296 <tr>
297 <td class="memname">int hwloc_topology_reconnect </td>
298 <td>(</td>
299 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
300 <td class="paramname"><em>topology</em>, </td>
301 </tr>
302 <tr>
303 <td class="paramkey"></td>
304 <td></td>
305 <td class="paramtype">unsigned long&#160;</td>
306 <td class="paramname"><em>flags</em>&#160;</td>
307 </tr>
308 <tr>
309 <td></td>
310 <td>)</td>
311 <td></td><td></td>
312 </tr>
313 </table>
314 </div><div class="memdoc">
315
316 <p>Request a reconnection of children and levels in the topology. </p>
317 <p>May be used by backends during discovery if they need arrays or lists of object within levels or children to be fully connected.</p>
318 <p><code>flags</code> is currently unused, must 0. </p>
319
320 </div>
321 </div>
322 </div><!-- contents -->
323 <!-- start footer part -->
324 <hr class="footer"/><address class="footer"><small>
325 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
326 </small></address>
327 </body>
328 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Components and Plugins: Filtering objects</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#func-members">Functions</a> </div>
43 <div class="headertitle">
44 <div class="title">Components and Plugins: Filtering objects</div> </div>
45 </div><!--header-->
46 <div class="contents">
47 <table class="memberdecls">
48 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
49 Functions</h2></td></tr>
50 <tr class="memitem:ga60203db6459ebf275bf48c40a37661a0"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html#ga60203db6459ebf275bf48c40a37661a0">hwloc_filter_check_pcidev_subtype_important</a> (unsigned classid)</td></tr>
51 <tr class="separator:ga60203db6459ebf275bf48c40a37661a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:gac7d57a6d669820f360cf2a070a396560"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html#gac7d57a6d669820f360cf2a070a396560">hwloc_filter_check_osdev_subtype_important</a> (<a class="el" href="a00193.html#gaa9a6941ef7b1c169412518d7ef71b3d2">hwloc_obj_osdev_type_t</a> subtype)</td></tr>
53 <tr class="separator:gac7d57a6d669820f360cf2a070a396560"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:ga2f402a43025a8a91e8513be1a15e4635"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html#ga2f402a43025a8a91e8513be1a15e4635">hwloc_filter_check_keep_object_type</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> type)</td></tr>
55 <tr class="separator:ga2f402a43025a8a91e8513be1a15e4635"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:ga4d2fdce071e5646ef147c9ff1539d1c9"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00243.html#ga4d2fdce071e5646ef147c9ff1539d1c9">hwloc_filter_check_keep_object</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> obj)</td></tr>
57 <tr class="separator:ga4d2fdce071e5646ef147c9ff1539d1c9"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 </table>
59 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
60 <dl class="section note"><dt>Note</dt><dd>These structures and functions may change when <a class="el" href="a00191.html#gaac5bc1f46f55e10ef0141a68ce70e21f" title="Current component and plugin ABI version (see hwloc/plugins.h)">HWLOC_COMPONENT_ABI</a> is modified. </dd></dl>
61 <h2 class="groupheader">Function Documentation</h2>
62 <a id="ga4d2fdce071e5646ef147c9ff1539d1c9"></a>
63 <h2 class="memtitle"><span class="permalink"><a href="#ga4d2fdce071e5646ef147c9ff1539d1c9">&#9670;&nbsp;</a></span>hwloc_filter_check_keep_object()</h2>
64
65 <div class="memitem">
66 <div class="memproto">
67 <table class="mlabels">
68 <tr>
69 <td class="mlabels-left">
70 <table class="memname">
71 <tr>
72 <td class="memname">static int hwloc_filter_check_keep_object </td>
73 <td>(</td>
74 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
75 <td class="paramname"><em>topology</em>, </td>
76 </tr>
77 <tr>
78 <td class="paramkey"></td>
79 <td></td>
80 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td>
81 <td class="paramname"><em>obj</em>&#160;</td>
82 </tr>
83 <tr>
84 <td></td>
85 <td>)</td>
86 <td></td><td></td>
87 </tr>
88 </table>
89 </td>
90 <td class="mlabels-right">
91 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
92 </tr>
93 </table>
94 </div><div class="memdoc">
95
96 <p>Check whether the given object should be filtered-out. </p>
97 <dl class="section return"><dt>Returns</dt><dd>1 if the object type should be kept, 0 otherwise. </dd></dl>
98
99 </div>
100 </div>
101 <a id="ga2f402a43025a8a91e8513be1a15e4635"></a>
102 <h2 class="memtitle"><span class="permalink"><a href="#ga2f402a43025a8a91e8513be1a15e4635">&#9670;&nbsp;</a></span>hwloc_filter_check_keep_object_type()</h2>
103
104 <div class="memitem">
105 <div class="memproto">
106 <table class="mlabels">
107 <tr>
108 <td class="mlabels-left">
109 <table class="memname">
110 <tr>
111 <td class="memname">static int hwloc_filter_check_keep_object_type </td>
112 <td>(</td>
113 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
114 <td class="paramname"><em>topology</em>, </td>
115 </tr>
116 <tr>
117 <td class="paramkey"></td>
118 <td></td>
119 <td class="paramtype"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td>
120 <td class="paramname"><em>type</em>&#160;</td>
121 </tr>
122 <tr>
123 <td></td>
124 <td>)</td>
125 <td></td><td></td>
126 </tr>
127 </table>
128 </td>
129 <td class="mlabels-right">
130 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
131 </tr>
132 </table>
133 </div><div class="memdoc">
134
135 <p>Check whether a non-I/O object type should be filtered-out. </p>
136 <p>Cannot be used for I/O objects.</p>
137 <dl class="section return"><dt>Returns</dt><dd>1 if the object type should be kept, 0 otherwise. </dd></dl>
138
139 </div>
140 </div>
141 <a id="gac7d57a6d669820f360cf2a070a396560"></a>
142 <h2 class="memtitle"><span class="permalink"><a href="#gac7d57a6d669820f360cf2a070a396560">&#9670;&nbsp;</a></span>hwloc_filter_check_osdev_subtype_important()</h2>
143
144 <div class="memitem">
145 <div class="memproto">
146 <table class="mlabels">
147 <tr>
148 <td class="mlabels-left">
149 <table class="memname">
150 <tr>
151 <td class="memname">static int hwloc_filter_check_osdev_subtype_important </td>
152 <td>(</td>
153 <td class="paramtype"><a class="el" href="a00193.html#gaa9a6941ef7b1c169412518d7ef71b3d2">hwloc_obj_osdev_type_t</a>&#160;</td>
154 <td class="paramname"><em>subtype</em></td><td>)</td>
155 <td></td>
156 </tr>
157 </table>
158 </td>
159 <td class="mlabels-right">
160 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
161 </tr>
162 </table>
163 </div><div class="memdoc">
164
165 <p>Check whether the given OS device subtype is important. </p>
166 <dl class="section return"><dt>Returns</dt><dd>1 if important, 0 otherwise. </dd></dl>
167
168 </div>
169 </div>
170 <a id="ga60203db6459ebf275bf48c40a37661a0"></a>
171 <h2 class="memtitle"><span class="permalink"><a href="#ga60203db6459ebf275bf48c40a37661a0">&#9670;&nbsp;</a></span>hwloc_filter_check_pcidev_subtype_important()</h2>
172
173 <div class="memitem">
174 <div class="memproto">
175 <table class="mlabels">
176 <tr>
177 <td class="mlabels-left">
178 <table class="memname">
179 <tr>
180 <td class="memname">static int hwloc_filter_check_pcidev_subtype_important </td>
181 <td>(</td>
182 <td class="paramtype">unsigned&#160;</td>
183 <td class="paramname"><em>classid</em></td><td>)</td>
184 <td></td>
185 </tr>
186 </table>
187 </td>
188 <td class="mlabels-right">
189 <span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">static</span></span> </td>
190 </tr>
191 </table>
192 </div><div class="memdoc">
193
194 <p>Check whether the given PCI device classid is important. </p>
195 <dl class="section return"><dt>Returns</dt><dd>1 if important, 0 otherwise. </dd></dl>
196
197 </div>
198 </div>
199 </div><!-- contents -->
200 <!-- start footer part -->
201 <hr class="footer"/><address class="footer"><small>
202 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
203 </small></address>
204 </body>
205 </html>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_obj Struct Reference</title>
7 <title>Hardware Locality (hwloc): Components and Plugins: helpers for PCI discovery</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="header">
4141 <div class="summary">
42 <a href="#pub-attribs">Data Fields</a> </div>
42 <a href="#func-members">Functions</a> </div>
4343 <div class="headertitle">
44 <div class="title">hwloc_obj Struct Reference<div class="ingroups"><a class="el" href="a00191.html">Object Structure and Attributes</a></div></div> </div>
44 <div class="title">Components and Plugins: helpers for PCI discovery</div> </div>
4545 </div><!--header-->
4646 <div class="contents">
47
48 <p><code>#include &lt;<a class="el" href="a00125_source.html">hwloc.h</a>&gt;</code></p>
4947 <table class="memberdecls">
50 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
51 Data Fields</h2></td></tr>
52 <tr class="memitem:acc4f0803f244867e68fe0036800be5de"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#acc4f0803f244867e68fe0036800be5de">type</a></td></tr>
53 <tr class="separator:acc4f0803f244867e68fe0036800be5de"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:a5d4f97e76723a9ec8d38046f19e00d33"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#a5d4f97e76723a9ec8d38046f19e00d33">subtype</a></td></tr>
55 <tr class="separator:a5d4f97e76723a9ec8d38046f19e00d33"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:a61a7a80a68eaccbaaa28269e678c81a9"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a></td></tr>
57 <tr class="separator:a61a7a80a68eaccbaaa28269e678c81a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:abb709ec38f2970677e4e57d1d30be96d"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">name</a></td></tr>
59 <tr class="separator:abb709ec38f2970677e4e57d1d30be96d"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:a75603fc36c9284ba48ce814b772a58b6"><td class="memItemLeft" align="right" valign="top">hwloc_uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#a75603fc36c9284ba48ce814b772a58b6">total_memory</a></td></tr>
61 <tr class="separator:a75603fc36c9284ba48ce814b772a58b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:accd40e29f71f19e88db62ea3df02adc8"><td class="memItemLeft" align="right" valign="top">union <a class="el" href="a00248.html">hwloc_obj_attr_u</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a></td></tr>
63 <tr class="separator:accd40e29f71f19e88db62ea3df02adc8"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 <tr class="memitem:a4876fd165b4fff35521f07ebd85355ed"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">depth</a></td></tr>
65 <tr class="separator:a4876fd165b4fff35521f07ebd85355ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 <tr class="memitem:a0d07fb7b8935e137c94d75a3eb492ae9"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#a0d07fb7b8935e137c94d75a3eb492ae9">logical_index</a></td></tr>
67 <tr class="separator:a0d07fb7b8935e137c94d75a3eb492ae9"><td class="memSeparator" colspan="2">&#160;</td></tr>
68 <tr class="memitem:a85a788017457129589318b6c39451acf"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00244.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#a85a788017457129589318b6c39451acf">next_cousin</a></td></tr>
69 <tr class="separator:a85a788017457129589318b6c39451acf"><td class="memSeparator" colspan="2">&#160;</td></tr>
70 <tr class="memitem:ac715989f55ff5a0eb6be2969ee477ec0"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00244.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#ac715989f55ff5a0eb6be2969ee477ec0">prev_cousin</a></td></tr>
71 <tr class="separator:ac715989f55ff5a0eb6be2969ee477ec0"><td class="memSeparator" colspan="2">&#160;</td></tr>
72 <tr class="memitem:adc494f6aed939992be1c55cca5822900"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00244.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#adc494f6aed939992be1c55cca5822900">parent</a></td></tr>
73 <tr class="separator:adc494f6aed939992be1c55cca5822900"><td class="memSeparator" colspan="2">&#160;</td></tr>
74 <tr class="memitem:aaa6043eee6f55869933c1d974efd9acd"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#aaa6043eee6f55869933c1d974efd9acd">sibling_rank</a></td></tr>
75 <tr class="separator:aaa6043eee6f55869933c1d974efd9acd"><td class="memSeparator" colspan="2">&#160;</td></tr>
76 <tr class="memitem:a7f2343ed476fe4942e6fffd4cade1b40"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00244.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#a7f2343ed476fe4942e6fffd4cade1b40">next_sibling</a></td></tr>
77 <tr class="separator:a7f2343ed476fe4942e6fffd4cade1b40"><td class="memSeparator" colspan="2">&#160;</td></tr>
78 <tr class="memitem:a7b89e8c189876c0158a9282aaaf17f50"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00244.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#a7b89e8c189876c0158a9282aaaf17f50">prev_sibling</a></td></tr>
79 <tr class="separator:a7b89e8c189876c0158a9282aaaf17f50"><td class="memSeparator" colspan="2">&#160;</td></tr>
80 <tr class="memitem:a0f41a1d67dc6b661906f2217563637f3"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#a0f41a1d67dc6b661906f2217563637f3">symmetric_subtree</a></td></tr>
81 <tr class="separator:a0f41a1d67dc6b661906f2217563637f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
82 <tr class="memitem:a67925e0f2c47f50408fbdb9bddd0790f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a></td></tr>
83 <tr class="separator:a67925e0f2c47f50408fbdb9bddd0790f"><td class="memSeparator" colspan="2">&#160;</td></tr>
84 <tr class="memitem:a91788a9da687beb7224cc1fd7b75208c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#a91788a9da687beb7224cc1fd7b75208c">complete_cpuset</a></td></tr>
85 <tr class="separator:a91788a9da687beb7224cc1fd7b75208c"><td class="memSeparator" colspan="2">&#160;</td></tr>
86 <tr class="memitem:a08f0d0e16c619a6e653526cbee4ffea3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00189.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#a08f0d0e16c619a6e653526cbee4ffea3">nodeset</a></td></tr>
87 <tr class="separator:a08f0d0e16c619a6e653526cbee4ffea3"><td class="memSeparator" colspan="2">&#160;</td></tr>
88 <tr class="memitem:ac38c4012127525ef74c5615c526f4c2e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00189.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#ac38c4012127525ef74c5615c526f4c2e">complete_nodeset</a></td></tr>
89 <tr class="separator:ac38c4012127525ef74c5615c526f4c2e"><td class="memSeparator" colspan="2">&#160;</td></tr>
90 <tr class="memitem:a8604654c38b7a720efae5025d3a96ee6"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00292.html">hwloc_info_s</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#a8604654c38b7a720efae5025d3a96ee6">infos</a></td></tr>
91 <tr class="separator:a8604654c38b7a720efae5025d3a96ee6"><td class="memSeparator" colspan="2">&#160;</td></tr>
92 <tr class="memitem:a9843acc28cfbba903b63ea14b137ff70"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#a9843acc28cfbba903b63ea14b137ff70">infos_count</a></td></tr>
93 <tr class="separator:a9843acc28cfbba903b63ea14b137ff70"><td class="memSeparator" colspan="2">&#160;</td></tr>
94 <tr class="memitem:a76fd3ac94401cf32dfccc3a3a8de68a5"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#a76fd3ac94401cf32dfccc3a3a8de68a5">userdata</a></td></tr>
95 <tr class="separator:a76fd3ac94401cf32dfccc3a3a8de68a5"><td class="memSeparator" colspan="2">&#160;</td></tr>
96 <tr class="memitem:a957984a355fa61c85f46605c336e7551"><td class="memItemLeft" align="right" valign="top">hwloc_uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#a957984a355fa61c85f46605c336e7551">gp_index</a></td></tr>
97 <tr class="separator:a957984a355fa61c85f46605c336e7551"><td class="memSeparator" colspan="2">&#160;</td></tr>
98 <tr><td colspan="2"><div class="groupHeader">List and array of normal children below this object (except Memory, I/O and Misc children).</div></td></tr>
99 <tr class="memitem:aac3f6da35c9b57599909a44ce2b716c1"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#aac3f6da35c9b57599909a44ce2b716c1">arity</a></td></tr>
100 <tr class="separator:aac3f6da35c9b57599909a44ce2b716c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
101 <tr class="memitem:a04d05403da37bfe17cd63b7c7dd07b1f"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00244.html">hwloc_obj</a> **&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#a04d05403da37bfe17cd63b7c7dd07b1f">children</a></td></tr>
102 <tr class="separator:a04d05403da37bfe17cd63b7c7dd07b1f"><td class="memSeparator" colspan="2">&#160;</td></tr>
103 <tr class="memitem:af51d08a0a79dba517c06c5afedc8d2dc"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00244.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#af51d08a0a79dba517c06c5afedc8d2dc">first_child</a></td></tr>
104 <tr class="separator:af51d08a0a79dba517c06c5afedc8d2dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
105 <tr class="memitem:a84bd65634dbc55f4158b74443a9bd04f"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00244.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#a84bd65634dbc55f4158b74443a9bd04f">last_child</a></td></tr>
106 <tr class="separator:a84bd65634dbc55f4158b74443a9bd04f"><td class="memSeparator" colspan="2">&#160;</td></tr>
107 <tr><td colspan="2"><div class="groupHeader">List of Memory children below this object.</div></td></tr>
108 <tr class="memitem:a6f834ea4dd26553cdea601d2fae6d3b7"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#a6f834ea4dd26553cdea601d2fae6d3b7">memory_arity</a></td></tr>
109 <tr class="separator:a6f834ea4dd26553cdea601d2fae6d3b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
110 <tr class="memitem:ac0e8200dba25b90d5954bd4ec61f97d3"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00244.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#ac0e8200dba25b90d5954bd4ec61f97d3">memory_first_child</a></td></tr>
111 <tr class="separator:ac0e8200dba25b90d5954bd4ec61f97d3"><td class="memSeparator" colspan="2">&#160;</td></tr>
112 <tr><td colspan="2"><div class="groupHeader">List of I/O children below this object.</div></td></tr>
113 <tr class="memitem:a7b3b29f0be377c7d2d52262019fc7d11"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#a7b3b29f0be377c7d2d52262019fc7d11">io_arity</a></td></tr>
114 <tr class="separator:a7b3b29f0be377c7d2d52262019fc7d11"><td class="memSeparator" colspan="2">&#160;</td></tr>
115 <tr class="memitem:a8d14c88e1ebc4ae67cc69f9e928558b3"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00244.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#a8d14c88e1ebc4ae67cc69f9e928558b3">io_first_child</a></td></tr>
116 <tr class="separator:a8d14c88e1ebc4ae67cc69f9e928558b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
117 <tr><td colspan="2"><div class="groupHeader">List of Misc children below this object.</div></td></tr>
118 <tr class="memitem:a2bb7862ce722d7ceda23cfa153da165a"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#a2bb7862ce722d7ceda23cfa153da165a">misc_arity</a></td></tr>
119 <tr class="separator:a2bb7862ce722d7ceda23cfa153da165a"><td class="memSeparator" colspan="2">&#160;</td></tr>
120 <tr class="memitem:a57812a313fe9b1a9500489f47c3011cc"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00244.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#a57812a313fe9b1a9500489f47c3011cc">misc_first_child</a></td></tr>
121 <tr class="separator:a57812a313fe9b1a9500489f47c3011cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
48 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
49 Functions</h2></td></tr>
50 <tr class="memitem:ga706f71cfea09d547d2cbafa642d6e03b"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#ga706f71cfea09d547d2cbafa642d6e03b">hwloc_pcidisc_find_cap</a> (const unsigned char *config, unsigned cap)</td></tr>
51 <tr class="separator:ga706f71cfea09d547d2cbafa642d6e03b"><td class="memSeparator" colspan="2">&#160;</td></tr>
52 <tr class="memitem:ga51d1ebcbf9729987c9d17df3aa57d209"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#ga51d1ebcbf9729987c9d17df3aa57d209">hwloc_pcidisc_find_linkspeed</a> (const unsigned char *config, unsigned offset, float *linkspeed)</td></tr>
53 <tr class="separator:ga51d1ebcbf9729987c9d17df3aa57d209"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:ga6c55fb80c3d0c8c8e61078b3f38adde8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#ga6c55fb80c3d0c8c8e61078b3f38adde8">hwloc_pcidisc_check_bridge_type</a> (unsigned device_class, const unsigned char *config)</td></tr>
55 <tr class="separator:ga6c55fb80c3d0c8c8e61078b3f38adde8"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:ga95acf6822a49447c11067d0b843965ba"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#ga95acf6822a49447c11067d0b843965ba">hwloc_pcidisc_find_bridge_buses</a> (unsigned domain, unsigned bus, unsigned dev, unsigned func, unsigned *secondary_busp, unsigned *subordinate_busp, const unsigned char *config)</td></tr>
57 <tr class="separator:ga95acf6822a49447c11067d0b843965ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:gab76ddc4f55db8101ef0d44317965128c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#gab76ddc4f55db8101ef0d44317965128c">hwloc_pcidisc_tree_insert_by_busid</a> (struct <a class="el" href="a00250.html">hwloc_obj</a> **treep, struct <a class="el" href="a00250.html">hwloc_obj</a> *obj)</td></tr>
59 <tr class="separator:gab76ddc4f55db8101ef0d44317965128c"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:gabda1d6c1799e50b9226f8a4da9bd29ea"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00244.html#gabda1d6c1799e50b9226f8a4da9bd29ea">hwloc_pcidisc_tree_attach</a> (struct hwloc_topology *topology, struct <a class="el" href="a00250.html">hwloc_obj</a> *tree)</td></tr>
61 <tr class="separator:gabda1d6c1799e50b9226f8a4da9bd29ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
12262 </table>
12363 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
124 <div class="textblock"><p>Structure of a topology object. </p>
125 <p>Applications must not modify any field except <code><a class="el" href="a00244.html#a76fd3ac94401cf32dfccc3a3a8de68a5" title="Application-given private data pointer, initialized to NULL, use it as you wish. See hwloc_topology_s...">hwloc_obj.userdata</a></code>. </p>
126 </div><h2 class="groupheader">Field Documentation</h2>
127 <a id="aac3f6da35c9b57599909a44ce2b716c1"></a>
128 <h2 class="memtitle"><span class="permalink"><a href="#aac3f6da35c9b57599909a44ce2b716c1">&#9670;&nbsp;</a></span>arity</h2>
129
130 <div class="memitem">
131 <div class="memproto">
132 <table class="memname">
133 <tr>
134 <td class="memname">unsigned hwloc_obj::arity</td>
135 </tr>
136 </table>
137 </div><div class="memdoc">
138
139 <p>Number of normal children. Memory, Misc and I/O children are not listed here but rather in their dedicated children list. </p>
140
141 </div>
142 </div>
143 <a id="accd40e29f71f19e88db62ea3df02adc8"></a>
144 <h2 class="memtitle"><span class="permalink"><a href="#accd40e29f71f19e88db62ea3df02adc8">&#9670;&nbsp;</a></span>attr</h2>
145
146 <div class="memitem">
147 <div class="memproto">
148 <table class="memname">
149 <tr>
150 <td class="memname">union <a class="el" href="a00248.html">hwloc_obj_attr_u</a>* hwloc_obj::attr</td>
151 </tr>
152 </table>
153 </div><div class="memdoc">
154
155 <p>Object type-specific Attributes, may be <code>NULL</code> if no attribute value was found. </p>
156
157 </div>
158 </div>
159 <a id="a04d05403da37bfe17cd63b7c7dd07b1f"></a>
160 <h2 class="memtitle"><span class="permalink"><a href="#a04d05403da37bfe17cd63b7c7dd07b1f">&#9670;&nbsp;</a></span>children</h2>
161
162 <div class="memitem">
163 <div class="memproto">
164 <table class="memname">
165 <tr>
166 <td class="memname">struct <a class="el" href="a00244.html">hwloc_obj</a>** hwloc_obj::children</td>
167 </tr>
168 </table>
169 </div><div class="memdoc">
170
171 <p>Normal children, <code>children</code>[0 .. arity -1]. </p>
172
173 </div>
174 </div>
175 <a id="a91788a9da687beb7224cc1fd7b75208c"></a>
176 <h2 class="memtitle"><span class="permalink"><a href="#a91788a9da687beb7224cc1fd7b75208c">&#9670;&nbsp;</a></span>complete_cpuset</h2>
177
178 <div class="memitem">
179 <div class="memproto">
180 <table class="memname">
181 <tr>
182 <td class="memname"><a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> hwloc_obj::complete_cpuset</td>
183 </tr>
184 </table>
185 </div><div class="memdoc">
186
187 <p>The complete CPU set of processors of this object,. </p>
188 <p>This may include not only the same as the cpuset field, but also some CPUs for which topology information is unknown or incomplete, some offlines CPUs, and the CPUs that are ignored when the <a class="el" href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258" title="Detect the whole system, ignore reservations, include disallowed objects.">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a> flag is not set. Thus no corresponding PU object may be found in the topology, because the precise position is undefined. It is however known that it would be somewhere under this object.</p>
189 <dl class="section note"><dt>Note</dt><dd>Its value must not be changed, <a class="el" href="a00211.html#gae679434c1a5f41d3560a8a7e2c1b0dee" title="Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.">hwloc_bitmap_dup()</a> must be used instead. </dd></dl>
190
191 </div>
192 </div>
193 <a id="ac38c4012127525ef74c5615c526f4c2e"></a>
194 <h2 class="memtitle"><span class="permalink"><a href="#ac38c4012127525ef74c5615c526f4c2e">&#9670;&nbsp;</a></span>complete_nodeset</h2>
195
196 <div class="memitem">
197 <div class="memproto">
198 <table class="memname">
199 <tr>
200 <td class="memname"><a class="el" href="a00189.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a> hwloc_obj::complete_nodeset</td>
201 </tr>
202 </table>
203 </div><div class="memdoc">
204
205 <p>The complete NUMA node set of this object,. </p>
206 <p>This may include not only the same as the nodeset field, but also some NUMA nodes for which topology information is unknown or incomplete, some offlines nodes, and the nodes that are ignored when the <a class="el" href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258" title="Detect the whole system, ignore reservations, include disallowed objects.">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a> flag is not set. Thus no corresponding NUMA node object may be found in the topology, because the precise position is undefined. It is however known that it would be somewhere under this object.</p>
207 <p>If there are no NUMA nodes in the machine, all the memory is close to this object, so only the first bit is set in <code>complete_nodeset</code>.</p>
208 <dl class="section note"><dt>Note</dt><dd>Its value must not be changed, <a class="el" href="a00211.html#gae679434c1a5f41d3560a8a7e2c1b0dee" title="Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.">hwloc_bitmap_dup()</a> must be used instead. </dd></dl>
209
210 </div>
211 </div>
212 <a id="a67925e0f2c47f50408fbdb9bddd0790f"></a>
213 <h2 class="memtitle"><span class="permalink"><a href="#a67925e0f2c47f50408fbdb9bddd0790f">&#9670;&nbsp;</a></span>cpuset</h2>
214
215 <div class="memitem">
216 <div class="memproto">
217 <table class="memname">
218 <tr>
219 <td class="memname"><a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> hwloc_obj::cpuset</td>
220 </tr>
221 </table>
222 </div><div class="memdoc">
223
224 <p>CPUs covered by this object. </p>
225 <p>This is the set of CPUs for which there are PU objects in the topology under this object, i.e. which are known to be physically contained in this object and known how (the children path between this object and the PU objects).</p>
226 <p>If the <a class="el" href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258" title="Detect the whole system, ignore reservations, include disallowed objects.">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a> configuration flag is set, some of these CPUs may not be allowed for binding, see <a class="el" href="a00208.html#ga517d5d68ec9f24583d8933aab713be8e" title="Get allowed CPU set.">hwloc_topology_get_allowed_cpuset()</a>.</p>
227 <dl class="section note"><dt>Note</dt><dd>All objects have non-NULL CPU and node sets except Misc and I/O objects.</dd>
228 <dd>
229 Its value must not be changed, <a class="el" href="a00211.html#gae679434c1a5f41d3560a8a7e2c1b0dee" title="Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.">hwloc_bitmap_dup()</a> must be used instead. </dd></dl>
230
231 </div>
232 </div>
233 <a id="a4876fd165b4fff35521f07ebd85355ed"></a>
234 <h2 class="memtitle"><span class="permalink"><a href="#a4876fd165b4fff35521f07ebd85355ed">&#9670;&nbsp;</a></span>depth</h2>
235
236 <div class="memitem">
237 <div class="memproto">
238 <table class="memname">
239 <tr>
240 <td class="memname">int hwloc_obj::depth</td>
241 </tr>
242 </table>
243 </div><div class="memdoc">
244
245 <p>Vertical index in the hierarchy. </p>
246 <p>For normal objects, this is the depth of the horizontal level that contains this object and its cousins of the same type. If the topology is symmetric, this is equal to the parent depth plus one, and also equal to the number of parent/child links from the root object to here.</p>
247 <p>For special objects (NUMA nodes, I/O and Misc) that are not in the main tree, this is a special negative value that corresponds to their dedicated level, see <a class="el" href="a00193.html#ga8bec782e21be313750da70cf7428b374" title="Returns the depth of objects of type type.">hwloc_get_type_depth()</a> and <a class="el" href="a00193.html#gaf4e663cf42bbe20756b849c6293ef575">hwloc_get_type_depth_e</a>. Those special values can be passed to hwloc functions such <a class="el" href="a00193.html#ga1d5ceafe8130fe6e8657bf0bc666ba50" title="Returns the width of level at depth depth.">hwloc_get_nbobjs_by_depth()</a> as usual. </p>
248
249 </div>
250 </div>
251 <a id="af51d08a0a79dba517c06c5afedc8d2dc"></a>
252 <h2 class="memtitle"><span class="permalink"><a href="#af51d08a0a79dba517c06c5afedc8d2dc">&#9670;&nbsp;</a></span>first_child</h2>
253
254 <div class="memitem">
255 <div class="memproto">
256 <table class="memname">
257 <tr>
258 <td class="memname">struct <a class="el" href="a00244.html">hwloc_obj</a>* hwloc_obj::first_child</td>
259 </tr>
260 </table>
261 </div><div class="memdoc">
262
263 <p>First normal child. </p>
264
265 </div>
266 </div>
267 <a id="a957984a355fa61c85f46605c336e7551"></a>
268 <h2 class="memtitle"><span class="permalink"><a href="#a957984a355fa61c85f46605c336e7551">&#9670;&nbsp;</a></span>gp_index</h2>
269
270 <div class="memitem">
271 <div class="memproto">
272 <table class="memname">
273 <tr>
274 <td class="memname">hwloc_uint64_t hwloc_obj::gp_index</td>
275 </tr>
276 </table>
277 </div><div class="memdoc">
278
279 <p>Global persistent index. Generated by hwloc, unique across the topology (contrary to os_index) and persistent across topology changes (contrary to logical_index). Mostly used internally, but could also be used by application to identify objects. </p>
280
281 </div>
282 </div>
283 <a id="a8604654c38b7a720efae5025d3a96ee6"></a>
284 <h2 class="memtitle"><span class="permalink"><a href="#a8604654c38b7a720efae5025d3a96ee6">&#9670;&nbsp;</a></span>infos</h2>
285
286 <div class="memitem">
287 <div class="memproto">
288 <table class="memname">
289 <tr>
290 <td class="memname">struct <a class="el" href="a00292.html">hwloc_info_s</a>* hwloc_obj::infos</td>
291 </tr>
292 </table>
293 </div><div class="memdoc">
294
295 <p>Array of stringified info type=name. </p>
296
297 </div>
298 </div>
299 <a id="a9843acc28cfbba903b63ea14b137ff70"></a>
300 <h2 class="memtitle"><span class="permalink"><a href="#a9843acc28cfbba903b63ea14b137ff70">&#9670;&nbsp;</a></span>infos_count</h2>
301
302 <div class="memitem">
303 <div class="memproto">
304 <table class="memname">
305 <tr>
306 <td class="memname">unsigned hwloc_obj::infos_count</td>
307 </tr>
308 </table>
309 </div><div class="memdoc">
310
311 <p>Size of infos array. </p>
312
313 </div>
314 </div>
315 <a id="a7b3b29f0be377c7d2d52262019fc7d11"></a>
316 <h2 class="memtitle"><span class="permalink"><a href="#a7b3b29f0be377c7d2d52262019fc7d11">&#9670;&nbsp;</a></span>io_arity</h2>
317
318 <div class="memitem">
319 <div class="memproto">
320 <table class="memname">
321 <tr>
322 <td class="memname">unsigned hwloc_obj::io_arity</td>
323 </tr>
324 </table>
325 </div><div class="memdoc">
326
327 <p>Number of I/O children. These children are listed in <code>io_first_child</code>. </p>
328
329 </div>
330 </div>
331 <a id="a8d14c88e1ebc4ae67cc69f9e928558b3"></a>
332 <h2 class="memtitle"><span class="permalink"><a href="#a8d14c88e1ebc4ae67cc69f9e928558b3">&#9670;&nbsp;</a></span>io_first_child</h2>
333
334 <div class="memitem">
335 <div class="memproto">
336 <table class="memname">
337 <tr>
338 <td class="memname">struct <a class="el" href="a00244.html">hwloc_obj</a>* hwloc_obj::io_first_child</td>
339 </tr>
340 </table>
341 </div><div class="memdoc">
342
343 <p>First I/O child. Bridges, PCI and OS devices are listed here (<code>io_arity</code> and <code>io_first_child</code>) instead of in the normal children list. See also <a class="el" href="a00204.html#gac8a954ed37a4376097234c828068cbef" title="Check whether an object type is I/O.">hwloc_obj_type_is_io()</a>. </p>
344
345 </div>
346 </div>
347 <a id="a84bd65634dbc55f4158b74443a9bd04f"></a>
348 <h2 class="memtitle"><span class="permalink"><a href="#a84bd65634dbc55f4158b74443a9bd04f">&#9670;&nbsp;</a></span>last_child</h2>
349
350 <div class="memitem">
351 <div class="memproto">
352 <table class="memname">
353 <tr>
354 <td class="memname">struct <a class="el" href="a00244.html">hwloc_obj</a>* hwloc_obj::last_child</td>
355 </tr>
356 </table>
357 </div><div class="memdoc">
358
359 <p>Last normal child. </p>
360
361 </div>
362 </div>
363 <a id="a0d07fb7b8935e137c94d75a3eb492ae9"></a>
364 <h2 class="memtitle"><span class="permalink"><a href="#a0d07fb7b8935e137c94d75a3eb492ae9">&#9670;&nbsp;</a></span>logical_index</h2>
365
366 <div class="memitem">
367 <div class="memproto">
368 <table class="memname">
369 <tr>
370 <td class="memname">unsigned hwloc_obj::logical_index</td>
371 </tr>
372 </table>
373 </div><div class="memdoc">
374
375 <p>Horizontal index in the whole list of similar objects, hence guaranteed unique across the entire machine. Could be a "cousin_rank" since it's the rank within the "cousin" list below Note that this index may change when restricting the topology or when inserting a group. </p>
376
377 </div>
378 </div>
379 <a id="a6f834ea4dd26553cdea601d2fae6d3b7"></a>
380 <h2 class="memtitle"><span class="permalink"><a href="#a6f834ea4dd26553cdea601d2fae6d3b7">&#9670;&nbsp;</a></span>memory_arity</h2>
381
382 <div class="memitem">
383 <div class="memproto">
384 <table class="memname">
385 <tr>
386 <td class="memname">unsigned hwloc_obj::memory_arity</td>
387 </tr>
388 </table>
389 </div><div class="memdoc">
390
391 <p>Number of Memory children. These children are listed in <code>memory_first_child</code>. </p>
392
393 </div>
394 </div>
395 <a id="ac0e8200dba25b90d5954bd4ec61f97d3"></a>
396 <h2 class="memtitle"><span class="permalink"><a href="#ac0e8200dba25b90d5954bd4ec61f97d3">&#9670;&nbsp;</a></span>memory_first_child</h2>
397
398 <div class="memitem">
399 <div class="memproto">
400 <table class="memname">
401 <tr>
402 <td class="memname">struct <a class="el" href="a00244.html">hwloc_obj</a>* hwloc_obj::memory_first_child</td>
403 </tr>
404 </table>
405 </div><div class="memdoc">
406
407 <p>First Memory child. NUMA nodes and Memory-side caches are listed here (<code>memory_arity</code> and <code>memory_first_child</code>) instead of in the normal children list. See also <a class="el" href="a00204.html#ga1d074390c8a3dc3088d84f73fb73f966" title="Check whether an object type is Memory.">hwloc_obj_type_is_memory()</a>. </p>
408 <p>A memory hierarchy starts from a normal CPU-side object (e.g. Package) and ends with NUMA nodes as leaves. There might exist some memory-side caches between them in the middle of the memory subtree. </p>
409
410 </div>
411 </div>
412 <a id="a2bb7862ce722d7ceda23cfa153da165a"></a>
413 <h2 class="memtitle"><span class="permalink"><a href="#a2bb7862ce722d7ceda23cfa153da165a">&#9670;&nbsp;</a></span>misc_arity</h2>
414
415 <div class="memitem">
416 <div class="memproto">
417 <table class="memname">
418 <tr>
419 <td class="memname">unsigned hwloc_obj::misc_arity</td>
420 </tr>
421 </table>
422 </div><div class="memdoc">
423
424 <p>Number of Misc children. These children are listed in <code>misc_first_child</code>. </p>
425
426 </div>
427 </div>
428 <a id="a57812a313fe9b1a9500489f47c3011cc"></a>
429 <h2 class="memtitle"><span class="permalink"><a href="#a57812a313fe9b1a9500489f47c3011cc">&#9670;&nbsp;</a></span>misc_first_child</h2>
430
431 <div class="memitem">
432 <div class="memproto">
433 <table class="memname">
434 <tr>
435 <td class="memname">struct <a class="el" href="a00244.html">hwloc_obj</a>* hwloc_obj::misc_first_child</td>
436 </tr>
437 </table>
438 </div><div class="memdoc">
439
440 <p>First Misc child. Misc objects are listed here (<code>misc_arity</code> and <code>misc_first_child</code>) instead of in the normal children list. </p>
441
442 </div>
443 </div>
444 <a id="abb709ec38f2970677e4e57d1d30be96d"></a>
445 <h2 class="memtitle"><span class="permalink"><a href="#abb709ec38f2970677e4e57d1d30be96d">&#9670;&nbsp;</a></span>name</h2>
446
447 <div class="memitem">
448 <div class="memproto">
449 <table class="memname">
450 <tr>
451 <td class="memname">char* hwloc_obj::name</td>
452 </tr>
453 </table>
454 </div><div class="memdoc">
455
456 <p>Object-specific name if any. Mostly used for identifying OS devices and Misc objects where a name string is more useful than numerical indexes. </p>
457
458 </div>
459 </div>
460 <a id="a85a788017457129589318b6c39451acf"></a>
461 <h2 class="memtitle"><span class="permalink"><a href="#a85a788017457129589318b6c39451acf">&#9670;&nbsp;</a></span>next_cousin</h2>
462
463 <div class="memitem">
464 <div class="memproto">
465 <table class="memname">
466 <tr>
467 <td class="memname">struct <a class="el" href="a00244.html">hwloc_obj</a>* hwloc_obj::next_cousin</td>
468 </tr>
469 </table>
470 </div><div class="memdoc">
471
472 <p>Next object of same type and depth. </p>
473
474 </div>
475 </div>
476 <a id="a7f2343ed476fe4942e6fffd4cade1b40"></a>
477 <h2 class="memtitle"><span class="permalink"><a href="#a7f2343ed476fe4942e6fffd4cade1b40">&#9670;&nbsp;</a></span>next_sibling</h2>
478
479 <div class="memitem">
480 <div class="memproto">
481 <table class="memname">
482 <tr>
483 <td class="memname">struct <a class="el" href="a00244.html">hwloc_obj</a>* hwloc_obj::next_sibling</td>
484 </tr>
485 </table>
486 </div><div class="memdoc">
487
488 <p>Next object below the same parent (inside the same list of children). </p>
489
490 </div>
491 </div>
492 <a id="a08f0d0e16c619a6e653526cbee4ffea3"></a>
493 <h2 class="memtitle"><span class="permalink"><a href="#a08f0d0e16c619a6e653526cbee4ffea3">&#9670;&nbsp;</a></span>nodeset</h2>
494
495 <div class="memitem">
496 <div class="memproto">
497 <table class="memname">
498 <tr>
499 <td class="memname"><a class="el" href="a00189.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a> hwloc_obj::nodeset</td>
500 </tr>
501 </table>
502 </div><div class="memdoc">
503
504 <p>NUMA nodes covered by this object or containing this object. </p>
505 <p>This is the set of NUMA nodes for which there are NUMA node objects in the topology under or above this object, i.e. which are known to be physically contained in this object or containing it and known how (the children path between this object and the NUMA node objects).</p>
506 <p>In the end, these nodes are those that are close to the current object. Function <a class="el" href="a00217.html#ga569e80c5be7ef27649b0ef5aa52ffcdc" title="Return an array of local NUMA nodes.">hwloc_get_local_numanode_objs()</a> may be used to list those NUMA nodes more precisely.</p>
507 <p>If the <a class="el" href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258" title="Detect the whole system, ignore reservations, include disallowed objects.">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a> configuration flag is set, some of these nodes may not be allowed for allocation, see <a class="el" href="a00208.html#ga21a4d7237a11e76b912ed4524ab78cbd" title="Get allowed node set.">hwloc_topology_get_allowed_nodeset()</a>.</p>
508 <p>If there are no NUMA nodes in the machine, all the memory is close to this object, so only the first bit may be set in <code>nodeset</code>.</p>
509 <dl class="section note"><dt>Note</dt><dd>All objects have non-NULL CPU and node sets except Misc and I/O objects.</dd>
510 <dd>
511 Its value must not be changed, <a class="el" href="a00211.html#gae679434c1a5f41d3560a8a7e2c1b0dee" title="Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.">hwloc_bitmap_dup()</a> must be used instead. </dd></dl>
512
513 </div>
514 </div>
515 <a id="a61a7a80a68eaccbaaa28269e678c81a9"></a>
516 <h2 class="memtitle"><span class="permalink"><a href="#a61a7a80a68eaccbaaa28269e678c81a9">&#9670;&nbsp;</a></span>os_index</h2>
517
518 <div class="memitem">
519 <div class="memproto">
520 <table class="memname">
521 <tr>
522 <td class="memname">unsigned hwloc_obj::os_index</td>
523 </tr>
524 </table>
525 </div><div class="memdoc">
526
527 <p>OS-provided physical index number. It is not guaranteed unique across the entire machine, except for PUs and NUMA nodes. Set to HWLOC_UNKNOWN_INDEX if unknown or irrelevant for this object. </p>
528
529 </div>
530 </div>
531 <a id="adc494f6aed939992be1c55cca5822900"></a>
532 <h2 class="memtitle"><span class="permalink"><a href="#adc494f6aed939992be1c55cca5822900">&#9670;&nbsp;</a></span>parent</h2>
533
534 <div class="memitem">
535 <div class="memproto">
536 <table class="memname">
537 <tr>
538 <td class="memname">struct <a class="el" href="a00244.html">hwloc_obj</a>* hwloc_obj::parent</td>
539 </tr>
540 </table>
541 </div><div class="memdoc">
542
543 <p>Parent, <code>NULL</code> if root (Machine object) </p>
544
545 </div>
546 </div>
547 <a id="ac715989f55ff5a0eb6be2969ee477ec0"></a>
548 <h2 class="memtitle"><span class="permalink"><a href="#ac715989f55ff5a0eb6be2969ee477ec0">&#9670;&nbsp;</a></span>prev_cousin</h2>
549
550 <div class="memitem">
551 <div class="memproto">
552 <table class="memname">
553 <tr>
554 <td class="memname">struct <a class="el" href="a00244.html">hwloc_obj</a>* hwloc_obj::prev_cousin</td>
555 </tr>
556 </table>
557 </div><div class="memdoc">
558
559 <p>Previous object of same type and depth. </p>
560
561 </div>
562 </div>
563 <a id="a7b89e8c189876c0158a9282aaaf17f50"></a>
564 <h2 class="memtitle"><span class="permalink"><a href="#a7b89e8c189876c0158a9282aaaf17f50">&#9670;&nbsp;</a></span>prev_sibling</h2>
565
566 <div class="memitem">
567 <div class="memproto">
568 <table class="memname">
569 <tr>
570 <td class="memname">struct <a class="el" href="a00244.html">hwloc_obj</a>* hwloc_obj::prev_sibling</td>
571 </tr>
572 </table>
573 </div><div class="memdoc">
574
575 <p>Previous object below the same parent (inside the same list of children). </p>
576
577 </div>
578 </div>
579 <a id="aaa6043eee6f55869933c1d974efd9acd"></a>
580 <h2 class="memtitle"><span class="permalink"><a href="#aaa6043eee6f55869933c1d974efd9acd">&#9670;&nbsp;</a></span>sibling_rank</h2>
581
582 <div class="memitem">
583 <div class="memproto">
584 <table class="memname">
585 <tr>
586 <td class="memname">unsigned hwloc_obj::sibling_rank</td>
587 </tr>
588 </table>
589 </div><div class="memdoc">
590
591 <p>Index in parent's <code>children</code>[] array. Or the index in parent's Memory, I/O or Misc children list. </p>
592
593 </div>
594 </div>
595 <a id="a5d4f97e76723a9ec8d38046f19e00d33"></a>
596 <h2 class="memtitle"><span class="permalink"><a href="#a5d4f97e76723a9ec8d38046f19e00d33">&#9670;&nbsp;</a></span>subtype</h2>
597
598 <div class="memitem">
599 <div class="memproto">
600 <table class="memname">
601 <tr>
602 <td class="memname">char* hwloc_obj::subtype</td>
603 </tr>
604 </table>
605 </div><div class="memdoc">
606
607 <p>Subtype string to better describe the type field. </p>
608
609 </div>
610 </div>
611 <a id="a0f41a1d67dc6b661906f2217563637f3"></a>
612 <h2 class="memtitle"><span class="permalink"><a href="#a0f41a1d67dc6b661906f2217563637f3">&#9670;&nbsp;</a></span>symmetric_subtree</h2>
613
614 <div class="memitem">
615 <div class="memproto">
616 <table class="memname">
617 <tr>
618 <td class="memname">int hwloc_obj::symmetric_subtree</td>
619 </tr>
620 </table>
621 </div><div class="memdoc">
622
623 <p>Set if the subtree of normal objects below this object is symmetric, which means all normal children and their children have identical subtrees. </p>
624 <p>Memory, I/O and Misc children are ignored.</p>
625 <p>If set in the topology root object, lstopo may export the topology as a synthetic string. </p>
626
627 </div>
628 </div>
629 <a id="a75603fc36c9284ba48ce814b772a58b6"></a>
630 <h2 class="memtitle"><span class="permalink"><a href="#a75603fc36c9284ba48ce814b772a58b6">&#9670;&nbsp;</a></span>total_memory</h2>
631
632 <div class="memitem">
633 <div class="memproto">
634 <table class="memname">
635 <tr>
636 <td class="memname">hwloc_uint64_t hwloc_obj::total_memory</td>
637 </tr>
638 </table>
639 </div><div class="memdoc">
640
641 <p>Total memory (in bytes) in NUMA nodes below this object. </p>
642
643 </div>
644 </div>
645 <a id="acc4f0803f244867e68fe0036800be5de"></a>
646 <h2 class="memtitle"><span class="permalink"><a href="#acc4f0803f244867e68fe0036800be5de">&#9670;&nbsp;</a></span>type</h2>
647
648 <div class="memitem">
649 <div class="memproto">
650 <table class="memname">
651 <tr>
652 <td class="memname"><a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> hwloc_obj::type</td>
653 </tr>
654 </table>
655 </div><div class="memdoc">
656
657 <p>Type of object. </p>
658
659 </div>
660 </div>
661 <a id="a76fd3ac94401cf32dfccc3a3a8de68a5"></a>
662 <h2 class="memtitle"><span class="permalink"><a href="#a76fd3ac94401cf32dfccc3a3a8de68a5">&#9670;&nbsp;</a></span>userdata</h2>
663
664 <div class="memitem">
665 <div class="memproto">
666 <table class="memname">
667 <tr>
668 <td class="memname">void* hwloc_obj::userdata</td>
669 </tr>
670 </table>
671 </div><div class="memdoc">
672
673 <p>Application-given private data pointer, initialized to <code>NULL</code>, use it as you wish. See <a class="el" href="a00212.html#ga9d6ff0f7a8dd45be9aa8575ef31978cc" title="Set the application-specific callback for exporting object userdata.">hwloc_topology_set_userdata_export_callback()</a> in <a class="el" href="a00134_source.html">hwloc/export.h</a> if you wish to export this field to XML. </p>
674
675 </div>
676 </div>
677 <hr/>The documentation for this struct was generated from the following file:<ul>
678 <li><a class="el" href="a00125_source.html">hwloc.h</a></li>
679 </ul>
64 <dl class="section note"><dt>Note</dt><dd>These structures and functions may change when <a class="el" href="a00191.html#gaac5bc1f46f55e10ef0141a68ce70e21f" title="Current component and plugin ABI version (see hwloc/plugins.h)">HWLOC_COMPONENT_ABI</a> is modified. </dd></dl>
65 <h2 class="groupheader">Function Documentation</h2>
66 <a id="ga6c55fb80c3d0c8c8e61078b3f38adde8"></a>
67 <h2 class="memtitle"><span class="permalink"><a href="#ga6c55fb80c3d0c8c8e61078b3f38adde8">&#9670;&nbsp;</a></span>hwloc_pcidisc_check_bridge_type()</h2>
68
69 <div class="memitem">
70 <div class="memproto">
71 <table class="memname">
72 <tr>
73 <td class="memname"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> hwloc_pcidisc_check_bridge_type </td>
74 <td>(</td>
75 <td class="paramtype">unsigned&#160;</td>
76 <td class="paramname"><em>device_class</em>, </td>
77 </tr>
78 <tr>
79 <td class="paramkey"></td>
80 <td></td>
81 <td class="paramtype">const unsigned char *&#160;</td>
82 <td class="paramname"><em>config</em>&#160;</td>
83 </tr>
84 <tr>
85 <td></td>
86 <td>)</td>
87 <td></td><td></td>
88 </tr>
89 </table>
90 </div><div class="memdoc">
91
92 <p>Return the hwloc object type (PCI device or Bridge) for the given class and configuration space. </p>
93 <p>This function requires 16 bytes of common configuration header at the beginning of config. </p>
94
95 </div>
96 </div>
97 <a id="ga95acf6822a49447c11067d0b843965ba"></a>
98 <h2 class="memtitle"><span class="permalink"><a href="#ga95acf6822a49447c11067d0b843965ba">&#9670;&nbsp;</a></span>hwloc_pcidisc_find_bridge_buses()</h2>
99
100 <div class="memitem">
101 <div class="memproto">
102 <table class="memname">
103 <tr>
104 <td class="memname">int hwloc_pcidisc_find_bridge_buses </td>
105 <td>(</td>
106 <td class="paramtype">unsigned&#160;</td>
107 <td class="paramname"><em>domain</em>, </td>
108 </tr>
109 <tr>
110 <td class="paramkey"></td>
111 <td></td>
112 <td class="paramtype">unsigned&#160;</td>
113 <td class="paramname"><em>bus</em>, </td>
114 </tr>
115 <tr>
116 <td class="paramkey"></td>
117 <td></td>
118 <td class="paramtype">unsigned&#160;</td>
119 <td class="paramname"><em>dev</em>, </td>
120 </tr>
121 <tr>
122 <td class="paramkey"></td>
123 <td></td>
124 <td class="paramtype">unsigned&#160;</td>
125 <td class="paramname"><em>func</em>, </td>
126 </tr>
127 <tr>
128 <td class="paramkey"></td>
129 <td></td>
130 <td class="paramtype">unsigned *&#160;</td>
131 <td class="paramname"><em>secondary_busp</em>, </td>
132 </tr>
133 <tr>
134 <td class="paramkey"></td>
135 <td></td>
136 <td class="paramtype">unsigned *&#160;</td>
137 <td class="paramname"><em>subordinate_busp</em>, </td>
138 </tr>
139 <tr>
140 <td class="paramkey"></td>
141 <td></td>
142 <td class="paramtype">const unsigned char *&#160;</td>
143 <td class="paramname"><em>config</em>&#160;</td>
144 </tr>
145 <tr>
146 <td></td>
147 <td>)</td>
148 <td></td><td></td>
149 </tr>
150 </table>
151 </div><div class="memdoc">
152
153 <p>Fills the attributes of the given PCI bridge using the given PCI config space. </p>
154 <p>This function requires 32 bytes of common configuration header at the beginning of config.</p>
155 <p>Returns -1 and destroys /p obj if bridge fields are invalid. </p>
156
157 </div>
158 </div>
159 <a id="ga706f71cfea09d547d2cbafa642d6e03b"></a>
160 <h2 class="memtitle"><span class="permalink"><a href="#ga706f71cfea09d547d2cbafa642d6e03b">&#9670;&nbsp;</a></span>hwloc_pcidisc_find_cap()</h2>
161
162 <div class="memitem">
163 <div class="memproto">
164 <table class="memname">
165 <tr>
166 <td class="memname">unsigned hwloc_pcidisc_find_cap </td>
167 <td>(</td>
168 <td class="paramtype">const unsigned char *&#160;</td>
169 <td class="paramname"><em>config</em>, </td>
170 </tr>
171 <tr>
172 <td class="paramkey"></td>
173 <td></td>
174 <td class="paramtype">unsigned&#160;</td>
175 <td class="paramname"><em>cap</em>&#160;</td>
176 </tr>
177 <tr>
178 <td></td>
179 <td>)</td>
180 <td></td><td></td>
181 </tr>
182 </table>
183 </div><div class="memdoc">
184
185 <p>Return the offset of the given capability in the PCI config space buffer. </p>
186 <p>This function requires a 256-bytes config space. Unknown/unavailable bytes should be set to 0xff. </p>
187
188 </div>
189 </div>
190 <a id="ga51d1ebcbf9729987c9d17df3aa57d209"></a>
191 <h2 class="memtitle"><span class="permalink"><a href="#ga51d1ebcbf9729987c9d17df3aa57d209">&#9670;&nbsp;</a></span>hwloc_pcidisc_find_linkspeed()</h2>
192
193 <div class="memitem">
194 <div class="memproto">
195 <table class="memname">
196 <tr>
197 <td class="memname">int hwloc_pcidisc_find_linkspeed </td>
198 <td>(</td>
199 <td class="paramtype">const unsigned char *&#160;</td>
200 <td class="paramname"><em>config</em>, </td>
201 </tr>
202 <tr>
203 <td class="paramkey"></td>
204 <td></td>
205 <td class="paramtype">unsigned&#160;</td>
206 <td class="paramname"><em>offset</em>, </td>
207 </tr>
208 <tr>
209 <td class="paramkey"></td>
210 <td></td>
211 <td class="paramtype">float *&#160;</td>
212 <td class="paramname"><em>linkspeed</em>&#160;</td>
213 </tr>
214 <tr>
215 <td></td>
216 <td>)</td>
217 <td></td><td></td>
218 </tr>
219 </table>
220 </div><div class="memdoc">
221
222 <p>Fill linkspeed by reading the PCI config space where PCI_CAP_ID_EXP is at position offset. </p>
223 <p>Needs 20 bytes of EXP capability block starting at offset in the config space for registers up to link status. </p>
224
225 </div>
226 </div>
227 <a id="gabda1d6c1799e50b9226f8a4da9bd29ea"></a>
228 <h2 class="memtitle"><span class="permalink"><a href="#gabda1d6c1799e50b9226f8a4da9bd29ea">&#9670;&nbsp;</a></span>hwloc_pcidisc_tree_attach()</h2>
229
230 <div class="memitem">
231 <div class="memproto">
232 <table class="memname">
233 <tr>
234 <td class="memname">int hwloc_pcidisc_tree_attach </td>
235 <td>(</td>
236 <td class="paramtype">struct hwloc_topology *&#160;</td>
237 <td class="paramname"><em>topology</em>, </td>
238 </tr>
239 <tr>
240 <td class="paramkey"></td>
241 <td></td>
242 <td class="paramtype">struct <a class="el" href="a00250.html">hwloc_obj</a> *&#160;</td>
243 <td class="paramname"><em>tree</em>&#160;</td>
244 </tr>
245 <tr>
246 <td></td>
247 <td>)</td>
248 <td></td><td></td>
249 </tr>
250 </table>
251 </div><div class="memdoc">
252
253 <p>Add some hostbridges on top of the given tree of PCI objects and attach them to the topology. </p>
254 <p>Other backends may lookup PCI objects or localities (for instance to attach OS devices) by using hwloc_pcidisc_find_by_busid() or hwloc_pcidisc_find_busid_parent(). </p>
255
256 </div>
257 </div>
258 <a id="gab76ddc4f55db8101ef0d44317965128c"></a>
259 <h2 class="memtitle"><span class="permalink"><a href="#gab76ddc4f55db8101ef0d44317965128c">&#9670;&nbsp;</a></span>hwloc_pcidisc_tree_insert_by_busid()</h2>
260
261 <div class="memitem">
262 <div class="memproto">
263 <table class="memname">
264 <tr>
265 <td class="memname">void hwloc_pcidisc_tree_insert_by_busid </td>
266 <td>(</td>
267 <td class="paramtype">struct <a class="el" href="a00250.html">hwloc_obj</a> **&#160;</td>
268 <td class="paramname"><em>treep</em>, </td>
269 </tr>
270 <tr>
271 <td class="paramkey"></td>
272 <td></td>
273 <td class="paramtype">struct <a class="el" href="a00250.html">hwloc_obj</a> *&#160;</td>
274 <td class="paramname"><em>obj</em>&#160;</td>
275 </tr>
276 <tr>
277 <td></td>
278 <td>)</td>
279 <td></td><td></td>
280 </tr>
281 </table>
282 </div><div class="memdoc">
283
284 <p>Insert a PCI object in the given PCI tree by looking at PCI bus IDs. </p>
285 <p>If <code>treep</code> points to <code>NULL</code>, the new object is inserted there. </p>
286
287 </div>
288 </div>
680289 </div><!-- contents -->
681290 <!-- start footer part -->
682291 <hr class="footer"/><address class="footer"><small>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Components and Plugins: finding PCI objects during other discoveries</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#typedef-members">Typedefs</a> &#124;
43 <a href="#func-members">Functions</a> </div>
44 <div class="headertitle">
45 <div class="title">Components and Plugins: finding PCI objects during other discoveries</div> </div>
46 </div><!--header-->
47 <div class="contents">
48 <table class="memberdecls">
49 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
50 Typedefs</h2></td></tr>
51 <tr class="memitem:gafe5e49d32dd0a28ead94b6e31048e042"><td class="memItemLeft" align="right" valign="top">typedef void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00245.html#gafe5e49d32dd0a28ead94b6e31048e042">hwloc_backend_distances_add_handle_t</a></td></tr>
52 <tr class="separator:gafe5e49d32dd0a28ead94b6e31048e042"><td class="memSeparator" colspan="2">&#160;</td></tr>
53 </table><table class="memberdecls">
54 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
55 Functions</h2></td></tr>
56 <tr class="memitem:ga7964833550947636ab8975909de3fa98"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00250.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00245.html#ga7964833550947636ab8975909de3fa98">hwloc_pci_find_parent_by_busid</a> (struct hwloc_topology *topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)</td></tr>
57 <tr class="separator:ga7964833550947636ab8975909de3fa98"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:ga1cc465a010c5f75e0f280cdc8e27197d"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00250.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00245.html#ga1cc465a010c5f75e0f280cdc8e27197d">hwloc_pci_find_by_busid</a> (struct hwloc_topology *topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)</td></tr>
59 <tr class="separator:ga1cc465a010c5f75e0f280cdc8e27197d"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:gaa66a0bd519a5b1183a3e9b0c35a7f6cc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00245.html#gafe5e49d32dd0a28ead94b6e31048e042">hwloc_backend_distances_add_handle_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00245.html#gaa66a0bd519a5b1183a3e9b0c35a7f6cc">hwloc_backend_distances_add_create</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, const char *name, unsigned long kind, unsigned long flags)</td></tr>
61 <tr class="separator:gaa66a0bd519a5b1183a3e9b0c35a7f6cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:gaa27036bd83102f8e406f1051d560da6c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00245.html#gaa27036bd83102f8e406f1051d560da6c">hwloc_backend_distances_add_values</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00245.html#gafe5e49d32dd0a28ead94b6e31048e042">hwloc_backend_distances_add_handle_t</a> handle, unsigned nbobjs, <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *objs, hwloc_uint64_t *values, unsigned long flags)</td></tr>
63 <tr class="separator:gaa27036bd83102f8e406f1051d560da6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 <tr class="memitem:ga1468ac5f0bfb0e18bfc04c9ce5a5a4a3"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00245.html#ga1468ac5f0bfb0e18bfc04c9ce5a5a4a3">hwloc_backend_distances_add_commit</a> (<a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="el" href="a00245.html#gafe5e49d32dd0a28ead94b6e31048e042">hwloc_backend_distances_add_handle_t</a> handle, unsigned long flags)</td></tr>
65 <tr class="separator:ga1468ac5f0bfb0e18bfc04c9ce5a5a4a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 </table>
67 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
68 <dl class="section note"><dt>Note</dt><dd>These structures and functions may change when <a class="el" href="a00191.html#gaac5bc1f46f55e10ef0141a68ce70e21f" title="Current component and plugin ABI version (see hwloc/plugins.h)">HWLOC_COMPONENT_ABI</a> is modified. </dd></dl>
69 <h2 class="groupheader">Typedef Documentation</h2>
70 <a id="gafe5e49d32dd0a28ead94b6e31048e042"></a>
71 <h2 class="memtitle"><span class="permalink"><a href="#gafe5e49d32dd0a28ead94b6e31048e042">&#9670;&nbsp;</a></span>hwloc_backend_distances_add_handle_t</h2>
72
73 <div class="memitem">
74 <div class="memproto">
75 <table class="memname">
76 <tr>
77 <td class="memname">typedef void* <a class="el" href="a00245.html#gafe5e49d32dd0a28ead94b6e31048e042">hwloc_backend_distances_add_handle_t</a></td>
78 </tr>
79 </table>
80 </div><div class="memdoc">
81
82 <p>Handle to a new distances structure during its addition to the topology. </p>
83
84 </div>
85 </div>
86 <h2 class="groupheader">Function Documentation</h2>
87 <a id="ga1468ac5f0bfb0e18bfc04c9ce5a5a4a3"></a>
88 <h2 class="memtitle"><span class="permalink"><a href="#ga1468ac5f0bfb0e18bfc04c9ce5a5a4a3">&#9670;&nbsp;</a></span>hwloc_backend_distances_add_commit()</h2>
89
90 <div class="memitem">
91 <div class="memproto">
92 <table class="memname">
93 <tr>
94 <td class="memname">int hwloc_backend_distances_add_commit </td>
95 <td>(</td>
96 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
97 <td class="paramname"><em>topology</em>, </td>
98 </tr>
99 <tr>
100 <td class="paramkey"></td>
101 <td></td>
102 <td class="paramtype"><a class="el" href="a00245.html#gafe5e49d32dd0a28ead94b6e31048e042">hwloc_backend_distances_add_handle_t</a>&#160;</td>
103 <td class="paramname"><em>handle</em>, </td>
104 </tr>
105 <tr>
106 <td class="paramkey"></td>
107 <td></td>
108 <td class="paramtype">unsigned long&#160;</td>
109 <td class="paramname"><em>flags</em>&#160;</td>
110 </tr>
111 <tr>
112 <td></td>
113 <td>)</td>
114 <td></td><td></td>
115 </tr>
116 </table>
117 </div><div class="memdoc">
118
119 <p>Commit a new distances structure. </p>
120 <p>This is similar to <a class="el" href="a00219.html#ga1f5a29760ebb8f9af831e645315f553c" title="Commit a new distances structure.">hwloc_distances_add_commit()</a> but this variant is designed for backend inserting distances during topology discovery. </p>
121
122 </div>
123 </div>
124 <a id="gaa66a0bd519a5b1183a3e9b0c35a7f6cc"></a>
125 <h2 class="memtitle"><span class="permalink"><a href="#gaa66a0bd519a5b1183a3e9b0c35a7f6cc">&#9670;&nbsp;</a></span>hwloc_backend_distances_add_create()</h2>
126
127 <div class="memitem">
128 <div class="memproto">
129 <table class="memname">
130 <tr>
131 <td class="memname"><a class="el" href="a00245.html#gafe5e49d32dd0a28ead94b6e31048e042">hwloc_backend_distances_add_handle_t</a> hwloc_backend_distances_add_create </td>
132 <td>(</td>
133 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
134 <td class="paramname"><em>topology</em>, </td>
135 </tr>
136 <tr>
137 <td class="paramkey"></td>
138 <td></td>
139 <td class="paramtype">const char *&#160;</td>
140 <td class="paramname"><em>name</em>, </td>
141 </tr>
142 <tr>
143 <td class="paramkey"></td>
144 <td></td>
145 <td class="paramtype">unsigned long&#160;</td>
146 <td class="paramname"><em>kind</em>, </td>
147 </tr>
148 <tr>
149 <td class="paramkey"></td>
150 <td></td>
151 <td class="paramtype">unsigned long&#160;</td>
152 <td class="paramname"><em>flags</em>&#160;</td>
153 </tr>
154 <tr>
155 <td></td>
156 <td>)</td>
157 <td></td><td></td>
158 </tr>
159 </table>
160 </div><div class="memdoc">
161
162 <p>Create a new empty distances structure. </p>
163 <p>This is identical to <a class="el" href="a00219.html#ga823d38fa8d21dc338497fb0f79c96704" title="Create a new empty distances structure.">hwloc_distances_add_create()</a> but this variant is designed for backend inserting distances during topology discovery. </p>
164
165 </div>
166 </div>
167 <a id="gaa27036bd83102f8e406f1051d560da6c"></a>
168 <h2 class="memtitle"><span class="permalink"><a href="#gaa27036bd83102f8e406f1051d560da6c">&#9670;&nbsp;</a></span>hwloc_backend_distances_add_values()</h2>
169
170 <div class="memitem">
171 <div class="memproto">
172 <table class="memname">
173 <tr>
174 <td class="memname">int hwloc_backend_distances_add_values </td>
175 <td>(</td>
176 <td class="paramtype"><a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a>&#160;</td>
177 <td class="paramname"><em>topology</em>, </td>
178 </tr>
179 <tr>
180 <td class="paramkey"></td>
181 <td></td>
182 <td class="paramtype"><a class="el" href="a00245.html#gafe5e49d32dd0a28ead94b6e31048e042">hwloc_backend_distances_add_handle_t</a>&#160;</td>
183 <td class="paramname"><em>handle</em>, </td>
184 </tr>
185 <tr>
186 <td class="paramkey"></td>
187 <td></td>
188 <td class="paramtype">unsigned&#160;</td>
189 <td class="paramname"><em>nbobjs</em>, </td>
190 </tr>
191 <tr>
192 <td class="paramkey"></td>
193 <td></td>
194 <td class="paramtype"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *&#160;</td>
195 <td class="paramname"><em>objs</em>, </td>
196 </tr>
197 <tr>
198 <td class="paramkey"></td>
199 <td></td>
200 <td class="paramtype">hwloc_uint64_t *&#160;</td>
201 <td class="paramname"><em>values</em>, </td>
202 </tr>
203 <tr>
204 <td class="paramkey"></td>
205 <td></td>
206 <td class="paramtype">unsigned long&#160;</td>
207 <td class="paramname"><em>flags</em>&#160;</td>
208 </tr>
209 <tr>
210 <td></td>
211 <td>)</td>
212 <td></td><td></td>
213 </tr>
214 </table>
215 </div><div class="memdoc">
216
217 <p>Specify the objects and values in a new empty distances structure. </p>
218 <p>This is similar to <a class="el" href="a00219.html#ga8c9715481b0bce344c8a33c6e6a56469" title="Specify the objects and values in a new empty distances structure.">hwloc_distances_add_values()</a> but this variant is designed for backend inserting distances during topology discovery.</p>
219 <p>The only semantical difference is that <code>objs</code> and <code>values</code> are not duplicated, but directly attached to the topology. On success, these arrays are given to the core and should not ever be freed by the caller anymore. </p>
220
221 </div>
222 </div>
223 <a id="ga1cc465a010c5f75e0f280cdc8e27197d"></a>
224 <h2 class="memtitle"><span class="permalink"><a href="#ga1cc465a010c5f75e0f280cdc8e27197d">&#9670;&nbsp;</a></span>hwloc_pci_find_by_busid()</h2>
225
226 <div class="memitem">
227 <div class="memproto">
228 <table class="memname">
229 <tr>
230 <td class="memname">struct <a class="el" href="a00250.html">hwloc_obj</a>* hwloc_pci_find_by_busid </td>
231 <td>(</td>
232 <td class="paramtype">struct hwloc_topology *&#160;</td>
233 <td class="paramname"><em>topology</em>, </td>
234 </tr>
235 <tr>
236 <td class="paramkey"></td>
237 <td></td>
238 <td class="paramtype">unsigned&#160;</td>
239 <td class="paramname"><em>domain</em>, </td>
240 </tr>
241 <tr>
242 <td class="paramkey"></td>
243 <td></td>
244 <td class="paramtype">unsigned&#160;</td>
245 <td class="paramname"><em>bus</em>, </td>
246 </tr>
247 <tr>
248 <td class="paramkey"></td>
249 <td></td>
250 <td class="paramtype">unsigned&#160;</td>
251 <td class="paramname"><em>dev</em>, </td>
252 </tr>
253 <tr>
254 <td class="paramkey"></td>
255 <td></td>
256 <td class="paramtype">unsigned&#160;</td>
257 <td class="paramname"><em>func</em>&#160;</td>
258 </tr>
259 <tr>
260 <td></td>
261 <td>)</td>
262 <td></td><td></td>
263 </tr>
264 </table>
265 </div><div class="memdoc">
266
267 <p>Find the PCI device or bridge matching a PCI bus ID exactly. </p>
268 <p>This is useful for adding specific information about some objects based on their PCI id. When it comes to attaching objects based on PCI locality, <a class="el" href="a00245.html#ga7964833550947636ab8975909de3fa98" title="Find the object or a parent of a PCI bus ID.">hwloc_pci_find_parent_by_busid()</a> should be preferred. </p>
269
270 </div>
271 </div>
272 <a id="ga7964833550947636ab8975909de3fa98"></a>
273 <h2 class="memtitle"><span class="permalink"><a href="#ga7964833550947636ab8975909de3fa98">&#9670;&nbsp;</a></span>hwloc_pci_find_parent_by_busid()</h2>
274
275 <div class="memitem">
276 <div class="memproto">
277 <table class="memname">
278 <tr>
279 <td class="memname">struct <a class="el" href="a00250.html">hwloc_obj</a>* hwloc_pci_find_parent_by_busid </td>
280 <td>(</td>
281 <td class="paramtype">struct hwloc_topology *&#160;</td>
282 <td class="paramname"><em>topology</em>, </td>
283 </tr>
284 <tr>
285 <td class="paramkey"></td>
286 <td></td>
287 <td class="paramtype">unsigned&#160;</td>
288 <td class="paramname"><em>domain</em>, </td>
289 </tr>
290 <tr>
291 <td class="paramkey"></td>
292 <td></td>
293 <td class="paramtype">unsigned&#160;</td>
294 <td class="paramname"><em>bus</em>, </td>
295 </tr>
296 <tr>
297 <td class="paramkey"></td>
298 <td></td>
299 <td class="paramtype">unsigned&#160;</td>
300 <td class="paramname"><em>dev</em>, </td>
301 </tr>
302 <tr>
303 <td class="paramkey"></td>
304 <td></td>
305 <td class="paramtype">unsigned&#160;</td>
306 <td class="paramname"><em>func</em>&#160;</td>
307 </tr>
308 <tr>
309 <td></td>
310 <td>)</td>
311 <td></td><td></td>
312 </tr>
313 </table>
314 </div><div class="memdoc">
315
316 <p>Find the object or a parent of a PCI bus ID. </p>
317 <p>When attaching a new object (typically an OS device) whose locality is specified by PCI bus ID, this function returns the PCI object to use as a parent for attaching.</p>
318 <p>If the exact PCI device with this bus ID exists, it is returned. Otherwise (for instance if it was filtered out), the function returns another object with similar locality (for instance a parent bridge, or the local CPU Package). </p>
319
320 </div>
321 </div>
322 </div><!-- contents -->
323 <!-- start footer part -->
324 <hr class="footer"/><address class="footer"><small>
325 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
326 </small></address>
327 </body>
328 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Netloc API</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#enum-members">Enumerations</a> </div>
43 <div class="headertitle">
44 <div class="title">Netloc API</div> </div>
45 </div><!--header-->
46 <div class="contents">
47 <table class="memberdecls">
48 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
49 Enumerations</h2></td></tr>
50 <tr class="memitem:ga61dadd085c1777f559549e05962b2c9e"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom">{ <br />
51 &#160;&#160;<a class="el" href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea4deb864e4b46fe70b83c3220442a627c">NETLOC_SUCCESS</a> = 0
52 , <a class="el" href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea4b33f8da6efc963562a93569ac8b349a">NETLOC_ERROR</a> = -1
53 , <a class="el" href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea6e4322619d38dec18dbd16a606b14aa8">NETLOC_ERROR_NOTDIR</a> = -2
54 , <a class="el" href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea81bc77a77d1a42054dc64b11a4cc8612">NETLOC_ERROR_NOENT</a> = -3
55 , <br />
56 &#160;&#160;<a class="el" href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea0dc7c18a5a3d027bf3f835eacdbed932">NETLOC_ERROR_EMPTY</a> = -4
57 , <a class="el" href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea4485021555c6cb24d5f6e391b1bd6dee">NETLOC_ERROR_MULTIPLE</a> = -5
58 , <a class="el" href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea4a55d10dfc1eb5c84027de7d48dfac4d">NETLOC_ERROR_NOT_IMPL</a> = -6
59 , <a class="el" href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea67dfc8498fa899900e2231fad4538556">NETLOC_ERROR_EXISTS</a> = -7
60 , <br />
61 &#160;&#160;<a class="el" href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea61b43e2553779d3610f894fd6698a6ee">NETLOC_ERROR_NOT_FOUND</a> = -8
62 , <a class="el" href="a00246.html#gga61dadd085c1777f559549e05962b2c9ea39974c6110bed527cb7658672b8eeeb9">NETLOC_ERROR_MAX</a> = -9
63 <br />
64 }</td></tr>
65 <tr class="separator:ga61dadd085c1777f559549e05962b2c9e"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 </table>
67 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
68 <h2 class="groupheader">Enumeration Type Documentation</h2>
69 <a id="ga61dadd085c1777f559549e05962b2c9e"></a>
70 <h2 class="memtitle"><span class="permalink"><a href="#ga61dadd085c1777f559549e05962b2c9e">&#9670;&nbsp;</a></span>anonymous enum</h2>
71
72 <div class="memitem">
73 <div class="memproto">
74 <table class="memname">
75 <tr>
76 <td class="memname">anonymous enum</td>
77 </tr>
78 </table>
79 </div><div class="memdoc">
80 <p>Return codes </p>
81 <table class="fieldtable">
82 <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga61dadd085c1777f559549e05962b2c9ea4deb864e4b46fe70b83c3220442a627c"></a>NETLOC_SUCCESS&#160;</td><td class="fielddoc"><p>Success </p>
83 </td></tr>
84 <tr><td class="fieldname"><a id="gga61dadd085c1777f559549e05962b2c9ea4b33f8da6efc963562a93569ac8b349a"></a>NETLOC_ERROR&#160;</td><td class="fielddoc"><p>Error: General condition </p>
85 </td></tr>
86 <tr><td class="fieldname"><a id="gga61dadd085c1777f559549e05962b2c9ea6e4322619d38dec18dbd16a606b14aa8"></a>NETLOC_ERROR_NOTDIR&#160;</td><td class="fielddoc"><p>Error: URI is not a directory </p>
87 </td></tr>
88 <tr><td class="fieldname"><a id="gga61dadd085c1777f559549e05962b2c9ea81bc77a77d1a42054dc64b11a4cc8612"></a>NETLOC_ERROR_NOENT&#160;</td><td class="fielddoc"><p>Error: URI is invalid, no such entry </p>
89 </td></tr>
90 <tr><td class="fieldname"><a id="gga61dadd085c1777f559549e05962b2c9ea0dc7c18a5a3d027bf3f835eacdbed932"></a>NETLOC_ERROR_EMPTY&#160;</td><td class="fielddoc"><p>Error: No networks found </p>
91 </td></tr>
92 <tr><td class="fieldname"><a id="gga61dadd085c1777f559549e05962b2c9ea4485021555c6cb24d5f6e391b1bd6dee"></a>NETLOC_ERROR_MULTIPLE&#160;</td><td class="fielddoc"><p>Error: Multiple matching networks found </p>
93 </td></tr>
94 <tr><td class="fieldname"><a id="gga61dadd085c1777f559549e05962b2c9ea4a55d10dfc1eb5c84027de7d48dfac4d"></a>NETLOC_ERROR_NOT_IMPL&#160;</td><td class="fielddoc"><p>Error: Interface not implemented </p>
95 </td></tr>
96 <tr><td class="fieldname"><a id="gga61dadd085c1777f559549e05962b2c9ea67dfc8498fa899900e2231fad4538556"></a>NETLOC_ERROR_EXISTS&#160;</td><td class="fielddoc"><p>Error: If the entry already exists when trying to add to a lookup table </p>
97 </td></tr>
98 <tr><td class="fieldname"><a id="gga61dadd085c1777f559549e05962b2c9ea61b43e2553779d3610f894fd6698a6ee"></a>NETLOC_ERROR_NOT_FOUND&#160;</td><td class="fielddoc"><p>Error: No path found </p>
99 </td></tr>
100 <tr><td class="fieldname"><a id="gga61dadd085c1777f559549e05962b2c9ea39974c6110bed527cb7658672b8eeeb9"></a>NETLOC_ERROR_MAX&#160;</td><td class="fielddoc"><p>Error: Enum upper bound marker. No errors less than this number Will not be returned externally. </p>
101 </td></tr>
102 </table>
103
104 </div>
105 </div>
106 </div><!-- contents -->
107 <!-- start footer part -->
108 <hr class="footer"/><address class="footer"><small>
109 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
110 </small></address>
111 </body>
112 </html>
+0
-178
doc/doxygen-doc/html/a00248.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_obj_attr_u Union Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#nested-classes">Data Structures</a> &#124;
43 <a href="#pub-attribs">Data Fields</a> </div>
44 <div class="headertitle">
45 <div class="title">hwloc_obj_attr_u Union Reference<div class="ingroups"><a class="el" href="a00191.html">Object Structure and Attributes</a></div></div> </div>
46 </div><!--header-->
47 <div class="contents">
48
49 <p><code>#include &lt;<a class="el" href="a00125_source.html">hwloc.h</a>&gt;</code></p>
50 <table class="memberdecls">
51 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
52 Data Structures</h2></td></tr>
53 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00272.html">hwloc_bridge_attr_s</a></td></tr>
54 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
55 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00260.html">hwloc_cache_attr_s</a></td></tr>
56 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
57 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00264.html">hwloc_group_attr_s</a></td></tr>
58 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
59 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00252.html">hwloc_numanode_attr_s</a></td></tr>
60 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
61 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html">hwloc_osdev_attr_s</a></td></tr>
62 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
63 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00268.html">hwloc_pcidev_attr_s</a></td></tr>
64 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
65 </table><table class="memberdecls">
66 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
67 Data Fields</h2></td></tr>
68 <tr class="memitem:ad066b9612802ffa01e132dc3a8e6cc86"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00252.html">hwloc_obj_attr_u::hwloc_numanode_attr_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00248.html#ad066b9612802ffa01e132dc3a8e6cc86">numanode</a></td></tr>
69 <tr class="separator:ad066b9612802ffa01e132dc3a8e6cc86"><td class="memSeparator" colspan="2">&#160;</td></tr>
70 <tr class="memitem:a23f553f3252c9d13f2338231cd354ea9"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00260.html">hwloc_obj_attr_u::hwloc_cache_attr_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00248.html#a23f553f3252c9d13f2338231cd354ea9">cache</a></td></tr>
71 <tr class="separator:a23f553f3252c9d13f2338231cd354ea9"><td class="memSeparator" colspan="2">&#160;</td></tr>
72 <tr class="memitem:a9eddbd69e34cd2ef6af6d2ac31b6eff3"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00264.html">hwloc_obj_attr_u::hwloc_group_attr_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00248.html#a9eddbd69e34cd2ef6af6d2ac31b6eff3">group</a></td></tr>
73 <tr class="separator:a9eddbd69e34cd2ef6af6d2ac31b6eff3"><td class="memSeparator" colspan="2">&#160;</td></tr>
74 <tr class="memitem:a0b66da7ab072f7c016f8ed86701f5a7c"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00268.html">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00248.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a></td></tr>
75 <tr class="separator:a0b66da7ab072f7c016f8ed86701f5a7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
76 <tr class="memitem:a207e6359497b7116d6f4baa9e8bbeb43"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00272.html">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00248.html#a207e6359497b7116d6f4baa9e8bbeb43">bridge</a></td></tr>
77 <tr class="separator:a207e6359497b7116d6f4baa9e8bbeb43"><td class="memSeparator" colspan="2">&#160;</td></tr>
78 <tr class="memitem:aaf7a5c38b5185703ff18c46ad2761dcf"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00288.html">hwloc_obj_attr_u::hwloc_osdev_attr_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00248.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a></td></tr>
79 <tr class="separator:aaf7a5c38b5185703ff18c46ad2761dcf"><td class="memSeparator" colspan="2">&#160;</td></tr>
80 </table>
81 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
82 <div class="textblock"><p>Object type-specific Attributes. </p>
83 </div><h2 class="groupheader">Field Documentation</h2>
84 <a id="a207e6359497b7116d6f4baa9e8bbeb43"></a>
85 <h2 class="memtitle"><span class="permalink"><a href="#a207e6359497b7116d6f4baa9e8bbeb43">&#9670;&nbsp;</a></span>bridge</h2>
86
87 <div class="memitem">
88 <div class="memproto">
89 <table class="memname">
90 <tr>
91 <td class="memname">struct <a class="el" href="a00272.html">hwloc_obj_attr_u::hwloc_bridge_attr_s</a> hwloc_obj_attr_u::bridge</td>
92 </tr>
93 </table>
94 </div><div class="memdoc">
95
96 </div>
97 </div>
98 <a id="a23f553f3252c9d13f2338231cd354ea9"></a>
99 <h2 class="memtitle"><span class="permalink"><a href="#a23f553f3252c9d13f2338231cd354ea9">&#9670;&nbsp;</a></span>cache</h2>
100
101 <div class="memitem">
102 <div class="memproto">
103 <table class="memname">
104 <tr>
105 <td class="memname">struct <a class="el" href="a00260.html">hwloc_obj_attr_u::hwloc_cache_attr_s</a> hwloc_obj_attr_u::cache</td>
106 </tr>
107 </table>
108 </div><div class="memdoc">
109
110 </div>
111 </div>
112 <a id="a9eddbd69e34cd2ef6af6d2ac31b6eff3"></a>
113 <h2 class="memtitle"><span class="permalink"><a href="#a9eddbd69e34cd2ef6af6d2ac31b6eff3">&#9670;&nbsp;</a></span>group</h2>
114
115 <div class="memitem">
116 <div class="memproto">
117 <table class="memname">
118 <tr>
119 <td class="memname">struct <a class="el" href="a00264.html">hwloc_obj_attr_u::hwloc_group_attr_s</a> hwloc_obj_attr_u::group</td>
120 </tr>
121 </table>
122 </div><div class="memdoc">
123
124 </div>
125 </div>
126 <a id="ad066b9612802ffa01e132dc3a8e6cc86"></a>
127 <h2 class="memtitle"><span class="permalink"><a href="#ad066b9612802ffa01e132dc3a8e6cc86">&#9670;&nbsp;</a></span>numanode</h2>
128
129 <div class="memitem">
130 <div class="memproto">
131 <table class="memname">
132 <tr>
133 <td class="memname">struct <a class="el" href="a00252.html">hwloc_obj_attr_u::hwloc_numanode_attr_s</a> hwloc_obj_attr_u::numanode</td>
134 </tr>
135 </table>
136 </div><div class="memdoc">
137
138 </div>
139 </div>
140 <a id="aaf7a5c38b5185703ff18c46ad2761dcf"></a>
141 <h2 class="memtitle"><span class="permalink"><a href="#aaf7a5c38b5185703ff18c46ad2761dcf">&#9670;&nbsp;</a></span>osdev</h2>
142
143 <div class="memitem">
144 <div class="memproto">
145 <table class="memname">
146 <tr>
147 <td class="memname">struct <a class="el" href="a00288.html">hwloc_obj_attr_u::hwloc_osdev_attr_s</a> hwloc_obj_attr_u::osdev</td>
148 </tr>
149 </table>
150 </div><div class="memdoc">
151
152 </div>
153 </div>
154 <a id="a0b66da7ab072f7c016f8ed86701f5a7c"></a>
155 <h2 class="memtitle"><span class="permalink"><a href="#a0b66da7ab072f7c016f8ed86701f5a7c">&#9670;&nbsp;</a></span>pcidev</h2>
156
157 <div class="memitem">
158 <div class="memproto">
159 <table class="memname">
160 <tr>
161 <td class="memname">struct <a class="el" href="a00268.html">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a> hwloc_obj_attr_u::pcidev</td>
162 </tr>
163 </table>
164 </div><div class="memdoc">
165
166 </div>
167 </div>
168 <hr/>The documentation for this union was generated from the following file:<ul>
169 <li><a class="el" href="a00125_source.html">hwloc.h</a></li>
170 </ul>
171 </div><!-- contents -->
172 <!-- start footer part -->
173 <hr class="footer"/><address class="footer"><small>
174 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
175 </small></address>
176 </body>
177 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_obj Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#pub-attribs">Data Fields</a> </div>
43 <div class="headertitle">
44 <div class="title">hwloc_obj Struct Reference<div class="ingroups"><a class="el" href="a00194.html">Object Structure and Attributes</a></div></div> </div>
45 </div><!--header-->
46 <div class="contents">
47
48 <p><code>#include &lt;<a class="el" href="a00122_source.html">hwloc.h</a>&gt;</code></p>
49 <table class="memberdecls">
50 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
51 Data Fields</h2></td></tr>
52 <tr class="memitem:acc4f0803f244867e68fe0036800be5de"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#acc4f0803f244867e68fe0036800be5de">type</a></td></tr>
53 <tr class="separator:acc4f0803f244867e68fe0036800be5de"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:a5d4f97e76723a9ec8d38046f19e00d33"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#a5d4f97e76723a9ec8d38046f19e00d33">subtype</a></td></tr>
55 <tr class="separator:a5d4f97e76723a9ec8d38046f19e00d33"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:a61a7a80a68eaccbaaa28269e678c81a9"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a></td></tr>
57 <tr class="separator:a61a7a80a68eaccbaaa28269e678c81a9"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:abb709ec38f2970677e4e57d1d30be96d"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">name</a></td></tr>
59 <tr class="separator:abb709ec38f2970677e4e57d1d30be96d"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:a75603fc36c9284ba48ce814b772a58b6"><td class="memItemLeft" align="right" valign="top">hwloc_uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#a75603fc36c9284ba48ce814b772a58b6">total_memory</a></td></tr>
61 <tr class="separator:a75603fc36c9284ba48ce814b772a58b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:accd40e29f71f19e88db62ea3df02adc8"><td class="memItemLeft" align="right" valign="top">union <a class="el" href="a00254.html">hwloc_obj_attr_u</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a></td></tr>
63 <tr class="separator:accd40e29f71f19e88db62ea3df02adc8"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 <tr class="memitem:a4876fd165b4fff35521f07ebd85355ed"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">depth</a></td></tr>
65 <tr class="separator:a4876fd165b4fff35521f07ebd85355ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 <tr class="memitem:a0d07fb7b8935e137c94d75a3eb492ae9"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#a0d07fb7b8935e137c94d75a3eb492ae9">logical_index</a></td></tr>
67 <tr class="separator:a0d07fb7b8935e137c94d75a3eb492ae9"><td class="memSeparator" colspan="2">&#160;</td></tr>
68 <tr class="memitem:a85a788017457129589318b6c39451acf"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00250.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#a85a788017457129589318b6c39451acf">next_cousin</a></td></tr>
69 <tr class="separator:a85a788017457129589318b6c39451acf"><td class="memSeparator" colspan="2">&#160;</td></tr>
70 <tr class="memitem:ac715989f55ff5a0eb6be2969ee477ec0"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00250.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#ac715989f55ff5a0eb6be2969ee477ec0">prev_cousin</a></td></tr>
71 <tr class="separator:ac715989f55ff5a0eb6be2969ee477ec0"><td class="memSeparator" colspan="2">&#160;</td></tr>
72 <tr class="memitem:adc494f6aed939992be1c55cca5822900"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00250.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#adc494f6aed939992be1c55cca5822900">parent</a></td></tr>
73 <tr class="separator:adc494f6aed939992be1c55cca5822900"><td class="memSeparator" colspan="2">&#160;</td></tr>
74 <tr class="memitem:aaa6043eee6f55869933c1d974efd9acd"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#aaa6043eee6f55869933c1d974efd9acd">sibling_rank</a></td></tr>
75 <tr class="separator:aaa6043eee6f55869933c1d974efd9acd"><td class="memSeparator" colspan="2">&#160;</td></tr>
76 <tr class="memitem:a7f2343ed476fe4942e6fffd4cade1b40"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00250.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#a7f2343ed476fe4942e6fffd4cade1b40">next_sibling</a></td></tr>
77 <tr class="separator:a7f2343ed476fe4942e6fffd4cade1b40"><td class="memSeparator" colspan="2">&#160;</td></tr>
78 <tr class="memitem:a7b89e8c189876c0158a9282aaaf17f50"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00250.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#a7b89e8c189876c0158a9282aaaf17f50">prev_sibling</a></td></tr>
79 <tr class="separator:a7b89e8c189876c0158a9282aaaf17f50"><td class="memSeparator" colspan="2">&#160;</td></tr>
80 <tr class="memitem:a0f41a1d67dc6b661906f2217563637f3"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#a0f41a1d67dc6b661906f2217563637f3">symmetric_subtree</a></td></tr>
81 <tr class="separator:a0f41a1d67dc6b661906f2217563637f3"><td class="memSeparator" colspan="2">&#160;</td></tr>
82 <tr class="memitem:a67925e0f2c47f50408fbdb9bddd0790f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a></td></tr>
83 <tr class="separator:a67925e0f2c47f50408fbdb9bddd0790f"><td class="memSeparator" colspan="2">&#160;</td></tr>
84 <tr class="memitem:a91788a9da687beb7224cc1fd7b75208c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#a91788a9da687beb7224cc1fd7b75208c">complete_cpuset</a></td></tr>
85 <tr class="separator:a91788a9da687beb7224cc1fd7b75208c"><td class="memSeparator" colspan="2">&#160;</td></tr>
86 <tr class="memitem:a08f0d0e16c619a6e653526cbee4ffea3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00192.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#a08f0d0e16c619a6e653526cbee4ffea3">nodeset</a></td></tr>
87 <tr class="separator:a08f0d0e16c619a6e653526cbee4ffea3"><td class="memSeparator" colspan="2">&#160;</td></tr>
88 <tr class="memitem:ac38c4012127525ef74c5615c526f4c2e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00192.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#ac38c4012127525ef74c5615c526f4c2e">complete_nodeset</a></td></tr>
89 <tr class="separator:ac38c4012127525ef74c5615c526f4c2e"><td class="memSeparator" colspan="2">&#160;</td></tr>
90 <tr class="memitem:a8604654c38b7a720efae5025d3a96ee6"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00298.html">hwloc_info_s</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#a8604654c38b7a720efae5025d3a96ee6">infos</a></td></tr>
91 <tr class="separator:a8604654c38b7a720efae5025d3a96ee6"><td class="memSeparator" colspan="2">&#160;</td></tr>
92 <tr class="memitem:a9843acc28cfbba903b63ea14b137ff70"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#a9843acc28cfbba903b63ea14b137ff70">infos_count</a></td></tr>
93 <tr class="separator:a9843acc28cfbba903b63ea14b137ff70"><td class="memSeparator" colspan="2">&#160;</td></tr>
94 <tr class="memitem:a76fd3ac94401cf32dfccc3a3a8de68a5"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#a76fd3ac94401cf32dfccc3a3a8de68a5">userdata</a></td></tr>
95 <tr class="separator:a76fd3ac94401cf32dfccc3a3a8de68a5"><td class="memSeparator" colspan="2">&#160;</td></tr>
96 <tr class="memitem:a957984a355fa61c85f46605c336e7551"><td class="memItemLeft" align="right" valign="top">hwloc_uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#a957984a355fa61c85f46605c336e7551">gp_index</a></td></tr>
97 <tr class="separator:a957984a355fa61c85f46605c336e7551"><td class="memSeparator" colspan="2">&#160;</td></tr>
98 <tr><td colspan="2"><div class="groupHeader">List and array of normal children below this object (except Memory, I/O and Misc children).</div></td></tr>
99 <tr class="memitem:aac3f6da35c9b57599909a44ce2b716c1"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#aac3f6da35c9b57599909a44ce2b716c1">arity</a></td></tr>
100 <tr class="separator:aac3f6da35c9b57599909a44ce2b716c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
101 <tr class="memitem:a04d05403da37bfe17cd63b7c7dd07b1f"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00250.html">hwloc_obj</a> **&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#a04d05403da37bfe17cd63b7c7dd07b1f">children</a></td></tr>
102 <tr class="separator:a04d05403da37bfe17cd63b7c7dd07b1f"><td class="memSeparator" colspan="2">&#160;</td></tr>
103 <tr class="memitem:af51d08a0a79dba517c06c5afedc8d2dc"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00250.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#af51d08a0a79dba517c06c5afedc8d2dc">first_child</a></td></tr>
104 <tr class="separator:af51d08a0a79dba517c06c5afedc8d2dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
105 <tr class="memitem:a84bd65634dbc55f4158b74443a9bd04f"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00250.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#a84bd65634dbc55f4158b74443a9bd04f">last_child</a></td></tr>
106 <tr class="separator:a84bd65634dbc55f4158b74443a9bd04f"><td class="memSeparator" colspan="2">&#160;</td></tr>
107 <tr><td colspan="2"><div class="groupHeader">List of Memory children below this object.</div></td></tr>
108 <tr class="memitem:a6f834ea4dd26553cdea601d2fae6d3b7"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#a6f834ea4dd26553cdea601d2fae6d3b7">memory_arity</a></td></tr>
109 <tr class="separator:a6f834ea4dd26553cdea601d2fae6d3b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
110 <tr class="memitem:ac0e8200dba25b90d5954bd4ec61f97d3"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00250.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#ac0e8200dba25b90d5954bd4ec61f97d3">memory_first_child</a></td></tr>
111 <tr class="separator:ac0e8200dba25b90d5954bd4ec61f97d3"><td class="memSeparator" colspan="2">&#160;</td></tr>
112 <tr><td colspan="2"><div class="groupHeader">List of I/O children below this object.</div></td></tr>
113 <tr class="memitem:a7b3b29f0be377c7d2d52262019fc7d11"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#a7b3b29f0be377c7d2d52262019fc7d11">io_arity</a></td></tr>
114 <tr class="separator:a7b3b29f0be377c7d2d52262019fc7d11"><td class="memSeparator" colspan="2">&#160;</td></tr>
115 <tr class="memitem:a8d14c88e1ebc4ae67cc69f9e928558b3"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00250.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#a8d14c88e1ebc4ae67cc69f9e928558b3">io_first_child</a></td></tr>
116 <tr class="separator:a8d14c88e1ebc4ae67cc69f9e928558b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
117 <tr><td colspan="2"><div class="groupHeader">List of Misc children below this object.</div></td></tr>
118 <tr class="memitem:a2bb7862ce722d7ceda23cfa153da165a"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#a2bb7862ce722d7ceda23cfa153da165a">misc_arity</a></td></tr>
119 <tr class="separator:a2bb7862ce722d7ceda23cfa153da165a"><td class="memSeparator" colspan="2">&#160;</td></tr>
120 <tr class="memitem:a57812a313fe9b1a9500489f47c3011cc"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00250.html">hwloc_obj</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00250.html#a57812a313fe9b1a9500489f47c3011cc">misc_first_child</a></td></tr>
121 <tr class="separator:a57812a313fe9b1a9500489f47c3011cc"><td class="memSeparator" colspan="2">&#160;</td></tr>
122 </table>
123 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
124 <div class="textblock"><p>Structure of a topology object. </p>
125 <p>Applications must not modify any field except <code><a class="el" href="a00250.html#a76fd3ac94401cf32dfccc3a3a8de68a5" title="Application-given private data pointer, initialized to NULL, use it as you wish. See hwloc_topology_s...">hwloc_obj.userdata</a></code>. </p>
126 </div><h2 class="groupheader">Field Documentation</h2>
127 <a id="aac3f6da35c9b57599909a44ce2b716c1"></a>
128 <h2 class="memtitle"><span class="permalink"><a href="#aac3f6da35c9b57599909a44ce2b716c1">&#9670;&nbsp;</a></span>arity</h2>
129
130 <div class="memitem">
131 <div class="memproto">
132 <table class="memname">
133 <tr>
134 <td class="memname">unsigned hwloc_obj::arity</td>
135 </tr>
136 </table>
137 </div><div class="memdoc">
138
139 <p>Number of normal children. Memory, Misc and I/O children are not listed here but rather in their dedicated children list. </p>
140
141 </div>
142 </div>
143 <a id="accd40e29f71f19e88db62ea3df02adc8"></a>
144 <h2 class="memtitle"><span class="permalink"><a href="#accd40e29f71f19e88db62ea3df02adc8">&#9670;&nbsp;</a></span>attr</h2>
145
146 <div class="memitem">
147 <div class="memproto">
148 <table class="memname">
149 <tr>
150 <td class="memname">union <a class="el" href="a00254.html">hwloc_obj_attr_u</a>* hwloc_obj::attr</td>
151 </tr>
152 </table>
153 </div><div class="memdoc">
154
155 <p>Object type-specific Attributes, may be <code>NULL</code> if no attribute value was found. </p>
156
157 </div>
158 </div>
159 <a id="a04d05403da37bfe17cd63b7c7dd07b1f"></a>
160 <h2 class="memtitle"><span class="permalink"><a href="#a04d05403da37bfe17cd63b7c7dd07b1f">&#9670;&nbsp;</a></span>children</h2>
161
162 <div class="memitem">
163 <div class="memproto">
164 <table class="memname">
165 <tr>
166 <td class="memname">struct <a class="el" href="a00250.html">hwloc_obj</a>** hwloc_obj::children</td>
167 </tr>
168 </table>
169 </div><div class="memdoc">
170
171 <p>Normal children, <code>children</code>[0 .. arity -1]. </p>
172
173 </div>
174 </div>
175 <a id="a91788a9da687beb7224cc1fd7b75208c"></a>
176 <h2 class="memtitle"><span class="permalink"><a href="#a91788a9da687beb7224cc1fd7b75208c">&#9670;&nbsp;</a></span>complete_cpuset</h2>
177
178 <div class="memitem">
179 <div class="memproto">
180 <table class="memname">
181 <tr>
182 <td class="memname"><a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> hwloc_obj::complete_cpuset</td>
183 </tr>
184 </table>
185 </div><div class="memdoc">
186
187 <p>The complete CPU set of processors of this object,. </p>
188 <p>This may include not only the same as the cpuset field, but also some CPUs for which topology information is unknown or incomplete, some offlines CPUs, and the CPUs that are ignored when the <a class="el" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258" title="Detect the whole system, ignore reservations, include disallowed objects.">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a> flag is not set. Thus no corresponding PU object may be found in the topology, because the precise position is undefined. It is however known that it would be somewhere under this object.</p>
189 <dl class="section note"><dt>Note</dt><dd>Its value must not be changed, <a class="el" href="a00214.html#gae679434c1a5f41d3560a8a7e2c1b0dee" title="Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.">hwloc_bitmap_dup()</a> must be used instead. </dd></dl>
190
191 </div>
192 </div>
193 <a id="ac38c4012127525ef74c5615c526f4c2e"></a>
194 <h2 class="memtitle"><span class="permalink"><a href="#ac38c4012127525ef74c5615c526f4c2e">&#9670;&nbsp;</a></span>complete_nodeset</h2>
195
196 <div class="memitem">
197 <div class="memproto">
198 <table class="memname">
199 <tr>
200 <td class="memname"><a class="el" href="a00192.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a> hwloc_obj::complete_nodeset</td>
201 </tr>
202 </table>
203 </div><div class="memdoc">
204
205 <p>The complete NUMA node set of this object,. </p>
206 <p>This may include not only the same as the nodeset field, but also some NUMA nodes for which topology information is unknown or incomplete, some offlines nodes, and the nodes that are ignored when the <a class="el" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258" title="Detect the whole system, ignore reservations, include disallowed objects.">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a> flag is not set. Thus no corresponding NUMA node object may be found in the topology, because the precise position is undefined. It is however known that it would be somewhere under this object.</p>
207 <p>If there are no NUMA nodes in the machine, all the memory is close to this object, so only the first bit is set in <code>complete_nodeset</code>.</p>
208 <dl class="section note"><dt>Note</dt><dd>Its value must not be changed, <a class="el" href="a00214.html#gae679434c1a5f41d3560a8a7e2c1b0dee" title="Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.">hwloc_bitmap_dup()</a> must be used instead. </dd></dl>
209
210 </div>
211 </div>
212 <a id="a67925e0f2c47f50408fbdb9bddd0790f"></a>
213 <h2 class="memtitle"><span class="permalink"><a href="#a67925e0f2c47f50408fbdb9bddd0790f">&#9670;&nbsp;</a></span>cpuset</h2>
214
215 <div class="memitem">
216 <div class="memproto">
217 <table class="memname">
218 <tr>
219 <td class="memname"><a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> hwloc_obj::cpuset</td>
220 </tr>
221 </table>
222 </div><div class="memdoc">
223
224 <p>CPUs covered by this object. </p>
225 <p>This is the set of CPUs for which there are PU objects in the topology under this object, i.e. which are known to be physically contained in this object and known how (the children path between this object and the PU objects).</p>
226 <p>If the <a class="el" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258" title="Detect the whole system, ignore reservations, include disallowed objects.">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a> configuration flag is set, some of these CPUs may not be allowed for binding, see <a class="el" href="a00211.html#ga517d5d68ec9f24583d8933aab713be8e" title="Get allowed CPU set.">hwloc_topology_get_allowed_cpuset()</a>.</p>
227 <dl class="section note"><dt>Note</dt><dd>All objects have non-NULL CPU and node sets except Misc and I/O objects.</dd>
228 <dd>
229 Its value must not be changed, <a class="el" href="a00214.html#gae679434c1a5f41d3560a8a7e2c1b0dee" title="Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.">hwloc_bitmap_dup()</a> must be used instead. </dd></dl>
230
231 </div>
232 </div>
233 <a id="a4876fd165b4fff35521f07ebd85355ed"></a>
234 <h2 class="memtitle"><span class="permalink"><a href="#a4876fd165b4fff35521f07ebd85355ed">&#9670;&nbsp;</a></span>depth</h2>
235
236 <div class="memitem">
237 <div class="memproto">
238 <table class="memname">
239 <tr>
240 <td class="memname">int hwloc_obj::depth</td>
241 </tr>
242 </table>
243 </div><div class="memdoc">
244
245 <p>Vertical index in the hierarchy. </p>
246 <p>For normal objects, this is the depth of the horizontal level that contains this object and its cousins of the same type. If the topology is symmetric, this is equal to the parent depth plus one, and also equal to the number of parent/child links from the root object to here.</p>
247 <p>For special objects (NUMA nodes, I/O and Misc) that are not in the main tree, this is a special negative value that corresponds to their dedicated level, see <a class="el" href="a00196.html#ga8bec782e21be313750da70cf7428b374" title="Returns the depth of objects of type type.">hwloc_get_type_depth()</a> and <a class="el" href="a00196.html#gaf4e663cf42bbe20756b849c6293ef575">hwloc_get_type_depth_e</a>. Those special values can be passed to hwloc functions such <a class="el" href="a00196.html#ga1d5ceafe8130fe6e8657bf0bc666ba50" title="Returns the width of level at depth depth.">hwloc_get_nbobjs_by_depth()</a> as usual. </p>
248
249 </div>
250 </div>
251 <a id="af51d08a0a79dba517c06c5afedc8d2dc"></a>
252 <h2 class="memtitle"><span class="permalink"><a href="#af51d08a0a79dba517c06c5afedc8d2dc">&#9670;&nbsp;</a></span>first_child</h2>
253
254 <div class="memitem">
255 <div class="memproto">
256 <table class="memname">
257 <tr>
258 <td class="memname">struct <a class="el" href="a00250.html">hwloc_obj</a>* hwloc_obj::first_child</td>
259 </tr>
260 </table>
261 </div><div class="memdoc">
262
263 <p>First normal child. </p>
264
265 </div>
266 </div>
267 <a id="a957984a355fa61c85f46605c336e7551"></a>
268 <h2 class="memtitle"><span class="permalink"><a href="#a957984a355fa61c85f46605c336e7551">&#9670;&nbsp;</a></span>gp_index</h2>
269
270 <div class="memitem">
271 <div class="memproto">
272 <table class="memname">
273 <tr>
274 <td class="memname">hwloc_uint64_t hwloc_obj::gp_index</td>
275 </tr>
276 </table>
277 </div><div class="memdoc">
278
279 <p>Global persistent index. Generated by hwloc, unique across the topology (contrary to os_index) and persistent across topology changes (contrary to logical_index). Mostly used internally, but could also be used by application to identify objects. </p>
280
281 </div>
282 </div>
283 <a id="a8604654c38b7a720efae5025d3a96ee6"></a>
284 <h2 class="memtitle"><span class="permalink"><a href="#a8604654c38b7a720efae5025d3a96ee6">&#9670;&nbsp;</a></span>infos</h2>
285
286 <div class="memitem">
287 <div class="memproto">
288 <table class="memname">
289 <tr>
290 <td class="memname">struct <a class="el" href="a00298.html">hwloc_info_s</a>* hwloc_obj::infos</td>
291 </tr>
292 </table>
293 </div><div class="memdoc">
294
295 <p>Array of stringified info type=name. </p>
296
297 </div>
298 </div>
299 <a id="a9843acc28cfbba903b63ea14b137ff70"></a>
300 <h2 class="memtitle"><span class="permalink"><a href="#a9843acc28cfbba903b63ea14b137ff70">&#9670;&nbsp;</a></span>infos_count</h2>
301
302 <div class="memitem">
303 <div class="memproto">
304 <table class="memname">
305 <tr>
306 <td class="memname">unsigned hwloc_obj::infos_count</td>
307 </tr>
308 </table>
309 </div><div class="memdoc">
310
311 <p>Size of infos array. </p>
312
313 </div>
314 </div>
315 <a id="a7b3b29f0be377c7d2d52262019fc7d11"></a>
316 <h2 class="memtitle"><span class="permalink"><a href="#a7b3b29f0be377c7d2d52262019fc7d11">&#9670;&nbsp;</a></span>io_arity</h2>
317
318 <div class="memitem">
319 <div class="memproto">
320 <table class="memname">
321 <tr>
322 <td class="memname">unsigned hwloc_obj::io_arity</td>
323 </tr>
324 </table>
325 </div><div class="memdoc">
326
327 <p>Number of I/O children. These children are listed in <code>io_first_child</code>. </p>
328
329 </div>
330 </div>
331 <a id="a8d14c88e1ebc4ae67cc69f9e928558b3"></a>
332 <h2 class="memtitle"><span class="permalink"><a href="#a8d14c88e1ebc4ae67cc69f9e928558b3">&#9670;&nbsp;</a></span>io_first_child</h2>
333
334 <div class="memitem">
335 <div class="memproto">
336 <table class="memname">
337 <tr>
338 <td class="memname">struct <a class="el" href="a00250.html">hwloc_obj</a>* hwloc_obj::io_first_child</td>
339 </tr>
340 </table>
341 </div><div class="memdoc">
342
343 <p>First I/O child. Bridges, PCI and OS devices are listed here (<code>io_arity</code> and <code>io_first_child</code>) instead of in the normal children list. See also <a class="el" href="a00207.html#gac8a954ed37a4376097234c828068cbef" title="Check whether an object type is I/O.">hwloc_obj_type_is_io()</a>. </p>
344
345 </div>
346 </div>
347 <a id="a84bd65634dbc55f4158b74443a9bd04f"></a>
348 <h2 class="memtitle"><span class="permalink"><a href="#a84bd65634dbc55f4158b74443a9bd04f">&#9670;&nbsp;</a></span>last_child</h2>
349
350 <div class="memitem">
351 <div class="memproto">
352 <table class="memname">
353 <tr>
354 <td class="memname">struct <a class="el" href="a00250.html">hwloc_obj</a>* hwloc_obj::last_child</td>
355 </tr>
356 </table>
357 </div><div class="memdoc">
358
359 <p>Last normal child. </p>
360
361 </div>
362 </div>
363 <a id="a0d07fb7b8935e137c94d75a3eb492ae9"></a>
364 <h2 class="memtitle"><span class="permalink"><a href="#a0d07fb7b8935e137c94d75a3eb492ae9">&#9670;&nbsp;</a></span>logical_index</h2>
365
366 <div class="memitem">
367 <div class="memproto">
368 <table class="memname">
369 <tr>
370 <td class="memname">unsigned hwloc_obj::logical_index</td>
371 </tr>
372 </table>
373 </div><div class="memdoc">
374
375 <p>Horizontal index in the whole list of similar objects, hence guaranteed unique across the entire machine. Could be a "cousin_rank" since it's the rank within the "cousin" list below Note that this index may change when restricting the topology or when inserting a group. </p>
376
377 </div>
378 </div>
379 <a id="a6f834ea4dd26553cdea601d2fae6d3b7"></a>
380 <h2 class="memtitle"><span class="permalink"><a href="#a6f834ea4dd26553cdea601d2fae6d3b7">&#9670;&nbsp;</a></span>memory_arity</h2>
381
382 <div class="memitem">
383 <div class="memproto">
384 <table class="memname">
385 <tr>
386 <td class="memname">unsigned hwloc_obj::memory_arity</td>
387 </tr>
388 </table>
389 </div><div class="memdoc">
390
391 <p>Number of Memory children. These children are listed in <code>memory_first_child</code>. </p>
392
393 </div>
394 </div>
395 <a id="ac0e8200dba25b90d5954bd4ec61f97d3"></a>
396 <h2 class="memtitle"><span class="permalink"><a href="#ac0e8200dba25b90d5954bd4ec61f97d3">&#9670;&nbsp;</a></span>memory_first_child</h2>
397
398 <div class="memitem">
399 <div class="memproto">
400 <table class="memname">
401 <tr>
402 <td class="memname">struct <a class="el" href="a00250.html">hwloc_obj</a>* hwloc_obj::memory_first_child</td>
403 </tr>
404 </table>
405 </div><div class="memdoc">
406
407 <p>First Memory child. NUMA nodes and Memory-side caches are listed here (<code>memory_arity</code> and <code>memory_first_child</code>) instead of in the normal children list. See also <a class="el" href="a00207.html#ga1d074390c8a3dc3088d84f73fb73f966" title="Check whether an object type is Memory.">hwloc_obj_type_is_memory()</a>. </p>
408 <p>A memory hierarchy starts from a normal CPU-side object (e.g. Package) and ends with NUMA nodes as leaves. There might exist some memory-side caches between them in the middle of the memory subtree. </p>
409
410 </div>
411 </div>
412 <a id="a2bb7862ce722d7ceda23cfa153da165a"></a>
413 <h2 class="memtitle"><span class="permalink"><a href="#a2bb7862ce722d7ceda23cfa153da165a">&#9670;&nbsp;</a></span>misc_arity</h2>
414
415 <div class="memitem">
416 <div class="memproto">
417 <table class="memname">
418 <tr>
419 <td class="memname">unsigned hwloc_obj::misc_arity</td>
420 </tr>
421 </table>
422 </div><div class="memdoc">
423
424 <p>Number of Misc children. These children are listed in <code>misc_first_child</code>. </p>
425
426 </div>
427 </div>
428 <a id="a57812a313fe9b1a9500489f47c3011cc"></a>
429 <h2 class="memtitle"><span class="permalink"><a href="#a57812a313fe9b1a9500489f47c3011cc">&#9670;&nbsp;</a></span>misc_first_child</h2>
430
431 <div class="memitem">
432 <div class="memproto">
433 <table class="memname">
434 <tr>
435 <td class="memname">struct <a class="el" href="a00250.html">hwloc_obj</a>* hwloc_obj::misc_first_child</td>
436 </tr>
437 </table>
438 </div><div class="memdoc">
439
440 <p>First Misc child. Misc objects are listed here (<code>misc_arity</code> and <code>misc_first_child</code>) instead of in the normal children list. </p>
441
442 </div>
443 </div>
444 <a id="abb709ec38f2970677e4e57d1d30be96d"></a>
445 <h2 class="memtitle"><span class="permalink"><a href="#abb709ec38f2970677e4e57d1d30be96d">&#9670;&nbsp;</a></span>name</h2>
446
447 <div class="memitem">
448 <div class="memproto">
449 <table class="memname">
450 <tr>
451 <td class="memname">char* hwloc_obj::name</td>
452 </tr>
453 </table>
454 </div><div class="memdoc">
455
456 <p>Object-specific name if any. Mostly used for identifying OS devices and Misc objects where a name string is more useful than numerical indexes. </p>
457
458 </div>
459 </div>
460 <a id="a85a788017457129589318b6c39451acf"></a>
461 <h2 class="memtitle"><span class="permalink"><a href="#a85a788017457129589318b6c39451acf">&#9670;&nbsp;</a></span>next_cousin</h2>
462
463 <div class="memitem">
464 <div class="memproto">
465 <table class="memname">
466 <tr>
467 <td class="memname">struct <a class="el" href="a00250.html">hwloc_obj</a>* hwloc_obj::next_cousin</td>
468 </tr>
469 </table>
470 </div><div class="memdoc">
471
472 <p>Next object of same type and depth. </p>
473
474 </div>
475 </div>
476 <a id="a7f2343ed476fe4942e6fffd4cade1b40"></a>
477 <h2 class="memtitle"><span class="permalink"><a href="#a7f2343ed476fe4942e6fffd4cade1b40">&#9670;&nbsp;</a></span>next_sibling</h2>
478
479 <div class="memitem">
480 <div class="memproto">
481 <table class="memname">
482 <tr>
483 <td class="memname">struct <a class="el" href="a00250.html">hwloc_obj</a>* hwloc_obj::next_sibling</td>
484 </tr>
485 </table>
486 </div><div class="memdoc">
487
488 <p>Next object below the same parent (inside the same list of children). </p>
489
490 </div>
491 </div>
492 <a id="a08f0d0e16c619a6e653526cbee4ffea3"></a>
493 <h2 class="memtitle"><span class="permalink"><a href="#a08f0d0e16c619a6e653526cbee4ffea3">&#9670;&nbsp;</a></span>nodeset</h2>
494
495 <div class="memitem">
496 <div class="memproto">
497 <table class="memname">
498 <tr>
499 <td class="memname"><a class="el" href="a00192.html#ga37e35730fa7e775b5bb0afe893d6d508">hwloc_nodeset_t</a> hwloc_obj::nodeset</td>
500 </tr>
501 </table>
502 </div><div class="memdoc">
503
504 <p>NUMA nodes covered by this object or containing this object. </p>
505 <p>This is the set of NUMA nodes for which there are NUMA node objects in the topology under or above this object, i.e. which are known to be physically contained in this object or containing it and known how (the children path between this object and the NUMA node objects).</p>
506 <p>In the end, these nodes are those that are close to the current object. Function <a class="el" href="a00221.html#ga569e80c5be7ef27649b0ef5aa52ffcdc" title="Return an array of local NUMA nodes.">hwloc_get_local_numanode_objs()</a> may be used to list those NUMA nodes more precisely.</p>
507 <p>If the <a class="el" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258" title="Detect the whole system, ignore reservations, include disallowed objects.">HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</a> configuration flag is set, some of these nodes may not be allowed for allocation, see <a class="el" href="a00211.html#ga21a4d7237a11e76b912ed4524ab78cbd" title="Get allowed node set.">hwloc_topology_get_allowed_nodeset()</a>.</p>
508 <p>If there are no NUMA nodes in the machine, all the memory is close to this object, so only the first bit may be set in <code>nodeset</code>.</p>
509 <dl class="section note"><dt>Note</dt><dd>All objects have non-NULL CPU and node sets except Misc and I/O objects.</dd>
510 <dd>
511 Its value must not be changed, <a class="el" href="a00214.html#gae679434c1a5f41d3560a8a7e2c1b0dee" title="Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.">hwloc_bitmap_dup()</a> must be used instead. </dd></dl>
512
513 </div>
514 </div>
515 <a id="a61a7a80a68eaccbaaa28269e678c81a9"></a>
516 <h2 class="memtitle"><span class="permalink"><a href="#a61a7a80a68eaccbaaa28269e678c81a9">&#9670;&nbsp;</a></span>os_index</h2>
517
518 <div class="memitem">
519 <div class="memproto">
520 <table class="memname">
521 <tr>
522 <td class="memname">unsigned hwloc_obj::os_index</td>
523 </tr>
524 </table>
525 </div><div class="memdoc">
526
527 <p>OS-provided physical index number. It is not guaranteed unique across the entire machine, except for PUs and NUMA nodes. Set to HWLOC_UNKNOWN_INDEX if unknown or irrelevant for this object. </p>
528
529 </div>
530 </div>
531 <a id="adc494f6aed939992be1c55cca5822900"></a>
532 <h2 class="memtitle"><span class="permalink"><a href="#adc494f6aed939992be1c55cca5822900">&#9670;&nbsp;</a></span>parent</h2>
533
534 <div class="memitem">
535 <div class="memproto">
536 <table class="memname">
537 <tr>
538 <td class="memname">struct <a class="el" href="a00250.html">hwloc_obj</a>* hwloc_obj::parent</td>
539 </tr>
540 </table>
541 </div><div class="memdoc">
542
543 <p>Parent, <code>NULL</code> if root (Machine object) </p>
544
545 </div>
546 </div>
547 <a id="ac715989f55ff5a0eb6be2969ee477ec0"></a>
548 <h2 class="memtitle"><span class="permalink"><a href="#ac715989f55ff5a0eb6be2969ee477ec0">&#9670;&nbsp;</a></span>prev_cousin</h2>
549
550 <div class="memitem">
551 <div class="memproto">
552 <table class="memname">
553 <tr>
554 <td class="memname">struct <a class="el" href="a00250.html">hwloc_obj</a>* hwloc_obj::prev_cousin</td>
555 </tr>
556 </table>
557 </div><div class="memdoc">
558
559 <p>Previous object of same type and depth. </p>
560
561 </div>
562 </div>
563 <a id="a7b89e8c189876c0158a9282aaaf17f50"></a>
564 <h2 class="memtitle"><span class="permalink"><a href="#a7b89e8c189876c0158a9282aaaf17f50">&#9670;&nbsp;</a></span>prev_sibling</h2>
565
566 <div class="memitem">
567 <div class="memproto">
568 <table class="memname">
569 <tr>
570 <td class="memname">struct <a class="el" href="a00250.html">hwloc_obj</a>* hwloc_obj::prev_sibling</td>
571 </tr>
572 </table>
573 </div><div class="memdoc">
574
575 <p>Previous object below the same parent (inside the same list of children). </p>
576
577 </div>
578 </div>
579 <a id="aaa6043eee6f55869933c1d974efd9acd"></a>
580 <h2 class="memtitle"><span class="permalink"><a href="#aaa6043eee6f55869933c1d974efd9acd">&#9670;&nbsp;</a></span>sibling_rank</h2>
581
582 <div class="memitem">
583 <div class="memproto">
584 <table class="memname">
585 <tr>
586 <td class="memname">unsigned hwloc_obj::sibling_rank</td>
587 </tr>
588 </table>
589 </div><div class="memdoc">
590
591 <p>Index in parent's <code>children</code>[] array. Or the index in parent's Memory, I/O or Misc children list. </p>
592
593 </div>
594 </div>
595 <a id="a5d4f97e76723a9ec8d38046f19e00d33"></a>
596 <h2 class="memtitle"><span class="permalink"><a href="#a5d4f97e76723a9ec8d38046f19e00d33">&#9670;&nbsp;</a></span>subtype</h2>
597
598 <div class="memitem">
599 <div class="memproto">
600 <table class="memname">
601 <tr>
602 <td class="memname">char* hwloc_obj::subtype</td>
603 </tr>
604 </table>
605 </div><div class="memdoc">
606
607 <p>Subtype string to better describe the type field. </p>
608
609 </div>
610 </div>
611 <a id="a0f41a1d67dc6b661906f2217563637f3"></a>
612 <h2 class="memtitle"><span class="permalink"><a href="#a0f41a1d67dc6b661906f2217563637f3">&#9670;&nbsp;</a></span>symmetric_subtree</h2>
613
614 <div class="memitem">
615 <div class="memproto">
616 <table class="memname">
617 <tr>
618 <td class="memname">int hwloc_obj::symmetric_subtree</td>
619 </tr>
620 </table>
621 </div><div class="memdoc">
622
623 <p>Set if the subtree of normal objects below this object is symmetric, which means all normal children and their children have identical subtrees. </p>
624 <p>Memory, I/O and Misc children are ignored.</p>
625 <p>If set in the topology root object, lstopo may export the topology as a synthetic string. </p>
626
627 </div>
628 </div>
629 <a id="a75603fc36c9284ba48ce814b772a58b6"></a>
630 <h2 class="memtitle"><span class="permalink"><a href="#a75603fc36c9284ba48ce814b772a58b6">&#9670;&nbsp;</a></span>total_memory</h2>
631
632 <div class="memitem">
633 <div class="memproto">
634 <table class="memname">
635 <tr>
636 <td class="memname">hwloc_uint64_t hwloc_obj::total_memory</td>
637 </tr>
638 </table>
639 </div><div class="memdoc">
640
641 <p>Total memory (in bytes) in NUMA nodes below this object. </p>
642
643 </div>
644 </div>
645 <a id="acc4f0803f244867e68fe0036800be5de"></a>
646 <h2 class="memtitle"><span class="permalink"><a href="#acc4f0803f244867e68fe0036800be5de">&#9670;&nbsp;</a></span>type</h2>
647
648 <div class="memitem">
649 <div class="memproto">
650 <table class="memname">
651 <tr>
652 <td class="memname"><a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55">hwloc_obj_type_t</a> hwloc_obj::type</td>
653 </tr>
654 </table>
655 </div><div class="memdoc">
656
657 <p>Type of object. </p>
658
659 </div>
660 </div>
661 <a id="a76fd3ac94401cf32dfccc3a3a8de68a5"></a>
662 <h2 class="memtitle"><span class="permalink"><a href="#a76fd3ac94401cf32dfccc3a3a8de68a5">&#9670;&nbsp;</a></span>userdata</h2>
663
664 <div class="memitem">
665 <div class="memproto">
666 <table class="memname">
667 <tr>
668 <td class="memname">void* hwloc_obj::userdata</td>
669 </tr>
670 </table>
671 </div><div class="memdoc">
672
673 <p>Application-given private data pointer, initialized to <code>NULL</code>, use it as you wish. See <a class="el" href="a00215.html#ga9d6ff0f7a8dd45be9aa8575ef31978cc" title="Set the application-specific callback for exporting object userdata.">hwloc_topology_set_userdata_export_callback()</a> in <a class="el" href="a00131_source.html">hwloc/export.h</a> if you wish to export this field to XML. </p>
674
675 </div>
676 </div>
677 <hr/>The documentation for this struct was generated from the following file:<ul>
678 <li><a class="el" href="a00122_source.html">hwloc.h</a></li>
679 </ul>
680 </div><!-- contents -->
681 <!-- start footer part -->
682 <hr class="footer"/><address class="footer"><small>
683 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
684 </small></address>
685 </body>
686 </html>
+0
-128
doc/doxygen-doc/html/a00252.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_obj_attr_u::hwloc_numanode_attr_s Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 <div id="nav-path" class="navpath">
40 <ul>
41 <li class="navelem"><a class="el" href="a00248.html">hwloc_obj_attr_u</a></li><li class="navelem"><a class="el" href="a00252.html">hwloc_numanode_attr_s</a></li> </ul>
42 </div>
43 </div><!-- top -->
44 <div class="header">
45 <div class="summary">
46 <a href="#nested-classes">Data Structures</a> &#124;
47 <a href="#pub-attribs">Data Fields</a> </div>
48 <div class="headertitle">
49 <div class="title">hwloc_obj_attr_u::hwloc_numanode_attr_s Struct Reference</div> </div>
50 </div><!--header-->
51 <div class="contents">
52
53 <p><code>#include &lt;<a class="el" href="a00125_source.html">hwloc.h</a>&gt;</code></p>
54 <table class="memberdecls">
55 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
56 Data Structures</h2></td></tr>
57 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00256.html">hwloc_memory_page_type_s</a></td></tr>
58 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
59 </table><table class="memberdecls">
60 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
61 Data Fields</h2></td></tr>
62 <tr class="memitem:a6703cbf2afbf63c9d60c5ff4dc0c73aa"><td class="memItemLeft" align="right" valign="top">hwloc_uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00252.html#a6703cbf2afbf63c9d60c5ff4dc0c73aa">local_memory</a></td></tr>
63 <tr class="separator:a6703cbf2afbf63c9d60c5ff4dc0c73aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 <tr class="memitem:a513078122d403904e16723d30f583cb2"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00252.html#a513078122d403904e16723d30f583cb2">page_types_len</a></td></tr>
65 <tr class="separator:a513078122d403904e16723d30f583cb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 <tr class="memitem:a7e53c5024da2d7741a5cc1e7016bb8d2"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00256.html">hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00252.html#a7e53c5024da2d7741a5cc1e7016bb8d2">page_types</a></td></tr>
67 <tr class="separator:a7e53c5024da2d7741a5cc1e7016bb8d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
68 </table>
69 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
70 <div class="textblock"><p>NUMA node-specific Object Attributes. </p>
71 </div><h2 class="groupheader">Field Documentation</h2>
72 <a id="a6703cbf2afbf63c9d60c5ff4dc0c73aa"></a>
73 <h2 class="memtitle"><span class="permalink"><a href="#a6703cbf2afbf63c9d60c5ff4dc0c73aa">&#9670;&nbsp;</a></span>local_memory</h2>
74
75 <div class="memitem">
76 <div class="memproto">
77 <table class="memname">
78 <tr>
79 <td class="memname">hwloc_uint64_t hwloc_obj_attr_u::hwloc_numanode_attr_s::local_memory</td>
80 </tr>
81 </table>
82 </div><div class="memdoc">
83
84 <p>Local memory (in bytes) </p>
85
86 </div>
87 </div>
88 <a id="a7e53c5024da2d7741a5cc1e7016bb8d2"></a>
89 <h2 class="memtitle"><span class="permalink"><a href="#a7e53c5024da2d7741a5cc1e7016bb8d2">&#9670;&nbsp;</a></span>page_types</h2>
90
91 <div class="memitem">
92 <div class="memproto">
93 <table class="memname">
94 <tr>
95 <td class="memname">struct <a class="el" href="a00256.html">hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s</a> * hwloc_obj_attr_u::hwloc_numanode_attr_s::page_types</td>
96 </tr>
97 </table>
98 </div><div class="memdoc">
99
100 </div>
101 </div>
102 <a id="a513078122d403904e16723d30f583cb2"></a>
103 <h2 class="memtitle"><span class="permalink"><a href="#a513078122d403904e16723d30f583cb2">&#9670;&nbsp;</a></span>page_types_len</h2>
104
105 <div class="memitem">
106 <div class="memproto">
107 <table class="memname">
108 <tr>
109 <td class="memname">unsigned hwloc_obj_attr_u::hwloc_numanode_attr_s::page_types_len</td>
110 </tr>
111 </table>
112 </div><div class="memdoc">
113
114 <p>Size of array <code>page_types</code>. </p>
115
116 </div>
117 </div>
118 <hr/>The documentation for this struct was generated from the following file:<ul>
119 <li><a class="el" href="a00125_source.html">hwloc.h</a></li>
120 </ul>
121 </div><!-- contents -->
122 <!-- start footer part -->
123 <hr class="footer"/><address class="footer"><small>
124 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
125 </small></address>
126 </body>
127 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_obj_attr_u Union Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#nested-classes">Data Structures</a> &#124;
43 <a href="#pub-attribs">Data Fields</a> </div>
44 <div class="headertitle">
45 <div class="title">hwloc_obj_attr_u Union Reference<div class="ingroups"><a class="el" href="a00194.html">Object Structure and Attributes</a></div></div> </div>
46 </div><!--header-->
47 <div class="contents">
48
49 <p><code>#include &lt;<a class="el" href="a00122_source.html">hwloc.h</a>&gt;</code></p>
50 <table class="memberdecls">
51 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
52 Data Structures</h2></td></tr>
53 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00278.html">hwloc_bridge_attr_s</a></td></tr>
54 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
55 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00266.html">hwloc_cache_attr_s</a></td></tr>
56 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
57 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00270.html">hwloc_group_attr_s</a></td></tr>
58 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
59 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00258.html">hwloc_numanode_attr_s</a></td></tr>
60 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
61 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00294.html">hwloc_osdev_attr_s</a></td></tr>
62 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
63 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00274.html">hwloc_pcidev_attr_s</a></td></tr>
64 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
65 </table><table class="memberdecls">
66 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
67 Data Fields</h2></td></tr>
68 <tr class="memitem:ad066b9612802ffa01e132dc3a8e6cc86"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00258.html">hwloc_obj_attr_u::hwloc_numanode_attr_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html#ad066b9612802ffa01e132dc3a8e6cc86">numanode</a></td></tr>
69 <tr class="separator:ad066b9612802ffa01e132dc3a8e6cc86"><td class="memSeparator" colspan="2">&#160;</td></tr>
70 <tr class="memitem:a23f553f3252c9d13f2338231cd354ea9"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00266.html">hwloc_obj_attr_u::hwloc_cache_attr_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html#a23f553f3252c9d13f2338231cd354ea9">cache</a></td></tr>
71 <tr class="separator:a23f553f3252c9d13f2338231cd354ea9"><td class="memSeparator" colspan="2">&#160;</td></tr>
72 <tr class="memitem:a9eddbd69e34cd2ef6af6d2ac31b6eff3"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00270.html">hwloc_obj_attr_u::hwloc_group_attr_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html#a9eddbd69e34cd2ef6af6d2ac31b6eff3">group</a></td></tr>
73 <tr class="separator:a9eddbd69e34cd2ef6af6d2ac31b6eff3"><td class="memSeparator" colspan="2">&#160;</td></tr>
74 <tr class="memitem:a0b66da7ab072f7c016f8ed86701f5a7c"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00274.html">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">pcidev</a></td></tr>
75 <tr class="separator:a0b66da7ab072f7c016f8ed86701f5a7c"><td class="memSeparator" colspan="2">&#160;</td></tr>
76 <tr class="memitem:a207e6359497b7116d6f4baa9e8bbeb43"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00278.html">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html#a207e6359497b7116d6f4baa9e8bbeb43">bridge</a></td></tr>
77 <tr class="separator:a207e6359497b7116d6f4baa9e8bbeb43"><td class="memSeparator" colspan="2">&#160;</td></tr>
78 <tr class="memitem:aaf7a5c38b5185703ff18c46ad2761dcf"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00294.html">hwloc_obj_attr_u::hwloc_osdev_attr_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00254.html#aaf7a5c38b5185703ff18c46ad2761dcf">osdev</a></td></tr>
79 <tr class="separator:aaf7a5c38b5185703ff18c46ad2761dcf"><td class="memSeparator" colspan="2">&#160;</td></tr>
80 </table>
81 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
82 <div class="textblock"><p>Object type-specific Attributes. </p>
83 </div><h2 class="groupheader">Field Documentation</h2>
84 <a id="a207e6359497b7116d6f4baa9e8bbeb43"></a>
85 <h2 class="memtitle"><span class="permalink"><a href="#a207e6359497b7116d6f4baa9e8bbeb43">&#9670;&nbsp;</a></span>bridge</h2>
86
87 <div class="memitem">
88 <div class="memproto">
89 <table class="memname">
90 <tr>
91 <td class="memname">struct <a class="el" href="a00278.html">hwloc_obj_attr_u::hwloc_bridge_attr_s</a> hwloc_obj_attr_u::bridge</td>
92 </tr>
93 </table>
94 </div><div class="memdoc">
95
96 </div>
97 </div>
98 <a id="a23f553f3252c9d13f2338231cd354ea9"></a>
99 <h2 class="memtitle"><span class="permalink"><a href="#a23f553f3252c9d13f2338231cd354ea9">&#9670;&nbsp;</a></span>cache</h2>
100
101 <div class="memitem">
102 <div class="memproto">
103 <table class="memname">
104 <tr>
105 <td class="memname">struct <a class="el" href="a00266.html">hwloc_obj_attr_u::hwloc_cache_attr_s</a> hwloc_obj_attr_u::cache</td>
106 </tr>
107 </table>
108 </div><div class="memdoc">
109
110 </div>
111 </div>
112 <a id="a9eddbd69e34cd2ef6af6d2ac31b6eff3"></a>
113 <h2 class="memtitle"><span class="permalink"><a href="#a9eddbd69e34cd2ef6af6d2ac31b6eff3">&#9670;&nbsp;</a></span>group</h2>
114
115 <div class="memitem">
116 <div class="memproto">
117 <table class="memname">
118 <tr>
119 <td class="memname">struct <a class="el" href="a00270.html">hwloc_obj_attr_u::hwloc_group_attr_s</a> hwloc_obj_attr_u::group</td>
120 </tr>
121 </table>
122 </div><div class="memdoc">
123
124 </div>
125 </div>
126 <a id="ad066b9612802ffa01e132dc3a8e6cc86"></a>
127 <h2 class="memtitle"><span class="permalink"><a href="#ad066b9612802ffa01e132dc3a8e6cc86">&#9670;&nbsp;</a></span>numanode</h2>
128
129 <div class="memitem">
130 <div class="memproto">
131 <table class="memname">
132 <tr>
133 <td class="memname">struct <a class="el" href="a00258.html">hwloc_obj_attr_u::hwloc_numanode_attr_s</a> hwloc_obj_attr_u::numanode</td>
134 </tr>
135 </table>
136 </div><div class="memdoc">
137
138 </div>
139 </div>
140 <a id="aaf7a5c38b5185703ff18c46ad2761dcf"></a>
141 <h2 class="memtitle"><span class="permalink"><a href="#aaf7a5c38b5185703ff18c46ad2761dcf">&#9670;&nbsp;</a></span>osdev</h2>
142
143 <div class="memitem">
144 <div class="memproto">
145 <table class="memname">
146 <tr>
147 <td class="memname">struct <a class="el" href="a00294.html">hwloc_obj_attr_u::hwloc_osdev_attr_s</a> hwloc_obj_attr_u::osdev</td>
148 </tr>
149 </table>
150 </div><div class="memdoc">
151
152 </div>
153 </div>
154 <a id="a0b66da7ab072f7c016f8ed86701f5a7c"></a>
155 <h2 class="memtitle"><span class="permalink"><a href="#a0b66da7ab072f7c016f8ed86701f5a7c">&#9670;&nbsp;</a></span>pcidev</h2>
156
157 <div class="memitem">
158 <div class="memproto">
159 <table class="memname">
160 <tr>
161 <td class="memname">struct <a class="el" href="a00274.html">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a> hwloc_obj_attr_u::pcidev</td>
162 </tr>
163 </table>
164 </div><div class="memdoc">
165
166 </div>
167 </div>
168 <hr/>The documentation for this union was generated from the following file:<ul>
169 <li><a class="el" href="a00122_source.html">hwloc.h</a></li>
170 </ul>
171 </div><!-- contents -->
172 <!-- start footer part -->
173 <hr class="footer"/><address class="footer"><small>
174 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
175 </small></address>
176 </body>
177 </html>
+0
-107
doc/doxygen-doc/html/a00256.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 <div id="nav-path" class="navpath">
40 <ul>
41 <li class="navelem"><a class="el" href="a00248.html">hwloc_obj_attr_u</a></li><li class="navelem"><a class="el" href="a00252.html">hwloc_numanode_attr_s</a></li><li class="navelem"><a class="el" href="a00256.html">hwloc_memory_page_type_s</a></li> </ul>
42 </div>
43 </div><!-- top -->
44 <div class="header">
45 <div class="summary">
46 <a href="#pub-attribs">Data Fields</a> </div>
47 <div class="headertitle">
48 <div class="title">hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s Struct Reference</div> </div>
49 </div><!--header-->
50 <div class="contents">
51
52 <p><code>#include &lt;<a class="el" href="a00125_source.html">hwloc.h</a>&gt;</code></p>
53 <table class="memberdecls">
54 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
55 Data Fields</h2></td></tr>
56 <tr class="memitem:a8ea7ebe9d91c7378bba03da57efc25cb"><td class="memItemLeft" align="right" valign="top">hwloc_uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00256.html#a8ea7ebe9d91c7378bba03da57efc25cb">size</a></td></tr>
57 <tr class="separator:a8ea7ebe9d91c7378bba03da57efc25cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:a98514e37d57a325b78e21ffd8d7419e0"><td class="memItemLeft" align="right" valign="top">hwloc_uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00256.html#a98514e37d57a325b78e21ffd8d7419e0">count</a></td></tr>
59 <tr class="separator:a98514e37d57a325b78e21ffd8d7419e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 </table>
61 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
62 <div class="textblock"><p>Array of local memory page types, <code>NULL</code> if no local memory and <code>page_types</code> is 0. </p>
63 <p>The array is sorted by increasing <code>size</code> fields. It contains <code>page_types_len</code> slots. </p>
64 </div><h2 class="groupheader">Field Documentation</h2>
65 <a id="a98514e37d57a325b78e21ffd8d7419e0"></a>
66 <h2 class="memtitle"><span class="permalink"><a href="#a98514e37d57a325b78e21ffd8d7419e0">&#9670;&nbsp;</a></span>count</h2>
67
68 <div class="memitem">
69 <div class="memproto">
70 <table class="memname">
71 <tr>
72 <td class="memname">hwloc_uint64_t hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s::count</td>
73 </tr>
74 </table>
75 </div><div class="memdoc">
76
77 <p>Number of pages of this size. </p>
78
79 </div>
80 </div>
81 <a id="a8ea7ebe9d91c7378bba03da57efc25cb"></a>
82 <h2 class="memtitle"><span class="permalink"><a href="#a8ea7ebe9d91c7378bba03da57efc25cb">&#9670;&nbsp;</a></span>size</h2>
83
84 <div class="memitem">
85 <div class="memproto">
86 <table class="memname">
87 <tr>
88 <td class="memname">hwloc_uint64_t hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s::size</td>
89 </tr>
90 </table>
91 </div><div class="memdoc">
92
93 <p>Size of pages. </p>
94
95 </div>
96 </div>
97 <hr/>The documentation for this struct was generated from the following file:<ul>
98 <li><a class="el" href="a00125_source.html">hwloc.h</a></li>
99 </ul>
100 </div><!-- contents -->
101 <!-- start footer part -->
102 <hr class="footer"/><address class="footer"><small>
103 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
104 </small></address>
105 </body>
106 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_obj_attr_u::hwloc_numanode_attr_s Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 <div id="nav-path" class="navpath">
40 <ul>
41 <li class="navelem"><a class="el" href="a00254.html">hwloc_obj_attr_u</a></li><li class="navelem"><a class="el" href="a00258.html">hwloc_numanode_attr_s</a></li> </ul>
42 </div>
43 </div><!-- top -->
44 <div class="header">
45 <div class="summary">
46 <a href="#nested-classes">Data Structures</a> &#124;
47 <a href="#pub-attribs">Data Fields</a> </div>
48 <div class="headertitle">
49 <div class="title">hwloc_obj_attr_u::hwloc_numanode_attr_s Struct Reference</div> </div>
50 </div><!--header-->
51 <div class="contents">
52
53 <p><code>#include &lt;<a class="el" href="a00122_source.html">hwloc.h</a>&gt;</code></p>
54 <table class="memberdecls">
55 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
56 Data Structures</h2></td></tr>
57 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00262.html">hwloc_memory_page_type_s</a></td></tr>
58 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
59 </table><table class="memberdecls">
60 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
61 Data Fields</h2></td></tr>
62 <tr class="memitem:a6703cbf2afbf63c9d60c5ff4dc0c73aa"><td class="memItemLeft" align="right" valign="top">hwloc_uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00258.html#a6703cbf2afbf63c9d60c5ff4dc0c73aa">local_memory</a></td></tr>
63 <tr class="separator:a6703cbf2afbf63c9d60c5ff4dc0c73aa"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 <tr class="memitem:a513078122d403904e16723d30f583cb2"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00258.html#a513078122d403904e16723d30f583cb2">page_types_len</a></td></tr>
65 <tr class="separator:a513078122d403904e16723d30f583cb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 <tr class="memitem:a7e53c5024da2d7741a5cc1e7016bb8d2"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00262.html">hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00258.html#a7e53c5024da2d7741a5cc1e7016bb8d2">page_types</a></td></tr>
67 <tr class="separator:a7e53c5024da2d7741a5cc1e7016bb8d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
68 </table>
69 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
70 <div class="textblock"><p>NUMA node-specific Object Attributes. </p>
71 </div><h2 class="groupheader">Field Documentation</h2>
72 <a id="a6703cbf2afbf63c9d60c5ff4dc0c73aa"></a>
73 <h2 class="memtitle"><span class="permalink"><a href="#a6703cbf2afbf63c9d60c5ff4dc0c73aa">&#9670;&nbsp;</a></span>local_memory</h2>
74
75 <div class="memitem">
76 <div class="memproto">
77 <table class="memname">
78 <tr>
79 <td class="memname">hwloc_uint64_t hwloc_obj_attr_u::hwloc_numanode_attr_s::local_memory</td>
80 </tr>
81 </table>
82 </div><div class="memdoc">
83
84 <p>Local memory (in bytes) </p>
85
86 </div>
87 </div>
88 <a id="a7e53c5024da2d7741a5cc1e7016bb8d2"></a>
89 <h2 class="memtitle"><span class="permalink"><a href="#a7e53c5024da2d7741a5cc1e7016bb8d2">&#9670;&nbsp;</a></span>page_types</h2>
90
91 <div class="memitem">
92 <div class="memproto">
93 <table class="memname">
94 <tr>
95 <td class="memname">struct <a class="el" href="a00262.html">hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s</a> * hwloc_obj_attr_u::hwloc_numanode_attr_s::page_types</td>
96 </tr>
97 </table>
98 </div><div class="memdoc">
99
100 </div>
101 </div>
102 <a id="a513078122d403904e16723d30f583cb2"></a>
103 <h2 class="memtitle"><span class="permalink"><a href="#a513078122d403904e16723d30f583cb2">&#9670;&nbsp;</a></span>page_types_len</h2>
104
105 <div class="memitem">
106 <div class="memproto">
107 <table class="memname">
108 <tr>
109 <td class="memname">unsigned hwloc_obj_attr_u::hwloc_numanode_attr_s::page_types_len</td>
110 </tr>
111 </table>
112 </div><div class="memdoc">
113
114 <p>Size of array <code>page_types</code>. </p>
115
116 </div>
117 </div>
118 <hr/>The documentation for this struct was generated from the following file:<ul>
119 <li><a class="el" href="a00122_source.html">hwloc.h</a></li>
120 </ul>
121 </div><!-- contents -->
122 <!-- start footer part -->
123 <hr class="footer"/><address class="footer"><small>
124 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
125 </small></address>
126 </body>
127 </html>
+0
-160
doc/doxygen-doc/html/a00260.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_obj_attr_u::hwloc_cache_attr_s Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 <div id="nav-path" class="navpath">
40 <ul>
41 <li class="navelem"><a class="el" href="a00248.html">hwloc_obj_attr_u</a></li><li class="navelem"><a class="el" href="a00260.html">hwloc_cache_attr_s</a></li> </ul>
42 </div>
43 </div><!-- top -->
44 <div class="header">
45 <div class="summary">
46 <a href="#pub-attribs">Data Fields</a> </div>
47 <div class="headertitle">
48 <div class="title">hwloc_obj_attr_u::hwloc_cache_attr_s Struct Reference</div> </div>
49 </div><!--header-->
50 <div class="contents">
51
52 <p><code>#include &lt;<a class="el" href="a00125_source.html">hwloc.h</a>&gt;</code></p>
53 <table class="memberdecls">
54 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
55 Data Fields</h2></td></tr>
56 <tr class="memitem:abe5e788943ed04302976740c829674c0"><td class="memItemLeft" align="right" valign="top">hwloc_uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00260.html#abe5e788943ed04302976740c829674c0">size</a></td></tr>
57 <tr class="separator:abe5e788943ed04302976740c829674c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:a5c8f7f39193736c2187ed626940835d5"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00260.html#a5c8f7f39193736c2187ed626940835d5">depth</a></td></tr>
59 <tr class="separator:a5c8f7f39193736c2187ed626940835d5"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:a801e8a668e28caf06c8b88e9ae5c10db"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00260.html#a801e8a668e28caf06c8b88e9ae5c10db">linesize</a></td></tr>
61 <tr class="separator:a801e8a668e28caf06c8b88e9ae5c10db"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:ad06525e474d1e2d1423ed71bb998592d"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00260.html#ad06525e474d1e2d1423ed71bb998592d">associativity</a></td></tr>
63 <tr class="separator:ad06525e474d1e2d1423ed71bb998592d"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 <tr class="memitem:ad8edc8ded2b7a70d6abbc874801930f4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00190.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00260.html#ad8edc8ded2b7a70d6abbc874801930f4">type</a></td></tr>
65 <tr class="separator:ad8edc8ded2b7a70d6abbc874801930f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 </table>
67 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
68 <div class="textblock"><p>Cache-specific Object Attributes. </p>
69 </div><h2 class="groupheader">Field Documentation</h2>
70 <a id="ad06525e474d1e2d1423ed71bb998592d"></a>
71 <h2 class="memtitle"><span class="permalink"><a href="#ad06525e474d1e2d1423ed71bb998592d">&#9670;&nbsp;</a></span>associativity</h2>
72
73 <div class="memitem">
74 <div class="memproto">
75 <table class="memname">
76 <tr>
77 <td class="memname">int hwloc_obj_attr_u::hwloc_cache_attr_s::associativity</td>
78 </tr>
79 </table>
80 </div><div class="memdoc">
81
82 <p>Ways of associativity, -1 if fully associative, 0 if unknown. </p>
83
84 </div>
85 </div>
86 <a id="a5c8f7f39193736c2187ed626940835d5"></a>
87 <h2 class="memtitle"><span class="permalink"><a href="#a5c8f7f39193736c2187ed626940835d5">&#9670;&nbsp;</a></span>depth</h2>
88
89 <div class="memitem">
90 <div class="memproto">
91 <table class="memname">
92 <tr>
93 <td class="memname">unsigned hwloc_obj_attr_u::hwloc_cache_attr_s::depth</td>
94 </tr>
95 </table>
96 </div><div class="memdoc">
97
98 <p>Depth of cache (e.g., L1, L2, ...etc.) </p>
99
100 </div>
101 </div>
102 <a id="a801e8a668e28caf06c8b88e9ae5c10db"></a>
103 <h2 class="memtitle"><span class="permalink"><a href="#a801e8a668e28caf06c8b88e9ae5c10db">&#9670;&nbsp;</a></span>linesize</h2>
104
105 <div class="memitem">
106 <div class="memproto">
107 <table class="memname">
108 <tr>
109 <td class="memname">unsigned hwloc_obj_attr_u::hwloc_cache_attr_s::linesize</td>
110 </tr>
111 </table>
112 </div><div class="memdoc">
113
114 <p>Cache-line size in bytes. 0 if unknown. </p>
115
116 </div>
117 </div>
118 <a id="abe5e788943ed04302976740c829674c0"></a>
119 <h2 class="memtitle"><span class="permalink"><a href="#abe5e788943ed04302976740c829674c0">&#9670;&nbsp;</a></span>size</h2>
120
121 <div class="memitem">
122 <div class="memproto">
123 <table class="memname">
124 <tr>
125 <td class="memname">hwloc_uint64_t hwloc_obj_attr_u::hwloc_cache_attr_s::size</td>
126 </tr>
127 </table>
128 </div><div class="memdoc">
129
130 <p>Size of cache in bytes. </p>
131
132 </div>
133 </div>
134 <a id="ad8edc8ded2b7a70d6abbc874801930f4"></a>
135 <h2 class="memtitle"><span class="permalink"><a href="#ad8edc8ded2b7a70d6abbc874801930f4">&#9670;&nbsp;</a></span>type</h2>
136
137 <div class="memitem">
138 <div class="memproto">
139 <table class="memname">
140 <tr>
141 <td class="memname"><a class="el" href="a00190.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a> hwloc_obj_attr_u::hwloc_cache_attr_s::type</td>
142 </tr>
143 </table>
144 </div><div class="memdoc">
145
146 <p>Cache type. </p>
147
148 </div>
149 </div>
150 <hr/>The documentation for this struct was generated from the following file:<ul>
151 <li><a class="el" href="a00125_source.html">hwloc.h</a></li>
152 </ul>
153 </div><!-- contents -->
154 <!-- start footer part -->
155 <hr class="footer"/><address class="footer"><small>
156 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
157 </small></address>
158 </body>
159 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 <div id="nav-path" class="navpath">
40 <ul>
41 <li class="navelem"><a class="el" href="a00254.html">hwloc_obj_attr_u</a></li><li class="navelem"><a class="el" href="a00258.html">hwloc_numanode_attr_s</a></li><li class="navelem"><a class="el" href="a00262.html">hwloc_memory_page_type_s</a></li> </ul>
42 </div>
43 </div><!-- top -->
44 <div class="header">
45 <div class="summary">
46 <a href="#pub-attribs">Data Fields</a> </div>
47 <div class="headertitle">
48 <div class="title">hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s Struct Reference</div> </div>
49 </div><!--header-->
50 <div class="contents">
51
52 <p><code>#include &lt;<a class="el" href="a00122_source.html">hwloc.h</a>&gt;</code></p>
53 <table class="memberdecls">
54 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
55 Data Fields</h2></td></tr>
56 <tr class="memitem:a8ea7ebe9d91c7378bba03da57efc25cb"><td class="memItemLeft" align="right" valign="top">hwloc_uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00262.html#a8ea7ebe9d91c7378bba03da57efc25cb">size</a></td></tr>
57 <tr class="separator:a8ea7ebe9d91c7378bba03da57efc25cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:a98514e37d57a325b78e21ffd8d7419e0"><td class="memItemLeft" align="right" valign="top">hwloc_uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00262.html#a98514e37d57a325b78e21ffd8d7419e0">count</a></td></tr>
59 <tr class="separator:a98514e37d57a325b78e21ffd8d7419e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 </table>
61 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
62 <div class="textblock"><p>Array of local memory page types, <code>NULL</code> if no local memory and <code>page_types</code> is 0. </p>
63 <p>The array is sorted by increasing <code>size</code> fields. It contains <code>page_types_len</code> slots. </p>
64 </div><h2 class="groupheader">Field Documentation</h2>
65 <a id="a98514e37d57a325b78e21ffd8d7419e0"></a>
66 <h2 class="memtitle"><span class="permalink"><a href="#a98514e37d57a325b78e21ffd8d7419e0">&#9670;&nbsp;</a></span>count</h2>
67
68 <div class="memitem">
69 <div class="memproto">
70 <table class="memname">
71 <tr>
72 <td class="memname">hwloc_uint64_t hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s::count</td>
73 </tr>
74 </table>
75 </div><div class="memdoc">
76
77 <p>Number of pages of this size. </p>
78
79 </div>
80 </div>
81 <a id="a8ea7ebe9d91c7378bba03da57efc25cb"></a>
82 <h2 class="memtitle"><span class="permalink"><a href="#a8ea7ebe9d91c7378bba03da57efc25cb">&#9670;&nbsp;</a></span>size</h2>
83
84 <div class="memitem">
85 <div class="memproto">
86 <table class="memname">
87 <tr>
88 <td class="memname">hwloc_uint64_t hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s::size</td>
89 </tr>
90 </table>
91 </div><div class="memdoc">
92
93 <p>Size of pages. </p>
94
95 </div>
96 </div>
97 <hr/>The documentation for this struct was generated from the following file:<ul>
98 <li><a class="el" href="a00122_source.html">hwloc.h</a></li>
99 </ul>
100 </div><!-- contents -->
101 <!-- start footer part -->
102 <hr class="footer"/><address class="footer"><small>
103 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
104 </small></address>
105 </body>
106 </html>
+0
-142
doc/doxygen-doc/html/a00264.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_obj_attr_u::hwloc_group_attr_s Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 <div id="nav-path" class="navpath">
40 <ul>
41 <li class="navelem"><a class="el" href="a00248.html">hwloc_obj_attr_u</a></li><li class="navelem"><a class="el" href="a00264.html">hwloc_group_attr_s</a></li> </ul>
42 </div>
43 </div><!-- top -->
44 <div class="header">
45 <div class="summary">
46 <a href="#pub-attribs">Data Fields</a> </div>
47 <div class="headertitle">
48 <div class="title">hwloc_obj_attr_u::hwloc_group_attr_s Struct Reference</div> </div>
49 </div><!--header-->
50 <div class="contents">
51
52 <p><code>#include &lt;<a class="el" href="a00125_source.html">hwloc.h</a>&gt;</code></p>
53 <table class="memberdecls">
54 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
55 Data Fields</h2></td></tr>
56 <tr class="memitem:ad914eac61c77481e1b7037877bcc5579"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00264.html#ad914eac61c77481e1b7037877bcc5579">depth</a></td></tr>
57 <tr class="separator:ad914eac61c77481e1b7037877bcc5579"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:a3229f269c4cc7e63492c168535e4f0c1"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00264.html#a3229f269c4cc7e63492c168535e4f0c1">kind</a></td></tr>
59 <tr class="separator:a3229f269c4cc7e63492c168535e4f0c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:ad514d943960a4036ed5e44dc187c74ed"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00264.html#ad514d943960a4036ed5e44dc187c74ed">subkind</a></td></tr>
61 <tr class="separator:ad514d943960a4036ed5e44dc187c74ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:afa253d4b70f92e940c226d61f192054f"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00264.html#afa253d4b70f92e940c226d61f192054f">dont_merge</a></td></tr>
63 <tr class="separator:afa253d4b70f92e940c226d61f192054f"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 </table>
65 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
66 <div class="textblock"><p>Group-specific Object Attributes. </p>
67 </div><h2 class="groupheader">Field Documentation</h2>
68 <a id="ad914eac61c77481e1b7037877bcc5579"></a>
69 <h2 class="memtitle"><span class="permalink"><a href="#ad914eac61c77481e1b7037877bcc5579">&#9670;&nbsp;</a></span>depth</h2>
70
71 <div class="memitem">
72 <div class="memproto">
73 <table class="memname">
74 <tr>
75 <td class="memname">unsigned hwloc_obj_attr_u::hwloc_group_attr_s::depth</td>
76 </tr>
77 </table>
78 </div><div class="memdoc">
79
80 <p>Depth of group object. It may change if intermediate Group objects are added. </p>
81
82 </div>
83 </div>
84 <a id="afa253d4b70f92e940c226d61f192054f"></a>
85 <h2 class="memtitle"><span class="permalink"><a href="#afa253d4b70f92e940c226d61f192054f">&#9670;&nbsp;</a></span>dont_merge</h2>
86
87 <div class="memitem">
88 <div class="memproto">
89 <table class="memname">
90 <tr>
91 <td class="memname">unsigned char hwloc_obj_attr_u::hwloc_group_attr_s::dont_merge</td>
92 </tr>
93 </table>
94 </div><div class="memdoc">
95
96 <p>Flag preventing groups from being automatically merged with identical parent or children. </p>
97
98 </div>
99 </div>
100 <a id="a3229f269c4cc7e63492c168535e4f0c1"></a>
101 <h2 class="memtitle"><span class="permalink"><a href="#a3229f269c4cc7e63492c168535e4f0c1">&#9670;&nbsp;</a></span>kind</h2>
102
103 <div class="memitem">
104 <div class="memproto">
105 <table class="memname">
106 <tr>
107 <td class="memname">unsigned hwloc_obj_attr_u::hwloc_group_attr_s::kind</td>
108 </tr>
109 </table>
110 </div><div class="memdoc">
111
112 <p>Internally-used kind of group. </p>
113
114 </div>
115 </div>
116 <a id="ad514d943960a4036ed5e44dc187c74ed"></a>
117 <h2 class="memtitle"><span class="permalink"><a href="#ad514d943960a4036ed5e44dc187c74ed">&#9670;&nbsp;</a></span>subkind</h2>
118
119 <div class="memitem">
120 <div class="memproto">
121 <table class="memname">
122 <tr>
123 <td class="memname">unsigned hwloc_obj_attr_u::hwloc_group_attr_s::subkind</td>
124 </tr>
125 </table>
126 </div><div class="memdoc">
127
128 <p>Internally-used subkind to distinguish different levels of groups with same kind. </p>
129
130 </div>
131 </div>
132 <hr/>The documentation for this struct was generated from the following file:<ul>
133 <li><a class="el" href="a00125_source.html">hwloc.h</a></li>
134 </ul>
135 </div><!-- contents -->
136 <!-- start footer part -->
137 <hr class="footer"/><address class="footer"><small>
138 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
139 </small></address>
140 </body>
141 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_obj_attr_u::hwloc_cache_attr_s Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 <div id="nav-path" class="navpath">
40 <ul>
41 <li class="navelem"><a class="el" href="a00254.html">hwloc_obj_attr_u</a></li><li class="navelem"><a class="el" href="a00266.html">hwloc_cache_attr_s</a></li> </ul>
42 </div>
43 </div><!-- top -->
44 <div class="header">
45 <div class="summary">
46 <a href="#pub-attribs">Data Fields</a> </div>
47 <div class="headertitle">
48 <div class="title">hwloc_obj_attr_u::hwloc_cache_attr_s Struct Reference</div> </div>
49 </div><!--header-->
50 <div class="contents">
51
52 <p><code>#include &lt;<a class="el" href="a00122_source.html">hwloc.h</a>&gt;</code></p>
53 <table class="memberdecls">
54 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
55 Data Fields</h2></td></tr>
56 <tr class="memitem:abe5e788943ed04302976740c829674c0"><td class="memItemLeft" align="right" valign="top">hwloc_uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00266.html#abe5e788943ed04302976740c829674c0">size</a></td></tr>
57 <tr class="separator:abe5e788943ed04302976740c829674c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:a5c8f7f39193736c2187ed626940835d5"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00266.html#a5c8f7f39193736c2187ed626940835d5">depth</a></td></tr>
59 <tr class="separator:a5c8f7f39193736c2187ed626940835d5"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:a801e8a668e28caf06c8b88e9ae5c10db"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00266.html#a801e8a668e28caf06c8b88e9ae5c10db">linesize</a></td></tr>
61 <tr class="separator:a801e8a668e28caf06c8b88e9ae5c10db"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:ad06525e474d1e2d1423ed71bb998592d"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00266.html#ad06525e474d1e2d1423ed71bb998592d">associativity</a></td></tr>
63 <tr class="separator:ad06525e474d1e2d1423ed71bb998592d"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 <tr class="memitem:ad8edc8ded2b7a70d6abbc874801930f4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00193.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00266.html#ad8edc8ded2b7a70d6abbc874801930f4">type</a></td></tr>
65 <tr class="separator:ad8edc8ded2b7a70d6abbc874801930f4"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 </table>
67 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
68 <div class="textblock"><p>Cache-specific Object Attributes. </p>
69 </div><h2 class="groupheader">Field Documentation</h2>
70 <a id="ad06525e474d1e2d1423ed71bb998592d"></a>
71 <h2 class="memtitle"><span class="permalink"><a href="#ad06525e474d1e2d1423ed71bb998592d">&#9670;&nbsp;</a></span>associativity</h2>
72
73 <div class="memitem">
74 <div class="memproto">
75 <table class="memname">
76 <tr>
77 <td class="memname">int hwloc_obj_attr_u::hwloc_cache_attr_s::associativity</td>
78 </tr>
79 </table>
80 </div><div class="memdoc">
81
82 <p>Ways of associativity, -1 if fully associative, 0 if unknown. </p>
83
84 </div>
85 </div>
86 <a id="a5c8f7f39193736c2187ed626940835d5"></a>
87 <h2 class="memtitle"><span class="permalink"><a href="#a5c8f7f39193736c2187ed626940835d5">&#9670;&nbsp;</a></span>depth</h2>
88
89 <div class="memitem">
90 <div class="memproto">
91 <table class="memname">
92 <tr>
93 <td class="memname">unsigned hwloc_obj_attr_u::hwloc_cache_attr_s::depth</td>
94 </tr>
95 </table>
96 </div><div class="memdoc">
97
98 <p>Depth of cache (e.g., L1, L2, ...etc.) </p>
99
100 </div>
101 </div>
102 <a id="a801e8a668e28caf06c8b88e9ae5c10db"></a>
103 <h2 class="memtitle"><span class="permalink"><a href="#a801e8a668e28caf06c8b88e9ae5c10db">&#9670;&nbsp;</a></span>linesize</h2>
104
105 <div class="memitem">
106 <div class="memproto">
107 <table class="memname">
108 <tr>
109 <td class="memname">unsigned hwloc_obj_attr_u::hwloc_cache_attr_s::linesize</td>
110 </tr>
111 </table>
112 </div><div class="memdoc">
113
114 <p>Cache-line size in bytes. 0 if unknown. </p>
115
116 </div>
117 </div>
118 <a id="abe5e788943ed04302976740c829674c0"></a>
119 <h2 class="memtitle"><span class="permalink"><a href="#abe5e788943ed04302976740c829674c0">&#9670;&nbsp;</a></span>size</h2>
120
121 <div class="memitem">
122 <div class="memproto">
123 <table class="memname">
124 <tr>
125 <td class="memname">hwloc_uint64_t hwloc_obj_attr_u::hwloc_cache_attr_s::size</td>
126 </tr>
127 </table>
128 </div><div class="memdoc">
129
130 <p>Size of cache in bytes. </p>
131
132 </div>
133 </div>
134 <a id="ad8edc8ded2b7a70d6abbc874801930f4"></a>
135 <h2 class="memtitle"><span class="permalink"><a href="#ad8edc8ded2b7a70d6abbc874801930f4">&#9670;&nbsp;</a></span>type</h2>
136
137 <div class="memitem">
138 <div class="memproto">
139 <table class="memname">
140 <tr>
141 <td class="memname"><a class="el" href="a00193.html#ga552ec74296a024237f474acec98694c0">hwloc_obj_cache_type_t</a> hwloc_obj_attr_u::hwloc_cache_attr_s::type</td>
142 </tr>
143 </table>
144 </div><div class="memdoc">
145
146 <p>Cache type. </p>
147
148 </div>
149 </div>
150 <hr/>The documentation for this struct was generated from the following file:<ul>
151 <li><a class="el" href="a00122_source.html">hwloc.h</a></li>
152 </ul>
153 </div><!-- contents -->
154 <!-- start footer part -->
155 <hr class="footer"/><address class="footer"><small>
156 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
157 </small></address>
158 </body>
159 </html>
+0
-246
doc/doxygen-doc/html/a00268.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_obj_attr_u::hwloc_pcidev_attr_s Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 <div id="nav-path" class="navpath">
40 <ul>
41 <li class="navelem"><a class="el" href="a00248.html">hwloc_obj_attr_u</a></li><li class="navelem"><a class="el" href="a00268.html">hwloc_pcidev_attr_s</a></li> </ul>
42 </div>
43 </div><!-- top -->
44 <div class="header">
45 <div class="summary">
46 <a href="#pub-attribs">Data Fields</a> </div>
47 <div class="headertitle">
48 <div class="title">hwloc_obj_attr_u::hwloc_pcidev_attr_s Struct Reference</div> </div>
49 </div><!--header-->
50 <div class="contents">
51
52 <p><code>#include &lt;<a class="el" href="a00125_source.html">hwloc.h</a>&gt;</code></p>
53 <table class="memberdecls">
54 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
55 Data Fields</h2></td></tr>
56 <tr class="memitem:a8fba44988deb98613c1505a4019a34dc"><td class="memItemLeft" align="right" valign="top">unsigned short&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00268.html#a8fba44988deb98613c1505a4019a34dc">domain</a></td></tr>
57 <tr class="separator:a8fba44988deb98613c1505a4019a34dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:aae99e035e8d1387d7b8768aaa8eceb0a"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00268.html#aae99e035e8d1387d7b8768aaa8eceb0a">bus</a></td></tr>
59 <tr class="separator:aae99e035e8d1387d7b8768aaa8eceb0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:a3d70c84a12f7e93d14c8d47bf4fd9dc5"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00268.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">dev</a></td></tr>
61 <tr class="separator:a3d70c84a12f7e93d14c8d47bf4fd9dc5"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:a695f32df53f4ef728670bfcf31b74e0f"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00268.html#a695f32df53f4ef728670bfcf31b74e0f">func</a></td></tr>
63 <tr class="separator:a695f32df53f4ef728670bfcf31b74e0f"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 <tr class="memitem:aee735352d9f1686fd290fc6d6397c334"><td class="memItemLeft" align="right" valign="top">unsigned short&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00268.html#aee735352d9f1686fd290fc6d6397c334">class_id</a></td></tr>
65 <tr class="separator:aee735352d9f1686fd290fc6d6397c334"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 <tr class="memitem:aad970ad19b62eb2d5df30e4802da4f4c"><td class="memItemLeft" align="right" valign="top">unsigned short&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00268.html#aad970ad19b62eb2d5df30e4802da4f4c">vendor_id</a></td></tr>
67 <tr class="separator:aad970ad19b62eb2d5df30e4802da4f4c"><td class="memSeparator" colspan="2">&#160;</td></tr>
68 <tr class="memitem:a35b66064ab7d768caf7154e410caf0fa"><td class="memItemLeft" align="right" valign="top">unsigned short&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00268.html#a35b66064ab7d768caf7154e410caf0fa">device_id</a></td></tr>
69 <tr class="separator:a35b66064ab7d768caf7154e410caf0fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
70 <tr class="memitem:a499db3d8cc89eaba04fcaef3df1cba97"><td class="memItemLeft" align="right" valign="top">unsigned short&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00268.html#a499db3d8cc89eaba04fcaef3df1cba97">subvendor_id</a></td></tr>
71 <tr class="separator:a499db3d8cc89eaba04fcaef3df1cba97"><td class="memSeparator" colspan="2">&#160;</td></tr>
72 <tr class="memitem:acac741aecd7a6db64f33409427e3971f"><td class="memItemLeft" align="right" valign="top">unsigned short&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00268.html#acac741aecd7a6db64f33409427e3971f">subdevice_id</a></td></tr>
73 <tr class="separator:acac741aecd7a6db64f33409427e3971f"><td class="memSeparator" colspan="2">&#160;</td></tr>
74 <tr class="memitem:a13ad54c93d08d8ac808e4de9674c5ee7"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00268.html#a13ad54c93d08d8ac808e4de9674c5ee7">revision</a></td></tr>
75 <tr class="separator:a13ad54c93d08d8ac808e4de9674c5ee7"><td class="memSeparator" colspan="2">&#160;</td></tr>
76 <tr class="memitem:a59b2fce35f7cbde86c4fd305d0ccda5f"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00268.html#a59b2fce35f7cbde86c4fd305d0ccda5f">linkspeed</a></td></tr>
77 <tr class="separator:a59b2fce35f7cbde86c4fd305d0ccda5f"><td class="memSeparator" colspan="2">&#160;</td></tr>
78 </table>
79 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
80 <div class="textblock"><p>PCI Device specific Object Attributes. </p>
81 </div><h2 class="groupheader">Field Documentation</h2>
82 <a id="aae99e035e8d1387d7b8768aaa8eceb0a"></a>
83 <h2 class="memtitle"><span class="permalink"><a href="#aae99e035e8d1387d7b8768aaa8eceb0a">&#9670;&nbsp;</a></span>bus</h2>
84
85 <div class="memitem">
86 <div class="memproto">
87 <table class="memname">
88 <tr>
89 <td class="memname">unsigned char hwloc_obj_attr_u::hwloc_pcidev_attr_s::bus</td>
90 </tr>
91 </table>
92 </div><div class="memdoc">
93
94 </div>
95 </div>
96 <a id="aee735352d9f1686fd290fc6d6397c334"></a>
97 <h2 class="memtitle"><span class="permalink"><a href="#aee735352d9f1686fd290fc6d6397c334">&#9670;&nbsp;</a></span>class_id</h2>
98
99 <div class="memitem">
100 <div class="memproto">
101 <table class="memname">
102 <tr>
103 <td class="memname">unsigned short hwloc_obj_attr_u::hwloc_pcidev_attr_s::class_id</td>
104 </tr>
105 </table>
106 </div><div class="memdoc">
107
108 </div>
109 </div>
110 <a id="a3d70c84a12f7e93d14c8d47bf4fd9dc5"></a>
111 <h2 class="memtitle"><span class="permalink"><a href="#a3d70c84a12f7e93d14c8d47bf4fd9dc5">&#9670;&nbsp;</a></span>dev</h2>
112
113 <div class="memitem">
114 <div class="memproto">
115 <table class="memname">
116 <tr>
117 <td class="memname">unsigned char hwloc_obj_attr_u::hwloc_pcidev_attr_s::dev</td>
118 </tr>
119 </table>
120 </div><div class="memdoc">
121
122 </div>
123 </div>
124 <a id="a35b66064ab7d768caf7154e410caf0fa"></a>
125 <h2 class="memtitle"><span class="permalink"><a href="#a35b66064ab7d768caf7154e410caf0fa">&#9670;&nbsp;</a></span>device_id</h2>
126
127 <div class="memitem">
128 <div class="memproto">
129 <table class="memname">
130 <tr>
131 <td class="memname">unsigned short hwloc_obj_attr_u::hwloc_pcidev_attr_s::device_id</td>
132 </tr>
133 </table>
134 </div><div class="memdoc">
135
136 </div>
137 </div>
138 <a id="a8fba44988deb98613c1505a4019a34dc"></a>
139 <h2 class="memtitle"><span class="permalink"><a href="#a8fba44988deb98613c1505a4019a34dc">&#9670;&nbsp;</a></span>domain</h2>
140
141 <div class="memitem">
142 <div class="memproto">
143 <table class="memname">
144 <tr>
145 <td class="memname">unsigned short hwloc_obj_attr_u::hwloc_pcidev_attr_s::domain</td>
146 </tr>
147 </table>
148 </div><div class="memdoc">
149
150 </div>
151 </div>
152 <a id="a695f32df53f4ef728670bfcf31b74e0f"></a>
153 <h2 class="memtitle"><span class="permalink"><a href="#a695f32df53f4ef728670bfcf31b74e0f">&#9670;&nbsp;</a></span>func</h2>
154
155 <div class="memitem">
156 <div class="memproto">
157 <table class="memname">
158 <tr>
159 <td class="memname">unsigned char hwloc_obj_attr_u::hwloc_pcidev_attr_s::func</td>
160 </tr>
161 </table>
162 </div><div class="memdoc">
163
164 </div>
165 </div>
166 <a id="a59b2fce35f7cbde86c4fd305d0ccda5f"></a>
167 <h2 class="memtitle"><span class="permalink"><a href="#a59b2fce35f7cbde86c4fd305d0ccda5f">&#9670;&nbsp;</a></span>linkspeed</h2>
168
169 <div class="memitem">
170 <div class="memproto">
171 <table class="memname">
172 <tr>
173 <td class="memname">float hwloc_obj_attr_u::hwloc_pcidev_attr_s::linkspeed</td>
174 </tr>
175 </table>
176 </div><div class="memdoc">
177
178 </div>
179 </div>
180 <a id="a13ad54c93d08d8ac808e4de9674c5ee7"></a>
181 <h2 class="memtitle"><span class="permalink"><a href="#a13ad54c93d08d8ac808e4de9674c5ee7">&#9670;&nbsp;</a></span>revision</h2>
182
183 <div class="memitem">
184 <div class="memproto">
185 <table class="memname">
186 <tr>
187 <td class="memname">unsigned char hwloc_obj_attr_u::hwloc_pcidev_attr_s::revision</td>
188 </tr>
189 </table>
190 </div><div class="memdoc">
191
192 </div>
193 </div>
194 <a id="acac741aecd7a6db64f33409427e3971f"></a>
195 <h2 class="memtitle"><span class="permalink"><a href="#acac741aecd7a6db64f33409427e3971f">&#9670;&nbsp;</a></span>subdevice_id</h2>
196
197 <div class="memitem">
198 <div class="memproto">
199 <table class="memname">
200 <tr>
201 <td class="memname">unsigned short hwloc_obj_attr_u::hwloc_pcidev_attr_s::subdevice_id</td>
202 </tr>
203 </table>
204 </div><div class="memdoc">
205
206 </div>
207 </div>
208 <a id="a499db3d8cc89eaba04fcaef3df1cba97"></a>
209 <h2 class="memtitle"><span class="permalink"><a href="#a499db3d8cc89eaba04fcaef3df1cba97">&#9670;&nbsp;</a></span>subvendor_id</h2>
210
211 <div class="memitem">
212 <div class="memproto">
213 <table class="memname">
214 <tr>
215 <td class="memname">unsigned short hwloc_obj_attr_u::hwloc_pcidev_attr_s::subvendor_id</td>
216 </tr>
217 </table>
218 </div><div class="memdoc">
219
220 </div>
221 </div>
222 <a id="aad970ad19b62eb2d5df30e4802da4f4c"></a>
223 <h2 class="memtitle"><span class="permalink"><a href="#aad970ad19b62eb2d5df30e4802da4f4c">&#9670;&nbsp;</a></span>vendor_id</h2>
224
225 <div class="memitem">
226 <div class="memproto">
227 <table class="memname">
228 <tr>
229 <td class="memname">unsigned short hwloc_obj_attr_u::hwloc_pcidev_attr_s::vendor_id</td>
230 </tr>
231 </table>
232 </div><div class="memdoc">
233
234 </div>
235 </div>
236 <hr/>The documentation for this struct was generated from the following file:<ul>
237 <li><a class="el" href="a00125_source.html">hwloc.h</a></li>
238 </ul>
239 </div><!-- contents -->
240 <!-- start footer part -->
241 <hr class="footer"/><address class="footer"><small>
242 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
243 </small></address>
244 </body>
245 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_obj_attr_u::hwloc_group_attr_s Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 <div id="nav-path" class="navpath">
40 <ul>
41 <li class="navelem"><a class="el" href="a00254.html">hwloc_obj_attr_u</a></li><li class="navelem"><a class="el" href="a00270.html">hwloc_group_attr_s</a></li> </ul>
42 </div>
43 </div><!-- top -->
44 <div class="header">
45 <div class="summary">
46 <a href="#pub-attribs">Data Fields</a> </div>
47 <div class="headertitle">
48 <div class="title">hwloc_obj_attr_u::hwloc_group_attr_s Struct Reference</div> </div>
49 </div><!--header-->
50 <div class="contents">
51
52 <p><code>#include &lt;<a class="el" href="a00122_source.html">hwloc.h</a>&gt;</code></p>
53 <table class="memberdecls">
54 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
55 Data Fields</h2></td></tr>
56 <tr class="memitem:ad914eac61c77481e1b7037877bcc5579"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00270.html#ad914eac61c77481e1b7037877bcc5579">depth</a></td></tr>
57 <tr class="separator:ad914eac61c77481e1b7037877bcc5579"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:a3229f269c4cc7e63492c168535e4f0c1"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00270.html#a3229f269c4cc7e63492c168535e4f0c1">kind</a></td></tr>
59 <tr class="separator:a3229f269c4cc7e63492c168535e4f0c1"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:ad514d943960a4036ed5e44dc187c74ed"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00270.html#ad514d943960a4036ed5e44dc187c74ed">subkind</a></td></tr>
61 <tr class="separator:ad514d943960a4036ed5e44dc187c74ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:afa253d4b70f92e940c226d61f192054f"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00270.html#afa253d4b70f92e940c226d61f192054f">dont_merge</a></td></tr>
63 <tr class="separator:afa253d4b70f92e940c226d61f192054f"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 </table>
65 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
66 <div class="textblock"><p>Group-specific Object Attributes. </p>
67 </div><h2 class="groupheader">Field Documentation</h2>
68 <a id="ad914eac61c77481e1b7037877bcc5579"></a>
69 <h2 class="memtitle"><span class="permalink"><a href="#ad914eac61c77481e1b7037877bcc5579">&#9670;&nbsp;</a></span>depth</h2>
70
71 <div class="memitem">
72 <div class="memproto">
73 <table class="memname">
74 <tr>
75 <td class="memname">unsigned hwloc_obj_attr_u::hwloc_group_attr_s::depth</td>
76 </tr>
77 </table>
78 </div><div class="memdoc">
79
80 <p>Depth of group object. It may change if intermediate Group objects are added. </p>
81
82 </div>
83 </div>
84 <a id="afa253d4b70f92e940c226d61f192054f"></a>
85 <h2 class="memtitle"><span class="permalink"><a href="#afa253d4b70f92e940c226d61f192054f">&#9670;&nbsp;</a></span>dont_merge</h2>
86
87 <div class="memitem">
88 <div class="memproto">
89 <table class="memname">
90 <tr>
91 <td class="memname">unsigned char hwloc_obj_attr_u::hwloc_group_attr_s::dont_merge</td>
92 </tr>
93 </table>
94 </div><div class="memdoc">
95
96 <p>Flag preventing groups from being automatically merged with identical parent or children. </p>
97
98 </div>
99 </div>
100 <a id="a3229f269c4cc7e63492c168535e4f0c1"></a>
101 <h2 class="memtitle"><span class="permalink"><a href="#a3229f269c4cc7e63492c168535e4f0c1">&#9670;&nbsp;</a></span>kind</h2>
102
103 <div class="memitem">
104 <div class="memproto">
105 <table class="memname">
106 <tr>
107 <td class="memname">unsigned hwloc_obj_attr_u::hwloc_group_attr_s::kind</td>
108 </tr>
109 </table>
110 </div><div class="memdoc">
111
112 <p>Internally-used kind of group. </p>
113
114 </div>
115 </div>
116 <a id="ad514d943960a4036ed5e44dc187c74ed"></a>
117 <h2 class="memtitle"><span class="permalink"><a href="#ad514d943960a4036ed5e44dc187c74ed">&#9670;&nbsp;</a></span>subkind</h2>
118
119 <div class="memitem">
120 <div class="memproto">
121 <table class="memname">
122 <tr>
123 <td class="memname">unsigned hwloc_obj_attr_u::hwloc_group_attr_s::subkind</td>
124 </tr>
125 </table>
126 </div><div class="memdoc">
127
128 <p>Internally-used subkind to distinguish different levels of groups with same kind. </p>
129
130 </div>
131 </div>
132 <hr/>The documentation for this struct was generated from the following file:<ul>
133 <li><a class="el" href="a00122_source.html">hwloc.h</a></li>
134 </ul>
135 </div><!-- contents -->
136 <!-- start footer part -->
137 <hr class="footer"/><address class="footer"><small>
138 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
139 </small></address>
140 </body>
141 </html>
+0
-233
doc/doxygen-doc/html/a00272.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_obj_attr_u::hwloc_bridge_attr_s Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 <div id="nav-path" class="navpath">
40 <ul>
41 <li class="navelem"><a class="el" href="a00248.html">hwloc_obj_attr_u</a></li><li class="navelem"><a class="el" href="a00272.html">hwloc_bridge_attr_s</a></li> </ul>
42 </div>
43 </div><!-- top -->
44 <div class="header">
45 <div class="summary">
46 <a href="#pub-attribs">Data Fields</a> </div>
47 <div class="headertitle">
48 <div class="title">hwloc_obj_attr_u::hwloc_bridge_attr_s Struct Reference</div> </div>
49 </div><!--header-->
50 <div class="contents">
51
52 <p><code>#include &lt;<a class="el" href="a00125_source.html">hwloc.h</a>&gt;</code></p>
53 <table class="memberdecls">
54 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
55 Data Fields</h2></td></tr>
56 <tr class="memitem:ab62888c880f8bb730292722f5811958d"><td class="memItemLeft" >union {</td></tr>
57 <tr class="memitem:afbfb960b5aaf2b6e10d8d5d424b227d7"><td class="memItemLeft" >&#160;&#160;&#160;struct <a class="el" href="a00268.html">hwloc_pcidev_attr_s</a>&#160;&#160;&#160;<a class="el" href="a00272.html#ab5c564e7c95b747dae9eb84ec0a2c31e">pci</a></td></tr>
58 <tr class="separator:afbfb960b5aaf2b6e10d8d5d424b227d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
59 <tr class="memitem:ab62888c880f8bb730292722f5811958d"><td class="memItemLeft" valign="top">}&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00272.html#ab62888c880f8bb730292722f5811958d">upstream</a></td></tr>
60 <tr class="separator:ab62888c880f8bb730292722f5811958d"><td class="memSeparator" colspan="2">&#160;</td></tr>
61 <tr class="memitem:a265dd2164aa2df4972e25a029da72125"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00190.html#gab34362c7a23296c3f12c5756747abda3">hwloc_obj_bridge_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00272.html#a265dd2164aa2df4972e25a029da72125">upstream_type</a></td></tr>
62 <tr class="separator:a265dd2164aa2df4972e25a029da72125"><td class="memSeparator" colspan="2">&#160;</td></tr>
63 <tr class="memitem:a7d5db91d655ba23ffe9bda7a2cbcb9a8"><td class="memItemLeft" >union {</td></tr>
64 <tr class="memitem:a9bfa9c4f529c8d9798aca8d02705fd8f"><td class="memItemLeft" >&#160;&#160;&#160;struct {</td></tr>
65 <tr class="memitem:afcdd4077c7c574e4791eefbdf8fb5d9e"><td class="memItemLeft" >&#160;&#160;&#160;&#160;&#160;&#160;unsigned short&#160;&#160;&#160;<a class="el" href="a00272.html#a2c31e565a5f0d23d0a0a3dd3ec8f4b17">domain</a></td></tr>
66 <tr class="separator:afcdd4077c7c574e4791eefbdf8fb5d9e"><td class="memSeparator" colspan="2">&#160;</td></tr>
67 <tr class="memitem:a5e2836eb053bf87e3f7430b5470dedca"><td class="memItemLeft" >&#160;&#160;&#160;&#160;&#160;&#160;unsigned char&#160;&#160;&#160;<a class="el" href="a00272.html#ae2d9dd73ef1d32045c584a8e66d2f83f">secondary_bus</a></td></tr>
68 <tr class="separator:a5e2836eb053bf87e3f7430b5470dedca"><td class="memSeparator" colspan="2">&#160;</td></tr>
69 <tr class="memitem:aae5989d9a424dd74ff22da89e6ed245b"><td class="memItemLeft" >&#160;&#160;&#160;&#160;&#160;&#160;unsigned char&#160;&#160;&#160;<a class="el" href="a00272.html#af3f3f7d76bf03e8d2afa721c2b8d6771">subordinate_bus</a></td></tr>
70 <tr class="separator:aae5989d9a424dd74ff22da89e6ed245b"><td class="memSeparator" colspan="2">&#160;</td></tr>
71 <tr class="memitem:a9bfa9c4f529c8d9798aca8d02705fd8f"><td class="memItemLeft" valign="top">&#160;&#160;&#160;}&#160;&#160;&#160;<a class="el" href="a00272.html#a2fdc40034b915d504724b35cc776a4ec">pci</a></td></tr>
72 <tr class="separator:a9bfa9c4f529c8d9798aca8d02705fd8f"><td class="memSeparator" colspan="2">&#160;</td></tr>
73 <tr class="memitem:a7d5db91d655ba23ffe9bda7a2cbcb9a8"><td class="memItemLeft" valign="top">}&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00272.html#a7d5db91d655ba23ffe9bda7a2cbcb9a8">downstream</a></td></tr>
74 <tr class="separator:a7d5db91d655ba23ffe9bda7a2cbcb9a8"><td class="memSeparator" colspan="2">&#160;</td></tr>
75 <tr class="memitem:ac6a169b672d0e9f75756fd5665828b93"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00190.html#gab34362c7a23296c3f12c5756747abda3">hwloc_obj_bridge_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00272.html#ac6a169b672d0e9f75756fd5665828b93">downstream_type</a></td></tr>
76 <tr class="separator:ac6a169b672d0e9f75756fd5665828b93"><td class="memSeparator" colspan="2">&#160;</td></tr>
77 <tr class="memitem:a336c8b22893d5d734d8c9dfca4066b46"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00272.html#a336c8b22893d5d734d8c9dfca4066b46">depth</a></td></tr>
78 <tr class="separator:a336c8b22893d5d734d8c9dfca4066b46"><td class="memSeparator" colspan="2">&#160;</td></tr>
79 </table>
80 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
81 <div class="textblock"><p>Bridge specific Object Attribues. </p>
82 </div><h2 class="groupheader">Field Documentation</h2>
83 <a id="a336c8b22893d5d734d8c9dfca4066b46"></a>
84 <h2 class="memtitle"><span class="permalink"><a href="#a336c8b22893d5d734d8c9dfca4066b46">&#9670;&nbsp;</a></span>depth</h2>
85
86 <div class="memitem">
87 <div class="memproto">
88 <table class="memname">
89 <tr>
90 <td class="memname">unsigned hwloc_obj_attr_u::hwloc_bridge_attr_s::depth</td>
91 </tr>
92 </table>
93 </div><div class="memdoc">
94
95 </div>
96 </div>
97 <a id="a2c31e565a5f0d23d0a0a3dd3ec8f4b17"></a>
98 <h2 class="memtitle"><span class="permalink"><a href="#a2c31e565a5f0d23d0a0a3dd3ec8f4b17">&#9670;&nbsp;</a></span>domain</h2>
99
100 <div class="memitem">
101 <div class="memproto">
102 <table class="memname">
103 <tr>
104 <td class="memname">unsigned short hwloc_obj_attr_u::hwloc_bridge_attr_s::domain</td>
105 </tr>
106 </table>
107 </div><div class="memdoc">
108
109 </div>
110 </div>
111 <a id="a7d5db91d655ba23ffe9bda7a2cbcb9a8"></a>
112 <h2 class="memtitle"><span class="permalink"><a href="#a7d5db91d655ba23ffe9bda7a2cbcb9a8">&#9670;&nbsp;</a></span></h2>
113
114 <div class="memitem">
115 <div class="memproto">
116 <table class="memname">
117 <tr>
118 <td class="memname">union { ... } hwloc_obj_attr_u::hwloc_bridge_attr_s::downstream</td>
119 </tr>
120 </table>
121 </div><div class="memdoc">
122
123 </div>
124 </div>
125 <a id="ac6a169b672d0e9f75756fd5665828b93"></a>
126 <h2 class="memtitle"><span class="permalink"><a href="#ac6a169b672d0e9f75756fd5665828b93">&#9670;&nbsp;</a></span>downstream_type</h2>
127
128 <div class="memitem">
129 <div class="memproto">
130 <table class="memname">
131 <tr>
132 <td class="memname"><a class="el" href="a00190.html#gab34362c7a23296c3f12c5756747abda3">hwloc_obj_bridge_type_t</a> hwloc_obj_attr_u::hwloc_bridge_attr_s::downstream_type</td>
133 </tr>
134 </table>
135 </div><div class="memdoc">
136
137 </div>
138 </div>
139 <a id="a2fdc40034b915d504724b35cc776a4ec"></a>
140 <h2 class="memtitle"><span class="permalink"><a href="#a2fdc40034b915d504724b35cc776a4ec">&#9670;&nbsp;</a></span> <span class="overload">[1/2]</span></h2>
141
142 <div class="memitem">
143 <div class="memproto">
144 <table class="memname">
145 <tr>
146 <td class="memname">struct { ... } hwloc_obj_attr_u::hwloc_bridge_attr_s::pci</td>
147 </tr>
148 </table>
149 </div><div class="memdoc">
150
151 </div>
152 </div>
153 <a id="ab5c564e7c95b747dae9eb84ec0a2c31e"></a>
154 <h2 class="memtitle"><span class="permalink"><a href="#ab5c564e7c95b747dae9eb84ec0a2c31e">&#9670;&nbsp;</a></span>pci <span class="overload">[2/2]</span></h2>
155
156 <div class="memitem">
157 <div class="memproto">
158 <table class="memname">
159 <tr>
160 <td class="memname">struct <a class="el" href="a00268.html">hwloc_pcidev_attr_s</a> hwloc_obj_attr_u::hwloc_bridge_attr_s::pci</td>
161 </tr>
162 </table>
163 </div><div class="memdoc">
164
165 </div>
166 </div>
167 <a id="ae2d9dd73ef1d32045c584a8e66d2f83f"></a>
168 <h2 class="memtitle"><span class="permalink"><a href="#ae2d9dd73ef1d32045c584a8e66d2f83f">&#9670;&nbsp;</a></span>secondary_bus</h2>
169
170 <div class="memitem">
171 <div class="memproto">
172 <table class="memname">
173 <tr>
174 <td class="memname">unsigned char hwloc_obj_attr_u::hwloc_bridge_attr_s::secondary_bus</td>
175 </tr>
176 </table>
177 </div><div class="memdoc">
178
179 </div>
180 </div>
181 <a id="af3f3f7d76bf03e8d2afa721c2b8d6771"></a>
182 <h2 class="memtitle"><span class="permalink"><a href="#af3f3f7d76bf03e8d2afa721c2b8d6771">&#9670;&nbsp;</a></span>subordinate_bus</h2>
183
184 <div class="memitem">
185 <div class="memproto">
186 <table class="memname">
187 <tr>
188 <td class="memname">unsigned char hwloc_obj_attr_u::hwloc_bridge_attr_s::subordinate_bus</td>
189 </tr>
190 </table>
191 </div><div class="memdoc">
192
193 </div>
194 </div>
195 <a id="ab62888c880f8bb730292722f5811958d"></a>
196 <h2 class="memtitle"><span class="permalink"><a href="#ab62888c880f8bb730292722f5811958d">&#9670;&nbsp;</a></span></h2>
197
198 <div class="memitem">
199 <div class="memproto">
200 <table class="memname">
201 <tr>
202 <td class="memname">union { ... } hwloc_obj_attr_u::hwloc_bridge_attr_s::upstream</td>
203 </tr>
204 </table>
205 </div><div class="memdoc">
206
207 </div>
208 </div>
209 <a id="a265dd2164aa2df4972e25a029da72125"></a>
210 <h2 class="memtitle"><span class="permalink"><a href="#a265dd2164aa2df4972e25a029da72125">&#9670;&nbsp;</a></span>upstream_type</h2>
211
212 <div class="memitem">
213 <div class="memproto">
214 <table class="memname">
215 <tr>
216 <td class="memname"><a class="el" href="a00190.html#gab34362c7a23296c3f12c5756747abda3">hwloc_obj_bridge_type_t</a> hwloc_obj_attr_u::hwloc_bridge_attr_s::upstream_type</td>
217 </tr>
218 </table>
219 </div><div class="memdoc">
220
221 </div>
222 </div>
223 <hr/>The documentation for this struct was generated from the following file:<ul>
224 <li><a class="el" href="a00125_source.html">hwloc.h</a></li>
225 </ul>
226 </div><!-- contents -->
227 <!-- start footer part -->
228 <hr class="footer"/><address class="footer"><small>
229 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
230 </small></address>
231 </body>
232 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_obj_attr_u::hwloc_pcidev_attr_s Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 <div id="nav-path" class="navpath">
40 <ul>
41 <li class="navelem"><a class="el" href="a00254.html">hwloc_obj_attr_u</a></li><li class="navelem"><a class="el" href="a00274.html">hwloc_pcidev_attr_s</a></li> </ul>
42 </div>
43 </div><!-- top -->
44 <div class="header">
45 <div class="summary">
46 <a href="#pub-attribs">Data Fields</a> </div>
47 <div class="headertitle">
48 <div class="title">hwloc_obj_attr_u::hwloc_pcidev_attr_s Struct Reference</div> </div>
49 </div><!--header-->
50 <div class="contents">
51
52 <p><code>#include &lt;<a class="el" href="a00122_source.html">hwloc.h</a>&gt;</code></p>
53 <table class="memberdecls">
54 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
55 Data Fields</h2></td></tr>
56 <tr class="memitem:a8fba44988deb98613c1505a4019a34dc"><td class="memItemLeft" align="right" valign="top">unsigned short&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00274.html#a8fba44988deb98613c1505a4019a34dc">domain</a></td></tr>
57 <tr class="separator:a8fba44988deb98613c1505a4019a34dc"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:aae99e035e8d1387d7b8768aaa8eceb0a"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00274.html#aae99e035e8d1387d7b8768aaa8eceb0a">bus</a></td></tr>
59 <tr class="separator:aae99e035e8d1387d7b8768aaa8eceb0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:a3d70c84a12f7e93d14c8d47bf4fd9dc5"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00274.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">dev</a></td></tr>
61 <tr class="separator:a3d70c84a12f7e93d14c8d47bf4fd9dc5"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:a695f32df53f4ef728670bfcf31b74e0f"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00274.html#a695f32df53f4ef728670bfcf31b74e0f">func</a></td></tr>
63 <tr class="separator:a695f32df53f4ef728670bfcf31b74e0f"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 <tr class="memitem:aee735352d9f1686fd290fc6d6397c334"><td class="memItemLeft" align="right" valign="top">unsigned short&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00274.html#aee735352d9f1686fd290fc6d6397c334">class_id</a></td></tr>
65 <tr class="separator:aee735352d9f1686fd290fc6d6397c334"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 <tr class="memitem:aad970ad19b62eb2d5df30e4802da4f4c"><td class="memItemLeft" align="right" valign="top">unsigned short&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00274.html#aad970ad19b62eb2d5df30e4802da4f4c">vendor_id</a></td></tr>
67 <tr class="separator:aad970ad19b62eb2d5df30e4802da4f4c"><td class="memSeparator" colspan="2">&#160;</td></tr>
68 <tr class="memitem:a35b66064ab7d768caf7154e410caf0fa"><td class="memItemLeft" align="right" valign="top">unsigned short&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00274.html#a35b66064ab7d768caf7154e410caf0fa">device_id</a></td></tr>
69 <tr class="separator:a35b66064ab7d768caf7154e410caf0fa"><td class="memSeparator" colspan="2">&#160;</td></tr>
70 <tr class="memitem:a499db3d8cc89eaba04fcaef3df1cba97"><td class="memItemLeft" align="right" valign="top">unsigned short&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00274.html#a499db3d8cc89eaba04fcaef3df1cba97">subvendor_id</a></td></tr>
71 <tr class="separator:a499db3d8cc89eaba04fcaef3df1cba97"><td class="memSeparator" colspan="2">&#160;</td></tr>
72 <tr class="memitem:acac741aecd7a6db64f33409427e3971f"><td class="memItemLeft" align="right" valign="top">unsigned short&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00274.html#acac741aecd7a6db64f33409427e3971f">subdevice_id</a></td></tr>
73 <tr class="separator:acac741aecd7a6db64f33409427e3971f"><td class="memSeparator" colspan="2">&#160;</td></tr>
74 <tr class="memitem:a13ad54c93d08d8ac808e4de9674c5ee7"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00274.html#a13ad54c93d08d8ac808e4de9674c5ee7">revision</a></td></tr>
75 <tr class="separator:a13ad54c93d08d8ac808e4de9674c5ee7"><td class="memSeparator" colspan="2">&#160;</td></tr>
76 <tr class="memitem:a59b2fce35f7cbde86c4fd305d0ccda5f"><td class="memItemLeft" align="right" valign="top">float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00274.html#a59b2fce35f7cbde86c4fd305d0ccda5f">linkspeed</a></td></tr>
77 <tr class="separator:a59b2fce35f7cbde86c4fd305d0ccda5f"><td class="memSeparator" colspan="2">&#160;</td></tr>
78 </table>
79 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
80 <div class="textblock"><p>PCI Device specific Object Attributes. </p>
81 </div><h2 class="groupheader">Field Documentation</h2>
82 <a id="aae99e035e8d1387d7b8768aaa8eceb0a"></a>
83 <h2 class="memtitle"><span class="permalink"><a href="#aae99e035e8d1387d7b8768aaa8eceb0a">&#9670;&nbsp;</a></span>bus</h2>
84
85 <div class="memitem">
86 <div class="memproto">
87 <table class="memname">
88 <tr>
89 <td class="memname">unsigned char hwloc_obj_attr_u::hwloc_pcidev_attr_s::bus</td>
90 </tr>
91 </table>
92 </div><div class="memdoc">
93
94 </div>
95 </div>
96 <a id="aee735352d9f1686fd290fc6d6397c334"></a>
97 <h2 class="memtitle"><span class="permalink"><a href="#aee735352d9f1686fd290fc6d6397c334">&#9670;&nbsp;</a></span>class_id</h2>
98
99 <div class="memitem">
100 <div class="memproto">
101 <table class="memname">
102 <tr>
103 <td class="memname">unsigned short hwloc_obj_attr_u::hwloc_pcidev_attr_s::class_id</td>
104 </tr>
105 </table>
106 </div><div class="memdoc">
107
108 </div>
109 </div>
110 <a id="a3d70c84a12f7e93d14c8d47bf4fd9dc5"></a>
111 <h2 class="memtitle"><span class="permalink"><a href="#a3d70c84a12f7e93d14c8d47bf4fd9dc5">&#9670;&nbsp;</a></span>dev</h2>
112
113 <div class="memitem">
114 <div class="memproto">
115 <table class="memname">
116 <tr>
117 <td class="memname">unsigned char hwloc_obj_attr_u::hwloc_pcidev_attr_s::dev</td>
118 </tr>
119 </table>
120 </div><div class="memdoc">
121
122 </div>
123 </div>
124 <a id="a35b66064ab7d768caf7154e410caf0fa"></a>
125 <h2 class="memtitle"><span class="permalink"><a href="#a35b66064ab7d768caf7154e410caf0fa">&#9670;&nbsp;</a></span>device_id</h2>
126
127 <div class="memitem">
128 <div class="memproto">
129 <table class="memname">
130 <tr>
131 <td class="memname">unsigned short hwloc_obj_attr_u::hwloc_pcidev_attr_s::device_id</td>
132 </tr>
133 </table>
134 </div><div class="memdoc">
135
136 </div>
137 </div>
138 <a id="a8fba44988deb98613c1505a4019a34dc"></a>
139 <h2 class="memtitle"><span class="permalink"><a href="#a8fba44988deb98613c1505a4019a34dc">&#9670;&nbsp;</a></span>domain</h2>
140
141 <div class="memitem">
142 <div class="memproto">
143 <table class="memname">
144 <tr>
145 <td class="memname">unsigned short hwloc_obj_attr_u::hwloc_pcidev_attr_s::domain</td>
146 </tr>
147 </table>
148 </div><div class="memdoc">
149
150 </div>
151 </div>
152 <a id="a695f32df53f4ef728670bfcf31b74e0f"></a>
153 <h2 class="memtitle"><span class="permalink"><a href="#a695f32df53f4ef728670bfcf31b74e0f">&#9670;&nbsp;</a></span>func</h2>
154
155 <div class="memitem">
156 <div class="memproto">
157 <table class="memname">
158 <tr>
159 <td class="memname">unsigned char hwloc_obj_attr_u::hwloc_pcidev_attr_s::func</td>
160 </tr>
161 </table>
162 </div><div class="memdoc">
163
164 </div>
165 </div>
166 <a id="a59b2fce35f7cbde86c4fd305d0ccda5f"></a>
167 <h2 class="memtitle"><span class="permalink"><a href="#a59b2fce35f7cbde86c4fd305d0ccda5f">&#9670;&nbsp;</a></span>linkspeed</h2>
168
169 <div class="memitem">
170 <div class="memproto">
171 <table class="memname">
172 <tr>
173 <td class="memname">float hwloc_obj_attr_u::hwloc_pcidev_attr_s::linkspeed</td>
174 </tr>
175 </table>
176 </div><div class="memdoc">
177
178 </div>
179 </div>
180 <a id="a13ad54c93d08d8ac808e4de9674c5ee7"></a>
181 <h2 class="memtitle"><span class="permalink"><a href="#a13ad54c93d08d8ac808e4de9674c5ee7">&#9670;&nbsp;</a></span>revision</h2>
182
183 <div class="memitem">
184 <div class="memproto">
185 <table class="memname">
186 <tr>
187 <td class="memname">unsigned char hwloc_obj_attr_u::hwloc_pcidev_attr_s::revision</td>
188 </tr>
189 </table>
190 </div><div class="memdoc">
191
192 </div>
193 </div>
194 <a id="acac741aecd7a6db64f33409427e3971f"></a>
195 <h2 class="memtitle"><span class="permalink"><a href="#acac741aecd7a6db64f33409427e3971f">&#9670;&nbsp;</a></span>subdevice_id</h2>
196
197 <div class="memitem">
198 <div class="memproto">
199 <table class="memname">
200 <tr>
201 <td class="memname">unsigned short hwloc_obj_attr_u::hwloc_pcidev_attr_s::subdevice_id</td>
202 </tr>
203 </table>
204 </div><div class="memdoc">
205
206 </div>
207 </div>
208 <a id="a499db3d8cc89eaba04fcaef3df1cba97"></a>
209 <h2 class="memtitle"><span class="permalink"><a href="#a499db3d8cc89eaba04fcaef3df1cba97">&#9670;&nbsp;</a></span>subvendor_id</h2>
210
211 <div class="memitem">
212 <div class="memproto">
213 <table class="memname">
214 <tr>
215 <td class="memname">unsigned short hwloc_obj_attr_u::hwloc_pcidev_attr_s::subvendor_id</td>
216 </tr>
217 </table>
218 </div><div class="memdoc">
219
220 </div>
221 </div>
222 <a id="aad970ad19b62eb2d5df30e4802da4f4c"></a>
223 <h2 class="memtitle"><span class="permalink"><a href="#aad970ad19b62eb2d5df30e4802da4f4c">&#9670;&nbsp;</a></span>vendor_id</h2>
224
225 <div class="memitem">
226 <div class="memproto">
227 <table class="memname">
228 <tr>
229 <td class="memname">unsigned short hwloc_obj_attr_u::hwloc_pcidev_attr_s::vendor_id</td>
230 </tr>
231 </table>
232 </div><div class="memdoc">
233
234 </div>
235 </div>
236 <hr/>The documentation for this struct was generated from the following file:<ul>
237 <li><a class="el" href="a00122_source.html">hwloc.h</a></li>
238 </ul>
239 </div><!-- contents -->
240 <!-- start footer part -->
241 <hr class="footer"/><address class="footer"><small>
242 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
243 </small></address>
244 </body>
245 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_obj_attr_u::hwloc_bridge_attr_s Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 <div id="nav-path" class="navpath">
40 <ul>
41 <li class="navelem"><a class="el" href="a00254.html">hwloc_obj_attr_u</a></li><li class="navelem"><a class="el" href="a00278.html">hwloc_bridge_attr_s</a></li> </ul>
42 </div>
43 </div><!-- top -->
44 <div class="header">
45 <div class="summary">
46 <a href="#pub-attribs">Data Fields</a> </div>
47 <div class="headertitle">
48 <div class="title">hwloc_obj_attr_u::hwloc_bridge_attr_s Struct Reference</div> </div>
49 </div><!--header-->
50 <div class="contents">
51
52 <p><code>#include &lt;<a class="el" href="a00122_source.html">hwloc.h</a>&gt;</code></p>
53 <table class="memberdecls">
54 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
55 Data Fields</h2></td></tr>
56 <tr class="memitem:ab62888c880f8bb730292722f5811958d"><td class="memItemLeft" >union {</td></tr>
57 <tr class="memitem:afbfb960b5aaf2b6e10d8d5d424b227d7"><td class="memItemLeft" >&#160;&#160;&#160;struct <a class="el" href="a00274.html">hwloc_pcidev_attr_s</a>&#160;&#160;&#160;<a class="el" href="a00278.html#ab5c564e7c95b747dae9eb84ec0a2c31e">pci</a></td></tr>
58 <tr class="separator:afbfb960b5aaf2b6e10d8d5d424b227d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
59 <tr class="memitem:ab62888c880f8bb730292722f5811958d"><td class="memItemLeft" valign="top">}&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00278.html#ab62888c880f8bb730292722f5811958d">upstream</a></td></tr>
60 <tr class="separator:ab62888c880f8bb730292722f5811958d"><td class="memSeparator" colspan="2">&#160;</td></tr>
61 <tr class="memitem:a265dd2164aa2df4972e25a029da72125"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00193.html#gab34362c7a23296c3f12c5756747abda3">hwloc_obj_bridge_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00278.html#a265dd2164aa2df4972e25a029da72125">upstream_type</a></td></tr>
62 <tr class="separator:a265dd2164aa2df4972e25a029da72125"><td class="memSeparator" colspan="2">&#160;</td></tr>
63 <tr class="memitem:a7d5db91d655ba23ffe9bda7a2cbcb9a8"><td class="memItemLeft" >union {</td></tr>
64 <tr class="memitem:a9bfa9c4f529c8d9798aca8d02705fd8f"><td class="memItemLeft" >&#160;&#160;&#160;struct {</td></tr>
65 <tr class="memitem:afcdd4077c7c574e4791eefbdf8fb5d9e"><td class="memItemLeft" >&#160;&#160;&#160;&#160;&#160;&#160;unsigned short&#160;&#160;&#160;<a class="el" href="a00278.html#a2c31e565a5f0d23d0a0a3dd3ec8f4b17">domain</a></td></tr>
66 <tr class="separator:afcdd4077c7c574e4791eefbdf8fb5d9e"><td class="memSeparator" colspan="2">&#160;</td></tr>
67 <tr class="memitem:a5e2836eb053bf87e3f7430b5470dedca"><td class="memItemLeft" >&#160;&#160;&#160;&#160;&#160;&#160;unsigned char&#160;&#160;&#160;<a class="el" href="a00278.html#ae2d9dd73ef1d32045c584a8e66d2f83f">secondary_bus</a></td></tr>
68 <tr class="separator:a5e2836eb053bf87e3f7430b5470dedca"><td class="memSeparator" colspan="2">&#160;</td></tr>
69 <tr class="memitem:aae5989d9a424dd74ff22da89e6ed245b"><td class="memItemLeft" >&#160;&#160;&#160;&#160;&#160;&#160;unsigned char&#160;&#160;&#160;<a class="el" href="a00278.html#af3f3f7d76bf03e8d2afa721c2b8d6771">subordinate_bus</a></td></tr>
70 <tr class="separator:aae5989d9a424dd74ff22da89e6ed245b"><td class="memSeparator" colspan="2">&#160;</td></tr>
71 <tr class="memitem:a9bfa9c4f529c8d9798aca8d02705fd8f"><td class="memItemLeft" valign="top">&#160;&#160;&#160;}&#160;&#160;&#160;<a class="el" href="a00278.html#a2fdc40034b915d504724b35cc776a4ec">pci</a></td></tr>
72 <tr class="separator:a9bfa9c4f529c8d9798aca8d02705fd8f"><td class="memSeparator" colspan="2">&#160;</td></tr>
73 <tr class="memitem:a7d5db91d655ba23ffe9bda7a2cbcb9a8"><td class="memItemLeft" valign="top">}&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00278.html#a7d5db91d655ba23ffe9bda7a2cbcb9a8">downstream</a></td></tr>
74 <tr class="separator:a7d5db91d655ba23ffe9bda7a2cbcb9a8"><td class="memSeparator" colspan="2">&#160;</td></tr>
75 <tr class="memitem:ac6a169b672d0e9f75756fd5665828b93"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00193.html#gab34362c7a23296c3f12c5756747abda3">hwloc_obj_bridge_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00278.html#ac6a169b672d0e9f75756fd5665828b93">downstream_type</a></td></tr>
76 <tr class="separator:ac6a169b672d0e9f75756fd5665828b93"><td class="memSeparator" colspan="2">&#160;</td></tr>
77 <tr class="memitem:a336c8b22893d5d734d8c9dfca4066b46"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00278.html#a336c8b22893d5d734d8c9dfca4066b46">depth</a></td></tr>
78 <tr class="separator:a336c8b22893d5d734d8c9dfca4066b46"><td class="memSeparator" colspan="2">&#160;</td></tr>
79 </table>
80 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
81 <div class="textblock"><p>Bridge specific Object Attribues. </p>
82 </div><h2 class="groupheader">Field Documentation</h2>
83 <a id="a336c8b22893d5d734d8c9dfca4066b46"></a>
84 <h2 class="memtitle"><span class="permalink"><a href="#a336c8b22893d5d734d8c9dfca4066b46">&#9670;&nbsp;</a></span>depth</h2>
85
86 <div class="memitem">
87 <div class="memproto">
88 <table class="memname">
89 <tr>
90 <td class="memname">unsigned hwloc_obj_attr_u::hwloc_bridge_attr_s::depth</td>
91 </tr>
92 </table>
93 </div><div class="memdoc">
94
95 </div>
96 </div>
97 <a id="a2c31e565a5f0d23d0a0a3dd3ec8f4b17"></a>
98 <h2 class="memtitle"><span class="permalink"><a href="#a2c31e565a5f0d23d0a0a3dd3ec8f4b17">&#9670;&nbsp;</a></span>domain</h2>
99
100 <div class="memitem">
101 <div class="memproto">
102 <table class="memname">
103 <tr>
104 <td class="memname">unsigned short hwloc_obj_attr_u::hwloc_bridge_attr_s::domain</td>
105 </tr>
106 </table>
107 </div><div class="memdoc">
108
109 </div>
110 </div>
111 <a id="a7d5db91d655ba23ffe9bda7a2cbcb9a8"></a>
112 <h2 class="memtitle"><span class="permalink"><a href="#a7d5db91d655ba23ffe9bda7a2cbcb9a8">&#9670;&nbsp;</a></span></h2>
113
114 <div class="memitem">
115 <div class="memproto">
116 <table class="memname">
117 <tr>
118 <td class="memname">union { ... } hwloc_obj_attr_u::hwloc_bridge_attr_s::downstream</td>
119 </tr>
120 </table>
121 </div><div class="memdoc">
122
123 </div>
124 </div>
125 <a id="ac6a169b672d0e9f75756fd5665828b93"></a>
126 <h2 class="memtitle"><span class="permalink"><a href="#ac6a169b672d0e9f75756fd5665828b93">&#9670;&nbsp;</a></span>downstream_type</h2>
127
128 <div class="memitem">
129 <div class="memproto">
130 <table class="memname">
131 <tr>
132 <td class="memname"><a class="el" href="a00193.html#gab34362c7a23296c3f12c5756747abda3">hwloc_obj_bridge_type_t</a> hwloc_obj_attr_u::hwloc_bridge_attr_s::downstream_type</td>
133 </tr>
134 </table>
135 </div><div class="memdoc">
136
137 </div>
138 </div>
139 <a id="a2fdc40034b915d504724b35cc776a4ec"></a>
140 <h2 class="memtitle"><span class="permalink"><a href="#a2fdc40034b915d504724b35cc776a4ec">&#9670;&nbsp;</a></span> <span class="overload">[1/2]</span></h2>
141
142 <div class="memitem">
143 <div class="memproto">
144 <table class="memname">
145 <tr>
146 <td class="memname">struct { ... } hwloc_obj_attr_u::hwloc_bridge_attr_s::pci</td>
147 </tr>
148 </table>
149 </div><div class="memdoc">
150
151 </div>
152 </div>
153 <a id="ab5c564e7c95b747dae9eb84ec0a2c31e"></a>
154 <h2 class="memtitle"><span class="permalink"><a href="#ab5c564e7c95b747dae9eb84ec0a2c31e">&#9670;&nbsp;</a></span>pci <span class="overload">[2/2]</span></h2>
155
156 <div class="memitem">
157 <div class="memproto">
158 <table class="memname">
159 <tr>
160 <td class="memname">struct <a class="el" href="a00274.html">hwloc_pcidev_attr_s</a> hwloc_obj_attr_u::hwloc_bridge_attr_s::pci</td>
161 </tr>
162 </table>
163 </div><div class="memdoc">
164
165 </div>
166 </div>
167 <a id="ae2d9dd73ef1d32045c584a8e66d2f83f"></a>
168 <h2 class="memtitle"><span class="permalink"><a href="#ae2d9dd73ef1d32045c584a8e66d2f83f">&#9670;&nbsp;</a></span>secondary_bus</h2>
169
170 <div class="memitem">
171 <div class="memproto">
172 <table class="memname">
173 <tr>
174 <td class="memname">unsigned char hwloc_obj_attr_u::hwloc_bridge_attr_s::secondary_bus</td>
175 </tr>
176 </table>
177 </div><div class="memdoc">
178
179 </div>
180 </div>
181 <a id="af3f3f7d76bf03e8d2afa721c2b8d6771"></a>
182 <h2 class="memtitle"><span class="permalink"><a href="#af3f3f7d76bf03e8d2afa721c2b8d6771">&#9670;&nbsp;</a></span>subordinate_bus</h2>
183
184 <div class="memitem">
185 <div class="memproto">
186 <table class="memname">
187 <tr>
188 <td class="memname">unsigned char hwloc_obj_attr_u::hwloc_bridge_attr_s::subordinate_bus</td>
189 </tr>
190 </table>
191 </div><div class="memdoc">
192
193 </div>
194 </div>
195 <a id="ab62888c880f8bb730292722f5811958d"></a>
196 <h2 class="memtitle"><span class="permalink"><a href="#ab62888c880f8bb730292722f5811958d">&#9670;&nbsp;</a></span></h2>
197
198 <div class="memitem">
199 <div class="memproto">
200 <table class="memname">
201 <tr>
202 <td class="memname">union { ... } hwloc_obj_attr_u::hwloc_bridge_attr_s::upstream</td>
203 </tr>
204 </table>
205 </div><div class="memdoc">
206
207 </div>
208 </div>
209 <a id="a265dd2164aa2df4972e25a029da72125"></a>
210 <h2 class="memtitle"><span class="permalink"><a href="#a265dd2164aa2df4972e25a029da72125">&#9670;&nbsp;</a></span>upstream_type</h2>
211
212 <div class="memitem">
213 <div class="memproto">
214 <table class="memname">
215 <tr>
216 <td class="memname"><a class="el" href="a00193.html#gab34362c7a23296c3f12c5756747abda3">hwloc_obj_bridge_type_t</a> hwloc_obj_attr_u::hwloc_bridge_attr_s::upstream_type</td>
217 </tr>
218 </table>
219 </div><div class="memdoc">
220
221 </div>
222 </div>
223 <hr/>The documentation for this struct was generated from the following file:<ul>
224 <li><a class="el" href="a00122_source.html">hwloc.h</a></li>
225 </ul>
226 </div><!-- contents -->
227 <!-- start footer part -->
228 <hr class="footer"/><address class="footer"><small>
229 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
230 </small></address>
231 </body>
232 </html>
+0
-86
doc/doxygen-doc/html/a00288.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_obj_attr_u::hwloc_osdev_attr_s Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 <div id="nav-path" class="navpath">
40 <ul>
41 <li class="navelem"><a class="el" href="a00248.html">hwloc_obj_attr_u</a></li><li class="navelem"><a class="el" href="a00288.html">hwloc_osdev_attr_s</a></li> </ul>
42 </div>
43 </div><!-- top -->
44 <div class="header">
45 <div class="summary">
46 <a href="#pub-attribs">Data Fields</a> </div>
47 <div class="headertitle">
48 <div class="title">hwloc_obj_attr_u::hwloc_osdev_attr_s Struct Reference</div> </div>
49 </div><!--header-->
50 <div class="contents">
51
52 <p><code>#include &lt;<a class="el" href="a00125_source.html">hwloc.h</a>&gt;</code></p>
53 <table class="memberdecls">
54 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
55 Data Fields</h2></td></tr>
56 <tr class="memitem:a31e019e27e54ac6138d04be639bb96f9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00190.html#gaa9a6941ef7b1c169412518d7ef71b3d2">hwloc_obj_osdev_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00288.html#a31e019e27e54ac6138d04be639bb96f9">type</a></td></tr>
57 <tr class="separator:a31e019e27e54ac6138d04be639bb96f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 </table>
59 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
60 <div class="textblock"><p>OS Device specific Object Attributes. </p>
61 </div><h2 class="groupheader">Field Documentation</h2>
62 <a id="a31e019e27e54ac6138d04be639bb96f9"></a>
63 <h2 class="memtitle"><span class="permalink"><a href="#a31e019e27e54ac6138d04be639bb96f9">&#9670;&nbsp;</a></span>type</h2>
64
65 <div class="memitem">
66 <div class="memproto">
67 <table class="memname">
68 <tr>
69 <td class="memname"><a class="el" href="a00190.html#gaa9a6941ef7b1c169412518d7ef71b3d2">hwloc_obj_osdev_type_t</a> hwloc_obj_attr_u::hwloc_osdev_attr_s::type</td>
70 </tr>
71 </table>
72 </div><div class="memdoc">
73
74 </div>
75 </div>
76 <hr/>The documentation for this struct was generated from the following file:<ul>
77 <li><a class="el" href="a00125_source.html">hwloc.h</a></li>
78 </ul>
79 </div><!-- contents -->
80 <!-- start footer part -->
81 <hr class="footer"/><address class="footer"><small>
82 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
83 </small></address>
84 </body>
85 </html>
+0
-103
doc/doxygen-doc/html/a00292.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_info_s Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#pub-attribs">Data Fields</a> </div>
43 <div class="headertitle">
44 <div class="title">hwloc_info_s Struct Reference<div class="ingroups"><a class="el" href="a00191.html">Object Structure and Attributes</a></div></div> </div>
45 </div><!--header-->
46 <div class="contents">
47
48 <p><code>#include &lt;<a class="el" href="a00125_source.html">hwloc.h</a>&gt;</code></p>
49 <table class="memberdecls">
50 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
51 Data Fields</h2></td></tr>
52 <tr class="memitem:a12ce1309e4381ae38b5c15d242a47124"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00292.html#a12ce1309e4381ae38b5c15d242a47124">name</a></td></tr>
53 <tr class="separator:a12ce1309e4381ae38b5c15d242a47124"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:a788a0073bafe660645e7b69f31a43bbb"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00292.html#a788a0073bafe660645e7b69f31a43bbb">value</a></td></tr>
55 <tr class="separator:a788a0073bafe660645e7b69f31a43bbb"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 </table>
57 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
58 <div class="textblock"><p>Object info. </p>
59 <dl class="section see"><dt>See also</dt><dd><a class="el" href="a00195.html">Consulting and Adding Key-Value Info Attributes</a> </dd></dl>
60 </div><h2 class="groupheader">Field Documentation</h2>
61 <a id="a12ce1309e4381ae38b5c15d242a47124"></a>
62 <h2 class="memtitle"><span class="permalink"><a href="#a12ce1309e4381ae38b5c15d242a47124">&#9670;&nbsp;</a></span>name</h2>
63
64 <div class="memitem">
65 <div class="memproto">
66 <table class="memname">
67 <tr>
68 <td class="memname">char* hwloc_info_s::name</td>
69 </tr>
70 </table>
71 </div><div class="memdoc">
72
73 <p>Info name. </p>
74
75 </div>
76 </div>
77 <a id="a788a0073bafe660645e7b69f31a43bbb"></a>
78 <h2 class="memtitle"><span class="permalink"><a href="#a788a0073bafe660645e7b69f31a43bbb">&#9670;&nbsp;</a></span>value</h2>
79
80 <div class="memitem">
81 <div class="memproto">
82 <table class="memname">
83 <tr>
84 <td class="memname">char* hwloc_info_s::value</td>
85 </tr>
86 </table>
87 </div><div class="memdoc">
88
89 <p>Info value. </p>
90
91 </div>
92 </div>
93 <hr/>The documentation for this struct was generated from the following file:<ul>
94 <li><a class="el" href="a00125_source.html">hwloc.h</a></li>
95 </ul>
96 </div><!-- contents -->
97 <!-- start footer part -->
98 <hr class="footer"/><address class="footer"><small>
99 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
100 </small></address>
101 </body>
102 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_obj_attr_u::hwloc_osdev_attr_s Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 <div id="nav-path" class="navpath">
40 <ul>
41 <li class="navelem"><a class="el" href="a00254.html">hwloc_obj_attr_u</a></li><li class="navelem"><a class="el" href="a00294.html">hwloc_osdev_attr_s</a></li> </ul>
42 </div>
43 </div><!-- top -->
44 <div class="header">
45 <div class="summary">
46 <a href="#pub-attribs">Data Fields</a> </div>
47 <div class="headertitle">
48 <div class="title">hwloc_obj_attr_u::hwloc_osdev_attr_s Struct Reference</div> </div>
49 </div><!--header-->
50 <div class="contents">
51
52 <p><code>#include &lt;<a class="el" href="a00122_source.html">hwloc.h</a>&gt;</code></p>
53 <table class="memberdecls">
54 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
55 Data Fields</h2></td></tr>
56 <tr class="memitem:a31e019e27e54ac6138d04be639bb96f9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00193.html#gaa9a6941ef7b1c169412518d7ef71b3d2">hwloc_obj_osdev_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00294.html#a31e019e27e54ac6138d04be639bb96f9">type</a></td></tr>
57 <tr class="separator:a31e019e27e54ac6138d04be639bb96f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 </table>
59 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
60 <div class="textblock"><p>OS Device specific Object Attributes. </p>
61 </div><h2 class="groupheader">Field Documentation</h2>
62 <a id="a31e019e27e54ac6138d04be639bb96f9"></a>
63 <h2 class="memtitle"><span class="permalink"><a href="#a31e019e27e54ac6138d04be639bb96f9">&#9670;&nbsp;</a></span>type</h2>
64
65 <div class="memitem">
66 <div class="memproto">
67 <table class="memname">
68 <tr>
69 <td class="memname"><a class="el" href="a00193.html#gaa9a6941ef7b1c169412518d7ef71b3d2">hwloc_obj_osdev_type_t</a> hwloc_obj_attr_u::hwloc_osdev_attr_s::type</td>
70 </tr>
71 </table>
72 </div><div class="memdoc">
73
74 </div>
75 </div>
76 <hr/>The documentation for this struct was generated from the following file:<ul>
77 <li><a class="el" href="a00122_source.html">hwloc.h</a></li>
78 </ul>
79 </div><!-- contents -->
80 <!-- start footer part -->
81 <hr class="footer"/><address class="footer"><small>
82 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
83 </small></address>
84 </body>
85 </html>
+0
-174
doc/doxygen-doc/html/a00296.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_topology_discovery_support Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#pub-attribs">Data Fields</a> </div>
43 <div class="headertitle">
44 <div class="title">hwloc_topology_discovery_support Struct Reference<div class="ingroups"><a class="el" href="a00199.html">Topology Detection Configuration and Query</a></div></div> </div>
45 </div><!--header-->
46 <div class="contents">
47
48 <p><code>#include &lt;<a class="el" href="a00125_source.html">hwloc.h</a>&gt;</code></p>
49 <table class="memberdecls">
50 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
51 Data Fields</h2></td></tr>
52 <tr class="memitem:ad7bb4ecf7a82f5a04fc632e9592ad3ab"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00296.html#ad7bb4ecf7a82f5a04fc632e9592ad3ab">pu</a></td></tr>
53 <tr class="separator:ad7bb4ecf7a82f5a04fc632e9592ad3ab"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:a955f96066cb9e4cd34e2a3710ad43e80"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00296.html#a955f96066cb9e4cd34e2a3710ad43e80">numa</a></td></tr>
55 <tr class="separator:a955f96066cb9e4cd34e2a3710ad43e80"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:af193eb858e40e12ef4923f5ed0e1f11a"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00296.html#af193eb858e40e12ef4923f5ed0e1f11a">numa_memory</a></td></tr>
57 <tr class="separator:af193eb858e40e12ef4923f5ed0e1f11a"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:af3c97b28781a2972cf8eaaf94a6617da"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00296.html#af3c97b28781a2972cf8eaaf94a6617da">disallowed_pu</a></td></tr>
59 <tr class="separator:af3c97b28781a2972cf8eaaf94a6617da"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:a970e65235873bcdb9669a9805161ce03"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00296.html#a970e65235873bcdb9669a9805161ce03">disallowed_numa</a></td></tr>
61 <tr class="separator:a970e65235873bcdb9669a9805161ce03"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:aba80d6f9c15e2395f9ed61db9ff3b75d"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00296.html#aba80d6f9c15e2395f9ed61db9ff3b75d">cpukind_efficiency</a></td></tr>
63 <tr class="separator:aba80d6f9c15e2395f9ed61db9ff3b75d"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 </table>
65 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
66 <div class="textblock"><p>Flags describing actual discovery support for this topology. </p>
67 </div><h2 class="groupheader">Field Documentation</h2>
68 <a id="aba80d6f9c15e2395f9ed61db9ff3b75d"></a>
69 <h2 class="memtitle"><span class="permalink"><a href="#aba80d6f9c15e2395f9ed61db9ff3b75d">&#9670;&nbsp;</a></span>cpukind_efficiency</h2>
70
71 <div class="memitem">
72 <div class="memproto">
73 <table class="memname">
74 <tr>
75 <td class="memname">unsigned char hwloc_topology_discovery_support::cpukind_efficiency</td>
76 </tr>
77 </table>
78 </div><div class="memdoc">
79
80 <p>Detecting the efficiency of CPU kinds is supported, see <a class="el" href="a00219.html">Kinds of CPU cores</a>. </p>
81
82 </div>
83 </div>
84 <a id="a970e65235873bcdb9669a9805161ce03"></a>
85 <h2 class="memtitle"><span class="permalink"><a href="#a970e65235873bcdb9669a9805161ce03">&#9670;&nbsp;</a></span>disallowed_numa</h2>
86
87 <div class="memitem">
88 <div class="memproto">
89 <table class="memname">
90 <tr>
91 <td class="memname">unsigned char hwloc_topology_discovery_support::disallowed_numa</td>
92 </tr>
93 </table>
94 </div><div class="memdoc">
95
96 <p>Detecting and identifying NUMA nodes that are not available to the current process is supported. </p>
97
98 </div>
99 </div>
100 <a id="af3c97b28781a2972cf8eaaf94a6617da"></a>
101 <h2 class="memtitle"><span class="permalink"><a href="#af3c97b28781a2972cf8eaaf94a6617da">&#9670;&nbsp;</a></span>disallowed_pu</h2>
102
103 <div class="memitem">
104 <div class="memproto">
105 <table class="memname">
106 <tr>
107 <td class="memname">unsigned char hwloc_topology_discovery_support::disallowed_pu</td>
108 </tr>
109 </table>
110 </div><div class="memdoc">
111
112 <p>Detecting and identifying PU objects that are not available to the current process is supported. </p>
113
114 </div>
115 </div>
116 <a id="a955f96066cb9e4cd34e2a3710ad43e80"></a>
117 <h2 class="memtitle"><span class="permalink"><a href="#a955f96066cb9e4cd34e2a3710ad43e80">&#9670;&nbsp;</a></span>numa</h2>
118
119 <div class="memitem">
120 <div class="memproto">
121 <table class="memname">
122 <tr>
123 <td class="memname">unsigned char hwloc_topology_discovery_support::numa</td>
124 </tr>
125 </table>
126 </div><div class="memdoc">
127
128 <p>Detecting the number of NUMA nodes is supported. </p>
129
130 </div>
131 </div>
132 <a id="af193eb858e40e12ef4923f5ed0e1f11a"></a>
133 <h2 class="memtitle"><span class="permalink"><a href="#af193eb858e40e12ef4923f5ed0e1f11a">&#9670;&nbsp;</a></span>numa_memory</h2>
134
135 <div class="memitem">
136 <div class="memproto">
137 <table class="memname">
138 <tr>
139 <td class="memname">unsigned char hwloc_topology_discovery_support::numa_memory</td>
140 </tr>
141 </table>
142 </div><div class="memdoc">
143
144 <p>Detecting the amount of memory in NUMA nodes is supported. </p>
145
146 </div>
147 </div>
148 <a id="ad7bb4ecf7a82f5a04fc632e9592ad3ab"></a>
149 <h2 class="memtitle"><span class="permalink"><a href="#ad7bb4ecf7a82f5a04fc632e9592ad3ab">&#9670;&nbsp;</a></span>pu</h2>
150
151 <div class="memitem">
152 <div class="memproto">
153 <table class="memname">
154 <tr>
155 <td class="memname">unsigned char hwloc_topology_discovery_support::pu</td>
156 </tr>
157 </table>
158 </div><div class="memdoc">
159
160 <p>Detecting the number of PU objects is supported. </p>
161
162 </div>
163 </div>
164 <hr/>The documentation for this struct was generated from the following file:<ul>
165 <li><a class="el" href="a00125_source.html">hwloc.h</a></li>
166 </ul>
167 </div><!-- contents -->
168 <!-- start footer part -->
169 <hr class="footer"/><address class="footer"><small>
170 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
171 </small></address>
172 </body>
173 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_info_s Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#pub-attribs">Data Fields</a> </div>
43 <div class="headertitle">
44 <div class="title">hwloc_info_s Struct Reference<div class="ingroups"><a class="el" href="a00194.html">Object Structure and Attributes</a></div></div> </div>
45 </div><!--header-->
46 <div class="contents">
47
48 <p><code>#include &lt;<a class="el" href="a00122_source.html">hwloc.h</a>&gt;</code></p>
49 <table class="memberdecls">
50 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
51 Data Fields</h2></td></tr>
52 <tr class="memitem:a12ce1309e4381ae38b5c15d242a47124"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00298.html#a12ce1309e4381ae38b5c15d242a47124">name</a></td></tr>
53 <tr class="separator:a12ce1309e4381ae38b5c15d242a47124"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:a788a0073bafe660645e7b69f31a43bbb"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00298.html#a788a0073bafe660645e7b69f31a43bbb">value</a></td></tr>
55 <tr class="separator:a788a0073bafe660645e7b69f31a43bbb"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 </table>
57 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
58 <div class="textblock"><p>Object info. </p>
59 <dl class="section see"><dt>See also</dt><dd><a class="el" href="a00198.html">Consulting and Adding Key-Value Info Attributes</a> </dd></dl>
60 </div><h2 class="groupheader">Field Documentation</h2>
61 <a id="a12ce1309e4381ae38b5c15d242a47124"></a>
62 <h2 class="memtitle"><span class="permalink"><a href="#a12ce1309e4381ae38b5c15d242a47124">&#9670;&nbsp;</a></span>name</h2>
63
64 <div class="memitem">
65 <div class="memproto">
66 <table class="memname">
67 <tr>
68 <td class="memname">char* hwloc_info_s::name</td>
69 </tr>
70 </table>
71 </div><div class="memdoc">
72
73 <p>Info name. </p>
74
75 </div>
76 </div>
77 <a id="a788a0073bafe660645e7b69f31a43bbb"></a>
78 <h2 class="memtitle"><span class="permalink"><a href="#a788a0073bafe660645e7b69f31a43bbb">&#9670;&nbsp;</a></span>value</h2>
79
80 <div class="memitem">
81 <div class="memproto">
82 <table class="memname">
83 <tr>
84 <td class="memname">char* hwloc_info_s::value</td>
85 </tr>
86 </table>
87 </div><div class="memdoc">
88
89 <p>Info value. </p>
90
91 </div>
92 </div>
93 <hr/>The documentation for this struct was generated from the following file:<ul>
94 <li><a class="el" href="a00122_source.html">hwloc.h</a></li>
95 </ul>
96 </div><!-- contents -->
97 <!-- start footer part -->
98 <hr class="footer"/><address class="footer"><small>
99 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
100 </small></address>
101 </body>
102 </html>
+0
-254
doc/doxygen-doc/html/a00300.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_topology_cpubind_support Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#pub-attribs">Data Fields</a> </div>
43 <div class="headertitle">
44 <div class="title">hwloc_topology_cpubind_support Struct Reference<div class="ingroups"><a class="el" href="a00199.html">Topology Detection Configuration and Query</a></div></div> </div>
45 </div><!--header-->
46 <div class="contents">
47
48 <p><code>#include &lt;<a class="el" href="a00125_source.html">hwloc.h</a>&gt;</code></p>
49 <table class="memberdecls">
50 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
51 Data Fields</h2></td></tr>
52 <tr class="memitem:a9403d51657a4d546b3ea9553a2973a27"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00300.html#a9403d51657a4d546b3ea9553a2973a27">set_thisproc_cpubind</a></td></tr>
53 <tr class="separator:a9403d51657a4d546b3ea9553a2973a27"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:a77a09ddd78ee3e9ff5f532a6ac74f7eb"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00300.html#a77a09ddd78ee3e9ff5f532a6ac74f7eb">get_thisproc_cpubind</a></td></tr>
55 <tr class="separator:a77a09ddd78ee3e9ff5f532a6ac74f7eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:aa166223d1c2a6de7256ab2d8b675a87e"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00300.html#aa166223d1c2a6de7256ab2d8b675a87e">set_proc_cpubind</a></td></tr>
57 <tr class="separator:aa166223d1c2a6de7256ab2d8b675a87e"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:aae705bc447adc163ead377362c4dfe9f"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00300.html#aae705bc447adc163ead377362c4dfe9f">get_proc_cpubind</a></td></tr>
59 <tr class="separator:aae705bc447adc163ead377362c4dfe9f"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:a57a89a4b5f1f74fa6cfe176f1e8b0798"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00300.html#a57a89a4b5f1f74fa6cfe176f1e8b0798">set_thisthread_cpubind</a></td></tr>
61 <tr class="separator:a57a89a4b5f1f74fa6cfe176f1e8b0798"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:a80d762e532d677dff262d83cc7bb1c60"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00300.html#a80d762e532d677dff262d83cc7bb1c60">get_thisthread_cpubind</a></td></tr>
63 <tr class="separator:a80d762e532d677dff262d83cc7bb1c60"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 <tr class="memitem:a46fba33e307909ce256624687799dd6d"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00300.html#a46fba33e307909ce256624687799dd6d">set_thread_cpubind</a></td></tr>
65 <tr class="separator:a46fba33e307909ce256624687799dd6d"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 <tr class="memitem:a8dd4d8531ed2eebdce1507e7d104154e"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00300.html#a8dd4d8531ed2eebdce1507e7d104154e">get_thread_cpubind</a></td></tr>
67 <tr class="separator:a8dd4d8531ed2eebdce1507e7d104154e"><td class="memSeparator" colspan="2">&#160;</td></tr>
68 <tr class="memitem:ad2d5c94b738d92b7d2ede87e4e96321d"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00300.html#ad2d5c94b738d92b7d2ede87e4e96321d">get_thisproc_last_cpu_location</a></td></tr>
69 <tr class="separator:ad2d5c94b738d92b7d2ede87e4e96321d"><td class="memSeparator" colspan="2">&#160;</td></tr>
70 <tr class="memitem:a2554620148b7992a5093f338f5ae254f"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00300.html#a2554620148b7992a5093f338f5ae254f">get_proc_last_cpu_location</a></td></tr>
71 <tr class="separator:a2554620148b7992a5093f338f5ae254f"><td class="memSeparator" colspan="2">&#160;</td></tr>
72 <tr class="memitem:a6be1f042fdce6bf41b4ea39f6f193808"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00300.html#a6be1f042fdce6bf41b4ea39f6f193808">get_thisthread_last_cpu_location</a></td></tr>
73 <tr class="separator:a6be1f042fdce6bf41b4ea39f6f193808"><td class="memSeparator" colspan="2">&#160;</td></tr>
74 </table>
75 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
76 <div class="textblock"><p>Flags describing actual PU binding support for this topology. </p>
77 <p>A flag may be set even if the feature isn't supported in all cases (e.g. binding to random sets of non-contiguous objects). </p>
78 </div><h2 class="groupheader">Field Documentation</h2>
79 <a id="aae705bc447adc163ead377362c4dfe9f"></a>
80 <h2 class="memtitle"><span class="permalink"><a href="#aae705bc447adc163ead377362c4dfe9f">&#9670;&nbsp;</a></span>get_proc_cpubind</h2>
81
82 <div class="memitem">
83 <div class="memproto">
84 <table class="memname">
85 <tr>
86 <td class="memname">unsigned char hwloc_topology_cpubind_support::get_proc_cpubind</td>
87 </tr>
88 </table>
89 </div><div class="memdoc">
90 <p>Getting the binding of a whole given process is supported. </p>
91
92 </div>
93 </div>
94 <a id="a2554620148b7992a5093f338f5ae254f"></a>
95 <h2 class="memtitle"><span class="permalink"><a href="#a2554620148b7992a5093f338f5ae254f">&#9670;&nbsp;</a></span>get_proc_last_cpu_location</h2>
96
97 <div class="memitem">
98 <div class="memproto">
99 <table class="memname">
100 <tr>
101 <td class="memname">unsigned char hwloc_topology_cpubind_support::get_proc_last_cpu_location</td>
102 </tr>
103 </table>
104 </div><div class="memdoc">
105 <p>Getting the last processors where a whole process ran is supported </p>
106
107 </div>
108 </div>
109 <a id="a77a09ddd78ee3e9ff5f532a6ac74f7eb"></a>
110 <h2 class="memtitle"><span class="permalink"><a href="#a77a09ddd78ee3e9ff5f532a6ac74f7eb">&#9670;&nbsp;</a></span>get_thisproc_cpubind</h2>
111
112 <div class="memitem">
113 <div class="memproto">
114 <table class="memname">
115 <tr>
116 <td class="memname">unsigned char hwloc_topology_cpubind_support::get_thisproc_cpubind</td>
117 </tr>
118 </table>
119 </div><div class="memdoc">
120 <p>Getting the binding of the whole current process is supported. </p>
121
122 </div>
123 </div>
124 <a id="ad2d5c94b738d92b7d2ede87e4e96321d"></a>
125 <h2 class="memtitle"><span class="permalink"><a href="#ad2d5c94b738d92b7d2ede87e4e96321d">&#9670;&nbsp;</a></span>get_thisproc_last_cpu_location</h2>
126
127 <div class="memitem">
128 <div class="memproto">
129 <table class="memname">
130 <tr>
131 <td class="memname">unsigned char hwloc_topology_cpubind_support::get_thisproc_last_cpu_location</td>
132 </tr>
133 </table>
134 </div><div class="memdoc">
135 <p>Getting the last processors where the whole current process ran is supported </p>
136
137 </div>
138 </div>
139 <a id="a80d762e532d677dff262d83cc7bb1c60"></a>
140 <h2 class="memtitle"><span class="permalink"><a href="#a80d762e532d677dff262d83cc7bb1c60">&#9670;&nbsp;</a></span>get_thisthread_cpubind</h2>
141
142 <div class="memitem">
143 <div class="memproto">
144 <table class="memname">
145 <tr>
146 <td class="memname">unsigned char hwloc_topology_cpubind_support::get_thisthread_cpubind</td>
147 </tr>
148 </table>
149 </div><div class="memdoc">
150 <p>Getting the binding of the current thread only is supported. </p>
151
152 </div>
153 </div>
154 <a id="a6be1f042fdce6bf41b4ea39f6f193808"></a>
155 <h2 class="memtitle"><span class="permalink"><a href="#a6be1f042fdce6bf41b4ea39f6f193808">&#9670;&nbsp;</a></span>get_thisthread_last_cpu_location</h2>
156
157 <div class="memitem">
158 <div class="memproto">
159 <table class="memname">
160 <tr>
161 <td class="memname">unsigned char hwloc_topology_cpubind_support::get_thisthread_last_cpu_location</td>
162 </tr>
163 </table>
164 </div><div class="memdoc">
165 <p>Getting the last processors where the current thread ran is supported </p>
166
167 </div>
168 </div>
169 <a id="a8dd4d8531ed2eebdce1507e7d104154e"></a>
170 <h2 class="memtitle"><span class="permalink"><a href="#a8dd4d8531ed2eebdce1507e7d104154e">&#9670;&nbsp;</a></span>get_thread_cpubind</h2>
171
172 <div class="memitem">
173 <div class="memproto">
174 <table class="memname">
175 <tr>
176 <td class="memname">unsigned char hwloc_topology_cpubind_support::get_thread_cpubind</td>
177 </tr>
178 </table>
179 </div><div class="memdoc">
180 <p>Getting the binding of a given thread only is supported. </p>
181
182 </div>
183 </div>
184 <a id="aa166223d1c2a6de7256ab2d8b675a87e"></a>
185 <h2 class="memtitle"><span class="permalink"><a href="#aa166223d1c2a6de7256ab2d8b675a87e">&#9670;&nbsp;</a></span>set_proc_cpubind</h2>
186
187 <div class="memitem">
188 <div class="memproto">
189 <table class="memname">
190 <tr>
191 <td class="memname">unsigned char hwloc_topology_cpubind_support::set_proc_cpubind</td>
192 </tr>
193 </table>
194 </div><div class="memdoc">
195 <p>Binding a whole given process is supported. </p>
196
197 </div>
198 </div>
199 <a id="a9403d51657a4d546b3ea9553a2973a27"></a>
200 <h2 class="memtitle"><span class="permalink"><a href="#a9403d51657a4d546b3ea9553a2973a27">&#9670;&nbsp;</a></span>set_thisproc_cpubind</h2>
201
202 <div class="memitem">
203 <div class="memproto">
204 <table class="memname">
205 <tr>
206 <td class="memname">unsigned char hwloc_topology_cpubind_support::set_thisproc_cpubind</td>
207 </tr>
208 </table>
209 </div><div class="memdoc">
210 <p>Binding the whole current process is supported. </p>
211
212 </div>
213 </div>
214 <a id="a57a89a4b5f1f74fa6cfe176f1e8b0798"></a>
215 <h2 class="memtitle"><span class="permalink"><a href="#a57a89a4b5f1f74fa6cfe176f1e8b0798">&#9670;&nbsp;</a></span>set_thisthread_cpubind</h2>
216
217 <div class="memitem">
218 <div class="memproto">
219 <table class="memname">
220 <tr>
221 <td class="memname">unsigned char hwloc_topology_cpubind_support::set_thisthread_cpubind</td>
222 </tr>
223 </table>
224 </div><div class="memdoc">
225 <p>Binding the current thread only is supported. </p>
226
227 </div>
228 </div>
229 <a id="a46fba33e307909ce256624687799dd6d"></a>
230 <h2 class="memtitle"><span class="permalink"><a href="#a46fba33e307909ce256624687799dd6d">&#9670;&nbsp;</a></span>set_thread_cpubind</h2>
231
232 <div class="memitem">
233 <div class="memproto">
234 <table class="memname">
235 <tr>
236 <td class="memname">unsigned char hwloc_topology_cpubind_support::set_thread_cpubind</td>
237 </tr>
238 </table>
239 </div><div class="memdoc">
240 <p>Binding a given thread only is supported. </p>
241
242 </div>
243 </div>
244 <hr/>The documentation for this struct was generated from the following file:<ul>
245 <li><a class="el" href="a00125_source.html">hwloc.h</a></li>
246 </ul>
247 </div><!-- contents -->
248 <!-- start footer part -->
249 <hr class="footer"/><address class="footer"><small>
250 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
251 </small></address>
252 </body>
253 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_topology_discovery_support Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#pub-attribs">Data Fields</a> </div>
43 <div class="headertitle">
44 <div class="title">hwloc_topology_discovery_support Struct Reference<div class="ingroups"><a class="el" href="a00202.html">Topology Detection Configuration and Query</a></div></div> </div>
45 </div><!--header-->
46 <div class="contents">
47
48 <p><code>#include &lt;<a class="el" href="a00122_source.html">hwloc.h</a>&gt;</code></p>
49 <table class="memberdecls">
50 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
51 Data Fields</h2></td></tr>
52 <tr class="memitem:ad7bb4ecf7a82f5a04fc632e9592ad3ab"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00302.html#ad7bb4ecf7a82f5a04fc632e9592ad3ab">pu</a></td></tr>
53 <tr class="separator:ad7bb4ecf7a82f5a04fc632e9592ad3ab"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:a955f96066cb9e4cd34e2a3710ad43e80"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00302.html#a955f96066cb9e4cd34e2a3710ad43e80">numa</a></td></tr>
55 <tr class="separator:a955f96066cb9e4cd34e2a3710ad43e80"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:af193eb858e40e12ef4923f5ed0e1f11a"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00302.html#af193eb858e40e12ef4923f5ed0e1f11a">numa_memory</a></td></tr>
57 <tr class="separator:af193eb858e40e12ef4923f5ed0e1f11a"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:af3c97b28781a2972cf8eaaf94a6617da"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00302.html#af3c97b28781a2972cf8eaaf94a6617da">disallowed_pu</a></td></tr>
59 <tr class="separator:af3c97b28781a2972cf8eaaf94a6617da"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:a970e65235873bcdb9669a9805161ce03"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00302.html#a970e65235873bcdb9669a9805161ce03">disallowed_numa</a></td></tr>
61 <tr class="separator:a970e65235873bcdb9669a9805161ce03"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:aba80d6f9c15e2395f9ed61db9ff3b75d"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00302.html#aba80d6f9c15e2395f9ed61db9ff3b75d">cpukind_efficiency</a></td></tr>
63 <tr class="separator:aba80d6f9c15e2395f9ed61db9ff3b75d"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 </table>
65 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
66 <div class="textblock"><p>Flags describing actual discovery support for this topology. </p>
67 </div><h2 class="groupheader">Field Documentation</h2>
68 <a id="aba80d6f9c15e2395f9ed61db9ff3b75d"></a>
69 <h2 class="memtitle"><span class="permalink"><a href="#aba80d6f9c15e2395f9ed61db9ff3b75d">&#9670;&nbsp;</a></span>cpukind_efficiency</h2>
70
71 <div class="memitem">
72 <div class="memproto">
73 <table class="memname">
74 <tr>
75 <td class="memname">unsigned char hwloc_topology_discovery_support::cpukind_efficiency</td>
76 </tr>
77 </table>
78 </div><div class="memdoc">
79
80 <p>Detecting the efficiency of CPU kinds is supported, see <a class="el" href="a00223.html">Kinds of CPU cores</a>. </p>
81
82 </div>
83 </div>
84 <a id="a970e65235873bcdb9669a9805161ce03"></a>
85 <h2 class="memtitle"><span class="permalink"><a href="#a970e65235873bcdb9669a9805161ce03">&#9670;&nbsp;</a></span>disallowed_numa</h2>
86
87 <div class="memitem">
88 <div class="memproto">
89 <table class="memname">
90 <tr>
91 <td class="memname">unsigned char hwloc_topology_discovery_support::disallowed_numa</td>
92 </tr>
93 </table>
94 </div><div class="memdoc">
95
96 <p>Detecting and identifying NUMA nodes that are not available to the current process is supported. </p>
97
98 </div>
99 </div>
100 <a id="af3c97b28781a2972cf8eaaf94a6617da"></a>
101 <h2 class="memtitle"><span class="permalink"><a href="#af3c97b28781a2972cf8eaaf94a6617da">&#9670;&nbsp;</a></span>disallowed_pu</h2>
102
103 <div class="memitem">
104 <div class="memproto">
105 <table class="memname">
106 <tr>
107 <td class="memname">unsigned char hwloc_topology_discovery_support::disallowed_pu</td>
108 </tr>
109 </table>
110 </div><div class="memdoc">
111
112 <p>Detecting and identifying PU objects that are not available to the current process is supported. </p>
113
114 </div>
115 </div>
116 <a id="a955f96066cb9e4cd34e2a3710ad43e80"></a>
117 <h2 class="memtitle"><span class="permalink"><a href="#a955f96066cb9e4cd34e2a3710ad43e80">&#9670;&nbsp;</a></span>numa</h2>
118
119 <div class="memitem">
120 <div class="memproto">
121 <table class="memname">
122 <tr>
123 <td class="memname">unsigned char hwloc_topology_discovery_support::numa</td>
124 </tr>
125 </table>
126 </div><div class="memdoc">
127
128 <p>Detecting the number of NUMA nodes is supported. </p>
129
130 </div>
131 </div>
132 <a id="af193eb858e40e12ef4923f5ed0e1f11a"></a>
133 <h2 class="memtitle"><span class="permalink"><a href="#af193eb858e40e12ef4923f5ed0e1f11a">&#9670;&nbsp;</a></span>numa_memory</h2>
134
135 <div class="memitem">
136 <div class="memproto">
137 <table class="memname">
138 <tr>
139 <td class="memname">unsigned char hwloc_topology_discovery_support::numa_memory</td>
140 </tr>
141 </table>
142 </div><div class="memdoc">
143
144 <p>Detecting the amount of memory in NUMA nodes is supported. </p>
145
146 </div>
147 </div>
148 <a id="ad7bb4ecf7a82f5a04fc632e9592ad3ab"></a>
149 <h2 class="memtitle"><span class="permalink"><a href="#ad7bb4ecf7a82f5a04fc632e9592ad3ab">&#9670;&nbsp;</a></span>pu</h2>
150
151 <div class="memitem">
152 <div class="memproto">
153 <table class="memname">
154 <tr>
155 <td class="memname">unsigned char hwloc_topology_discovery_support::pu</td>
156 </tr>
157 </table>
158 </div><div class="memdoc">
159
160 <p>Detecting the number of PU objects is supported. </p>
161
162 </div>
163 </div>
164 <hr/>The documentation for this struct was generated from the following file:<ul>
165 <li><a class="el" href="a00122_source.html">hwloc.h</a></li>
166 </ul>
167 </div><!-- contents -->
168 <!-- start footer part -->
169 <hr class="footer"/><address class="footer"><small>
170 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
171 </small></address>
172 </body>
173 </html>
+0
-322
doc/doxygen-doc/html/a00304.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_topology_membind_support Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#pub-attribs">Data Fields</a> </div>
43 <div class="headertitle">
44 <div class="title">hwloc_topology_membind_support Struct Reference<div class="ingroups"><a class="el" href="a00199.html">Topology Detection Configuration and Query</a></div></div> </div>
45 </div><!--header-->
46 <div class="contents">
47
48 <p><code>#include &lt;<a class="el" href="a00125_source.html">hwloc.h</a>&gt;</code></p>
49 <table class="memberdecls">
50 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
51 Data Fields</h2></td></tr>
52 <tr class="memitem:a36b3e388df9c6a249427cab7e3724749"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#a36b3e388df9c6a249427cab7e3724749">set_thisproc_membind</a></td></tr>
53 <tr class="separator:a36b3e388df9c6a249427cab7e3724749"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:a3fd51e6fa5f0dd800322301b46b08559"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#a3fd51e6fa5f0dd800322301b46b08559">get_thisproc_membind</a></td></tr>
55 <tr class="separator:a3fd51e6fa5f0dd800322301b46b08559"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:a756f44912894b176bf979a1b65f12aac"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#a756f44912894b176bf979a1b65f12aac">set_proc_membind</a></td></tr>
57 <tr class="separator:a756f44912894b176bf979a1b65f12aac"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:a9880cd2d605e316fc020167c49ca69ad"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#a9880cd2d605e316fc020167c49ca69ad">get_proc_membind</a></td></tr>
59 <tr class="separator:a9880cd2d605e316fc020167c49ca69ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:a0697af2e41f2e82b8ce71e3cc13f7eac"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#a0697af2e41f2e82b8ce71e3cc13f7eac">set_thisthread_membind</a></td></tr>
61 <tr class="separator:a0697af2e41f2e82b8ce71e3cc13f7eac"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:a63b0b2e26157b472f5717ee93cc7c535"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#a63b0b2e26157b472f5717ee93cc7c535">get_thisthread_membind</a></td></tr>
63 <tr class="separator:a63b0b2e26157b472f5717ee93cc7c535"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 <tr class="memitem:a476c06f96b65c08b287cf2369966123b"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#a476c06f96b65c08b287cf2369966123b">set_area_membind</a></td></tr>
65 <tr class="separator:a476c06f96b65c08b287cf2369966123b"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 <tr class="memitem:a0a84e24a06f2fa487fe8c9605c6f68b3"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#a0a84e24a06f2fa487fe8c9605c6f68b3">get_area_membind</a></td></tr>
67 <tr class="separator:a0a84e24a06f2fa487fe8c9605c6f68b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
68 <tr class="memitem:ae551abb27d2aa9ce008583488b845b98"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#ae551abb27d2aa9ce008583488b845b98">alloc_membind</a></td></tr>
69 <tr class="separator:ae551abb27d2aa9ce008583488b845b98"><td class="memSeparator" colspan="2">&#160;</td></tr>
70 <tr class="memitem:a221098c339dbfab27bd2c9f5d32f123b"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#a221098c339dbfab27bd2c9f5d32f123b">firsttouch_membind</a></td></tr>
71 <tr class="separator:a221098c339dbfab27bd2c9f5d32f123b"><td class="memSeparator" colspan="2">&#160;</td></tr>
72 <tr class="memitem:ae7cdb1f1b5f0242a69f85b5a5538c764"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#ae7cdb1f1b5f0242a69f85b5a5538c764">bind_membind</a></td></tr>
73 <tr class="separator:ae7cdb1f1b5f0242a69f85b5a5538c764"><td class="memSeparator" colspan="2">&#160;</td></tr>
74 <tr class="memitem:a3c44c6012860bbeba8a0f4c19710858d"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#a3c44c6012860bbeba8a0f4c19710858d">interleave_membind</a></td></tr>
75 <tr class="separator:a3c44c6012860bbeba8a0f4c19710858d"><td class="memSeparator" colspan="2">&#160;</td></tr>
76 <tr class="memitem:ab0921af6e0cd6975812a80b8e5c7435c"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#ab0921af6e0cd6975812a80b8e5c7435c">nexttouch_membind</a></td></tr>
77 <tr class="separator:ab0921af6e0cd6975812a80b8e5c7435c"><td class="memSeparator" colspan="2">&#160;</td></tr>
78 <tr class="memitem:aafa7683871a6a760246f9b35209caec5"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#aafa7683871a6a760246f9b35209caec5">migrate_membind</a></td></tr>
79 <tr class="separator:aafa7683871a6a760246f9b35209caec5"><td class="memSeparator" colspan="2">&#160;</td></tr>
80 <tr class="memitem:a30173553a68e0a4dd1672d26f8e892b1"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00304.html#a30173553a68e0a4dd1672d26f8e892b1">get_area_memlocation</a></td></tr>
81 <tr class="separator:a30173553a68e0a4dd1672d26f8e892b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
82 </table>
83 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
84 <div class="textblock"><p>Flags describing actual memory binding support for this topology. </p>
85 <p>A flag may be set even if the feature isn't supported in all cases (e.g. binding to random sets of non-contiguous objects). </p>
86 </div><h2 class="groupheader">Field Documentation</h2>
87 <a id="ae551abb27d2aa9ce008583488b845b98"></a>
88 <h2 class="memtitle"><span class="permalink"><a href="#ae551abb27d2aa9ce008583488b845b98">&#9670;&nbsp;</a></span>alloc_membind</h2>
89
90 <div class="memitem">
91 <div class="memproto">
92 <table class="memname">
93 <tr>
94 <td class="memname">unsigned char hwloc_topology_membind_support::alloc_membind</td>
95 </tr>
96 </table>
97 </div><div class="memdoc">
98 <p>Allocating a bound memory area is supported. </p>
99
100 </div>
101 </div>
102 <a id="ae7cdb1f1b5f0242a69f85b5a5538c764"></a>
103 <h2 class="memtitle"><span class="permalink"><a href="#ae7cdb1f1b5f0242a69f85b5a5538c764">&#9670;&nbsp;</a></span>bind_membind</h2>
104
105 <div class="memitem">
106 <div class="memproto">
107 <table class="memname">
108 <tr>
109 <td class="memname">unsigned char hwloc_topology_membind_support::bind_membind</td>
110 </tr>
111 </table>
112 </div><div class="memdoc">
113 <p>Bind policy is supported. </p>
114
115 </div>
116 </div>
117 <a id="a221098c339dbfab27bd2c9f5d32f123b"></a>
118 <h2 class="memtitle"><span class="permalink"><a href="#a221098c339dbfab27bd2c9f5d32f123b">&#9670;&nbsp;</a></span>firsttouch_membind</h2>
119
120 <div class="memitem">
121 <div class="memproto">
122 <table class="memname">
123 <tr>
124 <td class="memname">unsigned char hwloc_topology_membind_support::firsttouch_membind</td>
125 </tr>
126 </table>
127 </div><div class="memdoc">
128 <p>First-touch policy is supported. </p>
129
130 </div>
131 </div>
132 <a id="a0a84e24a06f2fa487fe8c9605c6f68b3"></a>
133 <h2 class="memtitle"><span class="permalink"><a href="#a0a84e24a06f2fa487fe8c9605c6f68b3">&#9670;&nbsp;</a></span>get_area_membind</h2>
134
135 <div class="memitem">
136 <div class="memproto">
137 <table class="memname">
138 <tr>
139 <td class="memname">unsigned char hwloc_topology_membind_support::get_area_membind</td>
140 </tr>
141 </table>
142 </div><div class="memdoc">
143 <p>Getting the binding of a given memory area is supported. </p>
144
145 </div>
146 </div>
147 <a id="a30173553a68e0a4dd1672d26f8e892b1"></a>
148 <h2 class="memtitle"><span class="permalink"><a href="#a30173553a68e0a4dd1672d26f8e892b1">&#9670;&nbsp;</a></span>get_area_memlocation</h2>
149
150 <div class="memitem">
151 <div class="memproto">
152 <table class="memname">
153 <tr>
154 <td class="memname">unsigned char hwloc_topology_membind_support::get_area_memlocation</td>
155 </tr>
156 </table>
157 </div><div class="memdoc">
158 <p>Getting the last NUMA nodes where a memory area was allocated is supported </p>
159
160 </div>
161 </div>
162 <a id="a9880cd2d605e316fc020167c49ca69ad"></a>
163 <h2 class="memtitle"><span class="permalink"><a href="#a9880cd2d605e316fc020167c49ca69ad">&#9670;&nbsp;</a></span>get_proc_membind</h2>
164
165 <div class="memitem">
166 <div class="memproto">
167 <table class="memname">
168 <tr>
169 <td class="memname">unsigned char hwloc_topology_membind_support::get_proc_membind</td>
170 </tr>
171 </table>
172 </div><div class="memdoc">
173 <p>Getting the binding of a whole given process is supported. </p>
174
175 </div>
176 </div>
177 <a id="a3fd51e6fa5f0dd800322301b46b08559"></a>
178 <h2 class="memtitle"><span class="permalink"><a href="#a3fd51e6fa5f0dd800322301b46b08559">&#9670;&nbsp;</a></span>get_thisproc_membind</h2>
179
180 <div class="memitem">
181 <div class="memproto">
182 <table class="memname">
183 <tr>
184 <td class="memname">unsigned char hwloc_topology_membind_support::get_thisproc_membind</td>
185 </tr>
186 </table>
187 </div><div class="memdoc">
188 <p>Getting the binding of the whole current process is supported. </p>
189
190 </div>
191 </div>
192 <a id="a63b0b2e26157b472f5717ee93cc7c535"></a>
193 <h2 class="memtitle"><span class="permalink"><a href="#a63b0b2e26157b472f5717ee93cc7c535">&#9670;&nbsp;</a></span>get_thisthread_membind</h2>
194
195 <div class="memitem">
196 <div class="memproto">
197 <table class="memname">
198 <tr>
199 <td class="memname">unsigned char hwloc_topology_membind_support::get_thisthread_membind</td>
200 </tr>
201 </table>
202 </div><div class="memdoc">
203 <p>Getting the binding of the current thread only is supported. </p>
204
205 </div>
206 </div>
207 <a id="a3c44c6012860bbeba8a0f4c19710858d"></a>
208 <h2 class="memtitle"><span class="permalink"><a href="#a3c44c6012860bbeba8a0f4c19710858d">&#9670;&nbsp;</a></span>interleave_membind</h2>
209
210 <div class="memitem">
211 <div class="memproto">
212 <table class="memname">
213 <tr>
214 <td class="memname">unsigned char hwloc_topology_membind_support::interleave_membind</td>
215 </tr>
216 </table>
217 </div><div class="memdoc">
218 <p>Interleave policy is supported. </p>
219
220 </div>
221 </div>
222 <a id="aafa7683871a6a760246f9b35209caec5"></a>
223 <h2 class="memtitle"><span class="permalink"><a href="#aafa7683871a6a760246f9b35209caec5">&#9670;&nbsp;</a></span>migrate_membind</h2>
224
225 <div class="memitem">
226 <div class="memproto">
227 <table class="memname">
228 <tr>
229 <td class="memname">unsigned char hwloc_topology_membind_support::migrate_membind</td>
230 </tr>
231 </table>
232 </div><div class="memdoc">
233 <p>Migration flags is supported. </p>
234
235 </div>
236 </div>
237 <a id="ab0921af6e0cd6975812a80b8e5c7435c"></a>
238 <h2 class="memtitle"><span class="permalink"><a href="#ab0921af6e0cd6975812a80b8e5c7435c">&#9670;&nbsp;</a></span>nexttouch_membind</h2>
239
240 <div class="memitem">
241 <div class="memproto">
242 <table class="memname">
243 <tr>
244 <td class="memname">unsigned char hwloc_topology_membind_support::nexttouch_membind</td>
245 </tr>
246 </table>
247 </div><div class="memdoc">
248 <p>Next-touch migration policy is supported. </p>
249
250 </div>
251 </div>
252 <a id="a476c06f96b65c08b287cf2369966123b"></a>
253 <h2 class="memtitle"><span class="permalink"><a href="#a476c06f96b65c08b287cf2369966123b">&#9670;&nbsp;</a></span>set_area_membind</h2>
254
255 <div class="memitem">
256 <div class="memproto">
257 <table class="memname">
258 <tr>
259 <td class="memname">unsigned char hwloc_topology_membind_support::set_area_membind</td>
260 </tr>
261 </table>
262 </div><div class="memdoc">
263 <p>Binding a given memory area is supported. </p>
264
265 </div>
266 </div>
267 <a id="a756f44912894b176bf979a1b65f12aac"></a>
268 <h2 class="memtitle"><span class="permalink"><a href="#a756f44912894b176bf979a1b65f12aac">&#9670;&nbsp;</a></span>set_proc_membind</h2>
269
270 <div class="memitem">
271 <div class="memproto">
272 <table class="memname">
273 <tr>
274 <td class="memname">unsigned char hwloc_topology_membind_support::set_proc_membind</td>
275 </tr>
276 </table>
277 </div><div class="memdoc">
278 <p>Binding a whole given process is supported. </p>
279
280 </div>
281 </div>
282 <a id="a36b3e388df9c6a249427cab7e3724749"></a>
283 <h2 class="memtitle"><span class="permalink"><a href="#a36b3e388df9c6a249427cab7e3724749">&#9670;&nbsp;</a></span>set_thisproc_membind</h2>
284
285 <div class="memitem">
286 <div class="memproto">
287 <table class="memname">
288 <tr>
289 <td class="memname">unsigned char hwloc_topology_membind_support::set_thisproc_membind</td>
290 </tr>
291 </table>
292 </div><div class="memdoc">
293 <p>Binding the whole current process is supported. </p>
294
295 </div>
296 </div>
297 <a id="a0697af2e41f2e82b8ce71e3cc13f7eac"></a>
298 <h2 class="memtitle"><span class="permalink"><a href="#a0697af2e41f2e82b8ce71e3cc13f7eac">&#9670;&nbsp;</a></span>set_thisthread_membind</h2>
299
300 <div class="memitem">
301 <div class="memproto">
302 <table class="memname">
303 <tr>
304 <td class="memname">unsigned char hwloc_topology_membind_support::set_thisthread_membind</td>
305 </tr>
306 </table>
307 </div><div class="memdoc">
308 <p>Binding the current thread only is supported. </p>
309
310 </div>
311 </div>
312 <hr/>The documentation for this struct was generated from the following file:<ul>
313 <li><a class="el" href="a00125_source.html">hwloc.h</a></li>
314 </ul>
315 </div><!-- contents -->
316 <!-- start footer part -->
317 <hr class="footer"/><address class="footer"><small>
318 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
319 </small></address>
320 </body>
321 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_topology_cpubind_support Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#pub-attribs">Data Fields</a> </div>
43 <div class="headertitle">
44 <div class="title">hwloc_topology_cpubind_support Struct Reference<div class="ingroups"><a class="el" href="a00202.html">Topology Detection Configuration and Query</a></div></div> </div>
45 </div><!--header-->
46 <div class="contents">
47
48 <p><code>#include &lt;<a class="el" href="a00122_source.html">hwloc.h</a>&gt;</code></p>
49 <table class="memberdecls">
50 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
51 Data Fields</h2></td></tr>
52 <tr class="memitem:a9403d51657a4d546b3ea9553a2973a27"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00306.html#a9403d51657a4d546b3ea9553a2973a27">set_thisproc_cpubind</a></td></tr>
53 <tr class="separator:a9403d51657a4d546b3ea9553a2973a27"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:a77a09ddd78ee3e9ff5f532a6ac74f7eb"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00306.html#a77a09ddd78ee3e9ff5f532a6ac74f7eb">get_thisproc_cpubind</a></td></tr>
55 <tr class="separator:a77a09ddd78ee3e9ff5f532a6ac74f7eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:aa166223d1c2a6de7256ab2d8b675a87e"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00306.html#aa166223d1c2a6de7256ab2d8b675a87e">set_proc_cpubind</a></td></tr>
57 <tr class="separator:aa166223d1c2a6de7256ab2d8b675a87e"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:aae705bc447adc163ead377362c4dfe9f"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00306.html#aae705bc447adc163ead377362c4dfe9f">get_proc_cpubind</a></td></tr>
59 <tr class="separator:aae705bc447adc163ead377362c4dfe9f"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:a57a89a4b5f1f74fa6cfe176f1e8b0798"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00306.html#a57a89a4b5f1f74fa6cfe176f1e8b0798">set_thisthread_cpubind</a></td></tr>
61 <tr class="separator:a57a89a4b5f1f74fa6cfe176f1e8b0798"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:a80d762e532d677dff262d83cc7bb1c60"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00306.html#a80d762e532d677dff262d83cc7bb1c60">get_thisthread_cpubind</a></td></tr>
63 <tr class="separator:a80d762e532d677dff262d83cc7bb1c60"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 <tr class="memitem:a46fba33e307909ce256624687799dd6d"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00306.html#a46fba33e307909ce256624687799dd6d">set_thread_cpubind</a></td></tr>
65 <tr class="separator:a46fba33e307909ce256624687799dd6d"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 <tr class="memitem:a8dd4d8531ed2eebdce1507e7d104154e"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00306.html#a8dd4d8531ed2eebdce1507e7d104154e">get_thread_cpubind</a></td></tr>
67 <tr class="separator:a8dd4d8531ed2eebdce1507e7d104154e"><td class="memSeparator" colspan="2">&#160;</td></tr>
68 <tr class="memitem:ad2d5c94b738d92b7d2ede87e4e96321d"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00306.html#ad2d5c94b738d92b7d2ede87e4e96321d">get_thisproc_last_cpu_location</a></td></tr>
69 <tr class="separator:ad2d5c94b738d92b7d2ede87e4e96321d"><td class="memSeparator" colspan="2">&#160;</td></tr>
70 <tr class="memitem:a2554620148b7992a5093f338f5ae254f"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00306.html#a2554620148b7992a5093f338f5ae254f">get_proc_last_cpu_location</a></td></tr>
71 <tr class="separator:a2554620148b7992a5093f338f5ae254f"><td class="memSeparator" colspan="2">&#160;</td></tr>
72 <tr class="memitem:a6be1f042fdce6bf41b4ea39f6f193808"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00306.html#a6be1f042fdce6bf41b4ea39f6f193808">get_thisthread_last_cpu_location</a></td></tr>
73 <tr class="separator:a6be1f042fdce6bf41b4ea39f6f193808"><td class="memSeparator" colspan="2">&#160;</td></tr>
74 </table>
75 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
76 <div class="textblock"><p>Flags describing actual PU binding support for this topology. </p>
77 <p>A flag may be set even if the feature isn't supported in all cases (e.g. binding to random sets of non-contiguous objects). </p>
78 </div><h2 class="groupheader">Field Documentation</h2>
79 <a id="aae705bc447adc163ead377362c4dfe9f"></a>
80 <h2 class="memtitle"><span class="permalink"><a href="#aae705bc447adc163ead377362c4dfe9f">&#9670;&nbsp;</a></span>get_proc_cpubind</h2>
81
82 <div class="memitem">
83 <div class="memproto">
84 <table class="memname">
85 <tr>
86 <td class="memname">unsigned char hwloc_topology_cpubind_support::get_proc_cpubind</td>
87 </tr>
88 </table>
89 </div><div class="memdoc">
90 <p>Getting the binding of a whole given process is supported. </p>
91
92 </div>
93 </div>
94 <a id="a2554620148b7992a5093f338f5ae254f"></a>
95 <h2 class="memtitle"><span class="permalink"><a href="#a2554620148b7992a5093f338f5ae254f">&#9670;&nbsp;</a></span>get_proc_last_cpu_location</h2>
96
97 <div class="memitem">
98 <div class="memproto">
99 <table class="memname">
100 <tr>
101 <td class="memname">unsigned char hwloc_topology_cpubind_support::get_proc_last_cpu_location</td>
102 </tr>
103 </table>
104 </div><div class="memdoc">
105 <p>Getting the last processors where a whole process ran is supported </p>
106
107 </div>
108 </div>
109 <a id="a77a09ddd78ee3e9ff5f532a6ac74f7eb"></a>
110 <h2 class="memtitle"><span class="permalink"><a href="#a77a09ddd78ee3e9ff5f532a6ac74f7eb">&#9670;&nbsp;</a></span>get_thisproc_cpubind</h2>
111
112 <div class="memitem">
113 <div class="memproto">
114 <table class="memname">
115 <tr>
116 <td class="memname">unsigned char hwloc_topology_cpubind_support::get_thisproc_cpubind</td>
117 </tr>
118 </table>
119 </div><div class="memdoc">
120 <p>Getting the binding of the whole current process is supported. </p>
121
122 </div>
123 </div>
124 <a id="ad2d5c94b738d92b7d2ede87e4e96321d"></a>
125 <h2 class="memtitle"><span class="permalink"><a href="#ad2d5c94b738d92b7d2ede87e4e96321d">&#9670;&nbsp;</a></span>get_thisproc_last_cpu_location</h2>
126
127 <div class="memitem">
128 <div class="memproto">
129 <table class="memname">
130 <tr>
131 <td class="memname">unsigned char hwloc_topology_cpubind_support::get_thisproc_last_cpu_location</td>
132 </tr>
133 </table>
134 </div><div class="memdoc">
135 <p>Getting the last processors where the whole current process ran is supported </p>
136
137 </div>
138 </div>
139 <a id="a80d762e532d677dff262d83cc7bb1c60"></a>
140 <h2 class="memtitle"><span class="permalink"><a href="#a80d762e532d677dff262d83cc7bb1c60">&#9670;&nbsp;</a></span>get_thisthread_cpubind</h2>
141
142 <div class="memitem">
143 <div class="memproto">
144 <table class="memname">
145 <tr>
146 <td class="memname">unsigned char hwloc_topology_cpubind_support::get_thisthread_cpubind</td>
147 </tr>
148 </table>
149 </div><div class="memdoc">
150 <p>Getting the binding of the current thread only is supported. </p>
151
152 </div>
153 </div>
154 <a id="a6be1f042fdce6bf41b4ea39f6f193808"></a>
155 <h2 class="memtitle"><span class="permalink"><a href="#a6be1f042fdce6bf41b4ea39f6f193808">&#9670;&nbsp;</a></span>get_thisthread_last_cpu_location</h2>
156
157 <div class="memitem">
158 <div class="memproto">
159 <table class="memname">
160 <tr>
161 <td class="memname">unsigned char hwloc_topology_cpubind_support::get_thisthread_last_cpu_location</td>
162 </tr>
163 </table>
164 </div><div class="memdoc">
165 <p>Getting the last processors where the current thread ran is supported </p>
166
167 </div>
168 </div>
169 <a id="a8dd4d8531ed2eebdce1507e7d104154e"></a>
170 <h2 class="memtitle"><span class="permalink"><a href="#a8dd4d8531ed2eebdce1507e7d104154e">&#9670;&nbsp;</a></span>get_thread_cpubind</h2>
171
172 <div class="memitem">
173 <div class="memproto">
174 <table class="memname">
175 <tr>
176 <td class="memname">unsigned char hwloc_topology_cpubind_support::get_thread_cpubind</td>
177 </tr>
178 </table>
179 </div><div class="memdoc">
180 <p>Getting the binding of a given thread only is supported. </p>
181
182 </div>
183 </div>
184 <a id="aa166223d1c2a6de7256ab2d8b675a87e"></a>
185 <h2 class="memtitle"><span class="permalink"><a href="#aa166223d1c2a6de7256ab2d8b675a87e">&#9670;&nbsp;</a></span>set_proc_cpubind</h2>
186
187 <div class="memitem">
188 <div class="memproto">
189 <table class="memname">
190 <tr>
191 <td class="memname">unsigned char hwloc_topology_cpubind_support::set_proc_cpubind</td>
192 </tr>
193 </table>
194 </div><div class="memdoc">
195 <p>Binding a whole given process is supported. </p>
196
197 </div>
198 </div>
199 <a id="a9403d51657a4d546b3ea9553a2973a27"></a>
200 <h2 class="memtitle"><span class="permalink"><a href="#a9403d51657a4d546b3ea9553a2973a27">&#9670;&nbsp;</a></span>set_thisproc_cpubind</h2>
201
202 <div class="memitem">
203 <div class="memproto">
204 <table class="memname">
205 <tr>
206 <td class="memname">unsigned char hwloc_topology_cpubind_support::set_thisproc_cpubind</td>
207 </tr>
208 </table>
209 </div><div class="memdoc">
210 <p>Binding the whole current process is supported. </p>
211
212 </div>
213 </div>
214 <a id="a57a89a4b5f1f74fa6cfe176f1e8b0798"></a>
215 <h2 class="memtitle"><span class="permalink"><a href="#a57a89a4b5f1f74fa6cfe176f1e8b0798">&#9670;&nbsp;</a></span>set_thisthread_cpubind</h2>
216
217 <div class="memitem">
218 <div class="memproto">
219 <table class="memname">
220 <tr>
221 <td class="memname">unsigned char hwloc_topology_cpubind_support::set_thisthread_cpubind</td>
222 </tr>
223 </table>
224 </div><div class="memdoc">
225 <p>Binding the current thread only is supported. </p>
226
227 </div>
228 </div>
229 <a id="a46fba33e307909ce256624687799dd6d"></a>
230 <h2 class="memtitle"><span class="permalink"><a href="#a46fba33e307909ce256624687799dd6d">&#9670;&nbsp;</a></span>set_thread_cpubind</h2>
231
232 <div class="memitem">
233 <div class="memproto">
234 <table class="memname">
235 <tr>
236 <td class="memname">unsigned char hwloc_topology_cpubind_support::set_thread_cpubind</td>
237 </tr>
238 </table>
239 </div><div class="memdoc">
240 <p>Binding a given thread only is supported. </p>
241
242 </div>
243 </div>
244 <hr/>The documentation for this struct was generated from the following file:<ul>
245 <li><a class="el" href="a00122_source.html">hwloc.h</a></li>
246 </ul>
247 </div><!-- contents -->
248 <!-- start footer part -->
249 <hr class="footer"/><address class="footer"><small>
250 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
251 </small></address>
252 </body>
253 </html>
+0
-83
doc/doxygen-doc/html/a00308.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_topology_misc_support Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#pub-attribs">Data Fields</a> </div>
43 <div class="headertitle">
44 <div class="title">hwloc_topology_misc_support Struct Reference<div class="ingroups"><a class="el" href="a00199.html">Topology Detection Configuration and Query</a></div></div> </div>
45 </div><!--header-->
46 <div class="contents">
47
48 <p><code>#include &lt;<a class="el" href="a00125_source.html">hwloc.h</a>&gt;</code></p>
49 <table class="memberdecls">
50 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
51 Data Fields</h2></td></tr>
52 <tr class="memitem:adf54a6dbe8e9dd5033dfe9c93df726c4"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00308.html#adf54a6dbe8e9dd5033dfe9c93df726c4">imported_support</a></td></tr>
53 <tr class="separator:adf54a6dbe8e9dd5033dfe9c93df726c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 </table>
55 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
56 <div class="textblock"><p>Flags describing miscellaneous features. </p>
57 </div><h2 class="groupheader">Field Documentation</h2>
58 <a id="adf54a6dbe8e9dd5033dfe9c93df726c4"></a>
59 <h2 class="memtitle"><span class="permalink"><a href="#adf54a6dbe8e9dd5033dfe9c93df726c4">&#9670;&nbsp;</a></span>imported_support</h2>
60
61 <div class="memitem">
62 <div class="memproto">
63 <table class="memname">
64 <tr>
65 <td class="memname">unsigned char hwloc_topology_misc_support::imported_support</td>
66 </tr>
67 </table>
68 </div><div class="memdoc">
69 <p>Support was imported when importing another topology, see <a class="el" href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdead93e82b8668ee90e4f9354e201a2ed9c" title="Import support from the imported topology.">HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT</a>. </p>
70
71 </div>
72 </div>
73 <hr/>The documentation for this struct was generated from the following file:<ul>
74 <li><a class="el" href="a00125_source.html">hwloc.h</a></li>
75 </ul>
76 </div><!-- contents -->
77 <!-- start footer part -->
78 <hr class="footer"/><address class="footer"><small>
79 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
80 </small></address>
81 </body>
82 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_topology_membind_support Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#pub-attribs">Data Fields</a> </div>
43 <div class="headertitle">
44 <div class="title">hwloc_topology_membind_support Struct Reference<div class="ingroups"><a class="el" href="a00202.html">Topology Detection Configuration and Query</a></div></div> </div>
45 </div><!--header-->
46 <div class="contents">
47
48 <p><code>#include &lt;<a class="el" href="a00122_source.html">hwloc.h</a>&gt;</code></p>
49 <table class="memberdecls">
50 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
51 Data Fields</h2></td></tr>
52 <tr class="memitem:a36b3e388df9c6a249427cab7e3724749"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00310.html#a36b3e388df9c6a249427cab7e3724749">set_thisproc_membind</a></td></tr>
53 <tr class="separator:a36b3e388df9c6a249427cab7e3724749"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:a3fd51e6fa5f0dd800322301b46b08559"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00310.html#a3fd51e6fa5f0dd800322301b46b08559">get_thisproc_membind</a></td></tr>
55 <tr class="separator:a3fd51e6fa5f0dd800322301b46b08559"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:a756f44912894b176bf979a1b65f12aac"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00310.html#a756f44912894b176bf979a1b65f12aac">set_proc_membind</a></td></tr>
57 <tr class="separator:a756f44912894b176bf979a1b65f12aac"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:a9880cd2d605e316fc020167c49ca69ad"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00310.html#a9880cd2d605e316fc020167c49ca69ad">get_proc_membind</a></td></tr>
59 <tr class="separator:a9880cd2d605e316fc020167c49ca69ad"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:a0697af2e41f2e82b8ce71e3cc13f7eac"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00310.html#a0697af2e41f2e82b8ce71e3cc13f7eac">set_thisthread_membind</a></td></tr>
61 <tr class="separator:a0697af2e41f2e82b8ce71e3cc13f7eac"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:a63b0b2e26157b472f5717ee93cc7c535"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00310.html#a63b0b2e26157b472f5717ee93cc7c535">get_thisthread_membind</a></td></tr>
63 <tr class="separator:a63b0b2e26157b472f5717ee93cc7c535"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 <tr class="memitem:a476c06f96b65c08b287cf2369966123b"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00310.html#a476c06f96b65c08b287cf2369966123b">set_area_membind</a></td></tr>
65 <tr class="separator:a476c06f96b65c08b287cf2369966123b"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 <tr class="memitem:a0a84e24a06f2fa487fe8c9605c6f68b3"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00310.html#a0a84e24a06f2fa487fe8c9605c6f68b3">get_area_membind</a></td></tr>
67 <tr class="separator:a0a84e24a06f2fa487fe8c9605c6f68b3"><td class="memSeparator" colspan="2">&#160;</td></tr>
68 <tr class="memitem:ae551abb27d2aa9ce008583488b845b98"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00310.html#ae551abb27d2aa9ce008583488b845b98">alloc_membind</a></td></tr>
69 <tr class="separator:ae551abb27d2aa9ce008583488b845b98"><td class="memSeparator" colspan="2">&#160;</td></tr>
70 <tr class="memitem:a221098c339dbfab27bd2c9f5d32f123b"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00310.html#a221098c339dbfab27bd2c9f5d32f123b">firsttouch_membind</a></td></tr>
71 <tr class="separator:a221098c339dbfab27bd2c9f5d32f123b"><td class="memSeparator" colspan="2">&#160;</td></tr>
72 <tr class="memitem:ae7cdb1f1b5f0242a69f85b5a5538c764"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00310.html#ae7cdb1f1b5f0242a69f85b5a5538c764">bind_membind</a></td></tr>
73 <tr class="separator:ae7cdb1f1b5f0242a69f85b5a5538c764"><td class="memSeparator" colspan="2">&#160;</td></tr>
74 <tr class="memitem:a3c44c6012860bbeba8a0f4c19710858d"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00310.html#a3c44c6012860bbeba8a0f4c19710858d">interleave_membind</a></td></tr>
75 <tr class="separator:a3c44c6012860bbeba8a0f4c19710858d"><td class="memSeparator" colspan="2">&#160;</td></tr>
76 <tr class="memitem:ab0921af6e0cd6975812a80b8e5c7435c"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00310.html#ab0921af6e0cd6975812a80b8e5c7435c">nexttouch_membind</a></td></tr>
77 <tr class="separator:ab0921af6e0cd6975812a80b8e5c7435c"><td class="memSeparator" colspan="2">&#160;</td></tr>
78 <tr class="memitem:aafa7683871a6a760246f9b35209caec5"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00310.html#aafa7683871a6a760246f9b35209caec5">migrate_membind</a></td></tr>
79 <tr class="separator:aafa7683871a6a760246f9b35209caec5"><td class="memSeparator" colspan="2">&#160;</td></tr>
80 <tr class="memitem:a30173553a68e0a4dd1672d26f8e892b1"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00310.html#a30173553a68e0a4dd1672d26f8e892b1">get_area_memlocation</a></td></tr>
81 <tr class="separator:a30173553a68e0a4dd1672d26f8e892b1"><td class="memSeparator" colspan="2">&#160;</td></tr>
82 </table>
83 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
84 <div class="textblock"><p>Flags describing actual memory binding support for this topology. </p>
85 <p>A flag may be set even if the feature isn't supported in all cases (e.g. binding to random sets of non-contiguous objects). </p>
86 </div><h2 class="groupheader">Field Documentation</h2>
87 <a id="ae551abb27d2aa9ce008583488b845b98"></a>
88 <h2 class="memtitle"><span class="permalink"><a href="#ae551abb27d2aa9ce008583488b845b98">&#9670;&nbsp;</a></span>alloc_membind</h2>
89
90 <div class="memitem">
91 <div class="memproto">
92 <table class="memname">
93 <tr>
94 <td class="memname">unsigned char hwloc_topology_membind_support::alloc_membind</td>
95 </tr>
96 </table>
97 </div><div class="memdoc">
98 <p>Allocating a bound memory area is supported. </p>
99
100 </div>
101 </div>
102 <a id="ae7cdb1f1b5f0242a69f85b5a5538c764"></a>
103 <h2 class="memtitle"><span class="permalink"><a href="#ae7cdb1f1b5f0242a69f85b5a5538c764">&#9670;&nbsp;</a></span>bind_membind</h2>
104
105 <div class="memitem">
106 <div class="memproto">
107 <table class="memname">
108 <tr>
109 <td class="memname">unsigned char hwloc_topology_membind_support::bind_membind</td>
110 </tr>
111 </table>
112 </div><div class="memdoc">
113 <p>Bind policy is supported. </p>
114
115 </div>
116 </div>
117 <a id="a221098c339dbfab27bd2c9f5d32f123b"></a>
118 <h2 class="memtitle"><span class="permalink"><a href="#a221098c339dbfab27bd2c9f5d32f123b">&#9670;&nbsp;</a></span>firsttouch_membind</h2>
119
120 <div class="memitem">
121 <div class="memproto">
122 <table class="memname">
123 <tr>
124 <td class="memname">unsigned char hwloc_topology_membind_support::firsttouch_membind</td>
125 </tr>
126 </table>
127 </div><div class="memdoc">
128 <p>First-touch policy is supported. </p>
129
130 </div>
131 </div>
132 <a id="a0a84e24a06f2fa487fe8c9605c6f68b3"></a>
133 <h2 class="memtitle"><span class="permalink"><a href="#a0a84e24a06f2fa487fe8c9605c6f68b3">&#9670;&nbsp;</a></span>get_area_membind</h2>
134
135 <div class="memitem">
136 <div class="memproto">
137 <table class="memname">
138 <tr>
139 <td class="memname">unsigned char hwloc_topology_membind_support::get_area_membind</td>
140 </tr>
141 </table>
142 </div><div class="memdoc">
143 <p>Getting the binding of a given memory area is supported. </p>
144
145 </div>
146 </div>
147 <a id="a30173553a68e0a4dd1672d26f8e892b1"></a>
148 <h2 class="memtitle"><span class="permalink"><a href="#a30173553a68e0a4dd1672d26f8e892b1">&#9670;&nbsp;</a></span>get_area_memlocation</h2>
149
150 <div class="memitem">
151 <div class="memproto">
152 <table class="memname">
153 <tr>
154 <td class="memname">unsigned char hwloc_topology_membind_support::get_area_memlocation</td>
155 </tr>
156 </table>
157 </div><div class="memdoc">
158 <p>Getting the last NUMA nodes where a memory area was allocated is supported </p>
159
160 </div>
161 </div>
162 <a id="a9880cd2d605e316fc020167c49ca69ad"></a>
163 <h2 class="memtitle"><span class="permalink"><a href="#a9880cd2d605e316fc020167c49ca69ad">&#9670;&nbsp;</a></span>get_proc_membind</h2>
164
165 <div class="memitem">
166 <div class="memproto">
167 <table class="memname">
168 <tr>
169 <td class="memname">unsigned char hwloc_topology_membind_support::get_proc_membind</td>
170 </tr>
171 </table>
172 </div><div class="memdoc">
173 <p>Getting the binding of a whole given process is supported. </p>
174
175 </div>
176 </div>
177 <a id="a3fd51e6fa5f0dd800322301b46b08559"></a>
178 <h2 class="memtitle"><span class="permalink"><a href="#a3fd51e6fa5f0dd800322301b46b08559">&#9670;&nbsp;</a></span>get_thisproc_membind</h2>
179
180 <div class="memitem">
181 <div class="memproto">
182 <table class="memname">
183 <tr>
184 <td class="memname">unsigned char hwloc_topology_membind_support::get_thisproc_membind</td>
185 </tr>
186 </table>
187 </div><div class="memdoc">
188 <p>Getting the binding of the whole current process is supported. </p>
189
190 </div>
191 </div>
192 <a id="a63b0b2e26157b472f5717ee93cc7c535"></a>
193 <h2 class="memtitle"><span class="permalink"><a href="#a63b0b2e26157b472f5717ee93cc7c535">&#9670;&nbsp;</a></span>get_thisthread_membind</h2>
194
195 <div class="memitem">
196 <div class="memproto">
197 <table class="memname">
198 <tr>
199 <td class="memname">unsigned char hwloc_topology_membind_support::get_thisthread_membind</td>
200 </tr>
201 </table>
202 </div><div class="memdoc">
203 <p>Getting the binding of the current thread only is supported. </p>
204
205 </div>
206 </div>
207 <a id="a3c44c6012860bbeba8a0f4c19710858d"></a>
208 <h2 class="memtitle"><span class="permalink"><a href="#a3c44c6012860bbeba8a0f4c19710858d">&#9670;&nbsp;</a></span>interleave_membind</h2>
209
210 <div class="memitem">
211 <div class="memproto">
212 <table class="memname">
213 <tr>
214 <td class="memname">unsigned char hwloc_topology_membind_support::interleave_membind</td>
215 </tr>
216 </table>
217 </div><div class="memdoc">
218 <p>Interleave policy is supported. </p>
219
220 </div>
221 </div>
222 <a id="aafa7683871a6a760246f9b35209caec5"></a>
223 <h2 class="memtitle"><span class="permalink"><a href="#aafa7683871a6a760246f9b35209caec5">&#9670;&nbsp;</a></span>migrate_membind</h2>
224
225 <div class="memitem">
226 <div class="memproto">
227 <table class="memname">
228 <tr>
229 <td class="memname">unsigned char hwloc_topology_membind_support::migrate_membind</td>
230 </tr>
231 </table>
232 </div><div class="memdoc">
233 <p>Migration flags is supported. </p>
234
235 </div>
236 </div>
237 <a id="ab0921af6e0cd6975812a80b8e5c7435c"></a>
238 <h2 class="memtitle"><span class="permalink"><a href="#ab0921af6e0cd6975812a80b8e5c7435c">&#9670;&nbsp;</a></span>nexttouch_membind</h2>
239
240 <div class="memitem">
241 <div class="memproto">
242 <table class="memname">
243 <tr>
244 <td class="memname">unsigned char hwloc_topology_membind_support::nexttouch_membind</td>
245 </tr>
246 </table>
247 </div><div class="memdoc">
248 <p>Next-touch migration policy is supported. </p>
249
250 </div>
251 </div>
252 <a id="a476c06f96b65c08b287cf2369966123b"></a>
253 <h2 class="memtitle"><span class="permalink"><a href="#a476c06f96b65c08b287cf2369966123b">&#9670;&nbsp;</a></span>set_area_membind</h2>
254
255 <div class="memitem">
256 <div class="memproto">
257 <table class="memname">
258 <tr>
259 <td class="memname">unsigned char hwloc_topology_membind_support::set_area_membind</td>
260 </tr>
261 </table>
262 </div><div class="memdoc">
263 <p>Binding a given memory area is supported. </p>
264
265 </div>
266 </div>
267 <a id="a756f44912894b176bf979a1b65f12aac"></a>
268 <h2 class="memtitle"><span class="permalink"><a href="#a756f44912894b176bf979a1b65f12aac">&#9670;&nbsp;</a></span>set_proc_membind</h2>
269
270 <div class="memitem">
271 <div class="memproto">
272 <table class="memname">
273 <tr>
274 <td class="memname">unsigned char hwloc_topology_membind_support::set_proc_membind</td>
275 </tr>
276 </table>
277 </div><div class="memdoc">
278 <p>Binding a whole given process is supported. </p>
279
280 </div>
281 </div>
282 <a id="a36b3e388df9c6a249427cab7e3724749"></a>
283 <h2 class="memtitle"><span class="permalink"><a href="#a36b3e388df9c6a249427cab7e3724749">&#9670;&nbsp;</a></span>set_thisproc_membind</h2>
284
285 <div class="memitem">
286 <div class="memproto">
287 <table class="memname">
288 <tr>
289 <td class="memname">unsigned char hwloc_topology_membind_support::set_thisproc_membind</td>
290 </tr>
291 </table>
292 </div><div class="memdoc">
293 <p>Binding the whole current process is supported. </p>
294
295 </div>
296 </div>
297 <a id="a0697af2e41f2e82b8ce71e3cc13f7eac"></a>
298 <h2 class="memtitle"><span class="permalink"><a href="#a0697af2e41f2e82b8ce71e3cc13f7eac">&#9670;&nbsp;</a></span>set_thisthread_membind</h2>
299
300 <div class="memitem">
301 <div class="memproto">
302 <table class="memname">
303 <tr>
304 <td class="memname">unsigned char hwloc_topology_membind_support::set_thisthread_membind</td>
305 </tr>
306 </table>
307 </div><div class="memdoc">
308 <p>Binding the current thread only is supported. </p>
309
310 </div>
311 </div>
312 <hr/>The documentation for this struct was generated from the following file:<ul>
313 <li><a class="el" href="a00122_source.html">hwloc.h</a></li>
314 </ul>
315 </div><!-- contents -->
316 <!-- start footer part -->
317 <hr class="footer"/><address class="footer"><small>
318 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
319 </small></address>
320 </body>
321 </html>
+0
-131
doc/doxygen-doc/html/a00312.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_topology_support Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#pub-attribs">Data Fields</a> </div>
43 <div class="headertitle">
44 <div class="title">hwloc_topology_support Struct Reference<div class="ingroups"><a class="el" href="a00199.html">Topology Detection Configuration and Query</a></div></div> </div>
45 </div><!--header-->
46 <div class="contents">
47
48 <p><code>#include &lt;<a class="el" href="a00125_source.html">hwloc.h</a>&gt;</code></p>
49 <table class="memberdecls">
50 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
51 Data Fields</h2></td></tr>
52 <tr class="memitem:aea3fbd7653d987d81f848636c420504d"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00296.html">hwloc_topology_discovery_support</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00312.html#aea3fbd7653d987d81f848636c420504d">discovery</a></td></tr>
53 <tr class="separator:aea3fbd7653d987d81f848636c420504d"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:adef2bb91f74c3e70a2a071393caf5f56"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00300.html">hwloc_topology_cpubind_support</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00312.html#adef2bb91f74c3e70a2a071393caf5f56">cpubind</a></td></tr>
55 <tr class="separator:adef2bb91f74c3e70a2a071393caf5f56"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:ac6eb62ae8bc0a68dce679a7107a36194"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00304.html">hwloc_topology_membind_support</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00312.html#ac6eb62ae8bc0a68dce679a7107a36194">membind</a></td></tr>
57 <tr class="separator:ac6eb62ae8bc0a68dce679a7107a36194"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:ab9d08df4b0b03994f21b893ece826e78"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00308.html">hwloc_topology_misc_support</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00312.html#ab9d08df4b0b03994f21b893ece826e78">misc</a></td></tr>
59 <tr class="separator:ab9d08df4b0b03994f21b893ece826e78"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 </table>
61 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
62 <div class="textblock"><p>Set of flags describing actual support for this topology. </p>
63 <p>This is retrieved with <a class="el" href="a00199.html#gab8c76173c4a8ce1a9a9366012b1388e6" title="Retrieve the topology support.">hwloc_topology_get_support()</a> and will be valid until the topology object is destroyed. Note: the values are correct only after discovery. </p>
64 </div><h2 class="groupheader">Field Documentation</h2>
65 <a id="adef2bb91f74c3e70a2a071393caf5f56"></a>
66 <h2 class="memtitle"><span class="permalink"><a href="#adef2bb91f74c3e70a2a071393caf5f56">&#9670;&nbsp;</a></span>cpubind</h2>
67
68 <div class="memitem">
69 <div class="memproto">
70 <table class="memname">
71 <tr>
72 <td class="memname">struct <a class="el" href="a00300.html">hwloc_topology_cpubind_support</a>* hwloc_topology_support::cpubind</td>
73 </tr>
74 </table>
75 </div><div class="memdoc">
76
77 </div>
78 </div>
79 <a id="aea3fbd7653d987d81f848636c420504d"></a>
80 <h2 class="memtitle"><span class="permalink"><a href="#aea3fbd7653d987d81f848636c420504d">&#9670;&nbsp;</a></span>discovery</h2>
81
82 <div class="memitem">
83 <div class="memproto">
84 <table class="memname">
85 <tr>
86 <td class="memname">struct <a class="el" href="a00296.html">hwloc_topology_discovery_support</a>* hwloc_topology_support::discovery</td>
87 </tr>
88 </table>
89 </div><div class="memdoc">
90
91 </div>
92 </div>
93 <a id="ac6eb62ae8bc0a68dce679a7107a36194"></a>
94 <h2 class="memtitle"><span class="permalink"><a href="#ac6eb62ae8bc0a68dce679a7107a36194">&#9670;&nbsp;</a></span>membind</h2>
95
96 <div class="memitem">
97 <div class="memproto">
98 <table class="memname">
99 <tr>
100 <td class="memname">struct <a class="el" href="a00304.html">hwloc_topology_membind_support</a>* hwloc_topology_support::membind</td>
101 </tr>
102 </table>
103 </div><div class="memdoc">
104
105 </div>
106 </div>
107 <a id="ab9d08df4b0b03994f21b893ece826e78"></a>
108 <h2 class="memtitle"><span class="permalink"><a href="#ab9d08df4b0b03994f21b893ece826e78">&#9670;&nbsp;</a></span>misc</h2>
109
110 <div class="memitem">
111 <div class="memproto">
112 <table class="memname">
113 <tr>
114 <td class="memname">struct <a class="el" href="a00308.html">hwloc_topology_misc_support</a>* hwloc_topology_support::misc</td>
115 </tr>
116 </table>
117 </div><div class="memdoc">
118
119 </div>
120 </div>
121 <hr/>The documentation for this struct was generated from the following file:<ul>
122 <li><a class="el" href="a00125_source.html">hwloc.h</a></li>
123 </ul>
124 </div><!-- contents -->
125 <!-- start footer part -->
126 <hr class="footer"/><address class="footer"><small>
127 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
128 </small></address>
129 </body>
130 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_topology_misc_support Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#pub-attribs">Data Fields</a> </div>
43 <div class="headertitle">
44 <div class="title">hwloc_topology_misc_support Struct Reference<div class="ingroups"><a class="el" href="a00202.html">Topology Detection Configuration and Query</a></div></div> </div>
45 </div><!--header-->
46 <div class="contents">
47
48 <p><code>#include &lt;<a class="el" href="a00122_source.html">hwloc.h</a>&gt;</code></p>
49 <table class="memberdecls">
50 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
51 Data Fields</h2></td></tr>
52 <tr class="memitem:adf54a6dbe8e9dd5033dfe9c93df726c4"><td class="memItemLeft" align="right" valign="top">unsigned char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00314.html#adf54a6dbe8e9dd5033dfe9c93df726c4">imported_support</a></td></tr>
53 <tr class="separator:adf54a6dbe8e9dd5033dfe9c93df726c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 </table>
55 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
56 <div class="textblock"><p>Flags describing miscellaneous features. </p>
57 </div><h2 class="groupheader">Field Documentation</h2>
58 <a id="adf54a6dbe8e9dd5033dfe9c93df726c4"></a>
59 <h2 class="memtitle"><span class="permalink"><a href="#adf54a6dbe8e9dd5033dfe9c93df726c4">&#9670;&nbsp;</a></span>imported_support</h2>
60
61 <div class="memitem">
62 <div class="memproto">
63 <table class="memname">
64 <tr>
65 <td class="memname">unsigned char hwloc_topology_misc_support::imported_support</td>
66 </tr>
67 </table>
68 </div><div class="memdoc">
69 <p>Support was imported when importing another topology, see <a class="el" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdead93e82b8668ee90e4f9354e201a2ed9c" title="Import support from the imported topology.">HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT</a>. </p>
70
71 </div>
72 </div>
73 <hr/>The documentation for this struct was generated from the following file:<ul>
74 <li><a class="el" href="a00122_source.html">hwloc.h</a></li>
75 </ul>
76 </div><!-- contents -->
77 <!-- start footer part -->
78 <hr class="footer"/><address class="footer"><small>
79 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
80 </small></address>
81 </body>
82 </html>
+0
-141
doc/doxygen-doc/html/a00316.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_distances_s Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#pub-attribs">Data Fields</a> </div>
43 <div class="headertitle">
44 <div class="title">hwloc_distances_s Struct Reference<div class="ingroups"><a class="el" href="a00214.html">Retrieve distances between objects</a></div></div> </div>
45 </div><!--header-->
46 <div class="contents">
47
48 <p><code>#include &lt;<a class="el" href="a00137_source.html">distances.h</a>&gt;</code></p>
49 <table class="memberdecls">
50 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
51 Data Fields</h2></td></tr>
52 <tr class="memitem:a4ca2af858cebbce7324ec49903d09474"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00316.html#a4ca2af858cebbce7324ec49903d09474">nbobjs</a></td></tr>
53 <tr class="separator:a4ca2af858cebbce7324ec49903d09474"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:af1e78b2d628d191fa6cae3fbfe891078"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00316.html#af1e78b2d628d191fa6cae3fbfe891078">objs</a></td></tr>
55 <tr class="separator:af1e78b2d628d191fa6cae3fbfe891078"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:aef9c83cf467da1b1fa4c36493febb3b5"><td class="memItemLeft" align="right" valign="top">unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00316.html#aef9c83cf467da1b1fa4c36493febb3b5">kind</a></td></tr>
57 <tr class="separator:aef9c83cf467da1b1fa4c36493febb3b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:ae43e19b2c743de05c93d71a30beaca75"><td class="memItemLeft" align="right" valign="top">hwloc_uint64_t *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00316.html#ae43e19b2c743de05c93d71a30beaca75">values</a></td></tr>
59 <tr class="separator:ae43e19b2c743de05c93d71a30beaca75"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 </table>
61 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
62 <div class="textblock"><p>Matrix of distances between a set of objects. </p>
63 <p>This matrix often contains latencies between NUMA nodes (as reported in the System Locality Distance Information Table (SLIT) in the ACPI specification), which may or may not be physically accurate. It corresponds to the latency for accessing the memory of one node from a core in another node. The corresponding kind is <a class="el" href="a00214.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a90dc38248c8d5392d4dd3e88f391e984" title="These distances were obtained from the operating system or hardware.">HWLOC_DISTANCES_KIND_FROM_OS</a> | <a class="el" href="a00214.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a0148d7f9be833a04f5a55455437c227b" title="These distances were provided by the user.">HWLOC_DISTANCES_KIND_FROM_USER</a>. The name of this distances structure is "NUMALatency".</p>
64 <p>The matrix may also contain bandwidths between random sets of objects, possibly provided by the user, as specified in the <code>kind</code> attribute. </p>
65 </div><h2 class="groupheader">Field Documentation</h2>
66 <a id="aef9c83cf467da1b1fa4c36493febb3b5"></a>
67 <h2 class="memtitle"><span class="permalink"><a href="#aef9c83cf467da1b1fa4c36493febb3b5">&#9670;&nbsp;</a></span>kind</h2>
68
69 <div class="memitem">
70 <div class="memproto">
71 <table class="memname">
72 <tr>
73 <td class="memname">unsigned long hwloc_distances_s::kind</td>
74 </tr>
75 </table>
76 </div><div class="memdoc">
77
78 <p>OR'ed set of <a class="el" href="a00214.html#gab1bb10d3adb85b52cdc6fe5a7f74f108" title="Kinds of distance matrices.">hwloc_distances_kind_e</a>. </p>
79
80 </div>
81 </div>
82 <a id="a4ca2af858cebbce7324ec49903d09474"></a>
83 <h2 class="memtitle"><span class="permalink"><a href="#a4ca2af858cebbce7324ec49903d09474">&#9670;&nbsp;</a></span>nbobjs</h2>
84
85 <div class="memitem">
86 <div class="memproto">
87 <table class="memname">
88 <tr>
89 <td class="memname">unsigned hwloc_distances_s::nbobjs</td>
90 </tr>
91 </table>
92 </div><div class="memdoc">
93
94 <p>Number of objects described by the distance matrix. </p>
95
96 </div>
97 </div>
98 <a id="af1e78b2d628d191fa6cae3fbfe891078"></a>
99 <h2 class="memtitle"><span class="permalink"><a href="#af1e78b2d628d191fa6cae3fbfe891078">&#9670;&nbsp;</a></span>objs</h2>
100
101 <div class="memitem">
102 <div class="memproto">
103 <table class="memname">
104 <tr>
105 <td class="memname"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>* hwloc_distances_s::objs</td>
106 </tr>
107 </table>
108 </div><div class="memdoc">
109
110 <p>Array of objects described by the distance matrix. These objects are not in any particular order, see <a class="el" href="a00215.html#gab9e770c7d56c5d6040f26bd1dc8854cd" title="Find the index of an object in a distances structure.">hwloc_distances_obj_index()</a> and <a class="el" href="a00215.html#ga3c665b23056e3269f777b21a67148c82" title="Find the values between two objects in a distance matrices.">hwloc_distances_obj_pair_values()</a> for easy ways to find objects in this array and their corresponding values. </p>
111
112 </div>
113 </div>
114 <a id="ae43e19b2c743de05c93d71a30beaca75"></a>
115 <h2 class="memtitle"><span class="permalink"><a href="#ae43e19b2c743de05c93d71a30beaca75">&#9670;&nbsp;</a></span>values</h2>
116
117 <div class="memitem">
118 <div class="memproto">
119 <table class="memname">
120 <tr>
121 <td class="memname">hwloc_uint64_t* hwloc_distances_s::values</td>
122 </tr>
123 </table>
124 </div><div class="memdoc">
125
126 <p>Matrix of distances between objects, stored as a one-dimension array. </p>
127 <p>Distance from i-th to j-th object is stored in slot i*nbobjs+j. The meaning of the value depends on the <code>kind</code> attribute. </p>
128
129 </div>
130 </div>
131 <hr/>The documentation for this struct was generated from the following file:<ul>
132 <li><a class="el" href="a00137_source.html">distances.h</a></li>
133 </ul>
134 </div><!-- contents -->
135 <!-- start footer part -->
136 <hr class="footer"/><address class="footer"><small>
137 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
138 </small></address>
139 </body>
140 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_topology_support Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#pub-attribs">Data Fields</a> </div>
43 <div class="headertitle">
44 <div class="title">hwloc_topology_support Struct Reference<div class="ingroups"><a class="el" href="a00202.html">Topology Detection Configuration and Query</a></div></div> </div>
45 </div><!--header-->
46 <div class="contents">
47
48 <p><code>#include &lt;<a class="el" href="a00122_source.html">hwloc.h</a>&gt;</code></p>
49 <table class="memberdecls">
50 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
51 Data Fields</h2></td></tr>
52 <tr class="memitem:aea3fbd7653d987d81f848636c420504d"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00302.html">hwloc_topology_discovery_support</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00318.html#aea3fbd7653d987d81f848636c420504d">discovery</a></td></tr>
53 <tr class="separator:aea3fbd7653d987d81f848636c420504d"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:adef2bb91f74c3e70a2a071393caf5f56"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00306.html">hwloc_topology_cpubind_support</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00318.html#adef2bb91f74c3e70a2a071393caf5f56">cpubind</a></td></tr>
55 <tr class="separator:adef2bb91f74c3e70a2a071393caf5f56"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:ac6eb62ae8bc0a68dce679a7107a36194"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00310.html">hwloc_topology_membind_support</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00318.html#ac6eb62ae8bc0a68dce679a7107a36194">membind</a></td></tr>
57 <tr class="separator:ac6eb62ae8bc0a68dce679a7107a36194"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:ab9d08df4b0b03994f21b893ece826e78"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00314.html">hwloc_topology_misc_support</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00318.html#ab9d08df4b0b03994f21b893ece826e78">misc</a></td></tr>
59 <tr class="separator:ab9d08df4b0b03994f21b893ece826e78"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 </table>
61 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
62 <div class="textblock"><p>Set of flags describing actual support for this topology. </p>
63 <p>This is retrieved with <a class="el" href="a00202.html#gab8c76173c4a8ce1a9a9366012b1388e6" title="Retrieve the topology support.">hwloc_topology_get_support()</a> and will be valid until the topology object is destroyed. Note: the values are correct only after discovery. </p>
64 </div><h2 class="groupheader">Field Documentation</h2>
65 <a id="adef2bb91f74c3e70a2a071393caf5f56"></a>
66 <h2 class="memtitle"><span class="permalink"><a href="#adef2bb91f74c3e70a2a071393caf5f56">&#9670;&nbsp;</a></span>cpubind</h2>
67
68 <div class="memitem">
69 <div class="memproto">
70 <table class="memname">
71 <tr>
72 <td class="memname">struct <a class="el" href="a00306.html">hwloc_topology_cpubind_support</a>* hwloc_topology_support::cpubind</td>
73 </tr>
74 </table>
75 </div><div class="memdoc">
76
77 </div>
78 </div>
79 <a id="aea3fbd7653d987d81f848636c420504d"></a>
80 <h2 class="memtitle"><span class="permalink"><a href="#aea3fbd7653d987d81f848636c420504d">&#9670;&nbsp;</a></span>discovery</h2>
81
82 <div class="memitem">
83 <div class="memproto">
84 <table class="memname">
85 <tr>
86 <td class="memname">struct <a class="el" href="a00302.html">hwloc_topology_discovery_support</a>* hwloc_topology_support::discovery</td>
87 </tr>
88 </table>
89 </div><div class="memdoc">
90
91 </div>
92 </div>
93 <a id="ac6eb62ae8bc0a68dce679a7107a36194"></a>
94 <h2 class="memtitle"><span class="permalink"><a href="#ac6eb62ae8bc0a68dce679a7107a36194">&#9670;&nbsp;</a></span>membind</h2>
95
96 <div class="memitem">
97 <div class="memproto">
98 <table class="memname">
99 <tr>
100 <td class="memname">struct <a class="el" href="a00310.html">hwloc_topology_membind_support</a>* hwloc_topology_support::membind</td>
101 </tr>
102 </table>
103 </div><div class="memdoc">
104
105 </div>
106 </div>
107 <a id="ab9d08df4b0b03994f21b893ece826e78"></a>
108 <h2 class="memtitle"><span class="permalink"><a href="#ab9d08df4b0b03994f21b893ece826e78">&#9670;&nbsp;</a></span>misc</h2>
109
110 <div class="memitem">
111 <div class="memproto">
112 <table class="memname">
113 <tr>
114 <td class="memname">struct <a class="el" href="a00314.html">hwloc_topology_misc_support</a>* hwloc_topology_support::misc</td>
115 </tr>
116 </table>
117 </div><div class="memdoc">
118
119 </div>
120 </div>
121 <hr/>The documentation for this struct was generated from the following file:<ul>
122 <li><a class="el" href="a00122_source.html">hwloc.h</a></li>
123 </ul>
124 </div><!-- contents -->
125 <!-- start footer part -->
126 <hr class="footer"/><address class="footer"><small>
127 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
128 </small></address>
129 </body>
130 </html>
+0
-106
doc/doxygen-doc/html/a00320.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_location Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#nested-classes">Data Structures</a> &#124;
43 <a href="#pub-attribs">Data Fields</a> </div>
44 <div class="headertitle">
45 <div class="title">hwloc_location Struct Reference<div class="ingroups"><a class="el" href="a00217.html">Comparing memory node attributes for finding where to allocate on</a></div></div> </div>
46 </div><!--header-->
47 <div class="contents">
48
49 <p><code>#include &lt;<a class="el" href="a00140_source.html">memattrs.h</a>&gt;</code></p>
50 <table class="memberdecls">
51 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
52 Data Structures</h2></td></tr>
53 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">union &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00324.html">hwloc_location_u</a></td></tr>
54 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
55 </table><table class="memberdecls">
56 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
57 Data Fields</h2></td></tr>
58 <tr class="memitem:aeb9c0ab74a7d3506a76d0b82600a28a7"><td class="memItemLeft" align="right" valign="top">enum <a class="el" href="a00217.html#ga33099ba58f607fc70925da3777688586">hwloc_location_type_e</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00320.html#aeb9c0ab74a7d3506a76d0b82600a28a7">type</a></td></tr>
59 <tr class="separator:aeb9c0ab74a7d3506a76d0b82600a28a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:a707a25a5b65177e4d081be49aa0777a2"><td class="memItemLeft" align="right" valign="top">union <a class="el" href="a00324.html">hwloc_location::hwloc_location_u</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00320.html#a707a25a5b65177e4d081be49aa0777a2">location</a></td></tr>
61 <tr class="separator:a707a25a5b65177e4d081be49aa0777a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 </table>
63 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
64 <div class="textblock"><p>Where to measure attributes from. </p>
65 </div><h2 class="groupheader">Field Documentation</h2>
66 <a id="a707a25a5b65177e4d081be49aa0777a2"></a>
67 <h2 class="memtitle"><span class="permalink"><a href="#a707a25a5b65177e4d081be49aa0777a2">&#9670;&nbsp;</a></span>location</h2>
68
69 <div class="memitem">
70 <div class="memproto">
71 <table class="memname">
72 <tr>
73 <td class="memname">union <a class="el" href="a00324.html">hwloc_location::hwloc_location_u</a> hwloc_location::location</td>
74 </tr>
75 </table>
76 </div><div class="memdoc">
77
78 </div>
79 </div>
80 <a id="aeb9c0ab74a7d3506a76d0b82600a28a7"></a>
81 <h2 class="memtitle"><span class="permalink"><a href="#aeb9c0ab74a7d3506a76d0b82600a28a7">&#9670;&nbsp;</a></span>type</h2>
82
83 <div class="memitem">
84 <div class="memproto">
85 <table class="memname">
86 <tr>
87 <td class="memname">enum <a class="el" href="a00217.html#ga33099ba58f607fc70925da3777688586">hwloc_location_type_e</a> hwloc_location::type</td>
88 </tr>
89 </table>
90 </div><div class="memdoc">
91
92 <p>Type of location. </p>
93
94 </div>
95 </div>
96 <hr/>The documentation for this struct was generated from the following file:<ul>
97 <li><a class="el" href="a00140_source.html">memattrs.h</a></li>
98 </ul>
99 </div><!-- contents -->
100 <!-- start footer part -->
101 <hr class="footer"/><address class="footer"><small>
102 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
103 </small></address>
104 </body>
105 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_distances_s Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#pub-attribs">Data Fields</a> </div>
43 <div class="headertitle">
44 <div class="title">hwloc_distances_s Struct Reference<div class="ingroups"><a class="el" href="a00217.html">Retrieve distances between objects</a></div></div> </div>
45 </div><!--header-->
46 <div class="contents">
47
48 <p><code>#include &lt;<a class="el" href="a00134_source.html">distances.h</a>&gt;</code></p>
49 <table class="memberdecls">
50 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
51 Data Fields</h2></td></tr>
52 <tr class="memitem:a4ca2af858cebbce7324ec49903d09474"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00322.html#a4ca2af858cebbce7324ec49903d09474">nbobjs</a></td></tr>
53 <tr class="separator:a4ca2af858cebbce7324ec49903d09474"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:af1e78b2d628d191fa6cae3fbfe891078"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00322.html#af1e78b2d628d191fa6cae3fbfe891078">objs</a></td></tr>
55 <tr class="separator:af1e78b2d628d191fa6cae3fbfe891078"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:aef9c83cf467da1b1fa4c36493febb3b5"><td class="memItemLeft" align="right" valign="top">unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00322.html#aef9c83cf467da1b1fa4c36493febb3b5">kind</a></td></tr>
57 <tr class="separator:aef9c83cf467da1b1fa4c36493febb3b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:ae43e19b2c743de05c93d71a30beaca75"><td class="memItemLeft" align="right" valign="top">hwloc_uint64_t *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00322.html#ae43e19b2c743de05c93d71a30beaca75">values</a></td></tr>
59 <tr class="separator:ae43e19b2c743de05c93d71a30beaca75"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 </table>
61 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
62 <div class="textblock"><p>Matrix of distances between a set of objects. </p>
63 <p>This matrix often contains latencies between NUMA nodes (as reported in the System Locality Distance Information Table (SLIT) in the ACPI specification), which may or may not be physically accurate. It corresponds to the latency for accessing the memory of one node from a core in another node. The corresponding kind is <a class="el" href="a00217.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a90dc38248c8d5392d4dd3e88f391e984" title="These distances were obtained from the operating system or hardware.">HWLOC_DISTANCES_KIND_FROM_OS</a> | <a class="el" href="a00217.html#ggab1bb10d3adb85b52cdc6fe5a7f74f108a0148d7f9be833a04f5a55455437c227b" title="These distances were provided by the user.">HWLOC_DISTANCES_KIND_FROM_USER</a>. The name of this distances structure is "NUMALatency". Others distance structures include and "XGMIBandwidth" and "NVLinkBandwidth".</p>
64 <p>The matrix may also contain bandwidths between random sets of objects, possibly provided by the user, as specified in the <code>kind</code> attribute.</p>
65 <p>Pointers <code>objs</code> and <code>values</code> should not be replaced, reallocated, freed, etc. However callers are allowed to modify <code>kind</code> as well as the contents of <code>objs</code> and <code>values</code> arrays. For instance, if there is a single NUMA node per Package, <a class="el" href="a00209.html#gab5df3ad1e8565ea0c2cf06412f6f6233" title="Return an object of a different type with same locality.">hwloc_get_obj_with_same_locality()</a> may be used to convert between them and replace NUMA nodes in the <code>objs</code> array with the corresponding Packages. See also <a class="el" href="a00217.html#gabcadd041f3072999d68f2d94e38670f7" title="Apply a transformation to a distances structure.">hwloc_distances_transform()</a> for applying some transformations to the structure. </p>
66 </div><h2 class="groupheader">Field Documentation</h2>
67 <a id="aef9c83cf467da1b1fa4c36493febb3b5"></a>
68 <h2 class="memtitle"><span class="permalink"><a href="#aef9c83cf467da1b1fa4c36493febb3b5">&#9670;&nbsp;</a></span>kind</h2>
69
70 <div class="memitem">
71 <div class="memproto">
72 <table class="memname">
73 <tr>
74 <td class="memname">unsigned long hwloc_distances_s::kind</td>
75 </tr>
76 </table>
77 </div><div class="memdoc">
78
79 <p>OR'ed set of <a class="el" href="a00217.html#gab1bb10d3adb85b52cdc6fe5a7f74f108" title="Kinds of distance matrices.">hwloc_distances_kind_e</a>. </p>
80
81 </div>
82 </div>
83 <a id="a4ca2af858cebbce7324ec49903d09474"></a>
84 <h2 class="memtitle"><span class="permalink"><a href="#a4ca2af858cebbce7324ec49903d09474">&#9670;&nbsp;</a></span>nbobjs</h2>
85
86 <div class="memitem">
87 <div class="memproto">
88 <table class="memname">
89 <tr>
90 <td class="memname">unsigned hwloc_distances_s::nbobjs</td>
91 </tr>
92 </table>
93 </div><div class="memdoc">
94
95 <p>Number of objects described by the distance matrix. </p>
96
97 </div>
98 </div>
99 <a id="af1e78b2d628d191fa6cae3fbfe891078"></a>
100 <h2 class="memtitle"><span class="permalink"><a href="#af1e78b2d628d191fa6cae3fbfe891078">&#9670;&nbsp;</a></span>objs</h2>
101
102 <div class="memitem">
103 <div class="memproto">
104 <table class="memname">
105 <tr>
106 <td class="memname"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>* hwloc_distances_s::objs</td>
107 </tr>
108 </table>
109 </div><div class="memdoc">
110
111 <p>Array of objects described by the distance matrix. These objects are not in any particular order, see <a class="el" href="a00218.html#gab9e770c7d56c5d6040f26bd1dc8854cd" title="Find the index of an object in a distances structure.">hwloc_distances_obj_index()</a> and <a class="el" href="a00218.html#ga3c665b23056e3269f777b21a67148c82" title="Find the values between two objects in a distance matrices.">hwloc_distances_obj_pair_values()</a> for easy ways to find objects in this array and their corresponding values. </p>
112
113 </div>
114 </div>
115 <a id="ae43e19b2c743de05c93d71a30beaca75"></a>
116 <h2 class="memtitle"><span class="permalink"><a href="#ae43e19b2c743de05c93d71a30beaca75">&#9670;&nbsp;</a></span>values</h2>
117
118 <div class="memitem">
119 <div class="memproto">
120 <table class="memname">
121 <tr>
122 <td class="memname">hwloc_uint64_t* hwloc_distances_s::values</td>
123 </tr>
124 </table>
125 </div><div class="memdoc">
126
127 <p>Matrix of distances between objects, stored as a one-dimension array. </p>
128 <p>Distance from i-th to j-th object is stored in slot i*nbobjs+j. The meaning of the value depends on the <code>kind</code> attribute. </p>
129
130 </div>
131 </div>
132 <hr/>The documentation for this struct was generated from the following file:<ul>
133 <li><a class="el" href="a00134_source.html">distances.h</a></li>
134 </ul>
135 </div><!-- contents -->
136 <!-- start footer part -->
137 <hr class="footer"/><address class="footer"><small>
138 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
139 </small></address>
140 </body>
141 </html>
+0
-106
doc/doxygen-doc/html/a00324.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_location::hwloc_location_u Union Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 <div id="nav-path" class="navpath">
40 <ul>
41 <li class="navelem"><a class="el" href="a00320.html">hwloc_location</a></li><li class="navelem"><a class="el" href="a00324.html">hwloc_location_u</a></li> </ul>
42 </div>
43 </div><!-- top -->
44 <div class="header">
45 <div class="summary">
46 <a href="#pub-attribs">Data Fields</a> </div>
47 <div class="headertitle">
48 <div class="title">hwloc_location::hwloc_location_u Union Reference</div> </div>
49 </div><!--header-->
50 <div class="contents">
51
52 <p><code>#include &lt;<a class="el" href="a00140_source.html">memattrs.h</a>&gt;</code></p>
53 <table class="memberdecls">
54 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
55 Data Fields</h2></td></tr>
56 <tr class="memitem:a033bad8f6b891992f0c18b85a88c5561"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00324.html#a033bad8f6b891992f0c18b85a88c5561">cpuset</a></td></tr>
57 <tr class="separator:a033bad8f6b891992f0c18b85a88c5561"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:acf2ebf75869f0a53a884ac2ab3374122"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00324.html#acf2ebf75869f0a53a884ac2ab3374122">object</a></td></tr>
59 <tr class="separator:acf2ebf75869f0a53a884ac2ab3374122"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 </table>
61 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
62 <div class="textblock"><p>Actual location. </p>
63 </div><h2 class="groupheader">Field Documentation</h2>
64 <a id="a033bad8f6b891992f0c18b85a88c5561"></a>
65 <h2 class="memtitle"><span class="permalink"><a href="#a033bad8f6b891992f0c18b85a88c5561">&#9670;&nbsp;</a></span>cpuset</h2>
66
67 <div class="memitem">
68 <div class="memproto">
69 <table class="memname">
70 <tr>
71 <td class="memname"><a class="el" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> hwloc_location::hwloc_location_u::cpuset</td>
72 </tr>
73 </table>
74 </div><div class="memdoc">
75
76 <p>Location as a cpuset, when the location type is <a class="el" href="a00217.html#gga33099ba58f607fc70925da3777688586a7135318a86361ad75fd1648e6bf6d174" title="Location is given as a cpuset, in the location cpuset union field.">HWLOC_LOCATION_TYPE_CPUSET</a>. </p>
77
78 </div>
79 </div>
80 <a id="acf2ebf75869f0a53a884ac2ab3374122"></a>
81 <h2 class="memtitle"><span class="permalink"><a href="#acf2ebf75869f0a53a884ac2ab3374122">&#9670;&nbsp;</a></span>object</h2>
82
83 <div class="memitem">
84 <div class="memproto">
85 <table class="memname">
86 <tr>
87 <td class="memname"><a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_location::hwloc_location_u::object</td>
88 </tr>
89 </table>
90 </div><div class="memdoc">
91
92 <p>Location as an object, when the location type is <a class="el" href="a00217.html#gga33099ba58f607fc70925da3777688586af637c39b23d48cff15ddb008644aaa84" title="Location is given as an object, in the location object union field.">HWLOC_LOCATION_TYPE_OBJECT</a>. </p>
93
94 </div>
95 </div>
96 <hr/>The documentation for this union was generated from the following file:<ul>
97 <li><a class="el" href="a00140_source.html">memattrs.h</a></li>
98 </ul>
99 </div><!-- contents -->
100 <!-- start footer part -->
101 <hr class="footer"/><address class="footer"><small>
102 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
103 </small></address>
104 </body>
105 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_location Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#nested-classes">Data Structures</a> &#124;
43 <a href="#pub-attribs">Data Fields</a> </div>
44 <div class="headertitle">
45 <div class="title">hwloc_location Struct Reference<div class="ingroups"><a class="el" href="a00221.html">Comparing memory node attributes for finding where to allocate on</a></div></div> </div>
46 </div><!--header-->
47 <div class="contents">
48
49 <p><code>#include &lt;<a class="el" href="a00137_source.html">memattrs.h</a>&gt;</code></p>
50 <table class="memberdecls">
51 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
52 Data Structures</h2></td></tr>
53 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">union &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00330.html">hwloc_location_u</a></td></tr>
54 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
55 </table><table class="memberdecls">
56 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
57 Data Fields</h2></td></tr>
58 <tr class="memitem:aeb9c0ab74a7d3506a76d0b82600a28a7"><td class="memItemLeft" align="right" valign="top">enum <a class="el" href="a00221.html#ga33099ba58f607fc70925da3777688586">hwloc_location_type_e</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00326.html#aeb9c0ab74a7d3506a76d0b82600a28a7">type</a></td></tr>
59 <tr class="separator:aeb9c0ab74a7d3506a76d0b82600a28a7"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:a707a25a5b65177e4d081be49aa0777a2"><td class="memItemLeft" align="right" valign="top">union <a class="el" href="a00330.html">hwloc_location::hwloc_location_u</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00326.html#a707a25a5b65177e4d081be49aa0777a2">location</a></td></tr>
61 <tr class="separator:a707a25a5b65177e4d081be49aa0777a2"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 </table>
63 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
64 <div class="textblock"><p>Where to measure attributes from. </p>
65 </div><h2 class="groupheader">Field Documentation</h2>
66 <a id="a707a25a5b65177e4d081be49aa0777a2"></a>
67 <h2 class="memtitle"><span class="permalink"><a href="#a707a25a5b65177e4d081be49aa0777a2">&#9670;&nbsp;</a></span>location</h2>
68
69 <div class="memitem">
70 <div class="memproto">
71 <table class="memname">
72 <tr>
73 <td class="memname">union <a class="el" href="a00330.html">hwloc_location::hwloc_location_u</a> hwloc_location::location</td>
74 </tr>
75 </table>
76 </div><div class="memdoc">
77
78 </div>
79 </div>
80 <a id="aeb9c0ab74a7d3506a76d0b82600a28a7"></a>
81 <h2 class="memtitle"><span class="permalink"><a href="#aeb9c0ab74a7d3506a76d0b82600a28a7">&#9670;&nbsp;</a></span>type</h2>
82
83 <div class="memitem">
84 <div class="memproto">
85 <table class="memname">
86 <tr>
87 <td class="memname">enum <a class="el" href="a00221.html#ga33099ba58f607fc70925da3777688586">hwloc_location_type_e</a> hwloc_location::type</td>
88 </tr>
89 </table>
90 </div><div class="memdoc">
91
92 <p>Type of location. </p>
93
94 </div>
95 </div>
96 <hr/>The documentation for this struct was generated from the following file:<ul>
97 <li><a class="el" href="a00137_source.html">memattrs.h</a></li>
98 </ul>
99 </div><!-- contents -->
100 <!-- start footer part -->
101 <hr class="footer"/><address class="footer"><small>
102 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
103 </small></address>
104 </body>
105 </html>
+0
-196
doc/doxygen-doc/html/a00328.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_cl_device_topology_amd Union Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#pub-attribs">Data Fields</a> </div>
43 <div class="headertitle">
44 <div class="title">hwloc_cl_device_topology_amd Union Reference</div> </div>
45 </div><!--header-->
46 <div class="contents">
47
48 <p><code>#include &lt;<a class="el" href="a00155_source.html">opencl.h</a>&gt;</code></p>
49 <table class="memberdecls">
50 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
51 Data Fields</h2></td></tr>
52 <tr class="memitem:a7bba6ab297b6f44e43c5937b80b4cfb6"><td class="memItemLeft" >struct {</td></tr>
53 <tr class="memitem:a02fc93c4d8d6f9732c7b71ebb3a8ac5c"><td class="memItemLeft" >&#160;&#160;&#160;cl_uint&#160;&#160;&#160;<a class="el" href="a00328.html#a8ec4ea89b862bb271845b48063f332b4">type</a></td></tr>
54 <tr class="separator:a02fc93c4d8d6f9732c7b71ebb3a8ac5c"><td class="memSeparator" colspan="2">&#160;</td></tr>
55 <tr class="memitem:aeb68174a5abc630add0c26cd6cdfb8f6"><td class="memItemLeft" >&#160;&#160;&#160;cl_uint&#160;&#160;&#160;<a class="el" href="a00328.html#afbd6b814607b06fc5b2f36ad14420398">data</a> [5]</td></tr>
56 <tr class="separator:aeb68174a5abc630add0c26cd6cdfb8f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
57 <tr class="memitem:a7bba6ab297b6f44e43c5937b80b4cfb6"><td class="memItemLeft" valign="top">}&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00328.html#a7bba6ab297b6f44e43c5937b80b4cfb6">raw</a></td></tr>
58 <tr class="separator:a7bba6ab297b6f44e43c5937b80b4cfb6"><td class="memSeparator" colspan="2">&#160;</td></tr>
59 <tr class="memitem:a05e9a845012cd9d1f13a39cc35ab40a1"><td class="memItemLeft" >struct {</td></tr>
60 <tr class="memitem:ac42c3aa1f24394b4ff8be15679522760"><td class="memItemLeft" >&#160;&#160;&#160;cl_uint&#160;&#160;&#160;<a class="el" href="a00328.html#a8ec4ea89b862bb271845b48063f332b4">type</a></td></tr>
61 <tr class="separator:ac42c3aa1f24394b4ff8be15679522760"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:a4cf69135f9778f990424eddfc9ec1850"><td class="memItemLeft" >&#160;&#160;&#160;cl_char&#160;&#160;&#160;<a class="el" href="a00328.html#ac8650d7eea96eef290481fee980d1d47">unused</a> [17]</td></tr>
63 <tr class="separator:a4cf69135f9778f990424eddfc9ec1850"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 <tr class="memitem:aff0e249c4dc5c7253faaa67bd4120aa1"><td class="memItemLeft" >&#160;&#160;&#160;cl_char&#160;&#160;&#160;<a class="el" href="a00328.html#a4a23e3cc034b7ab105cab0e863dcab69">bus</a></td></tr>
65 <tr class="separator:aff0e249c4dc5c7253faaa67bd4120aa1"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 <tr class="memitem:a2838ee92e3a3c08869461f368e21f423"><td class="memItemLeft" >&#160;&#160;&#160;cl_char&#160;&#160;&#160;<a class="el" href="a00328.html#a017033a953d71455b067007cabb92e9c">device</a></td></tr>
67 <tr class="separator:a2838ee92e3a3c08869461f368e21f423"><td class="memSeparator" colspan="2">&#160;</td></tr>
68 <tr class="memitem:ab5264a700bed4a93be4ed1aadb62fd1d"><td class="memItemLeft" >&#160;&#160;&#160;cl_char&#160;&#160;&#160;<a class="el" href="a00328.html#a77a67ac73cff98d330ef7258b240bac3">function</a></td></tr>
69 <tr class="separator:ab5264a700bed4a93be4ed1aadb62fd1d"><td class="memSeparator" colspan="2">&#160;</td></tr>
70 <tr class="memitem:a05e9a845012cd9d1f13a39cc35ab40a1"><td class="memItemLeft" valign="top">}&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00328.html#a05e9a845012cd9d1f13a39cc35ab40a1">pcie</a></td></tr>
71 <tr class="separator:a05e9a845012cd9d1f13a39cc35ab40a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
72 </table>
73 <h2 class="groupheader">Field Documentation</h2>
74 <a id="a4a23e3cc034b7ab105cab0e863dcab69"></a>
75 <h2 class="memtitle"><span class="permalink"><a href="#a4a23e3cc034b7ab105cab0e863dcab69">&#9670;&nbsp;</a></span>bus</h2>
76
77 <div class="memitem">
78 <div class="memproto">
79 <table class="memname">
80 <tr>
81 <td class="memname">cl_char hwloc_cl_device_topology_amd::bus</td>
82 </tr>
83 </table>
84 </div><div class="memdoc">
85
86 </div>
87 </div>
88 <a id="afbd6b814607b06fc5b2f36ad14420398"></a>
89 <h2 class="memtitle"><span class="permalink"><a href="#afbd6b814607b06fc5b2f36ad14420398">&#9670;&nbsp;</a></span>data</h2>
90
91 <div class="memitem">
92 <div class="memproto">
93 <table class="memname">
94 <tr>
95 <td class="memname">cl_uint hwloc_cl_device_topology_amd::data[5]</td>
96 </tr>
97 </table>
98 </div><div class="memdoc">
99
100 </div>
101 </div>
102 <a id="a017033a953d71455b067007cabb92e9c"></a>
103 <h2 class="memtitle"><span class="permalink"><a href="#a017033a953d71455b067007cabb92e9c">&#9670;&nbsp;</a></span>device</h2>
104
105 <div class="memitem">
106 <div class="memproto">
107 <table class="memname">
108 <tr>
109 <td class="memname">cl_char hwloc_cl_device_topology_amd::device</td>
110 </tr>
111 </table>
112 </div><div class="memdoc">
113
114 </div>
115 </div>
116 <a id="a77a67ac73cff98d330ef7258b240bac3"></a>
117 <h2 class="memtitle"><span class="permalink"><a href="#a77a67ac73cff98d330ef7258b240bac3">&#9670;&nbsp;</a></span>function</h2>
118
119 <div class="memitem">
120 <div class="memproto">
121 <table class="memname">
122 <tr>
123 <td class="memname">cl_char hwloc_cl_device_topology_amd::function</td>
124 </tr>
125 </table>
126 </div><div class="memdoc">
127
128 </div>
129 </div>
130 <a id="a05e9a845012cd9d1f13a39cc35ab40a1"></a>
131 <h2 class="memtitle"><span class="permalink"><a href="#a05e9a845012cd9d1f13a39cc35ab40a1">&#9670;&nbsp;</a></span></h2>
132
133 <div class="memitem">
134 <div class="memproto">
135 <table class="memname">
136 <tr>
137 <td class="memname">struct { ... } hwloc_cl_device_topology_amd::pcie</td>
138 </tr>
139 </table>
140 </div><div class="memdoc">
141
142 </div>
143 </div>
144 <a id="a7bba6ab297b6f44e43c5937b80b4cfb6"></a>
145 <h2 class="memtitle"><span class="permalink"><a href="#a7bba6ab297b6f44e43c5937b80b4cfb6">&#9670;&nbsp;</a></span></h2>
146
147 <div class="memitem">
148 <div class="memproto">
149 <table class="memname">
150 <tr>
151 <td class="memname">struct { ... } hwloc_cl_device_topology_amd::raw</td>
152 </tr>
153 </table>
154 </div><div class="memdoc">
155
156 </div>
157 </div>
158 <a id="a8ec4ea89b862bb271845b48063f332b4"></a>
159 <h2 class="memtitle"><span class="permalink"><a href="#a8ec4ea89b862bb271845b48063f332b4">&#9670;&nbsp;</a></span>type</h2>
160
161 <div class="memitem">
162 <div class="memproto">
163 <table class="memname">
164 <tr>
165 <td class="memname">cl_uint hwloc_cl_device_topology_amd::type</td>
166 </tr>
167 </table>
168 </div><div class="memdoc">
169
170 </div>
171 </div>
172 <a id="ac8650d7eea96eef290481fee980d1d47"></a>
173 <h2 class="memtitle"><span class="permalink"><a href="#ac8650d7eea96eef290481fee980d1d47">&#9670;&nbsp;</a></span>unused</h2>
174
175 <div class="memitem">
176 <div class="memproto">
177 <table class="memname">
178 <tr>
179 <td class="memname">cl_char hwloc_cl_device_topology_amd::unused[17]</td>
180 </tr>
181 </table>
182 </div><div class="memdoc">
183
184 </div>
185 </div>
186 <hr/>The documentation for this union was generated from the following file:<ul>
187 <li><a class="el" href="a00155_source.html">opencl.h</a></li>
188 </ul>
189 </div><!-- contents -->
190 <!-- start footer part -->
191 <hr class="footer"/><address class="footer"><small>
192 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
193 </small></address>
194 </body>
195 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_location::hwloc_location_u Union Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 <div id="nav-path" class="navpath">
40 <ul>
41 <li class="navelem"><a class="el" href="a00326.html">hwloc_location</a></li><li class="navelem"><a class="el" href="a00330.html">hwloc_location_u</a></li> </ul>
42 </div>
43 </div><!-- top -->
44 <div class="header">
45 <div class="summary">
46 <a href="#pub-attribs">Data Fields</a> </div>
47 <div class="headertitle">
48 <div class="title">hwloc_location::hwloc_location_u Union Reference</div> </div>
49 </div><!--header-->
50 <div class="contents">
51
52 <p><code>#include &lt;<a class="el" href="a00137_source.html">memattrs.h</a>&gt;</code></p>
53 <table class="memberdecls">
54 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
55 Data Fields</h2></td></tr>
56 <tr class="memitem:a033bad8f6b891992f0c18b85a88c5561"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00330.html#a033bad8f6b891992f0c18b85a88c5561">cpuset</a></td></tr>
57 <tr class="separator:a033bad8f6b891992f0c18b85a88c5561"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:acf2ebf75869f0a53a884ac2ab3374122"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00330.html#acf2ebf75869f0a53a884ac2ab3374122">object</a></td></tr>
59 <tr class="separator:acf2ebf75869f0a53a884ac2ab3374122"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 </table>
61 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
62 <div class="textblock"><p>Actual location. </p>
63 </div><h2 class="groupheader">Field Documentation</h2>
64 <a id="a033bad8f6b891992f0c18b85a88c5561"></a>
65 <h2 class="memtitle"><span class="permalink"><a href="#a033bad8f6b891992f0c18b85a88c5561">&#9670;&nbsp;</a></span>cpuset</h2>
66
67 <div class="memitem">
68 <div class="memproto">
69 <table class="memname">
70 <tr>
71 <td class="memname"><a class="el" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> hwloc_location::hwloc_location_u::cpuset</td>
72 </tr>
73 </table>
74 </div><div class="memdoc">
75
76 <p>Location as a cpuset, when the location type is <a class="el" href="a00221.html#gga33099ba58f607fc70925da3777688586a7135318a86361ad75fd1648e6bf6d174" title="Location is given as a cpuset, in the location cpuset union field.">HWLOC_LOCATION_TYPE_CPUSET</a>. </p>
77
78 </div>
79 </div>
80 <a id="acf2ebf75869f0a53a884ac2ab3374122"></a>
81 <h2 class="memtitle"><span class="permalink"><a href="#acf2ebf75869f0a53a884ac2ab3374122">&#9670;&nbsp;</a></span>object</h2>
82
83 <div class="memitem">
84 <div class="memproto">
85 <table class="memname">
86 <tr>
87 <td class="memname"><a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d">hwloc_obj_t</a> hwloc_location::hwloc_location_u::object</td>
88 </tr>
89 </table>
90 </div><div class="memdoc">
91
92 <p>Location as an object, when the location type is <a class="el" href="a00221.html#gga33099ba58f607fc70925da3777688586af637c39b23d48cff15ddb008644aaa84" title="Location is given as an object, in the location object union field.">HWLOC_LOCATION_TYPE_OBJECT</a>. </p>
93
94 </div>
95 </div>
96 <hr/>The documentation for this union was generated from the following file:<ul>
97 <li><a class="el" href="a00137_source.html">memattrs.h</a></li>
98 </ul>
99 </div><!-- contents -->
100 <!-- start footer part -->
101 <hr class="footer"/><address class="footer"><small>
102 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
103 </small></address>
104 </body>
105 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_cl_device_topology_amd Union Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#pub-attribs">Data Fields</a> </div>
43 <div class="headertitle">
44 <div class="title">hwloc_cl_device_topology_amd Union Reference</div> </div>
45 </div><!--header-->
46 <div class="contents">
47
48 <p><code>#include &lt;<a class="el" href="a00155_source.html">opencl.h</a>&gt;</code></p>
49 <table class="memberdecls">
50 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
51 Data Fields</h2></td></tr>
52 <tr class="memitem:a7bba6ab297b6f44e43c5937b80b4cfb6"><td class="memItemLeft" >struct {</td></tr>
53 <tr class="memitem:a02fc93c4d8d6f9732c7b71ebb3a8ac5c"><td class="memItemLeft" >&#160;&#160;&#160;cl_uint&#160;&#160;&#160;<a class="el" href="a00334.html#a8ec4ea89b862bb271845b48063f332b4">type</a></td></tr>
54 <tr class="separator:a02fc93c4d8d6f9732c7b71ebb3a8ac5c"><td class="memSeparator" colspan="2">&#160;</td></tr>
55 <tr class="memitem:aeb68174a5abc630add0c26cd6cdfb8f6"><td class="memItemLeft" >&#160;&#160;&#160;cl_uint&#160;&#160;&#160;<a class="el" href="a00334.html#afbd6b814607b06fc5b2f36ad14420398">data</a> [5]</td></tr>
56 <tr class="separator:aeb68174a5abc630add0c26cd6cdfb8f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
57 <tr class="memitem:a7bba6ab297b6f44e43c5937b80b4cfb6"><td class="memItemLeft" valign="top">}&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00334.html#a7bba6ab297b6f44e43c5937b80b4cfb6">raw</a></td></tr>
58 <tr class="separator:a7bba6ab297b6f44e43c5937b80b4cfb6"><td class="memSeparator" colspan="2">&#160;</td></tr>
59 <tr class="memitem:a05e9a845012cd9d1f13a39cc35ab40a1"><td class="memItemLeft" >struct {</td></tr>
60 <tr class="memitem:ac42c3aa1f24394b4ff8be15679522760"><td class="memItemLeft" >&#160;&#160;&#160;cl_uint&#160;&#160;&#160;<a class="el" href="a00334.html#a8ec4ea89b862bb271845b48063f332b4">type</a></td></tr>
61 <tr class="separator:ac42c3aa1f24394b4ff8be15679522760"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:a4cf69135f9778f990424eddfc9ec1850"><td class="memItemLeft" >&#160;&#160;&#160;cl_char&#160;&#160;&#160;<a class="el" href="a00334.html#ac8650d7eea96eef290481fee980d1d47">unused</a> [17]</td></tr>
63 <tr class="separator:a4cf69135f9778f990424eddfc9ec1850"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 <tr class="memitem:aff0e249c4dc5c7253faaa67bd4120aa1"><td class="memItemLeft" >&#160;&#160;&#160;cl_char&#160;&#160;&#160;<a class="el" href="a00334.html#a4a23e3cc034b7ab105cab0e863dcab69">bus</a></td></tr>
65 <tr class="separator:aff0e249c4dc5c7253faaa67bd4120aa1"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 <tr class="memitem:a2838ee92e3a3c08869461f368e21f423"><td class="memItemLeft" >&#160;&#160;&#160;cl_char&#160;&#160;&#160;<a class="el" href="a00334.html#a017033a953d71455b067007cabb92e9c">device</a></td></tr>
67 <tr class="separator:a2838ee92e3a3c08869461f368e21f423"><td class="memSeparator" colspan="2">&#160;</td></tr>
68 <tr class="memitem:ab5264a700bed4a93be4ed1aadb62fd1d"><td class="memItemLeft" >&#160;&#160;&#160;cl_char&#160;&#160;&#160;<a class="el" href="a00334.html#a77a67ac73cff98d330ef7258b240bac3">function</a></td></tr>
69 <tr class="separator:ab5264a700bed4a93be4ed1aadb62fd1d"><td class="memSeparator" colspan="2">&#160;</td></tr>
70 <tr class="memitem:a05e9a845012cd9d1f13a39cc35ab40a1"><td class="memItemLeft" valign="top">}&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00334.html#a05e9a845012cd9d1f13a39cc35ab40a1">pcie</a></td></tr>
71 <tr class="separator:a05e9a845012cd9d1f13a39cc35ab40a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
72 </table>
73 <h2 class="groupheader">Field Documentation</h2>
74 <a id="a4a23e3cc034b7ab105cab0e863dcab69"></a>
75 <h2 class="memtitle"><span class="permalink"><a href="#a4a23e3cc034b7ab105cab0e863dcab69">&#9670;&nbsp;</a></span>bus</h2>
76
77 <div class="memitem">
78 <div class="memproto">
79 <table class="memname">
80 <tr>
81 <td class="memname">cl_char hwloc_cl_device_topology_amd::bus</td>
82 </tr>
83 </table>
84 </div><div class="memdoc">
85
86 </div>
87 </div>
88 <a id="afbd6b814607b06fc5b2f36ad14420398"></a>
89 <h2 class="memtitle"><span class="permalink"><a href="#afbd6b814607b06fc5b2f36ad14420398">&#9670;&nbsp;</a></span>data</h2>
90
91 <div class="memitem">
92 <div class="memproto">
93 <table class="memname">
94 <tr>
95 <td class="memname">cl_uint hwloc_cl_device_topology_amd::data[5]</td>
96 </tr>
97 </table>
98 </div><div class="memdoc">
99
100 </div>
101 </div>
102 <a id="a017033a953d71455b067007cabb92e9c"></a>
103 <h2 class="memtitle"><span class="permalink"><a href="#a017033a953d71455b067007cabb92e9c">&#9670;&nbsp;</a></span>device</h2>
104
105 <div class="memitem">
106 <div class="memproto">
107 <table class="memname">
108 <tr>
109 <td class="memname">cl_char hwloc_cl_device_topology_amd::device</td>
110 </tr>
111 </table>
112 </div><div class="memdoc">
113
114 </div>
115 </div>
116 <a id="a77a67ac73cff98d330ef7258b240bac3"></a>
117 <h2 class="memtitle"><span class="permalink"><a href="#a77a67ac73cff98d330ef7258b240bac3">&#9670;&nbsp;</a></span>function</h2>
118
119 <div class="memitem">
120 <div class="memproto">
121 <table class="memname">
122 <tr>
123 <td class="memname">cl_char hwloc_cl_device_topology_amd::function</td>
124 </tr>
125 </table>
126 </div><div class="memdoc">
127
128 </div>
129 </div>
130 <a id="a05e9a845012cd9d1f13a39cc35ab40a1"></a>
131 <h2 class="memtitle"><span class="permalink"><a href="#a05e9a845012cd9d1f13a39cc35ab40a1">&#9670;&nbsp;</a></span></h2>
132
133 <div class="memitem">
134 <div class="memproto">
135 <table class="memname">
136 <tr>
137 <td class="memname">struct { ... } hwloc_cl_device_topology_amd::pcie</td>
138 </tr>
139 </table>
140 </div><div class="memdoc">
141
142 </div>
143 </div>
144 <a id="a7bba6ab297b6f44e43c5937b80b4cfb6"></a>
145 <h2 class="memtitle"><span class="permalink"><a href="#a7bba6ab297b6f44e43c5937b80b4cfb6">&#9670;&nbsp;</a></span></h2>
146
147 <div class="memitem">
148 <div class="memproto">
149 <table class="memname">
150 <tr>
151 <td class="memname">struct { ... } hwloc_cl_device_topology_amd::raw</td>
152 </tr>
153 </table>
154 </div><div class="memdoc">
155
156 </div>
157 </div>
158 <a id="a8ec4ea89b862bb271845b48063f332b4"></a>
159 <h2 class="memtitle"><span class="permalink"><a href="#a8ec4ea89b862bb271845b48063f332b4">&#9670;&nbsp;</a></span>type</h2>
160
161 <div class="memitem">
162 <div class="memproto">
163 <table class="memname">
164 <tr>
165 <td class="memname">cl_uint hwloc_cl_device_topology_amd::type</td>
166 </tr>
167 </table>
168 </div><div class="memdoc">
169
170 </div>
171 </div>
172 <a id="ac8650d7eea96eef290481fee980d1d47"></a>
173 <h2 class="memtitle"><span class="permalink"><a href="#ac8650d7eea96eef290481fee980d1d47">&#9670;&nbsp;</a></span>unused</h2>
174
175 <div class="memitem">
176 <div class="memproto">
177 <table class="memname">
178 <tr>
179 <td class="memname">cl_char hwloc_cl_device_topology_amd::unused[17]</td>
180 </tr>
181 </table>
182 </div><div class="memdoc">
183
184 </div>
185 </div>
186 <hr/>The documentation for this union was generated from the following file:<ul>
187 <li><a class="el" href="a00155_source.html">opencl.h</a></li>
188 </ul>
189 </div><!-- contents -->
190 <!-- start footer part -->
191 <hr class="footer"/><address class="footer"><small>
192 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
193 </small></address>
194 </body>
195 </html>
+0
-124
doc/doxygen-doc/html/a00340.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_topology_diff_obj_attr_u Union Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#nested-classes">Data Structures</a> &#124;
43 <a href="#pub-attribs">Data Fields</a> </div>
44 <div class="headertitle">
45 <div class="title">hwloc_topology_diff_obj_attr_u Union Reference<div class="ingroups"><a class="el" href="a00231.html">Topology differences</a></div></div> </div>
46 </div><!--header-->
47 <div class="contents">
48
49 <p><code>#include &lt;<a class="el" href="a00176_source.html">diff.h</a>&gt;</code></p>
50 <table class="memberdecls">
51 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
52 Data Structures</h2></td></tr>
53 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00344.html">hwloc_topology_diff_obj_attr_generic_s</a></td></tr>
54 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
55 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00352.html">hwloc_topology_diff_obj_attr_string_s</a></td></tr>
56 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
57 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00348.html">hwloc_topology_diff_obj_attr_uint64_s</a></td></tr>
58 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
59 </table><table class="memberdecls">
60 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
61 Data Fields</h2></td></tr>
62 <tr class="memitem:aeb449c0e04b14ebf8c3126756b6364f9"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00344.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00340.html#aeb449c0e04b14ebf8c3126756b6364f9">generic</a></td></tr>
63 <tr class="separator:aeb449c0e04b14ebf8c3126756b6364f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 <tr class="memitem:a4608ade88460f5f208887775e5a69a0a"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00348.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00340.html#a4608ade88460f5f208887775e5a69a0a">uint64</a></td></tr>
65 <tr class="separator:a4608ade88460f5f208887775e5a69a0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 <tr class="memitem:a42fa15c37f1f59ef638066c4c62c3154"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00352.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00340.html#a42fa15c37f1f59ef638066c4c62c3154">string</a></td></tr>
67 <tr class="separator:a42fa15c37f1f59ef638066c4c62c3154"><td class="memSeparator" colspan="2">&#160;</td></tr>
68 </table>
69 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
70 <div class="textblock"><p>One object attribute difference. </p>
71 </div><h2 class="groupheader">Field Documentation</h2>
72 <a id="aeb449c0e04b14ebf8c3126756b6364f9"></a>
73 <h2 class="memtitle"><span class="permalink"><a href="#aeb449c0e04b14ebf8c3126756b6364f9">&#9670;&nbsp;</a></span>generic</h2>
74
75 <div class="memitem">
76 <div class="memproto">
77 <table class="memname">
78 <tr>
79 <td class="memname">struct <a class="el" href="a00344.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s</a> hwloc_topology_diff_obj_attr_u::generic</td>
80 </tr>
81 </table>
82 </div><div class="memdoc">
83
84 </div>
85 </div>
86 <a id="a42fa15c37f1f59ef638066c4c62c3154"></a>
87 <h2 class="memtitle"><span class="permalink"><a href="#a42fa15c37f1f59ef638066c4c62c3154">&#9670;&nbsp;</a></span>string</h2>
88
89 <div class="memitem">
90 <div class="memproto">
91 <table class="memname">
92 <tr>
93 <td class="memname">struct <a class="el" href="a00352.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a> hwloc_topology_diff_obj_attr_u::string</td>
94 </tr>
95 </table>
96 </div><div class="memdoc">
97
98 </div>
99 </div>
100 <a id="a4608ade88460f5f208887775e5a69a0a"></a>
101 <h2 class="memtitle"><span class="permalink"><a href="#a4608ade88460f5f208887775e5a69a0a">&#9670;&nbsp;</a></span>uint64</h2>
102
103 <div class="memitem">
104 <div class="memproto">
105 <table class="memname">
106 <tr>
107 <td class="memname">struct <a class="el" href="a00348.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a> hwloc_topology_diff_obj_attr_u::uint64</td>
108 </tr>
109 </table>
110 </div><div class="memdoc">
111
112 </div>
113 </div>
114 <hr/>The documentation for this union was generated from the following file:<ul>
115 <li><a class="el" href="a00176_source.html">diff.h</a></li>
116 </ul>
117 </div><!-- contents -->
118 <!-- start footer part -->
119 <hr class="footer"/><address class="footer"><small>
120 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
121 </small></address>
122 </body>
123 </html>
+0
-84
doc/doxygen-doc/html/a00344.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 <div id="nav-path" class="navpath">
40 <ul>
41 <li class="navelem"><a class="el" href="a00340.html">hwloc_topology_diff_obj_attr_u</a></li><li class="navelem"><a class="el" href="a00344.html">hwloc_topology_diff_obj_attr_generic_s</a></li> </ul>
42 </div>
43 </div><!-- top -->
44 <div class="header">
45 <div class="summary">
46 <a href="#pub-attribs">Data Fields</a> </div>
47 <div class="headertitle">
48 <div class="title">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s Struct Reference</div> </div>
49 </div><!--header-->
50 <div class="contents">
51
52 <p><code>#include &lt;<a class="el" href="a00176_source.html">diff.h</a>&gt;</code></p>
53 <table class="memberdecls">
54 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
55 Data Fields</h2></td></tr>
56 <tr class="memitem:a43f8133b7c30129b002c2d295e6580fc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00231.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00344.html#a43f8133b7c30129b002c2d295e6580fc">type</a></td></tr>
57 <tr class="separator:a43f8133b7c30129b002c2d295e6580fc"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 </table>
59 <h2 class="groupheader">Field Documentation</h2>
60 <a id="a43f8133b7c30129b002c2d295e6580fc"></a>
61 <h2 class="memtitle"><span class="permalink"><a href="#a43f8133b7c30129b002c2d295e6580fc">&#9670;&nbsp;</a></span>type</h2>
62
63 <div class="memitem">
64 <div class="memproto">
65 <table class="memname">
66 <tr>
67 <td class="memname"><a class="el" href="a00231.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a> hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s::type</td>
68 </tr>
69 </table>
70 </div><div class="memdoc">
71
72 </div>
73 </div>
74 <hr/>The documentation for this struct was generated from the following file:<ul>
75 <li><a class="el" href="a00176_source.html">diff.h</a></li>
76 </ul>
77 </div><!-- contents -->
78 <!-- start footer part -->
79 <hr class="footer"/><address class="footer"><small>
80 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
81 </small></address>
82 </body>
83 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_topology_diff_obj_attr_u Union Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#nested-classes">Data Structures</a> &#124;
43 <a href="#pub-attribs">Data Fields</a> </div>
44 <div class="headertitle">
45 <div class="title">hwloc_topology_diff_obj_attr_u Union Reference<div class="ingroups"><a class="el" href="a00237.html">Topology differences</a></div></div> </div>
46 </div><!--header-->
47 <div class="contents">
48
49 <p><code>#include &lt;<a class="el" href="a00179_source.html">diff.h</a>&gt;</code></p>
50 <table class="memberdecls">
51 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
52 Data Structures</h2></td></tr>
53 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00350.html">hwloc_topology_diff_obj_attr_generic_s</a></td></tr>
54 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
55 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00358.html">hwloc_topology_diff_obj_attr_string_s</a></td></tr>
56 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
57 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00354.html">hwloc_topology_diff_obj_attr_uint64_s</a></td></tr>
58 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
59 </table><table class="memberdecls">
60 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
61 Data Fields</h2></td></tr>
62 <tr class="memitem:aeb449c0e04b14ebf8c3126756b6364f9"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00350.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00346.html#aeb449c0e04b14ebf8c3126756b6364f9">generic</a></td></tr>
63 <tr class="separator:aeb449c0e04b14ebf8c3126756b6364f9"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 <tr class="memitem:a4608ade88460f5f208887775e5a69a0a"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00354.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00346.html#a4608ade88460f5f208887775e5a69a0a">uint64</a></td></tr>
65 <tr class="separator:a4608ade88460f5f208887775e5a69a0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 <tr class="memitem:a42fa15c37f1f59ef638066c4c62c3154"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00358.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00346.html#a42fa15c37f1f59ef638066c4c62c3154">string</a></td></tr>
67 <tr class="separator:a42fa15c37f1f59ef638066c4c62c3154"><td class="memSeparator" colspan="2">&#160;</td></tr>
68 </table>
69 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
70 <div class="textblock"><p>One object attribute difference. </p>
71 </div><h2 class="groupheader">Field Documentation</h2>
72 <a id="aeb449c0e04b14ebf8c3126756b6364f9"></a>
73 <h2 class="memtitle"><span class="permalink"><a href="#aeb449c0e04b14ebf8c3126756b6364f9">&#9670;&nbsp;</a></span>generic</h2>
74
75 <div class="memitem">
76 <div class="memproto">
77 <table class="memname">
78 <tr>
79 <td class="memname">struct <a class="el" href="a00350.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s</a> hwloc_topology_diff_obj_attr_u::generic</td>
80 </tr>
81 </table>
82 </div><div class="memdoc">
83
84 </div>
85 </div>
86 <a id="a42fa15c37f1f59ef638066c4c62c3154"></a>
87 <h2 class="memtitle"><span class="permalink"><a href="#a42fa15c37f1f59ef638066c4c62c3154">&#9670;&nbsp;</a></span>string</h2>
88
89 <div class="memitem">
90 <div class="memproto">
91 <table class="memname">
92 <tr>
93 <td class="memname">struct <a class="el" href="a00358.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a> hwloc_topology_diff_obj_attr_u::string</td>
94 </tr>
95 </table>
96 </div><div class="memdoc">
97
98 </div>
99 </div>
100 <a id="a4608ade88460f5f208887775e5a69a0a"></a>
101 <h2 class="memtitle"><span class="permalink"><a href="#a4608ade88460f5f208887775e5a69a0a">&#9670;&nbsp;</a></span>uint64</h2>
102
103 <div class="memitem">
104 <div class="memproto">
105 <table class="memname">
106 <tr>
107 <td class="memname">struct <a class="el" href="a00354.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a> hwloc_topology_diff_obj_attr_u::uint64</td>
108 </tr>
109 </table>
110 </div><div class="memdoc">
111
112 </div>
113 </div>
114 <hr/>The documentation for this union was generated from the following file:<ul>
115 <li><a class="el" href="a00179_source.html">diff.h</a></li>
116 </ul>
117 </div><!-- contents -->
118 <!-- start footer part -->
119 <hr class="footer"/><address class="footer"><small>
120 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
121 </small></address>
122 </body>
123 </html>
+0
-134
doc/doxygen-doc/html/a00348.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 <div id="nav-path" class="navpath">
40 <ul>
41 <li class="navelem"><a class="el" href="a00340.html">hwloc_topology_diff_obj_attr_u</a></li><li class="navelem"><a class="el" href="a00348.html">hwloc_topology_diff_obj_attr_uint64_s</a></li> </ul>
42 </div>
43 </div><!-- top -->
44 <div class="header">
45 <div class="summary">
46 <a href="#pub-attribs">Data Fields</a> </div>
47 <div class="headertitle">
48 <div class="title">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s Struct Reference</div> </div>
49 </div><!--header-->
50 <div class="contents">
51
52 <p><code>#include &lt;<a class="el" href="a00176_source.html">diff.h</a>&gt;</code></p>
53 <table class="memberdecls">
54 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
55 Data Fields</h2></td></tr>
56 <tr class="memitem:afe262b9aa558fe7bfecbd37a7a129197"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00231.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00348.html#afe262b9aa558fe7bfecbd37a7a129197">type</a></td></tr>
57 <tr class="separator:afe262b9aa558fe7bfecbd37a7a129197"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:adb772c3f1761ecadf496c80ae14afce3"><td class="memItemLeft" align="right" valign="top">hwloc_uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00348.html#adb772c3f1761ecadf496c80ae14afce3">index</a></td></tr>
59 <tr class="separator:adb772c3f1761ecadf496c80ae14afce3"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:a44c0894dce563335d347fde6595c49c9"><td class="memItemLeft" align="right" valign="top">hwloc_uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00348.html#a44c0894dce563335d347fde6595c49c9">oldvalue</a></td></tr>
61 <tr class="separator:a44c0894dce563335d347fde6595c49c9"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:ae63aa59ad65aa783b730a4f213304eb4"><td class="memItemLeft" align="right" valign="top">hwloc_uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00348.html#ae63aa59ad65aa783b730a4f213304eb4">newvalue</a></td></tr>
63 <tr class="separator:ae63aa59ad65aa783b730a4f213304eb4"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 </table>
65 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
66 <div class="textblock"><p>Integer attribute modification with an optional index. </p>
67 </div><h2 class="groupheader">Field Documentation</h2>
68 <a id="adb772c3f1761ecadf496c80ae14afce3"></a>
69 <h2 class="memtitle"><span class="permalink"><a href="#adb772c3f1761ecadf496c80ae14afce3">&#9670;&nbsp;</a></span>index</h2>
70
71 <div class="memitem">
72 <div class="memproto">
73 <table class="memname">
74 <tr>
75 <td class="memname">hwloc_uint64_t hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s::index</td>
76 </tr>
77 </table>
78 </div><div class="memdoc">
79
80 </div>
81 </div>
82 <a id="ae63aa59ad65aa783b730a4f213304eb4"></a>
83 <h2 class="memtitle"><span class="permalink"><a href="#ae63aa59ad65aa783b730a4f213304eb4">&#9670;&nbsp;</a></span>newvalue</h2>
84
85 <div class="memitem">
86 <div class="memproto">
87 <table class="memname">
88 <tr>
89 <td class="memname">hwloc_uint64_t hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s::newvalue</td>
90 </tr>
91 </table>
92 </div><div class="memdoc">
93
94 </div>
95 </div>
96 <a id="a44c0894dce563335d347fde6595c49c9"></a>
97 <h2 class="memtitle"><span class="permalink"><a href="#a44c0894dce563335d347fde6595c49c9">&#9670;&nbsp;</a></span>oldvalue</h2>
98
99 <div class="memitem">
100 <div class="memproto">
101 <table class="memname">
102 <tr>
103 <td class="memname">hwloc_uint64_t hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s::oldvalue</td>
104 </tr>
105 </table>
106 </div><div class="memdoc">
107
108 </div>
109 </div>
110 <a id="afe262b9aa558fe7bfecbd37a7a129197"></a>
111 <h2 class="memtitle"><span class="permalink"><a href="#afe262b9aa558fe7bfecbd37a7a129197">&#9670;&nbsp;</a></span>type</h2>
112
113 <div class="memitem">
114 <div class="memproto">
115 <table class="memname">
116 <tr>
117 <td class="memname"><a class="el" href="a00231.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a> hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s::type</td>
118 </tr>
119 </table>
120 </div><div class="memdoc">
121
122 </div>
123 </div>
124 <hr/>The documentation for this struct was generated from the following file:<ul>
125 <li><a class="el" href="a00176_source.html">diff.h</a></li>
126 </ul>
127 </div><!-- contents -->
128 <!-- start footer part -->
129 <hr class="footer"/><address class="footer"><small>
130 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
131 </small></address>
132 </body>
133 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 <div id="nav-path" class="navpath">
40 <ul>
41 <li class="navelem"><a class="el" href="a00346.html">hwloc_topology_diff_obj_attr_u</a></li><li class="navelem"><a class="el" href="a00350.html">hwloc_topology_diff_obj_attr_generic_s</a></li> </ul>
42 </div>
43 </div><!-- top -->
44 <div class="header">
45 <div class="summary">
46 <a href="#pub-attribs">Data Fields</a> </div>
47 <div class="headertitle">
48 <div class="title">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s Struct Reference</div> </div>
49 </div><!--header-->
50 <div class="contents">
51
52 <p><code>#include &lt;<a class="el" href="a00179_source.html">diff.h</a>&gt;</code></p>
53 <table class="memberdecls">
54 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
55 Data Fields</h2></td></tr>
56 <tr class="memitem:a43f8133b7c30129b002c2d295e6580fc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00237.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00350.html#a43f8133b7c30129b002c2d295e6580fc">type</a></td></tr>
57 <tr class="separator:a43f8133b7c30129b002c2d295e6580fc"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 </table>
59 <h2 class="groupheader">Field Documentation</h2>
60 <a id="a43f8133b7c30129b002c2d295e6580fc"></a>
61 <h2 class="memtitle"><span class="permalink"><a href="#a43f8133b7c30129b002c2d295e6580fc">&#9670;&nbsp;</a></span>type</h2>
62
63 <div class="memitem">
64 <div class="memproto">
65 <table class="memname">
66 <tr>
67 <td class="memname"><a class="el" href="a00237.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a> hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s::type</td>
68 </tr>
69 </table>
70 </div><div class="memdoc">
71
72 </div>
73 </div>
74 <hr/>The documentation for this struct was generated from the following file:<ul>
75 <li><a class="el" href="a00179_source.html">diff.h</a></li>
76 </ul>
77 </div><!-- contents -->
78 <!-- start footer part -->
79 <hr class="footer"/><address class="footer"><small>
80 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
81 </small></address>
82 </body>
83 </html>
+0
-134
doc/doxygen-doc/html/a00352.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 <div id="nav-path" class="navpath">
40 <ul>
41 <li class="navelem"><a class="el" href="a00340.html">hwloc_topology_diff_obj_attr_u</a></li><li class="navelem"><a class="el" href="a00352.html">hwloc_topology_diff_obj_attr_string_s</a></li> </ul>
42 </div>
43 </div><!-- top -->
44 <div class="header">
45 <div class="summary">
46 <a href="#pub-attribs">Data Fields</a> </div>
47 <div class="headertitle">
48 <div class="title">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s Struct Reference</div> </div>
49 </div><!--header-->
50 <div class="contents">
51
52 <p><code>#include &lt;<a class="el" href="a00176_source.html">diff.h</a>&gt;</code></p>
53 <table class="memberdecls">
54 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
55 Data Fields</h2></td></tr>
56 <tr class="memitem:a784ab5827c1bf531b86d1f02f199d04d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00231.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00352.html#a784ab5827c1bf531b86d1f02f199d04d">type</a></td></tr>
57 <tr class="separator:a784ab5827c1bf531b86d1f02f199d04d"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:a7ef48c66ccddf34d90edb4e4314b41c6"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00352.html#a7ef48c66ccddf34d90edb4e4314b41c6">name</a></td></tr>
59 <tr class="separator:a7ef48c66ccddf34d90edb4e4314b41c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:a33cc281d4417129064295a6ae7b79818"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00352.html#a33cc281d4417129064295a6ae7b79818">oldvalue</a></td></tr>
61 <tr class="separator:a33cc281d4417129064295a6ae7b79818"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:a75f37f4add21cece50fee2701c3b77db"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00352.html#a75f37f4add21cece50fee2701c3b77db">newvalue</a></td></tr>
63 <tr class="separator:a75f37f4add21cece50fee2701c3b77db"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 </table>
65 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
66 <div class="textblock"><p>String attribute modification with an optional name. </p>
67 </div><h2 class="groupheader">Field Documentation</h2>
68 <a id="a7ef48c66ccddf34d90edb4e4314b41c6"></a>
69 <h2 class="memtitle"><span class="permalink"><a href="#a7ef48c66ccddf34d90edb4e4314b41c6">&#9670;&nbsp;</a></span>name</h2>
70
71 <div class="memitem">
72 <div class="memproto">
73 <table class="memname">
74 <tr>
75 <td class="memname">char* hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s::name</td>
76 </tr>
77 </table>
78 </div><div class="memdoc">
79
80 </div>
81 </div>
82 <a id="a75f37f4add21cece50fee2701c3b77db"></a>
83 <h2 class="memtitle"><span class="permalink"><a href="#a75f37f4add21cece50fee2701c3b77db">&#9670;&nbsp;</a></span>newvalue</h2>
84
85 <div class="memitem">
86 <div class="memproto">
87 <table class="memname">
88 <tr>
89 <td class="memname">char* hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s::newvalue</td>
90 </tr>
91 </table>
92 </div><div class="memdoc">
93
94 </div>
95 </div>
96 <a id="a33cc281d4417129064295a6ae7b79818"></a>
97 <h2 class="memtitle"><span class="permalink"><a href="#a33cc281d4417129064295a6ae7b79818">&#9670;&nbsp;</a></span>oldvalue</h2>
98
99 <div class="memitem">
100 <div class="memproto">
101 <table class="memname">
102 <tr>
103 <td class="memname">char* hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s::oldvalue</td>
104 </tr>
105 </table>
106 </div><div class="memdoc">
107
108 </div>
109 </div>
110 <a id="a784ab5827c1bf531b86d1f02f199d04d"></a>
111 <h2 class="memtitle"><span class="permalink"><a href="#a784ab5827c1bf531b86d1f02f199d04d">&#9670;&nbsp;</a></span>type</h2>
112
113 <div class="memitem">
114 <div class="memproto">
115 <table class="memname">
116 <tr>
117 <td class="memname"><a class="el" href="a00231.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a> hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s::type</td>
118 </tr>
119 </table>
120 </div><div class="memdoc">
121
122 </div>
123 </div>
124 <hr/>The documentation for this struct was generated from the following file:<ul>
125 <li><a class="el" href="a00176_source.html">diff.h</a></li>
126 </ul>
127 </div><!-- contents -->
128 <!-- start footer part -->
129 <hr class="footer"/><address class="footer"><small>
130 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
131 </small></address>
132 </body>
133 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 <div id="nav-path" class="navpath">
40 <ul>
41 <li class="navelem"><a class="el" href="a00346.html">hwloc_topology_diff_obj_attr_u</a></li><li class="navelem"><a class="el" href="a00354.html">hwloc_topology_diff_obj_attr_uint64_s</a></li> </ul>
42 </div>
43 </div><!-- top -->
44 <div class="header">
45 <div class="summary">
46 <a href="#pub-attribs">Data Fields</a> </div>
47 <div class="headertitle">
48 <div class="title">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s Struct Reference</div> </div>
49 </div><!--header-->
50 <div class="contents">
51
52 <p><code>#include &lt;<a class="el" href="a00179_source.html">diff.h</a>&gt;</code></p>
53 <table class="memberdecls">
54 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
55 Data Fields</h2></td></tr>
56 <tr class="memitem:afe262b9aa558fe7bfecbd37a7a129197"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00237.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00354.html#afe262b9aa558fe7bfecbd37a7a129197">type</a></td></tr>
57 <tr class="separator:afe262b9aa558fe7bfecbd37a7a129197"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:adb772c3f1761ecadf496c80ae14afce3"><td class="memItemLeft" align="right" valign="top">hwloc_uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00354.html#adb772c3f1761ecadf496c80ae14afce3">index</a></td></tr>
59 <tr class="separator:adb772c3f1761ecadf496c80ae14afce3"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:a44c0894dce563335d347fde6595c49c9"><td class="memItemLeft" align="right" valign="top">hwloc_uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00354.html#a44c0894dce563335d347fde6595c49c9">oldvalue</a></td></tr>
61 <tr class="separator:a44c0894dce563335d347fde6595c49c9"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:ae63aa59ad65aa783b730a4f213304eb4"><td class="memItemLeft" align="right" valign="top">hwloc_uint64_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00354.html#ae63aa59ad65aa783b730a4f213304eb4">newvalue</a></td></tr>
63 <tr class="separator:ae63aa59ad65aa783b730a4f213304eb4"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 </table>
65 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
66 <div class="textblock"><p>Integer attribute modification with an optional index. </p>
67 </div><h2 class="groupheader">Field Documentation</h2>
68 <a id="adb772c3f1761ecadf496c80ae14afce3"></a>
69 <h2 class="memtitle"><span class="permalink"><a href="#adb772c3f1761ecadf496c80ae14afce3">&#9670;&nbsp;</a></span>index</h2>
70
71 <div class="memitem">
72 <div class="memproto">
73 <table class="memname">
74 <tr>
75 <td class="memname">hwloc_uint64_t hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s::index</td>
76 </tr>
77 </table>
78 </div><div class="memdoc">
79
80 </div>
81 </div>
82 <a id="ae63aa59ad65aa783b730a4f213304eb4"></a>
83 <h2 class="memtitle"><span class="permalink"><a href="#ae63aa59ad65aa783b730a4f213304eb4">&#9670;&nbsp;</a></span>newvalue</h2>
84
85 <div class="memitem">
86 <div class="memproto">
87 <table class="memname">
88 <tr>
89 <td class="memname">hwloc_uint64_t hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s::newvalue</td>
90 </tr>
91 </table>
92 </div><div class="memdoc">
93
94 </div>
95 </div>
96 <a id="a44c0894dce563335d347fde6595c49c9"></a>
97 <h2 class="memtitle"><span class="permalink"><a href="#a44c0894dce563335d347fde6595c49c9">&#9670;&nbsp;</a></span>oldvalue</h2>
98
99 <div class="memitem">
100 <div class="memproto">
101 <table class="memname">
102 <tr>
103 <td class="memname">hwloc_uint64_t hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s::oldvalue</td>
104 </tr>
105 </table>
106 </div><div class="memdoc">
107
108 </div>
109 </div>
110 <a id="afe262b9aa558fe7bfecbd37a7a129197"></a>
111 <h2 class="memtitle"><span class="permalink"><a href="#afe262b9aa558fe7bfecbd37a7a129197">&#9670;&nbsp;</a></span>type</h2>
112
113 <div class="memitem">
114 <div class="memproto">
115 <table class="memname">
116 <tr>
117 <td class="memname"><a class="el" href="a00237.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a> hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s::type</td>
118 </tr>
119 </table>
120 </div><div class="memdoc">
121
122 </div>
123 </div>
124 <hr/>The documentation for this struct was generated from the following file:<ul>
125 <li><a class="el" href="a00179_source.html">diff.h</a></li>
126 </ul>
127 </div><!-- contents -->
128 <!-- start footer part -->
129 <hr class="footer"/><address class="footer"><small>
130 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
131 </small></address>
132 </body>
133 </html>
+0
-124
doc/doxygen-doc/html/a00356.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_topology_diff_u Union Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#nested-classes">Data Structures</a> &#124;
43 <a href="#pub-attribs">Data Fields</a> </div>
44 <div class="headertitle">
45 <div class="title">hwloc_topology_diff_u Union Reference<div class="ingroups"><a class="el" href="a00231.html">Topology differences</a></div></div> </div>
46 </div><!--header-->
47 <div class="contents">
48
49 <p><code>#include &lt;<a class="el" href="a00176_source.html">diff.h</a>&gt;</code></p>
50 <table class="memberdecls">
51 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
52 Data Structures</h2></td></tr>
53 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00360.html">hwloc_topology_diff_generic_s</a></td></tr>
54 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
55 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00364.html">hwloc_topology_diff_obj_attr_s</a></td></tr>
56 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
57 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00368.html">hwloc_topology_diff_too_complex_s</a></td></tr>
58 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
59 </table><table class="memberdecls">
60 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
61 Data Fields</h2></td></tr>
62 <tr class="memitem:a0dd2cbfba0eca2fc7a2645668bcae0f8"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00360.html">hwloc_topology_diff_u::hwloc_topology_diff_generic_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00356.html#a0dd2cbfba0eca2fc7a2645668bcae0f8">generic</a></td></tr>
63 <tr class="separator:a0dd2cbfba0eca2fc7a2645668bcae0f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 <tr class="memitem:a01dca644feea48448b36baa60cf4c07f"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00364.html">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00356.html#a01dca644feea48448b36baa60cf4c07f">obj_attr</a></td></tr>
65 <tr class="separator:a01dca644feea48448b36baa60cf4c07f"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 <tr class="memitem:af7dc1148eb656c56e9678218cafd027b"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00368.html">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00356.html#af7dc1148eb656c56e9678218cafd027b">too_complex</a></td></tr>
67 <tr class="separator:af7dc1148eb656c56e9678218cafd027b"><td class="memSeparator" colspan="2">&#160;</td></tr>
68 </table>
69 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
70 <div class="textblock"><p>One element of a difference list between two topologies. </p>
71 </div><h2 class="groupheader">Field Documentation</h2>
72 <a id="a0dd2cbfba0eca2fc7a2645668bcae0f8"></a>
73 <h2 class="memtitle"><span class="permalink"><a href="#a0dd2cbfba0eca2fc7a2645668bcae0f8">&#9670;&nbsp;</a></span>generic</h2>
74
75 <div class="memitem">
76 <div class="memproto">
77 <table class="memname">
78 <tr>
79 <td class="memname">struct <a class="el" href="a00360.html">hwloc_topology_diff_u::hwloc_topology_diff_generic_s</a> hwloc_topology_diff_u::generic</td>
80 </tr>
81 </table>
82 </div><div class="memdoc">
83
84 </div>
85 </div>
86 <a id="a01dca644feea48448b36baa60cf4c07f"></a>
87 <h2 class="memtitle"><span class="permalink"><a href="#a01dca644feea48448b36baa60cf4c07f">&#9670;&nbsp;</a></span>obj_attr</h2>
88
89 <div class="memitem">
90 <div class="memproto">
91 <table class="memname">
92 <tr>
93 <td class="memname">struct <a class="el" href="a00364.html">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a> hwloc_topology_diff_u::obj_attr</td>
94 </tr>
95 </table>
96 </div><div class="memdoc">
97
98 </div>
99 </div>
100 <a id="af7dc1148eb656c56e9678218cafd027b"></a>
101 <h2 class="memtitle"><span class="permalink"><a href="#af7dc1148eb656c56e9678218cafd027b">&#9670;&nbsp;</a></span>too_complex</h2>
102
103 <div class="memitem">
104 <div class="memproto">
105 <table class="memname">
106 <tr>
107 <td class="memname">struct <a class="el" href="a00368.html">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a> hwloc_topology_diff_u::too_complex</td>
108 </tr>
109 </table>
110 </div><div class="memdoc">
111
112 </div>
113 </div>
114 <hr/>The documentation for this union was generated from the following file:<ul>
115 <li><a class="el" href="a00176_source.html">diff.h</a></li>
116 </ul>
117 </div><!-- contents -->
118 <!-- start footer part -->
119 <hr class="footer"/><address class="footer"><small>
120 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
121 </small></address>
122 </body>
123 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 <div id="nav-path" class="navpath">
40 <ul>
41 <li class="navelem"><a class="el" href="a00346.html">hwloc_topology_diff_obj_attr_u</a></li><li class="navelem"><a class="el" href="a00358.html">hwloc_topology_diff_obj_attr_string_s</a></li> </ul>
42 </div>
43 </div><!-- top -->
44 <div class="header">
45 <div class="summary">
46 <a href="#pub-attribs">Data Fields</a> </div>
47 <div class="headertitle">
48 <div class="title">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s Struct Reference</div> </div>
49 </div><!--header-->
50 <div class="contents">
51
52 <p><code>#include &lt;<a class="el" href="a00179_source.html">diff.h</a>&gt;</code></p>
53 <table class="memberdecls">
54 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
55 Data Fields</h2></td></tr>
56 <tr class="memitem:a784ab5827c1bf531b86d1f02f199d04d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00237.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00358.html#a784ab5827c1bf531b86d1f02f199d04d">type</a></td></tr>
57 <tr class="separator:a784ab5827c1bf531b86d1f02f199d04d"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:a7ef48c66ccddf34d90edb4e4314b41c6"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00358.html#a7ef48c66ccddf34d90edb4e4314b41c6">name</a></td></tr>
59 <tr class="separator:a7ef48c66ccddf34d90edb4e4314b41c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:a33cc281d4417129064295a6ae7b79818"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00358.html#a33cc281d4417129064295a6ae7b79818">oldvalue</a></td></tr>
61 <tr class="separator:a33cc281d4417129064295a6ae7b79818"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:a75f37f4add21cece50fee2701c3b77db"><td class="memItemLeft" align="right" valign="top">char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00358.html#a75f37f4add21cece50fee2701c3b77db">newvalue</a></td></tr>
63 <tr class="separator:a75f37f4add21cece50fee2701c3b77db"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 </table>
65 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
66 <div class="textblock"><p>String attribute modification with an optional name. </p>
67 </div><h2 class="groupheader">Field Documentation</h2>
68 <a id="a7ef48c66ccddf34d90edb4e4314b41c6"></a>
69 <h2 class="memtitle"><span class="permalink"><a href="#a7ef48c66ccddf34d90edb4e4314b41c6">&#9670;&nbsp;</a></span>name</h2>
70
71 <div class="memitem">
72 <div class="memproto">
73 <table class="memname">
74 <tr>
75 <td class="memname">char* hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s::name</td>
76 </tr>
77 </table>
78 </div><div class="memdoc">
79
80 </div>
81 </div>
82 <a id="a75f37f4add21cece50fee2701c3b77db"></a>
83 <h2 class="memtitle"><span class="permalink"><a href="#a75f37f4add21cece50fee2701c3b77db">&#9670;&nbsp;</a></span>newvalue</h2>
84
85 <div class="memitem">
86 <div class="memproto">
87 <table class="memname">
88 <tr>
89 <td class="memname">char* hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s::newvalue</td>
90 </tr>
91 </table>
92 </div><div class="memdoc">
93
94 </div>
95 </div>
96 <a id="a33cc281d4417129064295a6ae7b79818"></a>
97 <h2 class="memtitle"><span class="permalink"><a href="#a33cc281d4417129064295a6ae7b79818">&#9670;&nbsp;</a></span>oldvalue</h2>
98
99 <div class="memitem">
100 <div class="memproto">
101 <table class="memname">
102 <tr>
103 <td class="memname">char* hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s::oldvalue</td>
104 </tr>
105 </table>
106 </div><div class="memdoc">
107
108 </div>
109 </div>
110 <a id="a784ab5827c1bf531b86d1f02f199d04d"></a>
111 <h2 class="memtitle"><span class="permalink"><a href="#a784ab5827c1bf531b86d1f02f199d04d">&#9670;&nbsp;</a></span>type</h2>
112
113 <div class="memitem">
114 <div class="memproto">
115 <table class="memname">
116 <tr>
117 <td class="memname"><a class="el" href="a00237.html#ga74a3fefbaa17582fea86d76b312d6254">hwloc_topology_diff_obj_attr_type_t</a> hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s::type</td>
118 </tr>
119 </table>
120 </div><div class="memdoc">
121
122 </div>
123 </div>
124 <hr/>The documentation for this struct was generated from the following file:<ul>
125 <li><a class="el" href="a00179_source.html">diff.h</a></li>
126 </ul>
127 </div><!-- contents -->
128 <!-- start footer part -->
129 <hr class="footer"/><address class="footer"><small>
130 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
131 </small></address>
132 </body>
133 </html>
+0
-100
doc/doxygen-doc/html/a00360.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_topology_diff_u::hwloc_topology_diff_generic_s Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 <div id="nav-path" class="navpath">
40 <ul>
41 <li class="navelem"><a class="el" href="a00356.html">hwloc_topology_diff_u</a></li><li class="navelem"><a class="el" href="a00360.html">hwloc_topology_diff_generic_s</a></li> </ul>
42 </div>
43 </div><!-- top -->
44 <div class="header">
45 <div class="summary">
46 <a href="#pub-attribs">Data Fields</a> </div>
47 <div class="headertitle">
48 <div class="title">hwloc_topology_diff_u::hwloc_topology_diff_generic_s Struct Reference</div> </div>
49 </div><!--header-->
50 <div class="contents">
51
52 <p><code>#include &lt;<a class="el" href="a00176_source.html">diff.h</a>&gt;</code></p>
53 <table class="memberdecls">
54 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
55 Data Fields</h2></td></tr>
56 <tr class="memitem:a373005489fcddeba6319163e60263ae8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00231.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00360.html#a373005489fcddeba6319163e60263ae8">type</a></td></tr>
57 <tr class="separator:a373005489fcddeba6319163e60263ae8"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:a720aa94eb73cddfd8d6bf9fcbbfc035e"><td class="memItemLeft" align="right" valign="top">union <a class="el" href="a00356.html">hwloc_topology_diff_u</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00360.html#a720aa94eb73cddfd8d6bf9fcbbfc035e">next</a></td></tr>
59 <tr class="separator:a720aa94eb73cddfd8d6bf9fcbbfc035e"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 </table>
61 <h2 class="groupheader">Field Documentation</h2>
62 <a id="a720aa94eb73cddfd8d6bf9fcbbfc035e"></a>
63 <h2 class="memtitle"><span class="permalink"><a href="#a720aa94eb73cddfd8d6bf9fcbbfc035e">&#9670;&nbsp;</a></span>next</h2>
64
65 <div class="memitem">
66 <div class="memproto">
67 <table class="memname">
68 <tr>
69 <td class="memname">union <a class="el" href="a00356.html">hwloc_topology_diff_u</a>* hwloc_topology_diff_u::hwloc_topology_diff_generic_s::next</td>
70 </tr>
71 </table>
72 </div><div class="memdoc">
73
74 </div>
75 </div>
76 <a id="a373005489fcddeba6319163e60263ae8"></a>
77 <h2 class="memtitle"><span class="permalink"><a href="#a373005489fcddeba6319163e60263ae8">&#9670;&nbsp;</a></span>type</h2>
78
79 <div class="memitem">
80 <div class="memproto">
81 <table class="memname">
82 <tr>
83 <td class="memname"><a class="el" href="a00231.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a> hwloc_topology_diff_u::hwloc_topology_diff_generic_s::type</td>
84 </tr>
85 </table>
86 </div><div class="memdoc">
87
88 </div>
89 </div>
90 <hr/>The documentation for this struct was generated from the following file:<ul>
91 <li><a class="el" href="a00176_source.html">diff.h</a></li>
92 </ul>
93 </div><!-- contents -->
94 <!-- start footer part -->
95 <hr class="footer"/><address class="footer"><small>
96 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
97 </small></address>
98 </body>
99 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_topology_diff_u Union Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#nested-classes">Data Structures</a> &#124;
43 <a href="#pub-attribs">Data Fields</a> </div>
44 <div class="headertitle">
45 <div class="title">hwloc_topology_diff_u Union Reference<div class="ingroups"><a class="el" href="a00237.html">Topology differences</a></div></div> </div>
46 </div><!--header-->
47 <div class="contents">
48
49 <p><code>#include &lt;<a class="el" href="a00179_source.html">diff.h</a>&gt;</code></p>
50 <table class="memberdecls">
51 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
52 Data Structures</h2></td></tr>
53 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00366.html">hwloc_topology_diff_generic_s</a></td></tr>
54 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
55 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00370.html">hwloc_topology_diff_obj_attr_s</a></td></tr>
56 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
57 <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00374.html">hwloc_topology_diff_too_complex_s</a></td></tr>
58 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
59 </table><table class="memberdecls">
60 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
61 Data Fields</h2></td></tr>
62 <tr class="memitem:a0dd2cbfba0eca2fc7a2645668bcae0f8"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00366.html">hwloc_topology_diff_u::hwloc_topology_diff_generic_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00362.html#a0dd2cbfba0eca2fc7a2645668bcae0f8">generic</a></td></tr>
63 <tr class="separator:a0dd2cbfba0eca2fc7a2645668bcae0f8"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 <tr class="memitem:a01dca644feea48448b36baa60cf4c07f"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00370.html">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00362.html#a01dca644feea48448b36baa60cf4c07f">obj_attr</a></td></tr>
65 <tr class="separator:a01dca644feea48448b36baa60cf4c07f"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 <tr class="memitem:af7dc1148eb656c56e9678218cafd027b"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00374.html">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00362.html#af7dc1148eb656c56e9678218cafd027b">too_complex</a></td></tr>
67 <tr class="separator:af7dc1148eb656c56e9678218cafd027b"><td class="memSeparator" colspan="2">&#160;</td></tr>
68 </table>
69 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
70 <div class="textblock"><p>One element of a difference list between two topologies. </p>
71 </div><h2 class="groupheader">Field Documentation</h2>
72 <a id="a0dd2cbfba0eca2fc7a2645668bcae0f8"></a>
73 <h2 class="memtitle"><span class="permalink"><a href="#a0dd2cbfba0eca2fc7a2645668bcae0f8">&#9670;&nbsp;</a></span>generic</h2>
74
75 <div class="memitem">
76 <div class="memproto">
77 <table class="memname">
78 <tr>
79 <td class="memname">struct <a class="el" href="a00366.html">hwloc_topology_diff_u::hwloc_topology_diff_generic_s</a> hwloc_topology_diff_u::generic</td>
80 </tr>
81 </table>
82 </div><div class="memdoc">
83
84 </div>
85 </div>
86 <a id="a01dca644feea48448b36baa60cf4c07f"></a>
87 <h2 class="memtitle"><span class="permalink"><a href="#a01dca644feea48448b36baa60cf4c07f">&#9670;&nbsp;</a></span>obj_attr</h2>
88
89 <div class="memitem">
90 <div class="memproto">
91 <table class="memname">
92 <tr>
93 <td class="memname">struct <a class="el" href="a00370.html">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a> hwloc_topology_diff_u::obj_attr</td>
94 </tr>
95 </table>
96 </div><div class="memdoc">
97
98 </div>
99 </div>
100 <a id="af7dc1148eb656c56e9678218cafd027b"></a>
101 <h2 class="memtitle"><span class="permalink"><a href="#af7dc1148eb656c56e9678218cafd027b">&#9670;&nbsp;</a></span>too_complex</h2>
102
103 <div class="memitem">
104 <div class="memproto">
105 <table class="memname">
106 <tr>
107 <td class="memname">struct <a class="el" href="a00374.html">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a> hwloc_topology_diff_u::too_complex</td>
108 </tr>
109 </table>
110 </div><div class="memdoc">
111
112 </div>
113 </div>
114 <hr/>The documentation for this union was generated from the following file:<ul>
115 <li><a class="el" href="a00179_source.html">diff.h</a></li>
116 </ul>
117 </div><!-- contents -->
118 <!-- start footer part -->
119 <hr class="footer"/><address class="footer"><small>
120 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
121 </small></address>
122 </body>
123 </html>
+0
-148
doc/doxygen-doc/html/a00364.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 <div id="nav-path" class="navpath">
40 <ul>
41 <li class="navelem"><a class="el" href="a00356.html">hwloc_topology_diff_u</a></li><li class="navelem"><a class="el" href="a00364.html">hwloc_topology_diff_obj_attr_s</a></li> </ul>
42 </div>
43 </div><!-- top -->
44 <div class="header">
45 <div class="summary">
46 <a href="#pub-attribs">Data Fields</a> </div>
47 <div class="headertitle">
48 <div class="title">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s Struct Reference</div> </div>
49 </div><!--header-->
50 <div class="contents">
51
52 <p><code>#include &lt;<a class="el" href="a00176_source.html">diff.h</a>&gt;</code></p>
53 <table class="memberdecls">
54 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
55 Data Fields</h2></td></tr>
56 <tr class="memitem:a70a118ad288bd98f18c8ce6dc52e2d10"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00231.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00364.html#a70a118ad288bd98f18c8ce6dc52e2d10">type</a></td></tr>
57 <tr class="separator:a70a118ad288bd98f18c8ce6dc52e2d10"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:acb9170a8eb3392656d70f7f3ef3e3eed"><td class="memItemLeft" align="right" valign="top">union <a class="el" href="a00356.html">hwloc_topology_diff_u</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00364.html#acb9170a8eb3392656d70f7f3ef3e3eed">next</a></td></tr>
59 <tr class="separator:acb9170a8eb3392656d70f7f3ef3e3eed"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:a82c1d4bab80b9e0bf301a9d8291893e0"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00364.html#a82c1d4bab80b9e0bf301a9d8291893e0">obj_depth</a></td></tr>
61 <tr class="separator:a82c1d4bab80b9e0bf301a9d8291893e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:adb9f4d414470b6670cde8d90759a6c1c"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00364.html#adb9f4d414470b6670cde8d90759a6c1c">obj_index</a></td></tr>
63 <tr class="separator:adb9f4d414470b6670cde8d90759a6c1c"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 <tr class="memitem:a91f0645f9062e892652357cd141c8ebb"><td class="memItemLeft" align="right" valign="top">union <a class="el" href="a00340.html">hwloc_topology_diff_obj_attr_u</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00364.html#a91f0645f9062e892652357cd141c8ebb">diff</a></td></tr>
65 <tr class="separator:a91f0645f9062e892652357cd141c8ebb"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 </table>
67 <h2 class="groupheader">Field Documentation</h2>
68 <a id="a91f0645f9062e892652357cd141c8ebb"></a>
69 <h2 class="memtitle"><span class="permalink"><a href="#a91f0645f9062e892652357cd141c8ebb">&#9670;&nbsp;</a></span>diff</h2>
70
71 <div class="memitem">
72 <div class="memproto">
73 <table class="memname">
74 <tr>
75 <td class="memname">union <a class="el" href="a00340.html">hwloc_topology_diff_obj_attr_u</a> hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s::diff</td>
76 </tr>
77 </table>
78 </div><div class="memdoc">
79
80 </div>
81 </div>
82 <a id="acb9170a8eb3392656d70f7f3ef3e3eed"></a>
83 <h2 class="memtitle"><span class="permalink"><a href="#acb9170a8eb3392656d70f7f3ef3e3eed">&#9670;&nbsp;</a></span>next</h2>
84
85 <div class="memitem">
86 <div class="memproto">
87 <table class="memname">
88 <tr>
89 <td class="memname">union <a class="el" href="a00356.html">hwloc_topology_diff_u</a>* hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s::next</td>
90 </tr>
91 </table>
92 </div><div class="memdoc">
93
94 </div>
95 </div>
96 <a id="a82c1d4bab80b9e0bf301a9d8291893e0"></a>
97 <h2 class="memtitle"><span class="permalink"><a href="#a82c1d4bab80b9e0bf301a9d8291893e0">&#9670;&nbsp;</a></span>obj_depth</h2>
98
99 <div class="memitem">
100 <div class="memproto">
101 <table class="memname">
102 <tr>
103 <td class="memname">int hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s::obj_depth</td>
104 </tr>
105 </table>
106 </div><div class="memdoc">
107
108 </div>
109 </div>
110 <a id="adb9f4d414470b6670cde8d90759a6c1c"></a>
111 <h2 class="memtitle"><span class="permalink"><a href="#adb9f4d414470b6670cde8d90759a6c1c">&#9670;&nbsp;</a></span>obj_index</h2>
112
113 <div class="memitem">
114 <div class="memproto">
115 <table class="memname">
116 <tr>
117 <td class="memname">unsigned hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s::obj_index</td>
118 </tr>
119 </table>
120 </div><div class="memdoc">
121
122 </div>
123 </div>
124 <a id="a70a118ad288bd98f18c8ce6dc52e2d10"></a>
125 <h2 class="memtitle"><span class="permalink"><a href="#a70a118ad288bd98f18c8ce6dc52e2d10">&#9670;&nbsp;</a></span>type</h2>
126
127 <div class="memitem">
128 <div class="memproto">
129 <table class="memname">
130 <tr>
131 <td class="memname"><a class="el" href="a00231.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a> hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s::type</td>
132 </tr>
133 </table>
134 </div><div class="memdoc">
135
136 </div>
137 </div>
138 <hr/>The documentation for this struct was generated from the following file:<ul>
139 <li><a class="el" href="a00176_source.html">diff.h</a></li>
140 </ul>
141 </div><!-- contents -->
142 <!-- start footer part -->
143 <hr class="footer"/><address class="footer"><small>
144 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
145 </small></address>
146 </body>
147 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_topology_diff_u::hwloc_topology_diff_generic_s Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 <div id="nav-path" class="navpath">
40 <ul>
41 <li class="navelem"><a class="el" href="a00362.html">hwloc_topology_diff_u</a></li><li class="navelem"><a class="el" href="a00366.html">hwloc_topology_diff_generic_s</a></li> </ul>
42 </div>
43 </div><!-- top -->
44 <div class="header">
45 <div class="summary">
46 <a href="#pub-attribs">Data Fields</a> </div>
47 <div class="headertitle">
48 <div class="title">hwloc_topology_diff_u::hwloc_topology_diff_generic_s Struct Reference</div> </div>
49 </div><!--header-->
50 <div class="contents">
51
52 <p><code>#include &lt;<a class="el" href="a00179_source.html">diff.h</a>&gt;</code></p>
53 <table class="memberdecls">
54 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
55 Data Fields</h2></td></tr>
56 <tr class="memitem:a373005489fcddeba6319163e60263ae8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00237.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00366.html#a373005489fcddeba6319163e60263ae8">type</a></td></tr>
57 <tr class="separator:a373005489fcddeba6319163e60263ae8"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:a720aa94eb73cddfd8d6bf9fcbbfc035e"><td class="memItemLeft" align="right" valign="top">union <a class="el" href="a00362.html">hwloc_topology_diff_u</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00366.html#a720aa94eb73cddfd8d6bf9fcbbfc035e">next</a></td></tr>
59 <tr class="separator:a720aa94eb73cddfd8d6bf9fcbbfc035e"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 </table>
61 <h2 class="groupheader">Field Documentation</h2>
62 <a id="a720aa94eb73cddfd8d6bf9fcbbfc035e"></a>
63 <h2 class="memtitle"><span class="permalink"><a href="#a720aa94eb73cddfd8d6bf9fcbbfc035e">&#9670;&nbsp;</a></span>next</h2>
64
65 <div class="memitem">
66 <div class="memproto">
67 <table class="memname">
68 <tr>
69 <td class="memname">union <a class="el" href="a00362.html">hwloc_topology_diff_u</a>* hwloc_topology_diff_u::hwloc_topology_diff_generic_s::next</td>
70 </tr>
71 </table>
72 </div><div class="memdoc">
73
74 </div>
75 </div>
76 <a id="a373005489fcddeba6319163e60263ae8"></a>
77 <h2 class="memtitle"><span class="permalink"><a href="#a373005489fcddeba6319163e60263ae8">&#9670;&nbsp;</a></span>type</h2>
78
79 <div class="memitem">
80 <div class="memproto">
81 <table class="memname">
82 <tr>
83 <td class="memname"><a class="el" href="a00237.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a> hwloc_topology_diff_u::hwloc_topology_diff_generic_s::type</td>
84 </tr>
85 </table>
86 </div><div class="memdoc">
87
88 </div>
89 </div>
90 <hr/>The documentation for this struct was generated from the following file:<ul>
91 <li><a class="el" href="a00179_source.html">diff.h</a></li>
92 </ul>
93 </div><!-- contents -->
94 <!-- start footer part -->
95 <hr class="footer"/><address class="footer"><small>
96 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
97 </small></address>
98 </body>
99 </html>
+0
-132
doc/doxygen-doc/html/a00368.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 <div id="nav-path" class="navpath">
40 <ul>
41 <li class="navelem"><a class="el" href="a00356.html">hwloc_topology_diff_u</a></li><li class="navelem"><a class="el" href="a00368.html">hwloc_topology_diff_too_complex_s</a></li> </ul>
42 </div>
43 </div><!-- top -->
44 <div class="header">
45 <div class="summary">
46 <a href="#pub-attribs">Data Fields</a> </div>
47 <div class="headertitle">
48 <div class="title">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s Struct Reference</div> </div>
49 </div><!--header-->
50 <div class="contents">
51
52 <p><code>#include &lt;<a class="el" href="a00176_source.html">diff.h</a>&gt;</code></p>
53 <table class="memberdecls">
54 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
55 Data Fields</h2></td></tr>
56 <tr class="memitem:a92084295a4d6faf17a95a7eea526ddbd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00231.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00368.html#a92084295a4d6faf17a95a7eea526ddbd">type</a></td></tr>
57 <tr class="separator:a92084295a4d6faf17a95a7eea526ddbd"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:a375afbaa043b109be689a7d9a3c7d153"><td class="memItemLeft" align="right" valign="top">union <a class="el" href="a00356.html">hwloc_topology_diff_u</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00368.html#a375afbaa043b109be689a7d9a3c7d153">next</a></td></tr>
59 <tr class="separator:a375afbaa043b109be689a7d9a3c7d153"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:a94c6498caeaafbb79927395d918d6cb3"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00368.html#a94c6498caeaafbb79927395d918d6cb3">obj_depth</a></td></tr>
61 <tr class="separator:a94c6498caeaafbb79927395d918d6cb3"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:a6dc6b3c4adb10db74d993e37afaa0580"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00368.html#a6dc6b3c4adb10db74d993e37afaa0580">obj_index</a></td></tr>
63 <tr class="separator:a6dc6b3c4adb10db74d993e37afaa0580"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 </table>
65 <h2 class="groupheader">Field Documentation</h2>
66 <a id="a375afbaa043b109be689a7d9a3c7d153"></a>
67 <h2 class="memtitle"><span class="permalink"><a href="#a375afbaa043b109be689a7d9a3c7d153">&#9670;&nbsp;</a></span>next</h2>
68
69 <div class="memitem">
70 <div class="memproto">
71 <table class="memname">
72 <tr>
73 <td class="memname">union <a class="el" href="a00356.html">hwloc_topology_diff_u</a>* hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s::next</td>
74 </tr>
75 </table>
76 </div><div class="memdoc">
77
78 </div>
79 </div>
80 <a id="a94c6498caeaafbb79927395d918d6cb3"></a>
81 <h2 class="memtitle"><span class="permalink"><a href="#a94c6498caeaafbb79927395d918d6cb3">&#9670;&nbsp;</a></span>obj_depth</h2>
82
83 <div class="memitem">
84 <div class="memproto">
85 <table class="memname">
86 <tr>
87 <td class="memname">int hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s::obj_depth</td>
88 </tr>
89 </table>
90 </div><div class="memdoc">
91
92 </div>
93 </div>
94 <a id="a6dc6b3c4adb10db74d993e37afaa0580"></a>
95 <h2 class="memtitle"><span class="permalink"><a href="#a6dc6b3c4adb10db74d993e37afaa0580">&#9670;&nbsp;</a></span>obj_index</h2>
96
97 <div class="memitem">
98 <div class="memproto">
99 <table class="memname">
100 <tr>
101 <td class="memname">unsigned hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s::obj_index</td>
102 </tr>
103 </table>
104 </div><div class="memdoc">
105
106 </div>
107 </div>
108 <a id="a92084295a4d6faf17a95a7eea526ddbd"></a>
109 <h2 class="memtitle"><span class="permalink"><a href="#a92084295a4d6faf17a95a7eea526ddbd">&#9670;&nbsp;</a></span>type</h2>
110
111 <div class="memitem">
112 <div class="memproto">
113 <table class="memname">
114 <tr>
115 <td class="memname"><a class="el" href="a00231.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a> hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s::type</td>
116 </tr>
117 </table>
118 </div><div class="memdoc">
119
120 </div>
121 </div>
122 <hr/>The documentation for this struct was generated from the following file:<ul>
123 <li><a class="el" href="a00176_source.html">diff.h</a></li>
124 </ul>
125 </div><!-- contents -->
126 <!-- start footer part -->
127 <hr class="footer"/><address class="footer"><small>
128 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
129 </small></address>
130 </body>
131 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 <div id="nav-path" class="navpath">
40 <ul>
41 <li class="navelem"><a class="el" href="a00362.html">hwloc_topology_diff_u</a></li><li class="navelem"><a class="el" href="a00370.html">hwloc_topology_diff_obj_attr_s</a></li> </ul>
42 </div>
43 </div><!-- top -->
44 <div class="header">
45 <div class="summary">
46 <a href="#pub-attribs">Data Fields</a> </div>
47 <div class="headertitle">
48 <div class="title">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s Struct Reference</div> </div>
49 </div><!--header-->
50 <div class="contents">
51
52 <p><code>#include &lt;<a class="el" href="a00179_source.html">diff.h</a>&gt;</code></p>
53 <table class="memberdecls">
54 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
55 Data Fields</h2></td></tr>
56 <tr class="memitem:a70a118ad288bd98f18c8ce6dc52e2d10"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00237.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00370.html#a70a118ad288bd98f18c8ce6dc52e2d10">type</a></td></tr>
57 <tr class="separator:a70a118ad288bd98f18c8ce6dc52e2d10"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:acb9170a8eb3392656d70f7f3ef3e3eed"><td class="memItemLeft" align="right" valign="top">union <a class="el" href="a00362.html">hwloc_topology_diff_u</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00370.html#acb9170a8eb3392656d70f7f3ef3e3eed">next</a></td></tr>
59 <tr class="separator:acb9170a8eb3392656d70f7f3ef3e3eed"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:a82c1d4bab80b9e0bf301a9d8291893e0"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00370.html#a82c1d4bab80b9e0bf301a9d8291893e0">obj_depth</a></td></tr>
61 <tr class="separator:a82c1d4bab80b9e0bf301a9d8291893e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:adb9f4d414470b6670cde8d90759a6c1c"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00370.html#adb9f4d414470b6670cde8d90759a6c1c">obj_index</a></td></tr>
63 <tr class="separator:adb9f4d414470b6670cde8d90759a6c1c"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 <tr class="memitem:a91f0645f9062e892652357cd141c8ebb"><td class="memItemLeft" align="right" valign="top">union <a class="el" href="a00346.html">hwloc_topology_diff_obj_attr_u</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00370.html#a91f0645f9062e892652357cd141c8ebb">diff</a></td></tr>
65 <tr class="separator:a91f0645f9062e892652357cd141c8ebb"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 </table>
67 <h2 class="groupheader">Field Documentation</h2>
68 <a id="a91f0645f9062e892652357cd141c8ebb"></a>
69 <h2 class="memtitle"><span class="permalink"><a href="#a91f0645f9062e892652357cd141c8ebb">&#9670;&nbsp;</a></span>diff</h2>
70
71 <div class="memitem">
72 <div class="memproto">
73 <table class="memname">
74 <tr>
75 <td class="memname">union <a class="el" href="a00346.html">hwloc_topology_diff_obj_attr_u</a> hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s::diff</td>
76 </tr>
77 </table>
78 </div><div class="memdoc">
79
80 </div>
81 </div>
82 <a id="acb9170a8eb3392656d70f7f3ef3e3eed"></a>
83 <h2 class="memtitle"><span class="permalink"><a href="#acb9170a8eb3392656d70f7f3ef3e3eed">&#9670;&nbsp;</a></span>next</h2>
84
85 <div class="memitem">
86 <div class="memproto">
87 <table class="memname">
88 <tr>
89 <td class="memname">union <a class="el" href="a00362.html">hwloc_topology_diff_u</a>* hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s::next</td>
90 </tr>
91 </table>
92 </div><div class="memdoc">
93
94 </div>
95 </div>
96 <a id="a82c1d4bab80b9e0bf301a9d8291893e0"></a>
97 <h2 class="memtitle"><span class="permalink"><a href="#a82c1d4bab80b9e0bf301a9d8291893e0">&#9670;&nbsp;</a></span>obj_depth</h2>
98
99 <div class="memitem">
100 <div class="memproto">
101 <table class="memname">
102 <tr>
103 <td class="memname">int hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s::obj_depth</td>
104 </tr>
105 </table>
106 </div><div class="memdoc">
107
108 </div>
109 </div>
110 <a id="adb9f4d414470b6670cde8d90759a6c1c"></a>
111 <h2 class="memtitle"><span class="permalink"><a href="#adb9f4d414470b6670cde8d90759a6c1c">&#9670;&nbsp;</a></span>obj_index</h2>
112
113 <div class="memitem">
114 <div class="memproto">
115 <table class="memname">
116 <tr>
117 <td class="memname">unsigned hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s::obj_index</td>
118 </tr>
119 </table>
120 </div><div class="memdoc">
121
122 </div>
123 </div>
124 <a id="a70a118ad288bd98f18c8ce6dc52e2d10"></a>
125 <h2 class="memtitle"><span class="permalink"><a href="#a70a118ad288bd98f18c8ce6dc52e2d10">&#9670;&nbsp;</a></span>type</h2>
126
127 <div class="memitem">
128 <div class="memproto">
129 <table class="memname">
130 <tr>
131 <td class="memname"><a class="el" href="a00237.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a> hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s::type</td>
132 </tr>
133 </table>
134 </div><div class="memdoc">
135
136 </div>
137 </div>
138 <hr/>The documentation for this struct was generated from the following file:<ul>
139 <li><a class="el" href="a00179_source.html">diff.h</a></li>
140 </ul>
141 </div><!-- contents -->
142 <!-- start footer part -->
143 <hr class="footer"/><address class="footer"><small>
144 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
145 </small></address>
146 </body>
147 </html>
+0
-178
doc/doxygen-doc/html/a00372.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_disc_component Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#pub-attribs">Data Fields</a> </div>
43 <div class="headertitle">
44 <div class="title">hwloc_disc_component Struct Reference<div class="ingroups"><a class="el" href="a00233.html">Components and Plugins: Discovery components</a></div></div> </div>
45 </div><!--header-->
46 <div class="contents">
47
48 <p><code>#include &lt;<a class="el" href="a00182_source.html">plugins.h</a>&gt;</code></p>
49 <table class="memberdecls">
50 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
51 Data Fields</h2></td></tr>
52 <tr class="memitem:a4064c3b5d9213027e87caebef380a840"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00372.html#a4064c3b5d9213027e87caebef380a840">name</a></td></tr>
53 <tr class="separator:a4064c3b5d9213027e87caebef380a840"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:a61ad3151efa02e3dbad5d919758f9c90"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00372.html#a61ad3151efa02e3dbad5d919758f9c90">phases</a></td></tr>
55 <tr class="separator:a61ad3151efa02e3dbad5d919758f9c90"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:acbb9957914dbf7b8f504215aa0c8d3fe"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00372.html#acbb9957914dbf7b8f504215aa0c8d3fe">excluded_phases</a></td></tr>
57 <tr class="separator:acbb9957914dbf7b8f504215aa0c8d3fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:ab133956219739a1032a17131757d1961"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00380.html">hwloc_backend</a> *(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00372.html#ab133956219739a1032a17131757d1961">instantiate</a> )(struct hwloc_topology *topology, struct <a class="el" href="a00372.html">hwloc_disc_component</a> *component, unsigned <a class="el" href="a00372.html#acbb9957914dbf7b8f504215aa0c8d3fe">excluded_phases</a>, const void *data1, const void *data2, const void *data3)</td></tr>
59 <tr class="separator:ab133956219739a1032a17131757d1961"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:ae86d283c272c5ae24073a235efbf6b59"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00372.html#ae86d283c272c5ae24073a235efbf6b59">priority</a></td></tr>
61 <tr class="separator:ae86d283c272c5ae24073a235efbf6b59"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:ace80cafe2b1732b047b3fc3da47e6517"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00372.html#ace80cafe2b1732b047b3fc3da47e6517">enabled_by_default</a></td></tr>
63 <tr class="separator:ace80cafe2b1732b047b3fc3da47e6517"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 </table>
65 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
66 <div class="textblock"><p>Discovery component structure. </p>
67 <p>This is the major kind of components, taking care of the discovery. They are registered by generic components, either statically-built or as plugins. </p>
68 </div><h2 class="groupheader">Field Documentation</h2>
69 <a id="ace80cafe2b1732b047b3fc3da47e6517"></a>
70 <h2 class="memtitle"><span class="permalink"><a href="#ace80cafe2b1732b047b3fc3da47e6517">&#9670;&nbsp;</a></span>enabled_by_default</h2>
71
72 <div class="memitem">
73 <div class="memproto">
74 <table class="memname">
75 <tr>
76 <td class="memname">unsigned hwloc_disc_component::enabled_by_default</td>
77 </tr>
78 </table>
79 </div><div class="memdoc">
80
81 <p>Enabled by default. If unset, if will be disabled unless explicitly requested. </p>
82
83 </div>
84 </div>
85 <a id="acbb9957914dbf7b8f504215aa0c8d3fe"></a>
86 <h2 class="memtitle"><span class="permalink"><a href="#acbb9957914dbf7b8f504215aa0c8d3fe">&#9670;&nbsp;</a></span>excluded_phases</h2>
87
88 <div class="memitem">
89 <div class="memproto">
90 <table class="memname">
91 <tr>
92 <td class="memname">unsigned hwloc_disc_component::excluded_phases</td>
93 </tr>
94 </table>
95 </div><div class="memdoc">
96
97 <p>Component phases to exclude, as an OR'ed set of <a class="el" href="a00234.html#ga600bba1a62022d5f516800649b1edb61" title="Discovery phase.">hwloc_disc_phase_t</a>. </p>
98 <p>For a GLOBAL component, this usually includes all other phases (<code>~UL</code>).</p>
99 <p>Other components only exclude types that may bring conflicting topology information. MISC components should likely not be excluded since they usually bring non-primary additional information. </p>
100
101 </div>
102 </div>
103 <a id="ab133956219739a1032a17131757d1961"></a>
104 <h2 class="memtitle"><span class="permalink"><a href="#ab133956219739a1032a17131757d1961">&#9670;&nbsp;</a></span>instantiate</h2>
105
106 <div class="memitem">
107 <div class="memproto">
108 <table class="memname">
109 <tr>
110 <td class="memname">struct <a class="el" href="a00380.html">hwloc_backend</a>*(* hwloc_disc_component::instantiate) (struct hwloc_topology *topology, struct <a class="el" href="a00372.html">hwloc_disc_component</a> *component, unsigned <a class="el" href="a00372.html#acbb9957914dbf7b8f504215aa0c8d3fe">excluded_phases</a>, const void *data1, const void *data2, const void *data3)</td>
111 </tr>
112 </table>
113 </div><div class="memdoc">
114
115 <p>Instantiate callback to create a backend from the component. Parameters data1, data2, data3 are NULL except for components that have special enabling routines such as <a class="el" href="a00198.html#ga879439b7ee99407ee911b3ac64e9a25e" title="Enable XML-file based topology.">hwloc_topology_set_xml()</a>. </p>
116
117 </div>
118 </div>
119 <a id="a4064c3b5d9213027e87caebef380a840"></a>
120 <h2 class="memtitle"><span class="permalink"><a href="#a4064c3b5d9213027e87caebef380a840">&#9670;&nbsp;</a></span>name</h2>
121
122 <div class="memitem">
123 <div class="memproto">
124 <table class="memname">
125 <tr>
126 <td class="memname">const char* hwloc_disc_component::name</td>
127 </tr>
128 </table>
129 </div><div class="memdoc">
130
131 <p>Name. If this component is built as a plugin, this name does not have to match the plugin filename. </p>
132
133 </div>
134 </div>
135 <a id="a61ad3151efa02e3dbad5d919758f9c90"></a>
136 <h2 class="memtitle"><span class="permalink"><a href="#a61ad3151efa02e3dbad5d919758f9c90">&#9670;&nbsp;</a></span>phases</h2>
137
138 <div class="memitem">
139 <div class="memproto">
140 <table class="memname">
141 <tr>
142 <td class="memname">unsigned hwloc_disc_component::phases</td>
143 </tr>
144 </table>
145 </div><div class="memdoc">
146
147 <p>Discovery phases performed by this component. OR'ed set of <a class="el" href="a00234.html#ga600bba1a62022d5f516800649b1edb61" title="Discovery phase.">hwloc_disc_phase_t</a>. </p>
148
149 </div>
150 </div>
151 <a id="ae86d283c272c5ae24073a235efbf6b59"></a>
152 <h2 class="memtitle"><span class="permalink"><a href="#ae86d283c272c5ae24073a235efbf6b59">&#9670;&nbsp;</a></span>priority</h2>
153
154 <div class="memitem">
155 <div class="memproto">
156 <table class="memname">
157 <tr>
158 <td class="memname">unsigned hwloc_disc_component::priority</td>
159 </tr>
160 </table>
161 </div><div class="memdoc">
162
163 <p>Component priority. Used to sort topology-&gt;components, higher priority first. Also used to decide between two components with the same name. </p>
164 <p>Usual values are 50 for native OS (or platform) components, 45 for x86, 40 for no-OS fallback, 30 for global components (xml, synthetic), 20 for pci, 10 for other misc components (opencl etc.). </p>
165
166 </div>
167 </div>
168 <hr/>The documentation for this struct was generated from the following file:<ul>
169 <li><a class="el" href="a00182_source.html">plugins.h</a></li>
170 </ul>
171 </div><!-- contents -->
172 <!-- start footer part -->
173 <hr class="footer"/><address class="footer"><small>
174 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
175 </small></address>
176 </body>
177 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 <div id="nav-path" class="navpath">
40 <ul>
41 <li class="navelem"><a class="el" href="a00362.html">hwloc_topology_diff_u</a></li><li class="navelem"><a class="el" href="a00374.html">hwloc_topology_diff_too_complex_s</a></li> </ul>
42 </div>
43 </div><!-- top -->
44 <div class="header">
45 <div class="summary">
46 <a href="#pub-attribs">Data Fields</a> </div>
47 <div class="headertitle">
48 <div class="title">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s Struct Reference</div> </div>
49 </div><!--header-->
50 <div class="contents">
51
52 <p><code>#include &lt;<a class="el" href="a00179_source.html">diff.h</a>&gt;</code></p>
53 <table class="memberdecls">
54 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
55 Data Fields</h2></td></tr>
56 <tr class="memitem:a92084295a4d6faf17a95a7eea526ddbd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00237.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00374.html#a92084295a4d6faf17a95a7eea526ddbd">type</a></td></tr>
57 <tr class="separator:a92084295a4d6faf17a95a7eea526ddbd"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:a375afbaa043b109be689a7d9a3c7d153"><td class="memItemLeft" align="right" valign="top">union <a class="el" href="a00362.html">hwloc_topology_diff_u</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00374.html#a375afbaa043b109be689a7d9a3c7d153">next</a></td></tr>
59 <tr class="separator:a375afbaa043b109be689a7d9a3c7d153"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:a94c6498caeaafbb79927395d918d6cb3"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00374.html#a94c6498caeaafbb79927395d918d6cb3">obj_depth</a></td></tr>
61 <tr class="separator:a94c6498caeaafbb79927395d918d6cb3"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:a6dc6b3c4adb10db74d993e37afaa0580"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00374.html#a6dc6b3c4adb10db74d993e37afaa0580">obj_index</a></td></tr>
63 <tr class="separator:a6dc6b3c4adb10db74d993e37afaa0580"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 </table>
65 <h2 class="groupheader">Field Documentation</h2>
66 <a id="a375afbaa043b109be689a7d9a3c7d153"></a>
67 <h2 class="memtitle"><span class="permalink"><a href="#a375afbaa043b109be689a7d9a3c7d153">&#9670;&nbsp;</a></span>next</h2>
68
69 <div class="memitem">
70 <div class="memproto">
71 <table class="memname">
72 <tr>
73 <td class="memname">union <a class="el" href="a00362.html">hwloc_topology_diff_u</a>* hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s::next</td>
74 </tr>
75 </table>
76 </div><div class="memdoc">
77
78 </div>
79 </div>
80 <a id="a94c6498caeaafbb79927395d918d6cb3"></a>
81 <h2 class="memtitle"><span class="permalink"><a href="#a94c6498caeaafbb79927395d918d6cb3">&#9670;&nbsp;</a></span>obj_depth</h2>
82
83 <div class="memitem">
84 <div class="memproto">
85 <table class="memname">
86 <tr>
87 <td class="memname">int hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s::obj_depth</td>
88 </tr>
89 </table>
90 </div><div class="memdoc">
91
92 </div>
93 </div>
94 <a id="a6dc6b3c4adb10db74d993e37afaa0580"></a>
95 <h2 class="memtitle"><span class="permalink"><a href="#a6dc6b3c4adb10db74d993e37afaa0580">&#9670;&nbsp;</a></span>obj_index</h2>
96
97 <div class="memitem">
98 <div class="memproto">
99 <table class="memname">
100 <tr>
101 <td class="memname">unsigned hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s::obj_index</td>
102 </tr>
103 </table>
104 </div><div class="memdoc">
105
106 </div>
107 </div>
108 <a id="a92084295a4d6faf17a95a7eea526ddbd"></a>
109 <h2 class="memtitle"><span class="permalink"><a href="#a92084295a4d6faf17a95a7eea526ddbd">&#9670;&nbsp;</a></span>type</h2>
110
111 <div class="memitem">
112 <div class="memproto">
113 <table class="memname">
114 <tr>
115 <td class="memname"><a class="el" href="a00237.html#ga8470f631b7365c839d3e40d38c5b6291">hwloc_topology_diff_type_t</a> hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s::type</td>
116 </tr>
117 </table>
118 </div><div class="memdoc">
119
120 </div>
121 </div>
122 <hr/>The documentation for this struct was generated from the following file:<ul>
123 <li><a class="el" href="a00179_source.html">diff.h</a></li>
124 </ul>
125 </div><!-- contents -->
126 <!-- start footer part -->
127 <hr class="footer"/><address class="footer"><small>
128 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
129 </small></address>
130 </body>
131 </html>
+0
-121
doc/doxygen-doc/html/a00376.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_disc_status Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#pub-attribs">Data Fields</a> </div>
43 <div class="headertitle">
44 <div class="title">hwloc_disc_status Struct Reference<div class="ingroups"><a class="el" href="a00234.html">Components and Plugins: Discovery backends</a></div></div> </div>
45 </div><!--header-->
46 <div class="contents">
47
48 <p><code>#include &lt;<a class="el" href="a00182_source.html">plugins.h</a>&gt;</code></p>
49 <table class="memberdecls">
50 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
51 Data Fields</h2></td></tr>
52 <tr class="memitem:abaf7c8c082d43e133171f0723dbf824b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00234.html#ga600bba1a62022d5f516800649b1edb61">hwloc_disc_phase_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00376.html#abaf7c8c082d43e133171f0723dbf824b">phase</a></td></tr>
53 <tr class="separator:abaf7c8c082d43e133171f0723dbf824b"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:a0f95fa42d46a6e7cf8dee8af12afee3a"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00376.html#a0f95fa42d46a6e7cf8dee8af12afee3a">excluded_phases</a></td></tr>
55 <tr class="separator:a0f95fa42d46a6e7cf8dee8af12afee3a"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:ad8b123cecb945a9182eb824ccf8ef9d7"><td class="memItemLeft" align="right" valign="top">unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00376.html#ad8b123cecb945a9182eb824ccf8ef9d7">flags</a></td></tr>
57 <tr class="separator:ad8b123cecb945a9182eb824ccf8ef9d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 </table>
59 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
60 <div class="textblock"><p>Discovery status structure. </p>
61 <p>Used by the core and backends to inform about what has been/is being done during the discovery process. </p>
62 </div><h2 class="groupheader">Field Documentation</h2>
63 <a id="a0f95fa42d46a6e7cf8dee8af12afee3a"></a>
64 <h2 class="memtitle"><span class="permalink"><a href="#a0f95fa42d46a6e7cf8dee8af12afee3a">&#9670;&nbsp;</a></span>excluded_phases</h2>
65
66 <div class="memitem">
67 <div class="memproto">
68 <table class="memname">
69 <tr>
70 <td class="memname">unsigned hwloc_disc_status::excluded_phases</td>
71 </tr>
72 </table>
73 </div><div class="memdoc">
74
75 <p>Dynamically excluded phases. If a component decides during discovery that some phases are no longer needed. </p>
76
77 </div>
78 </div>
79 <a id="ad8b123cecb945a9182eb824ccf8ef9d7"></a>
80 <h2 class="memtitle"><span class="permalink"><a href="#ad8b123cecb945a9182eb824ccf8ef9d7">&#9670;&nbsp;</a></span>flags</h2>
81
82 <div class="memitem">
83 <div class="memproto">
84 <table class="memname">
85 <tr>
86 <td class="memname">unsigned long hwloc_disc_status::flags</td>
87 </tr>
88 </table>
89 </div><div class="memdoc">
90
91 <p>OR'ed set of hwloc_disc_status_flag_e. </p>
92
93 </div>
94 </div>
95 <a id="abaf7c8c082d43e133171f0723dbf824b"></a>
96 <h2 class="memtitle"><span class="permalink"><a href="#abaf7c8c082d43e133171f0723dbf824b">&#9670;&nbsp;</a></span>phase</h2>
97
98 <div class="memitem">
99 <div class="memproto">
100 <table class="memname">
101 <tr>
102 <td class="memname"><a class="el" href="a00234.html#ga600bba1a62022d5f516800649b1edb61">hwloc_disc_phase_t</a> hwloc_disc_status::phase</td>
103 </tr>
104 </table>
105 </div><div class="memdoc">
106
107 <p>The current discovery phase that is performed. Must match one of the phases in the component phases field. </p>
108
109 </div>
110 </div>
111 <hr/>The documentation for this struct was generated from the following file:<ul>
112 <li><a class="el" href="a00182_source.html">plugins.h</a></li>
113 </ul>
114 </div><!-- contents -->
115 <!-- start footer part -->
116 <hr class="footer"/><address class="footer"><small>
117 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
118 </small></address>
119 </body>
120 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_disc_component Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#pub-attribs">Data Fields</a> </div>
43 <div class="headertitle">
44 <div class="title">hwloc_disc_component Struct Reference<div class="ingroups"><a class="el" href="a00239.html">Components and Plugins: Discovery components</a></div></div> </div>
45 </div><!--header-->
46 <div class="contents">
47
48 <p><code>#include &lt;<a class="el" href="a00185_source.html">plugins.h</a>&gt;</code></p>
49 <table class="memberdecls">
50 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
51 Data Fields</h2></td></tr>
52 <tr class="memitem:a4064c3b5d9213027e87caebef380a840"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00378.html#a4064c3b5d9213027e87caebef380a840">name</a></td></tr>
53 <tr class="separator:a4064c3b5d9213027e87caebef380a840"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:a61ad3151efa02e3dbad5d919758f9c90"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00378.html#a61ad3151efa02e3dbad5d919758f9c90">phases</a></td></tr>
55 <tr class="separator:a61ad3151efa02e3dbad5d919758f9c90"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:acbb9957914dbf7b8f504215aa0c8d3fe"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00378.html#acbb9957914dbf7b8f504215aa0c8d3fe">excluded_phases</a></td></tr>
57 <tr class="separator:acbb9957914dbf7b8f504215aa0c8d3fe"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:ab133956219739a1032a17131757d1961"><td class="memItemLeft" align="right" valign="top">struct <a class="el" href="a00386.html">hwloc_backend</a> *(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00378.html#ab133956219739a1032a17131757d1961">instantiate</a> )(struct hwloc_topology *topology, struct <a class="el" href="a00378.html">hwloc_disc_component</a> *component, unsigned <a class="el" href="a00378.html#acbb9957914dbf7b8f504215aa0c8d3fe">excluded_phases</a>, const void *data1, const void *data2, const void *data3)</td></tr>
59 <tr class="separator:ab133956219739a1032a17131757d1961"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:ae86d283c272c5ae24073a235efbf6b59"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00378.html#ae86d283c272c5ae24073a235efbf6b59">priority</a></td></tr>
61 <tr class="separator:ae86d283c272c5ae24073a235efbf6b59"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:ace80cafe2b1732b047b3fc3da47e6517"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00378.html#ace80cafe2b1732b047b3fc3da47e6517">enabled_by_default</a></td></tr>
63 <tr class="separator:ace80cafe2b1732b047b3fc3da47e6517"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 </table>
65 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
66 <div class="textblock"><p>Discovery component structure. </p>
67 <p>This is the major kind of components, taking care of the discovery. They are registered by generic components, either statically-built or as plugins. </p>
68 </div><h2 class="groupheader">Field Documentation</h2>
69 <a id="ace80cafe2b1732b047b3fc3da47e6517"></a>
70 <h2 class="memtitle"><span class="permalink"><a href="#ace80cafe2b1732b047b3fc3da47e6517">&#9670;&nbsp;</a></span>enabled_by_default</h2>
71
72 <div class="memitem">
73 <div class="memproto">
74 <table class="memname">
75 <tr>
76 <td class="memname">unsigned hwloc_disc_component::enabled_by_default</td>
77 </tr>
78 </table>
79 </div><div class="memdoc">
80
81 <p>Enabled by default. If unset, if will be disabled unless explicitly requested. </p>
82
83 </div>
84 </div>
85 <a id="acbb9957914dbf7b8f504215aa0c8d3fe"></a>
86 <h2 class="memtitle"><span class="permalink"><a href="#acbb9957914dbf7b8f504215aa0c8d3fe">&#9670;&nbsp;</a></span>excluded_phases</h2>
87
88 <div class="memitem">
89 <div class="memproto">
90 <table class="memname">
91 <tr>
92 <td class="memname">unsigned hwloc_disc_component::excluded_phases</td>
93 </tr>
94 </table>
95 </div><div class="memdoc">
96
97 <p>Component phases to exclude, as an OR'ed set of <a class="el" href="a00240.html#ga600bba1a62022d5f516800649b1edb61" title="Discovery phase.">hwloc_disc_phase_t</a>. </p>
98 <p>For a GLOBAL component, this usually includes all other phases (<code>~UL</code>).</p>
99 <p>Other components only exclude types that may bring conflicting topology information. MISC components should likely not be excluded since they usually bring non-primary additional information. </p>
100
101 </div>
102 </div>
103 <a id="ab133956219739a1032a17131757d1961"></a>
104 <h2 class="memtitle"><span class="permalink"><a href="#ab133956219739a1032a17131757d1961">&#9670;&nbsp;</a></span>instantiate</h2>
105
106 <div class="memitem">
107 <div class="memproto">
108 <table class="memname">
109 <tr>
110 <td class="memname">struct <a class="el" href="a00386.html">hwloc_backend</a>*(* hwloc_disc_component::instantiate) (struct hwloc_topology *topology, struct <a class="el" href="a00378.html">hwloc_disc_component</a> *component, unsigned <a class="el" href="a00378.html#acbb9957914dbf7b8f504215aa0c8d3fe">excluded_phases</a>, const void *data1, const void *data2, const void *data3)</td>
111 </tr>
112 </table>
113 </div><div class="memdoc">
114
115 <p>Instantiate callback to create a backend from the component. Parameters data1, data2, data3 are NULL except for components that have special enabling routines such as <a class="el" href="a00201.html#ga879439b7ee99407ee911b3ac64e9a25e" title="Enable XML-file based topology.">hwloc_topology_set_xml()</a>. </p>
116
117 </div>
118 </div>
119 <a id="a4064c3b5d9213027e87caebef380a840"></a>
120 <h2 class="memtitle"><span class="permalink"><a href="#a4064c3b5d9213027e87caebef380a840">&#9670;&nbsp;</a></span>name</h2>
121
122 <div class="memitem">
123 <div class="memproto">
124 <table class="memname">
125 <tr>
126 <td class="memname">const char* hwloc_disc_component::name</td>
127 </tr>
128 </table>
129 </div><div class="memdoc">
130
131 <p>Name. If this component is built as a plugin, this name does not have to match the plugin filename. </p>
132
133 </div>
134 </div>
135 <a id="a61ad3151efa02e3dbad5d919758f9c90"></a>
136 <h2 class="memtitle"><span class="permalink"><a href="#a61ad3151efa02e3dbad5d919758f9c90">&#9670;&nbsp;</a></span>phases</h2>
137
138 <div class="memitem">
139 <div class="memproto">
140 <table class="memname">
141 <tr>
142 <td class="memname">unsigned hwloc_disc_component::phases</td>
143 </tr>
144 </table>
145 </div><div class="memdoc">
146
147 <p>Discovery phases performed by this component. OR'ed set of <a class="el" href="a00240.html#ga600bba1a62022d5f516800649b1edb61" title="Discovery phase.">hwloc_disc_phase_t</a>. </p>
148
149 </div>
150 </div>
151 <a id="ae86d283c272c5ae24073a235efbf6b59"></a>
152 <h2 class="memtitle"><span class="permalink"><a href="#ae86d283c272c5ae24073a235efbf6b59">&#9670;&nbsp;</a></span>priority</h2>
153
154 <div class="memitem">
155 <div class="memproto">
156 <table class="memname">
157 <tr>
158 <td class="memname">unsigned hwloc_disc_component::priority</td>
159 </tr>
160 </table>
161 </div><div class="memdoc">
162
163 <p>Component priority. Used to sort topology-&gt;components, higher priority first. Also used to decide between two components with the same name. </p>
164 <p>Usual values are 50 for native OS (or platform) components, 45 for x86, 40 for no-OS fallback, 30 for global components (xml, synthetic), 20 for pci, 10 for other misc components (opencl etc.). </p>
165
166 </div>
167 </div>
168 <hr/>The documentation for this struct was generated from the following file:<ul>
169 <li><a class="el" href="a00185_source.html">plugins.h</a></li>
170 </ul>
171 </div><!-- contents -->
172 <!-- start footer part -->
173 <hr class="footer"/><address class="footer"><small>
174 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
175 </small></address>
176 </body>
177 </html>
+0
-195
doc/doxygen-doc/html/a00380.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_backend Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#pub-attribs">Data Fields</a> </div>
43 <div class="headertitle">
44 <div class="title">hwloc_backend Struct Reference<div class="ingroups"><a class="el" href="a00234.html">Components and Plugins: Discovery backends</a></div></div> </div>
45 </div><!--header-->
46 <div class="contents">
47
48 <p><code>#include &lt;<a class="el" href="a00182_source.html">plugins.h</a>&gt;</code></p>
49 <table class="memberdecls">
50 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
51 Data Fields</h2></td></tr>
52 <tr class="memitem:aeca769840a6ff03e96462a9533adbccd"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00380.html#aeca769840a6ff03e96462a9533adbccd">phases</a></td></tr>
53 <tr class="separator:aeca769840a6ff03e96462a9533adbccd"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:aaa8eafe495aadd81c2e3c4ec527c10ba"><td class="memItemLeft" align="right" valign="top">unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00380.html#aaa8eafe495aadd81c2e3c4ec527c10ba">flags</a></td></tr>
55 <tr class="separator:aaa8eafe495aadd81c2e3c4ec527c10ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:ab8806f6db077f1bb2e9d63ec99223f7a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00380.html#ab8806f6db077f1bb2e9d63ec99223f7a">is_thissystem</a></td></tr>
57 <tr class="separator:ab8806f6db077f1bb2e9d63ec99223f7a"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:a2ea5bd36b7f06efdb65b98b32af16c68"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00380.html#a2ea5bd36b7f06efdb65b98b32af16c68">private_data</a></td></tr>
59 <tr class="separator:a2ea5bd36b7f06efdb65b98b32af16c68"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:a36c4fa86350525b46340c67b802c69c7"><td class="memItemLeft" align="right" valign="top">void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00380.html#a36c4fa86350525b46340c67b802c69c7">disable</a> )(struct <a class="el" href="a00380.html">hwloc_backend</a> *backend)</td></tr>
61 <tr class="separator:a36c4fa86350525b46340c67b802c69c7"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:accff2cd8404be43c3b44cec05e6f609b"><td class="memItemLeft" align="right" valign="top">int(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00380.html#accff2cd8404be43c3b44cec05e6f609b">discover</a> )(struct <a class="el" href="a00380.html">hwloc_backend</a> *backend, struct <a class="el" href="a00376.html">hwloc_disc_status</a> *status)</td></tr>
63 <tr class="separator:accff2cd8404be43c3b44cec05e6f609b"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 <tr class="memitem:aaac253491264c20930f44817270bc502"><td class="memItemLeft" align="right" valign="top">int(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00380.html#aaac253491264c20930f44817270bc502">get_pci_busid_cpuset</a> )(struct <a class="el" href="a00380.html">hwloc_backend</a> *backend, struct hwloc_pcidev_attr_s *busid, <a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> cpuset)</td></tr>
65 <tr class="separator:aaac253491264c20930f44817270bc502"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 </table>
67 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
68 <div class="textblock"><p>Discovery backend structure. </p>
69 <p>A backend is the instantiation of a discovery component. When a component gets enabled for a topology, its instantiate() callback creates a backend.</p>
70 <p><a class="el" href="a00234.html#gadb068565ab6043cbe4d16bfcce067a61" title="Allocate a backend structure, set good default values, initialize backend-&gt;component and topology,...">hwloc_backend_alloc()</a> initializes all fields to default values that the component may change (except "component" and "next") before enabling the backend with <a class="el" href="a00234.html#ga4715779d7191833e9b1a7490989a7497" title="Enable a previously allocated and setup backend.">hwloc_backend_enable()</a>.</p>
71 <p>Most backends assume that the topology is_thissystem flag is set because they talk to the underlying operating system. However they may still be used in topologies without the is_thissystem flag for debugging reasons. In practice, they are usually auto-disabled in such cases (excluded by xml or synthetic backends, or by environment variables when changing the Linux fsroot or the x86 cpuid path). </p>
72 </div><h2 class="groupheader">Field Documentation</h2>
73 <a id="a36c4fa86350525b46340c67b802c69c7"></a>
74 <h2 class="memtitle"><span class="permalink"><a href="#a36c4fa86350525b46340c67b802c69c7">&#9670;&nbsp;</a></span>disable</h2>
75
76 <div class="memitem">
77 <div class="memproto">
78 <table class="memname">
79 <tr>
80 <td class="memname">void(* hwloc_backend::disable) (struct <a class="el" href="a00380.html">hwloc_backend</a> *backend)</td>
81 </tr>
82 </table>
83 </div><div class="memdoc">
84
85 <p>Callback for freeing the private_data. May be NULL. </p>
86
87 </div>
88 </div>
89 <a id="accff2cd8404be43c3b44cec05e6f609b"></a>
90 <h2 class="memtitle"><span class="permalink"><a href="#accff2cd8404be43c3b44cec05e6f609b">&#9670;&nbsp;</a></span>discover</h2>
91
92 <div class="memitem">
93 <div class="memproto">
94 <table class="memname">
95 <tr>
96 <td class="memname">int(* hwloc_backend::discover) (struct <a class="el" href="a00380.html">hwloc_backend</a> *backend, struct <a class="el" href="a00376.html">hwloc_disc_status</a> *status)</td>
97 </tr>
98 </table>
99 </div><div class="memdoc">
100
101 <p>Main discovery callback. returns -1 on error, either because it couldn't add its objects ot the existing topology, or because of an actual discovery/gathering failure. May be NULL. </p>
102
103 </div>
104 </div>
105 <a id="aaa8eafe495aadd81c2e3c4ec527c10ba"></a>
106 <h2 class="memtitle"><span class="permalink"><a href="#aaa8eafe495aadd81c2e3c4ec527c10ba">&#9670;&nbsp;</a></span>flags</h2>
107
108 <div class="memitem">
109 <div class="memproto">
110 <table class="memname">
111 <tr>
112 <td class="memname">unsigned long hwloc_backend::flags</td>
113 </tr>
114 </table>
115 </div><div class="memdoc">
116
117 <p>Backend flags, currently always 0. </p>
118
119 </div>
120 </div>
121 <a id="aaac253491264c20930f44817270bc502"></a>
122 <h2 class="memtitle"><span class="permalink"><a href="#aaac253491264c20930f44817270bc502">&#9670;&nbsp;</a></span>get_pci_busid_cpuset</h2>
123
124 <div class="memitem">
125 <div class="memproto">
126 <table class="memname">
127 <tr>
128 <td class="memname">int(* hwloc_backend::get_pci_busid_cpuset) (struct <a class="el" href="a00380.html">hwloc_backend</a> *backend, struct hwloc_pcidev_attr_s *busid, <a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> cpuset)</td>
129 </tr>
130 </table>
131 </div><div class="memdoc">
132
133 <p>Callback to retrieve the locality of a PCI object. Called by the PCI core when attaching PCI hierarchy to CPU objects. May be NULL. </p>
134
135 </div>
136 </div>
137 <a id="ab8806f6db077f1bb2e9d63ec99223f7a"></a>
138 <h2 class="memtitle"><span class="permalink"><a href="#ab8806f6db077f1bb2e9d63ec99223f7a">&#9670;&nbsp;</a></span>is_thissystem</h2>
139
140 <div class="memitem">
141 <div class="memproto">
142 <table class="memname">
143 <tr>
144 <td class="memname">int hwloc_backend::is_thissystem</td>
145 </tr>
146 </table>
147 </div><div class="memdoc">
148
149 <p>Backend-specific 'is_thissystem' property. Set to 0 if the backend disables the thissystem flag for this topology (e.g. loading from xml or synthetic string, or using a different fsroot on Linux, or a x86 CPUID dump). Set to -1 if the backend doesn't care (default). </p>
150
151 </div>
152 </div>
153 <a id="aeca769840a6ff03e96462a9533adbccd"></a>
154 <h2 class="memtitle"><span class="permalink"><a href="#aeca769840a6ff03e96462a9533adbccd">&#9670;&nbsp;</a></span>phases</h2>
155
156 <div class="memitem">
157 <div class="memproto">
158 <table class="memname">
159 <tr>
160 <td class="memname">unsigned hwloc_backend::phases</td>
161 </tr>
162 </table>
163 </div><div class="memdoc">
164
165 <p>Discovery phases performed by this component, possibly without some of them if excluded by other components. OR'ed set of <a class="el" href="a00234.html#ga600bba1a62022d5f516800649b1edb61" title="Discovery phase.">hwloc_disc_phase_t</a>. </p>
166
167 </div>
168 </div>
169 <a id="a2ea5bd36b7f06efdb65b98b32af16c68"></a>
170 <h2 class="memtitle"><span class="permalink"><a href="#a2ea5bd36b7f06efdb65b98b32af16c68">&#9670;&nbsp;</a></span>private_data</h2>
171
172 <div class="memitem">
173 <div class="memproto">
174 <table class="memname">
175 <tr>
176 <td class="memname">void* hwloc_backend::private_data</td>
177 </tr>
178 </table>
179 </div><div class="memdoc">
180
181 <p>Backend private data, or NULL if none. </p>
182
183 </div>
184 </div>
185 <hr/>The documentation for this struct was generated from the following file:<ul>
186 <li><a class="el" href="a00182_source.html">plugins.h</a></li>
187 </ul>
188 </div><!-- contents -->
189 <!-- start footer part -->
190 <hr class="footer"/><address class="footer"><small>
191 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
192 </small></address>
193 </body>
194 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_disc_status Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#pub-attribs">Data Fields</a> </div>
43 <div class="headertitle">
44 <div class="title">hwloc_disc_status Struct Reference<div class="ingroups"><a class="el" href="a00240.html">Components and Plugins: Discovery backends</a></div></div> </div>
45 </div><!--header-->
46 <div class="contents">
47
48 <p><code>#include &lt;<a class="el" href="a00185_source.html">plugins.h</a>&gt;</code></p>
49 <table class="memberdecls">
50 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
51 Data Fields</h2></td></tr>
52 <tr class="memitem:abaf7c8c082d43e133171f0723dbf824b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00240.html#ga600bba1a62022d5f516800649b1edb61">hwloc_disc_phase_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00382.html#abaf7c8c082d43e133171f0723dbf824b">phase</a></td></tr>
53 <tr class="separator:abaf7c8c082d43e133171f0723dbf824b"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:a0f95fa42d46a6e7cf8dee8af12afee3a"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00382.html#a0f95fa42d46a6e7cf8dee8af12afee3a">excluded_phases</a></td></tr>
55 <tr class="separator:a0f95fa42d46a6e7cf8dee8af12afee3a"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:ad8b123cecb945a9182eb824ccf8ef9d7"><td class="memItemLeft" align="right" valign="top">unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00382.html#ad8b123cecb945a9182eb824ccf8ef9d7">flags</a></td></tr>
57 <tr class="separator:ad8b123cecb945a9182eb824ccf8ef9d7"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 </table>
59 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
60 <div class="textblock"><p>Discovery status structure. </p>
61 <p>Used by the core and backends to inform about what has been/is being done during the discovery process. </p>
62 </div><h2 class="groupheader">Field Documentation</h2>
63 <a id="a0f95fa42d46a6e7cf8dee8af12afee3a"></a>
64 <h2 class="memtitle"><span class="permalink"><a href="#a0f95fa42d46a6e7cf8dee8af12afee3a">&#9670;&nbsp;</a></span>excluded_phases</h2>
65
66 <div class="memitem">
67 <div class="memproto">
68 <table class="memname">
69 <tr>
70 <td class="memname">unsigned hwloc_disc_status::excluded_phases</td>
71 </tr>
72 </table>
73 </div><div class="memdoc">
74
75 <p>Dynamically excluded phases. If a component decides during discovery that some phases are no longer needed. </p>
76
77 </div>
78 </div>
79 <a id="ad8b123cecb945a9182eb824ccf8ef9d7"></a>
80 <h2 class="memtitle"><span class="permalink"><a href="#ad8b123cecb945a9182eb824ccf8ef9d7">&#9670;&nbsp;</a></span>flags</h2>
81
82 <div class="memitem">
83 <div class="memproto">
84 <table class="memname">
85 <tr>
86 <td class="memname">unsigned long hwloc_disc_status::flags</td>
87 </tr>
88 </table>
89 </div><div class="memdoc">
90
91 <p>OR'ed set of hwloc_disc_status_flag_e. </p>
92
93 </div>
94 </div>
95 <a id="abaf7c8c082d43e133171f0723dbf824b"></a>
96 <h2 class="memtitle"><span class="permalink"><a href="#abaf7c8c082d43e133171f0723dbf824b">&#9670;&nbsp;</a></span>phase</h2>
97
98 <div class="memitem">
99 <div class="memproto">
100 <table class="memname">
101 <tr>
102 <td class="memname"><a class="el" href="a00240.html#ga600bba1a62022d5f516800649b1edb61">hwloc_disc_phase_t</a> hwloc_disc_status::phase</td>
103 </tr>
104 </table>
105 </div><div class="memdoc">
106
107 <p>The current discovery phase that is performed. Must match one of the phases in the component phases field. </p>
108
109 </div>
110 </div>
111 <hr/>The documentation for this struct was generated from the following file:<ul>
112 <li><a class="el" href="a00185_source.html">plugins.h</a></li>
113 </ul>
114 </div><!-- contents -->
115 <!-- start footer part -->
116 <hr class="footer"/><address class="footer"><small>
117 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
118 </small></address>
119 </body>
120 </html>
+0
-183
doc/doxygen-doc/html/a00384.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): hwloc_component Struct Reference</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="header">
41 <div class="summary">
42 <a href="#pub-attribs">Data Fields</a> </div>
43 <div class="headertitle">
44 <div class="title">hwloc_component Struct Reference<div class="ingroups"><a class="el" href="a00235.html">Components and Plugins: Generic components</a></div></div> </div>
45 </div><!--header-->
46 <div class="contents">
47
48 <p><code>#include &lt;<a class="el" href="a00182_source.html">plugins.h</a>&gt;</code></p>
49 <table class="memberdecls">
50 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
51 Data Fields</h2></td></tr>
52 <tr class="memitem:a3250bd6fc9713946991d805e48091b2e"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00384.html#a3250bd6fc9713946991d805e48091b2e">abi</a></td></tr>
53 <tr class="separator:a3250bd6fc9713946991d805e48091b2e"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:aea613546886d9b8221cadba920fe3ebc"><td class="memItemLeft" align="right" valign="top">int(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00384.html#aea613546886d9b8221cadba920fe3ebc">init</a> )(unsigned long <a class="el" href="a00384.html#ab8043c5b4cc0e81aabba586ccb194335">flags</a>)</td></tr>
55 <tr class="separator:aea613546886d9b8221cadba920fe3ebc"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:a4612015451a1c706e8ba19114cb8baae"><td class="memItemLeft" align="right" valign="top">void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00384.html#a4612015451a1c706e8ba19114cb8baae">finalize</a> )(unsigned long <a class="el" href="a00384.html#ab8043c5b4cc0e81aabba586ccb194335">flags</a>)</td></tr>
57 <tr class="separator:a4612015451a1c706e8ba19114cb8baae"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:a789208ada7e17492cfd3a5a88a6bb0ee"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00235.html#ga31a5a455f4e666b936f0a9e8fb9a0f47">hwloc_component_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00384.html#a789208ada7e17492cfd3a5a88a6bb0ee">type</a></td></tr>
59 <tr class="separator:a789208ada7e17492cfd3a5a88a6bb0ee"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:ab8043c5b4cc0e81aabba586ccb194335"><td class="memItemLeft" align="right" valign="top">unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00384.html#ab8043c5b4cc0e81aabba586ccb194335">flags</a></td></tr>
61 <tr class="separator:ab8043c5b4cc0e81aabba586ccb194335"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:a4b8cffd1d943c29fdc102b841b8598d4"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00384.html#a4b8cffd1d943c29fdc102b841b8598d4">data</a></td></tr>
63 <tr class="separator:a4b8cffd1d943c29fdc102b841b8598d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 </table>
65 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
66 <div class="textblock"><p>Generic component structure. </p>
67 <p>Generic components structure, either statically listed by configure in static-components.h or dynamically loaded as a plugin. </p>
68 </div><h2 class="groupheader">Field Documentation</h2>
69 <a id="a3250bd6fc9713946991d805e48091b2e"></a>
70 <h2 class="memtitle"><span class="permalink"><a href="#a3250bd6fc9713946991d805e48091b2e">&#9670;&nbsp;</a></span>abi</h2>
71
72 <div class="memitem">
73 <div class="memproto">
74 <table class="memname">
75 <tr>
76 <td class="memname">unsigned hwloc_component::abi</td>
77 </tr>
78 </table>
79 </div><div class="memdoc">
80
81 <p>Component ABI version, set to <a class="el" href="a00188.html#gaac5bc1f46f55e10ef0141a68ce70e21f" title="Current component and plugin ABI version (see hwloc/plugins.h)">HWLOC_COMPONENT_ABI</a>. </p>
82
83 </div>
84 </div>
85 <a id="a4b8cffd1d943c29fdc102b841b8598d4"></a>
86 <h2 class="memtitle"><span class="permalink"><a href="#a4b8cffd1d943c29fdc102b841b8598d4">&#9670;&nbsp;</a></span>data</h2>
87
88 <div class="memitem">
89 <div class="memproto">
90 <table class="memname">
91 <tr>
92 <td class="memname">void* hwloc_component::data</td>
93 </tr>
94 </table>
95 </div><div class="memdoc">
96
97 <p>Component data, pointing to a struct <a class="el" href="a00372.html" title="Discovery component structure.">hwloc_disc_component</a> or struct hwloc_xml_component. </p>
98
99 </div>
100 </div>
101 <a id="a4612015451a1c706e8ba19114cb8baae"></a>
102 <h2 class="memtitle"><span class="permalink"><a href="#a4612015451a1c706e8ba19114cb8baae">&#9670;&nbsp;</a></span>finalize</h2>
103
104 <div class="memitem">
105 <div class="memproto">
106 <table class="memname">
107 <tr>
108 <td class="memname">void(* hwloc_component::finalize) (unsigned long <a class="el" href="a00384.html#ab8043c5b4cc0e81aabba586ccb194335">flags</a>)</td>
109 </tr>
110 </table>
111 </div><div class="memdoc">
112
113 <p>Process-wide component termination callback. </p>
114 <p>This optional callback is called after unregistering the component from the hwloc core (before unloading the plugin).</p>
115 <p><code>flags</code> is always 0 for now.</p>
116 <dl class="section note"><dt>Note</dt><dd>If the component uses ltdl for loading its own plugins, it should load/unload them only in <a class="el" href="a00384.html#aea613546886d9b8221cadba920fe3ebc" title="Process-wide component initialization callback.">init()</a> and <a class="el" href="a00384.html#a4612015451a1c706e8ba19114cb8baae" title="Process-wide component termination callback.">finalize()</a>, to avoid race conditions with hwloc's use of ltdl. </dd></dl>
117
118 </div>
119 </div>
120 <a id="ab8043c5b4cc0e81aabba586ccb194335"></a>
121 <h2 class="memtitle"><span class="permalink"><a href="#ab8043c5b4cc0e81aabba586ccb194335">&#9670;&nbsp;</a></span>flags</h2>
122
123 <div class="memitem">
124 <div class="memproto">
125 <table class="memname">
126 <tr>
127 <td class="memname">unsigned long hwloc_component::flags</td>
128 </tr>
129 </table>
130 </div><div class="memdoc">
131
132 <p>Component flags, unused for now. </p>
133
134 </div>
135 </div>
136 <a id="aea613546886d9b8221cadba920fe3ebc"></a>
137 <h2 class="memtitle"><span class="permalink"><a href="#aea613546886d9b8221cadba920fe3ebc">&#9670;&nbsp;</a></span>init</h2>
138
139 <div class="memitem">
140 <div class="memproto">
141 <table class="memname">
142 <tr>
143 <td class="memname">int(* hwloc_component::init) (unsigned long <a class="el" href="a00384.html#ab8043c5b4cc0e81aabba586ccb194335">flags</a>)</td>
144 </tr>
145 </table>
146 </div><div class="memdoc">
147
148 <p>Process-wide component initialization callback. </p>
149 <p>This optional callback is called when the component is registered to the hwloc core (after loading the plugin).</p>
150 <p>When the component is built as a plugin, this callback should call hwloc_check_plugin_namespace() and return an negative error code on error.</p>
151 <p><code>flags</code> is always 0 for now.</p>
152 <dl class="section return"><dt>Returns</dt><dd>0 on success, or a negative code on error.</dd></dl>
153 <dl class="section note"><dt>Note</dt><dd>If the component uses ltdl for loading its own plugins, it should load/unload them only in <a class="el" href="a00384.html#aea613546886d9b8221cadba920fe3ebc" title="Process-wide component initialization callback.">init()</a> and <a class="el" href="a00384.html#a4612015451a1c706e8ba19114cb8baae" title="Process-wide component termination callback.">finalize()</a>, to avoid race conditions with hwloc's use of ltdl. </dd></dl>
154
155 </div>
156 </div>
157 <a id="a789208ada7e17492cfd3a5a88a6bb0ee"></a>
158 <h2 class="memtitle"><span class="permalink"><a href="#a789208ada7e17492cfd3a5a88a6bb0ee">&#9670;&nbsp;</a></span>type</h2>
159
160 <div class="memitem">
161 <div class="memproto">
162 <table class="memname">
163 <tr>
164 <td class="memname"><a class="el" href="a00235.html#ga31a5a455f4e666b936f0a9e8fb9a0f47">hwloc_component_type_t</a> hwloc_component::type</td>
165 </tr>
166 </table>
167 </div><div class="memdoc">
168
169 <p>Component type. </p>
170
171 </div>
172 </div>
173 <hr/>The documentation for this struct was generated from the following file:<ul>
174 <li><a class="el" href="a00182_source.html">plugins.h</a></li>
175 </ul>
176 </div><!-- contents -->
177 <!-- start footer part -->
178 <hr class="footer"/><address class="footer"><small>
179 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
180 </small></address>
181 </body>
182 </html>
+0
-565
doc/doxygen-doc/html/a00385.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Hardware Locality (hwloc) Introduction</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="PageDoc"><div class="header">
41 <div class="headertitle">
42 <div class="title">Hardware Locality (hwloc) Introduction </div> </div>
43 </div><!--header-->
44 <div class="contents">
45 <div class="textblock"><h1 class="sub">Portable abstraction of hierarchical architectures for high-performance computing</h1>
46 <hr />
47 <p>
48 <div class="section">
49 See also <a class="el" href="a00385.html#further_reading">Further Reading</a>
50 or the Related pages tab above
51 for links to more sections about hwloc concepts.
52 </div>
53 </p>
54 <p>
55 <div class="section" id="hwloc_summary">
56 </p>
57 <h1><a class="anchor" id="hwloc_summary"></a>
58 hwloc Summary</h1>
59 <p>hwloc provides command line tools and a C API to obtain the hierarchical map of key computing elements within a node, such as: NUMA memory nodes, shared caches, processor packages, dies and cores, processing units (logical processors or "threads") and even I/O devices. hwloc also gathers various attributes such as cache and memory information, and is portable across a variety of different operating systems and platforms.</p>
60 <p>hwloc primarily aims at helping high-performance computing (HPC) applications, but is also applicable to any project seeking to exploit code and/or data locality on modern computing platforms.</p>
61 <p>hwloc supports the following operating systems:</p>
62 <ul>
63 <li>
64 Linux (including old kernels not having sysfs topology information, with knowledge of cpusets, ScaleMP vSMP support, etc.) on all supported hardware, including Intel Xeon Phi and NumaScale NumaConnect. </li>
65 <li>
66 Solaris (with support for processor sets and logical domains) </li>
67 <li>
68 AIX </li>
69 <li>
70 Darwin / OS X </li>
71 <li>
72 FreeBSD and its variants (such as kFreeBSD/GNU) </li>
73 <li>
74 NetBSD </li>
75 <li>
76 HP-UX </li>
77 <li>
78 Microsoft Windows </li>
79 <li>
80 IBM BlueGene/Q Compute Node Kernel (CNK) </li>
81 </ul>
82 <p>Since it uses standard Operating System information, hwloc's support is mostly independant from the processor type (x86, powerpc, ...) and just relies on the Operating System support. The main exception is BSD operating systems (NetBSD, FreeBSD, etc.) because they do not provide support topology information, hence hwloc uses an x86-only CPUID-based backend (which can be used for other OSes too, see the <a class="el" href="a00398.html">Components and plugins</a> section).</p>
83 <p>To check whether hwloc works on a particular machine, just try to build it and run <code>lstopo</code> or <code>lstopo-no-graphics</code>. If some things do not look right (e.g. bogus or missing cache information), see <a class="el" href="index.html#bugs">Questions and Bugs</a>.</p>
84 <p>hwloc only reports the number of processors on unsupported operating systems; no topology information is available.</p>
85 <p>For development and debugging purposes, hwloc also offers the ability to work on "fake" topologies:</p>
86 <ul>
87 <li>
88 Symmetrical tree of resources generated from a list of level arities, see <a class="el" href="a00395.html">Synthetic topologies</a>. </li>
89 <li>
90 Remote machine simulation through the gathering of topology as XML files, see <a class="el" href="a00394.html">Importing and exporting topologies from/to XML files</a>. </li>
91 </ul>
92 <p>hwloc can display the topology in a human-readable format, either in graphical mode (X11), or by exporting in one of several different formats, including: plain text, LaTeX tikzpicture, PDF, PNG, and FIG (see <a class="el" href="a00385.html#cli_examples">Command-line Examples</a> below). Note that some of the export formats require additional support libraries.</p>
93 <p>hwloc offers a programming interface for manipulating topologies and objects. It also brings a powerful CPU bitmap API that is used to describe topology objects location on physical/logical processors. See the <a class="el" href="a00385.html#interface">Programming Interface</a> below. It may also be used to binding applications onto certain cores or memory nodes. Several utility programs are also provided to ease command-line manipulation of topology objects, binding of processes, and so on.</p>
94 <p>Perl bindings are available from Bernd Kallies on <a href="http://search.cpan.org/~bka/Sys-Hwloc-0.10/">CPAN</a>.</p>
95 <p>Python bindings are available from Guy Streeter: </p><ul>
96 <li>
97 <a href="http://people.redhat.com/streeter/">Fedora RPM and tarball</a>. </li>
98 <li>
99 <a href="git://git.fedorahosted.org/python-hwloc.git">git tree</a> (<a href="http://git.fedorahosted.org/git/python-hwloc.git">html</a>). </li>
100 </ul>
101 <p>
102 </div><div class="section" id="hwloc_installation">
103 </p>
104 <h1><a class="anchor" id="hwloc_installation"></a>
105 hwloc Installation</h1>
106 <p>The generic installation procedure for both hwloc and netloc is described in <a class="el" href="index.html#common_installation">Installation</a>.</p>
107 <p>The hwloc command-line tool "lstopo" produces human-readable topology maps, as mentioned above. It can also export maps to the "fig" file format. Support for PDF, Postscript, and PNG exporting is provided if the "Cairo" development package (usually <code>cairo-devel</code> or <code>libcairo2-dev</code>) can be found in "lstopo" when hwloc is configured and build.</p>
108 <p>The hwloc core may also benefit from the following development packages: </p><ul>
109 <li>
110 <p class="startli">libpciaccess for full I/O device discovery (<code>libpciaccess-devel</code> or <code>libpciaccess-dev</code> package). On Linux, PCI discovery may still be performed (without vendor/device names) even if libpciaccess cannot be used. </p>
111 <p class="endli"></p>
112 </li>
113 <li>
114 AMD or NVIDIA OpenCL implementations for OpenCL device discovery. </li>
115 <li>
116 the NVIDIA CUDA Toolkit for CUDA device discovery. </li>
117 <li>
118 the NVIDIA Management Library (NVML) for NVML device discovery. It is included in CUDA since version 8.0. Older NVML releases were available within the NVIDIA GPU Deployment Kit from <a href="https://developer.nvidia.com/gpu-deployment-kit">https://developer.nvidia.com/gpu-deployment-kit</a> . </li>
119 <li>
120 the NV-CONTROL X extension library (NVCtrl) for NVIDIA display discovery. The relevant development package is usually <code>libXNVCtrl-devel</code> or <code>libxnvctrl-dev</code>. It is also available within nvidia-settings from <a href="ftp://download.nvidia.com/XFree86/nvidia-settings/">ftp://download.nvidia.com/XFree86/nvidia-settings/</a> and <a href="https://github.com/NVIDIA/nvidia-settings/">https://github.com/NVIDIA/nvidia-settings/</a> . </li>
121 <li>
122 the AMD ROCm SMI library for RSMI device discovery. The relevant development package is usually <code>rocm-smi-lib64</code> or <code>librocm-smi-dev</code>. </li>
123 <li>
124 libxml2 for full XML import/export support (otherwise, the internal minimalistic parser will only be able to import XML files that were exported by the same hwloc release). See <a class="el" href="a00394.html">Importing and exporting topologies from/to XML files</a> for details. The relevant development package is usually <code>libxml2-devel</code> or <code>libxml2-dev</code>. </li>
125 <li>
126 libudev on Linux for easier discovery of OS device information (otherwise hwloc will try to manually parse udev raw files). The relevant development package is usually <code>libudev-devel</code> or <code>libudev-dev</code>. </li>
127 <li>
128 libtool's ltdl library for dynamic plugin loading if the native dlopen cannot be used. The relevant development package is usually <code>libtool-ltdl-devel</code> or <code>libltdl-dev</code>. </li>
129 </ul>
130 <p>PCI and XML support may be statically built inside the main hwloc library, or as separate dynamically-loaded plugins (see the <a class="el" href="a00398.html">Components and plugins</a> section).</p>
131 <p>Note that because of the possibility of GPL taint, the <code>pciutils</code> library <code>libpci</code> will not be used (remember that hwloc is BSD-licensed).</p>
132 <p>
133 </div><div class="section" id="cli_examples">
134 </p>
135 <h1><a class="anchor" id="cli_examples"></a>
136 Command-line Examples</h1>
137 <p>On a 4-package 2-core machine with hyper-threading, the <code>lstopo</code> tool may show the following graphical output:</p>
138 <div class="image">
139 <img src="dudley.png" alt=""/>
140 </div>
141 <p>Here's the equivalent output in textual form:</p>
142 <pre class="fragment">Machine
143 NUMANode L#0 (P#0)
144 Package L#0 + L3 L#0 (4096KB)
145 L2 L#0 (1024KB) + L1 L#0 (16KB) + Core L#0
146 PU L#0 (P#0)
147 PU L#1 (P#8)
148 L2 L#1 (1024KB) + L1 L#1 (16KB) + Core L#1
149 PU L#2 (P#4)
150 PU L#3 (P#12)
151 Package L#1 + L3 L#1 (4096KB)
152 L2 L#2 (1024KB) + L1 L#2 (16KB) + Core L#2
153 PU L#4 (P#1)
154 PU L#5 (P#9)
155 L2 L#3 (1024KB) + L1 L#3 (16KB) + Core L#3
156 PU L#6 (P#5)
157 PU L#7 (P#13)
158 Package L#2 + L3 L#2 (4096KB)
159 L2 L#4 (1024KB) + L1 L#4 (16KB) + Core L#4
160 PU L#8 (P#2)
161 PU L#9 (P#10)
162 L2 L#5 (1024KB) + L1 L#5 (16KB) + Core L#5
163 PU L#10 (P#6)
164 PU L#11 (P#14)
165 Package L#3 + L3 L#3 (4096KB)
166 L2 L#6 (1024KB) + L1 L#6 (16KB) + Core L#6
167 PU L#12 (P#3)
168 PU L#13 (P#11)
169 L2 L#7 (1024KB) + L1 L#7 (16KB) + Core L#7
170 PU L#14 (P#7)
171 PU L#15 (P#15)
172 </pre><p>Note that there is also an equivalent output in XML that is meant for exporting/importing topologies but it is hardly readable to human-beings (see <a class="el" href="a00394.html">Importing and exporting topologies from/to XML files</a> for details).</p>
173 <p>On a 4-package 2-core Opteron NUMA machine (with two core cores disallowed by the administrator), the <code>lstopo</code> tool may show the following graphical output (with <code>--disallowed</code> for displaying disallowed objects):</p>
174 <div class="image">
175 <img src="hagrid.png" alt=""/>
176 </div>
177 <p>Here's the equivalent output in textual form:</p>
178 <pre class="fragment">Machine (32GB total)
179 Package L#0
180 NUMANode L#0 (P#0 8190MB)
181 L2 L#0 (1024KB) + L1 L#0 (64KB) + Core L#0 + PU L#0 (P#0)
182 L2 L#1 (1024KB) + L1 L#1 (64KB) + Core L#1 + PU L#1 (P#1)
183 Package L#1
184 NUMANode L#1 (P#1 8192MB)
185 L2 L#2 (1024KB) + L1 L#2 (64KB) + Core L#2 + PU L#2 (P#2)
186 L2 L#3 (1024KB) + L1 L#3 (64KB) + Core L#3 + PU L#3 (P#3)
187 Package L#2
188 NUMANode L#2 (P#2 8192MB)
189 L2 L#4 (1024KB) + L1 L#4 (64KB) + Core L#4 + PU L#4 (P#4)
190 L2 L#5 (1024KB) + L1 L#5 (64KB) + Core L#5 + PU L#5 (P#5)
191 Package L#3
192 NUMANode L#3 (P#3 8192MB)
193 L2 L#6 (1024KB) + L1 L#6 (64KB) + Core L#6 + PU L#6 (P#6)
194 L2 L#7 (1024KB) + L1 L#7 (64KB) + Core L#7 + PU L#7 (P#7)
195 </pre><p>On a 2-package quad-core Xeon (pre-Nehalem, with 2 dual-core dies into each package):</p>
196 <div class="image">
197 <img src="emmett.png" alt=""/>
198 </div>
199 <p>Here's the same output in textual form:</p>
200 <pre class="fragment">Machine (total 16GB)
201 NUMANode L#0 (P#0 16GB)
202 Package L#0
203 L2 L#0 (4096KB)
204 L1 L#0 (32KB) + Core L#0 + PU L#0 (P#0)
205 L1 L#1 (32KB) + Core L#1 + PU L#1 (P#4)
206 L2 L#1 (4096KB)
207 L1 L#2 (32KB) + Core L#2 + PU L#2 (P#2)
208 L1 L#3 (32KB) + Core L#3 + PU L#3 (P#6)
209 Package L#1
210 L2 L#2 (4096KB)
211 L1 L#4 (32KB) + Core L#4 + PU L#4 (P#1)
212 L1 L#5 (32KB) + Core L#5 + PU L#5 (P#5)
213 L2 L#3 (4096KB)
214 L1 L#6 (32KB) + Core L#6 + PU L#6 (P#3)
215 L1 L#7 (32KB) + Core L#7 + PU L#7 (P#7)
216 </pre><p>
217 </div><div class="section" id="interface">
218 </p>
219 <h1><a class="anchor" id="interface"></a>
220 Programming Interface</h1>
221 <p>The basic interface is available in <a class="el" href="a00125_source.html">hwloc.h</a>. Some higher-level functions are available in <a class="el" href="a00128_source.html">hwloc/helper.h</a> to reduce the need to manually manipulate objects and follow links between them. Documentation for all these is provided later in this document. Developers may also want to look at hwloc/inlines.h which contains the actual inline code of some <a class="el" href="a00125_source.html">hwloc.h</a> routines, and at this document, which provides good higher-level topology traversal examples.</p>
222 <p>To precisely define the vocabulary used by hwloc, a <a class="el" href="a00386.html">Terms and Definitions</a> section is available and should probably be read first.</p>
223 <p>Each hwloc object contains a cpuset describing the list of processing units that it contains. These bitmaps may be used for <a class="el" href="a00196.html">CPU binding</a> and <a class="el" href="a00197.html">Memory binding</a>. hwloc offers an extensive bitmap manipulation interface in <a class="el" href="a00131_source.html">hwloc/bitmap.h</a>.</p>
224 <p>Moreover, hwloc also comes with additional helpers for interoperability with several commonly used environments. See the <a class="el" href="a00396.html">Interoperability With Other Software</a> section for details.</p>
225 <p>The complete API documentation is available in a full set of HTML pages, man pages, and self-contained PDF files (formatted for both both US letter and A4 formats) in the source tarball in doc/doxygen-doc/.</p>
226 <p><b>NOTE:</b> If you are building the documentation from a Git clone, you will need to have Doxygen and pdflatex installed &ndash; the documentation will be built during the normal "make" process. The documentation is installed during "make install" to $prefix/share/doc/hwloc/ and your systems default man page tree (under $prefix, of course).</p>
227 <h2><a class="anchor" id="portability"></a>
228 Portability</h2>
229 <p>Operating System have varying support for CPU and memory binding, e.g. while some Operating Systems provide interfaces for all kinds of CPU and memory bindings, some others provide only interfaces for a limited number of kinds of CPU and memory binding, and some do not provide any binding interface at all. Hwloc's binding functions would then simply return the ENOSYS error (Function not implemented), meaning that the underlying Operating System does not provide any interface for them. <a class="el" href="a00196.html">CPU binding</a> and <a class="el" href="a00197.html">Memory binding</a> provide more information on which hwloc binding functions should be preferred because interfaces for them are usually available on the supported Operating Systems.</p>
230 <p>Similarly, the ability of reporting topology information varies from one platform to another. As shown in <a class="el" href="a00385.html#cli_examples">Command-line Examples</a>, hwloc can obtain information on a wide variety of hardware topologies. However, some platforms and/or operating system versions will only report a subset of this information. For example, on an PPC64-based system with 8 cores (each with 2 hardware threads) running a default 2.6.18-based kernel from RHEL 5.4, hwloc is only able to glean information about NUMA nodes and processor units (PUs). No information about caches, packages, or cores is available.</p>
231 <p>Here's the graphical output from lstopo on this platform when Simultaneous Multi-Threading (SMT) is enabled:</p>
232 <div class="image">
233 <img src="ppc64-with-smt.png" alt=""/>
234 </div>
235 <p>And here's the graphical output from lstopo on this platform when SMT is disabled:</p>
236 <div class="image">
237 <img src="ppc64-without-smt.png" alt=""/>
238 </div>
239 <p>Notice that hwloc only sees half the PUs when SMT is disabled. PU L#6, for example, seems to change location from NUMA node #0 to #1. In reality, no PUs "moved" &ndash; they were simply re-numbered when hwloc only saw half as many (see also Logical index in <a class="el" href="a00386.html#termsanddefs_indexes">Indexes and Sets</a>). Hence, PU L#6 in the SMT-disabled picture probably corresponds to PU L#12 in the SMT-enabled picture.</p>
240 <p>This same "PUs have disappeared" effect can be seen on other platforms &ndash; even platforms / OSs that provide much more information than the above PPC64 system. This is an unfortunate side-effect of how operating systems report information to hwloc.</p>
241 <p>Note that upgrading the Linux kernel on the same PPC64 system mentioned above to 2.6.34, hwloc is able to discover all the topology information. The following picture shows the entire topology layout when SMT is enabled:</p>
242 <div class="image">
243 <img src="ppc64-full-with-smt.png" alt=""/>
244 </div>
245 <p>Developers using the hwloc API or XML output for portable applications should therefore be extremely careful to not make any assumptions about the structure of data that is returned. For example, per the above reported PPC topology, it is not safe to assume that PUs will always be descendants of cores.</p>
246 <p>Additionally, future hardware may insert new topology elements that are not available in this version of hwloc. Long-lived applications that are meant to span multiple different hardware platforms should also be careful about making structure assumptions. For example, a new element may someday exist between a core and a PU.</p>
247 <h2><a class="anchor" id="interface_example"></a>
248 API Example</h2>
249 <p>The following small C example (available in the source tree as ``doc/examples/hwloc-hello.c'') prints the topology of the machine and performs some thread and memory binding. More examples are available in the doc/examples/ directory of the source tree.</p>
250 <div class="fragment"><div class="line"><span class="comment">/* Example hwloc API program.</span></div>
251 <div class="line"><span class="comment"> *</span></div>
252 <div class="line"><span class="comment"> * See other examples under doc/examples/ in the source tree</span></div>
253 <div class="line"><span class="comment"> * for more details.</span></div>
254 <div class="line"><span class="comment"> *</span></div>
255 <div class="line"><span class="comment"> * Copyright © 2009-2016 Inria. All rights reserved.</span></div>
256 <div class="line"><span class="comment"> * Copyright © 2009-2011 Université Bordeaux</span></div>
257 <div class="line"><span class="comment"> * Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.</span></div>
258 <div class="line"><span class="comment"> * See COPYING in top-level directory.</span></div>
259 <div class="line"><span class="comment"> *</span></div>
260 <div class="line"><span class="comment"> * hwloc-hello.c</span></div>
261 <div class="line"><span class="comment"> */</span></div>
262 <div class="line"> </div>
263 <div class="line"><span class="preprocessor">#include &quot;hwloc.h&quot;</span></div>
264 <div class="line"> </div>
265 <div class="line"><span class="preprocessor">#include &lt;errno.h&gt;</span></div>
266 <div class="line"><span class="preprocessor">#include &lt;stdio.h&gt;</span></div>
267 <div class="line"><span class="preprocessor">#include &lt;string.h&gt;</span></div>
268 <div class="line"> </div>
269 <div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> print_children(<a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00244.html">hwloc_obj_t</a> obj,</div>
270 <div class="line"> <span class="keywordtype">int</span> depth)</div>
271 <div class="line">{</div>
272 <div class="line"> <span class="keywordtype">char</span> type[32], attr[1024];</div>
273 <div class="line"> <span class="keywordtype">unsigned</span> i;</div>
274 <div class="line"> </div>
275 <div class="line"> <a class="code" href="a00194.html#gadb8765c260edea80c52cd06a76639ba4">hwloc_obj_type_snprintf</a>(type, <span class="keyword">sizeof</span>(type), obj, 0);</div>
276 <div class="line"> printf(<span class="stringliteral">&quot;%*s%s&quot;</span>, 2*depth, <span class="stringliteral">&quot;&quot;</span>, type);</div>
277 <div class="line"> <span class="keywordflow">if</span> (obj-&gt;<a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a> != (<span class="keywordtype">unsigned</span>) -1)</div>
278 <div class="line"> printf(<span class="stringliteral">&quot;#%u&quot;</span>, obj-&gt;<a class="code" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>);</div>
279 <div class="line"> <a class="code" href="a00194.html#ga870e876931c282a1c7aee2f031912ce3">hwloc_obj_attr_snprintf</a>(attr, <span class="keyword">sizeof</span>(attr), obj, <span class="stringliteral">&quot; &quot;</span>, 0);</div>
280 <div class="line"> <span class="keywordflow">if</span> (*attr)</div>
281 <div class="line"> printf(<span class="stringliteral">&quot;(%s)&quot;</span>, attr);</div>
282 <div class="line"> printf(<span class="stringliteral">&quot;\n&quot;</span>);</div>
283 <div class="line"> <span class="keywordflow">for</span> (i = 0; i &lt; obj-&gt;<a class="code" href="a00244.html#aac3f6da35c9b57599909a44ce2b716c1">arity</a>; i++) {</div>
284 <div class="line"> print_children(topology, obj-&gt;<a class="code" href="a00244.html#a04d05403da37bfe17cd63b7c7dd07b1f">children</a>[i], depth + 1);</div>
285 <div class="line"> }</div>
286 <div class="line">}</div>
287 <div class="line"> </div>
288 <div class="line"><span class="keywordtype">int</span> main(<span class="keywordtype">void</span>)</div>
289 <div class="line">{</div>
290 <div class="line"> <span class="keywordtype">int</span> depth;</div>
291 <div class="line"> <span class="keywordtype">unsigned</span> i, n;</div>
292 <div class="line"> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> size;</div>
293 <div class="line"> <span class="keywordtype">int</span> levels;</div>
294 <div class="line"> <span class="keywordtype">char</span> <span class="keywordtype">string</span>[128];</div>
295 <div class="line"> <span class="keywordtype">int</span> topodepth;</div>
296 <div class="line"> <span class="keywordtype">void</span> *m;</div>
297 <div class="line"> <a class="code" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology;</div>
298 <div class="line"> <a class="code" href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> cpuset;</div>
299 <div class="line"> <a class="code" href="a00244.html">hwloc_obj_t</a> obj;</div>
300 <div class="line"> </div>
301 <div class="line"> <span class="comment">/* Allocate and initialize topology object. */</span></div>
302 <div class="line"> <a class="code" href="a00192.html#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa">hwloc_topology_init</a>(&amp;topology);</div>
303 <div class="line"> </div>
304 <div class="line"> <span class="comment">/* ... Optionally, put detection configuration here to ignore</span></div>
305 <div class="line"><span class="comment"> some objects types, define a synthetic topology, etc....</span></div>
306 <div class="line"><span class="comment"></span> </div>
307 <div class="line"><span class="comment"> The default is to detect all the objects of the machine that</span></div>
308 <div class="line"><span class="comment"> the caller is allowed to access. See Configure Topology</span></div>
309 <div class="line"><span class="comment"> Detection. */</span></div>
310 <div class="line"> </div>
311 <div class="line"> <span class="comment">/* Perform the topology detection. */</span></div>
312 <div class="line"> <a class="code" href="a00192.html#gabdf58d87ad77f6615fccdfe0535ff826">hwloc_topology_load</a>(topology);</div>
313 <div class="line"> </div>
314 <div class="line"> <span class="comment">/* Optionally, get some additional topology information</span></div>
315 <div class="line"><span class="comment"> in case we need the topology depth later. */</span></div>
316 <div class="line"> topodepth = <a class="code" href="a00193.html#gae54d1782ca9b54bea915f5c18a9158fa">hwloc_topology_get_depth</a>(topology);</div>
317 <div class="line"> </div>
318 <div class="line"><span class="comment"> /*****************************************************************</span></div>
319 <div class="line"><span class="comment"> * First example:</span></div>
320 <div class="line"><span class="comment"> * Walk the topology with an array style, from level 0 (always</span></div>
321 <div class="line"><span class="comment"> * the system level) to the lowest level (always the proc level).</span></div>
322 <div class="line"><span class="comment"> *****************************************************************/</span></div>
323 <div class="line"> <span class="keywordflow">for</span> (depth = 0; depth &lt; topodepth; depth++) {</div>
324 <div class="line"> printf(<span class="stringliteral">&quot;*** Objects at level %d\n&quot;</span>, depth);</div>
325 <div class="line"> <span class="keywordflow">for</span> (i = 0; i &lt; <a class="code" href="a00193.html#ga1d5ceafe8130fe6e8657bf0bc666ba50">hwloc_get_nbobjs_by_depth</a>(topology, depth);</div>
326 <div class="line"> i++) {</div>
327 <div class="line"> <a class="code" href="a00194.html#gadb8765c260edea80c52cd06a76639ba4">hwloc_obj_type_snprintf</a>(<span class="keywordtype">string</span>, <span class="keyword">sizeof</span>(<span class="keywordtype">string</span>),</div>
328 <div class="line"> <a class="code" href="a00193.html#ga391f6b2613f0065673eaa4069b93d4e0">hwloc_get_obj_by_depth</a>(topology, depth, i), 0);</div>
329 <div class="line"> printf(<span class="stringliteral">&quot;Index %u: %s\n&quot;</span>, i, <span class="keywordtype">string</span>);</div>
330 <div class="line"> }</div>
331 <div class="line"> }</div>
332 <div class="line"> </div>
333 <div class="line"><span class="comment"> /*****************************************************************</span></div>
334 <div class="line"><span class="comment"> * Second example:</span></div>
335 <div class="line"><span class="comment"> * Walk the topology with a tree style.</span></div>
336 <div class="line"><span class="comment"> *****************************************************************/</span></div>
337 <div class="line"> printf(<span class="stringliteral">&quot;*** Printing overall tree\n&quot;</span>);</div>
338 <div class="line"> print_children(topology, <a class="code" href="a00193.html#ga2d4b12fc187dfc53b35f2fa21d21044d">hwloc_get_root_obj</a>(topology), 0);</div>
339 <div class="line"> </div>
340 <div class="line"><span class="comment"> /*****************************************************************</span></div>
341 <div class="line"><span class="comment"> * Third example:</span></div>
342 <div class="line"><span class="comment"> * Print the number of packages.</span></div>
343 <div class="line"><span class="comment"> *****************************************************************/</span></div>
344 <div class="line"> depth = <a class="code" href="a00193.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55ab16ab8c0dbffc234921d86f3dfb63129">HWLOC_OBJ_PACKAGE</a>);</div>
345 <div class="line"> <span class="keywordflow">if</span> (depth == <a class="code" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a>) {</div>
346 <div class="line"> printf(<span class="stringliteral">&quot;*** The number of packages is unknown\n&quot;</span>);</div>
347 <div class="line"> } <span class="keywordflow">else</span> {</div>
348 <div class="line"> printf(<span class="stringliteral">&quot;*** %u package(s)\n&quot;</span>,</div>
349 <div class="line"> <a class="code" href="a00193.html#ga1d5ceafe8130fe6e8657bf0bc666ba50">hwloc_get_nbobjs_by_depth</a>(topology, depth));</div>
350 <div class="line"> }</div>
351 <div class="line"> </div>
352 <div class="line"><span class="comment"> /*****************************************************************</span></div>
353 <div class="line"><span class="comment"> * Fourth example:</span></div>
354 <div class="line"><span class="comment"> * Compute the amount of cache that the first logical processor</span></div>
355 <div class="line"><span class="comment"> * has above it.</span></div>
356 <div class="line"><span class="comment"> *****************************************************************/</span></div>
357 <div class="line"> levels = 0;</div>
358 <div class="line"> size = 0;</div>
359 <div class="line"> <span class="keywordflow">for</span> (obj = <a class="code" href="a00193.html#ga6f414dd80a2b943967a0ac92da3181a2">hwloc_get_obj_by_type</a>(topology, <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661">HWLOC_OBJ_PU</a>, 0);</div>
360 <div class="line"> obj;</div>
361 <div class="line"> obj = obj-&gt;<a class="code" href="a00244.html#adc494f6aed939992be1c55cca5822900">parent</a>)</div>
362 <div class="line"> <span class="keywordflow">if</span> (<a class="code" href="a00204.html#ga2ed589bea28711e80b92066510a5607d">hwloc_obj_type_is_cache</a>(obj-&gt;<a class="code" href="a00244.html#acc4f0803f244867e68fe0036800be5de">type</a>)) {</div>
363 <div class="line"> levels++;</div>
364 <div class="line"> size += obj-&gt;<a class="code" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00248.html#a23f553f3252c9d13f2338231cd354ea9">cache</a>.<a class="code" href="a00260.html#abe5e788943ed04302976740c829674c0">size</a>;</div>
365 <div class="line"> }</div>
366 <div class="line"> printf(<span class="stringliteral">&quot;*** Logical processor 0 has %d caches totaling %luKB\n&quot;</span>,</div>
367 <div class="line"> levels, size / 1024);</div>
368 <div class="line"> </div>
369 <div class="line"><span class="comment"> /*****************************************************************</span></div>
370 <div class="line"><span class="comment"> * Fifth example:</span></div>
371 <div class="line"><span class="comment"> * Bind to only one thread of the last core of the machine.</span></div>
372 <div class="line"><span class="comment"> *</span></div>
373 <div class="line"><span class="comment"> * First find out where cores are, or else smaller sets of CPUs if</span></div>
374 <div class="line"><span class="comment"> * the OS doesn&#39;t have the notion of a &quot;core&quot;.</span></div>
375 <div class="line"><span class="comment"> *****************************************************************/</span></div>
376 <div class="line"> depth = <a class="code" href="a00193.html#ga8125328e69eba709c33ea8055c12589b">hwloc_get_type_or_below_depth</a>(topology, <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55ac793958f330bca371aa1535de8aff45f">HWLOC_OBJ_CORE</a>);</div>
377 <div class="line"> </div>
378 <div class="line"> <span class="comment">/* Get last core. */</span></div>
379 <div class="line"> obj = <a class="code" href="a00193.html#ga391f6b2613f0065673eaa4069b93d4e0">hwloc_get_obj_by_depth</a>(topology, depth,</div>
380 <div class="line"> <a class="code" href="a00193.html#ga1d5ceafe8130fe6e8657bf0bc666ba50">hwloc_get_nbobjs_by_depth</a>(topology, depth) - 1);</div>
381 <div class="line"> <span class="keywordflow">if</span> (obj) {</div>
382 <div class="line"> <span class="comment">/* Get a copy of its cpuset that we may modify. */</span></div>
383 <div class="line"> cpuset = <a class="code" href="a00211.html#gae679434c1a5f41d3560a8a7e2c1b0dee">hwloc_bitmap_dup</a>(obj-&gt;<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>);</div>
384 <div class="line"> </div>
385 <div class="line"> <span class="comment">/* Get only one logical processor (in case the core is</span></div>
386 <div class="line"><span class="comment"> SMT/hyper-threaded). */</span></div>
387 <div class="line"> <a class="code" href="a00211.html#gaa611a77c092e679246afdf9a60d5db8b">hwloc_bitmap_singlify</a>(cpuset);</div>
388 <div class="line"> </div>
389 <div class="line"> <span class="comment">/* And try to bind ourself there. */</span></div>
390 <div class="line"> <span class="keywordflow">if</span> (<a class="code" href="a00196.html#ga80bc07473a8edf840cae17bd7ec21d48">hwloc_set_cpubind</a>(topology, cpuset, 0)) {</div>
391 <div class="line"> <span class="keywordtype">char</span> *str;</div>
392 <div class="line"> <span class="keywordtype">int</span> error = errno;</div>
393 <div class="line"> <a class="code" href="a00211.html#ga0fece972134fdecf2da9bc7a11dd827e">hwloc_bitmap_asprintf</a>(&amp;str, obj-&gt;<a class="code" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>);</div>
394 <div class="line"> printf(<span class="stringliteral">&quot;Couldn&#39;t bind to cpuset %s: %s\n&quot;</span>, str, strerror(error));</div>
395 <div class="line"> free(str);</div>
396 <div class="line"> }</div>
397 <div class="line"> </div>
398 <div class="line"> <span class="comment">/* Free our cpuset copy */</span></div>
399 <div class="line"> <a class="code" href="a00211.html#ga156130d85b3a0674d6e0e6770fe68fbe">hwloc_bitmap_free</a>(cpuset);</div>
400 <div class="line"> }</div>
401 <div class="line"> </div>
402 <div class="line"><span class="comment"> /*****************************************************************</span></div>
403 <div class="line"><span class="comment"> * Sixth example:</span></div>
404 <div class="line"><span class="comment"> * Allocate some memory on the last NUMA node, bind some existing</span></div>
405 <div class="line"><span class="comment"> * memory to the last NUMA node.</span></div>
406 <div class="line"><span class="comment"> *****************************************************************/</span></div>
407 <div class="line"> <span class="comment">/* Get last node. There&#39;s always at least one. */</span></div>
408 <div class="line"> n = <a class="code" href="a00193.html#ga789a3f65aedff644be64a18526a03065">hwloc_get_nbobjs_by_type</a>(topology, <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>);</div>
409 <div class="line"> obj = <a class="code" href="a00193.html#ga6f414dd80a2b943967a0ac92da3181a2">hwloc_get_obj_by_type</a>(topology, <a class="code" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>, n - 1);</div>
410 <div class="line"> </div>
411 <div class="line"> size = 1024*1024;</div>
412 <div class="line"> m = <a class="code" href="a00197.html#ga04736461780fadcf193af218c0122273">hwloc_alloc_membind</a>(topology, size, obj-&gt;<a class="code" href="a00244.html#a08f0d0e16c619a6e653526cbee4ffea3">nodeset</a>,</div>
413 <div class="line"> <a class="code" href="a00197.html#ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c">HWLOC_MEMBIND_BIND</a>, <a class="code" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256">HWLOC_MEMBIND_BYNODESET</a>);</div>
414 <div class="line"> <a class="code" href="a00197.html#ga32dbd4f54e9e4a7179f2dde37ffe6ad7">hwloc_free</a>(topology, m, size);</div>
415 <div class="line"> </div>
416 <div class="line"> m = malloc(size);</div>
417 <div class="line"> <a class="code" href="a00197.html#gaf881faefe20701229f07dd7dbd0125ed">hwloc_set_area_membind</a>(topology, m, size, obj-&gt;<a class="code" href="a00244.html#a08f0d0e16c619a6e653526cbee4ffea3">nodeset</a>,</div>
418 <div class="line"> <a class="code" href="a00197.html#ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c">HWLOC_MEMBIND_BIND</a>, <a class="code" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256">HWLOC_MEMBIND_BYNODESET</a>);</div>
419 <div class="line"> free(m);</div>
420 <div class="line"> </div>
421 <div class="line"> <span class="comment">/* Destroy topology object. */</span></div>
422 <div class="line"> <a class="code" href="a00192.html#ga9f34a640b6fd28d23699d4d084667b15">hwloc_topology_destroy</a>(topology);</div>
423 <div class="line"> </div>
424 <div class="line"> <span class="keywordflow">return</span> 0;</div>
425 <div class="line">}</div>
426 <div class="ttc" id="aa00189_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00189.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
427 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a></div><div class="ttdeci">@ HWLOC_OBJ_NUMANODE</div><div class="ttdoc">NUMA node. An object that contains memory that is directly and byte-accessible to the host processors...</div><div class="ttdef"><b>Definition:</b> hwloc.h:236</div></div>
428 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55ab16ab8c0dbffc234921d86f3dfb63129"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55ab16ab8c0dbffc234921d86f3dfb63129">HWLOC_OBJ_PACKAGE</a></div><div class="ttdeci">@ HWLOC_OBJ_PACKAGE</div><div class="ttdoc">Physical package. The physical package that usually gets inserted into a socket on the motherboard....</div><div class="ttdef"><b>Definition:</b> hwloc.h:191</div></div>
429 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661">HWLOC_OBJ_PU</a></div><div class="ttdeci">@ HWLOC_OBJ_PU</div><div class="ttdoc">Processing Unit, or (Logical) Processor. An execution unit (may share a core with some other logical ...</div><div class="ttdef"><b>Definition:</b> hwloc.h:201</div></div>
430 <div class="ttc" id="aa00190_html_ggacd37bb612667dc437d66bfb175a8dc55ac793958f330bca371aa1535de8aff45f"><div class="ttname"><a href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55ac793958f330bca371aa1535de8aff45f">HWLOC_OBJ_CORE</a></div><div class="ttdeci">@ HWLOC_OBJ_CORE</div><div class="ttdoc">Core. A computation unit (may be shared by several PUs, aka logical processors).</div><div class="ttdef"><b>Definition:</b> hwloc.h:197</div></div>
431 <div class="ttc" id="aa00192_html_ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa"><div class="ttname"><a href="a00192.html#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa">hwloc_topology_init</a></div><div class="ttdeci">int hwloc_topology_init(hwloc_topology_t *topologyp)</div><div class="ttdoc">Allocate a topology context.</div></div>
432 <div class="ttc" id="aa00192_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
433 <div class="ttc" id="aa00192_html_ga9f34a640b6fd28d23699d4d084667b15"><div class="ttname"><a href="a00192.html#ga9f34a640b6fd28d23699d4d084667b15">hwloc_topology_destroy</a></div><div class="ttdeci">void hwloc_topology_destroy(hwloc_topology_t topology)</div><div class="ttdoc">Terminate and free a topology context.</div></div>
434 <div class="ttc" id="aa00192_html_gabdf58d87ad77f6615fccdfe0535ff826"><div class="ttname"><a href="a00192.html#gabdf58d87ad77f6615fccdfe0535ff826">hwloc_topology_load</a></div><div class="ttdeci">int hwloc_topology_load(hwloc_topology_t topology)</div><div class="ttdoc">Build the actual topology.</div></div>
435 <div class="ttc" id="aa00193_html_ga1d5ceafe8130fe6e8657bf0bc666ba50"><div class="ttname"><a href="a00193.html#ga1d5ceafe8130fe6e8657bf0bc666ba50">hwloc_get_nbobjs_by_depth</a></div><div class="ttdeci">unsigned hwloc_get_nbobjs_by_depth(hwloc_topology_t topology, int depth)</div><div class="ttdoc">Returns the width of level at depth depth.</div></div>
436 <div class="ttc" id="aa00193_html_ga2d4b12fc187dfc53b35f2fa21d21044d"><div class="ttname"><a href="a00193.html#ga2d4b12fc187dfc53b35f2fa21d21044d">hwloc_get_root_obj</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_root_obj(hwloc_topology_t topology)</div><div class="ttdoc">Returns the top-object of the topology-tree.</div></div>
437 <div class="ttc" id="aa00193_html_ga391f6b2613f0065673eaa4069b93d4e0"><div class="ttname"><a href="a00193.html#ga391f6b2613f0065673eaa4069b93d4e0">hwloc_get_obj_by_depth</a></div><div class="ttdeci">hwloc_obj_t hwloc_get_obj_by_depth(hwloc_topology_t topology, int depth, unsigned idx)</div><div class="ttdoc">Returns the topology object at logical index idx from depth depth.</div></div>
438 <div class="ttc" id="aa00193_html_ga6f414dd80a2b943967a0ac92da3181a2"><div class="ttname"><a href="a00193.html#ga6f414dd80a2b943967a0ac92da3181a2">hwloc_get_obj_by_type</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_obj_by_type(hwloc_topology_t topology, hwloc_obj_type_t type, unsigned idx)</div><div class="ttdoc">Returns the topology object at logical index idx with type type.</div></div>
439 <div class="ttc" id="aa00193_html_ga789a3f65aedff644be64a18526a03065"><div class="ttname"><a href="a00193.html#ga789a3f65aedff644be64a18526a03065">hwloc_get_nbobjs_by_type</a></div><div class="ttdeci">static int hwloc_get_nbobjs_by_type(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Returns the width of level type type.</div></div>
440 <div class="ttc" id="aa00193_html_ga8125328e69eba709c33ea8055c12589b"><div class="ttname"><a href="a00193.html#ga8125328e69eba709c33ea8055c12589b">hwloc_get_type_or_below_depth</a></div><div class="ttdeci">static int hwloc_get_type_or_below_depth(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Returns the depth of objects of type type or below.</div></div>
441 <div class="ttc" id="aa00193_html_ga8bec782e21be313750da70cf7428b374"><div class="ttname"><a href="a00193.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a></div><div class="ttdeci">int hwloc_get_type_depth(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Returns the depth of objects of type type.</div></div>
442 <div class="ttc" id="aa00193_html_gae54d1782ca9b54bea915f5c18a9158fa"><div class="ttname"><a href="a00193.html#gae54d1782ca9b54bea915f5c18a9158fa">hwloc_topology_get_depth</a></div><div class="ttdeci">int hwloc_topology_get_depth(hwloc_topology_t restrict topology)</div><div class="ttdoc">Get the depth of the hierarchical tree of objects.</div></div>
443 <div class="ttc" id="aa00193_html_ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad"><div class="ttname"><a href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_UNKNOWN</div><div class="ttdoc">No object of given type exists in the topology.</div><div class="ttdef"><b>Definition:</b> hwloc.h:821</div></div>
444 <div class="ttc" id="aa00194_html_ga870e876931c282a1c7aee2f031912ce3"><div class="ttname"><a href="a00194.html#ga870e876931c282a1c7aee2f031912ce3">hwloc_obj_attr_snprintf</a></div><div class="ttdeci">int hwloc_obj_attr_snprintf(char *restrict string, size_t size, hwloc_obj_t obj, const char *restrict separator, int verbose)</div><div class="ttdoc">Stringify the attributes of a given topology object into a human-readable form.</div></div>
445 <div class="ttc" id="aa00194_html_gadb8765c260edea80c52cd06a76639ba4"><div class="ttname"><a href="a00194.html#gadb8765c260edea80c52cd06a76639ba4">hwloc_obj_type_snprintf</a></div><div class="ttdeci">int hwloc_obj_type_snprintf(char *restrict string, size_t size, hwloc_obj_t obj, int verbose)</div><div class="ttdoc">Stringify the type of a given topology object into a human-readable form.</div></div>
446 <div class="ttc" id="aa00196_html_ga80bc07473a8edf840cae17bd7ec21d48"><div class="ttname"><a href="a00196.html#ga80bc07473a8edf840cae17bd7ec21d48">hwloc_set_cpubind</a></div><div class="ttdeci">int hwloc_set_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t set, int flags)</div><div class="ttdoc">Bind current process or thread on cpus given in physical bitmap set.</div></div>
447 <div class="ttc" id="aa00197_html_ga04736461780fadcf193af218c0122273"><div class="ttname"><a href="a00197.html#ga04736461780fadcf193af218c0122273">hwloc_alloc_membind</a></div><div class="ttdeci">void * hwloc_alloc_membind(hwloc_topology_t topology, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)</div><div class="ttdoc">Allocate some memory on NUMA memory nodes specified by set.</div></div>
448 <div class="ttc" id="aa00197_html_ga32dbd4f54e9e4a7179f2dde37ffe6ad7"><div class="ttname"><a href="a00197.html#ga32dbd4f54e9e4a7179f2dde37ffe6ad7">hwloc_free</a></div><div class="ttdeci">int hwloc_free(hwloc_topology_t topology, void *addr, size_t len)</div><div class="ttdoc">Free memory that was previously allocated by hwloc_alloc() or hwloc_alloc_membind().</div></div>
449 <div class="ttc" id="aa00197_html_gaf881faefe20701229f07dd7dbd0125ed"><div class="ttname"><a href="a00197.html#gaf881faefe20701229f07dd7dbd0125ed">hwloc_set_area_membind</a></div><div class="ttdeci">int hwloc_set_area_membind(hwloc_topology_t topology, const void *addr, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)</div><div class="ttdoc">Bind the already-allocated memory identified by (addr, len) to the NUMA node(s) specified by set.</div></div>
450 <div class="ttc" id="aa00197_html_ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256"><div class="ttname"><a href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256">HWLOC_MEMBIND_BYNODESET</a></div><div class="ttdeci">@ HWLOC_MEMBIND_BYNODESET</div><div class="ttdoc">Consider the bitmap argument as a nodeset.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1491</div></div>
451 <div class="ttc" id="aa00197_html_ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c"><div class="ttname"><a href="a00197.html#ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c">HWLOC_MEMBIND_BIND</a></div><div class="ttdeci">@ HWLOC_MEMBIND_BIND</div><div class="ttdoc">Allocate memory on the specified nodes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1403</div></div>
452 <div class="ttc" id="aa00204_html_ga2ed589bea28711e80b92066510a5607d"><div class="ttname"><a href="a00204.html#ga2ed589bea28711e80b92066510a5607d">hwloc_obj_type_is_cache</a></div><div class="ttdeci">int hwloc_obj_type_is_cache(hwloc_obj_type_t type)</div><div class="ttdoc">Check whether an object type is a CPU Cache (Data, Unified or Instruction).</div></div>
453 <div class="ttc" id="aa00211_html_ga0fece972134fdecf2da9bc7a11dd827e"><div class="ttname"><a href="a00211.html#ga0fece972134fdecf2da9bc7a11dd827e">hwloc_bitmap_asprintf</a></div><div class="ttdeci">int hwloc_bitmap_asprintf(char **strp, hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Stringify a bitmap into a newly allocated string.</div></div>
454 <div class="ttc" id="aa00211_html_ga156130d85b3a0674d6e0e6770fe68fbe"><div class="ttname"><a href="a00211.html#ga156130d85b3a0674d6e0e6770fe68fbe">hwloc_bitmap_free</a></div><div class="ttdeci">void hwloc_bitmap_free(hwloc_bitmap_t bitmap)</div><div class="ttdoc">Free bitmap bitmap.</div></div>
455 <div class="ttc" id="aa00211_html_gaa611a77c092e679246afdf9a60d5db8b"><div class="ttname"><a href="a00211.html#gaa611a77c092e679246afdf9a60d5db8b">hwloc_bitmap_singlify</a></div><div class="ttdeci">int hwloc_bitmap_singlify(hwloc_bitmap_t bitmap)</div><div class="ttdoc">Keep a single index among those set in bitmap bitmap.</div></div>
456 <div class="ttc" id="aa00211_html_gae679434c1a5f41d3560a8a7e2c1b0dee"><div class="ttname"><a href="a00211.html#gae679434c1a5f41d3560a8a7e2c1b0dee">hwloc_bitmap_dup</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_bitmap_dup(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.</div></div>
457 <div class="ttc" id="aa00244_html"><div class="ttname"><a href="a00244.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:395</div></div>
458 <div class="ttc" id="aa00244_html_a04d05403da37bfe17cd63b7c7dd07b1f"><div class="ttname"><a href="a00244.html#a04d05403da37bfe17cd63b7c7dd07b1f">hwloc_obj::children</a></div><div class="ttdeci">struct hwloc_obj ** children</div><div class="ttdoc">Normal children, children[0 .. arity -1].</div><div class="ttdef"><b>Definition:</b> hwloc.h:455</div></div>
459 <div class="ttc" id="aa00244_html_a08f0d0e16c619a6e653526cbee4ffea3"><div class="ttname"><a href="a00244.html#a08f0d0e16c619a6e653526cbee4ffea3">hwloc_obj::nodeset</a></div><div class="ttdeci">hwloc_nodeset_t nodeset</div><div class="ttdoc">NUMA nodes covered by this object or containing this object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:539</div></div>
460 <div class="ttc" id="aa00244_html_a61a7a80a68eaccbaaa28269e678c81a9"><div class="ttname"><a href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">hwloc_obj::os_index</a></div><div class="ttdeci">unsigned os_index</div><div class="ttdoc">OS-provided physical index number. It is not guaranteed unique across the entire machine,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:400</div></div>
461 <div class="ttc" id="aa00244_html_a67925e0f2c47f50408fbdb9bddd0790f"><div class="ttname"><a href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">hwloc_obj::cpuset</a></div><div class="ttdeci">hwloc_cpuset_t cpuset</div><div class="ttdoc">CPUs covered by this object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:511</div></div>
462 <div class="ttc" id="aa00244_html_aac3f6da35c9b57599909a44ce2b716c1"><div class="ttname"><a href="a00244.html#aac3f6da35c9b57599909a44ce2b716c1">hwloc_obj::arity</a></div><div class="ttdeci">unsigned arity</div><div class="ttdoc">Number of normal children. Memory, Misc and I/O children are not listed here but rather in their dedi...</div><div class="ttdef"><b>Definition:</b> hwloc.h:451</div></div>
463 <div class="ttc" id="aa00244_html_acc4f0803f244867e68fe0036800be5de"><div class="ttname"><a href="a00244.html#acc4f0803f244867e68fe0036800be5de">hwloc_obj::type</a></div><div class="ttdeci">hwloc_obj_type_t type</div><div class="ttdoc">Type of object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:397</div></div>
464 <div class="ttc" id="aa00244_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:414</div></div>
465 <div class="ttc" id="aa00244_html_adc494f6aed939992be1c55cca5822900"><div class="ttname"><a href="a00244.html#adc494f6aed939992be1c55cca5822900">hwloc_obj::parent</a></div><div class="ttdeci">struct hwloc_obj * parent</div><div class="ttdoc">Parent, NULL if root (Machine object)</div><div class="ttdef"><b>Definition:</b> hwloc.h:445</div></div>
466 <div class="ttc" id="aa00248_html_a23f553f3252c9d13f2338231cd354ea9"><div class="ttname"><a href="a00248.html#a23f553f3252c9d13f2338231cd354ea9">hwloc_obj_attr_u::cache</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_cache_attr_s cache</div></div>
467 <div class="ttc" id="aa00260_html_abe5e788943ed04302976740c829674c0"><div class="ttname"><a href="a00260.html#abe5e788943ed04302976740c829674c0">hwloc_obj_attr_u::hwloc_cache_attr_s::size</a></div><div class="ttdeci">hwloc_uint64_t size</div><div class="ttdoc">Size of cache in bytes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:616</div></div>
468 </div><!-- fragment --><p>hwloc provides a <code>pkg-config</code> executable to obtain relevant compiler and linker flags. For example, it can be used thusly to compile applications that utilize the hwloc library (assuming GNU Make):</p>
469 <pre class="fragment">CFLAGS += $(shell pkg-config --cflags hwloc)
470 LDLIBS += $(shell pkg-config --libs hwloc)
471
472 hwloc-hello: hwloc-hello.c
473 $(CC) hwloc-hello.c $(CFLAGS) -o hwloc-hello $(LDLIBS)
474 </pre><p>On a machine 2 processor packages &ndash; each package of which has two processing cores &ndash; the output from running <code>hwloc-hello</code> could be something like the following:</p>
475 <pre class="fragment">shell$ ./hwloc-hello
476 *** Objects at level 0
477 Index 0: Machine
478 *** Objects at level 1
479 Index 0: Package#0
480 Index 1: Package#1
481 *** Objects at level 2
482 Index 0: Core#0
483 Index 1: Core#1
484 Index 2: Core#3
485 Index 3: Core#2
486 *** Objects at level 3
487 Index 0: PU#0
488 Index 1: PU#1
489 Index 2: PU#2
490 Index 3: PU#3
491 *** Printing overall tree
492 Machine
493 Package#0
494 Core#0
495 PU#0
496 Core#1
497 PU#1
498 Package#1
499 Core#3
500 PU#2
501 Core#2
502 PU#3
503 *** 2 package(s)
504 *** Logical processor 0 has 0 caches totaling 0KB
505 shell$
506 </pre><p>
507 </div><div class="section" id="history">
508 </p>
509 <h1><a class="anchor" id="history"></a>
510 History / Credits</h1>
511 <p>hwloc is the evolution and merger of the libtopology project and the Portable Linux Processor Affinity (PLPA) (<a href="https://www.open-mpi.org/projects/plpa/">https://www.open-mpi.org/projects/plpa/</a>) project. Because of functional and ideological overlap, these two code bases and ideas were merged and released under the name "hwloc" as an Open MPI sub-project.</p>
512 <p>libtopology was initially developed by the Inria Runtime Team-Project. PLPA was initially developed by the Open MPI development team as a sub-project. Both are now deprecated in favor of hwloc, which is distributed as an Open MPI sub-project.</p>
513 <p>
514 </div><div class="section" id="further_reading">
515 </p>
516 <h1><a class="anchor" id="further_reading"></a>
517 Further Reading</h1>
518 <p>The documentation chapters include</p>
519 <ul>
520 <li>
521 <a class="el" href="a00386.html">Terms and Definitions</a> </li>
522 <li>
523 <a class="el" href="a00387.html">Command-Line Tools</a> </li>
524 <li>
525 <a class="el" href="a00388.html">Environment Variables</a> </li>
526 <li>
527 <a class="el" href="a00389.html">CPU and Memory Binding Overview</a> </li>
528 <li>
529 <a class="el" href="a00390.html">I/O Devices</a> </li>
530 <li>
531 <a class="el" href="a00391.html">Miscellaneous objects</a> </li>
532 <li>
533 <a class="el" href="a00392.html">Object attributes</a> </li>
534 <li>
535 <a class="el" href="a00393.html">Topology Attributes: Distances, Memory Attributes and CPU Kinds</a> </li>
536 <li>
537 <a class="el" href="a00394.html">Importing and exporting topologies from/to XML files</a> </li>
538 <li>
539 <a class="el" href="a00395.html">Synthetic topologies</a> </li>
540 <li>
541 <a class="el" href="a00396.html">Interoperability With Other Software</a> </li>
542 <li>
543 <a class="el" href="a00397.html">Thread Safety</a> </li>
544 <li>
545 <a class="el" href="a00398.html">Components and plugins</a> </li>
546 <li>
547 <a class="el" href="a00399.html">Embedding hwloc in Other Software</a> </li>
548 <li>
549 <a class="el" href="a00400.html">Frequently Asked Questions</a> </li>
550 <li>
551 <a class="el" href="a00401.html">Upgrading to the hwloc 2.0 API</a> </li>
552 </ul>
553 <p>Make sure to have had a look at those too!</p>
554 <p>
555 </div>
556 </p>
557 </div></div><!-- contents -->
558 </div><!-- PageDoc -->
559 <!-- start footer part -->
560 <hr class="footer"/><address class="footer"><small>
561 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
562 </small></address>
563 </body>
564 </html>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Terms and Definitions</title>
7 <title>Hardware Locality (hwloc): hwloc_backend Struct Reference</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3737 /* @license-end */</script>
3838 <div id="main-nav"></div>
3939 </div><!-- top -->
40 <div class="PageDoc"><div class="header">
40 <div class="header">
41 <div class="summary">
42 <a href="#pub-attribs">Data Fields</a> </div>
4143 <div class="headertitle">
42 <div class="title">Terms and Definitions </div> </div>
44 <div class="title">hwloc_backend Struct Reference<div class="ingroups"><a class="el" href="a00240.html">Components and Plugins: Discovery backends</a></div></div> </div>
4345 </div><!--header-->
4446 <div class="contents">
45 <div class="textblock"><p>
46 <div class="section" id="termsanddefs_objects">
47 </p>
48 <h1><a class="anchor" id="termsanddefs_objects"></a>
49 Objects</h1>
50 <dl>
51 <dt>Object </dt>
52 <dd><p class="startdd">Interesting kind of part of the system, such as a Core, a L2Cache, a NUMA memory node, etc. The different types detected by hwloc are detailed in the <a class="el" href="a00190.html#gacd37bb612667dc437d66bfb175a8dc55" title="Type of topology object.">hwloc_obj_type_t</a> enumeration.</p>
53 <p class="interdd">There are four kinds of Objects: Memory (NUMA nodes and Memory-side caches), I/O (Bridges, PCI and OS devices), Misc, and Normal (everything else, including Machine, Package, Die, Core, PU, CPU Caches, etc.). Normal and Memory objects have (non-NULL) CPU sets and nodesets, while I/O and Misc don't.</p>
54 <p class="interdd">Objects are topologically sorted by locality (CPU and node sets) into a tree (see <a class="el" href="a00386.html#termsanddefs_tree">Hierarchy, Tree and Levels</a>). </p>
55 <p class="enddd"></p>
56 </dd>
57 <dt>Processing Unit (PU) </dt>
58 <dd><p class="startdd">The smallest processing element that can be represented by a hwloc object. It may be a single-core processor, a core of a multicore processor, or a single thread in a SMT processor (also sometimes called "Logical processor", not to be confused with "Logical index of a processor"). hwloc's PU acronym stands for Processing Unit. </p>
59 <p class="enddd"></p>
60 </dd>
61 <dt>Package </dt>
62 <dd><p class="startdd">A processor Package is the physical package that usually gets inserted into a socket on the motherboard. It is also often called a physical processor or a CPU even if these names bring confusion with respect to cores and processing units. A processor package usually contains multiple cores (and may also be composed of multiple dies). hwloc Package objects were called Sockets up to hwloc 1.10. </p>
63 <p class="enddd"></p>
64 </dd>
65 <dt>NUMA Node </dt>
66 <dd><p class="startdd">An object that contains memory that is directly and byte-accessible to the host processors. It is usually close to some cores as specified by its CPU set. Hence it is attached as a memory child of the object that groups those cores together, for instance a Package objects with 4 Core children (see <a class="el" href="a00386.html#termsanddefs_tree">Hierarchy, Tree and Levels</a>). </p>
67 <p class="enddd"></p>
68 </dd>
69 <dt>Memory-side Cache </dt>
70 <dd><p class="startdd">A cache in front of a specific memory region (e.g. a range of physical addresses). It caches all accesses to that region without caring about which core issued the request. This is the opposite of usual CPU caches where only accesses from the local cores are cached, without caring about the target memory.</p>
71 <p class="enddd">In hwloc, memory-side caches are memory objects placed between their local CPU objects (parent) and the target NUMA node memory (child). </p>
72 </dd>
73 </dl>
74 <p>
75 </div><div class="section" id="termsanddefs_indexes">
76 </p>
77 <h1><a class="anchor" id="termsanddefs_indexes"></a>
78 Indexes and Sets</h1>
79 <dl>
80 <dt>OS or physical index </dt>
81 <dd><p class="startdd">The index that the operating system (OS) uses to identify the object. This may be completely arbitrary, non-unique, non-contiguous, not representative of logical proximity, and may depend on the BIOS configuration. That is why hwloc almost never uses them, only in the default lstopo output (<code>P#x</code>) and cpuset masks. See also <a class="el" href="a00400.html#faq_indexes">Should I use logical or physical/OS indexes? and how?</a>.</p>
82 <p class="enddd"></p>
83 </dd>
84 <dt>Logical index </dt>
85 <dd><p class="startdd">Index to uniquely identify objects of the same type and depth, automatically computed by hwloc according to the topology. It expresses logical proximity in a generic way, i.e. objects which have adjacent logical indexes are adjacent in the topology. That is why hwloc almost always uses it in its API, since it expresses logical proximity. They can be shown (as <code>L#x</code>) by <code>lstopo</code> thanks to the <code>-l</code> option. This index is always linear and in the range [0, num_objs_same_type_same_level-1]. Think of it as ``cousin rank.'' The ordering is based on topology first, and then on OS CPU numbers, so it is stable across everything except firmware CPU renumbering. "Logical index" should not be confused with "Logical processor". A "Logical
86 processor" (which in hwloc we rather call "processing unit" to avoid the confusion) has both a physical index (as chosen arbitrarily by BIOS/OS) and a logical index (as computed according to logical proximity by hwloc). See also <a class="el" href="a00400.html#faq_indexes">Should I use logical or physical/OS indexes? and how?</a>.</p>
87 <p class="enddd"></p>
88 </dd>
89 <dt>CPU set </dt>
90 <dd><p class="startdd">The set of processing units (PU) logically included in an object (if it makes sense). They are always expressed using physical processor numbers (as announced by the OS). They are implemented as the <a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84" title="Set of bits represented as an opaque pointer to an internal bitmap.">hwloc_bitmap_t</a> opaque structure. hwloc CPU sets are just masks, they do <em>not</em> have any relation with an operating system actual binding notion like Linux' cpusets. I/O and Misc objects do not have CPU sets while all Normal and Memory objects have non-NULL CPU sets.</p>
91 <p class="enddd"></p>
92 </dd>
93 <dt>Node set </dt>
94 <dd><p class="startdd">The set of NUMA memory nodes logically included in an object (if it makes sense). They are always expressed using physical node numbers (as announced by the OS). They are implemented with the <a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84" title="Set of bits represented as an opaque pointer to an internal bitmap.">hwloc_bitmap_t</a> opaque structure. as bitmaps. I/O and Misc objects do not have Node sets while all Normal and Memory objects have non-NULL nodesets.</p>
95 <p class="enddd"></p>
96 </dd>
97 <dt>Bitmap </dt>
98 <dd><p class="startdd">A possibly-infinite set of bits used for describing sets of objects such as CPUs (CPU sets) or memory nodes (Node sets). They are implemented with the <a class="el" href="a00211.html#gaa3c2bf4c776d603dcebbb61b0c923d84" title="Set of bits represented as an opaque pointer to an internal bitmap.">hwloc_bitmap_t</a> opaque structure. </p>
99 <p class="enddd"></p>
100 </dd>
101 </dl>
102 <p>
103 </div><div class="section" id="termsanddefs_tree">
104 </p>
105 <h1><a class="anchor" id="termsanddefs_tree"></a>
106 Hierarchy, Tree and Levels</h1>
107 <dl>
108 <dt>Parent object </dt>
109 <dd><p class="startdd">The object logically containing the current object, for example because its CPU set includes the CPU set of the current object. All objects have a non-NULL parent, except the root of the topology (Machine object). </p>
110 <p class="enddd"></p>
111 </dd>
112 <dt>Ancestor object </dt>
113 <dd><p class="startdd">The parent object, or its own parent, and so on.</p>
114 <p class="enddd"></p>
115 </dd>
116 <dt>Children object(s) </dt>
117 <dd><p class="startdd">The object (or objects) contained in the current object because their CPU set is included in the CPU set of the current object. Each object may also contain separated lists for Memory, I/O and Misc object children. </p>
118 <p class="enddd"></p>
119 </dd>
120 <dt>Arity </dt>
121 <dd><p class="startdd">The number of normal children of an object. There are also specific arities for Memory, I/O and Misc children. </p>
122 <p class="enddd"></p>
123 </dd>
124 <dt>Sibling objects </dt>
125 <dd><p class="startdd">Objects in the same children list, which all of them are normal children of the same parent, or all of them are Memory children of the same parent, or I/O children, or Misc. They usually have the same type (and hence are cousins, as well). But they may not if the topology is asymmetric. </p>
126 <p class="enddd"></p>
127 </dd>
128 <dt>Sibling rank </dt>
129 <dd><p class="startdd">Index to uniquely identify objects which have the same parent, and is always in the range [0, arity-1] (respectively memory_arity, io_arity or misc_arity for Memory, I/O and Misc children of a parent).</p>
130 <p class="enddd"></p>
131 </dd>
132 <dt>Cousin objects </dt>
133 <dd><p class="startdd">Objects of the same type (and depth) as the current object, even if they do not have the same parent.</p>
134 <p class="enddd"></p>
135 </dd>
136 <dt>Level </dt>
137 <dd><p class="startdd">Set of objects of the same type and depth. All these objects are cousins.</p>
138 <p class="interdd">Memory, I/O and Misc objects also have their own specific levels and (virtual) depth. </p>
139 <p class="enddd"></p>
140 </dd>
141 <dt>Depth </dt>
142 <dd><p class="startdd">Nesting level in the object tree, starting from the root object. If the topology is symmetric, the depth of a child is equal to the parent depth plus one, and an object depth is also equal to the number of parent/child links between the root object and the given object. If the topology is asymmetric, the difference between some parent and child depths may be larger than one when some intermediate levels (for instance groups) are missing in only some parts of the machine.</p>
143 <p class="interdd">The depth of the Machine object is always 0 since it is always the root of the topology. The depth of PU objects is equal to the number of levels in the topology minus one.</p>
144 <p class="interdd">Memory, I/O and Misc objects also have their own specific levels and depth. </p>
145 <p class="enddd"></p>
146 </dd>
147 </dl>
148 <p>The following diagram can help to understand the vocabulary of the relationships by showing the example of a machine with two dual core packages (with no hardware threads); thus, a topology with 5 levels. Each box with rounded corner corresponds to one <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d" title="Convenience typedef; a pointer to a struct hwloc_obj.">hwloc_obj_t</a>, containing the values of the different integer fields (depth, logical_index, etc.), and arrows show to which other <a class="el" href="a00191.html#ga79b8ab56877ef99ac59b833203391c7d" title="Convenience typedef; a pointer to a struct hwloc_obj.">hwloc_obj_t</a> pointers point to (first_child, parent, etc.).</p>
149 <p>The topology always starts with a Machine object as root (depth 0) and ends with PU objects at the bottom (depth 4 here).</p>
150 <p>Objects of the same level (cousins) are listed in red boxes and linked with red arrows. Children of the same parent (siblings) are linked with blue arrows.</p>
151 <p>The L2 cache of the last core is intentionally missing to show how asymmetric topologies are handled. See <a class="el" href="a00400.html#faq_asymmetric">What happens if my topology is asymmetric?</a> for more information about such strange topologies.</p>
152 <div class="image">
153 <img src="diagram.png" alt=""/>
47
48 <p><code>#include &lt;<a class="el" href="a00185_source.html">plugins.h</a>&gt;</code></p>
49 <table class="memberdecls">
50 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
51 Data Fields</h2></td></tr>
52 <tr class="memitem:aeca769840a6ff03e96462a9533adbccd"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00386.html#aeca769840a6ff03e96462a9533adbccd">phases</a></td></tr>
53 <tr class="separator:aeca769840a6ff03e96462a9533adbccd"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:aaa8eafe495aadd81c2e3c4ec527c10ba"><td class="memItemLeft" align="right" valign="top">unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00386.html#aaa8eafe495aadd81c2e3c4ec527c10ba">flags</a></td></tr>
55 <tr class="separator:aaa8eafe495aadd81c2e3c4ec527c10ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:ab8806f6db077f1bb2e9d63ec99223f7a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00386.html#ab8806f6db077f1bb2e9d63ec99223f7a">is_thissystem</a></td></tr>
57 <tr class="separator:ab8806f6db077f1bb2e9d63ec99223f7a"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:a2ea5bd36b7f06efdb65b98b32af16c68"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00386.html#a2ea5bd36b7f06efdb65b98b32af16c68">private_data</a></td></tr>
59 <tr class="separator:a2ea5bd36b7f06efdb65b98b32af16c68"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:a36c4fa86350525b46340c67b802c69c7"><td class="memItemLeft" align="right" valign="top">void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00386.html#a36c4fa86350525b46340c67b802c69c7">disable</a> )(struct <a class="el" href="a00386.html">hwloc_backend</a> *backend)</td></tr>
61 <tr class="separator:a36c4fa86350525b46340c67b802c69c7"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:accff2cd8404be43c3b44cec05e6f609b"><td class="memItemLeft" align="right" valign="top">int(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00386.html#accff2cd8404be43c3b44cec05e6f609b">discover</a> )(struct <a class="el" href="a00386.html">hwloc_backend</a> *backend, struct <a class="el" href="a00382.html">hwloc_disc_status</a> *status)</td></tr>
63 <tr class="separator:accff2cd8404be43c3b44cec05e6f609b"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 <tr class="memitem:aaac253491264c20930f44817270bc502"><td class="memItemLeft" align="right" valign="top">int(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00386.html#aaac253491264c20930f44817270bc502">get_pci_busid_cpuset</a> )(struct <a class="el" href="a00386.html">hwloc_backend</a> *backend, struct hwloc_pcidev_attr_s *busid, <a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> cpuset)</td></tr>
65 <tr class="separator:aaac253491264c20930f44817270bc502"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 </table>
67 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
68 <div class="textblock"><p>Discovery backend structure. </p>
69 <p>A backend is the instantiation of a discovery component. When a component gets enabled for a topology, its instantiate() callback creates a backend.</p>
70 <p><a class="el" href="a00240.html#gadb068565ab6043cbe4d16bfcce067a61" title="Allocate a backend structure, set good default values, initialize backend-&gt;component and topology,...">hwloc_backend_alloc()</a> initializes all fields to default values that the component may change (except "component" and "next") before enabling the backend with <a class="el" href="a00240.html#ga4715779d7191833e9b1a7490989a7497" title="Enable a previously allocated and setup backend.">hwloc_backend_enable()</a>.</p>
71 <p>Most backends assume that the topology is_thissystem flag is set because they talk to the underlying operating system. However they may still be used in topologies without the is_thissystem flag for debugging reasons. In practice, they are usually auto-disabled in such cases (excluded by xml or synthetic backends, or by environment variables when changing the Linux fsroot or the x86 cpuid path). </p>
72 </div><h2 class="groupheader">Field Documentation</h2>
73 <a id="a36c4fa86350525b46340c67b802c69c7"></a>
74 <h2 class="memtitle"><span class="permalink"><a href="#a36c4fa86350525b46340c67b802c69c7">&#9670;&nbsp;</a></span>disable</h2>
75
76 <div class="memitem">
77 <div class="memproto">
78 <table class="memname">
79 <tr>
80 <td class="memname">void(* hwloc_backend::disable) (struct <a class="el" href="a00386.html">hwloc_backend</a> *backend)</td>
81 </tr>
82 </table>
83 </div><div class="memdoc">
84
85 <p>Callback for freeing the private_data. May be NULL. </p>
86
15487 </div>
155 <p>It should be noted that for PU objects, the logical index &ndash; as computed linearly by hwloc &ndash; is not the same as the OS index.</p>
156 <p>The NUMA node is on the side because it is not part of the main tree but rather attached to the object that corresponds to its locality (the entire machine here, hence the root object). It is attached as a <em>Memory</em> child (in green) and has a virtual depth (negative). It could also have siblings if there were multiple local NUMA nodes, or cousins if other NUMA nodes were attached somewhere else in the machine.</p>
157 <p>I/O or Misc objects could be attached in a similar manner. </p>
158 </div></div><!-- contents -->
159 </div><!-- PageDoc -->
88 </div>
89 <a id="accff2cd8404be43c3b44cec05e6f609b"></a>
90 <h2 class="memtitle"><span class="permalink"><a href="#accff2cd8404be43c3b44cec05e6f609b">&#9670;&nbsp;</a></span>discover</h2>
91
92 <div class="memitem">
93 <div class="memproto">
94 <table class="memname">
95 <tr>
96 <td class="memname">int(* hwloc_backend::discover) (struct <a class="el" href="a00386.html">hwloc_backend</a> *backend, struct <a class="el" href="a00382.html">hwloc_disc_status</a> *status)</td>
97 </tr>
98 </table>
99 </div><div class="memdoc">
100
101 <p>Main discovery callback. returns -1 on error, either because it couldn't add its objects ot the existing topology, or because of an actual discovery/gathering failure. May be NULL. </p>
102
103 </div>
104 </div>
105 <a id="aaa8eafe495aadd81c2e3c4ec527c10ba"></a>
106 <h2 class="memtitle"><span class="permalink"><a href="#aaa8eafe495aadd81c2e3c4ec527c10ba">&#9670;&nbsp;</a></span>flags</h2>
107
108 <div class="memitem">
109 <div class="memproto">
110 <table class="memname">
111 <tr>
112 <td class="memname">unsigned long hwloc_backend::flags</td>
113 </tr>
114 </table>
115 </div><div class="memdoc">
116
117 <p>Backend flags, currently always 0. </p>
118
119 </div>
120 </div>
121 <a id="aaac253491264c20930f44817270bc502"></a>
122 <h2 class="memtitle"><span class="permalink"><a href="#aaac253491264c20930f44817270bc502">&#9670;&nbsp;</a></span>get_pci_busid_cpuset</h2>
123
124 <div class="memitem">
125 <div class="memproto">
126 <table class="memname">
127 <tr>
128 <td class="memname">int(* hwloc_backend::get_pci_busid_cpuset) (struct <a class="el" href="a00386.html">hwloc_backend</a> *backend, struct hwloc_pcidev_attr_s *busid, <a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84">hwloc_bitmap_t</a> cpuset)</td>
129 </tr>
130 </table>
131 </div><div class="memdoc">
132
133 <p>Callback to retrieve the locality of a PCI object. Called by the PCI core when attaching PCI hierarchy to CPU objects. May be NULL. </p>
134
135 </div>
136 </div>
137 <a id="ab8806f6db077f1bb2e9d63ec99223f7a"></a>
138 <h2 class="memtitle"><span class="permalink"><a href="#ab8806f6db077f1bb2e9d63ec99223f7a">&#9670;&nbsp;</a></span>is_thissystem</h2>
139
140 <div class="memitem">
141 <div class="memproto">
142 <table class="memname">
143 <tr>
144 <td class="memname">int hwloc_backend::is_thissystem</td>
145 </tr>
146 </table>
147 </div><div class="memdoc">
148
149 <p>Backend-specific 'is_thissystem' property. Set to 0 if the backend disables the thissystem flag for this topology (e.g. loading from xml or synthetic string, or using a different fsroot on Linux, or a x86 CPUID dump). Set to -1 if the backend doesn't care (default). </p>
150
151 </div>
152 </div>
153 <a id="aeca769840a6ff03e96462a9533adbccd"></a>
154 <h2 class="memtitle"><span class="permalink"><a href="#aeca769840a6ff03e96462a9533adbccd">&#9670;&nbsp;</a></span>phases</h2>
155
156 <div class="memitem">
157 <div class="memproto">
158 <table class="memname">
159 <tr>
160 <td class="memname">unsigned hwloc_backend::phases</td>
161 </tr>
162 </table>
163 </div><div class="memdoc">
164
165 <p>Discovery phases performed by this component, possibly without some of them if excluded by other components. OR'ed set of <a class="el" href="a00240.html#ga600bba1a62022d5f516800649b1edb61" title="Discovery phase.">hwloc_disc_phase_t</a>. </p>
166
167 </div>
168 </div>
169 <a id="a2ea5bd36b7f06efdb65b98b32af16c68"></a>
170 <h2 class="memtitle"><span class="permalink"><a href="#a2ea5bd36b7f06efdb65b98b32af16c68">&#9670;&nbsp;</a></span>private_data</h2>
171
172 <div class="memitem">
173 <div class="memproto">
174 <table class="memname">
175 <tr>
176 <td class="memname">void* hwloc_backend::private_data</td>
177 </tr>
178 </table>
179 </div><div class="memdoc">
180
181 <p>Backend private data, or NULL if none. </p>
182
183 </div>
184 </div>
185 <hr/>The documentation for this struct was generated from the following file:<ul>
186 <li><a class="el" href="a00185_source.html">plugins.h</a></li>
187 </ul>
188 </div><!-- contents -->
160189 <!-- start footer part -->
161190 <hr class="footer"/><address class="footer"><small>
162191 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
+0
-137
doc/doxygen-doc/html/a00387.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Command-Line Tools</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="PageDoc"><div class="header">
41 <div class="headertitle">
42 <div class="title">Command-Line Tools </div> </div>
43 </div><!--header-->
44 <div class="contents">
45 <div class="textblock"><p>
46 <div class="section">
47 </p>
48 <p>hwloc comes with an extensive C programming interface and several command line utilities. Each of them is fully documented in its own manual page; the following is a summary of the available command line tools.</p>
49 <p>
50 </div><div class="section" id="cli_lstopo">
51 </p>
52 <h1><a class="anchor" id="cli_lstopo"></a>
53 lstopo and lstopo-no-graphics</h1>
54 <p>lstopo (also known as hwloc-ls) displays the hierarchical topology map of the current system. The output may be graphical, ascii-art or textual, and can also be exported to numerous file formats such as PDF, PNG, XML, and others. Advanced graphical outputs require the "Cairo" development package (usually <code>cairo-devel</code> or <code>libcairo2-dev</code>).</p>
55 <p>lstopo and lstopo-no-graphics accept the same command-line options. However, graphical outputs are only available in lstopo. Textual outputs (those that do not depend on heavy external libraries such as Cairo) are supported in both lstopo and lstopo-no-graphics.</p>
56 <p>This command can also display the processes currently bound to a part of the machine (via the <code>--ps</code> option).</p>
57 <p>Note that lstopo can read XML files and/or alternate chroot filesystems and display topological maps representing those systems (e.g., use lstopo to output an XML file on one system, and then use lstopo to read in that XML file and display it on a different system).</p>
58 <p>
59 </div><div class="section" id="cli_hwloc_bind">
60 </p>
61 <h1><a class="anchor" id="cli_hwloc_bind"></a>
62 hwloc-bind</h1>
63 <p>hwloc-bind binds processes to specific hardware objects through a flexible syntax. A simple example is binding an executable to specific cores (or packages or bitmaps or ...). The hwloc-bind(1) man page provides much more detail on what is possible.</p>
64 <p>hwloc-bind can also be used to retrieve the current process' binding, or retrieve the last CPU(s) where a process ran, or operate on memory binding.</p>
65 <p>Just like hwloc-calc, the input locations given to hwloc-bind may be either objects or cpusets (bitmaps as reported by hwloc-calc or hwloc-distrib).</p>
66 <p>
67 </div><div class="section" id="cli_hwloc_calc">
68 </p>
69 <h1><a class="anchor" id="cli_hwloc_calc"></a>
70 hwloc-calc</h1>
71 <p>hwloc-calc is hwloc's Swiss Army Knife command-line tool for converting things. The input may be either objects or cpusets (bitmaps as reported by another hwloc-calc instance or by hwloc-distrib), that may be combined by addition, intersection or subtraction. The output kinds include: </p><ul>
72 <li>
73 a cpuset bitmap: This compact opaque representation of objects is useful for shell scripts etc. It may passed to hwloc command-line tools such as hwloc-calc or hwloc-bind, or to hwloc command-line options such as <code>lstopo --restrict</code>. </li>
74 <li>
75 the amount of the equivalent hwloc objects from a specific type, or the list of their indexes. This is useful for iterating over all similar objects (for instance all cores) within a given part of a platform. </li>
76 <li>
77 a hierarchical description of objects, for instance a thread index within a core within a package. This gives a better view of the actual location of an object. </li>
78 </ul>
79 <p>Moreover, input and/or output may be use either physical/OS object indexes or as hwloc's logical object indexes. It eases cooperation with external tools such as taskset or numactl by exporting hwloc specifications into list of processor or NUMA node physical indexes. See also <a class="el" href="a00400.html#faq_indexes">Should I use logical or physical/OS indexes? and how?</a>.</p>
80 <p>
81 </div><div class="section" id="cli_hwloc_info">
82 </p>
83 <h1><a class="anchor" id="cli_hwloc_info"></a>
84 hwloc-info</h1>
85 <p>hwloc-info dumps information about the given objects, as well as all its specific attributes. It is intended to be used with tools such as grep for filtering certain attribute lines. When no object is specified, or when <code>--topology</code> is passed, hwloc-info prints a summary of the topology. When <code>--support</code> is passed, hwloc-info lists the supported features for the topology.</p>
86 <p>
87 </div><div class="section" id="cli_hwloc_distrib">
88 </p>
89 <h1><a class="anchor" id="cli_hwloc_distrib"></a>
90 hwloc-distrib</h1>
91 <p>hwloc-distrib generates a set of cpuset bitmaps that are uniformly distributed across the machine for the given number of processes. These strings may be used with hwloc-bind to run processes to maximize their memory bandwidth by properly distributing them across the machine.</p>
92 <p>
93 </div><div class="section" id="cli_hwloc_ps">
94 </p>
95 <h1><a class="anchor" id="cli_hwloc_ps"></a>
96 hwloc-ps</h1>
97 <p>hwloc-ps is a tool to display the bindings of processes that are currently running on the local machine. By default, hwloc-ps only lists processes that are bound; unbound process (and Linux kernel threads) are not displayed.</p>
98 <p>
99 </div><div class="section" id="cli_hwloc_annotate">
100 </p>
101 <h1><a class="anchor" id="cli_hwloc_annotate"></a>
102 hwloc-annotate</h1>
103 <p>hwloc-annotate may modify object (and topology) attributes such as string information (see <a class="el" href="a00392.html#attributes_info">Custom string infos</a> for details) or Misc children objects. It may also add distances, memory attributes, etc. to the topology. It reads an input topology from a XML file and outputs the annotated topology as another XML file.</p>
104 <p>
105 </div><div class="section" id="cli_hwloc_diffpatchcompress">
106 </p>
107 <h1><a class="anchor" id="cli_hwloc_diffpatchcompress"></a>
108 hwloc-diff, hwloc-patch and hwloc-compress-dir</h1>
109 <p>hwloc-diff computes the difference between two topologies and outputs it to another XML file.</p>
110 <p>hwloc-patch reads such a difference file and applies to another topology.</p>
111 <p>hwloc-compress-dir compresses an entire directory of XML files by using hwloc-diff to save the differences between topologies instead of entire topologies.</p>
112 <p>
113 </div><div class="section" id="cli_hwloc_dump_hwdata">
114 </p>
115 <h1><a class="anchor" id="cli_hwloc_dump_hwdata"></a>
116 hwloc-dump-hwdata</h1>
117 <p>hwloc-dump-hwdata is a Linux and x86-specific tool that dumps (during boot, privileged) some topology and locality information from raw hardware files (SMBIOS and ACPI tables) to human-readable and world-accessible files that the hwloc library will later reuse.</p>
118 <p>Currently only used on Intel Xeon Phi processor platforms. See <a class="el" href="a00400.html#faq_knl_dump">Why do I need hwloc-dump-hwdata for memory on Intel Xeon Phi processor?</a>.</p>
119 <p>See <code>HWLOC_DUMPED_HWDATA_DIR</code> in <a class="el" href="a00388.html">Environment Variables</a> for details about the location of dumped files.</p>
120 <p>
121 </div><div class="section" id="cli_hwloc_gather">
122 </p>
123 <h1><a class="anchor" id="cli_hwloc_gather"></a>
124 hwloc-gather-topology and hwloc-gather-cpuid</h1>
125 <p>hwloc-gather-topology is a Linux-specific tool that saves the relevant topology files of the current machine into a tarball (and the corresponding lstopo outputs).</p>
126 <p>hwloc-gather-cpuid is a x86-specific tool that dumps the result of CPUID instructions on the current machine into a directory.</p>
127 <p>The output of hwloc-gather-cpuid is included in the tarball saved by hwloc-gather-topology when running on Linux/x86.</p>
128 <p>These files may be used later (possibly offline) for simulating or debugging a machine without actually running on it. </p>
129 </div></div><!-- contents -->
130 </div><!-- PageDoc -->
131 <!-- start footer part -->
132 <hr class="footer"/><address class="footer"><small>
133 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
134 </small></address>
135 </body>
136 </html>
+0
-188
doc/doxygen-doc/html/a00388.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Environment Variables</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="PageDoc"><div class="header">
41 <div class="headertitle">
42 <div class="title">Environment Variables </div> </div>
43 </div><!--header-->
44 <div class="contents">
45 <div class="textblock"><p>
46 <div class="section">
47 </p>
48 <p>The behavior of the hwloc library and tools may be tuned thanks to the following environment variables.</p>
49 <dl>
50 <dt>HWLOC_XMLFILE=/path/to/file.xml </dt>
51 <dd><p class="startdd">enforces the discovery from the given XML file as if <a class="el" href="a00198.html#ga879439b7ee99407ee911b3ac64e9a25e" title="Enable XML-file based topology.">hwloc_topology_set_xml()</a> had been called. This file may have been generated earlier with lstopo file.xml. For convenience, this backend provides empty binding hooks which just return success. To have hwloc still actually call OS-specific hooks, HWLOC_THISSYSTEM should be set 1 in the environment too, to assert that the loaded file is really the underlying system. See also <a class="el" href="a00394.html">Importing and exporting topologies from/to XML files</a>. </p>
52 <p class="enddd"></p>
53 </dd>
54 <dt>HWLOC_SYNTHETIC=synthetic_description </dt>
55 <dd><p class="startdd">enforces the discovery through a synthetic description string as if <a class="el" href="a00198.html#ga4fab186bb6181a00bcf585825fddd38d" title="Enable synthetic topology.">hwloc_topology_set_synthetic()</a> had been called. For convenience, this backend provides empty binding hooks which just return success. See also <a class="el" href="a00395.html">Synthetic topologies</a>. </p>
56 <p class="enddd"></p>
57 </dd>
58 <dt>HWLOC_XML_VERBOSE=1 </dt>
59 <dd></dd>
60 <dt>HWLOC_SYNTHETIC_VERBOSE=1 </dt>
61 <dd><p class="startdd">enables verbose messages in the XML or synthetic topology backends. hwloc XML backends (see <a class="el" href="a00394.html">Importing and exporting topologies from/to XML files</a>) can emit some error messages to the error output stream. Enabling these verbose messages within hwloc can be useful for understanding failures to parse input XML topologies. Similarly, enabling verbose messages in the synthetic topology backend can help understand why the description string is invalid. See also <a class="el" href="a00395.html">Synthetic topologies</a>. </p>
62 <p class="enddd"></p>
63 </dd>
64 <dt>HWLOC_THISSYSTEM=1 </dt>
65 <dd><p class="startdd">enforces the return value of <a class="el" href="a00199.html#ga68ffdcfd9175cdf40709801092f18017" title="Does the topology context come from this system?">hwloc_topology_is_thissystem()</a>, as if <a class="el" href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b" title="Assume that the selected backend provides the topology for the system on which we are running.">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a> was set with <a class="el" href="a00199.html#gaaeed4df656979e5f16befea9d29b814b" title="Set OR&#39;ed flags to non-yet-loaded topology.">hwloc_topology_set_flags()</a>. It means that it makes hwloc assume that the selected backend provides the topology for the system on which we are running, even if it is not the OS-specific backend but the XML backend for instance. This means making the binding functions actually call the OS-specific system calls and really do binding, while the XML backend would otherwise provide empty hooks just returning success. This can be used for efficiency reasons to first detect the topology once, save it to a XML file, and quickly reload it later through the XML backend, but still having binding functions actually do bind. This also enables support for the variable HWLOC_THISSYSTEM_ALLOWED_RESOURCES. </p>
66 <p class="enddd"></p>
67 </dd>
68 <dt>HWLOC_THISSYSTEM_ALLOWED_RESOURCES=1 </dt>
69 <dd><p class="startdd">Get the set of allowed resources from the native operating system even if the topology was loaded from XML or synthetic description, as if <a class="el" href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdea1b66bbd66e900e5c837f71defb32ad89" title="Get the set of allowed resources from the local operating system even if the topology was loaded from...">HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES</a> was set with <a class="el" href="a00199.html#gaaeed4df656979e5f16befea9d29b814b" title="Set OR&#39;ed flags to non-yet-loaded topology.">hwloc_topology_set_flags()</a>. This variable requires the topology to match the current system (see the variable HWLOC_THISSYSTEM). This is useful when the topology is not loaded directly from the local machine (e.g. for performance reason) and it comes with all resources, but the running process is restricted to only a part of the machine (for instance because of Linux Cgroup/Cpuset). </p>
70 <p class="enddd"></p>
71 </dd>
72 <dt>HWLOC_ALLOW=all </dt>
73 <dd><p class="startdd">Totally ignore administrative restrictions such as Linux Cgroups and consider all resources (PUs and NUMA nodes) as allowed. This is different from setting HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED which gathers all resources but marks the unavailable ones as disallowed. </p>
74 <p class="enddd"></p>
75 </dd>
76 <dt>HWLOC_HIDE_ERRORS=0 </dt>
77 <dd><p class="startdd">enables or disables verbose reporting of errors. The hwloc library may issue warnings to the standard error stream when it detects a problem during topology discovery, for instance if the operating system (or user) gives contradictory topology information. Setting this environment variable to 1 removes the actual displaying of these error messages. </p>
78 <p class="enddd"></p>
79 </dd>
80 <dt>HWLOC_USE_NUMA_DISTANCES=7 </dt>
81 <dd><p class="startdd">enables or disables the use of NUMA distances. NUMA distances and memory target/initiator information may be used to improve the locality of NUMA nodes, especially CPU-less nodes. Bits in the value of this environment variable enable different features: Bit 0 enables the gathering of NUMA distances from the operating system. Bit 1 further enables the use of NUMA distances to improve the locality of CPU-less nodes. Bit 2 enables the use of target/initiator information. </p>
82 <p class="enddd"></p>
83 </dd>
84 <dt>HWLOC_GROUPING=1 </dt>
85 <dd><p class="startdd">enables or disables objects grouping based on distances. By default, hwloc uses distance matrices between objects (either read from the OS or given by the user) to find groups of close objects. These groups are described by adding intermediate Group objects in the topology. Setting this environment variable to 0 will disable this grouping. This variable supersedes the obsolete HWLOC_IGNORE_DISTANCES variable. </p>
86 <p class="enddd"></p>
87 </dd>
88 <dt>HWLOC_GROUPING_ACCURACY=0.05 </dt>
89 <dd><p class="startdd">relaxes distance comparison during grouping. By default, objects may be grouped if their distances form a minimal distance graph. When setting this variable to 0.02, and when <a class="el" href="a00216.html#gga22428b6bab271411e3834e6b4ca22e37a5233ccf631c3bc53dd5c3e7a5d5c9b77" title="If grouping, consider the distance values as inaccurate and relax the comparisons during the grouping...">HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE</a> is given, these distances do not have to be strictly equal anymore, they may just be equal with a 2% error. If set to <code>try</code> instead of a numerical value, hwloc will try to group with perfect accuracy (0, the default), then with 0.01, 0.02, 0.05 and finally 0.1. Numbers given in this environment variable should always use a dot as a decimal mark (for instance 0.01 instead of 0,01).</p>
90 <p class="enddd"></p>
91 </dd>
92 <dt>HWLOC_GROUPING_VERBOSE=0 </dt>
93 <dd><p class="startdd">enables or disables some verbose messages during grouping. If this variable is set to 1, some debug messages will be displayed during distance-based grouping of objects even if debug was not specific at configure time. This is useful when trying to find an interesting distance grouping accuracy.</p>
94 <p class="enddd"></p>
95 </dd>
96 <dt>HWLOC_CPUKINDS_RANKING=default </dt>
97 <dd><p class="startdd">change the ranking policy for CPU kinds. By default, the OS-provided efficiency is used for ranking. If not available, the frequency is used on ARM processors, or core type and frequency on other architectures. <br />
98 This environment variable may be set to <code>coretype+frequency</code>, <code>coretype</code>, <code>frequency</code>, <code>frequency_base</code>, <code>frequency_max</code>, <code>forced_efficiency</code>, <code>no_forced_efficiency</code>, <code>default</code>, or <code>none</code>. </p>
99 <p class="enddd"></p>
100 </dd>
101 <dt>HWLOC_PCI_LOCALITY=&lt;domain/bus&gt; &lt;cpuset&gt;;... </dt>
102 <dd></dd>
103 <dt>HWLOC_PCI_LOCALITY=/path/to/pci/locality/file </dt>
104 <dd><p class="startdd">changes the locality of I/O devices behing the specified PCI buses. If no I/O locality information is available or if the BIOS reports incorrect information, it is possible to move a I/O device tree (OS and/or PCI devices with optional bridges) near a custom set of processors. <br />
105 Localities are given either inside the environment variable itself, or in the pointed file. They may be separated either by semi-colons or by line-breaks. <br />
106 Each locality contains a domain/bus specification (in hexadecimal numbers as usual) followed by a whitespace and a cpuset: </p><ul>
107 <li>
108 <code>0001 &lt;cpuset&gt;</code> specifies the locality of all buses in PCI domain 0000. </li>
109 <li>
110 <code>0000:0f &lt;cpuset&gt;</code> specifies only PCI bus 0f in domain 0000. </li>
111 <li>
112 <code>0002:04-0a &lt;cpuset&gt;</code> specifies a range of buses (from 04 to 0a) within domain 0002. </li>
113 </ul>
114 <p>Domain/bus specifications should usually match entire hierarchies of buses behind a bridge (including primary, secondary and subordinate buses). For instance, if hostbridge 0000:00 is above other bridges/switches with buses 0000:01 to 0000:09, the variable should be HWLOC_PCI_LOCALITY="0000:00-09 &lt;cpuset&gt;". It supersedes the old HWLOC_PCI_0000_00_LOCALCPUS=&lt;cpuset&gt; which only works when hostbridges exist in the topology. <br />
115 If the variable is defined to empty or invalid, no forced PCI locality is applied but hwloc's internal automatic locality quirks are disabled, which means the exact PCI locality reported by the platform is used. </p>
116 <p class="enddd"></p>
117 </dd>
118 <dt>HWLOC_X86_TOPOEXT_NUMANODES=0 </dt>
119 <dd><p class="startdd">use AMD topoext CPUID leaf in the x86 backend to detect NUMA nodes. When using the x86 backend, setting this variable to 1 enables the building of NUMA nodes from AMD processor CPUID instructions. However this strategy does not always reflect BIOS configuration such as NUMA interleaving. And node indexes may be different from those of the operating system. Hence this should only be used when OS backends are wrong and the user is sure that CPUID returns correct NUMA information. </p>
120 <p class="enddd"></p>
121 </dd>
122 <dt>HWLOC_KEEP_NVIDIA_GPU_NUMA_NODES=0 </dt>
123 <dd><p class="startdd">show or hide NUMA nodes that correspond to NVIDIA GPU memory. By default they are ignored to avoid interleaved memory being allocated on GPU by mistake. Setting this environment variable to 1 exposes these NUMA nodes. They may be recognized by the <em>GPUMemory</em> subtype. They also have a <em>PCIBusID</em> info attribute to identify the corresponding GPU. </p>
124 <p class="enddd"></p>
125 </dd>
126 <dt>HWLOC_KNL_MSCACHE_L3=0 </dt>
127 <dd><p class="startdd">Expose the KNL MCDRAM in cache mode as a Memory-side Cache instead of a L3. hwloc releases prior to 2.1 exposed the MCDRAM cache as a CPU-side L3 cache. Now that Memory-side caches are supported by hwloc, it is still exposed as a L3 by default to avoid breaking existing applications. Setting this environment variable to 1 will expose it as a proper Memory-side cache. </p>
128 <p class="enddd"></p>
129 </dd>
130 <dt>HWLOC_ANNOTATE_GLOBAL_COMPONENTS=0 </dt>
131 <dd><p class="startdd">Allow components to annotate the topology even if they are usually excluded by global components by default. Setting this variable to 1 and also setting <code>HWLOC_COMPONENTS=xml,pci,stop</code> enables the addition of PCI vendor and model info attributes to a XML topology that was generated without those names (if pciaccess was missing). </p>
132 <p class="enddd"></p>
133 </dd>
134 <dt>HWLOC_FSROOT=/path/to/linux/filesystem-root/ </dt>
135 <dd><p class="startdd">switches to reading the topology from the specified Linux filesystem root instead of the main file-system root. This directory may have been saved previously from another machine with <code>hwloc-gather-topology</code>. <br />
136 One should likely also set <code>HWLOC_COMPONENTS=linux,stop</code> so that non-Linux backends are disabled (the <code>-i</code> option of command-line tools takes care of both). <br />
137 Not using the main file-system root causes <a class="el" href="a00199.html#ga68ffdcfd9175cdf40709801092f18017" title="Does the topology context come from this system?">hwloc_topology_is_thissystem()</a> to return 0. For convenience, this backend provides empty binding hooks which just return success. To have hwloc still actually call OS-specific hooks, HWLOC_THISSYSTEM should be set 1 in the environment too, to assert that the loaded file is really the underlying system. </p>
138 <p class="enddd"></p>
139 </dd>
140 <dt>HWLOC_CPUID_PATH=/path/to/cpuid/ </dt>
141 <dd><p class="startdd">forces the x86 backend to read dumped CPUIDs from the given directory instead of executing actual x86 CPUID instructions. This directory may have been saved previously from another machine with <code>hwloc-gather-cpuid</code>. <br />
142 One should likely also set <code>HWLOC_COMPONENTS=x86,stop</code> so that non-x86 backends are disabled (the <code>-i</code> option of command-line tools takes care of both). <br />
143 It causes <a class="el" href="a00199.html#ga68ffdcfd9175cdf40709801092f18017" title="Does the topology context come from this system?">hwloc_topology_is_thissystem()</a> to return 0. For convenience, this backend provides empty binding hooks which just return success. To have hwloc still actually call OS-specific hooks, HWLOC_THISSYSTEM should be set 1 in the environment too, to assert that the loaded CPUID dump is really the underlying system. </p>
144 <p class="enddd"></p>
145 </dd>
146 <dt>HWLOC_DUMPED_HWDATA_DIR=/path/to/dumped/files/ </dt>
147 <dd><p class="startdd">loads files dumped by <code>hwloc-dump-hwdata</code> (on Linux) from the given directory. The default dump/load directory is configured during build based on --runstatedir, --localstatedir, and --prefix options. It usually points to <code>/var/run/hwloc/</code> in Linux distribution packages, but it may also point to <code>$prefix/var/run/hwloc/</code> when manually installing and only specifying --prefix. </p>
148 <p class="enddd"></p>
149 </dd>
150 <dt>HWLOC_COMPONENTS=list,of,components </dt>
151 <dd><p class="startdd">forces a list of components to enable or disable. Enable or disable the given comma-separated list of components (if they do not conflict with each other). Component names prefixed with <code>-</code> are disabled (a single phase may also be disabled).</p>
152 <p class="interdd">Once the end of the list is reached, hwloc falls back to enabling the remaining components (sorted by priority) that do not conflict with the already enabled ones, and unless explicitly disabled in the list. If <code>stop</code> is met, the enabling loop immediately stops, no more component is enabled.</p>
153 <p class="interdd">If <code>xml</code> or <code>synthetic</code> components are selected, the corresponding XML filename or synthetic description string should be pass in <code>HWLOC_XMLFILE</code> or <code>HWLOC_SYNTHETIC</code> respectively.</p>
154 <p class="interdd">Since this variable is the low-level and more generic way to select components, it takes precedence over environment variables for selecting components.</p>
155 <p class="interdd">If the variable is set to an empty string (or set to a single comma), no specific component is loaded first, all components are loaded in priority order.</p>
156 <p class="interdd">See <a class="el" href="a00398.html#plugins_select">Selecting which components to use</a> for details. </p>
157 <p class="enddd"></p>
158 </dd>
159 <dt>HWLOC_COMPONENTS_VERBOSE=1 </dt>
160 <dd><p class="startdd">displays verbose information about components. Display messages when components are registered or enabled. This is the recommended way to list the available components with their priority (all of them are <em>registered</em> at startup). </p>
161 <p class="enddd"></p>
162 </dd>
163 <dt>HWLOC_PLUGINS_PATH=/path/to/hwloc/plugins/:... </dt>
164 <dd><p class="startdd">changes the default search directory for plugins. By default, <code>$libdir/hwloc</code> is used. The variable may contain several colon-separated directories. </p>
165 <p class="enddd"></p>
166 </dd>
167 <dt>HWLOC_PLUGINS_VERBOSE=1 </dt>
168 <dd><p class="startdd">displays verbose information about plugins. List which directories are scanned, which files are loaded, and which components are successfully loaded. </p>
169 <p class="enddd"></p>
170 </dd>
171 <dt>HWLOC_PLUGINS_BLACKLIST=filename1,filename2,... </dt>
172 <dd><p class="startdd">prevents plugins from being loaded if their filename (without path) is listed. Plugin filenames may be found in verbose messages outputted when HWLOC_PLUGINS_VERBOSE=1. </p>
173 <p class="enddd"></p>
174 </dd>
175 <dt>HWLOC_DEBUG_VERBOSE=0 </dt>
176 <dd><p class="startdd">disables all verbose messages that are enabled by default when <code>&ndash;enable-debug</code> is passed to configure. When set to more than 1, even more verbose messages are displayed. The default is 1. </p>
177 <p class="enddd"></p>
178 </dd>
179 </dl>
180 </div></div><!-- contents -->
181 </div><!-- PageDoc -->
182 <!-- start footer part -->
183 <hr class="footer"/><address class="footer"><small>
184 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
185 </small></address>
186 </body>
187 </html>
+0
-70
doc/doxygen-doc/html/a00389.html less more
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): CPU and Memory Binding Overview</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="PageDoc"><div class="header">
41 <div class="headertitle">
42 <div class="title">CPU and Memory Binding Overview </div> </div>
43 </div><!--header-->
44 <div class="contents">
45 <div class="textblock"><p>
46 <div class="section">
47 </p>
48 <p>Some operating systems do not systematically provide separate functions for CPU and memory binding. This means that CPU binding functions may have have effects on the memory binding policy. Likewise, changing the memory binding policy may change the CPU binding of the current thread. This is often not a problem for applications, so by default hwloc will make use of these functions when they provide better binding support.</p>
49 <p>If the application does not want the CPU binding to change when changing the memory policy, it needs to use the <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2aad6b9eaf2ee324ca58dc8f58094b9997" title="Avoid any effect on CPU binding.">HWLOC_MEMBIND_NOCPUBIND</a> flag to prevent hwloc from using OS functions which would change the CPU binding. Additionally, <a class="el" href="a00196.html#gga217dc8d373f8958cc93c154ebce1c71ca41ce440443cc3087caed95ab60edcad6" title="Avoid any effect on memory binding.">HWLOC_CPUBIND_NOMEMBIND</a> can be passed to CPU binding function to prevent hwloc from using OS functions would change the memory binding policy. Of course, using these flags will reduce hwloc's overall support for binding, so their use is discouraged.</p>
50 <p>One can avoid using these flags but still closely control both memory and CPU binding by allocating memory, touching each page in the allocated memory, and then changing the CPU binding. The already-really-allocated memory will then be "locked" to physical memory and will not be migrated. Thus, even if the memory binding policy gets changed by the CPU binding order, the already-allocated memory will not change with it. When binding and allocating further memory, the CPU binding should be performed again in case the memory binding altered the previously-selected CPU binding.</p>
51 <p>Not all operating systems support the notion of a "current" memory binding policy for the current process, but such operating systems often still provide a way to allocate data on a given node set. Conversely, some operating systems support the notion of a "current" memory binding policy and do not permit allocating data on a specific node set without changing the current policy and allocate the data. To provide the most powerful coverage of these facilities, hwloc provides:</p>
52 <ul>
53 <li>
54 functions that set/get the current memory binding policies (if supported): hwloc_set/get_membind() and hwloc_set/get_proc_membind() </li>
55 <li>
56 a function that allocates memory bound to specific node set without changing the current memory binding policy (if supported): <a class="el" href="a00197.html#ga04736461780fadcf193af218c0122273" title="Allocate some memory on NUMA memory nodes specified by set.">hwloc_alloc_membind()</a>. </li>
57 <li>
58 a helper which, if needed, changes the current memory binding policy of the process in order to obtain memory binding: <a class="el" href="a00197.html#gab1b77b8408bacaf03c7e8878f7577922" title="Allocate some memory on NUMA memory nodes specified by set.">hwloc_alloc_membind_policy()</a>. </li>
59 </ul>
60 <p>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.</p>
61 <p>See <a class="el" href="a00196.html">CPU binding</a> and <a class="el" href="a00197.html">Memory binding</a> for hwloc's API functions regarding CPU and memory binding, respectively. There are some examples under doc/examples/ in the source tree. </p>
62 </div></div><!-- contents -->
63 </div><!-- PageDoc -->
64 <!-- start footer part -->
65 <hr class="footer"/><address class="footer"><small>
66 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
67 </small></address>
68 </body>
69 </html>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): I/O Devices</title>
7 <title>Hardware Locality (hwloc): hwloc_component Struct Reference</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3737 /* @license-end */</script>
3838 <div id="main-nav"></div>
3939 </div><!-- top -->
40 <div class="PageDoc"><div class="header">
40 <div class="header">
41 <div class="summary">
42 <a href="#pub-attribs">Data Fields</a> </div>
4143 <div class="headertitle">
42 <div class="title">I/O Devices </div> </div>
44 <div class="title">hwloc_component Struct Reference<div class="ingroups"><a class="el" href="a00241.html">Components and Plugins: Generic components</a></div></div> </div>
4345 </div><!--header-->
4446 <div class="contents">
45 <div class="textblock"><p>
46 <div class="section">
47 </p>
48 <p>hwloc usually manipulates processing units and memory but it can also discover I/O devices and report their locality as well. This is useful for placing I/O intensive applications on cores near the I/O devices they use, or for gathering information about all platform components.</p>
49 <p>
50 </div><div class="section" id="iodevices_enabling">
51 </p>
52 <h1><a class="anchor" id="iodevices_enabling"></a>
53 Enabling and requirements</h1>
54 <p>I/O discovery is disabled by default (except in lstopo) for performance reasons. It can be enabled by changing the filtering of I/O object types to <code><a class="el" href="a00199.html#gga9a5a1f0140cd1952544477833733195ba63fd24954e18c83ff7eae9588759adb5" title="Only keep likely-important objects of the given type.">HWLOC_TYPE_FILTER_KEEP_IMPORTANT</a></code> or <code><a class="el" href="a00199.html#gga9a5a1f0140cd1952544477833733195bafda7b59e6810dfe778d8f9a4cc1e350e" title="Keep all objects of this type.">HWLOC_TYPE_FILTER_KEEP_ALL</a></code> before loading the topology, for instance with <code><a class="el" href="a00199.html#ga0ab38705357bc1203abe829da8a12ad3" title="Set the filtering for all I/O object types.">hwloc_topology_set_io_types_filter()</a></code>.</p>
55 <p>Note that I/O discovery requires significant help from the operating system. The pciaccess library (the development package is usually <code>libpciaccess-devel</code> or <code>libpciaccess-dev</code>) is needed to fully detect PCI devices and bridges/switches. On Linux, PCI discovery may still be performed even if <code>libpciaccess</code> cannot be used. But it misses PCI device names. Moreover, some operating systems require privileges for probing PCI devices, see <a class="el" href="a00400.html#faq_privileged">Does hwloc require privileged access?</a> for details.</p>
56 <p>The actual locality of I/O devices is only currently detected on Linux. Other operating system will just report I/O devices as being attached to the topology root object.</p>
57 <p>
58 </div><div class="section" id="iodevices_objects">
59 </p>
60 <h1><a class="anchor" id="iodevices_objects"></a>
61 I/O objects</h1>
62 <p>When I/O discovery is enabled and supported, some additional objects are added to the topology. The corresponding I/O object types are: </p><ul>
63 <li>
64 <code><a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075" title="Operating system device (filtered out by default).">HWLOC_OBJ_OS_DEVICE</a></code> describes an operating-system-specific handle such as the <em>sda</em> drive or the <em>eth0</em> network interface. See <a class="el" href="a00390.html#iodevices_osdev">OS devices</a>. </li>
65 <li>
66 <code><a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9" title="PCI device (filtered out by default).">HWLOC_OBJ_PCI_DEVICE</a></code> and <code><a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0" title="Bridge (filtered out by default). Any bridge (or PCI switch) that connects the host or an I/O bus,...">HWLOC_OBJ_BRIDGE</a></code> build up a PCI hierarchy made of bridges (that may be actually be switches) and devices. See <a class="el" href="a00390.html#iodevices_pci">PCI devices and bridges</a>. </li>
47
48 <p><code>#include &lt;<a class="el" href="a00185_source.html">plugins.h</a>&gt;</code></p>
49 <table class="memberdecls">
50 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-attribs"></a>
51 Data Fields</h2></td></tr>
52 <tr class="memitem:a3250bd6fc9713946991d805e48091b2e"><td class="memItemLeft" align="right" valign="top">unsigned&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00390.html#a3250bd6fc9713946991d805e48091b2e">abi</a></td></tr>
53 <tr class="separator:a3250bd6fc9713946991d805e48091b2e"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:aea613546886d9b8221cadba920fe3ebc"><td class="memItemLeft" align="right" valign="top">int(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00390.html#aea613546886d9b8221cadba920fe3ebc">init</a> )(unsigned long <a class="el" href="a00390.html#ab8043c5b4cc0e81aabba586ccb194335">flags</a>)</td></tr>
55 <tr class="separator:aea613546886d9b8221cadba920fe3ebc"><td class="memSeparator" colspan="2">&#160;</td></tr>
56 <tr class="memitem:a4612015451a1c706e8ba19114cb8baae"><td class="memItemLeft" align="right" valign="top">void(*&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00390.html#a4612015451a1c706e8ba19114cb8baae">finalize</a> )(unsigned long <a class="el" href="a00390.html#ab8043c5b4cc0e81aabba586ccb194335">flags</a>)</td></tr>
57 <tr class="separator:a4612015451a1c706e8ba19114cb8baae"><td class="memSeparator" colspan="2">&#160;</td></tr>
58 <tr class="memitem:a789208ada7e17492cfd3a5a88a6bb0ee"><td class="memItemLeft" align="right" valign="top"><a class="el" href="a00241.html#ga31a5a455f4e666b936f0a9e8fb9a0f47">hwloc_component_type_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00390.html#a789208ada7e17492cfd3a5a88a6bb0ee">type</a></td></tr>
59 <tr class="separator:a789208ada7e17492cfd3a5a88a6bb0ee"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:ab8043c5b4cc0e81aabba586ccb194335"><td class="memItemLeft" align="right" valign="top">unsigned long&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00390.html#ab8043c5b4cc0e81aabba586ccb194335">flags</a></td></tr>
61 <tr class="separator:ab8043c5b4cc0e81aabba586ccb194335"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:a4b8cffd1d943c29fdc102b841b8598d4"><td class="memItemLeft" align="right" valign="top">void *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="a00390.html#a4b8cffd1d943c29fdc102b841b8598d4">data</a></td></tr>
63 <tr class="separator:a4b8cffd1d943c29fdc102b841b8598d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 </table>
65 <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
66 <div class="textblock"><p>Generic component structure. </p>
67 <p>Generic components structure, either statically listed by configure in static-components.h or dynamically loaded as a plugin. </p>
68 </div><h2 class="groupheader">Field Documentation</h2>
69 <a id="a3250bd6fc9713946991d805e48091b2e"></a>
70 <h2 class="memtitle"><span class="permalink"><a href="#a3250bd6fc9713946991d805e48091b2e">&#9670;&nbsp;</a></span>abi</h2>
71
72 <div class="memitem">
73 <div class="memproto">
74 <table class="memname">
75 <tr>
76 <td class="memname">unsigned hwloc_component::abi</td>
77 </tr>
78 </table>
79 </div><div class="memdoc">
80
81 <p>Component ABI version, set to <a class="el" href="a00191.html#gaac5bc1f46f55e10ef0141a68ce70e21f" title="Current component and plugin ABI version (see hwloc/plugins.h)">HWLOC_COMPONENT_ABI</a>. </p>
82
83 </div>
84 </div>
85 <a id="a4b8cffd1d943c29fdc102b841b8598d4"></a>
86 <h2 class="memtitle"><span class="permalink"><a href="#a4b8cffd1d943c29fdc102b841b8598d4">&#9670;&nbsp;</a></span>data</h2>
87
88 <div class="memitem">
89 <div class="memproto">
90 <table class="memname">
91 <tr>
92 <td class="memname">void* hwloc_component::data</td>
93 </tr>
94 </table>
95 </div><div class="memdoc">
96
97 <p>Component data, pointing to a struct <a class="el" href="a00378.html" title="Discovery component structure.">hwloc_disc_component</a> or struct hwloc_xml_component. </p>
98
99 </div>
100 </div>
101 <a id="a4612015451a1c706e8ba19114cb8baae"></a>
102 <h2 class="memtitle"><span class="permalink"><a href="#a4612015451a1c706e8ba19114cb8baae">&#9670;&nbsp;</a></span>finalize</h2>
103
104 <div class="memitem">
105 <div class="memproto">
106 <table class="memname">
107 <tr>
108 <td class="memname">void(* hwloc_component::finalize) (unsigned long <a class="el" href="a00390.html#ab8043c5b4cc0e81aabba586ccb194335">flags</a>)</td>
109 </tr>
110 </table>
111 </div><div class="memdoc">
112
113 <p>Process-wide component termination callback. </p>
114 <p>This optional callback is called after unregistering the component from the hwloc core (before unloading the plugin).</p>
115 <p><code>flags</code> is always 0 for now.</p>
116 <dl class="section note"><dt>Note</dt><dd>If the component uses ltdl for loading its own plugins, it should load/unload them only in <a class="el" href="a00390.html#aea613546886d9b8221cadba920fe3ebc" title="Process-wide component initialization callback.">init()</a> and <a class="el" href="a00390.html#a4612015451a1c706e8ba19114cb8baae" title="Process-wide component termination callback.">finalize()</a>, to avoid race conditions with hwloc's use of ltdl. </dd></dl>
117
118 </div>
119 </div>
120 <a id="ab8043c5b4cc0e81aabba586ccb194335"></a>
121 <h2 class="memtitle"><span class="permalink"><a href="#ab8043c5b4cc0e81aabba586ccb194335">&#9670;&nbsp;</a></span>flags</h2>
122
123 <div class="memitem">
124 <div class="memproto">
125 <table class="memname">
126 <tr>
127 <td class="memname">unsigned long hwloc_component::flags</td>
128 </tr>
129 </table>
130 </div><div class="memdoc">
131
132 <p>Component flags, unused for now. </p>
133
134 </div>
135 </div>
136 <a id="aea613546886d9b8221cadba920fe3ebc"></a>
137 <h2 class="memtitle"><span class="permalink"><a href="#aea613546886d9b8221cadba920fe3ebc">&#9670;&nbsp;</a></span>init</h2>
138
139 <div class="memitem">
140 <div class="memproto">
141 <table class="memname">
142 <tr>
143 <td class="memname">int(* hwloc_component::init) (unsigned long <a class="el" href="a00390.html#ab8043c5b4cc0e81aabba586ccb194335">flags</a>)</td>
144 </tr>
145 </table>
146 </div><div class="memdoc">
147
148 <p>Process-wide component initialization callback. </p>
149 <p>This optional callback is called when the component is registered to the hwloc core (after loading the plugin).</p>
150 <p>When the component is built as a plugin, this callback should call hwloc_check_plugin_namespace() and return an negative error code on error.</p>
151 <p><code>flags</code> is always 0 for now.</p>
152 <dl class="section return"><dt>Returns</dt><dd>0 on success, or a negative code on error.</dd></dl>
153 <dl class="section note"><dt>Note</dt><dd>If the component uses ltdl for loading its own plugins, it should load/unload them only in <a class="el" href="a00390.html#aea613546886d9b8221cadba920fe3ebc" title="Process-wide component initialization callback.">init()</a> and <a class="el" href="a00390.html#a4612015451a1c706e8ba19114cb8baae" title="Process-wide component termination callback.">finalize()</a>, to avoid race conditions with hwloc's use of ltdl. </dd></dl>
154
155 </div>
156 </div>
157 <a id="a789208ada7e17492cfd3a5a88a6bb0ee"></a>
158 <h2 class="memtitle"><span class="permalink"><a href="#a789208ada7e17492cfd3a5a88a6bb0ee">&#9670;&nbsp;</a></span>type</h2>
159
160 <div class="memitem">
161 <div class="memproto">
162 <table class="memname">
163 <tr>
164 <td class="memname"><a class="el" href="a00241.html#ga31a5a455f4e666b936f0a9e8fb9a0f47">hwloc_component_type_t</a> hwloc_component::type</td>
165 </tr>
166 </table>
167 </div><div class="memdoc">
168
169 <p>Component type. </p>
170
171 </div>
172 </div>
173 <hr/>The documentation for this struct was generated from the following file:<ul>
174 <li><a class="el" href="a00185_source.html">plugins.h</a></li>
67175 </ul>
68 <p>Any of these types may be filtered individually with <code><a class="el" href="a00199.html#gad894e70f15f8d4aada7be8d1aba38b7e" title="Set the filtering for the given object type.">hwloc_topology_set_type_filter()</a></code>.</p>
69 <p>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. <b>These children are not in the normal children list but rather in the I/O-specific children list.</b></p>
70 <p>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 <a class="el" href="a00193.html#ga759e88eaf5a230ad283e9d4c42486735" title="Returns the next object of type type.">hwloc_get_next_obj_by_type()</a>. However, hwloc offers some dedicated helpers such as <a class="el" href="a00210.html#ga66470dabce9db19a57c5940a909d0baa" title="Get the next PCI device in the system.">hwloc_get_next_pcidev()</a> and <a class="el" href="a00210.html#ga8b4584c8949e2c5f1c97ba7fe92b8145" title="Get the next OS device in the system.">hwloc_get_next_osdev()</a> for convenience (see <a class="el" href="a00210.html">Finding I/O objects</a>).</p>
71 <p>
72 </div><div class="section" id="iodevices_osdev">
73 </p>
74 <h1><a class="anchor" id="iodevices_osdev"></a>
75 OS devices</h1>
76 <p>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 <em>eth0</em> network interface, the <em>sda</em> hard drive, or the <em>mlx4_0</em> OpenFabrics HCA). Therefore hwloc tries to add software devices (<code><a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075" title="Operating system device (filtered out by default).">HWLOC_OBJ_OS_DEVICE</a></code>, also known as OS devices).</p>
77 <p>OS devices may be attached below PCI devices, but they may also be attached directly to normal objects. Indeed some OS devices are not related to PCI. For instance, NVDIMM block devices (such as <em>pmem0s</em> on Linux) are directly attached near their NUMA node (I/O child of the parent whose memory child is the NUMA node). Also, if hwloc could not discover PCI for some reason, PCI-related OS devices may also be attached directly to normal objects.</p>
78 <p>hwloc first tries to discover OS devices from the operating system, e.g. <em>eth0</em>, <em>sda</em> or <em>mlx4_0</em>. However, this ability is currently only available on Linux for some classes of devices.</p>
79 <p>hwloc then tries to discover software devices through additional I/O components using external libraries. For instance proprietary graphics drivers do not expose any named OS device, but hwloc may still create one OS object per software handle when supported. For instance the <code>opencl</code> and <code>cuda</code> components may add some <em>opencl0d0</em> and <em>cuda0</em> OS device objects.</p>
80 <p>Here is a list of OS device objects commonly created by hwloc components when I/O discovery is enabled and supported.</p>
81 <ul>
82 <li>
83 Hard disks or non-volatile memory devices (<a class="el" href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0a689b0488c3c0d08d116751c6b9cb8871" title="Operating system block device, or non-volatile memory device. For instance &quot;sda&quot; or &quot;dax2....">HWLOC_OBJ_OSDEV_BLOCK</a>) <ul>
84 <li>
85 <em>sda</em> or <em>dax2.0</em> (Linux component) </li>
86 </ul>
87 </li>
88 <li>
89 Network interfaces (<a class="el" href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0ab715d81155f771573c8682dffc65021b" title="Operating system network device. For instance the &quot;eth0&quot; interface on Linux.">HWLOC_OBJ_OSDEV_NETWORK</a>) <ul>
90 <li>
91 <em>eth0</em>, <em>wlan0</em>, <em>ib0</em> (Linux component) </li>
92 </ul>
93 </li>
94 <li>
95 OpenFabrics (InfiniBand, Omni-Path, usNIC, etc) HCAs (<a class="el" href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0a52157d03694fdae82dddd57ca8c973b6" title="Operating system openfabrics device. For instance the &quot;mlx4_0&quot; InfiniBand HCA, or &quot;hfi1_0&quot; Omni-Path ...">HWLOC_OBJ_OSDEV_OPENFABRICS</a>) <ul>
96 <li>
97 <em>mlx5_0</em>, <em>hfi1_0</em>, <em>qib0</em>, <em>usnic_0</em> (Linux component) </li>
98 </ul>
99 </li>
100 <li>
101 GPUs (<a class="el" href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90" title="Operating system GPU device. For instance &quot;:0.0&quot; for a GL display, &quot;card0&quot; for a Linux DRM device.">HWLOC_OBJ_OSDEV_GPU</a>) <ul>
102 <li>
103 <em>rsmi0</em> for the first RSMI device (RSMI component, using the AMD ROCm SMI library) </li>
104 <li>
105 <em>nvml0</em> for the first NVML device (NVML component, using the NVIDIA Management Library) </li>
106 <li>
107 <em>:0.0</em> for the first display (GL component, using the NV-CONTROL X extension library, NVCtrl) </li>
108 </ul>
109 </li>
110 <li>
111 <p class="startli">Co-Processors (<a class="el" href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83" title="Operating system co-processor device. For instance &quot;opencl0d0&quot; for a OpenCL device,...">HWLOC_OBJ_OSDEV_COPROC</a>) </p><ul>
112 <li>
113 <em>opencl0d0</em> for the first device of the first OpenCL platform, <em>opencl1d3</em> for the fourth device of the second OpenCL platform (OpenCL component) </li>
114 <li>
115 <em>cuda0</em> for the first NVIDIA CUDA device (CUDA component, using the NVIDIA CUDA Library) </li>
116 <li>
117 DMA engine channel (<a class="el" href="a00190.html#gga64f5d539df299c97ae80ce53fc4b56c0a827ad1643360711a8b6c6af671366791" title="Operating system dma engine device. For instance the &quot;dma0chan0&quot; DMA channel on Linux.">HWLOC_OBJ_OSDEV_DMA</a>) <ul>
118 <li>
119 <em>dma0chan0</em> (Linux component) when all OS devices are enabled (<a class="el" href="a00199.html#gga9a5a1f0140cd1952544477833733195bafda7b59e6810dfe778d8f9a4cc1e350e" title="Keep all objects of this type.">HWLOC_TYPE_FILTER_KEEP_ALL</a>) </li>
120 </ul>
121 </li>
122 </ul>
123 <p class="interli">Note that some PCI devices may contain multiple software devices (see the example below).</p>
124 <p class="interli">See also <a class="el" href="a00396.html">Interoperability With Other Software</a> for managing these devices without considering them as hwloc objects.</p>
125 <p class="endli">
126 </div><div class="section" id="iodevices_pci">
127 </p>
128 </li>
129 </ul>
130 <h1><a class="anchor" id="iodevices_pci"></a>
131 PCI devices and bridges</h1>
132 <p>A PCI hierarchy is usually organized as follows: A hostbridge object ( <code><a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0" title="Bridge (filtered out by default). Any bridge (or PCI switch) that connects the host or an I/O bus,...">HWLOC_OBJ_BRIDGE</a></code> object with upstream type <em>Host</em> and downstream type <em>PCI</em>) is attached below a normal object (usually the entire machine or a NUMA node). There may be multiple hostbridges in the machine, attached to different places, but all PCI devices are below one of them (unless the Bridge object type is filtered-out).</p>
133 <p>Each hostbridge contains one or several children, either other bridges (usually PCI to PCI switches) or PCI devices (<code><a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9" title="PCI device (filtered out by default).">HWLOC_OBJ_PCI_DEVICE</a></code>). The number of bridges between the hostbridge and a PCI device depends on the machine.</p>
134 <p>
135 </div><div class="section" id="iodevices_consult">
136 </p>
137 <h1><a class="anchor" id="iodevices_consult"></a>
138 Consulting I/O devices and binding</h1>
139 <p>I/O devices may be consulted by traversing the topology manually (with usual routines such as <a class="el" href="a00193.html#ga6f414dd80a2b943967a0ac92da3181a2" title="Returns the topology object at logical index idx with type type.">hwloc_get_obj_by_type()</a>) or by using dedicated helpers (such as <a class="el" href="a00210.html#gacdbaf0db98872e224b7883a84bfb0455" title="Find the PCI device object matching the PCI bus id given domain, bus device and function PCI bus id.">hwloc_get_pcidev_by_busid()</a>, see <a class="el" href="a00210.html">Finding I/O objects</a>).</p>
140 <p>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 <code>parent</code> link) until a non-I/O object is found (see <a class="el" href="a00210.html#gaf139bb61375178e90cc3f1835b452ab6" title="Get the first non-I/O ancestor object.">hwloc_get_non_io_ancestor_obj()</a>). 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.</p>
141 <p>Command-line tools are also aware of I/O devices. lstopo displays the interesting ones by default (passing <code>--no-io</code> disables it).</p>
142 <p>hwloc-calc and hwloc-bind may manipulate I/O devices specified by PCI bus ID or by OS device name. </p><ul>
143 <li>
144 <code>pci=0000:02:03.0</code> is replaced by the set of CPUs that are close to the PCI device whose bus ID is given. </li>
145 <li>
146 <code>os=eth0</code> is replaced by CPUs that are close to the I/O device whose software handle is called <code>eth0</code>. </li>
147 </ul>
148 <p>This enables easy binding of I/O-intensive applications near the device they use.</p>
149 <p>
150 </div><div class="section" id="iodevices_examples">
151 </p>
152 <h1><a class="anchor" id="iodevices_examples"></a>
153 Examples</h1>
154 <p>The following picture shows a dual-package dual-core host whose PCI bus is connected to the first package and NUMA node.</p>
155 <div class="image">
156 <img src="devel09-pci.png" alt=""/>
157 </div>
158 <p>Six interesting PCI devices were discovered. However, hwloc found some corresponding software devices (<em>eth0</em>, <em>eth1</em>, <em>sda</em>, <em>mlx4_0</em>, <em>ib0</em>, and <em>ib1</em>) for only four of these physical devices. The other ones (<em>PCI 102b:0532</em> and <em>PCI 8086:3a20</em>) are an unused IDE controller (no disk attached) and a graphic card (no corresponding software device reported to the user by the operating system).</p>
159 <p>On the contrary, it should be noted that three different software devices were found for the last PCI device (<em>PCI 15b3:634a</em>). Indeed this OpenFabrics HCA PCI device object contains one one OpenFabrics software device (<em>mlx4_0</em>) and two virtual network interface software devices (<em>ib0</em> and <em>ib1</em>).</p>
160 <p>Here is the corresponding textual output:</p>
161 <pre class="fragment">Machine (24GB total)
162 Package L#0
163 NUMANode L#0 (P#0 12GB)
164 L3 L#0 (8192KB)
165 L2 L#0 (256KB) + L1 L#0 (32KB) + Core L#0 + PU L#0 (P#0)
166 L2 L#1 (256KB) + L1 L#1 (32KB) + Core L#1 + PU L#1 (P#2)
167 HostBridge
168 PCIBridge
169 PCI 01:00.0 (Ethernet)
170 Net "eth0"
171 PCI 01:00.1 (Ethernet)
172 Net "eth1"
173 PCIBridge
174 PCI 03:00.0 (RAID)
175 Block "sda"
176 PCIBridge
177 PCI 04:03.0 (VGA)
178 PCI 00:1f.2 (IDE)
179 PCI 51:00.0 (InfiniBand)
180 Net "ib0"
181 Net "ib1"
182 Net "mlx4_0"
183 Package L#1
184 NUMANode L#1 (P#1 12GB)
185 L3 L#1 (8192KB)
186 L2 L#2 (256KB) + L1 L#2 (32KB) + Core L#2 + PU L#2 (P#1)
187 L2 L#3 (256KB) + L1 L#3 (32KB) + Core L#3 + PU L#3 (P#3)
188 </pre> </div></div><!-- contents -->
189 </div><!-- PageDoc -->
176 </div><!-- contents -->
190177 <!-- start footer part -->
191178 <hr class="footer"/><address class="footer"><small>
192179 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Miscellaneous objects</title>
7 <title>Hardware Locality (hwloc): Hardware Locality (hwloc) Introduction</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="PageDoc"><div class="header">
4141 <div class="headertitle">
42 <div class="title">Miscellaneous objects </div> </div>
42 <div class="title">Hardware Locality (hwloc) Introduction </div> </div>
4343 </div><!--header-->
4444 <div class="contents">
45 <div class="textblock"><p>
45 <div class="textblock"><h1 class="sub">Portable abstraction of hierarchical architectures for high-performance computing</h1>
46 <hr />
47 <p>
4648 <div class="section">
49 See also <a class="el" href="a00391.html#further_reading">Further Reading</a>
50 or the Related pages tab above
51 for links to more sections about hwloc concepts.
52 </div>
4753 </p>
48 <p>hwloc topologies may be annotated with Misc objects (of type <code><a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a19f8a6953fa91efc76bcbcdf2d22de4d" title="Miscellaneous objects (filtered out by default). Objects without particular meaning,...">HWLOC_OBJ_MISC</a></code>) either automatically or by the user. This is a flexible way to annotate topologies with large sets of information since Misc objects may be inserted anywhere in the topology (to annotate specific objects or parts of the topology), even below other Misc objects, and each of them may contain multiple attributes (see also <a class="el" href="a00400.html#faq_annotate">How do I annotate the topology with private notes?</a>).</p>
49 <p>These Misc objects may have a <code>subtype</code> field to replace <code>Misc</code> with something else in the lstopo output.</p>
5054 <p>
51 </div><div class="section" id="miscobjs_auto">
52 </p>
53 <h1><a class="anchor" id="miscobjs_auto"></a>
54 Misc objects added by hwloc</h1>
55 <p>hwloc only uses Misc objects when other object types are not sufficient, and when the Misc object type is not filtered-out anymore. This currently includes: </p><ul>
56 <li>
57 Memory modules (DIMMs), on Linux when privileged and when <code>dmi-sysfs</code> is supported by the kernel. These objects have a <code>subtype</code> field of value <code>MemoryModule</code>. They are currently always attached to the root object. Their attributes describe the DIMM vendor, model, etc. <code>lstopo -v</code> displays them as: <div class="fragment"><div class="line">Misc(MemoryModule) (P#1 DeviceLocation=<span class="stringliteral">&quot;Bottom-Slot 2(right)&quot;</span> BankLocation=<span class="stringliteral">&quot;BANK 2&quot;</span> Vendor=Elpida SerialNumber=21733667 AssetTag=9876543210 PartNumber=<span class="stringliteral">&quot;EBJ81UG8EFU0-GN-F &quot;</span>)</div>
58 </div><!-- fragment --> </li>
59 <li>
60 Displaying process binding in <code>lstopo --top</code>. These objects have a <code>subtype</code> field of value <code>Process</code> and a name attribute made of their PID and program name. They are attached below the object they are bound to. The textual <code>lstopo</code> displays them as: <div class="fragment"><div class="line">PU L#0 (P#0)</div>
61 <div class="line"> Misc(Process) 4445 myprogram</div>
62 </div><!-- fragment --> </li>
55 <div class="section" id="hwloc_summary">
56 </p>
57 <h1><a class="anchor" id="hwloc_summary"></a>
58 hwloc Summary</h1>
59 <p>hwloc provides command line tools and a C API to obtain the hierarchical map of key computing elements within a node, such as: NUMA memory nodes, shared caches, processor packages, dies and cores, processing units (logical processors or "threads") and even I/O devices. hwloc also gathers various attributes such as cache and memory information, and is portable across a variety of different operating systems and platforms.</p>
60 <p>hwloc primarily aims at helping high-performance computing (HPC) applications, but is also applicable to any project seeking to exploit code and/or data locality on modern computing platforms.</p>
61 <p>hwloc supports the following operating systems:</p>
62 <ul>
63 <li>
64 Linux (including old kernels not having sysfs topology information, with knowledge of cpusets, ScaleMP vSMP support, etc.) on all supported hardware, including Intel Xeon Phi and NumaScale NumaConnect. </li>
65 <li>
66 Solaris (with support for processor sets and logical domains) </li>
67 <li>
68 AIX </li>
69 <li>
70 Darwin / OS X </li>
71 <li>
72 FreeBSD and its variants (such as kFreeBSD/GNU) </li>
73 <li>
74 NetBSD </li>
75 <li>
76 HP-UX </li>
77 <li>
78 Microsoft Windows </li>
79 <li>
80 IBM BlueGene/Q Compute Node Kernel (CNK) </li>
81 </ul>
82 <p>Since it uses standard Operating System information, hwloc's support is mostly independant from the processor type (x86, powerpc, ...) and just relies on the Operating System support. The main exception is BSD operating systems (NetBSD, FreeBSD, etc.) because they do not provide support topology information, hence hwloc uses an x86-only CPUID-based backend (which can be used for other OSes too, see the <a class="el" href="a00404.html">Components and plugins</a> section).</p>
83 <p>To check whether hwloc works on a particular machine, just try to build it and run <code>lstopo</code> or <code>lstopo-no-graphics</code>. If some things do not look right (e.g. bogus or missing cache information), see <a class="el" href="index.html#bugs">Questions and Bugs</a>.</p>
84 <p>hwloc only reports the number of processors on unsupported operating systems; no topology information is available.</p>
85 <p>For development and debugging purposes, hwloc also offers the ability to work on "fake" topologies:</p>
86 <ul>
87 <li>
88 Symmetrical tree of resources generated from a list of level arities, see <a class="el" href="a00401.html">Synthetic topologies</a>. </li>
89 <li>
90 Remote machine simulation through the gathering of topology as XML files, see <a class="el" href="a00400.html">Importing and exporting topologies from/to XML files</a>. </li>
91 </ul>
92 <p>hwloc can display the topology in a human-readable format, either in graphical mode (X11), or by exporting in one of several different formats, including: plain text, LaTeX tikzpicture, PDF, PNG, and FIG (see <a class="el" href="a00391.html#cli_examples">Command-line Examples</a> below). Note that some of the export formats require additional support libraries.</p>
93 <p>hwloc offers a programming interface for manipulating topologies and objects. It also brings a powerful CPU bitmap API that is used to describe topology objects location on physical/logical processors. See the <a class="el" href="a00391.html#interface">Programming Interface</a> below. It may also be used to binding applications onto certain cores or memory nodes. Several utility programs are also provided to ease command-line manipulation of topology objects, binding of processes, and so on.</p>
94 <p>Perl bindings are available from Bernd Kallies on <a href="http://search.cpan.org/~bka/Sys-Hwloc-0.10/">CPAN</a>.</p>
95 <p>Python bindings are available from Guy Streeter: </p><ul>
96 <li>
97 <a href="http://people.redhat.com/streeter/">Fedora RPM and tarball</a>. </li>
98 <li>
99 <a href="git://git.fedorahosted.org/python-hwloc.git">git tree</a> (<a href="http://git.fedorahosted.org/git/python-hwloc.git">html</a>). </li>
63100 </ul>
64101 <p>
65 </div><div class="section" id="miscobjs_annotate">
66 </p>
67 <h1><a class="anchor" id="miscobjs_annotate"></a>
68 Annotating topologies with Misc objects</h1>
69 <p>The user may annotate hwloc topologies with its own Misc objects. This can be achieved with <code><a class="el" href="a00200.html#gad980782ade737900c5cf208946768c30" title="Add a MISC object as a leaf of the topology.">hwloc_topology_insert_misc_object()</a></code> as well as hwloc-annotate command-line tool. </p>
102 </div><div class="section" id="hwloc_installation">
103 </p>
104 <h1><a class="anchor" id="hwloc_installation"></a>
105 hwloc Installation</h1>
106 <p>The generic installation procedure for both hwloc and netloc is described in <a class="el" href="index.html#common_installation">Installation</a>.</p>
107 <p>The hwloc command-line tool "lstopo" produces human-readable topology maps, as mentioned above. It can also export maps to the "fig" file format. Support for PDF, Postscript, and PNG exporting is provided if the "Cairo" development package (usually <code>cairo-devel</code> or <code>libcairo2-dev</code>) can be found in "lstopo" when hwloc is configured and build.</p>
108 <p>The hwloc core may also benefit from the following development packages: </p><ul>
109 <li>
110 <p class="startli">libpciaccess for full I/O device discovery (<code>libpciaccess-devel</code> or <code>libpciaccess-dev</code> package). On Linux, PCI discovery may still be performed (without vendor/device names) even if libpciaccess cannot be used. </p>
111 <p class="endli"></p>
112 </li>
113 <li>
114 AMD or NVIDIA OpenCL implementations for OpenCL device discovery. </li>
115 <li>
116 the NVIDIA CUDA Toolkit for CUDA device discovery. See <a class="el" href="a00406.html#faq_cuda_build">How do I enable CUDA and select which CUDA version to use?</a>. </li>
117 <li>
118 the NVIDIA Management Library (NVML) for NVML device discovery. It is included in CUDA since version 8.0. Older NVML releases were available within the NVIDIA GPU Deployment Kit from <a href="https://developer.nvidia.com/gpu-deployment-kit">https://developer.nvidia.com/gpu-deployment-kit</a> . </li>
119 <li>
120 the NV-CONTROL X extension library (NVCtrl) for NVIDIA display discovery. The relevant development package is usually <code>libXNVCtrl-devel</code> or <code>libxnvctrl-dev</code>. It is also available within nvidia-settings from <a href="ftp://download.nvidia.com/XFree86/nvidia-settings/">ftp://download.nvidia.com/XFree86/nvidia-settings/</a> and <a href="https://github.com/NVIDIA/nvidia-settings/">https://github.com/NVIDIA/nvidia-settings/</a> . </li>
121 <li>
122 the AMD ROCm SMI library for RSMI device discovery. The relevant development package is usually <code>rocm-smi-lib64</code> or <code>librocm-smi-dev</code>. </li>
123 <li>
124 the oneAPI Level Zero library. The relevant development package is usually <code>level-zero-dev</code> or <code>level-zero-devel</code>. </li>
125 <li>
126 libxml2 for full XML import/export support (otherwise, the internal minimalistic parser will only be able to import XML files that were exported by the same hwloc release). See <a class="el" href="a00400.html">Importing and exporting topologies from/to XML files</a> for details. The relevant development package is usually <code>libxml2-devel</code> or <code>libxml2-dev</code>. </li>
127 <li>
128 libudev on Linux for easier discovery of OS device information (otherwise hwloc will try to manually parse udev raw files). The relevant development package is usually <code>libudev-devel</code> or <code>libudev-dev</code>. </li>
129 <li>
130 libtool's ltdl library for dynamic plugin loading if the native dlopen cannot be used. The relevant development package is usually <code>libtool-ltdl-devel</code> or <code>libltdl-dev</code>. </li>
131 </ul>
132 <p>PCI and XML support may be statically built inside the main hwloc library, or as separate dynamically-loaded plugins (see the <a class="el" href="a00404.html">Components and plugins</a> section).</p>
133 <p>Note that because of the possibility of GPL taint, the <code>pciutils</code> library <code>libpci</code> will not be used (remember that hwloc is BSD-licensed).</p>
134 <p>
135 </div><div class="section" id="cli_examples">
136 </p>
137 <h1><a class="anchor" id="cli_examples"></a>
138 Command-line Examples</h1>
139 <p>On a 4-package 2-core machine with hyper-threading, the <code>lstopo</code> tool may show the following graphical output:</p>
140 <div class="image">
141 <img src="dudley.png" alt=""/>
142 </div>
143 <p>Here's the equivalent output in textual form:</p>
144 <pre class="fragment">Machine
145 NUMANode L#0 (P#0)
146 Package L#0 + L3 L#0 (4096KB)
147 L2 L#0 (1024KB) + L1 L#0 (16KB) + Core L#0
148 PU L#0 (P#0)
149 PU L#1 (P#8)
150 L2 L#1 (1024KB) + L1 L#1 (16KB) + Core L#1
151 PU L#2 (P#4)
152 PU L#3 (P#12)
153 Package L#1 + L3 L#1 (4096KB)
154 L2 L#2 (1024KB) + L1 L#2 (16KB) + Core L#2
155 PU L#4 (P#1)
156 PU L#5 (P#9)
157 L2 L#3 (1024KB) + L1 L#3 (16KB) + Core L#3
158 PU L#6 (P#5)
159 PU L#7 (P#13)
160 Package L#2 + L3 L#2 (4096KB)
161 L2 L#4 (1024KB) + L1 L#4 (16KB) + Core L#4
162 PU L#8 (P#2)
163 PU L#9 (P#10)
164 L2 L#5 (1024KB) + L1 L#5 (16KB) + Core L#5
165 PU L#10 (P#6)
166 PU L#11 (P#14)
167 Package L#3 + L3 L#3 (4096KB)
168 L2 L#6 (1024KB) + L1 L#6 (16KB) + Core L#6
169 PU L#12 (P#3)
170 PU L#13 (P#11)
171 L2 L#7 (1024KB) + L1 L#7 (16KB) + Core L#7
172 PU L#14 (P#7)
173 PU L#15 (P#15)
174 </pre><p>Note that there is also an equivalent output in XML that is meant for exporting/importing topologies but it is hardly readable to human-beings (see <a class="el" href="a00400.html">Importing and exporting topologies from/to XML files</a> for details).</p>
175 <p>On a 4-package 2-core Opteron NUMA machine (with two core cores disallowed by the administrator), the <code>lstopo</code> tool may show the following graphical output (with <code>--disallowed</code> for displaying disallowed objects):</p>
176 <div class="image">
177 <img src="hagrid.png" alt=""/>
178 </div>
179 <p>Here's the equivalent output in textual form:</p>
180 <pre class="fragment">Machine (32GB total)
181 Package L#0
182 NUMANode L#0 (P#0 8190MB)
183 L2 L#0 (1024KB) + L1 L#0 (64KB) + Core L#0 + PU L#0 (P#0)
184 L2 L#1 (1024KB) + L1 L#1 (64KB) + Core L#1 + PU L#1 (P#1)
185 Package L#1
186 NUMANode L#1 (P#1 8192MB)
187 L2 L#2 (1024KB) + L1 L#2 (64KB) + Core L#2 + PU L#2 (P#2)
188 L2 L#3 (1024KB) + L1 L#3 (64KB) + Core L#3 + PU L#3 (P#3)
189 Package L#2
190 NUMANode L#2 (P#2 8192MB)
191 L2 L#4 (1024KB) + L1 L#4 (64KB) + Core L#4 + PU L#4 (P#4)
192 L2 L#5 (1024KB) + L1 L#5 (64KB) + Core L#5 + PU L#5 (P#5)
193 Package L#3
194 NUMANode L#3 (P#3 8192MB)
195 L2 L#6 (1024KB) + L1 L#6 (64KB) + Core L#6 + PU L#6 (P#6)
196 L2 L#7 (1024KB) + L1 L#7 (64KB) + Core L#7 + PU L#7 (P#7)
197 </pre><p>On a 2-package quad-core Xeon (pre-Nehalem, with 2 dual-core dies into each package):</p>
198 <div class="image">
199 <img src="emmett.png" alt=""/>
200 </div>
201 <p>Here's the same output in textual form:</p>
202 <pre class="fragment">Machine (total 16GB)
203 NUMANode L#0 (P#0 16GB)
204 Package L#0
205 L2 L#0 (4096KB)
206 L1 L#0 (32KB) + Core L#0 + PU L#0 (P#0)
207 L1 L#1 (32KB) + Core L#1 + PU L#1 (P#4)
208 L2 L#1 (4096KB)
209 L1 L#2 (32KB) + Core L#2 + PU L#2 (P#2)
210 L1 L#3 (32KB) + Core L#3 + PU L#3 (P#6)
211 Package L#1
212 L2 L#2 (4096KB)
213 L1 L#4 (32KB) + Core L#4 + PU L#4 (P#1)
214 L1 L#5 (32KB) + Core L#5 + PU L#5 (P#5)
215 L2 L#3 (4096KB)
216 L1 L#6 (32KB) + Core L#6 + PU L#6 (P#3)
217 L1 L#7 (32KB) + Core L#7 + PU L#7 (P#7)
218 </pre><p>
219 </div><div class="section" id="interface">
220 </p>
221 <h1><a class="anchor" id="interface"></a>
222 Programming Interface</h1>
223 <p>The basic interface is available in <a class="el" href="a00122_source.html">hwloc.h</a>. Some higher-level functions are available in <a class="el" href="a00125_source.html">hwloc/helper.h</a> to reduce the need to manually manipulate objects and follow links between them. Documentation for all these is provided later in this document. Developers may also want to look at hwloc/inlines.h which contains the actual inline code of some <a class="el" href="a00122_source.html">hwloc.h</a> routines, and at this document, which provides good higher-level topology traversal examples.</p>
224 <p>To precisely define the vocabulary used by hwloc, a <a class="el" href="a00392.html">Terms and Definitions</a> section is available and should probably be read first.</p>
225 <p>Each hwloc object contains a cpuset describing the list of processing units that it contains. These bitmaps may be used for <a class="el" href="a00199.html">CPU binding</a> and <a class="el" href="a00200.html">Memory binding</a>. hwloc offers an extensive bitmap manipulation interface in <a class="el" href="a00128_source.html">hwloc/bitmap.h</a>.</p>
226 <p>Moreover, hwloc also comes with additional helpers for interoperability with several commonly used environments. See the <a class="el" href="a00402.html">Interoperability With Other Software</a> section for details.</p>
227 <p>The complete API documentation is available in a full set of HTML pages, man pages, and self-contained PDF files (formatted for both both US letter and A4 formats) in the source tarball in doc/doxygen-doc/.</p>
228 <p><b>NOTE:</b> If you are building the documentation from a Git clone, you will need to have Doxygen and pdflatex installed &ndash; the documentation will be built during the normal "make" process. The documentation is installed during "make install" to $prefix/share/doc/hwloc/ and your systems default man page tree (under $prefix, of course).</p>
229 <h2><a class="anchor" id="portability"></a>
230 Portability</h2>
231 <p>Operating System have varying support for CPU and memory binding, e.g. while some Operating Systems provide interfaces for all kinds of CPU and memory bindings, some others provide only interfaces for a limited number of kinds of CPU and memory binding, and some do not provide any binding interface at all. Hwloc's binding functions would then simply return the ENOSYS error (Function not implemented), meaning that the underlying Operating System does not provide any interface for them. <a class="el" href="a00199.html">CPU binding</a> and <a class="el" href="a00200.html">Memory binding</a> provide more information on which hwloc binding functions should be preferred because interfaces for them are usually available on the supported Operating Systems.</p>
232 <p>Similarly, the ability of reporting topology information varies from one platform to another. As shown in <a class="el" href="a00391.html#cli_examples">Command-line Examples</a>, hwloc can obtain information on a wide variety of hardware topologies. However, some platforms and/or operating system versions will only report a subset of this information. For example, on an PPC64-based system with 8 cores (each with 2 hardware threads) running a default 2.6.18-based kernel from RHEL 5.4, hwloc is only able to glean information about NUMA nodes and processor units (PUs). No information about caches, packages, or cores is available.</p>
233 <p>Here's the graphical output from lstopo on this platform when Simultaneous Multi-Threading (SMT) is enabled:</p>
234 <div class="image">
235 <img src="ppc64-with-smt.png" alt=""/>
236 </div>
237 <p>And here's the graphical output from lstopo on this platform when SMT is disabled:</p>
238 <div class="image">
239 <img src="ppc64-without-smt.png" alt=""/>
240 </div>
241 <p>Notice that hwloc only sees half the PUs when SMT is disabled. PU L#6, for example, seems to change location from NUMA node #0 to #1. In reality, no PUs "moved" &ndash; they were simply re-numbered when hwloc only saw half as many (see also Logical index in <a class="el" href="a00392.html#termsanddefs_indexes">Indexes and Sets</a>). Hence, PU L#6 in the SMT-disabled picture probably corresponds to PU L#12 in the SMT-enabled picture.</p>
242 <p>This same "PUs have disappeared" effect can be seen on other platforms &ndash; even platforms / OSs that provide much more information than the above PPC64 system. This is an unfortunate side-effect of how operating systems report information to hwloc.</p>
243 <p>Note that upgrading the Linux kernel on the same PPC64 system mentioned above to 2.6.34, hwloc is able to discover all the topology information. The following picture shows the entire topology layout when SMT is enabled:</p>
244 <div class="image">
245 <img src="ppc64-full-with-smt.png" alt=""/>
246 </div>
247 <p>Developers using the hwloc API or XML output for portable applications should therefore be extremely careful to not make any assumptions about the structure of data that is returned. For example, per the above reported PPC topology, it is not safe to assume that PUs will always be descendants of cores.</p>
248 <p>Additionally, future hardware may insert new topology elements that are not available in this version of hwloc. Long-lived applications that are meant to span multiple different hardware platforms should also be careful about making structure assumptions. For example, a new element may someday exist between a core and a PU.</p>
249 <h2><a class="anchor" id="interface_example"></a>
250 API Example</h2>
251 <p>The following small C example (available in the source tree as ``doc/examples/hwloc-hello.c'') prints the topology of the machine and performs some thread and memory binding. More examples are available in the doc/examples/ directory of the source tree.</p>
252 <div class="fragment"><div class="line"><span class="comment">/* Example hwloc API program.</span></div>
253 <div class="line"><span class="comment"> *</span></div>
254 <div class="line"><span class="comment"> * See other examples under doc/examples/ in the source tree</span></div>
255 <div class="line"><span class="comment"> * for more details.</span></div>
256 <div class="line"><span class="comment"> *</span></div>
257 <div class="line"><span class="comment"> * Copyright © 2009-2016 Inria. All rights reserved.</span></div>
258 <div class="line"><span class="comment"> * Copyright © 2009-2011 Université Bordeaux</span></div>
259 <div class="line"><span class="comment"> * Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.</span></div>
260 <div class="line"><span class="comment"> * See COPYING in top-level directory.</span></div>
261 <div class="line"><span class="comment"> *</span></div>
262 <div class="line"><span class="comment"> * hwloc-hello.c</span></div>
263 <div class="line"><span class="comment"> */</span></div>
264 <div class="line"> </div>
265 <div class="line"><span class="preprocessor">#include &quot;hwloc.h&quot;</span></div>
266 <div class="line"> </div>
267 <div class="line"><span class="preprocessor">#include &lt;errno.h&gt;</span></div>
268 <div class="line"><span class="preprocessor">#include &lt;stdio.h&gt;</span></div>
269 <div class="line"><span class="preprocessor">#include &lt;string.h&gt;</span></div>
270 <div class="line"> </div>
271 <div class="line"><span class="keyword">static</span> <span class="keywordtype">void</span> print_children(<a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology, <a class="code" href="a00250.html">hwloc_obj_t</a> obj,</div>
272 <div class="line"> <span class="keywordtype">int</span> depth)</div>
273 <div class="line">{</div>
274 <div class="line"> <span class="keywordtype">char</span> type[32], attr[1024];</div>
275 <div class="line"> <span class="keywordtype">unsigned</span> i;</div>
276 <div class="line"> </div>
277 <div class="line"> <a class="code" href="a00197.html#gadb8765c260edea80c52cd06a76639ba4">hwloc_obj_type_snprintf</a>(type, <span class="keyword">sizeof</span>(type), obj, 0);</div>
278 <div class="line"> printf(<span class="stringliteral">&quot;%*s%s&quot;</span>, 2*depth, <span class="stringliteral">&quot;&quot;</span>, type);</div>
279 <div class="line"> <span class="keywordflow">if</span> (obj-&gt;<a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a> != (<span class="keywordtype">unsigned</span>) -1)</div>
280 <div class="line"> printf(<span class="stringliteral">&quot;#%u&quot;</span>, obj-&gt;<a class="code" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">os_index</a>);</div>
281 <div class="line"> <a class="code" href="a00197.html#ga870e876931c282a1c7aee2f031912ce3">hwloc_obj_attr_snprintf</a>(attr, <span class="keyword">sizeof</span>(attr), obj, <span class="stringliteral">&quot; &quot;</span>, 0);</div>
282 <div class="line"> <span class="keywordflow">if</span> (*attr)</div>
283 <div class="line"> printf(<span class="stringliteral">&quot;(%s)&quot;</span>, attr);</div>
284 <div class="line"> printf(<span class="stringliteral">&quot;\n&quot;</span>);</div>
285 <div class="line"> <span class="keywordflow">for</span> (i = 0; i &lt; obj-&gt;<a class="code" href="a00250.html#aac3f6da35c9b57599909a44ce2b716c1">arity</a>; i++) {</div>
286 <div class="line"> print_children(topology, obj-&gt;<a class="code" href="a00250.html#a04d05403da37bfe17cd63b7c7dd07b1f">children</a>[i], depth + 1);</div>
287 <div class="line"> }</div>
288 <div class="line">}</div>
289 <div class="line"> </div>
290 <div class="line"><span class="keywordtype">int</span> main(<span class="keywordtype">void</span>)</div>
291 <div class="line">{</div>
292 <div class="line"> <span class="keywordtype">int</span> depth;</div>
293 <div class="line"> <span class="keywordtype">unsigned</span> i, n;</div>
294 <div class="line"> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> size;</div>
295 <div class="line"> <span class="keywordtype">int</span> levels;</div>
296 <div class="line"> <span class="keywordtype">char</span> <span class="keywordtype">string</span>[128];</div>
297 <div class="line"> <span class="keywordtype">int</span> topodepth;</div>
298 <div class="line"> <span class="keywordtype">void</span> *m;</div>
299 <div class="line"> <a class="code" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a> topology;</div>
300 <div class="line"> <a class="code" href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a> cpuset;</div>
301 <div class="line"> <a class="code" href="a00250.html">hwloc_obj_t</a> obj;</div>
302 <div class="line"> </div>
303 <div class="line"> <span class="comment">/* Allocate and initialize topology object. */</span></div>
304 <div class="line"> <a class="code" href="a00195.html#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa">hwloc_topology_init</a>(&amp;topology);</div>
305 <div class="line"> </div>
306 <div class="line"> <span class="comment">/* ... Optionally, put detection configuration here to ignore</span></div>
307 <div class="line"><span class="comment"> some objects types, define a synthetic topology, etc....</span></div>
308 <div class="line"><span class="comment"></span> </div>
309 <div class="line"><span class="comment"> The default is to detect all the objects of the machine that</span></div>
310 <div class="line"><span class="comment"> the caller is allowed to access. See Configure Topology</span></div>
311 <div class="line"><span class="comment"> Detection. */</span></div>
312 <div class="line"> </div>
313 <div class="line"> <span class="comment">/* Perform the topology detection. */</span></div>
314 <div class="line"> <a class="code" href="a00195.html#gabdf58d87ad77f6615fccdfe0535ff826">hwloc_topology_load</a>(topology);</div>
315 <div class="line"> </div>
316 <div class="line"> <span class="comment">/* Optionally, get some additional topology information</span></div>
317 <div class="line"><span class="comment"> in case we need the topology depth later. */</span></div>
318 <div class="line"> topodepth = <a class="code" href="a00196.html#gae54d1782ca9b54bea915f5c18a9158fa">hwloc_topology_get_depth</a>(topology);</div>
319 <div class="line"> </div>
320 <div class="line"><span class="comment"> /*****************************************************************</span></div>
321 <div class="line"><span class="comment"> * First example:</span></div>
322 <div class="line"><span class="comment"> * Walk the topology with an array style, from level 0 (always</span></div>
323 <div class="line"><span class="comment"> * the system level) to the lowest level (always the proc level).</span></div>
324 <div class="line"><span class="comment"> *****************************************************************/</span></div>
325 <div class="line"> <span class="keywordflow">for</span> (depth = 0; depth &lt; topodepth; depth++) {</div>
326 <div class="line"> printf(<span class="stringliteral">&quot;*** Objects at level %d\n&quot;</span>, depth);</div>
327 <div class="line"> <span class="keywordflow">for</span> (i = 0; i &lt; <a class="code" href="a00196.html#ga1d5ceafe8130fe6e8657bf0bc666ba50">hwloc_get_nbobjs_by_depth</a>(topology, depth);</div>
328 <div class="line"> i++) {</div>
329 <div class="line"> <a class="code" href="a00197.html#gadb8765c260edea80c52cd06a76639ba4">hwloc_obj_type_snprintf</a>(<span class="keywordtype">string</span>, <span class="keyword">sizeof</span>(<span class="keywordtype">string</span>),</div>
330 <div class="line"> <a class="code" href="a00196.html#ga391f6b2613f0065673eaa4069b93d4e0">hwloc_get_obj_by_depth</a>(topology, depth, i), 0);</div>
331 <div class="line"> printf(<span class="stringliteral">&quot;Index %u: %s\n&quot;</span>, i, <span class="keywordtype">string</span>);</div>
332 <div class="line"> }</div>
333 <div class="line"> }</div>
334 <div class="line"> </div>
335 <div class="line"><span class="comment"> /*****************************************************************</span></div>
336 <div class="line"><span class="comment"> * Second example:</span></div>
337 <div class="line"><span class="comment"> * Walk the topology with a tree style.</span></div>
338 <div class="line"><span class="comment"> *****************************************************************/</span></div>
339 <div class="line"> printf(<span class="stringliteral">&quot;*** Printing overall tree\n&quot;</span>);</div>
340 <div class="line"> print_children(topology, <a class="code" href="a00196.html#ga2d4b12fc187dfc53b35f2fa21d21044d">hwloc_get_root_obj</a>(topology), 0);</div>
341 <div class="line"> </div>
342 <div class="line"><span class="comment"> /*****************************************************************</span></div>
343 <div class="line"><span class="comment"> * Third example:</span></div>
344 <div class="line"><span class="comment"> * Print the number of packages.</span></div>
345 <div class="line"><span class="comment"> *****************************************************************/</span></div>
346 <div class="line"> depth = <a class="code" href="a00196.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a>(topology, <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55ab16ab8c0dbffc234921d86f3dfb63129">HWLOC_OBJ_PACKAGE</a>);</div>
347 <div class="line"> <span class="keywordflow">if</span> (depth == <a class="code" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a>) {</div>
348 <div class="line"> printf(<span class="stringliteral">&quot;*** The number of packages is unknown\n&quot;</span>);</div>
349 <div class="line"> } <span class="keywordflow">else</span> {</div>
350 <div class="line"> printf(<span class="stringliteral">&quot;*** %u package(s)\n&quot;</span>,</div>
351 <div class="line"> <a class="code" href="a00196.html#ga1d5ceafe8130fe6e8657bf0bc666ba50">hwloc_get_nbobjs_by_depth</a>(topology, depth));</div>
352 <div class="line"> }</div>
353 <div class="line"> </div>
354 <div class="line"><span class="comment"> /*****************************************************************</span></div>
355 <div class="line"><span class="comment"> * Fourth example:</span></div>
356 <div class="line"><span class="comment"> * Compute the amount of cache that the first logical processor</span></div>
357 <div class="line"><span class="comment"> * has above it.</span></div>
358 <div class="line"><span class="comment"> *****************************************************************/</span></div>
359 <div class="line"> levels = 0;</div>
360 <div class="line"> size = 0;</div>
361 <div class="line"> <span class="keywordflow">for</span> (obj = <a class="code" href="a00196.html#ga6f414dd80a2b943967a0ac92da3181a2">hwloc_get_obj_by_type</a>(topology, <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661">HWLOC_OBJ_PU</a>, 0);</div>
362 <div class="line"> obj;</div>
363 <div class="line"> obj = obj-&gt;<a class="code" href="a00250.html#adc494f6aed939992be1c55cca5822900">parent</a>)</div>
364 <div class="line"> <span class="keywordflow">if</span> (<a class="code" href="a00207.html#ga2ed589bea28711e80b92066510a5607d">hwloc_obj_type_is_cache</a>(obj-&gt;<a class="code" href="a00250.html#acc4f0803f244867e68fe0036800be5de">type</a>)) {</div>
365 <div class="line"> levels++;</div>
366 <div class="line"> size += obj-&gt;<a class="code" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">attr</a>-&gt;<a class="code" href="a00254.html#a23f553f3252c9d13f2338231cd354ea9">cache</a>.<a class="code" href="a00266.html#abe5e788943ed04302976740c829674c0">size</a>;</div>
367 <div class="line"> }</div>
368 <div class="line"> printf(<span class="stringliteral">&quot;*** Logical processor 0 has %d caches totaling %luKB\n&quot;</span>,</div>
369 <div class="line"> levels, size / 1024);</div>
370 <div class="line"> </div>
371 <div class="line"><span class="comment"> /*****************************************************************</span></div>
372 <div class="line"><span class="comment"> * Fifth example:</span></div>
373 <div class="line"><span class="comment"> * Bind to only one thread of the last core of the machine.</span></div>
374 <div class="line"><span class="comment"> *</span></div>
375 <div class="line"><span class="comment"> * First find out where cores are, or else smaller sets of CPUs if</span></div>
376 <div class="line"><span class="comment"> * the OS doesn&#39;t have the notion of a &quot;core&quot;.</span></div>
377 <div class="line"><span class="comment"> *****************************************************************/</span></div>
378 <div class="line"> depth = <a class="code" href="a00196.html#ga8125328e69eba709c33ea8055c12589b">hwloc_get_type_or_below_depth</a>(topology, <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55ac793958f330bca371aa1535de8aff45f">HWLOC_OBJ_CORE</a>);</div>
379 <div class="line"> </div>
380 <div class="line"> <span class="comment">/* Get last core. */</span></div>
381 <div class="line"> obj = <a class="code" href="a00196.html#ga391f6b2613f0065673eaa4069b93d4e0">hwloc_get_obj_by_depth</a>(topology, depth,</div>
382 <div class="line"> <a class="code" href="a00196.html#ga1d5ceafe8130fe6e8657bf0bc666ba50">hwloc_get_nbobjs_by_depth</a>(topology, depth) - 1);</div>
383 <div class="line"> <span class="keywordflow">if</span> (obj) {</div>
384 <div class="line"> <span class="comment">/* Get a copy of its cpuset that we may modify. */</span></div>
385 <div class="line"> cpuset = <a class="code" href="a00214.html#gae679434c1a5f41d3560a8a7e2c1b0dee">hwloc_bitmap_dup</a>(obj-&gt;<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>);</div>
386 <div class="line"> </div>
387 <div class="line"> <span class="comment">/* Get only one logical processor (in case the core is</span></div>
388 <div class="line"><span class="comment"> SMT/hyper-threaded). */</span></div>
389 <div class="line"> <a class="code" href="a00214.html#gaa611a77c092e679246afdf9a60d5db8b">hwloc_bitmap_singlify</a>(cpuset);</div>
390 <div class="line"> </div>
391 <div class="line"> <span class="comment">/* And try to bind ourself there. */</span></div>
392 <div class="line"> <span class="keywordflow">if</span> (<a class="code" href="a00199.html#ga80bc07473a8edf840cae17bd7ec21d48">hwloc_set_cpubind</a>(topology, cpuset, 0)) {</div>
393 <div class="line"> <span class="keywordtype">char</span> *str;</div>
394 <div class="line"> <span class="keywordtype">int</span> error = errno;</div>
395 <div class="line"> <a class="code" href="a00214.html#ga0fece972134fdecf2da9bc7a11dd827e">hwloc_bitmap_asprintf</a>(&amp;str, obj-&gt;<a class="code" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">cpuset</a>);</div>
396 <div class="line"> printf(<span class="stringliteral">&quot;Couldn&#39;t bind to cpuset %s: %s\n&quot;</span>, str, strerror(error));</div>
397 <div class="line"> free(str);</div>
398 <div class="line"> }</div>
399 <div class="line"> </div>
400 <div class="line"> <span class="comment">/* Free our cpuset copy */</span></div>
401 <div class="line"> <a class="code" href="a00214.html#ga156130d85b3a0674d6e0e6770fe68fbe">hwloc_bitmap_free</a>(cpuset);</div>
402 <div class="line"> }</div>
403 <div class="line"> </div>
404 <div class="line"><span class="comment"> /*****************************************************************</span></div>
405 <div class="line"><span class="comment"> * Sixth example:</span></div>
406 <div class="line"><span class="comment"> * Allocate some memory on the last NUMA node, bind some existing</span></div>
407 <div class="line"><span class="comment"> * memory to the last NUMA node.</span></div>
408 <div class="line"><span class="comment"> *****************************************************************/</span></div>
409 <div class="line"> <span class="comment">/* Get last node. There&#39;s always at least one. */</span></div>
410 <div class="line"> n = <a class="code" href="a00196.html#ga789a3f65aedff644be64a18526a03065">hwloc_get_nbobjs_by_type</a>(topology, <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>);</div>
411 <div class="line"> obj = <a class="code" href="a00196.html#ga6f414dd80a2b943967a0ac92da3181a2">hwloc_get_obj_by_type</a>(topology, <a class="code" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a>, n - 1);</div>
412 <div class="line"> </div>
413 <div class="line"> size = 1024*1024;</div>
414 <div class="line"> m = <a class="code" href="a00200.html#ga04736461780fadcf193af218c0122273">hwloc_alloc_membind</a>(topology, size, obj-&gt;<a class="code" href="a00250.html#a08f0d0e16c619a6e653526cbee4ffea3">nodeset</a>,</div>
415 <div class="line"> <a class="code" href="a00200.html#ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c">HWLOC_MEMBIND_BIND</a>, <a class="code" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256">HWLOC_MEMBIND_BYNODESET</a>);</div>
416 <div class="line"> <a class="code" href="a00200.html#ga32dbd4f54e9e4a7179f2dde37ffe6ad7">hwloc_free</a>(topology, m, size);</div>
417 <div class="line"> </div>
418 <div class="line"> m = malloc(size);</div>
419 <div class="line"> <a class="code" href="a00200.html#gaf881faefe20701229f07dd7dbd0125ed">hwloc_set_area_membind</a>(topology, m, size, obj-&gt;<a class="code" href="a00250.html#a08f0d0e16c619a6e653526cbee4ffea3">nodeset</a>,</div>
420 <div class="line"> <a class="code" href="a00200.html#ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c">HWLOC_MEMBIND_BIND</a>, <a class="code" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256">HWLOC_MEMBIND_BYNODESET</a>);</div>
421 <div class="line"> free(m);</div>
422 <div class="line"> </div>
423 <div class="line"> <span class="comment">/* Destroy topology object. */</span></div>
424 <div class="line"> <a class="code" href="a00195.html#ga9f34a640b6fd28d23699d4d084667b15">hwloc_topology_destroy</a>(topology);</div>
425 <div class="line"> </div>
426 <div class="line"> <span class="keywordflow">return</span> 0;</div>
427 <div class="line">}</div>
428 <div class="ttc" id="aa00192_html_ga4bbf39b68b6f568fb92739e7c0ea7801"><div class="ttname"><a href="a00192.html#ga4bbf39b68b6f568fb92739e7c0ea7801">hwloc_cpuset_t</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_cpuset_t</div><div class="ttdoc">A CPU set is a bitmap whose bits are set according to CPU physical OS indexes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:140</div></div>
429 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a">HWLOC_OBJ_NUMANODE</a></div><div class="ttdeci">@ HWLOC_OBJ_NUMANODE</div><div class="ttdoc">NUMA node. An object that contains memory that is directly and byte-accessible to the host processors...</div><div class="ttdef"><b>Definition:</b> hwloc.h:236</div></div>
430 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55ab16ab8c0dbffc234921d86f3dfb63129"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55ab16ab8c0dbffc234921d86f3dfb63129">HWLOC_OBJ_PACKAGE</a></div><div class="ttdeci">@ HWLOC_OBJ_PACKAGE</div><div class="ttdoc">Physical package. The physical package that usually gets inserted into a socket on the motherboard....</div><div class="ttdef"><b>Definition:</b> hwloc.h:191</div></div>
431 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661">HWLOC_OBJ_PU</a></div><div class="ttdeci">@ HWLOC_OBJ_PU</div><div class="ttdoc">Processing Unit, or (Logical) Processor. An execution unit (may share a core with some other logical ...</div><div class="ttdef"><b>Definition:</b> hwloc.h:201</div></div>
432 <div class="ttc" id="aa00193_html_ggacd37bb612667dc437d66bfb175a8dc55ac793958f330bca371aa1535de8aff45f"><div class="ttname"><a href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55ac793958f330bca371aa1535de8aff45f">HWLOC_OBJ_CORE</a></div><div class="ttdeci">@ HWLOC_OBJ_CORE</div><div class="ttdoc">Core. A computation unit (may be shared by several PUs, aka logical processors).</div><div class="ttdef"><b>Definition:</b> hwloc.h:197</div></div>
433 <div class="ttc" id="aa00195_html_ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa"><div class="ttname"><a href="a00195.html#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa">hwloc_topology_init</a></div><div class="ttdeci">int hwloc_topology_init(hwloc_topology_t *topologyp)</div><div class="ttdoc">Allocate a topology context.</div></div>
434 <div class="ttc" id="aa00195_html_ga9d1e76ee15a7dee158b786c30b6a6e38"><div class="ttname"><a href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38">hwloc_topology_t</a></div><div class="ttdeci">struct hwloc_topology * hwloc_topology_t</div><div class="ttdoc">Topology context.</div><div class="ttdef"><b>Definition:</b> hwloc.h:691</div></div>
435 <div class="ttc" id="aa00195_html_ga9f34a640b6fd28d23699d4d084667b15"><div class="ttname"><a href="a00195.html#ga9f34a640b6fd28d23699d4d084667b15">hwloc_topology_destroy</a></div><div class="ttdeci">void hwloc_topology_destroy(hwloc_topology_t topology)</div><div class="ttdoc">Terminate and free a topology context.</div></div>
436 <div class="ttc" id="aa00195_html_gabdf58d87ad77f6615fccdfe0535ff826"><div class="ttname"><a href="a00195.html#gabdf58d87ad77f6615fccdfe0535ff826">hwloc_topology_load</a></div><div class="ttdeci">int hwloc_topology_load(hwloc_topology_t topology)</div><div class="ttdoc">Build the actual topology.</div></div>
437 <div class="ttc" id="aa00196_html_ga1d5ceafe8130fe6e8657bf0bc666ba50"><div class="ttname"><a href="a00196.html#ga1d5ceafe8130fe6e8657bf0bc666ba50">hwloc_get_nbobjs_by_depth</a></div><div class="ttdeci">unsigned hwloc_get_nbobjs_by_depth(hwloc_topology_t topology, int depth)</div><div class="ttdoc">Returns the width of level at depth depth.</div></div>
438 <div class="ttc" id="aa00196_html_ga2d4b12fc187dfc53b35f2fa21d21044d"><div class="ttname"><a href="a00196.html#ga2d4b12fc187dfc53b35f2fa21d21044d">hwloc_get_root_obj</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_root_obj(hwloc_topology_t topology)</div><div class="ttdoc">Returns the top-object of the topology-tree.</div></div>
439 <div class="ttc" id="aa00196_html_ga391f6b2613f0065673eaa4069b93d4e0"><div class="ttname"><a href="a00196.html#ga391f6b2613f0065673eaa4069b93d4e0">hwloc_get_obj_by_depth</a></div><div class="ttdeci">hwloc_obj_t hwloc_get_obj_by_depth(hwloc_topology_t topology, int depth, unsigned idx)</div><div class="ttdoc">Returns the topology object at logical index idx from depth depth.</div></div>
440 <div class="ttc" id="aa00196_html_ga6f414dd80a2b943967a0ac92da3181a2"><div class="ttname"><a href="a00196.html#ga6f414dd80a2b943967a0ac92da3181a2">hwloc_get_obj_by_type</a></div><div class="ttdeci">static hwloc_obj_t hwloc_get_obj_by_type(hwloc_topology_t topology, hwloc_obj_type_t type, unsigned idx)</div><div class="ttdoc">Returns the topology object at logical index idx with type type.</div></div>
441 <div class="ttc" id="aa00196_html_ga789a3f65aedff644be64a18526a03065"><div class="ttname"><a href="a00196.html#ga789a3f65aedff644be64a18526a03065">hwloc_get_nbobjs_by_type</a></div><div class="ttdeci">static int hwloc_get_nbobjs_by_type(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Returns the width of level type type.</div></div>
442 <div class="ttc" id="aa00196_html_ga8125328e69eba709c33ea8055c12589b"><div class="ttname"><a href="a00196.html#ga8125328e69eba709c33ea8055c12589b">hwloc_get_type_or_below_depth</a></div><div class="ttdeci">static int hwloc_get_type_or_below_depth(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Returns the depth of objects of type type or below.</div></div>
443 <div class="ttc" id="aa00196_html_ga8bec782e21be313750da70cf7428b374"><div class="ttname"><a href="a00196.html#ga8bec782e21be313750da70cf7428b374">hwloc_get_type_depth</a></div><div class="ttdeci">int hwloc_get_type_depth(hwloc_topology_t topology, hwloc_obj_type_t type)</div><div class="ttdoc">Returns the depth of objects of type type.</div></div>
444 <div class="ttc" id="aa00196_html_gae54d1782ca9b54bea915f5c18a9158fa"><div class="ttname"><a href="a00196.html#gae54d1782ca9b54bea915f5c18a9158fa">hwloc_topology_get_depth</a></div><div class="ttdeci">int hwloc_topology_get_depth(hwloc_topology_t restrict topology)</div><div class="ttdoc">Get the depth of the hierarchical tree of objects.</div></div>
445 <div class="ttc" id="aa00196_html_ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad"><div class="ttname"><a href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad">HWLOC_TYPE_DEPTH_UNKNOWN</a></div><div class="ttdeci">@ HWLOC_TYPE_DEPTH_UNKNOWN</div><div class="ttdoc">No object of given type exists in the topology.</div><div class="ttdef"><b>Definition:</b> hwloc.h:821</div></div>
446 <div class="ttc" id="aa00197_html_ga870e876931c282a1c7aee2f031912ce3"><div class="ttname"><a href="a00197.html#ga870e876931c282a1c7aee2f031912ce3">hwloc_obj_attr_snprintf</a></div><div class="ttdeci">int hwloc_obj_attr_snprintf(char *restrict string, size_t size, hwloc_obj_t obj, const char *restrict separator, int verbose)</div><div class="ttdoc">Stringify the attributes of a given topology object into a human-readable form.</div></div>
447 <div class="ttc" id="aa00197_html_gadb8765c260edea80c52cd06a76639ba4"><div class="ttname"><a href="a00197.html#gadb8765c260edea80c52cd06a76639ba4">hwloc_obj_type_snprintf</a></div><div class="ttdeci">int hwloc_obj_type_snprintf(char *restrict string, size_t size, hwloc_obj_t obj, int verbose)</div><div class="ttdoc">Stringify the type of a given topology object into a human-readable form.</div></div>
448 <div class="ttc" id="aa00199_html_ga80bc07473a8edf840cae17bd7ec21d48"><div class="ttname"><a href="a00199.html#ga80bc07473a8edf840cae17bd7ec21d48">hwloc_set_cpubind</a></div><div class="ttdeci">int hwloc_set_cpubind(hwloc_topology_t topology, hwloc_const_cpuset_t set, int flags)</div><div class="ttdoc">Bind current process or thread on cpus given in physical bitmap set.</div></div>
449 <div class="ttc" id="aa00200_html_ga04736461780fadcf193af218c0122273"><div class="ttname"><a href="a00200.html#ga04736461780fadcf193af218c0122273">hwloc_alloc_membind</a></div><div class="ttdeci">void * hwloc_alloc_membind(hwloc_topology_t topology, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)</div><div class="ttdoc">Allocate some memory on NUMA memory nodes specified by set.</div></div>
450 <div class="ttc" id="aa00200_html_ga32dbd4f54e9e4a7179f2dde37ffe6ad7"><div class="ttname"><a href="a00200.html#ga32dbd4f54e9e4a7179f2dde37ffe6ad7">hwloc_free</a></div><div class="ttdeci">int hwloc_free(hwloc_topology_t topology, void *addr, size_t len)</div><div class="ttdoc">Free memory that was previously allocated by hwloc_alloc() or hwloc_alloc_membind().</div></div>
451 <div class="ttc" id="aa00200_html_gaf881faefe20701229f07dd7dbd0125ed"><div class="ttname"><a href="a00200.html#gaf881faefe20701229f07dd7dbd0125ed">hwloc_set_area_membind</a></div><div class="ttdeci">int hwloc_set_area_membind(hwloc_topology_t topology, const void *addr, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)</div><div class="ttdoc">Bind the already-allocated memory identified by (addr, len) to the NUMA node(s) specified by set.</div></div>
452 <div class="ttc" id="aa00200_html_ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256"><div class="ttname"><a href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256">HWLOC_MEMBIND_BYNODESET</a></div><div class="ttdeci">@ HWLOC_MEMBIND_BYNODESET</div><div class="ttdoc">Consider the bitmap argument as a nodeset.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1491</div></div>
453 <div class="ttc" id="aa00200_html_ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c"><div class="ttname"><a href="a00200.html#ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c">HWLOC_MEMBIND_BIND</a></div><div class="ttdeci">@ HWLOC_MEMBIND_BIND</div><div class="ttdoc">Allocate memory on the specified nodes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:1403</div></div>
454 <div class="ttc" id="aa00207_html_ga2ed589bea28711e80b92066510a5607d"><div class="ttname"><a href="a00207.html#ga2ed589bea28711e80b92066510a5607d">hwloc_obj_type_is_cache</a></div><div class="ttdeci">int hwloc_obj_type_is_cache(hwloc_obj_type_t type)</div><div class="ttdoc">Check whether an object type is a CPU Cache (Data, Unified or Instruction).</div></div>
455 <div class="ttc" id="aa00214_html_ga0fece972134fdecf2da9bc7a11dd827e"><div class="ttname"><a href="a00214.html#ga0fece972134fdecf2da9bc7a11dd827e">hwloc_bitmap_asprintf</a></div><div class="ttdeci">int hwloc_bitmap_asprintf(char **strp, hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Stringify a bitmap into a newly allocated string.</div></div>
456 <div class="ttc" id="aa00214_html_ga156130d85b3a0674d6e0e6770fe68fbe"><div class="ttname"><a href="a00214.html#ga156130d85b3a0674d6e0e6770fe68fbe">hwloc_bitmap_free</a></div><div class="ttdeci">void hwloc_bitmap_free(hwloc_bitmap_t bitmap)</div><div class="ttdoc">Free bitmap bitmap.</div></div>
457 <div class="ttc" id="aa00214_html_gaa611a77c092e679246afdf9a60d5db8b"><div class="ttname"><a href="a00214.html#gaa611a77c092e679246afdf9a60d5db8b">hwloc_bitmap_singlify</a></div><div class="ttdeci">int hwloc_bitmap_singlify(hwloc_bitmap_t bitmap)</div><div class="ttdoc">Keep a single index among those set in bitmap bitmap.</div></div>
458 <div class="ttc" id="aa00214_html_gae679434c1a5f41d3560a8a7e2c1b0dee"><div class="ttname"><a href="a00214.html#gae679434c1a5f41d3560a8a7e2c1b0dee">hwloc_bitmap_dup</a></div><div class="ttdeci">hwloc_bitmap_t hwloc_bitmap_dup(hwloc_const_bitmap_t bitmap)</div><div class="ttdoc">Duplicate bitmap bitmap by allocating a new bitmap and copying bitmap contents.</div></div>
459 <div class="ttc" id="aa00250_html"><div class="ttname"><a href="a00250.html">hwloc_obj</a></div><div class="ttdoc">Structure of a topology object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:395</div></div>
460 <div class="ttc" id="aa00250_html_a04d05403da37bfe17cd63b7c7dd07b1f"><div class="ttname"><a href="a00250.html#a04d05403da37bfe17cd63b7c7dd07b1f">hwloc_obj::children</a></div><div class="ttdeci">struct hwloc_obj ** children</div><div class="ttdoc">Normal children, children[0 .. arity -1].</div><div class="ttdef"><b>Definition:</b> hwloc.h:455</div></div>
461 <div class="ttc" id="aa00250_html_a08f0d0e16c619a6e653526cbee4ffea3"><div class="ttname"><a href="a00250.html#a08f0d0e16c619a6e653526cbee4ffea3">hwloc_obj::nodeset</a></div><div class="ttdeci">hwloc_nodeset_t nodeset</div><div class="ttdoc">NUMA nodes covered by this object or containing this object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:539</div></div>
462 <div class="ttc" id="aa00250_html_a61a7a80a68eaccbaaa28269e678c81a9"><div class="ttname"><a href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">hwloc_obj::os_index</a></div><div class="ttdeci">unsigned os_index</div><div class="ttdoc">OS-provided physical index number. It is not guaranteed unique across the entire machine,...</div><div class="ttdef"><b>Definition:</b> hwloc.h:400</div></div>
463 <div class="ttc" id="aa00250_html_a67925e0f2c47f50408fbdb9bddd0790f"><div class="ttname"><a href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">hwloc_obj::cpuset</a></div><div class="ttdeci">hwloc_cpuset_t cpuset</div><div class="ttdoc">CPUs covered by this object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:511</div></div>
464 <div class="ttc" id="aa00250_html_aac3f6da35c9b57599909a44ce2b716c1"><div class="ttname"><a href="a00250.html#aac3f6da35c9b57599909a44ce2b716c1">hwloc_obj::arity</a></div><div class="ttdeci">unsigned arity</div><div class="ttdoc">Number of normal children. Memory, Misc and I/O children are not listed here but rather in their dedi...</div><div class="ttdef"><b>Definition:</b> hwloc.h:451</div></div>
465 <div class="ttc" id="aa00250_html_acc4f0803f244867e68fe0036800be5de"><div class="ttname"><a href="a00250.html#acc4f0803f244867e68fe0036800be5de">hwloc_obj::type</a></div><div class="ttdeci">hwloc_obj_type_t type</div><div class="ttdoc">Type of object.</div><div class="ttdef"><b>Definition:</b> hwloc.h:397</div></div>
466 <div class="ttc" id="aa00250_html_accd40e29f71f19e88db62ea3df02adc8"><div class="ttname"><a href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj::attr</a></div><div class="ttdeci">union hwloc_obj_attr_u * attr</div><div class="ttdoc">Object type-specific Attributes, may be NULL if no attribute value was found.</div><div class="ttdef"><b>Definition:</b> hwloc.h:414</div></div>
467 <div class="ttc" id="aa00250_html_adc494f6aed939992be1c55cca5822900"><div class="ttname"><a href="a00250.html#adc494f6aed939992be1c55cca5822900">hwloc_obj::parent</a></div><div class="ttdeci">struct hwloc_obj * parent</div><div class="ttdoc">Parent, NULL if root (Machine object)</div><div class="ttdef"><b>Definition:</b> hwloc.h:445</div></div>
468 <div class="ttc" id="aa00254_html_a23f553f3252c9d13f2338231cd354ea9"><div class="ttname"><a href="a00254.html#a23f553f3252c9d13f2338231cd354ea9">hwloc_obj_attr_u::cache</a></div><div class="ttdeci">struct hwloc_obj_attr_u::hwloc_cache_attr_s cache</div></div>
469 <div class="ttc" id="aa00266_html_abe5e788943ed04302976740c829674c0"><div class="ttname"><a href="a00266.html#abe5e788943ed04302976740c829674c0">hwloc_obj_attr_u::hwloc_cache_attr_s::size</a></div><div class="ttdeci">hwloc_uint64_t size</div><div class="ttdoc">Size of cache in bytes.</div><div class="ttdef"><b>Definition:</b> hwloc.h:616</div></div>
470 </div><!-- fragment --><p>hwloc provides a <code>pkg-config</code> executable to obtain relevant compiler and linker flags. For example, it can be used thusly to compile applications that utilize the hwloc library (assuming GNU Make):</p>
471 <pre class="fragment">CFLAGS += $(shell pkg-config --cflags hwloc)
472 LDLIBS += $(shell pkg-config --libs hwloc)
473
474 hwloc-hello: hwloc-hello.c
475 $(CC) hwloc-hello.c $(CFLAGS) -o hwloc-hello $(LDLIBS)
476 </pre><p>On a machine 2 processor packages &ndash; each package of which has two processing cores &ndash; the output from running <code>hwloc-hello</code> could be something like the following:</p>
477 <pre class="fragment">shell$ ./hwloc-hello
478 *** Objects at level 0
479 Index 0: Machine
480 *** Objects at level 1
481 Index 0: Package#0
482 Index 1: Package#1
483 *** Objects at level 2
484 Index 0: Core#0
485 Index 1: Core#1
486 Index 2: Core#3
487 Index 3: Core#2
488 *** Objects at level 3
489 Index 0: PU#0
490 Index 1: PU#1
491 Index 2: PU#2
492 Index 3: PU#3
493 *** Printing overall tree
494 Machine
495 Package#0
496 Core#0
497 PU#0
498 Core#1
499 PU#1
500 Package#1
501 Core#3
502 PU#2
503 Core#2
504 PU#3
505 *** 2 package(s)
506 *** Logical processor 0 has 0 caches totaling 0KB
507 shell$
508 </pre><p>
509 </div><div class="section" id="history">
510 </p>
511 <h1><a class="anchor" id="history"></a>
512 History / Credits</h1>
513 <p>hwloc is the evolution and merger of the libtopology project and the Portable Linux Processor Affinity (PLPA) (<a href="https://www.open-mpi.org/projects/plpa/">https://www.open-mpi.org/projects/plpa/</a>) project. Because of functional and ideological overlap, these two code bases and ideas were merged and released under the name "hwloc" as an Open MPI sub-project.</p>
514 <p>libtopology was initially developed by the Inria Runtime Team-Project. PLPA was initially developed by the Open MPI development team as a sub-project. Both are now deprecated in favor of hwloc, which is distributed as an Open MPI sub-project.</p>
515 <p>
516 </div><div class="section" id="further_reading">
517 </p>
518 <h1><a class="anchor" id="further_reading"></a>
519 Further Reading</h1>
520 <p>The documentation chapters include</p>
521 <ul>
522 <li>
523 <a class="el" href="a00392.html">Terms and Definitions</a> </li>
524 <li>
525 <a class="el" href="a00393.html">Command-Line Tools</a> </li>
526 <li>
527 <a class="el" href="a00394.html">Environment Variables</a> </li>
528 <li>
529 <a class="el" href="a00395.html">CPU and Memory Binding Overview</a> </li>
530 <li>
531 <a class="el" href="a00396.html">I/O Devices</a> </li>
532 <li>
533 <a class="el" href="a00397.html">Miscellaneous objects</a> </li>
534 <li>
535 <a class="el" href="a00398.html">Object attributes</a> </li>
536 <li>
537 <a class="el" href="a00399.html">Topology Attributes: Distances, Memory Attributes and CPU Kinds</a> </li>
538 <li>
539 <a class="el" href="a00400.html">Importing and exporting topologies from/to XML files</a> </li>
540 <li>
541 <a class="el" href="a00401.html">Synthetic topologies</a> </li>
542 <li>
543 <a class="el" href="a00402.html">Interoperability With Other Software</a> </li>
544 <li>
545 <a class="el" href="a00403.html">Thread Safety</a> </li>
546 <li>
547 <a class="el" href="a00404.html">Components and plugins</a> </li>
548 <li>
549 <a class="el" href="a00405.html">Embedding hwloc in Other Software</a> </li>
550 <li>
551 <a class="el" href="a00406.html">Frequently Asked Questions</a> </li>
552 <li>
553 <a class="el" href="a00407.html">Upgrading to the hwloc 2.0 API</a> </li>
554 </ul>
555 <p>Make sure to have had a look at those too!</p>
556 <p>
557 </div>
558 </p>
70559 </div></div><!-- contents -->
71560 </div><!-- PageDoc -->
72561 <!-- start footer part -->
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Object attributes</title>
7 <title>Hardware Locality (hwloc): Terms and Definitions</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="PageDoc"><div class="header">
4141 <div class="headertitle">
42 <div class="title">Object attributes </div> </div>
42 <div class="title">Terms and Definitions </div> </div>
4343 </div><!--header-->
4444 <div class="contents">
4545 <div class="textblock"><p>
46 <div class="section" id="attributes_normal">
46 <div class="section" id="termsanddefs_objects">
4747 </p>
48 <h1><a class="anchor" id="attributes_normal"></a>
49 Normal attributes</h1>
50 <p>hwloc objects have many generic attributes in the <a class="el" href="a00244.html" title="Structure of a topology object.">hwloc_obj</a> structure, for instance their <code>logical_index</code> or <code>os_index</code> (see <a class="el" href="a00400.html#faq_indexes">Should I use logical or physical/OS indexes? and how?</a>), <code>depth</code> or <code>name</code>.</p>
51 <p>The kind of object is first described by the <code>obj-&gt;type</code> generic attribute (an integer). OS devices also have a specific <code>obj-&gt;attr-&gt;osdev.type</code> integer for distinguishing between NICs, GPUs, etc. Objects may also have an optional <code>obj-&gt;subtype</code> pointing to a better description string. For instance subtype is useful to say what Group objects are actually made of (e.g. <em>Book</em> for Linux S/390 books). It may also specify that a Block OS device is a <em>Disk</em>, or that a CoProcessor OS device is a <em>CUDA</em> device. This subtype is displayed by lstopo either in place or after the main <code>obj-&gt;type</code> attribute. NUMA nodes that correspond GPU memory may also have <em>GPUMemory</em> as subtype.</p>
52 <p>Each object also contains an <code>attr</code> field that, if non NULL, points to a union <a class="el" href="a00248.html" title="Object type-specific Attributes.">hwloc_obj_attr_u</a> of type-specific attribute structures. For instance, a L2Cache object <code>obj</code> contains cache-specific information in <code>obj-&gt;attr-&gt;cache</code>, such as its size and associativity, cache type. See <a class="el" href="a00248.html" title="Object type-specific Attributes.">hwloc_obj_attr_u</a> for details.</p>
53 <p>
54 </div><div class="section" id="attributes_info">
55 </p>
56 <h1><a class="anchor" id="attributes_info"></a>
57 Custom string infos</h1>
58 <p>Aside os these generic attribute fields, hwloc annotates many objects with string attributes that are made of a key and a value. Each object contains a list of such pairs that may be consulted manually (looking at the object <code>infos</code> array field) or using the <a class="el" href="a00195.html#gab358661a92bb27d8542b255cc9f6f25e" title="Search the given key name in object infos and return the corresponding value.">hwloc_obj_get_info_by_name()</a>. The user may additionally add new key-value pairs to any object using <a class="el" href="a00195.html#gace7654bb8a9002caae1a4b8a59e7452e" title="Add the given info name and value pair to the given object.">hwloc_obj_add_info()</a> or the <a class="el" href="a00387.html#cli_hwloc_annotate">hwloc-annotate</a> program.</p>
59 <p>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.</p>
60 <p>
61 </div><div class="subsection" id="attributes_info_platform">
62 </p>
63 <h2><a class="anchor" id="attributes_info_platform"></a>
64 Hardware Platform Information</h2>
65 <p>These info attributes are attached to the root object (Machine).</p>
48 <h1><a class="anchor" id="termsanddefs_objects"></a>
49 Objects</h1>
6650 <dl>
67 <dt>PlatformName, PlatformModel, PlatformVendor, PlatformBoardID, PlatformRevision, </dt>
68 <dd></dd>
69 <dt>SystemVersionRegister, ProcessorVersionRegister (Machine) </dt>
70 <dd>Some POWER/PowerPC-specific attributes describing the platform and processor. Currently only available on Linux. Usually added to Package objects, but can be in Machine instead if hwloc failed to discover any package. </dd>
71 <dt>DMIBoardVendor, DMIBoardName, etc. </dt>
72 <dd>DMI hardware information such as the motherboard and chassis models and vendors, the BIOS revision, etc., as reported by Linux under <code>/sys/class/dmi/id/</code>. </dd>
73 <dt>MemoryMode, ClusterMode </dt>
74 <dd><p class="startdd">Intel Xeon Phi processor configuration modes. Available if hwloc-dump-hwdata was used (see <a class="el" href="a00400.html#faq_knl_dump">Why do I need hwloc-dump-hwdata for memory on Intel Xeon Phi processor?</a>) or if hwloc managed to guess them from the NUMA configuration.</p>
75 <p class="enddd">The memory mode may be <em>Cache</em>, <em>Flat</em>, <em>Hybrid50</em> (half the MCDRAM is used as a cache) or <em>Hybrid25</em> (25% of MCDRAM as cache). The cluster mode may be <em>Quadrant</em>, <em>Hemisphere</em>, <em>All2All</em>, <em>SNC2</em> or <em>SNC4</em>. See doc/examples/get-knl-modes.c in the source directory for an example of retrieving these attributes. </p>
51 <dt>Object </dt>
52 <dd><p class="startdd">Interesting kind of part of the system, such as a Core, a L2Cache, a NUMA memory node, etc. The different types detected by hwloc are detailed in the <a class="el" href="a00193.html#gacd37bb612667dc437d66bfb175a8dc55" title="Type of topology object.">hwloc_obj_type_t</a> enumeration.</p>
53 <p class="interdd">There are four kinds of Objects: Memory (NUMA nodes and Memory-side caches), I/O (Bridges, PCI and OS devices), Misc, and Normal (everything else, including Machine, Package, Die, Core, PU, CPU Caches, etc.). Normal and Memory objects have (non-NULL) CPU sets and nodesets, while I/O and Misc don't.</p>
54 <p class="interdd">Objects are topologically sorted by locality (CPU and node sets) into a tree (see <a class="el" href="a00392.html#termsanddefs_tree">Hierarchy, Tree and Levels</a>). </p>
55 <p class="enddd"></p>
56 </dd>
57 <dt>Processing Unit (PU) </dt>
58 <dd><p class="startdd">The smallest processing element that can be represented by a hwloc object. It may be a single-core processor, a core of a multicore processor, or a single thread in a SMT processor (also sometimes called "Logical processor", not to be confused with "Logical index of a processor"). hwloc's PU acronym stands for Processing Unit. </p>
59 <p class="enddd"></p>
60 </dd>
61 <dt>Package </dt>
62 <dd><p class="startdd">A processor Package is the physical package that usually gets inserted into a socket on the motherboard. It is also often called a physical processor or a CPU even if these names bring confusion with respect to cores and processing units. A processor package usually contains multiple cores (and may also be composed of multiple dies). hwloc Package objects were called Sockets up to hwloc 1.10. </p>
63 <p class="enddd"></p>
64 </dd>
65 <dt>NUMA Node </dt>
66 <dd><p class="startdd">An object that contains memory that is directly and byte-accessible to the host processors. It is usually close to some cores as specified by its CPU set. Hence it is attached as a memory child of the object that groups those cores together, for instance a Package objects with 4 Core children (see <a class="el" href="a00392.html#termsanddefs_tree">Hierarchy, Tree and Levels</a>). </p>
67 <p class="enddd"></p>
68 </dd>
69 <dt>Memory-side Cache </dt>
70 <dd><p class="startdd">A cache in front of a specific memory region (e.g. a range of physical addresses). It caches all accesses to that region without caring about which core issued the request. This is the opposite of usual CPU caches where only accesses from the local cores are cached, without caring about the target memory.</p>
71 <p class="enddd">In hwloc, memory-side caches are memory objects placed between their local CPU objects (parent) and the target NUMA node memory (child). </p>
7672 </dd>
7773 </dl>
7874 <p>
79 </div><div class="subsection" id="attributes_info_os">
75 </div><div class="section" id="termsanddefs_indexes">
8076 </p>
81 <h2><a class="anchor" id="attributes_info_os"></a>
82 Operating System Information</h2>
83 <p>These info attributes are attached to the root object (Machine).</p>
77 <h1><a class="anchor" id="termsanddefs_indexes"></a>
78 Indexes and Sets</h1>
8479 <dl>
85 <dt>OSName, OSRelease, OSVersion, HostName, Architecture </dt>
86 <dd>The operating system name, release, version, the hostname and the architecture name, as reported by the Unix <code>uname</code> command. </dd>
87 <dt>LinuxCgroup </dt>
88 <dd>The name the Linux control group where the calling process is placed. </dd>
89 <dt>WindowsBuildEnvironment </dt>
90 <dd>Either MinGW or Cygwin when one of these environments was used during build. </dd>
80 <dt>OS or physical index </dt>
81 <dd><p class="startdd">The index that the operating system (OS) uses to identify the object. This may be completely arbitrary, non-unique, non-contiguous, not representative of logical proximity, and may depend on the BIOS configuration. That is why hwloc almost never uses them, only in the default lstopo output (<code>P#x</code>) and cpuset masks. See also <a class="el" href="a00406.html#faq_indexes">Should I use logical or physical/OS indexes? and how?</a>.</p>
82 <p class="enddd"></p>
83 </dd>
84 <dt>Logical index </dt>
85 <dd><p class="startdd">Index to uniquely identify objects of the same type and depth, automatically computed by hwloc according to the topology. It expresses logical proximity in a generic way, i.e. objects which have adjacent logical indexes are adjacent in the topology. That is why hwloc almost always uses it in its API, since it expresses logical proximity. They can be shown (as <code>L#x</code>) by <code>lstopo</code> thanks to the <code>-l</code> option. This index is always linear and in the range [0, num_objs_same_type_same_level-1]. Think of it as ``cousin rank.'' The ordering is based on topology first, and then on OS CPU numbers, so it is stable across everything except firmware CPU renumbering. "Logical index" should not be confused with "Logical processor". A "Logical
86 processor" (which in hwloc we rather call "processing unit" to avoid the confusion) has both a physical index (as chosen arbitrarily by BIOS/OS) and a logical index (as computed according to logical proximity by hwloc). See also <a class="el" href="a00406.html#faq_indexes">Should I use logical or physical/OS indexes? and how?</a>.</p>
87 <p class="enddd"></p>
88 </dd>
89 <dt>CPU set </dt>
90 <dd><p class="startdd">The set of processing units (PU) logically included in an object (if it makes sense). They are always expressed using physical processor numbers (as announced by the OS). They are implemented as the <a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84" title="Set of bits represented as an opaque pointer to an internal bitmap.">hwloc_bitmap_t</a> opaque structure. hwloc CPU sets are just masks, they do <em>not</em> have any relation with an operating system actual binding notion like Linux' cpusets. I/O and Misc objects do not have CPU sets while all Normal and Memory objects have non-NULL CPU sets.</p>
91 <p class="enddd"></p>
92 </dd>
93 <dt>Node set </dt>
94 <dd><p class="startdd">The set of NUMA memory nodes logically included in an object (if it makes sense). They are always expressed using physical node numbers (as announced by the OS). They are implemented with the <a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84" title="Set of bits represented as an opaque pointer to an internal bitmap.">hwloc_bitmap_t</a> opaque structure. as bitmaps. I/O and Misc objects do not have Node sets while all Normal and Memory objects have non-NULL nodesets.</p>
95 <p class="enddd"></p>
96 </dd>
97 <dt>Bitmap </dt>
98 <dd><p class="startdd">A possibly-infinite set of bits used for describing sets of objects such as CPUs (CPU sets) or memory nodes (Node sets). They are implemented with the <a class="el" href="a00214.html#gaa3c2bf4c776d603dcebbb61b0c923d84" title="Set of bits represented as an opaque pointer to an internal bitmap.">hwloc_bitmap_t</a> opaque structure. </p>
99 <p class="enddd"></p>
100 </dd>
91101 </dl>
92102 <p>
93 </div><div class="subsection" id="attributes_info_hwloc">
103 </div><div class="section" id="termsanddefs_tree">
94104 </p>
95 <h2><a class="anchor" id="attributes_info_hwloc"></a>
96 hwloc Information</h2>
97 <p>Unless specified, these info attributes are attached to the root object (Machine).</p>
105 <h1><a class="anchor" id="termsanddefs_tree"></a>
106 Hierarchy, Tree and Levels</h1>
98107 <dl>
99 <dt>Backend (topology root, or specific object added by that backend) </dt>
100 <dd>The name of the hwloc backend/component that filled the topology. If several components were combined, multiple Backend keys may exist, with different values, for instance <code>x86</code> and <code>Linux</code> in the root object and <code>CUDA</code> in CUDA OS device objects. </dd>
101 <dt>SyntheticDescription </dt>
102 <dd>The description string that was given to hwloc to build this synthetic topology. </dd>
103 <dt>hwlocVersion </dt>
104 <dd>The version number of the hwloc library that was used to generate the topology. If the topology was loaded from XML, this is not the hwloc version that loaded it, but rather the first hwloc instance that exported the topology to XML earlier. </dd>
105 <dt>ProcessName </dt>
106 <dd>The name of the process that contains the hwloc library that was used to generate the topology. If the topology was from XML, this is not the hwloc process that loaded it, but rather the first process that exported the topology to XML earlier. </dd>
108 <dt>Parent object </dt>
109 <dd><p class="startdd">The object logically containing the current object, for example because its CPU set includes the CPU set of the current object. All objects have a non-NULL parent, except the root of the topology (Machine object). </p>
110 <p class="enddd"></p>
111 </dd>
112 <dt>Ancestor object </dt>
113 <dd><p class="startdd">The parent object, or its own parent, and so on.</p>
114 <p class="enddd"></p>
115 </dd>
116 <dt>Children object(s) </dt>
117 <dd><p class="startdd">The object (or objects) contained in the current object because their CPU set is included in the CPU set of the current object. Each object may also contain separated lists for Memory, I/O and Misc object children. </p>
118 <p class="enddd"></p>
119 </dd>
120 <dt>Arity </dt>
121 <dd><p class="startdd">The number of normal children of an object. There are also specific arities for Memory, I/O and Misc children. </p>
122 <p class="enddd"></p>
123 </dd>
124 <dt>Sibling objects </dt>
125 <dd><p class="startdd">Objects in the same children list, which all of them are normal children of the same parent, or all of them are Memory children of the same parent, or I/O children, or Misc. They usually have the same type (and hence are cousins, as well). But they may not if the topology is asymmetric. </p>
126 <p class="enddd"></p>
127 </dd>
128 <dt>Sibling rank </dt>
129 <dd><p class="startdd">Index to uniquely identify objects which have the same parent, and is always in the range [0, arity-1] (respectively memory_arity, io_arity or misc_arity for Memory, I/O and Misc children of a parent).</p>
130 <p class="enddd"></p>
131 </dd>
132 <dt>Cousin objects </dt>
133 <dd><p class="startdd">Objects of the same type (and depth) as the current object, even if they do not have the same parent.</p>
134 <p class="enddd"></p>
135 </dd>
136 <dt>Level </dt>
137 <dd><p class="startdd">Set of objects of the same type and depth. All these objects are cousins.</p>
138 <p class="interdd">Memory, I/O and Misc objects also have their own specific levels and (virtual) depth. </p>
139 <p class="enddd"></p>
140 </dd>
141 <dt>Depth </dt>
142 <dd><p class="startdd">Nesting level in the object tree, starting from the root object. If the topology is symmetric, the depth of a child is equal to the parent depth plus one, and an object depth is also equal to the number of parent/child links between the root object and the given object. If the topology is asymmetric, the difference between some parent and child depths may be larger than one when some intermediate levels (for instance groups) are missing in only some parts of the machine.</p>
143 <p class="interdd">The depth of the Machine object is always 0 since it is always the root of the topology. The depth of PU objects is equal to the number of levels in the topology minus one.</p>
144 <p class="interdd">Memory, I/O and Misc objects also have their own specific levels and depth. </p>
145 <p class="enddd"></p>
146 </dd>
107147 </dl>
108 <p>
109 </div><div class="subsection" id="attributes_info_cpu">
110 </p>
111 <h2><a class="anchor" id="attributes_info_cpu"></a>
112 CPU Information</h2>
113 <p>These info attributes are attached to Package objects, or to the root object (Machine) if package locality information is missing.</p>
114 <dl>
115 <dt>CPUModel </dt>
116 <dd>The processor model name. </dd>
117 <dt>CPUVendor, CPUModelNumber, CPUFamilyNumber, CPUStepping </dt>
118 <dd>The processor vendor name, model number, family number, and stepping number. Currently available for x86 and Xeon Phi processors on most systems, and for ia64 processors on Linux (except CPUStepping). </dd>
119 <dt>CPURevision </dt>
120 <dd>A POWER/PowerPC-specific general processor revision number, currently only available on Linux. </dd>
121 <dt>CPUType </dt>
122 <dd>A Solaris-specific general processor type name, such as "i86pc". </dd>
123 </dl>
124 <p>
125 </div><div class="subsection" id="attributes_info_osdev">
126 </p>
127 <h2><a class="anchor" id="attributes_info_osdev"></a>
128 OS Device Information</h2>
129 <p>These info attributes are attached to OS device objects specified in parentheses.</p>
130 <dl>
131 <dt>Vendor, Model, Revision, SerialNumber, Size, SectorSize (Block OS devices) </dt>
132 <dd>The vendor and model names, revision, serial number, size (in kB) and SectorSize (in bytes). </dd>
133 <dt>LinuxDeviceID (Block OS devices) </dt>
134 <dd>The major/minor device number such as 8:0 of Linux device. </dd>
135 <dt>GPUVendor, GPUModel (GPU or Co-Processor OS devices) </dt>
136 <dd>The vendor and model names of the GPU device. </dd>
137 <dt>OpenCLDeviceType, OpenCLPlatformIndex, </dt>
138 <dd></dd>
139 <dt>OpenCLPlatformName, OpenCLPlatformDeviceIndex (OpenCL OS devices) </dt>
140 <dd>The type of OpenCL device, the OpenCL platform index and name, and the index of the device within the platform. </dd>
141 <dt>OpenCLComputeUnits, OpenCLGlobalMemorySize (OpenCL OS devices) </dt>
142 <dd>The number of compute units and global memory size (in kB) of an OpenCL device. </dd>
143 <dt>AMDUUID, AMDSerial (RSMI GPU OS devices) </dt>
144 <dd>The UUID and serial number of AMD GPUs. </dd>
145 <dt>XGMIHiveID (RSMI GPU OS devices) </dt>
146 <dd>The ID of the group of GPUs (Hive) interconnected by XGMI links </dd>
147 <dt>XGMIPeers (RSMI GPU OS devices) </dt>
148 <dd>The list of RSMI OS devices that are directly connected to the current device through XGMI links. They are given as a space-separated list of object names, for instance <em>rsmi2 rsmi3</em>. </dd>
149 <dt>NVIDIAUUID, NVIDIASerial (NVML GPU OS devices) </dt>
150 <dd>The UUID and serial number of NVIDIA GPUs. </dd>
151 <dt>CUDAMultiProcessors, CUDACoresPerMP, </dt>
152 <dd></dd>
153 <dt>CUDAGlobalMemorySize, CUDAL2CacheSize, CUDASharedMemorySizePerMP (CUDA OS devices) </dt>
154 <dd>The number of shared multiprocessors, the number of cores per multiprocessor, the global memory size, the (global) L2 cache size, and size of the shared memory in each multiprocessor of a CUDA device. Sizes are in kB. </dd>
155 <dt>Address, Port (Network interface OS devices) </dt>
156 <dd>The MAC address and the port number of a software network interface, such as <code>eth4</code> on Linux. </dd>
157 <dt>NodeGUID, SysImageGUID, Port1State, Port2LID, Port2LMC, Port3GID1 (OpenFabrics OS devices) </dt>
158 <dd>The node GUID and GUID mask, the state of a port #1 (value is 4 when active), the LID and LID mask count of port #2, and GID #1 of port #3. </dd>
159 </dl>
160 <p>
161 </div><div class="subsection" id="attributes_info_otherobjs">
162 </p>
163 <h2><a class="anchor" id="attributes_info_otherobjs"></a>
164 Other Object-specific Information</h2>
165 <p>These info attributes are attached to objects specified in parentheses.</p>
166 <dl>
167 <dt>DAXDevice (NUMA Nodes) </dt>
168 <dd>The name of the Linux DAX device that was used to expose a non-volatile memory region as a volatile NUMA node. </dd>
169 <dt>PCIBusID (GPUMemory NUMA Nodes) </dt>
170 <dd>The PCI bus ID of the GPU whose memory is exposed in this NUMA node. </dd>
171 <dt>Inclusive (Caches) </dt>
172 <dd>The inclusiveness of a cache (1 if inclusive, 0 otherwise). Currently only available on x86 processors. </dd>
173 <dt>SolarisProcessorGroup (Group) </dt>
174 <dd>The Solaris kstat processor group name that was used to build this Group object. </dd>
175 <dt>PCIVendor, PCIDevice (PCI devices and bridges) </dt>
176 <dd>The vendor and device names of the PCI device. </dd>
177 <dt>PCISlot (PCI devices or Bridges) </dt>
178 <dd>The name/number of the physical slot where the device is plugged. If the physical device contains PCI bridges above the actual PCI device, the attribute may be attached to the highest bridge (i.e. the first object that actually appears below the physical slot). </dd>
179 <dt>Vendor, AssetTag, PartNumber, DeviceLocation, BankLocation (MemoryModule Misc objects) </dt>
180 <dd>Information about memory modules (DIMMs) extracted from SMBIOS. </dd>
181 </dl>
182 <p>
183 </div><div class="subsection" id="attributes_info_user">
184 </p>
185 <h2><a class="anchor" id="attributes_info_user"></a>
186 User-Given Information</h2>
187 <p>Here is a non-exhaustive list of user-provided info attributes that have a special meaning: </p><dl>
188 <dt>lstopoStyle </dt>
189 <dd>Enforces the style of an object (background and text colors) in the graphical output of lstopo. See CUSTOM COLORS in the lstopo(1) manpage for details. </dd>
190 </dl>
148 <p>The following diagram can help to understand the vocabulary of the relationships by showing the example of a machine with two dual core packages (with no hardware threads); thus, a topology with 5 levels. Each box with rounded corner corresponds to one <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d" title="Convenience typedef; a pointer to a struct hwloc_obj.">hwloc_obj_t</a>, containing the values of the different integer fields (depth, logical_index, etc.), and arrows show to which other <a class="el" href="a00194.html#ga79b8ab56877ef99ac59b833203391c7d" title="Convenience typedef; a pointer to a struct hwloc_obj.">hwloc_obj_t</a> pointers point to (first_child, parent, etc.).</p>
149 <p>The topology always starts with a Machine object as root (depth 0) and ends with PU objects at the bottom (depth 4 here).</p>
150 <p>Objects of the same level (cousins) are listed in red boxes and linked with red arrows. Children of the same parent (siblings) are linked with blue arrows.</p>
151 <p>The L2 cache of the last core is intentionally missing to show how asymmetric topologies are handled. See <a class="el" href="a00406.html#faq_asymmetric">What happens if my topology is asymmetric?</a> for more information about such strange topologies.</p>
152 <div class="image">
153 <img src="diagram.png" alt=""/>
154 </div>
155 <p>It should be noted that for PU objects, the logical index &ndash; as computed linearly by hwloc &ndash; is not the same as the OS index.</p>
156 <p>The NUMA node is on the side because it is not part of the main tree but rather attached to the object that corresponds to its locality (the entire machine here, hence the root object). It is attached as a <em>Memory</em> child (in green) and has a virtual depth (negative). It could also have siblings if there were multiple local NUMA nodes, or cousins if other NUMA nodes were attached somewhere else in the machine.</p>
157 <p>I/O or Misc objects could be attached in a similar manner. </p>
191158 </div></div><!-- contents -->
192159 </div><!-- PageDoc -->
193160 <!-- start footer part -->
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Topology Attributes: Distances, Memory Attributes and CPU Kinds</title>
7 <title>Hardware Locality (hwloc): Command-Line Tools</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="PageDoc"><div class="header">
4141 <div class="headertitle">
42 <div class="title">Topology Attributes: Distances, Memory Attributes and CPU Kinds </div> </div>
42 <div class="title">Command-Line Tools </div> </div>
4343 </div><!--header-->
4444 <div class="contents">
4545 <div class="textblock"><p>
4646 <div class="section">
4747 </p>
48 <p>Besides the hierarchy of objects and individual object attributes (see <a class="el" href="a00392.html">Object attributes</a>), hwloc may also expose finer information about the hardware organization.</p>
48 <p>hwloc comes with an extensive C programming interface and several command line utilities. Each of them is fully documented in its own manual page; the following is a summary of the available command line tools.</p>
4949 <p>
50 </div><div class="section" id="topoattrs_distances">
50 </div><div class="section" id="cli_lstopo">
5151 </p>
52 <h1><a class="anchor" id="topoattrs_distances"></a>
53 Distances</h1>
54 <p>A machine with 4 CPUs may have identical links between every pairs of CPUs, or those CPUs could also only be connected through a ring. In the ring case, accessing the memory of nearby CPUs is slower than local memory, but it is also faster than accessing the memory of CPU on the opposite side of the ring. These deep details cannot be exposed in the hwloc hierarchy, that is why hwloc also exposes distances.</p>
55 <p>Distances are matrices of values between sets of objects, usually latencies or bandwidths. By default, hwloc tries to get a matrix of relative latencies between NUMA nodes when exposed by the hardware.</p>
56 <p>In the aforementioned ring case, the matrix could report 10 for latency between a NUMA node and itself, 20 for nearby nodes, and 30 for nodes that are opposites on the ring. Those are theoretical values exposed by hardware vendors (in the System Locality Distance Information Table (SLIT) in the ACPI) rather than physical latencies. They are mostly meant for comparing node relative distances.</p>
57 <p>Distances structures currently created by hwloc are: </p><dl>
58 <dt>NUMALatency (Linux, Solaris, FreeBSD) </dt>
59 <dd>This is the matrix of theoretical latencies described above. </dd>
60 </dl>
61 <p>Users may also specify their own matrices between any set of objects, even if these objects are of different types (e.g. bandwidths between GPUs and CPUs).</p>
62 <p>The entire API is located in <a class="el" href="a00137_source.html">hwloc/distances.h</a>. See also <a class="el" href="a00214.html">Retrieve distances between objects</a>, as well as <a class="el" href="a00215.html">Helpers for consulting distance matrices</a> and <a class="el" href="a00216.html">Add or remove distances between objects</a>.</p>
52 <h1><a class="anchor" id="cli_lstopo"></a>
53 lstopo and lstopo-no-graphics</h1>
54 <p>lstopo (also known as hwloc-ls) displays the hierarchical topology map of the current system. The output may be graphical, ascii-art or textual, and can also be exported to numerous file formats such as PDF, PNG, XML, and others. Advanced graphical outputs require the "Cairo" development package (usually <code>cairo-devel</code> or <code>libcairo2-dev</code>).</p>
55 <p>lstopo and lstopo-no-graphics accept the same command-line options. However, graphical outputs are only available in lstopo. Textual outputs (those that do not depend on heavy external libraries such as Cairo) are supported in both lstopo and lstopo-no-graphics.</p>
56 <p>This command can also display the processes currently bound to a part of the machine (via the <code>--ps</code> option).</p>
57 <p>Note that lstopo can read XML files and/or alternate chroot filesystems and display topological maps representing those systems (e.g., use lstopo to output an XML file on one system, and then use lstopo to read in that XML file and display it on a different system).</p>
6358 <p>
64 </div><div class="section" id="topoattrs_memattrs">
59 </div><div class="section" id="cli_hwloc_bind">
6560 </p>
66 <h1><a class="anchor" id="topoattrs_memattrs"></a>
67 Memory Attributes</h1>
68 <p>Machines with heterogeneous memory, for instance high-bandwidth memory (HBM), normal memory (DDR), and/or high-capacity slow memory (such as non-volatile memory DIMMs, NVDIMMs) require applications to allocate buffers in the appropriate target memory depending on performance and capacity needs. Those target nodes may be exposed in the hwloc hierarchy as different memory children but there is a need for performance information to select the appropriate one.</p>
69 <p>hwloc memory attributes are designed to expose memory information such as latency, bandwidth, etc. Users may also specify their own attributes and values.</p>
70 <p>The memory attributes API is located in <a class="el" href="a00140_source.html">hwloc/memattrs.h</a>, see <a class="el" href="a00217.html">Comparing memory node attributes for finding where to allocate on</a> and <a class="el" href="a00218.html">Managing memory attributes</a> for details.</p>
61 <h1><a class="anchor" id="cli_hwloc_bind"></a>
62 hwloc-bind</h1>
63 <p>hwloc-bind binds processes to specific hardware objects through a flexible syntax. A simple example is binding an executable to specific cores (or packages or bitmaps or ...). The hwloc-bind(1) man page provides much more detail on what is possible.</p>
64 <p>hwloc-bind can also be used to retrieve the current process' binding, or retrieve the last CPU(s) where a process ran, or operate on memory binding.</p>
65 <p>Just like hwloc-calc, the input locations given to hwloc-bind may be either objects or cpusets (bitmaps as reported by hwloc-calc or hwloc-distrib).</p>
7166 <p>
72 </div><div class="section" id="topoattrs_cpukinds">
67 </div><div class="section" id="cli_hwloc_calc">
7368 </p>
74 <h1><a class="anchor" id="topoattrs_cpukinds"></a>
75 CPU Kinds</h1>
76 <p>Hybrid CPUs may contain different kinds of cores. The CPU kinds API in <a class="el" href="a00143_source.html">hwloc/cpukinds.h</a> provides a way to list the sets of PUs in each kind and get some optional information about their hardware characteristics and efficiency.</p>
77 <p>If the operating system provides efficiency information (e.g. Windows 10), it is used to rank hwloc CPU kinds by efficiency. Otherwise, hwloc implements several heuristics based on frequencies and core types (see HWLOC_CPUKINDS_RANKING in <a class="el" href="a00388.html">Environment Variables</a>).</p>
78 <p>Attributes include: </p><dl>
79 <dt>FrequencyMaxMHz (Linux) </dt>
80 <dd>The maximal operating frequency of the core, as reported by <code>cpufreq</code> drivers on Linux. </dd>
81 <dt>FrequencyBaseMHz (Linux) </dt>
82 <dd>The base operating frequency of the core, as reported by some <code>cpufreq</code> drivers on Linux (e.g. <code>intel_pstate</code>). </dd>
83 <dt>CoreType (x86, Linux) </dt>
84 <dd>A string describing the kind of core, currently <code>IntelAtom</code> or <code>IntelCore</code>, as reported by the x86 CPUID instruction and future Linux kernels on some Intel processors. </dd>
85 <dt>LinuxCPUType (Linux) </dt>
86 <dd>The Linux-specific CPU type found in sysfs, such as <code>intel_atom_0</code>, as reported by future Linux kernels on some Intel processors. </dd>
87 </dl>
88 <p>See <a class="el" href="a00219.html">Kinds of CPU cores</a> for details. </p>
69 <h1><a class="anchor" id="cli_hwloc_calc"></a>
70 hwloc-calc</h1>
71 <p>hwloc-calc is hwloc's Swiss Army Knife command-line tool for converting things. The input may be either objects or cpusets (bitmaps as reported by another hwloc-calc instance or by hwloc-distrib), that may be combined by addition, intersection or subtraction. The output kinds include: </p><ul>
72 <li>
73 a cpuset bitmap: This compact opaque representation of objects is useful for shell scripts etc. It may passed to hwloc command-line tools such as hwloc-calc or hwloc-bind, or to hwloc command-line options such as <code>lstopo --restrict</code>. </li>
74 <li>
75 the amount of the equivalent hwloc objects from a specific type, or the list of their indexes. This is useful for iterating over all similar objects (for instance all cores) within a given part of a platform. </li>
76 <li>
77 a hierarchical description of objects, for instance a thread index within a core within a package. This gives a better view of the actual location of an object. </li>
78 </ul>
79 <p>Moreover, input and/or output may be use either physical/OS object indexes or as hwloc's logical object indexes. It eases cooperation with external tools such as taskset or numactl by exporting hwloc specifications into list of processor or NUMA node physical indexes. See also <a class="el" href="a00406.html#faq_indexes">Should I use logical or physical/OS indexes? and how?</a>.</p>
80 <p>
81 </div><div class="section" id="cli_hwloc_info">
82 </p>
83 <h1><a class="anchor" id="cli_hwloc_info"></a>
84 hwloc-info</h1>
85 <p>hwloc-info dumps information about the given objects, as well as all its specific attributes. It is intended to be used with tools such as grep for filtering certain attribute lines. When no object is specified, or when <code>--topology</code> is passed, hwloc-info prints a summary of the topology. When <code>--support</code> is passed, hwloc-info lists the supported features for the topology.</p>
86 <p>
87 </div><div class="section" id="cli_hwloc_distrib">
88 </p>
89 <h1><a class="anchor" id="cli_hwloc_distrib"></a>
90 hwloc-distrib</h1>
91 <p>hwloc-distrib generates a set of cpuset bitmaps that are uniformly distributed across the machine for the given number of processes. These strings may be used with hwloc-bind to run processes to maximize their memory bandwidth by properly distributing them across the machine.</p>
92 <p>
93 </div><div class="section" id="cli_hwloc_ps">
94 </p>
95 <h1><a class="anchor" id="cli_hwloc_ps"></a>
96 hwloc-ps</h1>
97 <p>hwloc-ps is a tool to display the bindings of processes that are currently running on the local machine. By default, hwloc-ps only lists processes that are bound; unbound process (and Linux kernel threads) are not displayed.</p>
98 <p>
99 </div><div class="section" id="cli_hwloc_annotate">
100 </p>
101 <h1><a class="anchor" id="cli_hwloc_annotate"></a>
102 hwloc-annotate</h1>
103 <p>hwloc-annotate may modify object (and topology) attributes such as string information (see <a class="el" href="a00398.html#attributes_info">Custom string infos</a> for details) or Misc children objects. It may also add distances, memory attributes, etc. to the topology. It reads an input topology from a XML file and outputs the annotated topology as another XML file.</p>
104 <p>
105 </div><div class="section" id="cli_hwloc_diffpatchcompress">
106 </p>
107 <h1><a class="anchor" id="cli_hwloc_diffpatchcompress"></a>
108 hwloc-diff, hwloc-patch and hwloc-compress-dir</h1>
109 <p>hwloc-diff computes the difference between two topologies and outputs it to another XML file.</p>
110 <p>hwloc-patch reads such a difference file and applies to another topology.</p>
111 <p>hwloc-compress-dir compresses an entire directory of XML files by using hwloc-diff to save the differences between topologies instead of entire topologies.</p>
112 <p>
113 </div><div class="section" id="cli_hwloc_dump_hwdata">
114 </p>
115 <h1><a class="anchor" id="cli_hwloc_dump_hwdata"></a>
116 hwloc-dump-hwdata</h1>
117 <p>hwloc-dump-hwdata is a Linux and x86-specific tool that dumps (during boot, privileged) some topology and locality information from raw hardware files (SMBIOS and ACPI tables) to human-readable and world-accessible files that the hwloc library will later reuse.</p>
118 <p>Currently only used on Intel Xeon Phi processor platforms. See <a class="el" href="a00406.html#faq_knl_dump">Why do I need hwloc-dump-hwdata for memory on Intel Xeon Phi processor?</a>.</p>
119 <p>See <code>HWLOC_DUMPED_HWDATA_DIR</code> in <a class="el" href="a00394.html">Environment Variables</a> for details about the location of dumped files.</p>
120 <p>
121 </div><div class="section" id="cli_hwloc_gather">
122 </p>
123 <h1><a class="anchor" id="cli_hwloc_gather"></a>
124 hwloc-gather-topology and hwloc-gather-cpuid</h1>
125 <p>hwloc-gather-topology is a Linux-specific tool that saves the relevant topology files of the current machine into a tarball (and the corresponding lstopo outputs).</p>
126 <p>hwloc-gather-cpuid is a x86-specific tool that dumps the result of CPUID instructions on the current machine into a directory.</p>
127 <p>The output of hwloc-gather-cpuid is included in the tarball saved by hwloc-gather-topology when running on Linux/x86.</p>
128 <p>These files may be used later (possibly offline) for simulating or debugging a machine without actually running on it. </p>
89129 </div></div><!-- contents -->
90130 </div><!-- PageDoc -->
91131 <!-- start footer part -->
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Importing and exporting topologies from/to XML files</title>
7 <title>Hardware Locality (hwloc): Environment Variables</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="PageDoc"><div class="header">
4141 <div class="headertitle">
42 <div class="title">Importing and exporting topologies from/to XML files </div> </div>
42 <div class="title">Environment Variables </div> </div>
4343 </div><!--header-->
4444 <div class="contents">
4545 <div class="textblock"><p>
4646 <div class="section">
4747 </p>
48 <p>hwloc offers the ability to export topologies to XML files and reload them later. This is for instance useful for loading topologies faster (see <a class="el" href="a00400.html#faq_xml">I do not want hwloc to rediscover my enormous machine topology every time I rerun a process</a>), manipulating other nodes' topology, or avoiding the need for privileged processes (see <a class="el" href="a00400.html#faq_privileged">Does hwloc require privileged access?</a>).</p>
49 <p>Topologies may be exported to XML files thanks to <a class="el" href="a00212.html#ga333f79975b4eeb28a3d8fad3373583ce" title="Export the topology into an XML file.">hwloc_topology_export_xml()</a>, or to a XML memory buffer with <a class="el" href="a00212.html#gad33b7f7c11db10459505a3b1634fd3f1" title="Export the topology into a newly-allocated XML memory buffer.">hwloc_topology_export_xmlbuffer()</a>. The lstopo program can also serve as a XML topology export tool.</p>
50 <p>XML topologies may then be reloaded later with <a class="el" href="a00198.html#ga879439b7ee99407ee911b3ac64e9a25e" title="Enable XML-file based topology.">hwloc_topology_set_xml()</a> and <a class="el" href="a00198.html#ga2745616b65595e1c1e579ecc7e461fa8" title="Enable XML based topology using a memory buffer (instead of a file, as with hwloc_topology_set_xml())...">hwloc_topology_set_xmlbuffer()</a>. The HWLOC_XMLFILE environment variable also tells hwloc to load the topology from the given XML file (see <a class="el" href="a00388.html">Environment Variables</a>).</p>
51 <dl class="section note"><dt>Note</dt><dd>Loading XML topologies disables binding because the loaded topology may not correspond to the physical machine that loads it. This behavior may be reverted by asserting that loaded file really matches the underlying system with the HWLOC_THISSYSTEM environment variable or the <a class="el" href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b" title="Assume that the selected backend provides the topology for the system on which we are running.">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a> topology flag.</dd>
52 <dd>
53 The topology flag <a class="el" href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdea1b66bbd66e900e5c837f71defb32ad89" title="Get the set of allowed resources from the local operating system even if the topology was loaded from...">HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES</a> may be used to load a XML topology that contains the entire machine and restrict it to the part that is actually available to the current process (e.g. when Linux Cgroup/Cpuset are used to restrict the set of resources).</dd>
54 <dd>
55 hwloc also offers the ability to export/import <a class="el" href="a00231.html">Topology differences</a>.</dd>
56 <dd>
57 XML topology files are not localized. They use a dot as a decimal separator. Therefore any exported topology can be reloaded on any other machine without requiring to change the locale.</dd>
58 <dd>
59 XML exports contain all details about the platform. It means that two very similar nodes still have different XML exports (e.g. some serial numbers or MAC addresses are different). If a less precise exporting/importing is required, one may want to look at <a class="el" href="a00395.html">Synthetic topologies</a> instead.</dd></dl>
60 <p>
61 </div><div class="section" id="xml_backends">
62 </p>
63 <h1><a class="anchor" id="xml_backends"></a>
64 libxml2 and minimalistic XML backends</h1>
65 <p>hwloc offers two backends for importing/exporting XML.</p>
66 <p>First, it can use the libxml2 library for importing/exporting XML files. It features full XML support, for instance when those files have to be manipulated by non-hwloc software (e.g. a XSLT parser). The libxml2 backend is enabled by default if libxml2 development headers are available (the relevant development package is usually <code>libxml2-devel</code> or <code>libxml2-dev</code>).</p>
67 <p>If libxml2 is not available at configure time, or if <code>--disable-libxml2</code> is passed, hwloc falls back to a custom backend. Contrary to the aforementioned full XML backend with libxml2, this minimalistic XML backend cannot be guaranteed to work with external programs. It should only be assumed to be compatible with the same hwloc release (even if using the libxml2 backend). Its advantage is, however, to always be available without requiring any external dependency.</p>
68 <p>If libxml2 is available but the core hwloc library should not directly depend on it, the libxml2 support may be built as a dynamicall-loaded plugin. One should pass <code>--enable-plugins</code> to enable plugin support (when supported) and build as plugins all component that support it. Or pass <code>--enable-plugins=xml_libxml</code> to only build this libxml2 support as a plugin.</p>
69 <p>
70 </div><div class="section" id="xml_errors">
71 </p>
72 <h1><a class="anchor" id="xml_errors"></a>
73 XML import error management</h1>
74 <p>Importing XML files can fail at least because of file access errors, invalid XML syntax, non-hwloc-valid XML contents, or incompatibilities between hwloc releases (see <a class="el" href="a00400.html#faq_version_xml">Are XML topology files compatible between hwloc releases?</a>).</p>
75 <p>Both backend cannot detect all these errors when the input XML file or buffer is selected (when <a class="el" href="a00198.html#ga879439b7ee99407ee911b3ac64e9a25e" title="Enable XML-file based topology.">hwloc_topology_set_xml()</a> or <a class="el" href="a00198.html#ga2745616b65595e1c1e579ecc7e461fa8" title="Enable XML based topology using a memory buffer (instead of a file, as with hwloc_topology_set_xml())...">hwloc_topology_set_xmlbuffer()</a> is called). Some errors such non-hwloc-valid contents can only be detected later when loading the topology with <a class="el" href="a00192.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a>.</p>
76 <p>It is therefore strongly recommended to check the return value of both <a class="el" href="a00198.html#ga879439b7ee99407ee911b3ac64e9a25e" title="Enable XML-file based topology.">hwloc_topology_set_xml()</a> (or <a class="el" href="a00198.html#ga2745616b65595e1c1e579ecc7e461fa8" title="Enable XML based topology using a memory buffer (instead of a file, as with hwloc_topology_set_xml())...">hwloc_topology_set_xmlbuffer()</a>) and <a class="el" href="a00192.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a> to handle all these errors. </p>
48 <p>The behavior of the hwloc library and tools may be tuned thanks to the following environment variables.</p>
49 <dl>
50 <dt>HWLOC_XMLFILE=/path/to/file.xml </dt>
51 <dd><p class="startdd">enforces the discovery from the given XML file as if <a class="el" href="a00201.html#ga879439b7ee99407ee911b3ac64e9a25e" title="Enable XML-file based topology.">hwloc_topology_set_xml()</a> had been called. This file may have been generated earlier with lstopo file.xml. For convenience, this backend provides empty binding hooks which just return success. To have hwloc still actually call OS-specific hooks, HWLOC_THISSYSTEM should be set 1 in the environment too, to assert that the loaded file is really the underlying system. See also <a class="el" href="a00400.html">Importing and exporting topologies from/to XML files</a>. </p>
52 <p class="enddd"></p>
53 </dd>
54 <dt>HWLOC_SYNTHETIC=synthetic_description </dt>
55 <dd><p class="startdd">enforces the discovery through a synthetic description string as if <a class="el" href="a00201.html#ga4fab186bb6181a00bcf585825fddd38d" title="Enable synthetic topology.">hwloc_topology_set_synthetic()</a> had been called. For convenience, this backend provides empty binding hooks which just return success. See also <a class="el" href="a00401.html">Synthetic topologies</a>. </p>
56 <p class="enddd"></p>
57 </dd>
58 <dt>HWLOC_XML_VERBOSE=1 </dt>
59 <dd></dd>
60 <dt>HWLOC_SYNTHETIC_VERBOSE=1 </dt>
61 <dd><p class="startdd">enables verbose messages in the XML or synthetic topology backends. hwloc XML backends (see <a class="el" href="a00400.html">Importing and exporting topologies from/to XML files</a>) can emit some error messages to the error output stream. Enabling these verbose messages within hwloc can be useful for understanding failures to parse input XML topologies. Similarly, enabling verbose messages in the synthetic topology backend can help understand why the description string is invalid. See also <a class="el" href="a00401.html">Synthetic topologies</a>. </p>
62 <p class="enddd"></p>
63 </dd>
64 <dt>HWLOC_THISSYSTEM=1 </dt>
65 <dd><p class="startdd">enforces the return value of <a class="el" href="a00202.html#ga68ffdcfd9175cdf40709801092f18017" title="Does the topology context come from this system?">hwloc_topology_is_thissystem()</a>, as if <a class="el" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b" title="Assume that the selected backend provides the topology for the system on which we are running.">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a> was set with <a class="el" href="a00202.html#gaaeed4df656979e5f16befea9d29b814b" title="Set OR&#39;ed flags to non-yet-loaded topology.">hwloc_topology_set_flags()</a>. It means that it makes hwloc assume that the selected backend provides the topology for the system on which we are running, even if it is not the OS-specific backend but the XML backend for instance. This means making the binding functions actually call the OS-specific system calls and really do binding, while the XML backend would otherwise provide empty hooks just returning success. This can be used for efficiency reasons to first detect the topology once, save it to a XML file, and quickly reload it later through the XML backend, but still having binding functions actually do bind. This also enables support for the variable HWLOC_THISSYSTEM_ALLOWED_RESOURCES. </p>
66 <p class="enddd"></p>
67 </dd>
68 <dt>HWLOC_THISSYSTEM_ALLOWED_RESOURCES=1 </dt>
69 <dd><p class="startdd">Get the set of allowed resources from the native operating system even if the topology was loaded from XML or synthetic description, as if <a class="el" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea1b66bbd66e900e5c837f71defb32ad89" title="Get the set of allowed resources from the local operating system even if the topology was loaded from...">HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES</a> was set with <a class="el" href="a00202.html#gaaeed4df656979e5f16befea9d29b814b" title="Set OR&#39;ed flags to non-yet-loaded topology.">hwloc_topology_set_flags()</a>. This variable requires the topology to match the current system (see the variable HWLOC_THISSYSTEM). This is useful when the topology is not loaded directly from the local machine (e.g. for performance reason) and it comes with all resources, but the running process is restricted to only a part of the machine (for instance because of Linux Cgroup/Cpuset). </p>
70 <p class="enddd"></p>
71 </dd>
72 <dt>HWLOC_ALLOW=all </dt>
73 <dd><p class="startdd">Totally ignore administrative restrictions such as Linux Cgroups and consider all resources (PUs and NUMA nodes) as allowed. This is different from setting HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED which gathers all resources but marks the unavailable ones as disallowed. </p>
74 <p class="enddd"></p>
75 </dd>
76 <dt>HWLOC_HIDE_ERRORS=1 </dt>
77 <dd><p class="startdd">enables or disables verbose reporting of errors. The hwloc library may issue warnings to the standard error stream when it detects a problem during topology discovery, for instance if the operating system (or user) gives contradictory topology information.</p>
78 <p class="interdd">By default (1), hwloc only shows critical errors such as invalid hardware topology information or invalid configuration. If set to 0 (default in lstopo), more errors are displayed, for instance a failure to initialize CUDA or NVML. If set to 2, no hwloc error messages are shown.</p>
79 <p class="interdd">Note that additional verbose messages may be enabled with other variables such as HWLOC_GROUPING_VERBOSE. </p>
80 <p class="enddd"></p>
81 </dd>
82 <dt>HWLOC_USE_NUMA_DISTANCES=7 </dt>
83 <dd><p class="startdd">enables or disables the use of NUMA distances. NUMA distances and memory target/initiator information may be used to improve the locality of NUMA nodes, especially CPU-less nodes. Bits in the value of this environment variable enable different features: Bit 0 enables the gathering of NUMA distances from the operating system. Bit 1 further enables the use of NUMA distances to improve the locality of CPU-less nodes. Bit 2 enables the use of target/initiator information. </p>
84 <p class="enddd"></p>
85 </dd>
86 <dt>HWLOC_GROUPING=1 </dt>
87 <dd><p class="startdd">enables or disables objects grouping based on distances. By default, hwloc uses distance matrices between objects (either read from the OS or given by the user) to find groups of close objects. These groups are described by adding intermediate Group objects in the topology. Setting this environment variable to 0 will disable this grouping. This variable supersedes the obsolete HWLOC_IGNORE_DISTANCES variable. </p>
88 <p class="enddd"></p>
89 </dd>
90 <dt>HWLOC_GROUPING_ACCURACY=0.05 </dt>
91 <dd><p class="startdd">relaxes distance comparison during grouping. By default, objects may be grouped if their distances form a minimal distance graph. When setting this variable to 0.02, and when <a class="el" href="a00219.html#gga22428b6bab271411e3834e6b4ca22e37a5233ccf631c3bc53dd5c3e7a5d5c9b77" title="If grouping, consider the distance values as inaccurate and relax the comparisons during the grouping...">HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE</a> is given, these distances do not have to be strictly equal anymore, they may just be equal with a 2% error. If set to <code>try</code> instead of a numerical value, hwloc will try to group with perfect accuracy (0, the default), then with 0.01, 0.02, 0.05 and finally 0.1. Numbers given in this environment variable should always use a dot as a decimal mark (for instance 0.01 instead of 0,01).</p>
92 <p class="enddd"></p>
93 </dd>
94 <dt>HWLOC_GROUPING_VERBOSE=0 </dt>
95 <dd><p class="startdd">enables or disables some verbose messages during grouping. If this variable is set to 1, some debug messages will be displayed during distance-based grouping of objects even if debug was not specific at configure time. This is useful when trying to find an interesting distance grouping accuracy.</p>
96 <p class="enddd"></p>
97 </dd>
98 <dt>HWLOC_CPUKINDS_RANKING=default </dt>
99 <dd><p class="startdd">change the ranking policy for CPU kinds. By default, the OS-provided efficiency is used for ranking. If not available, the frequency is used on ARM processors, or core type and frequency on other architectures. <br />
100 This environment variable may be set to <code>coretype+frequency</code>, <code>coretype</code>, <code>frequency</code>, <code>frequency_base</code>, <code>frequency_max</code>, <code>forced_efficiency</code>, <code>no_forced_efficiency</code>, <code>default</code>, or <code>none</code>. </p>
101 <p class="enddd"></p>
102 </dd>
103 <dt>HWLOC_PCI_LOCALITY=&lt;domain/bus&gt; &lt;cpuset&gt;;... </dt>
104 <dd></dd>
105 <dt>HWLOC_PCI_LOCALITY=/path/to/pci/locality/file </dt>
106 <dd><p class="startdd">changes the locality of I/O devices behing the specified PCI buses. If no I/O locality information is available or if the BIOS reports incorrect information, it is possible to move a I/O device tree (OS and/or PCI devices with optional bridges) near a custom set of processors. <br />
107 Localities are given either inside the environment variable itself, or in the pointed file. They may be separated either by semi-colons or by line-breaks. <br />
108 Each locality contains a domain/bus specification (in hexadecimal numbers as usual) followed by a whitespace and a cpuset: </p><ul>
109 <li>
110 <code>0001 &lt;cpuset&gt;</code> specifies the locality of all buses in PCI domain 0000. </li>
111 <li>
112 <code>0000:0f &lt;cpuset&gt;</code> specifies only PCI bus 0f in domain 0000. </li>
113 <li>
114 <code>0002:04-0a &lt;cpuset&gt;</code> specifies a range of buses (from 04 to 0a) within domain 0002. </li>
115 </ul>
116 <p>Domain/bus specifications should usually match entire hierarchies of buses behind a bridge (including primary, secondary and subordinate buses). For instance, if hostbridge 0000:00 is above other bridges/switches with buses 0000:01 to 0000:09, the variable should be HWLOC_PCI_LOCALITY="0000:00-09 &lt;cpuset&gt;". It supersedes the old HWLOC_PCI_0000_00_LOCALCPUS=&lt;cpuset&gt; which only works when hostbridges exist in the topology. <br />
117 If the variable is defined to empty or invalid, no forced PCI locality is applied but hwloc's internal automatic locality quirks are disabled, which means the exact PCI locality reported by the platform is used. </p>
118 <p class="enddd"></p>
119 </dd>
120 <dt>HWLOC_X86_TOPOEXT_NUMANODES=0 </dt>
121 <dd><p class="startdd">use AMD topoext CPUID leaf in the x86 backend to detect NUMA nodes. When using the x86 backend, setting this variable to 1 enables the building of NUMA nodes from AMD processor CPUID instructions. However this strategy does not always reflect BIOS configuration such as NUMA interleaving. And node indexes may be different from those of the operating system. Hence this should only be used when OS backends are wrong and the user is sure that CPUID returns correct NUMA information. </p>
122 <p class="enddd"></p>
123 </dd>
124 <dt>HWLOC_KEEP_NVIDIA_GPU_NUMA_NODES=0 </dt>
125 <dd><p class="startdd">show or hide NUMA nodes that correspond to NVIDIA GPU memory. By default they are ignored to avoid interleaved memory being allocated on GPU by mistake. Setting this environment variable to 1 exposes these NUMA nodes. They may be recognized by the <em>GPUMemory</em> subtype. They also have a <em>PCIBusID</em> info attribute to identify the corresponding GPU. </p>
126 <p class="enddd"></p>
127 </dd>
128 <dt>HWLOC_KNL_MSCACHE_L3=0 </dt>
129 <dd><p class="startdd">Expose the KNL MCDRAM in cache mode as a Memory-side Cache instead of a L3. hwloc releases prior to 2.1 exposed the MCDRAM cache as a CPU-side L3 cache. Now that Memory-side caches are supported by hwloc, it is still exposed as a L3 by default to avoid breaking existing applications. Setting this environment variable to 1 will expose it as a proper Memory-side cache. </p>
130 <p class="enddd"></p>
131 </dd>
132 <dt>HWLOC_ANNOTATE_GLOBAL_COMPONENTS=0 </dt>
133 <dd><p class="startdd">Allow components to annotate the topology even if they are usually excluded by global components by default. Setting this variable to 1 and also setting <code>HWLOC_COMPONENTS=xml,pci,stop</code> enables the addition of PCI vendor and model info attributes to a XML topology that was generated without those names (if pciaccess was missing). </p>
134 <p class="enddd"></p>
135 </dd>
136 <dt>HWLOC_FSROOT=/path/to/linux/filesystem-root/ </dt>
137 <dd><p class="startdd">switches to reading the topology from the specified Linux filesystem root instead of the main file-system root. This directory may have been saved previously from another machine with <code>hwloc-gather-topology</code>. <br />
138 One should likely also set <code>HWLOC_COMPONENTS=linux,stop</code> so that non-Linux backends are disabled (the <code>-i</code> option of command-line tools takes care of both). <br />
139 Not using the main file-system root causes <a class="el" href="a00202.html#ga68ffdcfd9175cdf40709801092f18017" title="Does the topology context come from this system?">hwloc_topology_is_thissystem()</a> to return 0. For convenience, this backend provides empty binding hooks which just return success. To have hwloc still actually call OS-specific hooks, HWLOC_THISSYSTEM should be set 1 in the environment too, to assert that the loaded file is really the underlying system. </p>
140 <p class="enddd"></p>
141 </dd>
142 <dt>HWLOC_CPUID_PATH=/path/to/cpuid/ </dt>
143 <dd><p class="startdd">forces the x86 backend to read dumped CPUIDs from the given directory instead of executing actual x86 CPUID instructions. This directory may have been saved previously from another machine with <code>hwloc-gather-cpuid</code>. <br />
144 One should likely also set <code>HWLOC_COMPONENTS=x86,stop</code> so that non-x86 backends are disabled (the <code>-i</code> option of command-line tools takes care of both). <br />
145 It causes <a class="el" href="a00202.html#ga68ffdcfd9175cdf40709801092f18017" title="Does the topology context come from this system?">hwloc_topology_is_thissystem()</a> to return 0. For convenience, this backend provides empty binding hooks which just return success. To have hwloc still actually call OS-specific hooks, HWLOC_THISSYSTEM should be set 1 in the environment too, to assert that the loaded CPUID dump is really the underlying system. </p>
146 <p class="enddd"></p>
147 </dd>
148 <dt>HWLOC_DUMPED_HWDATA_DIR=/path/to/dumped/files/ </dt>
149 <dd><p class="startdd">loads files dumped by <code>hwloc-dump-hwdata</code> (on Linux) from the given directory. The default dump/load directory is configured during build based on --runstatedir, --localstatedir, and --prefix options. It usually points to <code>/var/run/hwloc/</code> in Linux distribution packages, but it may also point to <code>$prefix/var/run/hwloc/</code> when manually installing and only specifying --prefix. </p>
150 <p class="enddd"></p>
151 </dd>
152 <dt>HWLOC_COMPONENTS=list,of,components </dt>
153 <dd><p class="startdd">forces a list of components to enable or disable. Enable or disable the given comma-separated list of components (if they do not conflict with each other). Component names prefixed with <code>-</code> are disabled (a single phase may also be disabled).</p>
154 <p class="interdd">Once the end of the list is reached, hwloc falls back to enabling the remaining components (sorted by priority) that do not conflict with the already enabled ones, and unless explicitly disabled in the list. If <code>stop</code> is met, the enabling loop immediately stops, no more component is enabled.</p>
155 <p class="interdd">If <code>xml</code> or <code>synthetic</code> components are selected, the corresponding XML filename or synthetic description string should be pass in <code>HWLOC_XMLFILE</code> or <code>HWLOC_SYNTHETIC</code> respectively.</p>
156 <p class="interdd">Since this variable is the low-level and more generic way to select components, it takes precedence over environment variables for selecting components.</p>
157 <p class="interdd">If the variable is set to an empty string (or set to a single comma), no specific component is loaded first, all components are loaded in priority order.</p>
158 <p class="interdd">See <a class="el" href="a00404.html#plugins_select">Selecting which components to use</a> for details. </p>
159 <p class="enddd"></p>
160 </dd>
161 <dt>HWLOC_COMPONENTS_VERBOSE=1 </dt>
162 <dd><p class="startdd">displays verbose information about components. Display messages when components are registered or enabled. This is the recommended way to list the available components with their priority (all of them are <em>registered</em> at startup). </p>
163 <p class="enddd"></p>
164 </dd>
165 <dt>HWLOC_PLUGINS_PATH=/path/to/hwloc/plugins/:... </dt>
166 <dd><p class="startdd">changes the default search directory for plugins. By default, <code>$libdir/hwloc</code> is used. The variable may contain several colon-separated directories. </p>
167 <p class="enddd"></p>
168 </dd>
169 <dt>HWLOC_PLUGINS_VERBOSE=1 </dt>
170 <dd><p class="startdd">displays verbose information about plugins. List which directories are scanned, which files are loaded, and which components are successfully loaded. </p>
171 <p class="enddd"></p>
172 </dd>
173 <dt>HWLOC_PLUGINS_BLACKLIST=filename1,filename2,... </dt>
174 <dd><p class="startdd">prevents plugins from being loaded if their filename (without path) is listed. Plugin filenames may be found in verbose messages outputted when HWLOC_PLUGINS_VERBOSE=1. </p>
175 <p class="enddd"></p>
176 </dd>
177 <dt>HWLOC_DEBUG_VERBOSE=0 </dt>
178 <dd><p class="startdd">disables all verbose messages that are enabled by default when <code>&ndash;enable-debug</code> is passed to configure. When set to more than 1, even more verbose messages are displayed. The default is 1. </p>
179 <p class="enddd"></p>
180 </dd>
181 </dl>
77182 </div></div><!-- contents -->
78183 </div><!-- PageDoc -->
79184 <!-- start footer part -->
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Synthetic topologies</title>
7 <title>Hardware Locality (hwloc): CPU and Memory Binding Overview</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="PageDoc"><div class="header">
4141 <div class="headertitle">
42 <div class="title">Synthetic topologies </div> </div>
42 <div class="title">CPU and Memory Binding Overview </div> </div>
4343 </div><!--header-->
4444 <div class="contents">
4545 <div class="textblock"><p>
4646 <div class="section">
4747 </p>
48 <p>hwloc may load fake or remote topologies so as to consult them without having the underlying hardware available. Aside from loading XML topologies, hwloc also enables the building of <em>synthetic</em> topologies that are described by a single string listing the arity of each levels.</p>
49 <p>For instance, lstopo may create a topology made of 2 packages, containing a single NUMA node and a L2 cache above two single-threaded cores:</p>
50 <pre class="fragment">$ lstopo -i "pack:2 node:1 l2:1 core:2 pu:1" -
51 Machine (2048MB)
52 Package L#0
53 NUMANode L#0 (P#0 1024MB)
54 L2 L#0 (4096KB)
55 Core L#0 + PU L#0 (P#0)
56 Core L#1 + PU L#1 (P#1)
57 Package L#1
58 NUMANode L#1 (P#1 1024MB)
59 L2 L#1 (4096KB)
60 Core L#2 + PU L#2 (P#2)
61 Core L#3 + PU L#3 (P#3)
62 </pre><p>Replacing <code>-</code> with <code>file.xml</code> in this command line will export this topology to XML as usual.</p>
63 <dl class="section note"><dt>Note</dt><dd>Synthetic topologies offer a very basic way to export a topology and reimport it on another machine. It is a lot less precise than XML but may still be enough when only the hierarchy of resources matters.</dd></dl>
64 <p>
65 </div><div class="section" id="synthetic_string">
66 </p>
67 <h1><a class="anchor" id="synthetic_string"></a>
68 Synthetic description string</h1>
69 <p>Each item in the description string gives the type of the level and the number of such children under each object of the previous level. That is why the above topology contains 4 cores (2 cores times 2 nodes).</p>
70 <p>These type names must be written as <code>numanode</code>, <code>package</code>, <code>core</code>, <code>l2u</code>, <code>l1i</code>, <code>pu</code>, <code>group</code> (hwloc_obj_type_sscanf() is used for parsing the type names). They do not need to be written case-sensitively, nor entirely (as long as there is no ambiguity, 2 characters such as <code>ma</code> select a Machine level). Note that I/O and Misc objects are not available.</p>
71 <p>Instead of specifying the type of each level, it is possible to just specify the arities and let hwloc choose all types according to usual topologies. The following examples are therefore equivalent: </p><pre class="fragment">$ lstopo -i "2 3 4 5 6"
72 $ lstopo -i "Package:2 NUMANode:3 L2Cache:4 Core:5 PU:6"
73 </pre><p>NUMA nodes are handled in a special way since they are not part of the main CPU hierarchy but rather attached below it as memory children. Thus, <code>NUMANode:3</code> actually means <code>Group:3</code> where one NUMA node is attached below each group. These groups are merged back into the parent when possible (typically when a single NUMA node is requested below each parent).</p>
74 <p>It is also possible the explicitly attach NUMA nodes to specific levels. For instance, a topology similar to a Intel Xeon Phi processor (with 2 NUMA nodes per 16-core group) may be created with: </p><pre class="fragment">$ lstopo -i "package:1 group:4 [numa] [numa] core:16 pu:4"
75 </pre><p>The root object does not appear in the synthetic description string since it is always a Machine object. Therefore the Machine type is disallowed in the description as well.</p>
76 <p>A NUMA level (with a single NUMA node) is automatically added if needed.</p>
77 <p>Each item may be followed parentheses containing a list of space-separated attributes. For instance: </p><ul>
48 <p>Some operating systems do not systematically provide separate functions for CPU and memory binding. This means that CPU binding functions may have have effects on the memory binding policy. Likewise, changing the memory binding policy may change the CPU binding of the current thread. This is often not a problem for applications, so by default hwloc will make use of these functions when they provide better binding support.</p>
49 <p>If the application does not want the CPU binding to change when changing the memory policy, it needs to use the <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2aad6b9eaf2ee324ca58dc8f58094b9997" title="Avoid any effect on CPU binding.">HWLOC_MEMBIND_NOCPUBIND</a> flag to prevent hwloc from using OS functions which would change the CPU binding. Additionally, <a class="el" href="a00199.html#gga217dc8d373f8958cc93c154ebce1c71ca41ce440443cc3087caed95ab60edcad6" title="Avoid any effect on memory binding.">HWLOC_CPUBIND_NOMEMBIND</a> can be passed to CPU binding function to prevent hwloc from using OS functions would change the memory binding policy. Of course, using these flags will reduce hwloc's overall support for binding, so their use is discouraged.</p>
50 <p>One can avoid using these flags but still closely control both memory and CPU binding by allocating memory, touching each page in the allocated memory, and then changing the CPU binding. The already-really-allocated memory will then be "locked" to physical memory and will not be migrated. Thus, even if the memory binding policy gets changed by the CPU binding order, the already-allocated memory will not change with it. When binding and allocating further memory, the CPU binding should be performed again in case the memory binding altered the previously-selected CPU binding.</p>
51 <p>Not all operating systems support the notion of a "current" memory binding policy for the current process, but such operating systems often still provide a way to allocate data on a given node set. Conversely, some operating systems support the notion of a "current" memory binding policy and do not permit allocating data on a specific node set without changing the current policy and allocate the data. To provide the most powerful coverage of these facilities, hwloc provides:</p>
52 <ul>
7853 <li>
79 <code>L2iCache:2(size=32kB)</code> specifies 2 children of 32kB level-2 instruction caches. The size may be specified in bytes (without any unit suffix) or as TB, GB, MB or kB. </li>
54 functions that set/get the current memory binding policies (if supported): hwloc_set/get_membind() and hwloc_set/get_proc_membind() </li>
8055 <li>
81 <code>NUMANode:3(memory=16MB)</code> specifies 3 NUMA nodes with 16MB each. The size may be specified in bytes (without any unit suffix) or as TB, GB, MB or kB. </li>
56 a function that allocates memory bound to specific node set without changing the current memory binding policy (if supported): <a class="el" href="a00200.html#ga04736461780fadcf193af218c0122273" title="Allocate some memory on NUMA memory nodes specified by set.">hwloc_alloc_membind()</a>. </li>
8257 <li>
83 <code>PU:2(indexes=0,2,1,3)</code> specifies 2 PU children and the full list of OS indexes among the entire set of 4 PU objects. </li>
84 <li>
85 <code>PU:2(indexes=numa:core)</code> specifies 2 PU children whose OS indexes are interleaved by NUMA node first and then by package. </li>
86 <li>
87 Attributes in parentheses at the very beginning of the description apply to the root object. </li>
58 a helper which, if needed, changes the current memory binding policy of the process in order to obtain memory binding: <a class="el" href="a00200.html#gab1b77b8408bacaf03c7e8878f7577922" title="Allocate some memory on NUMA memory nodes specified by set.">hwloc_alloc_membind_policy()</a>. </li>
8859 </ul>
89 <p>
90 </div><div class="section" id="synthetic_use">
91 </p>
92 <h1><a class="anchor" id="synthetic_use"></a>
93 Loading a synthetic topology</h1>
94 <p>Aside from lstopo, the hwloc programming interface offers the same ability by passing the synthetic description string to <a class="el" href="a00198.html#ga4fab186bb6181a00bcf585825fddd38d" title="Enable synthetic topology.">hwloc_topology_set_synthetic()</a> before <a class="el" href="a00192.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a>.</p>
95 <p>Synthetic topologies are created by the <code>synthetic</code> component. This component may be enabled by force by setting the HWLOC_SYNTHETIC environment variable to something such as <code>node:2 core:3 pu:4</code>.</p>
96 <p>Loading a synthetic topology disables binding support since the topology usually does not match the underlying hardware. Binding may be reenabled as usual by setting HWLOC_THISSYSTEM=1 in the environment or by setting the <a class="el" href="a00199.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b" title="Assume that the selected backend provides the topology for the system on which we are running.">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a> topology flag.</p>
97 <p>
98 </div><div class="section" id="synthetic_export">
99 </p>
100 <h1><a class="anchor" id="synthetic_export"></a>
101 Exporting a topology as a synthetic string</h1>
102 <p>The function <a class="el" href="a00213.html#ga24b7864a1c588309c4749f621f03b4c7" title="Export the topology as a synthetic string.">hwloc_topology_export_synthetic()</a> may export a topology as a synthetic string. It offers a convenient way to quickly describe the contents of a machine. The lstopo tool may also perform such an export by forcing the output format.</p>
103 <pre class="fragment">$ lstopo --of synthetic --no-io
104 Package:1 L3Cache:1 L2Cache:2 L1dCache:1 L1iCache:1 Core:1 PU:2
105 </pre><p>The exported string may be passed back to hwloc for recreating another similar topology (see also <a class="el" href="a00400.html#faq_version_synthetic">Are synthetic strings compatible between hwloc releases?</a>). The entire tree will be similar, but some attributes such as the processor model will be missing.</p>
106 <p>Such an export is only possible if the topology is totally symmetric. It means that the <code>symmetric_subtree</code> field of the root object is set. Also memory children should be attached in a symmetric way (e.g. the same number of memory children below each Package object, etc.). However, I/O devices and Misc objects are ignored when looking at symmetry and exporting the string. </p>
60 <p>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.</p>
61 <p>See <a class="el" href="a00199.html">CPU binding</a> and <a class="el" href="a00200.html">Memory binding</a> for hwloc's API functions regarding CPU and memory binding, respectively. There are some examples under doc/examples/ in the source tree. </p>
10762 </div></div><!-- contents -->
10863 </div><!-- PageDoc -->
10964 <!-- start footer part -->
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Interoperability With Other Software</title>
7 <title>Hardware Locality (hwloc): I/O Devices</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="PageDoc"><div class="header">
4141 <div class="headertitle">
42 <div class="title">Interoperability With Other Software </div> </div>
42 <div class="title">I/O Devices </div> </div>
4343 </div><!--header-->
4444 <div class="contents">
4545 <div class="textblock"><p>
4646 <div class="section">
4747 </p>
48 <p>Although hwloc offers its own portable interface, it still may have to interoperate with specific or non-portable libraries that manipulate similar kinds of objects. hwloc therefore offers several specific "helpers" to assist converting between those specific interfaces and hwloc.</p>
49 <p>Some external libraries may be specific to a particular OS; others may not always be available. The hwloc core therefore generally does not explicitly depend on these types of libraries. However, when a custom application uses or otherwise depends on such a library, it may optionally include the corresponding hwloc helper to extend the hwloc interface with dedicated helpers.</p>
50 <p>Most of these helpers use structures that are specific to these external libraries and only meaningful on the local machine. If so, the helper requires the input topology to match the current machine. Some helpers also require I/O device discovery to be supported and enabled for the current topology.</p>
51 <dl>
52 <dt>Linux specific features </dt>
53 <dd><p class="startdd"><a class="el" href="a00146_source.html">hwloc/linux.h</a> offers Linux-specific helpers that utilize some non-portable features of the Linux system, such as binding threads through their thread ID ("tid") or parsing kernel CPU mask files. </p>
54 <p class="enddd"></p>
55 </dd>
56 <dt>Linux libnuma </dt>
57 <dd><p class="startdd"><a class="el" href="a00149_source.html">hwloc/linux-libnuma.h</a> provides conversion helpers between hwloc CPU sets and libnuma-specific types, such as bitmasks. It helps you use libnuma memory-binding functions with hwloc CPU sets. </p>
58 <p class="enddd"></p>
59 </dd>
60 <dt>Glibc </dt>
61 <dd><p class="startdd"><a class="el" href="a00152_source.html">hwloc/glibc-sched.h</a> offers conversion routines between Glibc and hwloc CPU sets in order to use hwloc with functions such as sched_getaffinity() or pthread_attr_setaffinity_np(). </p>
62 <p class="enddd"></p>
63 </dd>
64 <dt>OpenFabrics Verbs </dt>
65 <dd><p class="startdd"><a class="el" href="a00173_source.html">hwloc/openfabrics-verbs.h</a> helps interoperability with the OpenFabrics Verbs interface. For example, it can return a list of processors near an OpenFabrics device. It may also return the corresponding OS device hwloc object for further information (if I/O device discovery is enabled). </p>
66 <p class="enddd"></p>
67 </dd>
68 <dt>OpenCL </dt>
69 <dd><p class="startdd"><a class="el" href="a00155_source.html">hwloc/opencl.h</a> enables interoperability with the OpenCL interface. Only the AMD and NVIDIA implementations currently offer locality information. It may return the list of processors near a GPU given as a <code>cl_device_id</code>. It may also return the corresponding OS device hwloc object for further information (if I/O device discovery is enabled). </p>
70 <p class="enddd"></p>
71 </dd>
72 <dt>AMD ROCm SMI Library (RSMI) </dt>
73 <dd><p class="startdd"><a class="el" href="a00167_source.html">hwloc/rsmi.h</a> enables interoperability with the AMD ROCm SMI interface. It may return the list of processors near an AMD GPU. It may also return the corresponding OS device hwloc object for further information (if I/O device discovery is enabled). </p>
74 <p class="enddd"></p>
75 </dd>
76 <dt>NVIDIA CUDA </dt>
77 <dd><p class="startdd"><a class="el" href="a00158_source.html">hwloc/cuda.h</a> and <a class="el" href="a00161_source.html">hwloc/cudart.h</a> enable interoperability with NVIDIA CUDA Driver and Runtime interfaces. For instance, it may return the list of processors near NVIDIA GPUs. It may also return the corresponding OS device hwloc object for further information (if I/O device discovery is enabled). </p>
78 <p class="enddd"></p>
79 </dd>
80 <dt>NVIDIA Management Library (NVML) </dt>
81 <dd><p class="startdd"><a class="el" href="a00164_source.html">hwloc/nvml.h</a> enables interoperability with the NVIDIA NVML interface. It may return the list of processors near a NVIDIA GPU given as a <code>nvmlDevice_t</code>. It may also return the corresponding OS device hwloc object for further information (if I/O device discovery is enabled). </p>
82 <p class="enddd"></p>
83 </dd>
84 <dt>NVIDIA displays </dt>
85 <dd><p class="startdd"><a class="el" href="a00170_source.html">hwloc/gl.h</a> enables interoperability with NVIDIA displays using the NV-CONTROL X extension (NVCtrl library). If I/O device discovery is enabled, it may return the OS device hwloc object that corresponds to a display given as a name such as <em>:0.0</em> or given as a port/device pair (server/screen). </p>
86 <p class="enddd"></p>
87 </dd>
88 <dt>Taskset command-line tool </dt>
89 <dd><p class="startdd">The taskset command-line tool is widely used for binding processes. It manipulates CPU set strings in a format that is slightly different from hwloc's one (it does not divide the string in fixed-size subsets and separates them with commas). To ease interoperability, hwloc offers routines to convert hwloc CPU sets from/to taskset-specific string format. Most hwloc command-line tools also support the <code>--taskset</code> option to manipulate taskset-specific strings. </p>
90 <p class="enddd"></p>
91 </dd>
92 </dl>
93 </div></div><!-- contents -->
48 <p>hwloc usually manipulates processing units and memory but it can also discover I/O devices and report their locality as well. This is useful for placing I/O intensive applications on cores near the I/O devices they use, or for gathering information about all platform components.</p>
49 <p>
50 </div><div class="section" id="iodevices_enabling">
51 </p>
52 <h1><a class="anchor" id="iodevices_enabling"></a>
53 Enabling and requirements</h1>
54 <p>I/O discovery is disabled by default (except in lstopo) for performance reasons. It can be enabled by changing the filtering of I/O object types to <code><a class="el" href="a00202.html#gga9a5a1f0140cd1952544477833733195ba63fd24954e18c83ff7eae9588759adb5" title="Only keep likely-important objects of the given type.">HWLOC_TYPE_FILTER_KEEP_IMPORTANT</a></code> or <code><a class="el" href="a00202.html#gga9a5a1f0140cd1952544477833733195bafda7b59e6810dfe778d8f9a4cc1e350e" title="Keep all objects of this type.">HWLOC_TYPE_FILTER_KEEP_ALL</a></code> before loading the topology, for instance with <code><a class="el" href="a00202.html#ga0ab38705357bc1203abe829da8a12ad3" title="Set the filtering for all I/O object types.">hwloc_topology_set_io_types_filter()</a></code>.</p>
55 <p>Note that I/O discovery requires significant help from the operating system. The pciaccess library (the development package is usually <code>libpciaccess-devel</code> or <code>libpciaccess-dev</code>) is needed to fully detect PCI devices and bridges/switches. On Linux, PCI discovery may still be performed even if <code>libpciaccess</code> cannot be used. But it misses PCI device names. Moreover, some operating systems require privileges for probing PCI devices, see <a class="el" href="a00406.html#faq_privileged">Does hwloc require privileged access?</a> for details.</p>
56 <p>The actual locality of I/O devices is only currently detected on Linux. Other operating system will just report I/O devices as being attached to the topology root object.</p>
57 <p>
58 </div><div class="section" id="iodevices_objects">
59 </p>
60 <h1><a class="anchor" id="iodevices_objects"></a>
61 I/O objects</h1>
62 <p>When I/O discovery is enabled and supported, some additional objects are added to the topology. The corresponding I/O object types are: </p><ul>
63 <li>
64 <code><a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075" title="Operating system device (filtered out by default).">HWLOC_OBJ_OS_DEVICE</a></code> describes an operating-system-specific handle such as the <em>sda</em> drive or the <em>eth0</em> network interface. See <a class="el" href="a00396.html#iodevices_osdev">OS devices</a>. </li>
65 <li>
66 <code><a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9" title="PCI device (filtered out by default).">HWLOC_OBJ_PCI_DEVICE</a></code> and <code><a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0" title="Bridge (filtered out by default). Any bridge (or PCI switch) that connects the host or an I/O bus,...">HWLOC_OBJ_BRIDGE</a></code> build up a PCI hierarchy made of bridges (that may be actually be switches) and devices. See <a class="el" href="a00396.html#iodevices_pci">PCI devices and bridges</a>. </li>
67 </ul>
68 <p>Any of these types may be filtered individually with <code><a class="el" href="a00202.html#gad894e70f15f8d4aada7be8d1aba38b7e" title="Set the filtering for the given object type.">hwloc_topology_set_type_filter()</a></code>.</p>
69 <p>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. <b>These children are not in the normal children list but rather in the I/O-specific children list.</b></p>
70 <p>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 <a class="el" href="a00196.html#ga759e88eaf5a230ad283e9d4c42486735" title="Returns the next object of type type.">hwloc_get_next_obj_by_type()</a>. However, hwloc offers some dedicated helpers such as <a class="el" href="a00213.html#ga66470dabce9db19a57c5940a909d0baa" title="Get the next PCI device in the system.">hwloc_get_next_pcidev()</a> and <a class="el" href="a00213.html#ga8b4584c8949e2c5f1c97ba7fe92b8145" title="Get the next OS device in the system.">hwloc_get_next_osdev()</a> for convenience (see <a class="el" href="a00213.html">Finding I/O objects</a>).</p>
71 <p>
72 </div><div class="section" id="iodevices_osdev">
73 </p>
74 <h1><a class="anchor" id="iodevices_osdev"></a>
75 OS devices</h1>
76 <p>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 <em>eth0</em> network interface, the <em>sda</em> hard drive, or the <em>mlx4_0</em> OpenFabrics HCA). Therefore hwloc tries to add software devices (<code><a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075" title="Operating system device (filtered out by default).">HWLOC_OBJ_OS_DEVICE</a></code>, also known as OS devices).</p>
77 <p>OS devices may be attached below PCI devices, but they may also be attached directly to normal objects. Indeed some OS devices are not related to PCI. For instance, NVDIMM block devices (such as <em>pmem0s</em> on Linux) are directly attached near their NUMA node (I/O child of the parent whose memory child is the NUMA node). Also, if hwloc could not discover PCI for some reason, PCI-related OS devices may also be attached directly to normal objects.</p>
78 <p>hwloc first tries to discover OS devices from the operating system, e.g. <em>eth0</em>, <em>sda</em> or <em>mlx4_0</em>. However, this ability is currently only available on Linux for some classes of devices.</p>
79 <p>hwloc then tries to discover software devices through additional I/O components using external libraries. For instance proprietary graphics drivers do not expose any named OS device, but hwloc may still create one OS object per software handle when supported. For instance the <code>opencl</code> and <code>cuda</code> components may add some <em>opencl0d0</em> and <em>cuda0</em> OS device objects.</p>
80 <p>Here is a list of OS device objects commonly created by hwloc components when I/O discovery is enabled and supported.</p>
81 <ul>
82 <li>
83 Hard disks or non-volatile memory devices (<a class="el" href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0a689b0488c3c0d08d116751c6b9cb8871" title="Operating system block device, or non-volatile memory device. For instance &quot;sda&quot; or &quot;dax2....">HWLOC_OBJ_OSDEV_BLOCK</a>) <ul>
84 <li>
85 <em>sda</em> or <em>dax2.0</em> (Linux component) </li>
86 </ul>
87 </li>
88 <li>
89 Network interfaces (<a class="el" href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0ab715d81155f771573c8682dffc65021b" title="Operating system network device. For instance the &quot;eth0&quot; interface on Linux.">HWLOC_OBJ_OSDEV_NETWORK</a>) <ul>
90 <li>
91 <em>eth0</em>, <em>wlan0</em>, <em>ib0</em> (Linux component) </li>
92 </ul>
93 </li>
94 <li>
95 OpenFabrics (InfiniBand, Omni-Path, usNIC, etc) HCAs (<a class="el" href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0a52157d03694fdae82dddd57ca8c973b6" title="Operating system openfabrics device. For instance the &quot;mlx4_0&quot; InfiniBand HCA, or &quot;hfi1_0&quot; Omni-Path ...">HWLOC_OBJ_OSDEV_OPENFABRICS</a>) <ul>
96 <li>
97 <em>mlx5_0</em>, <em>hfi1_0</em>, <em>qib0</em>, <em>usnic_0</em> (Linux component) </li>
98 </ul>
99 </li>
100 <li>
101 GPUs (<a class="el" href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90" title="Operating system GPU device. For instance &quot;:0.0&quot; for a GL display, &quot;card0&quot; for a Linux DRM device.">HWLOC_OBJ_OSDEV_GPU</a>) <ul>
102 <li>
103 <em>rsmi0</em> for the first RSMI device ("RSMI" subtype, from the RSMI component, using the AMD ROCm SMI library) </li>
104 <li>
105 <em>ze0</em> for the first Level Zero device ("LevelZero" subtype, from the levelzero component, using the oneAPI Level Zero library) </li>
106 <li>
107 <em>nvml0</em> for the first NVML device ("NVML" subtype, from the NVML component, using the NVIDIA Management Library) </li>
108 <li>
109 <em>:0.0</em> for the first display ("Display" subtype, from the GL component, using the NV-CONTROL X extension library, NVCtrl) </li>
110 <li>
111 <em>card0</em> and <em>renderD128</em> for DRM device files (from the Linux component, filtered-out by default because considered non-important) </li>
112 </ul>
113 </li>
114 <li>
115 Co-Processors (<a class="el" href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83" title="Operating system co-processor device. For instance &quot;opencl0d0&quot; for a OpenCL device,...">HWLOC_OBJ_OSDEV_COPROC</a>) <ul>
116 <li>
117 <em>opencl0d0</em> for the first device of the first OpenCL platform, <em>opencl1d3</em> for the fourth device of the second OpenCL platform ("OpenCL" subtype, from the OpenCL component) </li>
118 <li>
119 <em>cuda0</em> for the first NVIDIA CUDA device ("CUDA" subtype, from the CUDA component, using the NVIDIA CUDA Library) </li>
120 <li>
121 <em>ve0</em> for the first NEC Vector Engine device ("VectorEngine" subtype, from the Linux component) </li>
122 </ul>
123 </li>
124 <li>
125 DMA engine channel (<a class="el" href="a00193.html#gga64f5d539df299c97ae80ce53fc4b56c0a827ad1643360711a8b6c6af671366791" title="Operating system dma engine device. For instance the &quot;dma0chan0&quot; DMA channel on Linux.">HWLOC_OBJ_OSDEV_DMA</a>) <ul>
126 <li>
127 <em>dma0chan0</em> (Linux component) when all OS devices are enabled (<a class="el" href="a00202.html#gga9a5a1f0140cd1952544477833733195bafda7b59e6810dfe778d8f9a4cc1e350e" title="Keep all objects of this type.">HWLOC_TYPE_FILTER_KEEP_ALL</a>) </li>
128 </ul>
129 </li>
130 </ul>
131 <p>Note that some PCI devices may contain multiple software devices (see the example below).</p>
132 <p>See also <a class="el" href="a00402.html">Interoperability With Other Software</a> for managing these devices without considering them as hwloc objects.</p>
133 <p>
134 </div><div class="section" id="iodevices_pci">
135 </p>
136 <h1><a class="anchor" id="iodevices_pci"></a>
137 PCI devices and bridges</h1>
138 <p>A PCI hierarchy is usually organized as follows: A hostbridge object ( <code><a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0" title="Bridge (filtered out by default). Any bridge (or PCI switch) that connects the host or an I/O bus,...">HWLOC_OBJ_BRIDGE</a></code> object with upstream type <em>Host</em> and downstream type <em>PCI</em>) is attached below a normal object (usually the entire machine or a NUMA node). There may be multiple hostbridges in the machine, attached to different places, but all PCI devices are below one of them (unless the Bridge object type is filtered-out).</p>
139 <p>Each hostbridge contains one or several children, either other bridges (usually PCI to PCI switches) or PCI devices (<code><a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9" title="PCI device (filtered out by default).">HWLOC_OBJ_PCI_DEVICE</a></code>). The number of bridges between the hostbridge and a PCI device depends on the machine.</p>
140 <p>
141 </div><div class="section" id="iodevices_consult">
142 </p>
143 <h1><a class="anchor" id="iodevices_consult"></a>
144 Consulting I/O devices and binding</h1>
145 <p>I/O devices may be consulted by traversing the topology manually (with usual routines such as <a class="el" href="a00196.html#ga6f414dd80a2b943967a0ac92da3181a2" title="Returns the topology object at logical index idx with type type.">hwloc_get_obj_by_type()</a>) or by using dedicated helpers (such as <a class="el" href="a00213.html#gacdbaf0db98872e224b7883a84bfb0455" title="Find the PCI device object matching the PCI bus id given domain, bus device and function PCI bus id.">hwloc_get_pcidev_by_busid()</a>, see <a class="el" href="a00213.html">Finding I/O objects</a>).</p>
146 <p>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 <code>parent</code> link) until a non-I/O object is found (see <a class="el" href="a00213.html#gaf139bb61375178e90cc3f1835b452ab6" title="Get the first non-I/O ancestor object.">hwloc_get_non_io_ancestor_obj()</a>). 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.</p>
147 <p>Command-line tools are also aware of I/O devices. lstopo displays the interesting ones by default (passing <code>--no-io</code> disables it).</p>
148 <p>hwloc-calc and hwloc-bind may manipulate I/O devices specified by PCI bus ID or by OS device name. </p><ul>
149 <li>
150 <code>pci=0000:02:03.0</code> is replaced by the set of CPUs that are close to the PCI device whose bus ID is given. </li>
151 <li>
152 <code>os=eth0</code> is replaced by CPUs that are close to the I/O device whose software handle is called <code>eth0</code>. </li>
153 </ul>
154 <p>This enables easy binding of I/O-intensive applications near the device they use.</p>
155 <p>
156 </div><div class="section" id="iodevices_examples">
157 </p>
158 <h1><a class="anchor" id="iodevices_examples"></a>
159 Examples</h1>
160 <p>The following picture shows a dual-package dual-core host whose PCI bus is connected to the first package and NUMA node.</p>
161 <div class="image">
162 <img src="devel09-pci.png" alt=""/>
163 </div>
164 <p>Six interesting PCI devices were discovered. However, hwloc found some corresponding software devices (<em>eth0</em>, <em>eth1</em>, <em>sda</em>, <em>mlx4_0</em>, <em>ib0</em>, and <em>ib1</em>) for only four of these physical devices. The other ones (<em>PCI 102b:0532</em> and <em>PCI 8086:3a20</em>) are an unused IDE controller (no disk attached) and a graphic card (no corresponding software device reported to the user by the operating system).</p>
165 <p>On the contrary, it should be noted that three different software devices were found for the last PCI device (<em>PCI 15b3:634a</em>). Indeed this OpenFabrics HCA PCI device object contains one one OpenFabrics software device (<em>mlx4_0</em>) and two virtual network interface software devices (<em>ib0</em> and <em>ib1</em>).</p>
166 <p>Here is the corresponding textual output:</p>
167 <pre class="fragment">Machine (24GB total)
168 Package L#0
169 NUMANode L#0 (P#0 12GB)
170 L3 L#0 (8192KB)
171 L2 L#0 (256KB) + L1 L#0 (32KB) + Core L#0 + PU L#0 (P#0)
172 L2 L#1 (256KB) + L1 L#1 (32KB) + Core L#1 + PU L#1 (P#2)
173 HostBridge
174 PCIBridge
175 PCI 01:00.0 (Ethernet)
176 Net "eth0"
177 PCI 01:00.1 (Ethernet)
178 Net "eth1"
179 PCIBridge
180 PCI 03:00.0 (RAID)
181 Block "sda"
182 PCIBridge
183 PCI 04:03.0 (VGA)
184 PCI 00:1f.2 (IDE)
185 PCI 51:00.0 (InfiniBand)
186 Net "ib0"
187 Net "ib1"
188 Net "mlx4_0"
189 Package L#1
190 NUMANode L#1 (P#1 12GB)
191 L3 L#1 (8192KB)
192 L2 L#2 (256KB) + L1 L#2 (32KB) + Core L#2 + PU L#2 (P#1)
193 L2 L#3 (256KB) + L1 L#3 (32KB) + Core L#3 + PU L#3 (P#3)
194 </pre> </div></div><!-- contents -->
94195 </div><!-- PageDoc -->
95196 <!-- start footer part -->
96197 <hr class="footer"/><address class="footer"><small>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Thread Safety</title>
7 <title>Hardware Locality (hwloc): Miscellaneous objects</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="PageDoc"><div class="header">
4141 <div class="headertitle">
42 <div class="title">Thread Safety </div> </div>
42 <div class="title">Miscellaneous objects </div> </div>
4343 </div><!--header-->
4444 <div class="contents">
4545 <div class="textblock"><p>
4646 <div class="section">
4747 </p>
48 <p>Like most libraries that mainly fill data structures, hwloc is not thread safe but rather reentrant: all state is held in a <a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38" title="Topology context.">hwloc_topology_t</a> instance without mutex protection. That means, for example, that two threads can safely operate on and modify two different <a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38" title="Topology context.">hwloc_topology_t</a> instances, but they should not simultaneously invoke functions that modify the <em>same</em> instance. Similarly, one thread should not modify a <a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38" title="Topology context.">hwloc_topology_t</a> instance while another thread is reading or traversing it. However, two threads can safely read or traverse the same <a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38" title="Topology context.">hwloc_topology_t</a> instance concurrently.</p>
49 <p>When running in multiprocessor environments, be aware that proper thread synchronization and/or memory coherency protection is needed to pass hwloc data (such as <a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38" title="Topology context.">hwloc_topology_t</a> pointers) from one processor to another (e.g., a mutex, semaphore, or a memory barrier). Note that this is not a hwloc-specific requirement, but it is worth mentioning.</p>
50 <p>For reference, <a class="el" href="a00192.html#ga9d1e76ee15a7dee158b786c30b6a6e38" title="Topology context.">hwloc_topology_t</a> modification operations include (but may not be limited to):</p>
51 <dl>
52 <dt>Creation and destruction </dt>
53 <dd><p class="startdd"><code><a class="el" href="a00192.html#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa" title="Allocate a topology context.">hwloc_topology_init()</a>, <a class="el" href="a00192.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a>, <a class="el" href="a00192.html#ga9f34a640b6fd28d23699d4d084667b15" title="Terminate and free a topology context.">hwloc_topology_destroy()</a></code> (see <a class="el" href="a00192.html">Topology Creation and Destruction</a>) imply major modifications of the structure, including freeing some objects. No other thread cannot access the topology or any of its objects at the same time.</p>
54 <p class="interdd">Also references to objects inside the topology are not valid anymore after these functions return. </p>
55 <p class="enddd"></p>
56 </dd>
57 <dt>Runtime topology modifications </dt>
58 <dd><p class="startdd"><code><a class="el" href="a00200.html#gad980782ade737900c5cf208946768c30" title="Add a MISC object as a leaf of the topology.">hwloc_topology_insert_misc_object()</a></code>, <code><a class="el" href="a00200.html#ga4cea4741165faf5323931a9ed8786ef7" title="Allocate a Group object to insert later with hwloc_topology_insert_group_object().">hwloc_topology_alloc_group_object()</a></code>, and <code><a class="el" href="a00200.html#ga1fc6012b3e1c249b83f48cb7bcacaa5b" title="Add more structure to the topology by adding an intermediate Group.">hwloc_topology_insert_group_object()</a></code> (see <a class="el" href="a00200.html">Modifying a loaded Topology</a>) may modify the topology significantly by adding objects inside the tree, changing the topology depth, etc.</p>
59 <p class="interdd"><code><a class="el" href="a00216.html#gac5a71d96cd86efe31d6f8d282aae3d97" title="Provide a new distance matrix.">hwloc_distances_add()</a></code> and <code><a class="el" href="a00216.html#gac188d9b64d9560255ce5f6d0a20f9c0a" title="Remove all distance matrices from a topology.">hwloc_distances_remove()</a></code> (see <a class="el" href="a00216.html">Add or remove distances between objects</a>) modify the list of distance structures in the topology, and the former may even insert new Group objects.</p>
60 <p class="interdd"><code><a class="el" href="a00218.html#ga770657d1e44b09e93e09f623936c1e5f" title="Register a new memory attribute.">hwloc_memattr_register()</a></code> and <code><a class="el" href="a00218.html#ga960529c08b25cf15825e0f72ecceb504" title="Set an attribute value for a specific target NUMA node.">hwloc_memattr_set_value()</a></code> (see <a class="el" href="a00218.html">Managing memory attributes</a>) modify the memory attributes of the topology.</p>
61 <p class="interdd"><code><a class="el" href="a00200.html#ga6db81ed13ac0a9d70cc80372ab537815" title="Restrict the topology to the given CPU set or nodeset.">hwloc_topology_restrict()</a></code> modifies the topology even more dramatically by removing some objects.</p>
62 <p class="interdd"><code><a class="el" href="a00200.html#ga698ecd640d2b76742bba3829a145cd9a" title="Refresh internal structures after topology modification.">hwloc_topology_refresh()</a></code> updates some internal cached structures. (see below).</p>
63 <p class="interdd">Although references to former objects <em>may</em> still be valid after insertion or restriction, it is strongly advised to not rely on any such guarantee and always re-consult the topology to reacquire new instances of objects. </p>
64 <p class="enddd"></p>
65 </dd>
66 <dt>Consulting distances </dt>
67 <dd><p class="startdd"><code><a class="el" href="a00214.html#ga613e6b2a5d0f06626ee8d0c12fa46691" title="Retrieve distance matrices.">hwloc_distances_get()</a></code> and its variants are thread-safe except if the topology was recently modified (because distances may involve objects that were removed).</p>
68 <p class="interdd">Whenever the topology is modified (see above), <code><a class="el" href="a00200.html#ga698ecd640d2b76742bba3829a145cd9a" title="Refresh internal structures after topology modification.">hwloc_topology_refresh()</a></code> should be called in the same thread-safe context to force the refresh of internal distances structures. A call to <code><a class="el" href="a00214.html#ga613e6b2a5d0f06626ee8d0c12fa46691" title="Retrieve distance matrices.">hwloc_distances_get()</a></code> may also refresh distances-related structures.</p>
69 <p class="interdd">Once this refresh has been performed, multiple <code><a class="el" href="a00214.html#ga613e6b2a5d0f06626ee8d0c12fa46691" title="Retrieve distance matrices.">hwloc_distances_get()</a></code> may then be performed concurrently by multiple threads. </p>
70 <p class="enddd"></p>
71 </dd>
72 <dt>Consulting memory attributes </dt>
73 <dd><p class="startdd">Functions consulting memory attributes in <a class="el" href="a00140_source.html">hwloc/memattrs.h</a> are thread-safe except if the topology was recently modified (because memory attributes may involve objects that were removed).</p>
74 <p class="interdd">Whenever the topology is modified (see above), <code><a class="el" href="a00200.html#ga698ecd640d2b76742bba3829a145cd9a" title="Refresh internal structures after topology modification.">hwloc_topology_refresh()</a></code> should be called in the same thread-safe context to force the refresh of internal memory attribute structures. A call to <code><a class="el" href="a00217.html#ga297e4a9adc2272446a4c7449dacef0df" title="Return an attribute value for a specific target NUMA node.">hwloc_memattr_get_value()</a></code> or <code><a class="el" href="a00218.html#ga3177cc0ab47e4dd1fa69ca1df4c7cb1a" title="Return the target NUMA nodes that have some values for a given attribute.">hwloc_memattr_get_targets()</a></code> may also refresh internal structures for a given memory attribute.</p>
75 <p class="interdd">Once this refresh has been performed, multiple functions consulting memory attributes may then be performed concurrently by multiple threads. </p>
76 <p class="enddd"></p>
77 </dd>
78 <dt>Locating topologies </dt>
79 <dd><p class="startdd"><code>hwloc_topology_set_*</code> (see <a class="el" href="a00199.html">Topology Detection Configuration and Query</a>) do not modify the topology directly, but they do modify internal structures describing the behavior of the upcoming invocation of <code><a class="el" href="a00192.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a></code>. Hence, all of these functions should not be used concurrently. </p>
80 <p class="enddd"></p>
81 </dd>
82 </dl>
48 <p>hwloc topologies may be annotated with Misc objects (of type <code><a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a19f8a6953fa91efc76bcbcdf2d22de4d" title="Miscellaneous objects (filtered out by default). Objects without particular meaning,...">HWLOC_OBJ_MISC</a></code>) either automatically or by the user. This is a flexible way to annotate topologies with large sets of information since Misc objects may be inserted anywhere in the topology (to annotate specific objects or parts of the topology), even below other Misc objects, and each of them may contain multiple attributes (see also <a class="el" href="a00406.html#faq_annotate">How do I annotate the topology with private notes?</a>).</p>
49 <p>These Misc objects may have a <code>subtype</code> field to replace <code>Misc</code> with something else in the lstopo output.</p>
50 <p>
51 </div><div class="section" id="miscobjs_auto">
52 </p>
53 <h1><a class="anchor" id="miscobjs_auto"></a>
54 Misc objects added by hwloc</h1>
55 <p>hwloc only uses Misc objects when other object types are not sufficient, and when the Misc object type is not filtered-out anymore. This currently includes: </p><ul>
56 <li>
57 Memory modules (DIMMs), on Linux when privileged and when <code>dmi-sysfs</code> is supported by the kernel. These objects have a <code>subtype</code> field of value <code>MemoryModule</code>. They are currently always attached to the root object. Their attributes describe the DIMM vendor, model, etc. <code>lstopo -v</code> displays them as: <div class="fragment"><div class="line">Misc(MemoryModule) (P#1 DeviceLocation=<span class="stringliteral">&quot;Bottom-Slot 2(right)&quot;</span> BankLocation=<span class="stringliteral">&quot;BANK 2&quot;</span> Vendor=Elpida SerialNumber=21733667 AssetTag=9876543210 PartNumber=<span class="stringliteral">&quot;EBJ81UG8EFU0-GN-F &quot;</span>)</div>
58 </div><!-- fragment --> </li>
59 <li>
60 Displaying process binding in <code>lstopo --top</code>. These objects have a <code>subtype</code> field of value <code>Process</code> and a name attribute made of their PID and program name. They are attached below the object they are bound to. The textual <code>lstopo</code> displays them as: <div class="fragment"><div class="line">PU L#0 (P#0)</div>
61 <div class="line"> Misc(Process) 4445 myprogram</div>
62 </div><!-- fragment --> </li>
63 </ul>
64 <p>
65 </div><div class="section" id="miscobjs_annotate">
66 </p>
67 <h1><a class="anchor" id="miscobjs_annotate"></a>
68 Annotating topologies with Misc objects</h1>
69 <p>The user may annotate hwloc topologies with its own Misc objects. This can be achieved with <code><a class="el" href="a00203.html#gad980782ade737900c5cf208946768c30" title="Add a MISC object as a leaf of the topology.">hwloc_topology_insert_misc_object()</a></code> as well as hwloc-annotate command-line tool. </p>
8370 </div></div><!-- contents -->
8471 </div><!-- PageDoc -->
8572 <!-- start footer part -->
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Components and plugins</title>
7 <title>Hardware Locality (hwloc): Object attributes</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="PageDoc"><div class="header">
4141 <div class="headertitle">
42 <div class="title">Components and plugins </div> </div>
42 <div class="title">Object attributes </div> </div>
4343 </div><!--header-->
4444 <div class="contents">
4545 <div class="textblock"><p>
46 <div class="section">
47 </p>
48 <p>hwloc is organized in components that are responsible for discovering objects. Depending on the topology configuration, some components will be used, some will be ignored. The usual default is to enable the native operating system component, (e.g. <code>linux</code> or <code>solaris</code>) and the <code>pci</code> miscellaneous component. If available, an architecture-specific component (such as <code>x86</code>) may also improve the topology detection.</p>
49 <p>If a XML topology is loaded, the <code>xml</code> discovery component will be used instead of all other components. It internally uses a specific class of components for the actual XML import/export routines (<code>xml_libxml</code> and <code>xml_nolibxml</code>) but these will not be discussed here (see <a class="el" href="a00394.html#xml_backends">libxml2 and minimalistic XML backends</a>).</p>
50 <p>
51 </div><div class="section" id="plugins_default">
52 </p>
53 <h1><a class="anchor" id="plugins_default"></a>
54 Components enabled by default</h1>
55 <p>The hwloc core contains a list of components sorted by priority. Each one is enabled as long as it does not conflict with the previously enabled ones. This includes native operating system components, architecture-specific ones, and if available, I/O components such as <code>pci</code>.</p>
56 <p>Usually the native operating system component (when it exists, e.g. <code>linux</code> or <code>aix</code>) is enabled first. Then hwloc looks for an architecture specific component (e.g. <code>x86</code>). Finally there also exist a basic component (<code>no_os</code>) that just tries to discover the number of PUs in the system.</p>
57 <p>Each component discovers as much topology information as possible. Most of them, including most native OS components, do nothing unless the topology is still empty. Some others, such as <code>x86</code> and <code>pci</code>, can complete and annotate what other backends found earlier. Discovery is performed by phases: CPUs are first discovered, then memory is attached, then PCI, etc.</p>
58 <p>Default priorities ensure that clever components are invoked first. Native operating system components have higher priorities, and are therefore invoked first, because they likely offer very detailed topology information. If needed, it will be later extended by architecture-specific information (e.g. from the <code>x86</code> component).</p>
59 <p>If any configuration function such as <a class="el" href="a00198.html#ga879439b7ee99407ee911b3ac64e9a25e" title="Enable XML-file based topology.">hwloc_topology_set_xml()</a> is used before loading the topology, the corresponding component is enabled first. Then, as usual, hwloc enables any other component (based on priorities) that does not conflict.</p>
60 <p>Certain components that manage a virtual topology, for instance XML topology import or synthetic topology description, conflict with all other components. Therefore, one of them may only be loaded (e.g. with <code><a class="el" href="a00198.html#ga879439b7ee99407ee911b3ac64e9a25e" title="Enable XML-file based topology.">hwloc_topology_set_xml()</a></code>) if no other component is enabled.</p>
61 <p>The environment variable <code>HWLOC_COMPONENTS_VERBOSE</code> may be set to get verbose messages about component registration (including their priority) and enabling.</p>
62 <p>
63 </div><div class="section" id="plugins_select">
64 </p>
65 <h1><a class="anchor" id="plugins_select"></a>
66 Selecting which components to use</h1>
67 <p>If no topology configuration functions such as <code><a class="el" href="a00198.html#ga4fab186bb6181a00bcf585825fddd38d" title="Enable synthetic topology.">hwloc_topology_set_synthetic()</a></code> have been called, plugins may be selected with environment variables such as <code>HWLOC_XMLFILE</code>, <code>HWLOC_SYNTHETIC</code>, <code>HWLOC_FSROOT</code>, or <code>HWLOC_CPUID_PATH</code> (see <a class="el" href="a00388.html">Environment Variables</a>).</p>
68 <p>Finally, the environment variable <code>HWLOC_COMPONENTS</code> resets the list of selected components. If the variable is set and empty (or set to a single comma separating nothing, since some operating systems do not accept empty variables), the normal plugin priority order is used.</p>
69 <p>If the variable is set to <code>x86</code> in this variable will cause the <code>x86</code> component to take precedence over any other component, including the native operating system component. It is therefore loaded first, before hwloc tries to load all remaining non-conflicting components. In this case, <code>x86</code> would take care of discovering everything it supports, instead of only completing what the native OS information. This may be useful if the native component is buggy on some platforms.</p>
70 <p>It is possible to prevent some components from being loaded by prefixing their name with <code>-</code> in the list. For instance <code>x86,-pci</code> will load the <code>x86</code> component, then let hwloc load all the usual components except <code>pci</code>. A single component phase may also be blacklisted, for instance with <code>-linux:io</code>. <a class="el" href="a00198.html#ga9ad41adf418cee1c0ee32ba9bd4a3d36" title="Prevent a discovery component from being used for a topology.">hwloc_topology_set_components()</a> may also be used inside the program to prevent the loading of a specific component (or phases) for the target topology.</p>
71 <p>It is possible to prevent all remaining components from being loaded by placing <code>stop</code> in the environment variable. Only the components listed before this keyword will be enabled.</p>
72 <p>
73 </div><div class="section" id="plugins_load">
74 </p>
75 <h1><a class="anchor" id="plugins_load"></a>
76 Loading components from plugins</h1>
77 <p>Components may optionally be built as plugins so that the hwloc core library does not directly depend on their dependencies (for instance the <code>libpciaccess</code> library). Plugin support may be enabled with the <code>--enable-plugins</code> configure option. All components buildable as plugins will then be built as plugins. The configure option may be given a comma-separated list of component names to specify the exact list of components to build as plugins.</p>
78 <p>Plugins are built as independent dynamic libraries that are installed in <code>$libdir/hwloc</code>. All plugins found in this directory are loaded during <code>topology_init()</code> (unless blacklisted in <code>HWLOC_PLUGINS_BLACKLIST</code>, see <a class="el" href="a00388.html">Environment Variables</a>). A specific list of directories (colon-separated) to scan may be specified in the <code>HWLOC_PLUGINS_PATH</code> environment variable.</p>
79 <p>Note that loading a plugin just means that the corresponding component is registered to the hwloc core. Components are then only enabled if the topology configuration requests it, as explained in the previous sections.</p>
80 <p>Also note that plugins should carefully be enabled and used when embedding hwloc in another project, see <a class="el" href="a00399.html">Embedding hwloc in Other Software</a> for details.</p>
81 <p>
82 </div><div class="section" id="plugins_list">
83 </p>
84 <h1><a class="anchor" id="plugins_list"></a>
85 Existing components and plugins</h1>
86 <p>All components distributed within hwloc are listed below. The list of actually available components may be listed at running with the <code>HWLOC_COMPONENTS_VERBOSE</code> environment variable (see <a class="el" href="a00388.html">Environment Variables</a>).</p>
87 <dl>
88 <dt>linux </dt>
89 <dd>The official component for discovering CPU, memory and I/O devices on Linux. It discovers PCI devices without the help of external libraries such as libpciaccess, but requires the pci component for adding vendor/device names to PCI objects. It also discovers many kinds of Linux-specific OS devices. </dd>
90 <dt>aix, darwin, freebsd, hpux, netbsd, solaris, windows </dt>
91 <dd>Each officially supported operating system has its own native component, which is statically built when supported, and which is used by default. </dd>
92 <dt>x86 </dt>
93 <dd>The x86 architecture (either 32 or 64 bits) has its own component that may complete or replace the previously-found CPU information. It is statically built when supported. </dd>
94 <dt>bgq </dt>
95 <dd>This component is specific to IBM BlueGene/Q compute node (running CNK). It is built and enabled by default when <code>--host=powerpc64-bgq-linux</code> is passed to configure (see <a class="el" href="a00400.html#faq_bgq">How do I build hwloc for BlueGene/Q?</a>). </dd>
96 <dt>no_os </dt>
97 <dd>A basic component that just tries to detect the number of processing units in the system. It mostly serves on operating systems that are not natively supported. It is always statically built. </dd>
98 <dt>pci </dt>
99 <dd>PCI object discovery uses the external pciaccess library (aka libpciaccess); see <a class="el" href="a00390.html">I/O Devices</a>. It may also annotate existing PCI devices with vendor and device names. <b>It may be built as a plugin</b>. </dd>
100 <dt>opencl </dt>
101 <dd>The OpenCL component creates co-processor OS device objects such as <em>opencl0d0</em> (first device of the first OpenCL platform) or <em>opencl1d3</em> (fourth device of the second platform). Only the AMD and NVIDIA OpenCL implementations currently offer locality information. <b>It may be built as a plugin</b>. </dd>
102 <dt>rsmi </dt>
103 <dd>This component creates GPU OS device objects such as <em>rsmi0</em> for describing AMD GPUs. <b>It may be built as a plugin</b>. </dd>
104 <dt>cuda </dt>
105 <dd>This component creates co-processor OS device objects such as <em>cuda0</em> that correspond to NVIDIA GPUs used with CUDA library. <b>It may be built as a plugin</b>. </dd>
106 <dt>nvml </dt>
107 <dd>Probing the NVIDIA Management Library creates OS device objects such as <em>nvml0</em> that are useful for batch schedulers. It also detects the actual PCIe link bandwidth without depending on power management state and without requiring administrator privileges. <b>It may be built as a plugin</b>. </dd>
108 <dt>gl </dt>
109 <dd>Probing the NV-CONTROL X extension (NVCtrl library) creates OS device objects such as <em>:0.0</em> corresponding to NVIDIA displays. They are useful for graphical applications that need to place computation and/or data near a rendering GPU. <b>It may be built as a plugin</b>. </dd>
110 <dt>synthetic </dt>
111 <dd>Synthetic topology support (see <a class="el" href="a00395.html">Synthetic topologies</a>) is always built statically. </dd>
112 <dt>xml </dt>
113 <dd>XML topology import (see <a class="el" href="a00394.html">Importing and exporting topologies from/to XML files</a>) is always built statically. It internally uses one of the XML backends (see <a class="el" href="a00394.html#xml_backends">libxml2 and minimalistic XML backends</a>). <ul>
114 <li>
115 <b>xml_nolibxml</b> is a basic and hwloc-specific XML import/export. It is always statically built. </li>
116 <li>
117 <b>xml_libxml</b> relies on the external libxml2 library for provinding a feature-complete XML import/export. <b>It may be built as a plugin</b>. </li>
118 </ul>
46 <div class="section" id="attributes_normal">
47 </p>
48 <h1><a class="anchor" id="attributes_normal"></a>
49 Normal attributes</h1>
50 <p>hwloc objects have many generic attributes in the <a class="el" href="a00250.html" title="Structure of a topology object.">hwloc_obj</a> structure, for instance their <code>logical_index</code> or <code>os_index</code> (see <a class="el" href="a00406.html#faq_indexes">Should I use logical or physical/OS indexes? and how?</a>), <code>depth</code> or <code>name</code>.</p>
51 <p>The kind of object is first described by the <code>obj-&gt;type</code> generic attribute (an integer). OS devices also have a specific <code>obj-&gt;attr-&gt;osdev.type</code> integer for distinguishing between NICs, GPUs, etc. Objects may also have an optional <code>obj-&gt;subtype</code> pointing to a better description string. For instance subtype is useful to say what Group objects are actually made of (e.g. <em>Book</em> for Linux S/390 books). It may also specify that a Block OS device is a <em>Disk</em>, or that a CoProcessor OS device is a <em>CUDA</em> device. This subtype is displayed by lstopo either in place or after the main <code>obj-&gt;type</code> attribute. NUMA nodes that correspond GPU memory may also have <em>GPUMemory</em> as subtype.</p>
52 <p>Each object also contains an <code>attr</code> field that, if non NULL, points to a union <a class="el" href="a00254.html" title="Object type-specific Attributes.">hwloc_obj_attr_u</a> of type-specific attribute structures. For instance, a L2Cache object <code>obj</code> contains cache-specific information in <code>obj-&gt;attr-&gt;cache</code>, such as its size and associativity, cache type. See <a class="el" href="a00254.html" title="Object type-specific Attributes.">hwloc_obj_attr_u</a> for details.</p>
53 <p>
54 </div><div class="section" id="attributes_info">
55 </p>
56 <h1><a class="anchor" id="attributes_info"></a>
57 Custom string infos</h1>
58 <p>Aside os these generic attribute fields, hwloc annotates many objects with string attributes that are made of a key and a value. Each object contains a list of such pairs that may be consulted manually (looking at the object <code>infos</code> array field) or using the <a class="el" href="a00198.html#gab358661a92bb27d8542b255cc9f6f25e" title="Search the given key name in object infos and return the corresponding value.">hwloc_obj_get_info_by_name()</a>. The user may additionally add new key-value pairs to any object using <a class="el" href="a00198.html#gace7654bb8a9002caae1a4b8a59e7452e" title="Add the given info name and value pair to the given object.">hwloc_obj_add_info()</a> or the <a class="el" href="a00393.html#cli_hwloc_annotate">hwloc-annotate</a> program.</p>
59 <p>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.</p>
60 <p>
61 </div><div class="subsection" id="attributes_info_platform">
62 </p>
63 <h2><a class="anchor" id="attributes_info_platform"></a>
64 Hardware Platform Information</h2>
65 <p>These info attributes are attached to the root object (Machine).</p>
66 <dl>
67 <dt>PlatformName, PlatformModel, PlatformVendor, PlatformBoardID, PlatformRevision, </dt>
68 <dd></dd>
69 <dt>SystemVersionRegister, ProcessorVersionRegister (Machine) </dt>
70 <dd>Some POWER/PowerPC-specific attributes describing the platform and processor. Currently only available on Linux. Usually added to Package objects, but can be in Machine instead if hwloc failed to discover any package. </dd>
71 <dt>DMIBoardVendor, DMIBoardName, etc. </dt>
72 <dd>DMI hardware information such as the motherboard and chassis models and vendors, the BIOS revision, etc., as reported by Linux under <code>/sys/class/dmi/id/</code>. </dd>
73 <dt>MemoryMode, ClusterMode </dt>
74 <dd><p class="startdd">Intel Xeon Phi processor configuration modes. Available if hwloc-dump-hwdata was used (see <a class="el" href="a00406.html#faq_knl_dump">Why do I need hwloc-dump-hwdata for memory on Intel Xeon Phi processor?</a>) or if hwloc managed to guess them from the NUMA configuration.</p>
75 <p class="enddd">The memory mode may be <em>Cache</em>, <em>Flat</em>, <em>Hybrid50</em> (half the MCDRAM is used as a cache) or <em>Hybrid25</em> (25% of MCDRAM as cache). The cluster mode may be <em>Quadrant</em>, <em>Hemisphere</em>, <em>All2All</em>, <em>SNC2</em> or <em>SNC4</em>. See doc/examples/get-knl-modes.c in the source directory for an example of retrieving these attributes. </p>
11976 </dd>
120 <dt>fake </dt>
121 <dd>A dummy plugin that does nothing but is used for debugging plugin support. </dd>
77 </dl>
78 <p>
79 </div><div class="subsection" id="attributes_info_os">
80 </p>
81 <h2><a class="anchor" id="attributes_info_os"></a>
82 Operating System Information</h2>
83 <p>These info attributes are attached to the root object (Machine).</p>
84 <dl>
85 <dt>OSName, OSRelease, OSVersion, HostName, Architecture </dt>
86 <dd>The operating system name, release, version, the hostname and the architecture name, as reported by the Unix <code>uname</code> command. </dd>
87 <dt>LinuxCgroup </dt>
88 <dd>The name the Linux control group where the calling process is placed. </dd>
89 <dt>WindowsBuildEnvironment </dt>
90 <dd>Either MinGW or Cygwin when one of these environments was used during build. </dd>
91 </dl>
92 <p>
93 </div><div class="subsection" id="attributes_info_hwloc">
94 </p>
95 <h2><a class="anchor" id="attributes_info_hwloc"></a>
96 hwloc Information</h2>
97 <p>Unless specified, these info attributes are attached to the root object (Machine).</p>
98 <dl>
99 <dt>Backend (topology root, or specific object added by that backend) </dt>
100 <dd>The name of the hwloc backend/component that filled the topology. If several components were combined, multiple Backend keys may exist, with different values, for instance <code>x86</code> and <code>Linux</code> in the root object and <code>CUDA</code> in CUDA OS device objects. </dd>
101 <dt>SyntheticDescription </dt>
102 <dd>The description string that was given to hwloc to build this synthetic topology. </dd>
103 <dt>hwlocVersion </dt>
104 <dd>The version number of the hwloc library that was used to generate the topology. If the topology was loaded from XML, this is not the hwloc version that loaded it, but rather the first hwloc instance that exported the topology to XML earlier. </dd>
105 <dt>ProcessName </dt>
106 <dd>The name of the process that contains the hwloc library that was used to generate the topology. If the topology was from XML, this is not the hwloc process that loaded it, but rather the first process that exported the topology to XML earlier. </dd>
107 </dl>
108 <p>
109 </div><div class="subsection" id="attributes_info_cpu">
110 </p>
111 <h2><a class="anchor" id="attributes_info_cpu"></a>
112 CPU Information</h2>
113 <p>These info attributes are attached to Package objects, or to the root object (Machine) if package locality information is missing.</p>
114 <dl>
115 <dt>CPUModel </dt>
116 <dd>The processor model name. </dd>
117 <dt>CPUVendor, CPUModelNumber, CPUFamilyNumber, CPUStepping </dt>
118 <dd>The processor vendor name, model number, family number, and stepping number. Currently available for x86 and Xeon Phi processors on most systems, and for ia64 processors on Linux (except CPUStepping). </dd>
119 <dt>CPURevision </dt>
120 <dd>A POWER/PowerPC-specific general processor revision number, currently only available on Linux. </dd>
121 <dt>CPUType </dt>
122 <dd>A Solaris-specific general processor type name, such as "i86pc". </dd>
123 </dl>
124 <p>
125 </div><div class="subsection" id="attributes_info_osdev">
126 </p>
127 <h2><a class="anchor" id="attributes_info_osdev"></a>
128 OS Device Information</h2>
129 <p>These info attributes are attached to OS device objects specified in parentheses.</p>
130 <dl>
131 <dt>Vendor, Model, Revision, SerialNumber, Size, SectorSize (Block OS devices) </dt>
132 <dd>The vendor and model names, revision, serial number, size (in kB) and SectorSize (in bytes). </dd>
133 <dt>LinuxDeviceID (Block OS devices) </dt>
134 <dd>The major/minor device number such as 8:0 of Linux device. </dd>
135 <dt>GPUVendor, GPUModel (GPU or Co-Processor OS devices) </dt>
136 <dd>The vendor and model names of the GPU device. </dd>
137 <dt>OpenCLDeviceType, OpenCLPlatformIndex, </dt>
138 <dd></dd>
139 <dt>OpenCLPlatformName, OpenCLPlatformDeviceIndex (OpenCL OS devices) </dt>
140 <dd>The type of OpenCL device, the OpenCL platform index and name, and the index of the device within the platform. </dd>
141 <dt>OpenCLComputeUnits, OpenCLGlobalMemorySize (OpenCL OS devices) </dt>
142 <dd>The number of compute units and global memory size (in kB) of an OpenCL device. </dd>
143 <dt>LevelZeroVendor, LevelZeroModel, LevelZeroBrand, </dt>
144 <dd></dd>
145 <dt>LevelZeroSerialNumber, LevelZeroBoardNumber (LevelZero OS devices) </dt>
146 <dd>The name of the vendor, device mode, brand of a Level Zero device, and its serial and board numbers. </dd>
147 <dt>LevelZeroDriverIndex, LevelZeroDriverDeviceIndex (LevelZero OS devices) </dt>
148 <dd>The index of the Level Zero driver within the list of drivers, and the index of the device within the list of devices managed by this driver. </dd>
149 <dt>LevelZeroCQGroups, LevelZeroCQGroup2 (LevelZero OS devices) </dt>
150 <dd>The number of completion queue groups, and the description of the third group (as <code>N*0xX</code> where <code>N</code> is the number of queues in the group, and <code>0xX</code> is the hexadecimal bitmask of <code>ze_command_queue_group_property_flag_t</code> listing properties of those queues). </dd>
151 <dt>AMDUUID, AMDSerial (RSMI GPU OS devices) </dt>
152 <dd>The UUID and serial number of AMD GPUs. </dd>
153 <dt>XGMIHiveID (RSMI GPU OS devices) </dt>
154 <dd>The ID of the group of GPUs (Hive) interconnected by XGMI links </dd>
155 <dt>XGMIPeers (RSMI GPU OS devices) </dt>
156 <dd>The list of RSMI OS devices that are directly connected to the current device through XGMI links. They are given as a space-separated list of object names, for instance <em>rsmi2 rsmi3</em>. </dd>
157 <dt>NVIDIAUUID, NVIDIASerial (NVML GPU OS devices) </dt>
158 <dd>The UUID and serial number of NVIDIA GPUs. </dd>
159 <dt>CUDAMultiProcessors, CUDACoresPerMP, </dt>
160 <dd></dd>
161 <dt>CUDAGlobalMemorySize, CUDAL2CacheSize, CUDASharedMemorySizePerMP (CUDA OS devices) </dt>
162 <dd>The number of shared multiprocessors, the number of cores per multiprocessor, the global memory size, the (global) L2 cache size, and size of the shared memory in each multiprocessor of a CUDA device. Sizes are in kB. </dd>
163 <dt>VectorEngineModel, VectorEngineSerialNumber (VectorEngine OS devices) </dt>
164 <dd>The model and serial number of a VectorEngine device. </dd>
165 <dt>VectorEngineCores, VectorEngineMemorySize, VectorEngineLLCSize, </dt>
166 <dd></dd>
167 <dt>VectorEngineL2Size, VectorEngineL1dSize, VectorEngineL1iSize (VectorEngine OS devices) </dt>
168 <dd>The number of cores, memory size, and the sizes of the (global) last level cache and of L2, L1d and L1i caches of a VectorEngine device. Sizes are in kB. </dd>
169 <dt>VectorEngineNUMAPartitioned (VectorEngine OS devices) </dt>
170 <dd>If this attribute exists, the VectorEngine device is configured in partitioned mode with multiple NUMA nodes. </dd>
171 <dt>Address, Port (Network interface OS devices) </dt>
172 <dd>The MAC address and the port number of a software network interface, such as <code>eth4</code> on Linux. </dd>
173 <dt>NodeGUID, SysImageGUID, Port1State, Port2LID, Port2LMC, Port3GID1 (OpenFabrics OS devices) </dt>
174 <dd>The node GUID and GUID mask, the state of a port #1 (value is 4 when active), the LID and LID mask count of port #2, and GID #1 of port #3. </dd>
175 </dl>
176 <p>
177 </div><div class="subsection" id="attributes_info_otherobjs">
178 </p>
179 <h2><a class="anchor" id="attributes_info_otherobjs"></a>
180 Other Object-specific Information</h2>
181 <p>These info attributes are attached to objects specified in parentheses.</p>
182 <dl>
183 <dt>DAXDevice (NUMA Nodes) </dt>
184 <dd>The name of the Linux DAX device that was used to expose a non-volatile memory region as a volatile NUMA node. </dd>
185 <dt>PCIBusID (GPUMemory NUMA Nodes) </dt>
186 <dd>The PCI bus ID of the GPU whose memory is exposed in this NUMA node. </dd>
187 <dt>Inclusive (Caches) </dt>
188 <dd>The inclusiveness of a cache (1 if inclusive, 0 otherwise). Currently only available on x86 processors. </dd>
189 <dt>SolarisProcessorGroup (Group) </dt>
190 <dd>The Solaris kstat processor group name that was used to build this Group object. </dd>
191 <dt>PCIVendor, PCIDevice (PCI devices and bridges) </dt>
192 <dd>The vendor and device names of the PCI device. </dd>
193 <dt>PCISlot (PCI devices or Bridges) </dt>
194 <dd>The name/number of the physical slot where the device is plugged. If the physical device contains PCI bridges above the actual PCI device, the attribute may be attached to the highest bridge (i.e. the first object that actually appears below the physical slot). </dd>
195 <dt>Vendor, AssetTag, PartNumber, DeviceLocation, BankLocation (MemoryModule Misc objects) </dt>
196 <dd>Information about memory modules (DIMMs) extracted from SMBIOS. </dd>
197 </dl>
198 <p>
199 </div><div class="subsection" id="attributes_info_user">
200 </p>
201 <h2><a class="anchor" id="attributes_info_user"></a>
202 User-Given Information</h2>
203 <p>Here is a non-exhaustive list of user-provided info attributes that have a special meaning: </p><dl>
204 <dt>lstopoStyle </dt>
205 <dd>Enforces the style of an object (background and text colors) in the graphical output of lstopo. See CUSTOM COLORS in the lstopo(1) manpage for details. </dd>
122206 </dl>
123207 </div></div><!-- contents -->
124208 </div><!-- PageDoc -->
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Embedding hwloc in Other Software</title>
7 <title>Hardware Locality (hwloc): Topology Attributes: Distances, Memory Attributes and CPU Kinds</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="PageDoc"><div class="header">
4141 <div class="headertitle">
42 <div class="title">Embedding hwloc in Other Software </div> </div>
42 <div class="title">Topology Attributes: Distances, Memory Attributes and CPU Kinds </div> </div>
4343 </div><!--header-->
4444 <div class="contents">
4545 <div class="textblock"><p>
4646 <div class="section">
4747 </p>
48 <p>It can be desirable to include hwloc in a larger software package (be sure to check out the LICENSE file) so that users don't have to separately download and install it before installing your software. This can be advantageous to ensure that your software uses a known-tested/good version of hwloc, or for use on systems that do not have hwloc pre-installed.</p>
49 <p>When used in "embedded" mode, hwloc will:</p>
50 <ul>
51 <li>not install any header files</li>
52 <li>not build any documentation files</li>
53 <li>not build or install any executables or tests</li>
54 <li>not build <code>libhwloc.*</code> &ndash; instead, it will build <code>libhwloc_embedded.*</code></li>
55 </ul>
56 <p>There are two ways to put hwloc into "embedded" mode. The first is directly from the configure command line:</p>
57 <pre class="fragment">shell$ ./configure --enable-embedded-mode ...
58 </pre><p>The second requires that your software project uses the GNU Autoconf / Automake / Libtool tool chain to build your software. If you do this, you can directly integrate hwloc's m4 configure macro into your configure script. You can then invoke hwloc's configuration tests and build setup by calling a m4 macro (see below).</p>
59 <p>Although hwloc dynamic shared object plugins may be used in embedded mode, the embedder project will have to manually setup dlopen or libltdl in its build system so that hwloc can load its plugins at run time. Also, embedders should be aware of complications that can arise due to public and private linker namespaces (e.g., if the embedder project is loaded into a private namespace and then hwloc tries to dynamically load its plugins, such loading may fail since the hwloc plugins can't find the hwloc symbols they need). The embedder project is <b>strongly</b> advised not to use hwloc's dynamically loading plugins / dlopen / libltdl capability.</p>
48 <p>Besides the hierarchy of objects and individual object attributes (see <a class="el" href="a00398.html">Object attributes</a>), hwloc may also expose finer information about the hardware organization.</p>
6049 <p>
61 </div><div class="section" id="embedding_m4">
50 </div><div class="section" id="topoattrs_distances">
6251 </p>
63 <h1><a class="anchor" id="embedding_m4"></a>
64 Using hwloc's M4 Embedding Capabilities</h1>
65 <p>Every project is different, and there are many different ways of integrating hwloc into yours. What follows is <em>one</em> example of how to do it.</p>
66 <p>If your project uses recent versions Autoconf, Automake, and Libtool to build, you can use hwloc's embedded m4 capabilities. We have tested the embedded m4 with projects that use Autoconf 2.65, Automake 1.11.1, and Libtool 2.2.6b. Slightly earlier versions of may also work but are untested. Autoconf versions prior to 2.65 are almost certain to not work.</p>
67 <p>You can either copy all the config/hwloc*m4 files from the hwloc source tree to the directory where your project's m4 files reside, or you can tell aclocal to find more m4 files in the embedded hwloc's "config" subdirectory (e.g., add "-Ipath/to/embedded/hwloc/config" to your Makefile.am's ACLOCAL_AMFLAGS).</p>
68 <p>The following macros can then be used from your configure script (only HWLOC_SETUP_CORE <em>must</em> be invoked if using the m4 macros):</p>
69 <ul>
70 <li><p class="startli">HWLOC_SETUP_CORE(config-dir-prefix, action-upon-success, action-upon-failure, print_banner_or_not): Invoke the hwloc configuration tests and setup the hwloc tree to build. The first argument is the prefix to use for AC_OUTPUT files &ndash; it's where the hwloc tree is located relative to <code>$top_srcdir</code>. Hence, if your embedded hwloc is located in the source tree at contrib/hwloc, you should pass <code>[contrib/hwloc]</code> as the first argument. If HWLOC_SETUP_CORE and the rest of <code>configure</code> completes successfully, then "make" traversals of the hwloc tree with standard Automake targets (all, clean, install, etc.) should behave as expected. For example, it is safe to list the hwloc directory in the SUBDIRS of a higher-level Makefile.am. The last argument, if not empty, will cause the macro to display an announcement banner that it is starting the hwloc core configuration tests.</p>
71 <p class="startli">HWLOC_SETUP_CORE will set the following environment variables and AC_SUBST them: HWLOC_EMBEDDED_CFLAGS, HWLOC_EMBEDDED_CPPFLAGS, and HWLOC_EMBEDDED_LIBS. These flags are filled with the values discovered in the hwloc-specific m4 tests, and can be used in your build process as relevant. The _CFLAGS, _CPPFLAGS, and _LIBS variables are necessary to build libhwloc (or libhwloc_embedded) itself.</p>
72 <p class="startli">HWLOC_SETUP_CORE also sets HWLOC_EMBEDDED_LDADD environment variable (and AC_SUBSTs it) to contain the location of the libhwloc_embedded.la convenience Libtool archive. It can be used in your build process to link an application or other library against the embedded hwloc library.</p>
73 <p class="startli"><b>NOTE: If the HWLOC_SET_SYMBOL_PREFIX macro is used, it must be invoked <em>before</em> HWLOC_SETUP_CORE.</b></p>
74 </li>
75 <li>HWLOC_BUILD_STANDALONE: HWLOC_SETUP_CORE defaults to building hwloc in an "embedded" mode (described above). If HWLOC_BUILD_STANDALONE is invoked *before* HWLOC_SETUP_CORE, the embedded definitions will not apply (e.g., libhwloc.la will be built, not libhwloc_embedded.la).</li>
76 <li>HWLOC_SET_SYMBOL_PREFIX(foo_): Tells the hwloc to prefix all of hwloc's types and public symbols with "foo_"; meaning that function hwloc_init() becomes foo_hwloc_init(). Enum values are prefixed with an upper-case translation if the prefix supplied; HWLOC_OBJ_CORE becomes FOO_hwloc_OBJ_CORE. This is recommended behavior if you are including hwloc in middleware &ndash; it is possible that your software will be combined with other software that links to another copy of hwloc. If both uses of hwloc utilize different symbol prefixes, there will be no type/symbol clashes, and everything will compile, link, and run successfully. If you both embed hwloc without changing the symbol prefix and also link against an external hwloc, you may get multiple symbol definitions when linking your final library or application.</li>
77 <li>HWLOC_SETUP_DOCS, HWLOC_SETUP_UTILS, HWLOC_SETUP_TESTS: These three macros only apply when hwloc is built in "standalone" mode (i.e., they should NOT be invoked unless HWLOC_BUILD_STANDALONE has already been invoked).</li>
78 <li>HWLOC_DO_AM_CONDITIONALS: If you embed hwloc in a larger project and build it conditionally with Automake (e.g., if HWLOC_SETUP_CORE is invoked conditionally), you must unconditionally invoke HWLOC_DO_AM_CONDITIONALS to avoid warnings from Automake (for the cases where hwloc is not selected to be built). This macro is necessary because hwloc uses some AM_CONDITIONALs to build itself, and AM_CONDITIONALs cannot be defined conditionally. Note that it is safe (but unnecessary) to call HWLOC_DO_AM_CONDITIONALS even if HWLOC_SETUP_CORE is invoked unconditionally. If you are not using Automake to build hwloc, this macro is unnecessary (and will actually cause errors because it invoked AM_* macros that will be undefined).</li>
79 </ul>
80 <p><b>NOTE:</b> When using the HWLOC_SETUP_CORE m4 macro, it may be necessary to explicitly invoke AC_CANONICAL_TARGET (which requires config.sub and config.guess) and/or AC_USE_SYSTEM_EXTENSIONS macros early in the configure script (e.g., after AC_INIT but before AM_INIT_AUTOMAKE). See the Autoconf documentation for further information.</p>
81 <p>Also note that hwloc's top-level configure.ac script uses exactly the macros described above to build hwloc in a standalone mode (by default). You may want to examine it for one example of how these macros are used.</p>
52 <h1><a class="anchor" id="topoattrs_distances"></a>
53 Distances</h1>
54 <p>A machine with 4 CPUs may have identical links between every pairs of CPUs, or those CPUs could also only be connected through a ring. In the ring case, accessing the memory of nearby CPUs is slower than local memory, but it is also faster than accessing the memory of CPU on the opposite side of the ring. These deep details cannot be exposed in the hwloc hierarchy, that is why hwloc also exposes distances.</p>
55 <p>Distances are matrices of values between sets of objects, usually latencies or bandwidths. By default, hwloc tries to get a matrix of relative latencies between NUMA nodes when exposed by the hardware.</p>
56 <p>In the aforementioned ring case, the matrix could report 10 for latency between a NUMA node and itself, 20 for nearby nodes, and 30 for nodes that are opposites on the ring. Those are theoretical values exposed by hardware vendors (in the System Locality Distance Information Table (SLIT) in the ACPI) rather than physical latencies. They are mostly meant for comparing node relative distances.</p>
57 <p>Distances structures currently created by hwloc are: </p><dl>
58 <dt>NUMALatency (Linux, Solaris, FreeBSD) </dt>
59 <dd>This is the matrix of theoretical latencies described above. </dd>
60 <dt>XGMIBandwidth (RSMI) </dt>
61 <dd><p class="startdd">This is matrix of unidirectional XGMI bandwidths between AMD GPUs (in MB/s). It contains 0 when there is no direct XGMI link between objects. Values on the diagonal are artificially set to very high so that local access always appears faster than remote access.</p>
62 <p class="interdd">GPUs are identified by RSMI OS devices such as "rsmi0". They may be converted into the corresponding OpenCL or PCI devices using <a class="el" href="a00209.html#gab5df3ad1e8565ea0c2cf06412f6f6233" title="Return an object of a different type with same locality.">hwloc_get_obj_with_same_locality()</a> or the hwloc-annotate tool.</p>
63 <p class="enddd"><a class="el" href="a00217.html#gabcadd041f3072999d68f2d94e38670f7" title="Apply a transformation to a distances structure.">hwloc_distances_transform()</a> or hwloc-annotate may also be used to transform this matrix into something more convenient, for instance by replacing bandwidths with numbers of links between peers. </p>
64 </dd>
65 <dt>NVLinkBandwidth (NVML) </dt>
66 <dd><p class="startdd">This is the matrix of unidirectional NVLink bandwidths between NVIDIA GPUs (in MB/s). It contains 0 when there is no direct NVLink between objects. When there are multiple links, their bandwidth is aggregated. Values on the diagonal are artificially set to very high so that local access always appears faster than remote access.</p>
67 <p class="interdd">On POWER platforms, NVLinks may also connects GPUs to CPUs. On NVIDIA platforms such as DGX-2, a NVSwitch may interconnect GPUs through NVLinks. In these cases, the distances structure is heterogeneous. GPUs always appear first in the matrix (as NVML OS devices such as "nvml0"), and non-GPU objects may appear at the end (Package for POWER processors, PCI device for NVSwitch).</p>
68 <p class="interdd">NVML OS devices may be converted into the corresponding CUDA, OpenCL or PCI devices using <a class="el" href="a00209.html#gab5df3ad1e8565ea0c2cf06412f6f6233" title="Return an object of a different type with same locality.">hwloc_get_obj_with_same_locality()</a> or the hwloc-annotate tool.</p>
69 <p class="interdd"><a class="el" href="a00217.html#gabcadd041f3072999d68f2d94e38670f7" title="Apply a transformation to a distances structure.">hwloc_distances_transform()</a> or hwloc-annotate may also be used to transform this matrix into something more convenient, for instance by removing switches or CPU ports, or by replacing bandwidths with numbers of links between peers.</p>
70 <p class="enddd">When a NVSwitch interconnects GPUs, only links between one GPU and different NVSwitch ports are reported. They may be merged into a single switch port with <a class="el" href="a00217.html#gabcadd041f3072999d68f2d94e38670f7" title="Apply a transformation to a distances structure.">hwloc_distances_transform()</a> or hwloc-annotate. Or a transitive closure may also be applied to report the bandwidth between GPUs across the NVSwitch. </p>
71 </dd>
72 </dl>
73 <p>Users may also specify their own matrices between any set of objects, even if these objects are of different types (e.g. bandwidths between GPUs and CPUs).</p>
74 <p>The entire API is located in <a class="el" href="a00134_source.html">hwloc/distances.h</a>. See also <a class="el" href="a00217.html">Retrieve distances between objects</a>, as well as <a class="el" href="a00218.html">Helpers for consulting distance matrices</a> and <a class="el" href="a00219.html">Add distances between objects</a>.</p>
8275 <p>
83 </div><div class="section" id="embedding_example">
76 </div><div class="section" id="topoattrs_memattrs">
8477 </p>
85 <h1><a class="anchor" id="embedding_example"></a>
86 Example Embedding hwloc</h1>
87 <p>Here's an example of integrating with a larger project named sandbox that already uses Autoconf, Automake, and Libtool to build itself:</p>
88 <pre class="fragment"># First, cd into the sandbox project source tree
89 shell$ cd sandbox
90 shell$ cp -r /somewhere/else/hwloc-&lt;version&gt; my-embedded-hwloc
91 shell$ edit Makefile.am
92 1. Add "-Imy-embedded-hwloc/config" to ACLOCAL_AMFLAGS
93 2. Add "my-embedded-hwloc" to SUBDIRS
94 3. Add "$(HWLOC_EMBEDDED_LDADD)" and "$(HWLOC_EMBEDDED_LIBS)" to
95 sandbox's executable's LDADD line. The former is the name of the
96 Libtool convenience library that hwloc will generate. The latter
97 is any dependent support libraries that may be needed by
98 $(HWLOC_EMBEDDED_LDADD).
99 4. Add "$(HWLOC_EMBEDDED_CFLAGS)" to AM_CFLAGS
100 5. Add "$(HWLOC_EMBEDDED_CPPFLAGS)" to AM_CPPFLAGS
101 shell$ edit configure.ac
102 1. Add "HWLOC_SET_SYMBOL_PREFIX(sandbox_hwloc_)" line
103 2. Add "HWLOC_SETUP_CORE([my-embedded-hwloc], [happy=yes], [happy=no])" line
104 3. Add error checking for happy=no case
105 shell$ edit sandbox.c
106 1. Add #include &lt;hwloc.h&gt;
107 2. Add calls to sandbox_hwloc_init() and other hwloc API functions
108 </pre><p>Now you can bootstrap, configure, build, and run the sandbox as normal &ndash; all calls to "sandbox_hwloc_*" will use the embedded hwloc rather than any system-provided copy of hwloc. </p>
78 <h1><a class="anchor" id="topoattrs_memattrs"></a>
79 Memory Attributes</h1>
80 <p>Machines with heterogeneous memory, for instance high-bandwidth memory (HBM), normal memory (DDR), and/or high-capacity slow memory (such as non-volatile memory DIMMs, NVDIMMs) require applications to allocate buffers in the appropriate target memory depending on performance and capacity needs. Those target nodes may be exposed in the hwloc hierarchy as different memory children but there is a need for performance information to select the appropriate one.</p>
81 <p>hwloc memory attributes are designed to expose memory information such as latency, bandwidth, etc. Users may also specify their own attributes and values.</p>
82 <p>The memory attributes API is located in <a class="el" href="a00137_source.html">hwloc/memattrs.h</a>, see <a class="el" href="a00221.html">Comparing memory node attributes for finding where to allocate on</a> and <a class="el" href="a00222.html">Managing memory attributes</a> for details.</p>
83 <p>
84 </div><div class="section" id="topoattrs_cpukinds">
85 </p>
86 <h1><a class="anchor" id="topoattrs_cpukinds"></a>
87 CPU Kinds</h1>
88 <p>Hybrid CPUs may contain different kinds of cores. The CPU kinds API in <a class="el" href="a00140_source.html">hwloc/cpukinds.h</a> provides a way to list the sets of PUs in each kind and get some optional information about their hardware characteristics and efficiency.</p>
89 <p>If the operating system provides efficiency information (e.g. Windows 10), it is used to rank hwloc CPU kinds by efficiency. Otherwise, hwloc implements several heuristics based on frequencies and core types (see HWLOC_CPUKINDS_RANKING in <a class="el" href="a00394.html">Environment Variables</a>).</p>
90 <p>Attributes include: </p><dl>
91 <dt>FrequencyMaxMHz (Linux) </dt>
92 <dd>The maximal operating frequency of the core, as reported by <code>cpufreq</code> drivers on Linux. </dd>
93 <dt>FrequencyBaseMHz (Linux) </dt>
94 <dd>The base operating frequency of the core, as reported by some <code>cpufreq</code> drivers on Linux (e.g. <code>intel_pstate</code>). </dd>
95 <dt>CoreType (x86, Linux) </dt>
96 <dd>A string describing the kind of core, currently <code>IntelAtom</code> or <code>IntelCore</code>, as reported by the x86 CPUID instruction and future Linux kernels on some Intel processors. </dd>
97 <dt>LinuxCPUType (Linux) </dt>
98 <dd>The Linux-specific CPU type found in sysfs, such as <code>intel_atom_0</code>, as reported by future Linux kernels on some Intel processors. </dd>
99 </dl>
100 <p>See <a class="el" href="a00223.html">Kinds of CPU cores</a> for details. </p>
109101 </div></div><!-- contents -->
110102 </div><!-- PageDoc -->
111103 <!-- start footer part -->
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Frequently Asked Questions</title>
7 <title>Hardware Locality (hwloc): Importing and exporting topologies from/to XML files</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="PageDoc"><div class="header">
4141 <div class="headertitle">
42 <div class="title">Frequently Asked Questions </div> </div>
42 <div class="title">Importing and exporting topologies from/to XML files </div> </div>
4343 </div><!--header-->
4444 <div class="contents">
4545 <div class="textblock"><p>
46 <div class="section" id="faq1">
46 <div class="section">
47 </p>
48 <p>hwloc offers the ability to export topologies to XML files and reload them later. This is for instance useful for loading topologies faster (see <a class="el" href="a00406.html#faq_xml">I do not want hwloc to rediscover my enormous machine topology every time I rerun a process</a>), manipulating other nodes' topology, or avoiding the need for privileged processes (see <a class="el" href="a00406.html#faq_privileged">Does hwloc require privileged access?</a>).</p>
49 <p>Topologies may be exported to XML files thanks to <a class="el" href="a00215.html#ga333f79975b4eeb28a3d8fad3373583ce" title="Export the topology into an XML file.">hwloc_topology_export_xml()</a>, or to a XML memory buffer with <a class="el" href="a00215.html#gad33b7f7c11db10459505a3b1634fd3f1" title="Export the topology into a newly-allocated XML memory buffer.">hwloc_topology_export_xmlbuffer()</a>. The lstopo program can also serve as a XML topology export tool.</p>
50 <p>XML topologies may then be reloaded later with <a class="el" href="a00201.html#ga879439b7ee99407ee911b3ac64e9a25e" title="Enable XML-file based topology.">hwloc_topology_set_xml()</a> and <a class="el" href="a00201.html#ga2745616b65595e1c1e579ecc7e461fa8" title="Enable XML based topology using a memory buffer (instead of a file, as with hwloc_topology_set_xml())...">hwloc_topology_set_xmlbuffer()</a>. The HWLOC_XMLFILE environment variable also tells hwloc to load the topology from the given XML file (see <a class="el" href="a00394.html">Environment Variables</a>).</p>
51 <dl class="section note"><dt>Note</dt><dd>Loading XML topologies disables binding because the loaded topology may not correspond to the physical machine that loads it. This behavior may be reverted by asserting that loaded file really matches the underlying system with the HWLOC_THISSYSTEM environment variable or the <a class="el" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b" title="Assume that the selected backend provides the topology for the system on which we are running.">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a> topology flag.</dd>
52 <dd>
53 The topology flag <a class="el" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea1b66bbd66e900e5c837f71defb32ad89" title="Get the set of allowed resources from the local operating system even if the topology was loaded from...">HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES</a> may be used to load a XML topology that contains the entire machine and restrict it to the part that is actually available to the current process (e.g. when Linux Cgroup/Cpuset are used to restrict the set of resources).</dd>
54 <dd>
55 hwloc also offers the ability to export/import <a class="el" href="a00237.html">Topology differences</a>.</dd>
56 <dd>
57 XML topology files are not localized. They use a dot as a decimal separator. Therefore any exported topology can be reloaded on any other machine without requiring to change the locale.</dd>
58 <dd>
59 XML exports contain all details about the platform. It means that two very similar nodes still have different XML exports (e.g. some serial numbers or MAC addresses are different). If a less precise exporting/importing is required, one may want to look at <a class="el" href="a00401.html">Synthetic topologies</a> instead.</dd></dl>
60 <p>
61 </div><div class="section" id="xml_backends">
4762 </p>
48 <h1><a class="anchor" id="faq1"></a>
49 Concepts</h1>
50 <h2><a class="anchor" id="faq_why"></a>
51 I only need binding, why should I use hwloc ?</h2>
52 <p>hwloc is its portable API that works on a variety of operating systems. It supports binding of threads, processes and memory buffers (see <a class="el" href="a00196.html">CPU binding</a> and <a class="el" href="a00197.html">Memory binding</a>). Even if some features are not supported on some systems, using hwloc is much easier than reimplementing your own portability layer.</p>
53 <p>Moreover, hwloc provides knowledge of cores and hardware threads. It offers easy ways to bind tasks to individual hardware threads, or to entire multithreaded cores, etc. See <a class="el" href="a00400.html#faq_smt">How may I ignore symmetric multithreading, hyper-threading, etc. in hwloc?</a>. Most alternative software for binding do not even know whether each core is single-threaded, multithreaded or hyper-threaded. They would bind to individual threads without any way to know whether multiple tasks are in the same physical core.</p>
54 <p>However, using hwloc comes with an overhead since a topology must be loaded before gathering information and binding tasks or memory. Fortunately this overhead may be significantly reduced by filtering non-interesting information out of the topology. For instance the following code builds a topology that only contains Cores (explicitly filtered-in below), hardware threads (PUs, cannot be filtered-out), NUMA nodes (cannot be filtered-out), and the root object (usually a Machine; the root cannot be removed without breaking the tree).</p>
55 <pre class="fragment">hwloc_topology_t topology;
56 hwloc_topology_init(&amp;topology);
57 /* filter everything out */
58 hwloc_topology_set_all_types_filter(topology, HWLOC_TYPE_FILTER_KEEP_NONE);
59 /* filter Cores back in */
60 hwloc_topology_set_type_filter(topology, HWLOC_OBJ_CORE, HWLOC_TYPE_FILTER_KEEP_ALL);
61 hwloc_topology_load(topology);
62 </pre><p>However, one should remember that filtering such objects out removes locality information from the hwloc tree. For instance, we do not know anymore which PU is close to which NUMA node. This would be useful to applications that explicitly want to place specific memory buffers close to specific tasks. Those applications just need to tell hwloc to keep Group objects that bring structure information: </p><pre class="fragment">hwloc_topology_set_type_filter(topology, HWLOC_OBJ_GROUP, HWLOC_TYPE_FILTER_KEEP_STRUCTURE);
63 </pre><p>Note that the default configuration is to keep all objects enabled, except I/Os and instruction caches.</p>
64 <h2><a class="anchor" id="faq_indexes"></a>
65 Should I use logical or physical/OS indexes? and how?</h2>
66 <p>One of the original reasons why hwloc was created is that <b>physical/OS indexes</b> (<code>obj-&gt;os_index</code>) are often crazy and unpredictable: processors numbers are usually non-contiguous (processors 0 and 1 are not physically close), they vary from one machine to another, and may even change after a BIOS or system update. This numbers make task placement hardly portable. Moreover some objects have no physical/OS numbers (caches), and some objects have non-unique numbers (core numbers are only unique within a socket). Physical/OS indexes are only guaranteed to exist and be unique for PU and NUMA nodes.</p>
67 <p>hwloc therefore introduces <b>logical indexes</b> (<code>obj-&gt;logical_index</code>) which are portable, contiguous and logically ordered (based on the resource organization in the locality tree). In general, one should only use logical indexes and just let hwloc do the internal conversion when really needed (when talking to the OS and hardware).</p>
68 <p>hwloc developers recommends that users do not use physical/OS indexes unless they really know what they are doing. The main reason for still using physical/OS indexes is when interacting with non-hwloc tools such as numactl or taskset, or when reading hardware information from raw sources such as /proc/cpuinfo.</p>
69 <p>lstopo options <code>-l</code> and <code>-p</code> may be used to switch between logical indexes (prefixed with <code>L#</code>) and physical/OS indexes (<code>P#</code>). Converting one into the other may also be achieved with hwloc-calc which may manipulate either logical or physical indexes as input or output. See also <a class="el" href="a00387.html#cli_hwloc_calc">hwloc-calc</a>.</p>
70 <pre class="fragment"># Convert PU with physical number 3 into logical number
71 $ hwloc-calc -I pu --physical-input --logical-output pu:3
72 5
73
74 # Convert a set of NUMA nodes from logical to physical
75 # (beware that the output order may not match the input order)
76 $ hwloc-calc -I numa --logical-input --physical-output numa:2-3 numa:7
77 0,2,5
78 </pre><h2><a class="anchor" id="faq_structural"></a>
79 hwloc is only a structural model, it ignores performance models, memory bandwidth, etc.?</h2>
80 <p>hwloc is indeed designed to provide applications with a structural model of the platform. This is an orthogonal approach to describing the machine with performance models, for instance using memory bandwidth or latencies measured by benchmarks. We believe that both approaches are important for helping application make the most of the hardware.</p>
81 <p>For instance, on a dual-processor host with four cores each, hwloc clearly shows which four cores are together. Latencies between all pairs of cores of the same processor are likely identical, and also likely lower than the latency between cores of different processors. However, the structural model cannot guarantee such implementation details. On the other side, performance models would reveal such details without always clearly identifying which cores are in the same processor.</p>
82 <p>The focus of hwloc is mainly of the structural modeling side. However, hwloc lets user adds performance information to the topology through distances (see <a class="el" href="a00393.html#topoattrs_distances">Distances</a>), memory attributes (see <a class="el" href="a00393.html#topoattrs_memattrs">Memory Attributes</a>) or even custom annotations (see <a class="el" href="a00400.html#faq_annotate">How do I annotate the topology with private notes?</a>). hwloc may also use such distance information for grouping objects together (see <a class="el" href="a00400.html#faq_onedim">hwloc only has a one-dimensional view of the architecture, it ignores distances?</a> and <a class="el" href="a00400.html#faq_groups">What are these Group objects in my topology?</a>).</p>
83 <h2><a class="anchor" id="faq_onedim"></a>
84 hwloc only has a one-dimensional view of the architecture, it ignores distances?</h2>
85 <p>hwloc places all objects in a tree. Each level is a one-dimensional view of a set of similar objects. All children of the same object (siblings) are assumed to be equally interconnected (same distance between any of them), while the distance between children of different objects (cousins) is supposed to be larger.</p>
86 <p>Modern machines exhibit complex hardware interconnects, so this tree may miss some information about the actual physical distances between objects. The hwloc topology may therefore be annotated with distance information that may be used to build a more realistic representation (multi-dimensional) of each level. For instance, there can be a distance matrix that representing the latencies between any pair of NUMA nodes if the BIOS and/or operating system reports them.</p>
87 <p>For more information about the hwloc distances, see <a class="el" href="a00393.html#topoattrs_distances">Distances</a>.</p>
88 <h2><a class="anchor" id="faq_groups"></a>
89 What are these Group objects in my topology?</h2>
90 <p>hwloc comes with a set of predefined object types (Core, Package, NUMA node, Caches) that match the vast majority of hardware platforms. The <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a5269ef95be72f88465559d35c9b7ad56" title="Group objects. Objects which do not fit in the above but are detected by hwloc and are useful to take...">HWLOC_OBJ_GROUP</a> type was designed for cases where this set is not sufficient. Groups may be used anywhere to add more structure information to the topology, for instance to show that 2 out of 4 NUMA nodes are actually closer than the others. When applicable, the <code>subtype</code> field describes why a Group was actually added (see also <a class="el" href="a00392.html#attributes_normal">Normal attributes</a>).</p>
91 <p>hwloc currently uses Groups for the following reasons: </p><ul>
92 <li>
93 NUMA parents when memory locality does not match any existing object. </li>
94 <li>
95 I/O parents when I/O locality does not match any existing object. </li>
96 <li>
97 Distance-based groups made of close objects. </li>
98 <li>
99 AMD Bulldozer dual-core compute units (<code>subtype</code> is <code>ComputeUnit</code>, in the x86 backend), but these objects are usually merged with the L2 caches. </li>
100 <li>
101 Intel Extended Topology Enumeration levels (in the x86 backend). </li>
102 <li>
103 Windows processor groups (unless they contain a single NUMA node, or a single Package, etc.). </li>
104 <li>
105 IBM S/390 "Books" on Linux (<code>subtype</code> is <code>Book</code>). </li>
106 <li>
107 AIX unknown hierarchy levels. </li>
108 </ul>
109 <p>hwloc Groups are only kept if no other object has the same locality information. It means that a Group containing a single child is merged into that child. And a Group is merged into its parent if it is its only child. For instance a Windows processor group containing a single NUMA node would be merged with that NUMA node since it already contains the relevant hierarchy information.</p>
110 <p>When inserting a custom Group with hwloc_hwloc_topology_insert_group_object(), this merging may be disabled by setting its <code>dont_merge</code> attribute.</p>
111 <h2><a class="anchor" id="faq_asymmetric"></a>
112 What happens if my topology is asymmetric?</h2>
113 <p>hwloc supports asymmetric topologies even if most platforms are usually symmetric. For example, there could be different types of processors in a single machine, each with different numbers of cores, symmetric multithreading, or levels of caches.</p>
114 <p>In practice, asymmetric topologies mostly appear when intermediate groups are added for I/O affinity: on a 4-package machine, an I/O bus may be connected to 2 packages. These packages are below an additional Group object, while the other packages are not (see also <a class="el" href="a00400.html#faq_groups">What are these Group objects in my topology?</a>).</p>
115 <p>To understand how hwloc manages such cases, one should first remember the meaning of levels and cousin objects. All objects of the same type are gathered as horizontal levels with a given depth. They are also connected through the cousin pointers of the <a class="el" href="a00244.html" title="Structure of a topology object.">hwloc_obj</a> structure. Object attribute (cache depth and type, group depth) are also taken in account when gathering objects as horizontal levels. To be clear: there will be one level for L1i caches, another level for L1d caches, another one for L2, etc.</p>
116 <p>If the topology is asymmetric (e.g., if a group is missing above some processors), a given horizontal level will still exist if there exist any objects of that type. However, some branches of the overall tree may not have an object located in that horizontal level. Note that this specific hole within one horizontal level does not imply anything for other levels. All objects of the same type are gathered in horizontal levels even if their parents or children have different depths and types.</p>
117 <p>See the diagram in <a class="el" href="a00386.html">Terms and Definitions</a> for a graphical representation of such topologies.</p>
118 <p>Moreover, it is important to understand that a same parent object may have children of different types (and therefore, different depths). <b>These children are therefore siblings (because they have the same parent), but they are <em>not</em> cousins (because they do not belong to the same horizontal level).</b></p>
119 <h2><a class="anchor" id="faq_nosmt"></a>
120 What happens to my topology if I disable symmetric multithreading, hyper-threading, etc. in the system?</h2>
121 <p>hwloc creates one PU (processing unit) object per hardware thread. If your machine supports symmetric multithreading, for instance Hyper-Threading, each Core object may contain multiple PU objects: </p><pre class="fragment">$ lstopo -
122 ...
123 Core L#0
124 PU L#0 (P#0)
125 PU L#1 (P#2)
126 Core L#1
127 PU L#2 (P#1)
128 PU L#3 (P#3)
129 </pre><p>x86 machines usually offer the ability to disable hyper-threading in the BIOS. Or it can be disabled on the Linux kernel command-line at boot time, or later by writing in sysfs virtual files.</p>
130 <p>If you do so, the hwloc topology structure does not significantly change, but some PU objects will not appear anymore. No level will disappear, you will see the same number of Core objects, but each of them will contain a single PU now. The PU level does not disappear either (remember that hwloc topologies always contain a PU level at the bottom of the topology) even if there is a single PU object per Core parent. </p><pre class="fragment">$ lstopo -
131 ...
132 Core L#0
133 PU L#0 (P#0)
134 Core L#1
135 PU L#1 (P#1)
136 </pre><h2><a class="anchor" id="faq_smt"></a>
137 How may I ignore symmetric multithreading, hyper-threading, etc. in hwloc?</h2>
138 <p>First, see <a class="el" href="a00400.html#faq_nosmt">What happens to my topology if I disable symmetric multithreading, hyper-threading, etc. in the system?</a> for more information about multithreading.</p>
139 <p>If you need to ignore symmetric multithreading in software, you should likely manipulate hwloc Core objects directly: </p><pre class="fragment">/* get the number of cores */
140 unsigned nbcores = hwloc_get_nbobjs_by_type(topology, HWLOC_OBJ_CORE);
141 ...
142 /* get the third core below the first package */
143 hwloc_obj_t package, core;
144 package = hwloc_get_obj_by_type(topology, HWLOC_OBJ_PACKAGE, 0);
145 core = hwloc_get_obj_inside_cpuset_by_type(topology, package-&gt;cpuset,
146 HWLOC_OBJ_CORE, 2);
147 </pre><p>Whenever you want to bind a process or thread to a core, make sure you singlify its cpuset first, so that the task is actually bound to a single thread within this core (to avoid useless migrations). </p><pre class="fragment">/* bind on the second core */
148 hwloc_obj_t core = hwloc_get_obj_by_type(topology, HWLOC_OBJ_CORE, 1);
149 hwloc_cpuset_t set = hwloc_bitmap_dup(core-&gt;cpuset);
150 hwloc_bitmap_singlify(set);
151 hwloc_set_cpubind(topology, set, 0);
152 hwloc_bitmap_free(set);
153 </pre><p>With hwloc-calc or hwloc-bind command-line tools, you may specify that you only want a single-thread within each core by asking for their first PU object: </p><pre class="fragment">$ hwloc-calc core:4-7
154 0x0000ff00
155 $ hwloc-calc core:4-7.pu:0
156 0x00005500
157 </pre><p>When binding a process on the command-line, you may either specify the exact thread that you want to use, or ask hwloc-bind to singlify the cpuset before binding </p><pre class="fragment">$ hwloc-bind core:3.pu:0 -- echo "hello from first thread on core #3"
158 hello from first thread on core #3
159 ...
160 $ hwloc-bind core:3 --single -- echo "hello from a single thread on core #3"
161 hello from a single thread on core #3
162 </pre><p>
163 </div><div class="section" id="faq2">
63 <h1><a class="anchor" id="xml_backends"></a>
64 libxml2 and minimalistic XML backends</h1>
65 <p>hwloc offers two backends for importing/exporting XML.</p>
66 <p>First, it can use the libxml2 library for importing/exporting XML files. It features full XML support, for instance when those files have to be manipulated by non-hwloc software (e.g. a XSLT parser). The libxml2 backend is enabled by default if libxml2 development headers are available (the relevant development package is usually <code>libxml2-devel</code> or <code>libxml2-dev</code>).</p>
67 <p>If libxml2 is not available at configure time, or if <code>--disable-libxml2</code> is passed, hwloc falls back to a custom backend. Contrary to the aforementioned full XML backend with libxml2, this minimalistic XML backend cannot be guaranteed to work with external programs. It should only be assumed to be compatible with the same hwloc release (even if using the libxml2 backend). Its advantage is, however, to always be available without requiring any external dependency.</p>
68 <p>If libxml2 is available but the core hwloc library should not directly depend on it, the libxml2 support may be built as a dynamicall-loaded plugin. One should pass <code>--enable-plugins</code> to enable plugin support (when supported) and build as plugins all component that support it. Or pass <code>--enable-plugins=xml_libxml</code> to only build this libxml2 support as a plugin.</p>
69 <p>
70 </div><div class="section" id="xml_errors">
16471 </p>
165 <h1><a class="anchor" id="faq2"></a>
166 Advanced</h1>
167 <h2><a class="anchor" id="faq_xml"></a>
168 I do not want hwloc to rediscover my enormous machine topology every time I rerun a process</h2>
169 <p>Although the topology discovery is not expensive on common machines, its overhead may become significant when multiple processes repeat the discovery on large machines (for instance when starting one process per core in a parallel application). The machine topology usually does not vary much, except if some cores are stopped/restarted or if the administrator restrictions are modified. Thus rediscovering the whole topology again and again may look useless.</p>
170 <p>For this purpose, hwloc offers XML import/export and shared memory features.</p>
171 <p>XML lets you save the discovered topology to a file (for instance with the lstopo program) and reload it later by setting the HWLOC_XMLFILE environment variable. The HWLOC_THISSYSTEM environment variable should also be set to 1 to assert that loaded file is really the underlying system.</p>
172 <p>Loading a XML topology is usually much faster than querying multiple files or calling multiple functions of the operating system. It is also possible to manipulate such XML files with the C programming interface, and the import/export may also be directed to memory buffer (that may for instance be transmitted between applications through a package). See also <a class="el" href="a00394.html">Importing and exporting topologies from/to XML files</a>.</p>
173 <dl class="section note"><dt>Note</dt><dd>The environment variable HWLOC_THISSYSTEM_ALLOWED_RESOURCES may be used to load a XML topology that contains the entire machine and restrict it to the part that is actually available to the current process (e.g. when Linux Cgroup/Cpuset are used to restrict the set of resources). See <a class="el" href="a00388.html">Environment Variables</a>.</dd></dl>
174 <p>Shared-memory topologies consist in one process exposing its topology in a shared-memory buffer so that other processes (running on the same machine) may use it directly. This has the advantage of reducing the memory footprint since a single topology is stored in physical memory for multiple processes. However, it requires all processes to map this shared-memory buffer at the same virtual address, which may be difficult in some cases. This API is described in <a class="el" href="a00232.html">Sharing topologies between processes</a>.</p>
175 <h2><a class="anchor" id="faq_multitopo"></a>
176 How many topologies may I use in my program?</h2>
177 <p>hwloc lets you manipulate multiple topologies at the same time. However, these topologies consume memory and system resources (for instance file descriptors) until they are destroyed. It is therefore discouraged to open the same topology multiple times.</p>
178 <p>Sharing a single topology between threads is easy (see <a class="el" href="a00397.html">Thread Safety</a>) since the vast majority of accesses are read-only.</p>
179 <p>If multiple topologies of different (but similar) nodes are needed in your program, have a look at <a class="el" href="a00400.html#faq_diff">How to avoid memory waste when manipulating multiple similar topologies?</a>.</p>
180 <h2><a class="anchor" id="faq_diff"></a>
181 How to avoid memory waste when manipulating multiple similar topologies?</h2>
182 <p>hwloc does not share information between topologies. If multiple similar topologies are loaded in memory, for instance the topologies of different identical nodes of a cluster, lots of information will be duplicated.</p>
183 <p><a class="el" href="a00176_source.html">hwloc/diff.h</a> (see also <a class="el" href="a00231.html">Topology differences</a>) offers the ability to compute topology differences, apply or unapply them, or export/import to/from XML. However, this feature is limited to basic differences such as attribute changes. It does not support complex modifications such as adding or removing some objects.</p>
184 <h2><a class="anchor" id="faq_annotate"></a>
185 How do I annotate the topology with private notes?</h2>
186 <p>Each hwloc object contains a <code>userdata</code> field that may be used by applications to store private pointers. This field is only valid during the lifetime of these container object and topology. It becomes invalid as soon the topology is destroyed, or as soon as the object disappears, for instance when restricting the topology. The userdata field is not exported/imported to/from XML by default since hwloc does not know what it contains. This behavior may be changed by specifying application-specific callbacks with <code><a class="el" href="a00212.html#ga9d6ff0f7a8dd45be9aa8575ef31978cc" title="Set the application-specific callback for exporting object userdata.">hwloc_topology_set_userdata_export_callback()</a></code> and <code><a class="el" href="a00212.html#ga5ac6917ea7289955fb1ffda4353af9b0" title="Set the application-specific callback for importing userdata.">hwloc_topology_set_userdata_import_callback()</a></code>.</p>
187 <p>Each object may also contain some <em>info</em> attributes (key name and value) that are setup by hwloc during discovery and that may be extended by the user with <code><a class="el" href="a00195.html#gace7654bb8a9002caae1a4b8a59e7452e" title="Add the given info name and value pair to the given object.">hwloc_obj_add_info()</a></code> (see also <a class="el" href="a00392.html">Object attributes</a>). Contrary to the <code>userdata</code> field which is unique, multiple info attributes may exist for each object, even with the same name. These attributes are always exported to XML. However, only character strings may be used as key names and values.</p>
188 <p>It is also possible to insert Misc objects with a custom name anywhere as a leaf of the topology (see <a class="el" href="a00391.html">Miscellaneous objects</a>). And Misc objects may have their own userdata and info attributes just like any other object.</p>
189 <p>The hwloc-annotate command-line tool may be used for adding Misc objects and info attributes.</p>
190 <p>There is also a topology-specific userdata pointer that can be used to recognize different topologies by storing a custom pointer. It may be manipulated with <code><a class="el" href="a00199.html#ga2cc7b7b155cba58dda203e54f1637b9c" title="Set the topology-specific userdata pointer.">hwloc_topology_set_userdata()</a></code> and <code><a class="el" href="a00199.html#ga91f992f8d6c4905b2d3c4f43e509c2a3" title="Retrieve the topology-specific userdata pointer.">hwloc_topology_get_userdata()</a></code>.</p>
191 <p>
192 </div><div class="section" id="faq3">
193 </p>
194 <h1><a class="anchor" id="faq3"></a>
195 Caveats</h1>
196 <h2><a class="anchor" id="faq_slow_lstopo"></a>
197 Why is hwloc slow?</h2>
198 <p>Building a hwloc topology on a large machine may be slow because the discovery of hundreds of hardware cores or threads takes time (especially when reading thousands of sysfs files on Linux). Ignoring some objects (for instance caches) that aren't useful to the current application may improve this overhead (see <a class="el" href="a00400.html#faq_why">I only need binding, why should I use hwloc ?</a>). One should also consider using XML (see <a class="el" href="a00400.html#faq_xml">I do not want hwloc to rediscover my enormous machine topology every time I rerun a process</a>) to work around such issues.</p>
199 <p>Additionally, lstopo enables most hwloc objects and discovery flags by default so that the output topology is as precise as possible (while hwloc disables many of them by default). This includes I/O device discovery through PCI libraries as well as external libraries such as NVML. To speed up lstopo, you may disable such features with command-line options such as <code>--no-io</code>.</p>
200 <p>When NVIDIA GPU probing is enabled with CUDA or NVML, one should make sure that the <em>Persistent</em> mode is enabled (with <code>nvidia-smi -pm 1</code>) to avoid significant GPU initialization overhead.</p>
201 <p>When AMD GPU discovery is enabled with OpenCL and hwloc is used remotely over ssh, some spurious round-trips on the network may significantly increase the discovery time. Forcing the <code>DISPLAY</code> environment variable to the remote X server display (usually <code>:0</code>) instead of only setting the <code>COMPUTE</code> variable may avoid this.</p>
202 <p>Also remember that these components may be disabled at build-time with configure flags such as <code>--disable-opencl</code>, <code>--disable-cuda</code> or <code>--disable-nvml</code>, and at runtime with the environment variable <code>HWLOC_COMPONENTS=-opencl,-cuda,-nvml</code> or with <a class="el" href="a00198.html#ga9ad41adf418cee1c0ee32ba9bd4a3d36" title="Prevent a discovery component from being used for a topology.">hwloc_topology_set_components()</a>.</p>
203 <h2><a class="anchor" id="faq_privileged"></a>
204 Does hwloc require privileged access?</h2>
205 <p>hwloc discovers the topology by querying the operating system. Some minor features may require privileged access to the operation system. For instance memory module discovery on Linux is reserved to root, and the entire PCI discovery on Solaris and BSDs requires access to some special files that are usually restricted to root (/dev/pci* or /devices/pci*).</p>
206 <p>To workaround this limitation, it is recommended to export the topology as a XML file generated by the administrator (with the lstopo program) and make it available to all users (see <a class="el" href="a00394.html">Importing and exporting topologies from/to XML files</a>). It will offer all discovery information to any application without requiring any privileged access anymore. Only the necessary hardware characteristics will be exported, no sensitive information will be disclosed through this XML export.</p>
207 <p>This XML-based model also has the advantage of speeding up the discovery because reading a XML topology is usually much faster than querying the operating system again.</p>
208 <p>The utility <code>hwloc-dump-hwdata</code> is also involved in gathering privileged information at boot time and making it available to non-privileged users (note that this may require a specific SELinux MLS policy module). However, it only applies to Intel Xeon Phi processors for now (see <a class="el" href="a00400.html#faq_knl_dump">Why do I need hwloc-dump-hwdata for memory on Intel Xeon Phi processor?</a>). See also <code>HWLOC_DUMPED_HWDATA_DIR</code> in <a class="el" href="a00388.html">Environment Variables</a> for details about the location of dumped files.</p>
209 <h2><a class="anchor" id="faq_os_error"></a>
210 What should I do when hwloc reports "operating system" warnings?</h2>
211 <p>When the operating system reports invalid locality information (because of either software or hardware bugs), hwloc may fail to insert some objects in the topology because they cannot fit in the already built tree of resources. If so, hwloc will report a warning like the following. The object causing this error is ignored, the discovery continues but the resulting topology will miss some objects and may be asymmetric (see also <a class="el" href="a00400.html#faq_asymmetric">What happens if my topology is asymmetric?</a>).</p>
212 <pre class="fragment">****************************************************************************
213 * hwloc received invalid information from the operating system.
214 *
215 * L3 (cpuset 0x000003f0) intersects with NUMANode (P#0 cpuset 0x0000003f) without inclusion!
216 * Error occurred in topology.c line 940
217 *
218 * Please report this error message to the hwloc user's mailing list,
219 * along with the files generated by the hwloc-gather-topology script.
220 *
221 * hwloc will now ignore this invalid topology information and continue.
222 ****************************************************************************
223 </pre><p>These errors are common on large AMD platforms because of BIOS and/or Linux kernel bugs causing invalid L3 cache information. In the above example, the hardware reports a L3 cache that is shared by 2 cores in the first NUMA node and 4 cores in the second NUMA node. That's wrong, it should actually be shared by all 6 cores in a single NUMA node. The resulting topology will miss some L3 caches.</p>
224 <p>If your application does not care about cache sharing, or if you do not plan to request cache-aware binding in your process launcher, you may likely ignore this error (and hide it by setting HWLOC_HIDE_ERRORS=1 in your environment).</p>
225 <p>Some platforms report similar warnings about conflicting Packages and NUMANodes.</p>
226 <p>On x86 hosts, passing <code>HWLOC_COMPONENTS=x86</code> in the environment may workaround some of these issues by switching to a different way to discover the topology.</p>
227 <p>Upgrading the BIOS and/or the operating system may help. Otherwise, as explained in the message, reporting this issue to the hwloc developers (by sending the tarball that is generated by the hwloc-gather-topology script on this platform) is a good way to make sure that this is a software (operating system) or hardware bug (BIOS, etc).</p>
228 <p>See also <a class="el" href="index.html#bugs">Questions and Bugs</a>. Opening an issue on GitHub automatically displays hints on what information you should provide when reporting such bugs.</p>
229 <h2><a class="anchor" id="faq_valgrind"></a>
230 Why does Valgrind complain about hwloc memory leaks?</h2>
231 <p>If you are debugging your application with Valgrind, you want to avoid memory leak reports that are caused by hwloc and not by your program.</p>
232 <p>hwloc itself is often checked with Valgrind to make sure it does not leak memory. However, some global variables in hwloc dependencies are never freed. For instance libz allocates its global state once at startup and never frees it so that it may be reused later. Some libxml2 global state is also never freed because hwloc does not know whether it can safely ask libxml2 to free it (the application may also be using libxml2 outside of hwloc).</p>
233 <p>These unfreed variables cause leak reports in Valgrind. hwloc installs a Valgrind <em>suppressions</em> file to hide them. You should pass the following command-line option to Valgrind to use it: </p><pre class="fragment"> --suppressions=/path/to/hwloc-valgrind.supp
234 </pre><p>
235 </div><div class="section" id="faq4">
236 </p>
237 <h1><a class="anchor" id="faq4"></a>
238 Platform-specific</h1>
239 <h2><a class="anchor" id="faq_knl_numa"></a>
240 How do I find the local MCDRAM NUMA node on Intel Xeon Phi processor?</h2>
241 <p>Intel Xeon Phi processors introduced a new memory architecture by possibly having two distinct local memories: some normal memory (DDR) and some high-bandwidth on-package memory (MCDRAM). Processors can be configured in various clustering modes to have up to 4 <em>Clusters</em>. Moreover, each <em>Cluster</em> (quarter, half or whole processor) of the processor may have its own local parts of the DDR and of the MCDRAM. This memory and clustering configuration may be probed by looking at MemoryMode and ClusterMode attributes, see <a class="el" href="a00392.html#attributes_info_platform">Hardware Platform Information</a> and doc/examples/get-knl-modes.c in the source directory.</p>
242 <p>Starting with version 2.0, hwloc properly exposes this memory configuration. DDR and MCDRAM are attached as two memory children of the same parent, DDR first, and MCDRAM second if any. Depending on the processor configuration, that parent may be a Package, a Cache, or a Group object of type <code>Cluster</code>.</p>
243 <p>Hence cores may have one or two local NUMA nodes, listed by the core nodeset. An application may allocate local memory from a core by using that nodeset. The operating system will actually allocate from the DDR when possible, or fallback to the MCDRAM.</p>
244 <p>To allocate specifically on one of these memories, one should walk up the parent pointers until finding an object with some memory children. Looking at these memory children will give the DDR first, then the MCDRAM if any. Their nodeset may then be used for allocating or binding memory buffers.</p>
245 <p>One may also traverse the list of NUMA nodes until finding some whose cpuset matches the target core or PUs. The MCDRAM NUMA nodes may be identified thanks to the <code>subtype</code> field which is set to <code>MCDRAM</code>.</p>
246 <p>Command-line tools such as <code>hwloc-bind</code> may bind memory on the MCDRAM by using the <em>hbm</em> keyword. For instance, to bind on the first MCDRAM NUMA node:</p>
247 <pre class="fragment">$ hwloc-bind --membind --hbm numa:0 -- myprogram
248 $ hwloc-bind --membind numa:0 -- myprogram
249 </pre><h2><a class="anchor" id="faq_knl_dump"></a>
250 Why do I need hwloc-dump-hwdata for memory on Intel Xeon Phi processor?</h2>
251 <p>Intel Xeon Phi processors may use the on-package memory (MCDRAM) as either memory or a memory-side cache (reported as a L3 cache by hwloc by default, see <code>HWLOC_KNL_MSCACHE_L3</code> in <a class="el" href="a00388.html">Environment Variables</a>). There are also several clustering modes that significantly affect the memory organization (see <a class="el" href="a00400.html#faq_knl_numa">How do I find the local MCDRAM NUMA node on Intel Xeon Phi processor?</a> for more information about these modes). Details about these are currently only available to privileged users. Without them, hwloc relies on a heuristic for guessing the modes.</p>
252 <p>The hwloc-dump-hwdata utility may be used to dump this privileged binary information into human-readable and world-accessible files that the hwloc library will later load. The utility should usually run as root once during boot, in order to update dumped information (stored under /var/run/hwloc by default) in case the MCDRAM or clustering configuration changed between reboots.</p>
253 <p>When SELinux MLS policy is enabled, a specific hwloc policy module may be required so that all users get access to the dumped files (in /var/run/hwloc by default). One may use hwloc policy files from the SELinux Reference Policy at <a href="https://github.com/TresysTechnology/refpolicy-contrib">https://github.com/TresysTechnology/refpolicy-contrib</a> (see also the documentation at <a href="https://github.com/TresysTechnology/refpolicy/wiki/GettingStarted">https://github.com/TresysTechnology/refpolicy/wiki/GettingStarted</a>).</p>
254 <p>hwloc-dump-hwdata requires <code>dmi-sysfs</code> kernel module loaded.</p>
255 <p>The utility is currently unneeded on platforms without Intel Xeon Phi processors.</p>
256 <p>See <code>HWLOC_DUMPED_HWDATA_DIR</code> in <a class="el" href="a00388.html">Environment Variables</a> for details about the location of dumped files.</p>
257 <h2><a class="anchor" id="faq_bgq"></a>
258 How do I build hwloc for BlueGene/Q?</h2>
259 <p>IBM BlueGene/Q machines run a standard Linux on the login/frontend nodes and a custom CNK (<em>Compute Node Kernel</em>) on the compute nodes.</p>
260 <p>To discover the topology of a login/frontend node, hwloc should be configured as usual, without any BlueGene/Q-specific option.</p>
261 <p>However, one would likely rather discover the topology of the compute nodes where parallel jobs are actually running. If so, hwloc must be cross-compiled with the following configuration line: </p><pre class="fragment">./configure --host=powerpc64-bgq-linux --disable-shared --enable-static \
262 CPPFLAGS='-I/bgsys/drivers/ppcfloor -I/bgsys/drivers/ppcfloor/spi/include/kernel/cnk/'
263 </pre><p>CPPFLAGS may have to be updated if your platform headers are installed in a different directory.</p>
264 <h2><a class="anchor" id="faq_windows"></a>
265 How do I build hwloc for Windows?</h2>
266 <p>hwloc releases are available as pre-built ZIPs for Windows on both 32bits and 64bits x86 platforms. They are built using MSYS2 and MinGW on a Windows host. Such an environment allows using the Unix-like <code>configure</code>, <code>make</code> and <code>make install</code> steps without having to tweak too many variables or options. One may look at <code>contrib/ci.inria.fr/job-3-mingw.sh</code> in the hwloc repository for an example used for nightly testing.</p>
267 <p>hwloc releases also contain a basic Microsoft Visual Studio solution under <code>contrib/windows/</code>.</p>
268 <h2><a class="anchor" id="faq_netbsd_bind"></a>
269 How to get useful topology information on NetBSD?</h2>
270 <p>The NetBSD (and FreeBSD) backend uses x86-specific topology discovery (through the x86 component). This implementation requires CPU binding so as to query topology information from each individual processor. This means that hwloc cannot find any useful topology information unless user-level process binding is allowed by the NetBSD kernel. The <code>security.models.extensions.user_set_cpu_affinity</code> sysctl variable must be set to 1 to do so. Otherwise, only the number of processors will be detected.</p>
271 <h2><a class="anchor" id="faq_aix_bind"></a>
272 Why does binding fail on AIX?</h2>
273 <p>The AIX operating system requires specific user capabilities for attaching processes to resource sets (CAP_NUMA_ATTACH). Otherwise functions such as <a class="el" href="a00196.html#ga80bc07473a8edf840cae17bd7ec21d48" title="Bind current process or thread on cpus given in physical bitmap set.">hwloc_set_cpubind()</a> fail (return -1 with errno set to EPERM).</p>
274 <p>This capability must also be inherited (through the additional CAP_PROPAGATE capability) if you plan to bind a process before forking another process, for instance with <code>hwloc-bind</code>.</p>
275 <p>These capabilities may be given by the administrator with: </p><pre class="fragment">chuser "capabilities=CAP_PROPAGATE,CAP_NUMA_ATTACH" &lt;username&gt;
276 </pre><p>
277 </div><div class="section" id="faq5">
278 </p>
279 <h1><a class="anchor" id="faq5"></a>
280 Compatibility between hwloc versions</h1>
281 <h2><a class="anchor" id="faq_version_api"></a>
282 How do I handle API changes?</h2>
283 <p>The hwloc interface is extended with every new major release. Any application using the hwloc API should be prepared to check at compile-time whether some features are available in the currently installed hwloc distribution.</p>
284 <p>For instance, to check whether the hwloc version is at least 2.0, you should use: </p><pre class="fragment">#include &lt;hwloc.h&gt;
285 #if HWLOC_API_VERSION &gt;= 0x00020000
286 ...
287 #endif
288 </pre><p>To check for the API of release X.Y.Z at build time, you may compare <a class="el" href="a00188.html#ga8f4dfb8eef138af55dd1a0fa802e5476" title="Indicate at build time which hwloc API version is being used.">HWLOC_API_VERSION</a> with <code>(X&lt;&lt;16)+(Y&lt;&lt;8)+Z</code>.</p>
289 <p>For supporting older releases that do not have <code>HWLOC_OBJ_NUMANODE</code> and <code>HWLOC_OBJ_PACKAGE</code> yet, you may use:</p>
290 <pre class="fragment">#include &lt;hwloc.h&gt;
291 #if HWLOC_API_VERSION &lt; 0x00010b00
292 #define HWLOC_OBJ_NUMANODE HWLOC_OBJ_NODE
293 #define HWLOC_OBJ_PACKAGE HWLOC_OBJ_SOCKET
294 #endif
295 </pre><p>Once a program is built against a hwloc library, it may also dynamically link with compatible libraries from other hwloc releases. The version of that runtime library may be queried with <a class="el" href="a00188.html#ga9c0b50c98add1adf57ed1ce85bb5190d" title="Indicate at runtime which hwloc API version was used at build time.">hwloc_get_api_version()</a>. See <a class="el" href="a00400.html#faq_version_abi">How do I handle ABI breaks?</a> for using this function for testing ABI compatibility.</p>
296 <h2><a class="anchor" id="faq_version"></a>
297 What is the difference between API and library version numbers?</h2>
298 <p><a class="el" href="a00188.html#ga8f4dfb8eef138af55dd1a0fa802e5476" title="Indicate at build time which hwloc API version is being used.">HWLOC_API_VERSION</a> is the version of the API. It changes when functions are added, modified, etc. However it does not necessarily change from one release to another. For instance, two releases of the same series (e.g. 2.0.3 and 2.0.4) usually have the same <a class="el" href="a00188.html#ga8f4dfb8eef138af55dd1a0fa802e5476" title="Indicate at build time which hwloc API version is being used.">HWLOC_API_VERSION</a> (<code>0x00020000</code>). However their HWLOC_VERSION strings are different (<code>"2.0.3"</code> and <code>"2.0.4"</code> respectively).</p>
299 <h2><a class="anchor" id="faq_version_abi"></a>
300 How do I handle ABI breaks?</h2>
301 <p>The hwloc interface was deeply modified in release 2.0 to fix several issues of the 1.x interface (see <a class="el" href="a00401.html">Upgrading to the hwloc 2.0 API</a> and the NEWS file in the source directory for details). The ABI was broken, which means <b>applications must be recompiled against the new 2.0 interface</b>.</p>
302 <p>To check that you are not mixing old/recent headers with a recent/old runtime library, check the major revision number in the API version: </p><pre class="fragment">#include &lt;hwloc.h&gt;
303 unsigned version = hwloc_get_api_version();
304 if ((version &gt;&gt; 16) != (HWLOC_API_VERSION &gt;&gt; 16)) {
305 fprintf(stderr,
306 "%s compiled for hwloc API 0x%x but running on library API 0x%x.\n"
307 "You may need to point LD_LIBRARY_PATH to the right hwloc library.\n"
308 "Aborting since the new ABI is not backward compatible.\n",
309 callname, HWLOC_API_VERSION, version);
310 exit(EXIT_FAILURE);
311 }
312 </pre><p> To specifically detect v2.0 issues: </p><pre class="fragment">#include &lt;hwloc.h&gt;
313 #if HWLOC_API_VERSION &gt;= 0x00020000
314 /* headers are recent */
315 if (hwloc_get_api_version() &lt; 0x20000)
316 ... error out, the hwloc runtime library is older than 2.0 ...
317 #else
318 /* headers are pre-2.0 */
319 if (hwloc_get_api_version() &gt;= 0x20000)
320 ... error out, the hwloc runtime library is more recent than 2.0 ...
321 #endif
322 </pre><p>In theory, library sonames prevent linking with incompatible libraries. However custom hwloc installations or improperly configured build environments may still lead to such issues. Hence running one of the above (cheap) checks before initializing hwloc topology may be useful.</p>
323 <h2><a class="anchor" id="faq_version_xml"></a>
324 Are XML topology files compatible between hwloc releases?</h2>
325 <p>XML topology files are forward-compatible: a XML file may be loaded by a hwloc library that is more recent than the hwloc release that exported that file.</p>
326 <p>However, hwloc XMLs are not always backward-compatible: Topologies exported by hwloc 2.x cannot be imported by 1.x by default (see <a class="el" href="a00401.html#upgrade_to_api_2x_xml">XML changes</a> for working around such issues). There are also some corner cases where backward compatibility is not guaranteed because of changes between major releases (for instance 1.11 XMLs could not be imported in 1.10).</p>
327 <p>XMLs are exchanged at runtime between some components of the HPC software stack (for instance the resource managers and MPI processes). Building all these components on the same (cluster-wide) hwloc installation is a good way to avoid such incompatibilities.</p>
328 <h2><a class="anchor" id="faq_version_synthetic"></a>
329 Are synthetic strings compatible between hwloc releases?</h2>
330 <p>Synthetic strings (see <a class="el" href="a00395.html">Synthetic topologies</a>) are forward-compatible: a synthetic string generated by a release may be imported by future hwloc libraries.</p>
331 <p>However they are often not backward-compatible because new details may have been added to synthetic descriptions in recent releases. Some flags may be given to <a class="el" href="a00213.html#ga24b7864a1c588309c4749f621f03b4c7" title="Export the topology as a synthetic string.">hwloc_topology_export_synthetic()</a> to avoid such details and stay backward compatible.</p>
332 <h2><a class="anchor" id="faq_version_shmem"></a>
333 Is it possible to share a shared-memory topology between different hwloc releases?</h2>
334 <p>Shared-memory topologies (see <a class="el" href="a00232.html">Sharing topologies between processes</a>) have strong requirements on compatibility between hwloc libraries. Adopting a shared-memory topology fails if it was exported by a non-compatible hwloc release. Releases with same major revision are usually compatible (e.g. hwloc 2.0.4 may adopt a topology exported by 2.0.3) but different major revisions may be incompatible (e.g. hwloc 2.1.0 cannot adopt from 2.0.x).</p>
335 <p>Topologies are shared at runtime between some components of the HPC software stack (for instance the resource managers and MPI processes). Building all these components on the same (system-wide) hwloc installation is a good way to avoid such incompatibilities. </p>
72 <h1><a class="anchor" id="xml_errors"></a>
73 XML import error management</h1>
74 <p>Importing XML files can fail at least because of file access errors, invalid XML syntax, non-hwloc-valid XML contents, or incompatibilities between hwloc releases (see <a class="el" href="a00406.html#faq_version_xml">Are XML topology files compatible between hwloc releases?</a>).</p>
75 <p>Both backend cannot detect all these errors when the input XML file or buffer is selected (when <a class="el" href="a00201.html#ga879439b7ee99407ee911b3ac64e9a25e" title="Enable XML-file based topology.">hwloc_topology_set_xml()</a> or <a class="el" href="a00201.html#ga2745616b65595e1c1e579ecc7e461fa8" title="Enable XML based topology using a memory buffer (instead of a file, as with hwloc_topology_set_xml())...">hwloc_topology_set_xmlbuffer()</a> is called). Some errors such non-hwloc-valid contents can only be detected later when loading the topology with <a class="el" href="a00195.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a>.</p>
76 <p>It is therefore strongly recommended to check the return value of both <a class="el" href="a00201.html#ga879439b7ee99407ee911b3ac64e9a25e" title="Enable XML-file based topology.">hwloc_topology_set_xml()</a> (or <a class="el" href="a00201.html#ga2745616b65595e1c1e579ecc7e461fa8" title="Enable XML based topology using a memory buffer (instead of a file, as with hwloc_topology_set_xml())...">hwloc_topology_set_xmlbuffer()</a>) and <a class="el" href="a00195.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a> to handle all these errors. </p>
33677 </div></div><!-- contents -->
33778 </div><!-- PageDoc -->
33879 <!-- start footer part -->
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Upgrading to the hwloc 2.0 API</title>
7 <title>Hardware Locality (hwloc): Synthetic topologies</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="PageDoc"><div class="header">
4141 <div class="headertitle">
42 <div class="title">Upgrading to the hwloc 2.0 API </div> </div>
42 <div class="title">Synthetic topologies </div> </div>
4343 </div><!--header-->
4444 <div class="contents">
4545 <div class="textblock"><p>
4646 <div class="section">
4747 </p>
48 <p>See <a class="el" href="a00400.html#faq5">Compatibility between hwloc versions</a> for detecting the hwloc version that you are compiling and/or running against.</p>
49 <p>
50 </div><div class="section" id="upgrade_to_api_2x_memory">
51 </p>
52 <h1><a class="anchor" id="upgrade_to_api_2x_memory"></a>
53 New Organization of NUMA nodes and Memory</h1>
54 <h2><a class="anchor" id="upgrade_to_api_2x_memory_children"></a>
55 Memory children</h2>
56 <p>In hwloc v1.x, NUMA nodes were inside the tree, for instance Packages contained 2 NUMA nodes which contained a L3 and several cache.</p>
57 <p>Starting with hwloc v2.0, NUMA nodes are not in the main tree anymore. They are attached under objects as <em>Memory Children</em> on the side of normal children. This memory children list starts at <code>obj-&gt;memory_first_child</code> and its size is <code>obj-&gt;memory_arity</code>. Hence there can now exist two local NUMA nodes, for instance on Intel Xeon Phi processors.</p>
58 <p>The normal list of children (starting at <code>obj-&gt;first_child</code>, ending at <code>obj-&gt;last_child</code>, of size <code>obj-&gt;arity</code>, and available as the array <code>obj-&gt;children</code>) now only contains CPU-side objects: PUs, Cores, Packages, Caches, Groups, Machine and System. <a class="el" href="a00203.html#ga12d8565a3436c565e791ed02a0353621" title="Return the next child.">hwloc_get_next_child()</a> may still be used to iterate over all children of all lists.</p>
59 <p>Hence the CPU-side hierarchy is built using normal children, while memory is attached to that hierarchy depending on its affinity.</p>
60 <h2><a class="anchor" id="upgrade_to_api_2x_memory_examples"></a>
61 Examples</h2>
62 <ul>
63 <li>
64 <p class="startli">a UMA machine with 2 packages and a single NUMA node is now modeled as a "Machine" object with two "Package" children and one "NUMANode" memory children (displayed first in lstopo below): </p><pre class="fragment">Machine (1024MB total)
65 NUMANode L#0 (P#0 1024MB)
66 Package L#0
67 Core L#0 + PU L#0 (P#0)
68 Core L#1 + PU L#1 (P#1)
69 Package L#1
70 Core L#2 + PU L#2 (P#2)
71 Core L#3 + PU L#3 (P#3)
72 </pre> <p class="endli"></p>
73 </li>
74 <li>
75 <p class="startli">a machine with 2 packages with one NUMA node and 2 cores in each is now: </p><pre class="fragment">Machine (2048MB total)
48 <p>hwloc may load fake or remote topologies so as to consult them without having the underlying hardware available. Aside from loading XML topologies, hwloc also enables the building of <em>synthetic</em> topologies that are described by a single string listing the arity of each levels.</p>
49 <p>For instance, lstopo may create a topology made of 2 packages, containing a single NUMA node and a L2 cache above two single-threaded cores:</p>
50 <pre class="fragment">$ lstopo -i "pack:2 node:1 l2:1 core:2 pu:1" -
51 Machine (2048MB)
7652 Package L#0
7753 NUMANode L#0 (P#0 1024MB)
78 Core L#0 + PU L#0 (P#0)
79 Core L#1 + PU L#1 (P#1)
54 L2 L#0 (4096KB)
55 Core L#0 + PU L#0 (P#0)
56 Core L#1 + PU L#1 (P#1)
8057 Package L#1
8158 NUMANode L#1 (P#1 1024MB)
82 Core L#2 + PU L#2 (P#2)
83 Core L#3 + PU L#3 (P#3)
84 </pre> <p class="endli"></p>
85 </li>
86 <li>
87 <p class="startli">if there are two NUMA nodes per package, a Group object may be added to keep cores together with their local NUMA node: </p><pre class="fragment">Machine (4096MB total)
88 Package L#0
89 Group0 L#0
90 NUMANode L#0 (P#0 1024MB)
91 Core L#0 + PU L#0 (P#0)
92 Core L#1 + PU L#1 (P#1)
93 Group0 L#1
94 NUMANode L#1 (P#1 1024MB)
59 L2 L#1 (4096KB)
9560 Core L#2 + PU L#2 (P#2)
9661 Core L#3 + PU L#3 (P#3)
97 Package L#1
98 [...]
99 </pre> <p class="endli"></p>
100 </li>
62 </pre><p>Replacing <code>-</code> with <code>file.xml</code> in this command line will export this topology to XML as usual.</p>
63 <dl class="section note"><dt>Note</dt><dd>Synthetic topologies offer a very basic way to export a topology and reimport it on another machine. It is a lot less precise than XML but may still be enough when only the hierarchy of resources matters.</dd></dl>
64 <p>
65 </div><div class="section" id="synthetic_string">
66 </p>
67 <h1><a class="anchor" id="synthetic_string"></a>
68 Synthetic description string</h1>
69 <p>Each item in the description string gives the type of the level and the number of such children under each object of the previous level. That is why the above topology contains 4 cores (2 cores times 2 nodes).</p>
70 <p>These type names must be written as <code>numanode</code>, <code>package</code>, <code>core</code>, <code>l2u</code>, <code>l1i</code>, <code>pu</code>, <code>group</code> (hwloc_obj_type_sscanf() is used for parsing the type names). They do not need to be written case-sensitively, nor entirely (as long as there is no ambiguity, 2 characters such as <code>ma</code> select a Machine level). Note that I/O and Misc objects are not available.</p>
71 <p>Instead of specifying the type of each level, it is possible to just specify the arities and let hwloc choose all types according to usual topologies. The following examples are therefore equivalent: </p><pre class="fragment">$ lstopo -i "2 3 4 5 6"
72 $ lstopo -i "Package:2 NUMANode:3 L2Cache:4 Core:5 PU:6"
73 </pre><p>NUMA nodes are handled in a special way since they are not part of the main CPU hierarchy but rather attached below it as memory children. Thus, <code>NUMANode:3</code> actually means <code>Group:3</code> where one NUMA node is attached below each group. These groups are merged back into the parent when possible (typically when a single NUMA node is requested below each parent).</p>
74 <p>It is also possible the explicitly attach NUMA nodes to specific levels. For instance, a topology similar to a Intel Xeon Phi processor (with 2 NUMA nodes per 16-core group) may be created with: </p><pre class="fragment">$ lstopo -i "package:1 group:4 [numa] [numa] core:16 pu:4"
75 </pre><p>The root object does not appear in the synthetic description string since it is always a Machine object. Therefore the Machine type is disallowed in the description as well.</p>
76 <p>A NUMA level (with a single NUMA node) is automatically added if needed.</p>
77 <p>Each item may be followed parentheses containing a list of space-separated attributes. For instance: </p><ul>
10178 <li>
102 if the platform has L3 caches whose localities are identical to NUMA nodes, Groups aren't needed: <pre class="fragment">Machine (4096MB total)
103 Package L#0
104 L3 L#0 (16MB)
105 NUMANode L#0 (P#0 1024MB)
106 Core L#0 + PU L#0 (P#0)
107 Core L#1 + PU L#1 (P#1)
108 L3 L#1 (16MB)
109 NUMANode L#1 (P#1 1024MB)
110 Core L#2 + PU L#2 (P#2)
111 Core L#3 + PU L#3 (P#3)
112 Package L#1
113 [...]
114 </pre> </li>
115 </ul>
116 <h2><a class="anchor" id="upgrade_to_api_2x_numa_level"></a>
117 NUMA level and depth</h2>
118 <p>NUMA nodes are not in "main" tree of normal objects anymore. Hence, they don't have a meaningful depth anymore (like I/O and Misc objects). They have a virtual (negative) depth (<a class="el" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575a245c34ec9884c2cf5de5049b2153ed9c" title="Virtual depth for NUMA nodes.">HWLOC_TYPE_DEPTH_NUMANODE</a>) so that functions manipulating depths and level still work, and so that we can still iterate over the level of NUMA nodes just like for any other level.</p>
119 <p>For instance we can still use lines such as </p><pre class="fragment">int depth = hwloc_get_type_depth(topology, HWLOC_OBJ_NUMANODE);
120 hwloc_obj_t obj = hwloc_get_obj_by_type(topology, HWLOC_OBJ_NUMANODE, 4);
121 hwloc_obj_t node = hwloc_get_next_obj_by_depth(topology, HWLOC_TYPE_DEPTH_NUMANODE, prev);
122 </pre><p>The NUMA depth should not be compared with others. An unmodified code that still compares NUMA and Package depths (to find out whether Packages contain NUMA or the contrary) would now always assume Packages contain NUMA (because the NUMA depth is negative).</p>
123 <p>However, the depth of the Normal parents of NUMA nodes may be used instead. In the last example above, NUMA nodes are attached to L3 caches, hence one may compare the depth of Packages and L3 to find out that NUMA nodes are contained in Packages. This depth of parents may be retrieved with <a class="el" href="a00193.html#gae85786340b88e24835f8c403a1e2e54b" title="Return the depth of parents where memory objects are attached.">hwloc_get_memory_parents_depth()</a>. However, this function may return <a class="el" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c" title="Objects of given type exist at different depth in the topology (only for Groups).">HWLOC_TYPE_DEPTH_MULTIPLE</a> on future platforms if NUMA nodes are attached to different levels.</p>
124 <h2><a class="anchor" id="upgrade_to_api_2x_memory_find"></a>
125 Finding Local NUMA nodes and looking at Children and Parents</h2>
126 <p>Applications that walked up/down to find NUMANode parent/children must now be updated. Instead of looking directly for a NUMA node, one should now look for an object that has some memory children. NUMA node(s) will be attached there. For instance, when looking for a NUMA node above a given core <code>core</code>: </p><pre class="fragment">hwloc_obj_t parent = core-&gt;parent;
127 while (parent &amp;&amp; !parent-&gt;memory_arity)
128 parent = parent-&gt;parent; /* no memory child, walk up */
129 if (parent)
130 /* use parent-&gt;memory_first_child (and its siblings if there are multiple local NUMA nodes) */
131 </pre><p>The list of local NUMA nodes (usually a single one) is also described by the <code>nodeset</code> attribute of each object (which contains the physical indexes of these nodes). Iterating over the NUMA level is also an easy way to find local NUMA nodes: </p><pre class="fragment">hwloc_obj_t tmp = NULL;
132 while ((tmp = hwloc_get_next_obj_by_type(topology, HWLOC_OBJ_NUMANODE, tmp)) != NULL) {
133 if (hwloc_bitmap_isset(obj-&gt;nodeset, tmp-&gt;os_index))
134 /* tmp is a NUMA node local to obj, use it */
135 }
136 </pre><p>Similarly finding objects that are close to a given NUMA nodes should be updated too. Instead of looking at the NUMA node parents/children, one should now find a Normal parent above that NUMA node, and then look at its parents/children as usual: </p><pre class="fragment">hwloc_obj_t tmp = obj-&gt;parent;
137 while (hwloc_obj_type_is_memory(tmp))
138 tmp = tmp-&gt;parent;
139 /* now use tmp instead of obj */
140 </pre><p>To avoid such hwloc v2.x-specific and NUMA-specific cases in the code, a <b>generic lookup for any kind of object, including NUMA nodes</b>, might also be implemented by iterating over a level. For instance finding an object of type <code>type</code> which either contains or is included in object <code>obj</code> can be performed by traversing the level of that type and comparing CPU sets: </p><pre class="fragment">hwloc_obj_t tmp = NULL;
141 while ((tmp = hwloc_get_next_obj_by_type(topology, type, tmp)) != NULL) {
142 if (hwloc_bitmap_intersects(tmp-&gt;cpuset, obj-&gt;cpuset))
143 /* tmp matches, use it */
144 }
145 </pre><p> <b> This generic lookup works whenever <code>type</code> or <code>obj</code> are Normal or Memory objects since both have CPU sets. Moreover, it is compatible with the hwloc v1.x API. </b></p>
146 <p>
147 </div><div class="section" id="upgrade_to_api_2x_children">
148 </p>
149 <h1><a class="anchor" id="upgrade_to_api_2x_children"></a>
150 4 Kinds of Objects and Children</h1>
151 <h2><a class="anchor" id="upgrade_to_api_2x_io_misc_children"></a>
152 I/O and Misc children</h2>
153 <p>I/O children are not in the main object children list anymore either. They are in the list starting at <code>obj-&gt;io_first_child</code> and its size is <code>obj-&gt;io_arity</code>.</p>
154 <p>Misc children are not in the main object children list anymore. They are in the list starting at <code>obj-&gt;misc_first_child</code> and its size is <code>obj-&gt;misc_arity</code>.</p>
155 <p>See <a class="el" href="a00244.html" title="Structure of a topology object.">hwloc_obj</a> for details about children lists.</p>
156 <p><a class="el" href="a00203.html#ga12d8565a3436c565e791ed02a0353621" title="Return the next child.">hwloc_get_next_child()</a> may still be used to iterate over all children of all lists.</p>
157 <h2><a class="anchor" id="upgrade_to_api_2x_kinds_subsec"></a>
158 Kinds of objects</h2>
159 <p>Given the above, objects may now be of 4 kinds: </p><ul>
79 <code>L2iCache:2(size=32kB)</code> specifies 2 children of 32kB level-2 instruction caches. The size may be specified in bytes (without any unit suffix) or as TB, GB, MB or kB. </li>
16080 <li>
161 Normal (everything not listed below, including Machine, Package, Core, PU, CPU Caches, etc); </li>
81 <code>NUMANode:3(memory=16MB)</code> specifies 3 NUMA nodes with 16MB each. The size may be specified in bytes (without any unit suffix) or as TB, GB, MB or kB. </li>
16282 <li>
163 Memory (currently NUMA nodes or Memory-side Caches), attached to parents as Memory children; </li>
83 <code>PU:2(indexes=0,2,1,3)</code> specifies 2 PU children and the full list of OS indexes among the entire set of 4 PU objects. </li>
16484 <li>
165 I/O (Bridges, PCI and OS devices), attached to parents as I/O children; </li>
85 <code>PU:2(indexes=numa:core)</code> specifies 2 PU children whose OS indexes are interleaved by NUMA node first and then by package. </li>
16686 <li>
167 Misc objects, attached to parents as Misc children. </li>
168 </ul>
169 <p>See <a class="el" href="a00244.html" title="Structure of a topology object.">hwloc_obj</a> for details about children lists.</p>
170 <p>For a given object type, the kind may be found with <a class="el" href="a00204.html#ga52ef38431eba383b048b98c669b59a16" title="Check whether an object type is Normal.">hwloc_obj_type_is_normal()</a>, <a class="el" href="a00204.html#ga1d074390c8a3dc3088d84f73fb73f966" title="Check whether an object type is Memory.">hwloc_obj_type_is_memory()</a>, <a class="el" href="a00204.html#ga52ef38431eba383b048b98c669b59a16" title="Check whether an object type is Normal.">hwloc_obj_type_is_normal()</a>, or comparing with <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a19f8a6953fa91efc76bcbcdf2d22de4d" title="Miscellaneous objects (filtered out by default). Objects without particular meaning,...">HWLOC_OBJ_MISC</a>.</p>
171 <p>Normal and Memory objects have (non-NULL) CPU sets and nodesets, while I/O and Misc objects don't have any sets (they are NULL).</p>
172 <p>
173 </div><div class="section" id="upgrade_to_api_2x_cache">
174 </p>
175 <h1><a class="anchor" id="upgrade_to_api_2x_cache"></a>
176 HWLOC_OBJ_CACHE replaced</h1>
177 <p>Instead of a single HWLOC_OBJ_CACHE, there are now 8 types <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a56389b8eb2e2f74f288bb657c4e72140" title="Level 1 Data (or Unified) Cache.">HWLOC_OBJ_L1CACHE</a>, ..., <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a67194c9de5e3e581c64c11d2eb1c109d" title="Level 5 Data (or Unified) Cache.">HWLOC_OBJ_L5CACHE</a>, <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55afa834a85d9e53836cf0db6d0bd8329b4" title="Level 1 instruction Cache (filtered out by default).">HWLOC_OBJ_L1ICACHE</a>, ..., <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55ac22850c717f07bf7ffb316fadd08d218" title="Level 3 instruction Cache (filtered out by default).">HWLOC_OBJ_L3ICACHE</a>.</p>
178 <p>Cache object attributes are unchanged.</p>
179 <p><a class="el" href="a00205.html#gad108a09ce400222fe45545257d575489" title="Find the depth of cache objects matching cache level and type.">hwloc_get_cache_type_depth()</a> is not needed to disambiguate cache types anymore since new types can be passed to <a class="el" href="a00193.html#ga8bec782e21be313750da70cf7428b374" title="Returns the depth of objects of type type.">hwloc_get_type_depth()</a> without ever getting <a class="el" href="a00193.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c" title="Objects of given type exist at different depth in the topology (only for Groups).">HWLOC_TYPE_DEPTH_MULTIPLE</a> anymore.</p>
180 <p><a class="el" href="a00204.html#ga2ed589bea28711e80b92066510a5607d" title="Check whether an object type is a CPU Cache (Data, Unified or Instruction).">hwloc_obj_type_is_cache()</a>, <a class="el" href="a00204.html#ga395e48cd221d107e5891689624e1aec4" title="Check whether an object type is a CPU Data or Unified Cache.">hwloc_obj_type_is_dcache()</a> and <a class="el" href="a00204.html#ga8abcee67b9b074332c1866405a3648a9" title="Check whether an object type is a CPU Instruction Cache,.">hwloc_obj_type_is_icache()</a> may be used to check whether a given type is a cache, data/unified cache or instruction cache.</p>
181 <p>
182 </div><div class="section" id="upgrade_to_api_2x_allowed">
183 </p>
184 <h1><a class="anchor" id="upgrade_to_api_2x_allowed"></a>
185 allowed_cpuset and allowed_nodeset only in the main topology</h1>
186 <p>Objects do not have <code>allowed_cpuset</code> and <code>allowed_nodeset</code> anymore. They are only available for the entire topology using <a class="el" href="a00208.html#ga517d5d68ec9f24583d8933aab713be8e" title="Get allowed CPU set.">hwloc_topology_get_allowed_cpuset()</a> and <a class="el" href="a00208.html#ga21a4d7237a11e76b912ed4524ab78cbd" title="Get allowed node set.">hwloc_topology_get_allowed_nodeset()</a>.</p>
187 <p>As usual, those are only needed when the INCLUDE_DISALLOWED topology flag is given, which means disallowed objects are kept in the topology. If so, one may find out whether some PUs inside an object is allowed by checking </p><pre class="fragment">hwloc_bitmap_intersects(obj-&gt;cpuset, hwloc_topology_get_allowed_cpuset(topology))
188 </pre><p> Replace cpusets with nodesets for NUMA nodes. To find out which ones, replace intersects() with and() to get the actual intersection.</p>
189 <p>
190 </div><div class="section" id="upgrade_to_api_2x_depth">
191 </p>
192 <h1><a class="anchor" id="upgrade_to_api_2x_depth"></a>
193 Object depths are now signed int</h1>
194 <p><code>obj-&gt;depth</code> as well as depths given to functions such as <a class="el" href="a00193.html#ga391f6b2613f0065673eaa4069b93d4e0" title="Returns the topology object at logical index idx from depth depth.">hwloc_get_obj_by_depth()</a> or returned by <a class="el" href="a00193.html#gae54d1782ca9b54bea915f5c18a9158fa" title="Get the depth of the hierarchical tree of objects.">hwloc_topology_get_depth()</a> are now <b>signed int</b>.</p>
195 <p>Other depth such as cache-specific depth attribute are still unsigned.</p>
196 <p>
197 </div><div class="section" id="upgrade_to_api_2x_memory_attrs">
198 </p>
199 <h1><a class="anchor" id="upgrade_to_api_2x_memory_attrs"></a>
200 Memory attributes become NUMANode-specific</h1>
201 <p>Memory attributes such as <code>obj-&gt;memory.local_memory</code> are now only available in NUMANode-specific attributes in <code>obj-&gt;attr-&gt;numanode.local_memory</code>.</p>
202 <p><code>obj-&gt;memory.total_memory</code> is available in all objects as <code>obj-&gt;total_memory</code>.</p>
203 <p>See <a class="el" href="a00252.html" title="NUMA node-specific Object Attributes.">hwloc_obj_attr_u::hwloc_numanode_attr_s</a> and <a class="el" href="a00244.html" title="Structure of a topology object.">hwloc_obj</a> for details.</p>
204 <p>
205 </div><div class="section" id="upgrade_to_api_2x_config">
206 </p>
207 <h1><a class="anchor" id="upgrade_to_api_2x_config"></a>
208 Topology configuration changes</h1>
209 <p>The old ignoring API as well as several configuration flags are replaced with the new filtering API, see <a class="el" href="a00199.html#gad894e70f15f8d4aada7be8d1aba38b7e" title="Set the filtering for the given object type.">hwloc_topology_set_type_filter()</a> and its variants, and <a class="el" href="a00199.html#ga9a5a1f0140cd1952544477833733195b" title="Type filtering flags.">hwloc_type_filter_e</a> for details.</p>
210 <ul>
211 <li>
212 <p class="startli">hwloc_topology_ignore_type(), hwloc_topology_ignore_type_keep_structure() and hwloc_topology_ignore_all_keep_structure() are respectively superseded by </p><pre class="fragment">hwloc_topology_set_type_filter(topology, type, HWLOC_TYPE_FILTER_KEEP_NONE);
213 hwloc_topology_set_type_filter(topology, type, HWLOC_TYPE_FILTER_KEEP_STRUCTURE);
214 hwloc_topology_set_all_types_filter(topology, HWLOC_TYPE_FILTER_KEEP_STRUCTURE);
215 </pre><p class="interli">Also, the meaning of KEEP_STRUCTURE has changed (only entire levels may be ignored, instead of single objects), the old behavior is not available anymore. </p>
216 <p class="endli"></p>
217 </li>
218 <li>
219 <p class="startli">HWLOC_TOPOLOGY_FLAG_ICACHES is superseded by </p><pre class="fragment">hwloc_topology_set_icache_types_filter(topology, HWLOC_TYPE_FILTER_KEEP_ALL);
220 </pre> <p class="endli"></p>
221 </li>
222 <li>
223 <p class="startli">HWLOC_TOPOLOGY_FLAG_WHOLE_IO, HWLOC_TOPOLOGY_FLAG_IO_DEVICES and HWLOC_TOPOLOGY_FLAG_IO_BRIDGES replaced.</p>
224 <p class="interli">To keep all I/O devices (PCI, Bridges, and OS devices), use: </p><pre class="fragment">hwloc_topology_set_io_types_filter(topology, HWLOC_TYPE_FILTER_KEEP_ALL);
225 </pre><p class="interli">To only keep important devices (Bridges with children, common PCI devices and OS devices): </p><pre class="fragment">hwloc_topology_set_io_types_filter(topology, HWLOC_TYPE_FILTER_KEEP_IMPORTANT);
226 </pre> <p class="endli"></p>
227 </li>
87 Attributes in parentheses at the very beginning of the description apply to the root object. </li>
22888 </ul>
22989 <p>
230 </div><div class="section" id="upgrade_to_api_2x_xml">
90 </div><div class="section" id="synthetic_use">
23191 </p>
232 <h1><a class="anchor" id="upgrade_to_api_2x_xml"></a>
233 XML changes</h1>
234 <p>2.0 XML files are not compatible with 1.x</p>
235 <p>2.0 can load 1.x files, but only NUMA distances are imported. Other distance matrices are ignored (they were never used by default anyway).</p>
236 <p>2.0 can export 1.x-compatible files, but only distances attached to the root object are exported (i.e. distances that cover the entire machine). Other distance matrices are dropped (they were never used by default anyway).</p>
237 <p><b>Users are advised to negociate hwloc versions between exporter and importer:</b> If the importer isn't 2.x, the exporter should export to 1.x. Otherwise, things should work by default.</p>
238 <p>Hence <a class="el" href="a00212.html#ga333f79975b4eeb28a3d8fad3373583ce" title="Export the topology into an XML file.">hwloc_topology_export_xml()</a> and <a class="el" href="a00212.html#gad33b7f7c11db10459505a3b1634fd3f1" title="Export the topology into a newly-allocated XML memory buffer.">hwloc_topology_export_xmlbuffer()</a> have a new flags argument. to force a hwloc-1.x-compatible XML export. </p><ul>
239 <li>
240 If both always support 2.0, don't pass any flag. </li>
241 <li>
242 When the importer uses hwloc 1.x, export with <a class="el" href="a00212.html#gga0eb99636aff71fe2704e1fa0ffe8c18dae7d6d96546131ef0043867b836b02e0f" title="Export XML that is loadable by hwloc v1.x. However, the export may miss some details about the topolo...">HWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1</a>. Otherwise the importer will fail to import. </li>
243 <li>
244 When the exporter uses hwloc 1.x, it cannot pass any flag, and a 2.0 importer can import without problem. </li>
245 </ul>
246 <pre class="fragment">#if HWLOC_API_VERSION &gt;= 0x20000
247 if (need 1.x compatible XML export)
248 hwloc_topology_export_xml(...., HWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1);
249 else /* need 2.x compatible XML export */
250 hwloc_topology_export_xml(...., 0);
251 #else
252 hwloc_topology_export_xml(....);
253 #endif
254 </pre><p>Additionally, <a class="el" href="a00231.html#ga2cd902ce8766e90d4f2523a8e87640e9" title="Load a list of topology differences from a XML file.">hwloc_topology_diff_load_xml()</a>, <a class="el" href="a00231.html#gad693810a5c51628529b9dd56f040fb81" title="Load a list of topology differences from a XML buffer.">hwloc_topology_diff_load_xmlbuffer()</a>, <a class="el" href="a00231.html#ga8a14dd7d01efbdd97af7fe85e8b84b20" title="Export a list of topology differences to a XML file.">hwloc_topology_diff_export_xml()</a>, <a class="el" href="a00231.html#gaa2f0918df60c1c4a0bef9411f7d92a13" title="Export a list of topology differences to a XML buffer.">hwloc_topology_diff_export_xmlbuffer()</a> and <a class="el" href="a00231.html#ga5dcff18f80583ac6505a94ba2877fd1b" title="Destroy a list of topology differences.">hwloc_topology_diff_destroy()</a> lost the topology argument: The first argument (topology) isn't needed anymore.</p>
92 <h1><a class="anchor" id="synthetic_use"></a>
93 Loading a synthetic topology</h1>
94 <p>Aside from lstopo, the hwloc programming interface offers the same ability by passing the synthetic description string to <a class="el" href="a00201.html#ga4fab186bb6181a00bcf585825fddd38d" title="Enable synthetic topology.">hwloc_topology_set_synthetic()</a> before <a class="el" href="a00195.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a>.</p>
95 <p>Synthetic topologies are created by the <code>synthetic</code> component. This component may be enabled by force by setting the HWLOC_SYNTHETIC environment variable to something such as <code>node:2 core:3 pu:4</code>.</p>
96 <p>Loading a synthetic topology disables binding support since the topology usually does not match the underlying hardware. Binding may be reenabled as usual by setting HWLOC_THISSYSTEM=1 in the environment or by setting the <a class="el" href="a00202.html#ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b" title="Assume that the selected backend provides the topology for the system on which we are running.">HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</a> topology flag.</p>
25597 <p>
256 </div><div class="section" id="upgrade_to_api_2x_distances">
98 </div><div class="section" id="synthetic_export">
25799 </p>
258 <h1><a class="anchor" id="upgrade_to_api_2x_distances"></a>
259 Distances API totally rewritten</h1>
260 <p>The new distances API is in <a class="el" href="a00137_source.html">hwloc/distances.h</a>.</p>
261 <p>Distances are not accessible directly from objects anymore. One should first call <a class="el" href="a00214.html#ga613e6b2a5d0f06626ee8d0c12fa46691" title="Retrieve distance matrices.">hwloc_distances_get()</a> (or a variant) to retrieve distances (possibly with one call to get the number of available distances structures, and another call to actually get them). Then it may consult these structures, and finally release them.</p>
262 <p>The set of object involved in a distances structure is specified by an array of objects, it may not always cover the entire machine or so.</p>
263 <p>
264 </div><div class="section" id="upgrade_to_api_2x_return">
265 </p>
266 <h1><a class="anchor" id="upgrade_to_api_2x_return"></a>
267 Return values of functions</h1>
268 <p>Bitmap functions (and a couple other functions) can return errors (in theory).</p>
269 <p>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.</p>
270 <p><a class="el" href="a00195.html#gace7654bb8a9002caae1a4b8a59e7452e" title="Add the given info name and value pair to the given object.">hwloc_obj_add_info()</a>, <a class="el" href="a00209.html#gad5ee8691e08a3538ea7633344c00456d" title="Convert a NUMA node set into a CPU set.">hwloc_cpuset_from_nodeset()</a> and <a class="el" href="a00209.html#gad5ee8691e08a3538ea7633344c00456d" title="Convert a NUMA node set into a CPU set.">hwloc_cpuset_from_nodeset()</a> also return an int, which would be -1 in case of allocation errors.</p>
271 <p>
272 </div><div class="section" id="upgrade_to_api_2x_misc">
273 </p>
274 <h1><a class="anchor" id="upgrade_to_api_2x_misc"></a>
275 Misc API changes</h1>
276 <ul>
277 <li>
278 <p class="startli"><a class="el" href="a00194.html#ga510f21b066fba2dab12b8c9b173b1dfd" title="Return an object type and attributes from a type string.">hwloc_type_sscanf()</a> extends hwloc_obj_type_sscanf() by passing a union <a class="el" href="a00248.html" title="Object type-specific Attributes.">hwloc_obj_attr_u</a> which may receive Cache, Group, Bridge or OS device attributes. </p>
279 <p class="endli"></p>
280 </li>
281 <li>
282 <p class="startli"><a class="el" href="a00194.html#ga52c63cd7203e55b804c1314affc9bd12" title="Return an object type and its level depth from a type string.">hwloc_type_sscanf_as_depth()</a> is also added to directly return the corresponding level depth within a topology. </p>
283 <p class="endli"></p>
284 </li>
285 <li>
286 <p class="startli">hwloc_topology_insert_misc_object_by_cpuset() is replaced with <a class="el" href="a00200.html#ga4cea4741165faf5323931a9ed8786ef7" title="Allocate a Group object to insert later with hwloc_topology_insert_group_object().">hwloc_topology_alloc_group_object()</a> and <a class="el" href="a00200.html#ga1fc6012b3e1c249b83f48cb7bcacaa5b" title="Add more structure to the topology by adding an intermediate Group.">hwloc_topology_insert_group_object()</a>. </p>
287 <p class="endli"></p>
288 </li>
289 <li>
290 <p class="startli">hwloc_topology_insert_misc_object_by_parent() is replaced with <a class="el" href="a00200.html#gad980782ade737900c5cf208946768c30" title="Add a MISC object as a leaf of the topology.">hwloc_topology_insert_misc_object()</a>. </p>
291 <p class="endli"></p>
292 </li>
293 </ul>
294 <p>
295 </div><div class="section" id="upgrade_to_api_2x_removals">
296 </p>
297 <h1><a class="anchor" id="upgrade_to_api_2x_removals"></a>
298 API removals and deprecations</h1>
299 <ul>
300 <li>
301 <p class="startli">HWLOC_OBJ_SYSTEM removed: The root object is always <a class="el" href="a00190.html#ggacd37bb612667dc437d66bfb175a8dc55a3f4e83ffc4a259354959ae8a9eaa2a80" title="Machine. A set of processors and memory with cache coherency.">HWLOC_OBJ_MACHINE</a> </p>
302 <p class="endli"></p>
303 </li>
304 <li>
305 <p class="startli">_membind_nodeset() memory binding interfaces deprecated: One should use the variant without _nodeset suffix and pass the <a class="el" href="a00197.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256" title="Consider the bitmap argument as a nodeset.">HWLOC_MEMBIND_BYNODESET</a> flag. </p>
306 <p class="endli"></p>
307 </li>
308 <li>
309 <p class="startli">HWLOC_MEMBIND_REPLICATE removed: no supported operating system supports it anymore. </p>
310 <p class="endli"></p>
311 </li>
312 <li>
313 <p class="startli">hwloc_obj_snprintf() removed because it was long-deprecated by <a class="el" href="a00194.html#gadb8765c260edea80c52cd06a76639ba4" title="Stringify the type of a given topology object into a human-readable form.">hwloc_obj_type_snprintf()</a> and <a class="el" href="a00194.html#ga870e876931c282a1c7aee2f031912ce3" title="Stringify the attributes of a given topology object into a human-readable form.">hwloc_obj_attr_snprintf()</a>. </p>
314 <p class="endli"></p>
315 </li>
316 <li>
317 <p class="startli">hwloc_obj_type_sscanf() deprecated, hwloc_obj_type_of_string() removed. </p>
318 <p class="endli"></p>
319 </li>
320 <li>
321 <p class="startli">hwloc_cpuset_from/to_nodeset_strict() deprecated: Now useless since all topologies are NUMA. Use the variant without the _strict suffix </p>
322 <p class="endli"></p>
323 </li>
324 <li>
325 <p class="startli">hwloc_distribute() and hwloc_distributev() removed, deprecated by <a class="el" href="a00207.html#ga7b0c28f797c2ff17fa2f244ebbd55b33" title="Distribute n items over the topology under roots.">hwloc_distrib()</a>. </p>
326 <p class="endli"></p>
327 </li>
328 <li>
329 <p class="startli">The Custom interface (hwloc_topology_set_custom(), etc.) was removed, as well as the corresponding command-line tools (hwloc-assembler, etc.). Topologies always start with object with valid cpusets and nodesets. </p>
330 <p class="endli"></p>
331 </li>
332 <li>
333 <p class="startli"><code>obj-&gt;online_cpuset</code> removed: Offline PUs are simply listed in the <code>complete_cpuset</code> as previously. </p>
334 <p class="endli"></p>
335 </li>
336 <li>
337 <p class="startli"><code>obj-&gt;os_level</code> removed. </p>
338 <p class="endli"></p>
339 </li>
340 </ul>
100 <h1><a class="anchor" id="synthetic_export"></a>
101 Exporting a topology as a synthetic string</h1>
102 <p>The function <a class="el" href="a00216.html#ga24b7864a1c588309c4749f621f03b4c7" title="Export the topology as a synthetic string.">hwloc_topology_export_synthetic()</a> may export a topology as a synthetic string. It offers a convenient way to quickly describe the contents of a machine. The lstopo tool may also perform such an export by forcing the output format.</p>
103 <pre class="fragment">$ lstopo --of synthetic --no-io
104 Package:1 L3Cache:1 L2Cache:2 L1dCache:1 L1iCache:1 Core:1 PU:2
105 </pre><p>The exported string may be passed back to hwloc for recreating another similar topology (see also <a class="el" href="a00406.html#faq_version_synthetic">Are synthetic strings compatible between hwloc releases?</a>). The entire tree will be similar, but some attributes such as the processor model will be missing.</p>
106 <p>Such an export is only possible if the topology is totally symmetric. It means that the <code>symmetric_subtree</code> field of the root object is set. Also memory children should be attached in a symmetric way (e.g. the same number of memory children below each Package object, etc.). However, I/O devices and Misc objects are ignored when looking at symmetry and exporting the string. </p>
341107 </div></div><!-- contents -->
342108 </div><!-- PageDoc -->
343109 <!-- start footer part -->
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Network Locality (netloc)</title>
7 <title>Hardware Locality (hwloc): Interoperability With Other Software</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="PageDoc"><div class="header">
4141 <div class="headertitle">
42 <div class="title">Network Locality (netloc) </div> </div>
42 <div class="title">Interoperability With Other Software </div> </div>
4343 </div><!--header-->
4444 <div class="contents">
4545 <div class="textblock"><p>
4646 <div class="section">
4747 </p>
48 <p>Portable abstraction of network topologies for high-performance computing.</p>
49 <p>The netloc documentation spans of these sections: </p><ul>
50 <li>
51 <a class="el" href="a00402.html">Network Locality (netloc)</a>, this section below </li>
52 <li>
53 <a class="el" href="a00403.html">Netloc with Scotch</a> </li>
54 </ul>
55 <p>
56 </div><div class="section" id="netloc_summary">
57 </p>
58 <h1><a class="anchor" id="netloc_summary"></a>
59 Netloc Summary</h1>
60 <p>The Portable Network Locality (netloc) software package provides network topology discovery tools, and an abstract representation of those networks topologies for a range of network types and configurations. It is provided as a companion to the Portable Hardware Locality (hwloc) package. These two software packages work together to provide a comprehensive view of the HPC system topology, spanning from the processor cores in one server to the cores in another - including the complex network(s) in between.</p>
61 <p>Towards this end, netloc is divided into two sets of components. The first tools are for the admin to extract the information about the topology of the machines with topology discovery tools for each network type and discovery technique (called readers). The second set of tools is for the user to exploit the collected information: to display the topology or create a topology-aware mapping of the processes of an application.</p>
62 <div class="image">
63 <img src="netloc_design.png" alt=""/>
64 </div>
65 <p>
66 </div><div class="section" id="supportednetworks">
67 </p>
68 <h2><a class="anchor" id="supportednetworks"></a>
69 Supported Networks</h2>
70 <p>For now, only InfiniBand (See <a class="el" href="a00402.html#netloc_setup">Setup</a>) is supported, but it is planned to be extended it very soon.</p>
71 <p>
72 </div><div class="section" id="netloc_installation">
73 </p>
74 <h1><a class="anchor" id="netloc_installation"></a>
75 Netloc Installation</h1>
76 <p>The generic installation procedure for both hwloc and netloc is described in <a class="el" href="index.html#common_installation">Installation</a>.</p>
77 <p>Note that netloc is currently not supported on as many platforms as the original hwloc project. netloc is enabled by default when supported, or can be disabled by passing <code>--disable-netloc</code> to the configure command-line.</p>
78 <p>
79 </div><div class="section" id="netloc_setup">
80 </p>
81 <h1><a class="anchor" id="netloc_setup"></a>
82 Setup</h1>
83 <p>To use Netloc tools, we need two steps. The first step consists in getting information about network directly from tools distributed by manufacturers. For Infiniband, for instance, this operation needs privileges to access to the network device. For this step we have wrappers in Netloc that will call the right tools with the right options.</p>
84 <p>The second step will transform the raw files generated by manufacturer tools, into files in a format readable by Netloc tools, and that will not depend on network technologies.</p>
85 <p>To be clear, let's take an example with Infiniband. This first step is handled by <code>netloc_ib_gather_raw</code> that will call <code>ibnetdiscover</code> and <code>ibroutes</code> tools to generate the necessary raw data files. The step has to be run by an administrator, since the Infiniband tools need to access to the network device.</p>
86 <pre class="fragment">shell$ netloc_ib_gather_raw --help
87 Usage: netloc_ib_gather_raw [options] &lt;outdir&gt;
88 Dumps topology information to &lt;outdir&gt;/ib-raw/
89 Subnets are guessed from the &lt;outdir&gt;/hwloc/ directory where
90 the hwloc XML exports of some nodes are stored.
91 Options:
92 --sudo
93 Pass sudo to internal ibnetdiscover and ibroute invocations.
94 Useful when the entire script cannot run as root.
95 --hwloc-dir &lt;dir&gt;
96 Use &lt;dir&gt; instead of &lt;outdir&gt;/hwloc/ for hwloc XML exports.
97 --force-subnet [&lt;subnet&gt;:]&lt;board&gt;:&lt;port&gt; to force the discovery
98 Do not guess subnets from hwloc XML exports.
99 Force discovery on local board &lt;board&gt; port &lt;port&gt;
100 and optionally force the subnet id &lt;subnet&gt;
101 instead of reading it from the first GID.
102 Examples: --force-subnet mlx4_0:1
103 --force-subnet fe80:0000:0000:0000:mlx4_0:1
104 --ibnetdiscover /path/to/ibnetdiscover
105 --ibroute /path/to/ibroute
106 Specify exact location of programs. Default is /usr/bin/&lt;program&gt;
107 --sleep &lt;n&gt;
108 Sleep for &lt;n&gt; seconds between invocations of programs probing the network
109 --ignore-errors
110 Ignore errors from ibnetdiscover and ibroute, assume their outputs are ok
111 --force -f
112 Always rediscover to overwrite existing files without asking
113 --verbose -v
114 Add verbose messages
115 --dry-run
116 Do not actually run programs or modify anything
117 --help -h
118 Show this help
119
120 shell$ ./netloc_ib_gather_raw /home/netloc/data
121 WARNING: Not running as root.
122 Using /home/netloc/data/hwloc as hwloc lstopo XML directory.
123
124 Exporting local node hwloc XML...
125 Running lstopo-no-graphics...
126
127 Found 1 subnets in hwloc directory:
128 Subnet fe80:0000:0000:0000 is locally accessible from board qib0 port 1.
129
130 Looking at fe80:0000:0000:0000 (through local board qib0 port 1)...
131 Running ibnetdiscover...
132 Getting routes...
133 Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L112' LID 18...
134 Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L108' LID 20...
135 Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L102' LID 23...
136 Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L104' LID 25...
137 Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L106' LID 24...
138 Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L114' LID 22...
139 Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L116' LID 21...
140 Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L109' LID 12...
141 Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L111' LID 11...
142 Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L107' LID 13...
143 Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L103' LID 17...
144 Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L105' LID 16...
145 Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L113' LID 15...
146 </pre><p>The second step, that can be done by a regular user, is done by the tool <code>netloc_ib_extract_dats</code>.</p>
147 <pre class="fragment">shell$ netloc_ib_extract_dats --help
148 Usage: netloc_ib_extract_dats &lt;path to input raw data files&gt; &lt;output path&gt; [--hwloc-dir
149 &lt;hwloc xml path&gt;]
150 hwloc-dir can be an absolute path or a relative path from output path
151
152 shell$ netloc_ib_extract_dats /home/netloc/data/ib-raw /home/netloc/data/netloc \
153 --hwloc-dir ../hwloc
154 Read subnet: fe80:0000:0000:0000
155 2 partitions found
156 'node'
157 'admin'
158 </pre><p>
159 </div><div class="section" id="netloc_draw">
160 </p>
161 <h1><a class="anchor" id="netloc_draw"></a>
162 Topology display</h1>
163 <p>Netloc provides a tool, <code>netloc_draw.html</code>, that displays a topology in a web browser, by using a JSON file.</p>
164 <h2><a class="anchor" id="netloc_draw_setup"></a>
165 Generate the JSON file</h2>
166 <p>In order to display a topology, Netloc needs to generate a JSON file corresponding to a topology. For this operation, the user must run <code>netloc_draw_to_json</code>.</p>
167 <pre class="fragment">shell$ netloc_draw_to_json --help
168 Usage: netloc_draw_to_json &lt;path to topology directory&gt;
169
170 shell$ netloc_draw_to_json /home/netloc/data/netloc
171 </pre><p>The <code>netloc_draw_to_json</code> command will write a JSON file for each topology file found in the input directory. The output files, written also in the input directory, can be open by <code>netloc_draw.html</code> in a web browser.</p>
172 <h2><a class="anchor" id="netloc_draw_tool"></a>
173 Using netloc_draw</h2>
174 <p>Once the JSON file is opened, the rendering is generated by the Javascript vis library for computing the position of the nodes. From the interface, it is possible to search for a specific node, to color the nodes, to expand merged switches, to show statistics, to export as an image... The user can interact with the nodes by moving them. For now, there are bugs and other nodes might move too.</p>
175 <p>The placement of the nodes is done statically if the topology is detected as a tree. If not, vis.js will use physics to find good positions, and it can be very time consuming.</p>
176 <div class="image">
177 <img src="netloc_draw.png" alt=""/>
178 </div>
179 </div></div><!-- contents -->
48 <p>Although hwloc offers its own portable interface, it still may have to interoperate with specific or non-portable libraries that manipulate similar kinds of objects. hwloc therefore offers several specific "helpers" to assist converting between those specific interfaces and hwloc.</p>
49 <p>Some external libraries may be specific to a particular OS; others may not always be available. The hwloc core therefore generally does not explicitly depend on these types of libraries. However, when a custom application uses or otherwise depends on such a library, it may optionally include the corresponding hwloc helper to extend the hwloc interface with dedicated helpers.</p>
50 <p>Most of these helpers use structures that are specific to these external libraries and only meaningful on the local machine. If so, the helper requires the input topology to match the current machine. Some helpers also require I/O device discovery to be supported and enabled for the current topology.</p>
51 <dl>
52 <dt>Linux specific features </dt>
53 <dd><p class="startdd"><a class="el" href="a00143_source.html">hwloc/linux.h</a> offers Linux-specific helpers that utilize some non-portable features of the Linux system, such as binding threads through their thread ID ("tid") or parsing kernel CPU mask files. See <a class="el" href="a00224.html">Linux-specific helpers</a>. </p>
54 <p class="enddd"></p>
55 </dd>
56 <dt>Windows specific features </dt>
57 <dd><p class="startdd"><a class="el" href="a00149_source.html">hwloc/windows.h</a> offers Windows-specific helpers to query information about Windows processor groups. See <a class="el" href="a00227.html">Windows-specific helpers</a>. </p>
58 <p class="enddd"></p>
59 </dd>
60 <dt>Linux libnuma </dt>
61 <dd><p class="startdd"><a class="el" href="a00146_source.html">hwloc/linux-libnuma.h</a> provides conversion helpers between hwloc CPU sets and libnuma-specific types, such as bitmasks. It helps you use libnuma memory-binding functions with hwloc CPU sets. See <a class="el" href="a00226.html">Interoperability with Linux libnuma bitmask</a> and <a class="el" href="a00225.html">Interoperability with Linux libnuma unsigned long masks</a>. </p>
62 <p class="enddd"></p>
63 </dd>
64 <dt>Glibc </dt>
65 <dd><p class="startdd"><a class="el" href="a00152_source.html">hwloc/glibc-sched.h</a> offers conversion routines between Glibc and hwloc CPU sets in order to use hwloc with functions such as sched_getaffinity() or pthread_attr_setaffinity_np(). See <a class="el" href="a00228.html">Interoperability with glibc sched affinity</a>. </p>
66 <p class="enddd"></p>
67 </dd>
68 <dt>OpenFabrics Verbs </dt>
69 <dd><p class="startdd"><a class="el" href="a00176_source.html">hwloc/openfabrics-verbs.h</a> helps interoperability with the OpenFabrics Verbs interface. For example, it can return a list of processors near an OpenFabrics device. It may also return the corresponding OS device hwloc object for further information (if I/O device discovery is enabled). See <a class="el" href="a00236.html">Interoperability with OpenFabrics</a>. </p>
70 <p class="enddd"></p>
71 </dd>
72 <dt>OpenCL </dt>
73 <dd><p class="startdd"><a class="el" href="a00155_source.html">hwloc/opencl.h</a> enables interoperability with the OpenCL interface. Only the AMD and NVIDIA implementations currently offer locality information. It may return the list of processors near a GPU given as a <code>cl_device_id</code>. It may also return the corresponding OS device hwloc object for further information (if I/O device discovery is enabled). See <a class="el" href="a00229.html">Interoperability with OpenCL</a>. </p>
74 <p class="enddd"></p>
75 </dd>
76 <dt>oneAPI Level Zero </dt>
77 <dd><p class="startdd"><a class="el" href="a00170_source.html">hwloc/levelzero.h</a> enables interoperability with the oneAPI Level Zero interface. It may return the list of processors near an accelerator or GPU. It may also return the corresponding OS device hwloc object for further information (if I/O device discovery is enabled). See <a class="el" href="a00234.html">Interoperability with the oneAPI Level Zero interface.</a>. </p>
78 <p class="enddd"></p>
79 </dd>
80 <dt>AMD ROCm SMI Library (RSMI) </dt>
81 <dd><p class="startdd"><a class="el" href="a00167_source.html">hwloc/rsmi.h</a> enables interoperability with the AMD ROCm SMI interface. It may return the list of processors near an AMD GPU. It may also return the corresponding OS device hwloc object for further information (if I/O device discovery is enabled). See <a class="el" href="a00233.html">Interoperability with the ROCm SMI Management Library</a>. </p>
82 <p class="enddd"></p>
83 </dd>
84 <dt>NVIDIA CUDA </dt>
85 <dd><p class="startdd"><a class="el" href="a00158_source.html">hwloc/cuda.h</a> and <a class="el" href="a00161_source.html">hwloc/cudart.h</a> enable interoperability with NVIDIA CUDA Driver and Runtime interfaces. For instance, it may return the list of processors near NVIDIA GPUs. It may also return the corresponding OS device hwloc object for further information (if I/O device discovery is enabled). See <a class="el" href="a00230.html">Interoperability with the CUDA Driver API</a> and <a class="el" href="a00231.html">Interoperability with the CUDA Runtime API</a>. </p>
86 <p class="enddd"></p>
87 </dd>
88 <dt>NVIDIA Management Library (NVML) </dt>
89 <dd><p class="startdd"><a class="el" href="a00164_source.html">hwloc/nvml.h</a> enables interoperability with the NVIDIA NVML interface. It may return the list of processors near a NVIDIA GPU given as a <code>nvmlDevice_t</code>. It may also return the corresponding OS device hwloc object for further information (if I/O device discovery is enabled). See <a class="el" href="a00232.html">Interoperability with the NVIDIA Management Library</a>. </p>
90 <p class="enddd"></p>
91 </dd>
92 <dt>NVIDIA displays </dt>
93 <dd><p class="startdd"><a class="el" href="a00173_source.html">hwloc/gl.h</a> enables interoperability with NVIDIA displays using the NV-CONTROL X extension (NVCtrl library). If I/O device discovery is enabled, it may return the OS device hwloc object that corresponds to a display given as a name such as <em>:0.0</em> or given as a port/device pair (server/screen). See <a class="el" href="a00235.html">Interoperability with OpenGL displays</a>. </p>
94 <p class="enddd"></p>
95 </dd>
96 <dt>Taskset command-line tool </dt>
97 <dd><p class="startdd">The taskset command-line tool is widely used for binding processes. It manipulates CPU set strings in a format that is slightly different from hwloc's one (it does not divide the string in fixed-size subsets and separates them with commas). To ease interoperability, hwloc offers routines to convert hwloc CPU sets from/to taskset-specific string format. See for instance <a class="el" href="a00214.html#ga5beb68a987fe48e5c5edef06ab260e14" title="Stringify a bitmap in the taskset-specific format.">hwloc_bitmap_taskset_snprintf()</a> in <a class="el" href="a00214.html">The bitmap API</a>.</p>
98 <p class="interdd">Most hwloc command-line tools also support the <code>--taskset</code> option to manipulate taskset-specific strings. </p>
99 <p class="enddd"></p>
100 </dd>
101 </dl>
102 </div></div><!-- contents -->
180103 </div><!-- PageDoc -->
181104 <!-- start footer part -->
182105 <hr class="footer"/><address class="footer"><small>
44 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
55 <meta name="generator" content="Doxygen 1.9.1"/>
66 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Netloc with Scotch</title>
7 <title>Hardware Locality (hwloc): Thread Safety</title>
88 <link href="tabs.css" rel="stylesheet" type="text/css"/>
99 <script type="text/javascript" src="jquery.js"></script>
1010 <script type="text/javascript" src="dynsections.js"></script>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
3939 </div><!-- top -->
4040 <div class="PageDoc"><div class="header">
4141 <div class="headertitle">
42 <div class="title">Netloc with Scotch </div> </div>
42 <div class="title">Thread Safety </div> </div>
4343 </div><!--header-->
4444 <div class="contents">
4545 <div class="textblock"><p>
4646 <div class="section">
4747 </p>
48 <p>Scotch is a toolbox for graph partitioning [XXX], that can do mapping between a communication graph and an architecture. Netloc interfaces with Scotch, by getting the topology of the machine and building the Scotch architecture. It is also possible to directly build a mapping file that can be given to <code>mpirun</code>.</p>
49 <p>
50 </div><div class="section" id="scotch_intro">
51 </p>
52 <h1><a class="anchor" id="scotch_intro"></a>
53 Introduction</h1>
54 <p>Scotch is able to deal architectures to represent the topology of a complete machine. Scotch handles several types of topologies: complete graphs, hypercubes, fat trees, meshes, torus, and random graphs. Moreover, Scotch is able to manage parts of architectures that are called sub-architectures. Thus, from a complete architecture, we can create a sub-architecture that will represent the available resources of the complete machine.</p>
55 <p>
56 </div><div class="section" id="scotch_setup">
57 </p>
58 <h1><a class="anchor" id="scotch_setup"></a>
59 Setup</h1>
60 <p>The first step in order to use Netloc tools is to discover the network. For this task, we provide tools called netloc_gather that are wrappers to the dedicated tools provided by the manufacturer of the network, that generate the raw data given by the devices. This task needs privileges to access to the network devices. Once, this task is completed, the raw data is converted in a generic format independent to the fabric by extract_dats. Figure 1 shows how the different modules of Netloc are linked, and what are the tools provided by Netloc.</p>
61 <p>
62 </div><div class="section" id="scotch_tools_api">
63 </p>
64 <h1><a class="anchor" id="scotch_tools_api"></a>
65 Tools and API</h1>
66 <p>When the machine is discovered and all the needed files are generated as seen previously, a user can call the netlocscotch functions from the API and interact with Scotch.</p>
67 <h2><a class="anchor" id="netlocscotch_arch"></a>
68 Build Scotch architectures</h2>
69 <p>Netloc provides a function to export the built topology into the Scotch format. That will give the possibility to the user to play with the topology in Scotch. Since Netloc matches the discovered topology with known topologies, the Scotch architecture won’t be random graphs but known topologies also in Scotch that will lead to optimized graph algorithms. This function is called netlocscotch_build_arch.</p>
70 <p>When the network topology is a tree, the topology converted by netlocscotch is the complete topology of the machine containing intranode topologies from hwloc. In this case, merging the two levels results in a bigger tree. For other network topologies, the global graph created for Scotch is a generic graph since it not not (at this moment) possible to create nested known architectures.</p>
71 <h2><a class="anchor" id="netlocscotch_subarch"></a>
72 Build Scotch sub-architectures</h2>
73 <p>Most of the time, the user does not have access to the complete machine. He uses a resource manager to run his application and he will gain access only to a set of nodes. In this case getting the Scotch architecture of the complete machine is not relevant. Fortunately, Netloc is also able to build a Scotch sub-architecture that will contain only the available nodes. For this operation the user needs to run a specific program, netloc_get_resources, that will record in a file, the lists of available nodes and available cores by using MPI and hwloc. From this file, the function netlocscotch_build_subarch will build the Scotch sub-architecture.</p>
74 <h2><a class="anchor" id="netlocscotch_mapping"></a>
75 Mapping of processes</h2>
76 <p>A main goal in having all these data about the network topology, especially in Scotch structures, is to help the process placement. For that, we use the mapping of a process graph to the architecture provided by Scotch. As we have seen previously, Netloc is able to detect the structure of the topology and will build the adapted Scotch architecture that will be more efficient than a random structure.</p>
77 <p>In case, the network topology is not a tree, netlocscotch converts the complete topology into a generic graph. The drawback in that is the Scotch graph algorithms are less efficient. To overcome that, netlocscotch does two steps of mapping: first it maps the processes to the nodes, and then for each node maps the processes to the cores. We have to conduct tests to check if the method gives better results than using a generic graph directly.</p>
78 <p>The other input needed in Scotch is the process graph. Since we want to optimize the placement to decrease the communication time, a good metric for building the application graph is the amount of communications between all pairs of processes. Studies still have to be done to choose, in the most efficient way, what we take into account to define the amount of communications between the number of messages, the size of messages... This information will be transformed into a process graph.</p>
79 <p>Once we have a good mapping computed by Scotch, we can give it to the user, or Netloc can even generate the corresponding rank file useful to MPI. </p>
48 <p>Like most libraries that mainly fill data structures, hwloc is not thread safe but rather reentrant: all state is held in a <a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38" title="Topology context.">hwloc_topology_t</a> instance without mutex protection. That means, for example, that two threads can safely operate on and modify two different <a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38" title="Topology context.">hwloc_topology_t</a> instances, but they should not simultaneously invoke functions that modify the <em>same</em> instance. Similarly, one thread should not modify a <a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38" title="Topology context.">hwloc_topology_t</a> instance while another thread is reading or traversing it. However, two threads can safely read or traverse the same <a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38" title="Topology context.">hwloc_topology_t</a> instance concurrently.</p>
49 <p>When running in multiprocessor environments, be aware that proper thread synchronization and/or memory coherency protection is needed to pass hwloc data (such as <a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38" title="Topology context.">hwloc_topology_t</a> pointers) from one processor to another (e.g., a mutex, semaphore, or a memory barrier). Note that this is not a hwloc-specific requirement, but it is worth mentioning.</p>
50 <p>For reference, <a class="el" href="a00195.html#ga9d1e76ee15a7dee158b786c30b6a6e38" title="Topology context.">hwloc_topology_t</a> modification operations include (but may not be limited to):</p>
51 <dl>
52 <dt>Creation and destruction </dt>
53 <dd><p class="startdd"><code><a class="el" href="a00195.html#ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa" title="Allocate a topology context.">hwloc_topology_init()</a>, <a class="el" href="a00195.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a>, <a class="el" href="a00195.html#ga9f34a640b6fd28d23699d4d084667b15" title="Terminate and free a topology context.">hwloc_topology_destroy()</a></code> (see <a class="el" href="a00195.html">Topology Creation and Destruction</a>) imply major modifications of the structure, including freeing some objects. No other thread cannot access the topology or any of its objects at the same time.</p>
54 <p class="interdd">Also references to objects inside the topology are not valid anymore after these functions return. </p>
55 <p class="enddd"></p>
56 </dd>
57 <dt>Runtime topology modifications </dt>
58 <dd><p class="startdd"><code><a class="el" href="a00203.html#gad980782ade737900c5cf208946768c30" title="Add a MISC object as a leaf of the topology.">hwloc_topology_insert_misc_object()</a></code>, <code><a class="el" href="a00203.html#ga4cea4741165faf5323931a9ed8786ef7" title="Allocate a Group object to insert later with hwloc_topology_insert_group_object().">hwloc_topology_alloc_group_object()</a></code>, and <code><a class="el" href="a00203.html#ga1fc6012b3e1c249b83f48cb7bcacaa5b" title="Add more structure to the topology by adding an intermediate Group.">hwloc_topology_insert_group_object()</a></code> (see <a class="el" href="a00203.html">Modifying a loaded Topology</a>) may modify the topology significantly by adding objects inside the tree, changing the topology depth, etc.</p>
59 <p class="interdd"><code><a class="el" href="a00219.html#ga1f5a29760ebb8f9af831e645315f553c" title="Commit a new distances structure.">hwloc_distances_add_commit()</a></code> and <code><a class="el" href="a00220.html#gac188d9b64d9560255ce5f6d0a20f9c0a" title="Remove all distance matrices from a topology.">hwloc_distances_remove()</a></code> (see <a class="el" href="a00219.html">Add distances between objects</a>) modify the list of distance structures in the topology, and the former may even insert new Group objects.</p>
60 <p class="interdd"><code><a class="el" href="a00222.html#ga770657d1e44b09e93e09f623936c1e5f" title="Register a new memory attribute.">hwloc_memattr_register()</a></code> and <code><a class="el" href="a00222.html#ga960529c08b25cf15825e0f72ecceb504" title="Set an attribute value for a specific target NUMA node.">hwloc_memattr_set_value()</a></code> (see <a class="el" href="a00222.html">Managing memory attributes</a>) modify the memory attributes of the topology.</p>
61 <p class="interdd"><code><a class="el" href="a00203.html#ga6db81ed13ac0a9d70cc80372ab537815" title="Restrict the topology to the given CPU set or nodeset.">hwloc_topology_restrict()</a></code> modifies the topology even more dramatically by removing some objects.</p>
62 <p class="interdd"><code><a class="el" href="a00203.html#ga698ecd640d2b76742bba3829a145cd9a" title="Refresh internal structures after topology modification.">hwloc_topology_refresh()</a></code> updates some internal cached structures. (see below).</p>
63 <p class="interdd">Although references to former objects <em>may</em> still be valid after insertion or restriction, it is strongly advised to not rely on any such guarantee and always re-consult the topology to reacquire new instances of objects. </p>
64 <p class="enddd"></p>
65 </dd>
66 <dt>Consulting distances </dt>
67 <dd><p class="startdd"><code><a class="el" href="a00217.html#ga613e6b2a5d0f06626ee8d0c12fa46691" title="Retrieve distance matrices.">hwloc_distances_get()</a></code> and its variants are thread-safe except if the topology was recently modified (because distances may involve objects that were removed).</p>
68 <p class="interdd">Whenever the topology is modified (see above), <code><a class="el" href="a00203.html#ga698ecd640d2b76742bba3829a145cd9a" title="Refresh internal structures after topology modification.">hwloc_topology_refresh()</a></code> should be called in the same thread-safe context to force the refresh of internal distances structures. A call to <code><a class="el" href="a00217.html#ga613e6b2a5d0f06626ee8d0c12fa46691" title="Retrieve distance matrices.">hwloc_distances_get()</a></code> may also refresh distances-related structures.</p>
69 <p class="interdd">Once this refresh has been performed, multiple <code><a class="el" href="a00217.html#ga613e6b2a5d0f06626ee8d0c12fa46691" title="Retrieve distance matrices.">hwloc_distances_get()</a></code> may then be performed concurrently by multiple threads. </p>
70 <p class="enddd"></p>
71 </dd>
72 <dt>Consulting memory attributes </dt>
73 <dd><p class="startdd">Functions consulting memory attributes in <a class="el" href="a00137_source.html">hwloc/memattrs.h</a> are thread-safe except if the topology was recently modified (because memory attributes may involve objects that were removed).</p>
74 <p class="interdd">Whenever the topology is modified (see above), <code><a class="el" href="a00203.html#ga698ecd640d2b76742bba3829a145cd9a" title="Refresh internal structures after topology modification.">hwloc_topology_refresh()</a></code> should be called in the same thread-safe context to force the refresh of internal memory attribute structures. A call to <code><a class="el" href="a00221.html#ga297e4a9adc2272446a4c7449dacef0df" title="Return an attribute value for a specific target NUMA node.">hwloc_memattr_get_value()</a></code> or <code><a class="el" href="a00222.html#ga3177cc0ab47e4dd1fa69ca1df4c7cb1a" title="Return the target NUMA nodes that have some values for a given attribute.">hwloc_memattr_get_targets()</a></code> may also refresh internal structures for a given memory attribute.</p>
75 <p class="interdd">Once this refresh has been performed, multiple functions consulting memory attributes may then be performed concurrently by multiple threads. </p>
76 <p class="enddd"></p>
77 </dd>
78 <dt>Locating topologies </dt>
79 <dd><p class="startdd"><code>hwloc_topology_set_*</code> (see <a class="el" href="a00202.html">Topology Detection Configuration and Query</a>) do not modify the topology directly, but they do modify internal structures describing the behavior of the upcoming invocation of <code><a class="el" href="a00195.html#gabdf58d87ad77f6615fccdfe0535ff826" title="Build the actual topology.">hwloc_topology_load()</a></code>. Hence, all of these functions should not be used concurrently. </p>
80 <p class="enddd"></p>
81 </dd>
82 </dl>
8083 </div></div><!-- contents -->
8184 </div><!-- PageDoc -->
8285 <!-- start footer part -->
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Components and plugins</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="PageDoc"><div class="header">
41 <div class="headertitle">
42 <div class="title">Components and plugins </div> </div>
43 </div><!--header-->
44 <div class="contents">
45 <div class="textblock"><p>
46 <div class="section">
47 </p>
48 <p>hwloc is organized in components that are responsible for discovering objects. Depending on the topology configuration, some components will be used, some will be ignored. The usual default is to enable the native operating system component, (e.g. <code>linux</code> or <code>solaris</code>) and the <code>pci</code> miscellaneous component. If available, an architecture-specific component (such as <code>x86</code>) may also improve the topology detection.</p>
49 <p>If a XML topology is loaded, the <code>xml</code> discovery component will be used instead of all other components. It internally uses a specific class of components for the actual XML import/export routines (<code>xml_libxml</code> and <code>xml_nolibxml</code>) but these will not be discussed here (see <a class="el" href="a00400.html#xml_backends">libxml2 and minimalistic XML backends</a>).</p>
50 <p>
51 </div><div class="section" id="plugins_default">
52 </p>
53 <h1><a class="anchor" id="plugins_default"></a>
54 Components enabled by default</h1>
55 <p>The hwloc core contains a list of components sorted by priority. Each one is enabled as long as it does not conflict with the previously enabled ones. This includes native operating system components, architecture-specific ones, and if available, I/O components such as <code>pci</code>.</p>
56 <p>Usually the native operating system component (when it exists, e.g. <code>linux</code> or <code>aix</code>) is enabled first. Then hwloc looks for an architecture specific component (e.g. <code>x86</code>). Finally there also exist a basic component (<code>no_os</code>) that just tries to discover the number of PUs in the system.</p>
57 <p>Each component discovers as much topology information as possible. Most of them, including most native OS components, do nothing unless the topology is still empty. Some others, such as <code>x86</code> and <code>pci</code>, can complete and annotate what other backends found earlier. Discovery is performed by phases: CPUs are first discovered, then memory is attached, then PCI, etc.</p>
58 <p>Default priorities ensure that clever components are invoked first. Native operating system components have higher priorities, and are therefore invoked first, because they likely offer very detailed topology information. If needed, it will be later extended by architecture-specific information (e.g. from the <code>x86</code> component).</p>
59 <p>If any configuration function such as <a class="el" href="a00201.html#ga879439b7ee99407ee911b3ac64e9a25e" title="Enable XML-file based topology.">hwloc_topology_set_xml()</a> is used before loading the topology, the corresponding component is enabled first. Then, as usual, hwloc enables any other component (based on priorities) that does not conflict.</p>
60 <p>Certain components that manage a virtual topology, for instance XML topology import or synthetic topology description, conflict with all other components. Therefore, one of them may only be loaded (e.g. with <code><a class="el" href="a00201.html#ga879439b7ee99407ee911b3ac64e9a25e" title="Enable XML-file based topology.">hwloc_topology_set_xml()</a></code>) if no other component is enabled.</p>
61 <p>The environment variable <code>HWLOC_COMPONENTS_VERBOSE</code> may be set to get verbose messages about component registration (including their priority) and enabling.</p>
62 <p>
63 </div><div class="section" id="plugins_select">
64 </p>
65 <h1><a class="anchor" id="plugins_select"></a>
66 Selecting which components to use</h1>
67 <p>If no topology configuration functions such as <code><a class="el" href="a00201.html#ga4fab186bb6181a00bcf585825fddd38d" title="Enable synthetic topology.">hwloc_topology_set_synthetic()</a></code> have been called, plugins may be selected with environment variables such as <code>HWLOC_XMLFILE</code>, <code>HWLOC_SYNTHETIC</code>, <code>HWLOC_FSROOT</code>, or <code>HWLOC_CPUID_PATH</code> (see <a class="el" href="a00394.html">Environment Variables</a>).</p>
68 <p>Finally, the environment variable <code>HWLOC_COMPONENTS</code> resets the list of selected components. If the variable is set and empty (or set to a single comma separating nothing, since some operating systems do not accept empty variables), the normal plugin priority order is used.</p>
69 <p>If the variable is set to <code>x86</code> in this variable will cause the <code>x86</code> component to take precedence over any other component, including the native operating system component. It is therefore loaded first, before hwloc tries to load all remaining non-conflicting components. In this case, <code>x86</code> would take care of discovering everything it supports, instead of only completing what the native OS information. This may be useful if the native component is buggy on some platforms.</p>
70 <p>It is possible to prevent some components from being loaded by prefixing their name with <code>-</code> in the list. For instance <code>x86,-pci</code> will load the <code>x86</code> component, then let hwloc load all the usual components except <code>pci</code>. A single component phase may also be blacklisted, for instance with <code>-linux:io</code>. <a class="el" href="a00201.html#ga9ad41adf418cee1c0ee32ba9bd4a3d36" title="Prevent a discovery component from being used for a topology.">hwloc_topology_set_components()</a> may also be used inside the program to prevent the loading of a specific component (or phases) for the target topology.</p>
71 <p>It is possible to prevent all remaining components from being loaded by placing <code>stop</code> in the environment variable. Only the components listed before this keyword will be enabled.</p>
72 <p>
73 </div><div class="section" id="plugins_load">
74 </p>
75 <h1><a class="anchor" id="plugins_load"></a>
76 Loading components from plugins</h1>
77 <p>Components may optionally be built as plugins so that the hwloc core library does not directly depend on their dependencies (for instance the <code>libpciaccess</code> library). Plugin support may be enabled with the <code>--enable-plugins</code> configure option. All components buildable as plugins will then be built as plugins. The configure option may be given a comma-separated list of component names to specify the exact list of components to build as plugins.</p>
78 <p>Plugins are built as independent dynamic libraries that are installed in <code>$libdir/hwloc</code>. All plugins found in this directory are loaded during <code>topology_init()</code> (unless blacklisted in <code>HWLOC_PLUGINS_BLACKLIST</code>, see <a class="el" href="a00394.html">Environment Variables</a>). A specific list of directories (colon-separated) to scan may be specified in the <code>HWLOC_PLUGINS_PATH</code> environment variable.</p>
79 <p>Note that loading a plugin just means that the corresponding component is registered to the hwloc core. Components are then only enabled if the topology configuration requests it, as explained in the previous sections.</p>
80 <p>Also note that plugins should carefully be enabled and used when embedding hwloc in another project, see <a class="el" href="a00405.html">Embedding hwloc in Other Software</a> for details.</p>
81 <p>
82 </div><div class="section" id="plugins_list">
83 </p>
84 <h1><a class="anchor" id="plugins_list"></a>
85 Existing components and plugins</h1>
86 <p>All components distributed within hwloc are listed below. The list of actually available components may be listed at running with the <code>HWLOC_COMPONENTS_VERBOSE</code> environment variable (see <a class="el" href="a00394.html">Environment Variables</a>).</p>
87 <dl>
88 <dt>linux </dt>
89 <dd>The official component for discovering CPU, memory and I/O devices on Linux. It discovers PCI devices without the help of external libraries such as libpciaccess, but requires the pci component for adding vendor/device names to PCI objects. It also discovers many kinds of Linux-specific OS devices. </dd>
90 <dt>aix, darwin, freebsd, hpux, netbsd, solaris, windows </dt>
91 <dd>Each officially supported operating system has its own native component, which is statically built when supported, and which is used by default. </dd>
92 <dt>x86 </dt>
93 <dd>The x86 architecture (either 32 or 64 bits) has its own component that may complete or replace the previously-found CPU information. It is statically built when supported. </dd>
94 <dt>bgq </dt>
95 <dd>This component is specific to IBM BlueGene/Q compute node (running CNK). It is built and enabled by default when <code>--host=powerpc64-bgq-linux</code> is passed to configure (see <a class="el" href="a00406.html#faq_bgq">How do I build hwloc for BlueGene/Q?</a>). </dd>
96 <dt>no_os </dt>
97 <dd>A basic component that just tries to detect the number of processing units in the system. It mostly serves on operating systems that are not natively supported. It is always statically built. </dd>
98 <dt>pci </dt>
99 <dd>PCI object discovery uses the external pciaccess library (aka libpciaccess); see <a class="el" href="a00396.html">I/O Devices</a>. It may also annotate existing PCI devices with vendor and device names. <b>It may be built as a plugin</b>. </dd>
100 <dt>opencl </dt>
101 <dd>The OpenCL component creates co-processor OS device objects such as <em>opencl0d0</em> (first device of the first OpenCL platform) or <em>opencl1d3</em> (fourth device of the second platform). Only the AMD and NVIDIA OpenCL implementations currently offer locality information. <b>It may be built as a plugin</b>. </dd>
102 <dt>rsmi </dt>
103 <dd>This component creates GPU OS device objects such as <em>rsmi0</em> for describing AMD GPUs. <b>It may be built as a plugin</b>. </dd>
104 <dt>levelzero </dt>
105 <dd>This component creates co-processor OS device objects such as <em>ze0</em> for describing oneAPI Level Zero devices. <b>It may be built as a plugin</b>. </dd>
106 <dt>cuda </dt>
107 <dd>This component creates co-processor OS device objects such as <em>cuda0</em> that correspond to NVIDIA GPUs used with CUDA library. <b>It may be built as a plugin</b>. </dd>
108 <dt>nvml </dt>
109 <dd>Probing the NVIDIA Management Library creates OS device objects such as <em>nvml0</em> that are useful for batch schedulers. It also detects the actual PCIe link bandwidth without depending on power management state and without requiring administrator privileges. <b>It may be built as a plugin</b>. </dd>
110 <dt>gl </dt>
111 <dd>Probing the NV-CONTROL X extension (NVCtrl library) creates OS device objects such as <em>:0.0</em> corresponding to NVIDIA displays. They are useful for graphical applications that need to place computation and/or data near a rendering GPU. <b>It may be built as a plugin</b>. </dd>
112 <dt>synthetic </dt>
113 <dd>Synthetic topology support (see <a class="el" href="a00401.html">Synthetic topologies</a>) is always built statically. </dd>
114 <dt>xml </dt>
115 <dd>XML topology import (see <a class="el" href="a00400.html">Importing and exporting topologies from/to XML files</a>) is always built statically. It internally uses one of the XML backends (see <a class="el" href="a00400.html#xml_backends">libxml2 and minimalistic XML backends</a>). <ul>
116 <li>
117 <b>xml_nolibxml</b> is a basic and hwloc-specific XML import/export. It is always statically built. </li>
118 <li>
119 <b>xml_libxml</b> relies on the external libxml2 library for provinding a feature-complete XML import/export. <b>It may be built as a plugin</b>. </li>
120 </ul>
121 </dd>
122 <dt>fake </dt>
123 <dd>A dummy plugin that does nothing but is used for debugging plugin support. </dd>
124 </dl>
125 </div></div><!-- contents -->
126 </div><!-- PageDoc -->
127 <!-- start footer part -->
128 <hr class="footer"/><address class="footer"><small>
129 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
130 </small></address>
131 </body>
132 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Embedding hwloc in Other Software</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="PageDoc"><div class="header">
41 <div class="headertitle">
42 <div class="title">Embedding hwloc in Other Software </div> </div>
43 </div><!--header-->
44 <div class="contents">
45 <div class="textblock"><p>
46 <div class="section">
47 </p>
48 <p>It can be desirable to include hwloc in a larger software package (be sure to check out the LICENSE file) so that users don't have to separately download and install it before installing your software. This can be advantageous to ensure that your software uses a known-tested/good version of hwloc, or for use on systems that do not have hwloc pre-installed.</p>
49 <p>When used in "embedded" mode, hwloc will:</p>
50 <ul>
51 <li>not install any header files</li>
52 <li>not build any documentation files</li>
53 <li>not build or install any executables or tests</li>
54 <li>not build <code>libhwloc.*</code> &ndash; instead, it will build <code>libhwloc_embedded.*</code></li>
55 </ul>
56 <p>There are two ways to put hwloc into "embedded" mode. The first is directly from the configure command line:</p>
57 <pre class="fragment">shell$ ./configure --enable-embedded-mode ...
58 </pre><p>The second requires that your software project uses the GNU Autoconf / Automake / Libtool tool chain to build your software. If you do this, you can directly integrate hwloc's m4 configure macro into your configure script. You can then invoke hwloc's configuration tests and build setup by calling a m4 macro (see below).</p>
59 <p>Although hwloc dynamic shared object plugins may be used in embedded mode, the embedder project will have to manually setup dlopen or libltdl in its build system so that hwloc can load its plugins at run time. Also, embedders should be aware of complications that can arise due to public and private linker namespaces (e.g., if the embedder project is loaded into a private namespace and then hwloc tries to dynamically load its plugins, such loading may fail since the hwloc plugins can't find the hwloc symbols they need). The embedder project is <b>strongly</b> advised not to use hwloc's dynamically loading plugins / dlopen / libltdl capability.</p>
60 <p>
61 </div><div class="section" id="embedding_m4">
62 </p>
63 <h1><a class="anchor" id="embedding_m4"></a>
64 Using hwloc's M4 Embedding Capabilities</h1>
65 <p>Every project is different, and there are many different ways of integrating hwloc into yours. What follows is <em>one</em> example of how to do it.</p>
66 <p>If your project uses recent versions Autoconf, Automake, and Libtool to build, you can use hwloc's embedded m4 capabilities. We have tested the embedded m4 with projects that use Autoconf 2.65, Automake 1.11.1, and Libtool 2.2.6b. Slightly earlier versions of may also work but are untested. Autoconf versions prior to 2.65 are almost certain to not work.</p>
67 <p>You can either copy all the config/hwloc*m4 files from the hwloc source tree to the directory where your project's m4 files reside, or you can tell aclocal to find more m4 files in the embedded hwloc's "config" subdirectory (e.g., add "-Ipath/to/embedded/hwloc/config" to your Makefile.am's ACLOCAL_AMFLAGS).</p>
68 <p>The following macros can then be used from your configure script (only HWLOC_SETUP_CORE <em>must</em> be invoked if using the m4 macros):</p>
69 <ul>
70 <li><p class="startli">HWLOC_SETUP_CORE(config-dir-prefix, action-upon-success, action-upon-failure, print_banner_or_not): Invoke the hwloc configuration tests and setup the hwloc tree to build. The first argument is the prefix to use for AC_OUTPUT files &ndash; it's where the hwloc tree is located relative to <code>$top_srcdir</code>. Hence, if your embedded hwloc is located in the source tree at contrib/hwloc, you should pass <code>[contrib/hwloc]</code> as the first argument. If HWLOC_SETUP_CORE and the rest of <code>configure</code> completes successfully, then "make" traversals of the hwloc tree with standard Automake targets (all, clean, install, etc.) should behave as expected. For example, it is safe to list the hwloc directory in the SUBDIRS of a higher-level Makefile.am. The last argument, if not empty, will cause the macro to display an announcement banner that it is starting the hwloc core configuration tests.</p>
71 <p class="startli">HWLOC_SETUP_CORE will set the following environment variables and AC_SUBST them: HWLOC_EMBEDDED_CFLAGS, HWLOC_EMBEDDED_CPPFLAGS, and HWLOC_EMBEDDED_LIBS. These flags are filled with the values discovered in the hwloc-specific m4 tests, and can be used in your build process as relevant. The _CFLAGS, _CPPFLAGS, and _LIBS variables are necessary to build libhwloc (or libhwloc_embedded) itself.</p>
72 <p class="startli">HWLOC_SETUP_CORE also sets HWLOC_EMBEDDED_LDADD environment variable (and AC_SUBSTs it) to contain the location of the libhwloc_embedded.la convenience Libtool archive. It can be used in your build process to link an application or other library against the embedded hwloc library.</p>
73 <p class="startli"><b>NOTE: If the HWLOC_SET_SYMBOL_PREFIX macro is used, it must be invoked <em>before</em> HWLOC_SETUP_CORE.</b></p>
74 </li>
75 <li>HWLOC_BUILD_STANDALONE: HWLOC_SETUP_CORE defaults to building hwloc in an "embedded" mode (described above). If HWLOC_BUILD_STANDALONE is invoked *before* HWLOC_SETUP_CORE, the embedded definitions will not apply (e.g., libhwloc.la will be built, not libhwloc_embedded.la).</li>
76 <li>HWLOC_SET_SYMBOL_PREFIX(foo_): Tells the hwloc to prefix all of hwloc's types and public symbols with "foo_"; meaning that function hwloc_init() becomes foo_hwloc_init(). Enum values are prefixed with an upper-case translation if the prefix supplied; HWLOC_OBJ_CORE becomes FOO_hwloc_OBJ_CORE. This is recommended behavior if you are including hwloc in middleware &ndash; it is possible that your software will be combined with other software that links to another copy of hwloc. If both uses of hwloc utilize different symbol prefixes, there will be no type/symbol clashes, and everything will compile, link, and run successfully. If you both embed hwloc without changing the symbol prefix and also link against an external hwloc, you may get multiple symbol definitions when linking your final library or application.</li>
77 <li>HWLOC_SETUP_DOCS, HWLOC_SETUP_UTILS, HWLOC_SETUP_TESTS: These three macros only apply when hwloc is built in "standalone" mode (i.e., they should NOT be invoked unless HWLOC_BUILD_STANDALONE has already been invoked).</li>
78 <li>HWLOC_DO_AM_CONDITIONALS: If you embed hwloc in a larger project and build it conditionally with Automake (e.g., if HWLOC_SETUP_CORE is invoked conditionally), you must unconditionally invoke HWLOC_DO_AM_CONDITIONALS to avoid warnings from Automake (for the cases where hwloc is not selected to be built). This macro is necessary because hwloc uses some AM_CONDITIONALs to build itself, and AM_CONDITIONALs cannot be defined conditionally. Note that it is safe (but unnecessary) to call HWLOC_DO_AM_CONDITIONALS even if HWLOC_SETUP_CORE is invoked unconditionally. If you are not using Automake to build hwloc, this macro is unnecessary (and will actually cause errors because it invoked AM_* macros that will be undefined).</li>
79 </ul>
80 <p><b>NOTE:</b> When using the HWLOC_SETUP_CORE m4 macro, it may be necessary to explicitly invoke AC_CANONICAL_TARGET (which requires config.sub and config.guess) and/or AC_USE_SYSTEM_EXTENSIONS macros early in the configure script (e.g., after AC_INIT but before AM_INIT_AUTOMAKE). See the Autoconf documentation for further information.</p>
81 <p>Also note that hwloc's top-level configure.ac script uses exactly the macros described above to build hwloc in a standalone mode (by default). You may want to examine it for one example of how these macros are used.</p>
82 <p>
83 </div><div class="section" id="embedding_example">
84 </p>
85 <h1><a class="anchor" id="embedding_example"></a>
86 Example Embedding hwloc</h1>
87 <p>Here's an example of integrating with a larger project named sandbox that already uses Autoconf, Automake, and Libtool to build itself:</p>
88 <pre class="fragment"># First, cd into the sandbox project source tree
89 shell$ cd sandbox
90 shell$ cp -r /somewhere/else/hwloc-&lt;version&gt; my-embedded-hwloc
91 shell$ edit Makefile.am
92 1. Add "-Imy-embedded-hwloc/config" to ACLOCAL_AMFLAGS
93 2. Add "my-embedded-hwloc" to SUBDIRS
94 3. Add "$(HWLOC_EMBEDDED_LDADD)" and "$(HWLOC_EMBEDDED_LIBS)" to
95 sandbox's executable's LDADD line. The former is the name of the
96 Libtool convenience library that hwloc will generate. The latter
97 is any dependent support libraries that may be needed by
98 $(HWLOC_EMBEDDED_LDADD).
99 4. Add "$(HWLOC_EMBEDDED_CFLAGS)" to AM_CFLAGS
100 5. Add "$(HWLOC_EMBEDDED_CPPFLAGS)" to AM_CPPFLAGS
101 shell$ edit configure.ac
102 1. Add "HWLOC_SET_SYMBOL_PREFIX(sandbox_hwloc_)" line
103 2. Add "HWLOC_SETUP_CORE([my-embedded-hwloc], [happy=yes], [happy=no])" line
104 3. Add error checking for happy=no case
105 shell$ edit sandbox.c
106 1. Add #include &lt;hwloc.h&gt;
107 2. Add calls to sandbox_hwloc_init() and other hwloc API functions
108 </pre><p>Now you can bootstrap, configure, build, and run the sandbox as normal &ndash; all calls to "sandbox_hwloc_*" will use the embedded hwloc rather than any system-provided copy of hwloc. </p>
109 </div></div><!-- contents -->
110 </div><!-- PageDoc -->
111 <!-- start footer part -->
112 <hr class="footer"/><address class="footer"><small>
113 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
114 </small></address>
115 </body>
116 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Frequently Asked Questions</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="PageDoc"><div class="header">
41 <div class="headertitle">
42 <div class="title">Frequently Asked Questions </div> </div>
43 </div><!--header-->
44 <div class="contents">
45 <div class="textblock"><p>
46 <div class="section" id="faq1">
47 </p>
48 <h1><a class="anchor" id="faq1"></a>
49 Concepts</h1>
50 <h2><a class="anchor" id="faq_why"></a>
51 I only need binding, why should I use hwloc ?</h2>
52 <p>hwloc is its portable API that works on a variety of operating systems. It supports binding of threads, processes and memory buffers (see <a class="el" href="a00199.html">CPU binding</a> and <a class="el" href="a00200.html">Memory binding</a>). Even if some features are not supported on some systems, using hwloc is much easier than reimplementing your own portability layer.</p>
53 <p>Moreover, hwloc provides knowledge of cores and hardware threads. It offers easy ways to bind tasks to individual hardware threads, or to entire multithreaded cores, etc. See <a class="el" href="a00406.html#faq_smt">How may I ignore symmetric multithreading, hyper-threading, etc. in hwloc?</a>. Most alternative software for binding do not even know whether each core is single-threaded, multithreaded or hyper-threaded. They would bind to individual threads without any way to know whether multiple tasks are in the same physical core.</p>
54 <p>However, using hwloc comes with an overhead since a topology must be loaded before gathering information and binding tasks or memory. Fortunately this overhead may be significantly reduced by filtering non-interesting information out of the topology. For instance the following code builds a topology that only contains Cores (explicitly filtered-in below), hardware threads (PUs, cannot be filtered-out), NUMA nodes (cannot be filtered-out), and the root object (usually a Machine; the root cannot be removed without breaking the tree).</p>
55 <pre class="fragment">hwloc_topology_t topology;
56 hwloc_topology_init(&amp;topology);
57 /* filter everything out */
58 hwloc_topology_set_all_types_filter(topology, HWLOC_TYPE_FILTER_KEEP_NONE);
59 /* filter Cores back in */
60 hwloc_topology_set_type_filter(topology, HWLOC_OBJ_CORE, HWLOC_TYPE_FILTER_KEEP_ALL);
61 hwloc_topology_load(topology);
62 </pre><p>However, one should remember that filtering such objects out removes locality information from the hwloc tree. For instance, we do not know anymore which PU is close to which NUMA node. This would be useful to applications that explicitly want to place specific memory buffers close to specific tasks. Those applications just need to tell hwloc to keep Group objects that bring structure information: </p><pre class="fragment">hwloc_topology_set_type_filter(topology, HWLOC_OBJ_GROUP, HWLOC_TYPE_FILTER_KEEP_STRUCTURE);
63 </pre><p>Note that the default configuration is to keep all objects enabled, except I/Os and instruction caches.</p>
64 <h2><a class="anchor" id="faq_indexes"></a>
65 Should I use logical or physical/OS indexes? and how?</h2>
66 <p>One of the original reasons why hwloc was created is that <b>physical/OS indexes</b> (<code>obj-&gt;os_index</code>) are often crazy and unpredictable: processors numbers are usually non-contiguous (processors 0 and 1 are not physically close), they vary from one machine to another, and may even change after a BIOS or system update. This numbers make task placement hardly portable. Moreover some objects have no physical/OS numbers (caches), and some objects have non-unique numbers (core numbers are only unique within a socket). Physical/OS indexes are only guaranteed to exist and be unique for PU and NUMA nodes.</p>
67 <p>hwloc therefore introduces <b>logical indexes</b> (<code>obj-&gt;logical_index</code>) which are portable, contiguous and logically ordered (based on the resource organization in the locality tree). In general, one should only use logical indexes and just let hwloc do the internal conversion when really needed (when talking to the OS and hardware).</p>
68 <p>hwloc developers recommends that users do not use physical/OS indexes unless they really know what they are doing. The main reason for still using physical/OS indexes is when interacting with non-hwloc tools such as numactl or taskset, or when reading hardware information from raw sources such as /proc/cpuinfo.</p>
69 <p>lstopo options <code>-l</code> and <code>-p</code> may be used to switch between logical indexes (prefixed with <code>L#</code>) and physical/OS indexes (<code>P#</code>). Converting one into the other may also be achieved with hwloc-calc which may manipulate either logical or physical indexes as input or output. See also <a class="el" href="a00393.html#cli_hwloc_calc">hwloc-calc</a>.</p>
70 <pre class="fragment"># Convert PU with physical number 3 into logical number
71 $ hwloc-calc -I pu --physical-input --logical-output pu:3
72 5
73
74 # Convert a set of NUMA nodes from logical to physical
75 # (beware that the output order may not match the input order)
76 $ hwloc-calc -I numa --logical-input --physical-output numa:2-3 numa:7
77 0,2,5
78 </pre><h2><a class="anchor" id="faq_structural"></a>
79 hwloc is only a structural model, it ignores performance models, memory bandwidth, etc.?</h2>
80 <p>hwloc is indeed designed to provide applications with a structural model of the platform. This is an orthogonal approach to describing the machine with performance models, for instance using memory bandwidth or latencies measured by benchmarks. We believe that both approaches are important for helping application make the most of the hardware.</p>
81 <p>For instance, on a dual-processor host with four cores each, hwloc clearly shows which four cores are together. Latencies between all pairs of cores of the same processor are likely identical, and also likely lower than the latency between cores of different processors. However, the structural model cannot guarantee such implementation details. On the other side, performance models would reveal such details without always clearly identifying which cores are in the same processor.</p>
82 <p>The focus of hwloc is mainly of the structural modeling side. However, hwloc lets user adds performance information to the topology through distances (see <a class="el" href="a00399.html#topoattrs_distances">Distances</a>), memory attributes (see <a class="el" href="a00399.html#topoattrs_memattrs">Memory Attributes</a>) or even custom annotations (see <a class="el" href="a00406.html#faq_annotate">How do I annotate the topology with private notes?</a>). hwloc may also use such distance information for grouping objects together (see <a class="el" href="a00406.html#faq_onedim">hwloc only has a one-dimensional view of the architecture, it ignores distances?</a> and <a class="el" href="a00406.html#faq_groups">What are these Group objects in my topology?</a>).</p>
83 <h2><a class="anchor" id="faq_onedim"></a>
84 hwloc only has a one-dimensional view of the architecture, it ignores distances?</h2>
85 <p>hwloc places all objects in a tree. Each level is a one-dimensional view of a set of similar objects. All children of the same object (siblings) are assumed to be equally interconnected (same distance between any of them), while the distance between children of different objects (cousins) is supposed to be larger.</p>
86 <p>Modern machines exhibit complex hardware interconnects, so this tree may miss some information about the actual physical distances between objects. The hwloc topology may therefore be annotated with distance information that may be used to build a more realistic representation (multi-dimensional) of each level. For instance, there can be a distance matrix that representing the latencies between any pair of NUMA nodes if the BIOS and/or operating system reports them.</p>
87 <p>For more information about the hwloc distances, see <a class="el" href="a00399.html#topoattrs_distances">Distances</a>.</p>
88 <h2><a class="anchor" id="faq_groups"></a>
89 What are these Group objects in my topology?</h2>
90 <p>hwloc comes with a set of predefined object types (Core, Package, NUMA node, Caches) that match the vast majority of hardware platforms. The <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a5269ef95be72f88465559d35c9b7ad56" title="Group objects. Objects which do not fit in the above but are detected by hwloc and are useful to take...">HWLOC_OBJ_GROUP</a> type was designed for cases where this set is not sufficient. Groups may be used anywhere to add more structure information to the topology, for instance to show that 2 out of 4 NUMA nodes are actually closer than the others. When applicable, the <code>subtype</code> field describes why a Group was actually added (see also <a class="el" href="a00398.html#attributes_normal">Normal attributes</a>).</p>
91 <p>hwloc currently uses Groups for the following reasons: </p><ul>
92 <li>
93 NUMA parents when memory locality does not match any existing object. </li>
94 <li>
95 I/O parents when I/O locality does not match any existing object. </li>
96 <li>
97 Distance-based groups made of close objects. </li>
98 <li>
99 AMD Bulldozer dual-core compute units (<code>subtype</code> is <code>ComputeUnit</code>, in the x86 backend), but these objects are usually merged with the L2 caches. </li>
100 <li>
101 Intel Extended Topology Enumeration levels (in the x86 backend). </li>
102 <li>
103 Windows processor groups (unless they contain a single NUMA node, or a single Package, etc.). </li>
104 <li>
105 IBM S/390 "Books" on Linux (<code>subtype</code> is <code>Book</code>). </li>
106 <li>
107 AIX unknown hierarchy levels. </li>
108 </ul>
109 <p>hwloc Groups are only kept if no other object has the same locality information. It means that a Group containing a single child is merged into that child. And a Group is merged into its parent if it is its only child. For instance a Windows processor group containing a single NUMA node would be merged with that NUMA node since it already contains the relevant hierarchy information.</p>
110 <p>When inserting a custom Group with hwloc_hwloc_topology_insert_group_object(), this merging may be disabled by setting its <code>dont_merge</code> attribute.</p>
111 <h2><a class="anchor" id="faq_asymmetric"></a>
112 What happens if my topology is asymmetric?</h2>
113 <p>hwloc supports asymmetric topologies even if most platforms are usually symmetric. For example, there could be different types of processors in a single machine, each with different numbers of cores, symmetric multithreading, or levels of caches.</p>
114 <p>In practice, asymmetric topologies mostly appear when intermediate groups are added for I/O affinity: on a 4-package machine, an I/O bus may be connected to 2 packages. These packages are below an additional Group object, while the other packages are not (see also <a class="el" href="a00406.html#faq_groups">What are these Group objects in my topology?</a>).</p>
115 <p>To understand how hwloc manages such cases, one should first remember the meaning of levels and cousin objects. All objects of the same type are gathered as horizontal levels with a given depth. They are also connected through the cousin pointers of the <a class="el" href="a00250.html" title="Structure of a topology object.">hwloc_obj</a> structure. Object attribute (cache depth and type, group depth) are also taken in account when gathering objects as horizontal levels. To be clear: there will be one level for L1i caches, another level for L1d caches, another one for L2, etc.</p>
116 <p>If the topology is asymmetric (e.g., if a group is missing above some processors), a given horizontal level will still exist if there exist any objects of that type. However, some branches of the overall tree may not have an object located in that horizontal level. Note that this specific hole within one horizontal level does not imply anything for other levels. All objects of the same type are gathered in horizontal levels even if their parents or children have different depths and types.</p>
117 <p>See the diagram in <a class="el" href="a00392.html">Terms and Definitions</a> for a graphical representation of such topologies.</p>
118 <p>Moreover, it is important to understand that a same parent object may have children of different types (and therefore, different depths). <b>These children are therefore siblings (because they have the same parent), but they are <em>not</em> cousins (because they do not belong to the same horizontal level).</b></p>
119 <h2><a class="anchor" id="faq_nosmt"></a>
120 What happens to my topology if I disable symmetric multithreading, hyper-threading, etc. in the system?</h2>
121 <p>hwloc creates one PU (processing unit) object per hardware thread. If your machine supports symmetric multithreading, for instance Hyper-Threading, each Core object may contain multiple PU objects: </p><pre class="fragment">$ lstopo -
122 ...
123 Core L#0
124 PU L#0 (P#0)
125 PU L#1 (P#2)
126 Core L#1
127 PU L#2 (P#1)
128 PU L#3 (P#3)
129 </pre><p>x86 machines usually offer the ability to disable hyper-threading in the BIOS. Or it can be disabled on the Linux kernel command-line at boot time, or later by writing in sysfs virtual files.</p>
130 <p>If you do so, the hwloc topology structure does not significantly change, but some PU objects will not appear anymore. No level will disappear, you will see the same number of Core objects, but each of them will contain a single PU now. The PU level does not disappear either (remember that hwloc topologies always contain a PU level at the bottom of the topology) even if there is a single PU object per Core parent. </p><pre class="fragment">$ lstopo -
131 ...
132 Core L#0
133 PU L#0 (P#0)
134 Core L#1
135 PU L#1 (P#1)
136 </pre><h2><a class="anchor" id="faq_smt"></a>
137 How may I ignore symmetric multithreading, hyper-threading, etc. in hwloc?</h2>
138 <p>First, see <a class="el" href="a00406.html#faq_nosmt">What happens to my topology if I disable symmetric multithreading, hyper-threading, etc. in the system?</a> for more information about multithreading.</p>
139 <p>If you need to ignore symmetric multithreading in software, you should likely manipulate hwloc Core objects directly: </p><pre class="fragment">/* get the number of cores */
140 unsigned nbcores = hwloc_get_nbobjs_by_type(topology, HWLOC_OBJ_CORE);
141 ...
142 /* get the third core below the first package */
143 hwloc_obj_t package, core;
144 package = hwloc_get_obj_by_type(topology, HWLOC_OBJ_PACKAGE, 0);
145 core = hwloc_get_obj_inside_cpuset_by_type(topology, package-&gt;cpuset,
146 HWLOC_OBJ_CORE, 2);
147 </pre><p>Whenever you want to bind a process or thread to a core, make sure you singlify its cpuset first, so that the task is actually bound to a single thread within this core (to avoid useless migrations). </p><pre class="fragment">/* bind on the second core */
148 hwloc_obj_t core = hwloc_get_obj_by_type(topology, HWLOC_OBJ_CORE, 1);
149 hwloc_cpuset_t set = hwloc_bitmap_dup(core-&gt;cpuset);
150 hwloc_bitmap_singlify(set);
151 hwloc_set_cpubind(topology, set, 0);
152 hwloc_bitmap_free(set);
153 </pre><p>With hwloc-calc or hwloc-bind command-line tools, you may specify that you only want a single-thread within each core by asking for their first PU object: </p><pre class="fragment">$ hwloc-calc core:4-7
154 0x0000ff00
155 $ hwloc-calc core:4-7.pu:0
156 0x00005500
157 </pre><p>When binding a process on the command-line, you may either specify the exact thread that you want to use, or ask hwloc-bind to singlify the cpuset before binding </p><pre class="fragment">$ hwloc-bind core:3.pu:0 -- echo "hello from first thread on core #3"
158 hello from first thread on core #3
159 ...
160 $ hwloc-bind core:3 --single -- echo "hello from a single thread on core #3"
161 hello from a single thread on core #3
162 </pre><p>
163 </div><div class="section" id="faq2">
164 </p>
165 <h1><a class="anchor" id="faq2"></a>
166 Advanced</h1>
167 <h2><a class="anchor" id="faq_xml"></a>
168 I do not want hwloc to rediscover my enormous machine topology every time I rerun a process</h2>
169 <p>Although the topology discovery is not expensive on common machines, its overhead may become significant when multiple processes repeat the discovery on large machines (for instance when starting one process per core in a parallel application). The machine topology usually does not vary much, except if some cores are stopped/restarted or if the administrator restrictions are modified. Thus rediscovering the whole topology again and again may look useless.</p>
170 <p>For this purpose, hwloc offers XML import/export and shared memory features.</p>
171 <p>XML lets you save the discovered topology to a file (for instance with the lstopo program) and reload it later by setting the HWLOC_XMLFILE environment variable. The HWLOC_THISSYSTEM environment variable should also be set to 1 to assert that loaded file is really the underlying system.</p>
172 <p>Loading a XML topology is usually much faster than querying multiple files or calling multiple functions of the operating system. It is also possible to manipulate such XML files with the C programming interface, and the import/export may also be directed to memory buffer (that may for instance be transmitted between applications through a package). See also <a class="el" href="a00400.html">Importing and exporting topologies from/to XML files</a>.</p>
173 <dl class="section note"><dt>Note</dt><dd>The environment variable HWLOC_THISSYSTEM_ALLOWED_RESOURCES may be used to load a XML topology that contains the entire machine and restrict it to the part that is actually available to the current process (e.g. when Linux Cgroup/Cpuset are used to restrict the set of resources). See <a class="el" href="a00394.html">Environment Variables</a>.</dd></dl>
174 <p>Shared-memory topologies consist in one process exposing its topology in a shared-memory buffer so that other processes (running on the same machine) may use it directly. This has the advantage of reducing the memory footprint since a single topology is stored in physical memory for multiple processes. However, it requires all processes to map this shared-memory buffer at the same virtual address, which may be difficult in some cases. This API is described in <a class="el" href="a00238.html">Sharing topologies between processes</a>.</p>
175 <h2><a class="anchor" id="faq_multitopo"></a>
176 How many topologies may I use in my program?</h2>
177 <p>hwloc lets you manipulate multiple topologies at the same time. However, these topologies consume memory and system resources (for instance file descriptors) until they are destroyed. It is therefore discouraged to open the same topology multiple times.</p>
178 <p>Sharing a single topology between threads is easy (see <a class="el" href="a00403.html">Thread Safety</a>) since the vast majority of accesses are read-only.</p>
179 <p>If multiple topologies of different (but similar) nodes are needed in your program, have a look at <a class="el" href="a00406.html#faq_diff">How to avoid memory waste when manipulating multiple similar topologies?</a>.</p>
180 <h2><a class="anchor" id="faq_diff"></a>
181 How to avoid memory waste when manipulating multiple similar topologies?</h2>
182 <p>hwloc does not share information between topologies. If multiple similar topologies are loaded in memory, for instance the topologies of different identical nodes of a cluster, lots of information will be duplicated.</p>
183 <p><a class="el" href="a00179_source.html">hwloc/diff.h</a> (see also <a class="el" href="a00237.html">Topology differences</a>) offers the ability to compute topology differences, apply or unapply them, or export/import to/from XML. However, this feature is limited to basic differences such as attribute changes. It does not support complex modifications such as adding or removing some objects.</p>
184 <h2><a class="anchor" id="faq_annotate"></a>
185 How do I annotate the topology with private notes?</h2>
186 <p>Each hwloc object contains a <code>userdata</code> field that may be used by applications to store private pointers. This field is only valid during the lifetime of these container object and topology. It becomes invalid as soon the topology is destroyed, or as soon as the object disappears, for instance when restricting the topology. The userdata field is not exported/imported to/from XML by default since hwloc does not know what it contains. This behavior may be changed by specifying application-specific callbacks with <code><a class="el" href="a00215.html#ga9d6ff0f7a8dd45be9aa8575ef31978cc" title="Set the application-specific callback for exporting object userdata.">hwloc_topology_set_userdata_export_callback()</a></code> and <code><a class="el" href="a00215.html#ga5ac6917ea7289955fb1ffda4353af9b0" title="Set the application-specific callback for importing userdata.">hwloc_topology_set_userdata_import_callback()</a></code>.</p>
187 <p>Each object may also contain some <em>info</em> attributes (key name and value) that are setup by hwloc during discovery and that may be extended by the user with <code><a class="el" href="a00198.html#gace7654bb8a9002caae1a4b8a59e7452e" title="Add the given info name and value pair to the given object.">hwloc_obj_add_info()</a></code> (see also <a class="el" href="a00398.html">Object attributes</a>). Contrary to the <code>userdata</code> field which is unique, multiple info attributes may exist for each object, even with the same name. These attributes are always exported to XML. However, only character strings may be used as key names and values.</p>
188 <p>It is also possible to insert Misc objects with a custom name anywhere as a leaf of the topology (see <a class="el" href="a00397.html">Miscellaneous objects</a>). And Misc objects may have their own userdata and info attributes just like any other object.</p>
189 <p>The hwloc-annotate command-line tool may be used for adding Misc objects and info attributes.</p>
190 <p>There is also a topology-specific userdata pointer that can be used to recognize different topologies by storing a custom pointer. It may be manipulated with <code><a class="el" href="a00202.html#ga2cc7b7b155cba58dda203e54f1637b9c" title="Set the topology-specific userdata pointer.">hwloc_topology_set_userdata()</a></code> and <code><a class="el" href="a00202.html#ga91f992f8d6c4905b2d3c4f43e509c2a3" title="Retrieve the topology-specific userdata pointer.">hwloc_topology_get_userdata()</a></code>.</p>
191 <p>
192 </div><div class="section" id="faq3">
193 </p>
194 <h1><a class="anchor" id="faq3"></a>
195 Caveats</h1>
196 <h2><a class="anchor" id="faq_slow_lstopo"></a>
197 Why is hwloc slow?</h2>
198 <p>Building a hwloc topology on a large machine may be slow because the discovery of hundreds of hardware cores or threads takes time (especially when reading thousands of sysfs files on Linux). Ignoring some objects (for instance caches) that aren't useful to the current application may improve this overhead (see <a class="el" href="a00406.html#faq_why">I only need binding, why should I use hwloc ?</a>). One should also consider using XML (see <a class="el" href="a00406.html#faq_xml">I do not want hwloc to rediscover my enormous machine topology every time I rerun a process</a>) to work around such issues.</p>
199 <p>Additionally, lstopo enables most hwloc objects and discovery flags by default so that the output topology is as precise as possible (while hwloc disables many of them by default). This includes I/O device discovery through PCI libraries as well as external libraries such as NVML. To speed up lstopo, you may disable such features with command-line options such as <code>--no-io</code>.</p>
200 <p>When NVIDIA GPU probing is enabled with CUDA or NVML, one should make sure that the <em>Persistent</em> mode is enabled (with <code>nvidia-smi -pm 1</code>) to avoid significant GPU initialization overhead.</p>
201 <p>When AMD GPU discovery is enabled with OpenCL and hwloc is used remotely over ssh, some spurious round-trips on the network may significantly increase the discovery time. Forcing the <code>DISPLAY</code> environment variable to the remote X server display (usually <code>:0</code>) instead of only setting the <code>COMPUTE</code> variable may avoid this.</p>
202 <p>Also remember that these components may be disabled at build-time with configure flags such as <code>--disable-opencl</code>, <code>--disable-cuda</code> or <code>--disable-nvml</code>, and at runtime with the environment variable <code>HWLOC_COMPONENTS=-opencl,-cuda,-nvml</code> or with <a class="el" href="a00201.html#ga9ad41adf418cee1c0ee32ba9bd4a3d36" title="Prevent a discovery component from being used for a topology.">hwloc_topology_set_components()</a>.</p>
203 <h2><a class="anchor" id="faq_privileged"></a>
204 Does hwloc require privileged access?</h2>
205 <p>hwloc discovers the topology by querying the operating system. Some minor features may require privileged access to the operation system. For instance memory module discovery on Linux is reserved to root, and the entire PCI discovery on Solaris and BSDs requires access to some special files that are usually restricted to root (/dev/pci* or /devices/pci*).</p>
206 <p>To workaround this limitation, it is recommended to export the topology as a XML file generated by the administrator (with the lstopo program) and make it available to all users (see <a class="el" href="a00400.html">Importing and exporting topologies from/to XML files</a>). It will offer all discovery information to any application without requiring any privileged access anymore. Only the necessary hardware characteristics will be exported, no sensitive information will be disclosed through this XML export.</p>
207 <p>This XML-based model also has the advantage of speeding up the discovery because reading a XML topology is usually much faster than querying the operating system again.</p>
208 <p>The utility <code>hwloc-dump-hwdata</code> is also involved in gathering privileged information at boot time and making it available to non-privileged users (note that this may require a specific SELinux MLS policy module). However, it only applies to Intel Xeon Phi processors for now (see <a class="el" href="a00406.html#faq_knl_dump">Why do I need hwloc-dump-hwdata for memory on Intel Xeon Phi processor?</a>). See also <code>HWLOC_DUMPED_HWDATA_DIR</code> in <a class="el" href="a00394.html">Environment Variables</a> for details about the location of dumped files.</p>
209 <h2><a class="anchor" id="faq_os_error"></a>
210 What should I do when hwloc reports "operating system" warnings?</h2>
211 <p>When the operating system reports invalid locality information (because of either software or hardware bugs), hwloc may fail to insert some objects in the topology because they cannot fit in the already built tree of resources. If so, hwloc will report a warning like the following. The object causing this error is ignored, the discovery continues but the resulting topology will miss some objects and may be asymmetric (see also <a class="el" href="a00406.html#faq_asymmetric">What happens if my topology is asymmetric?</a>).</p>
212 <pre class="fragment">****************************************************************************
213 * hwloc received invalid information from the operating system.
214 *
215 * L3 (cpuset 0x000003f0) intersects with NUMANode (P#0 cpuset 0x0000003f) without inclusion!
216 * Error occurred in topology.c line 940
217 *
218 * Please report this error message to the hwloc user's mailing list,
219 * along with the files generated by the hwloc-gather-topology script.
220 *
221 * hwloc will now ignore this invalid topology information and continue.
222 ****************************************************************************
223 </pre><p>These errors are common on large AMD platforms because of BIOS and/or Linux kernel bugs causing invalid L3 cache information. In the above example, the hardware reports a L3 cache that is shared by 2 cores in the first NUMA node and 4 cores in the second NUMA node. That's wrong, it should actually be shared by all 6 cores in a single NUMA node. The resulting topology will miss some L3 caches.</p>
224 <p>If your application does not care about cache sharing, or if you do not plan to request cache-aware binding in your process launcher, you may likely ignore this error (and hide it by setting HWLOC_HIDE_ERRORS=1 in your environment).</p>
225 <p>Some platforms report similar warnings about conflicting Packages and NUMANodes.</p>
226 <p>On x86 hosts, passing <code>HWLOC_COMPONENTS=x86</code> in the environment may workaround some of these issues by switching to a different way to discover the topology.</p>
227 <p>Upgrading the BIOS and/or the operating system may help. Otherwise, as explained in the message, reporting this issue to the hwloc developers (by sending the tarball that is generated by the hwloc-gather-topology script on this platform) is a good way to make sure that this is a software (operating system) or hardware bug (BIOS, etc).</p>
228 <p>See also <a class="el" href="index.html#bugs">Questions and Bugs</a>. Opening an issue on GitHub automatically displays hints on what information you should provide when reporting such bugs.</p>
229 <h2><a class="anchor" id="faq_valgrind"></a>
230 Why does Valgrind complain about hwloc memory leaks?</h2>
231 <p>If you are debugging your application with Valgrind, you want to avoid memory leak reports that are caused by hwloc and not by your program.</p>
232 <p>hwloc itself is often checked with Valgrind to make sure it does not leak memory. However, some global variables in hwloc dependencies are never freed. For instance libz allocates its global state once at startup and never frees it so that it may be reused later. Some libxml2 global state is also never freed because hwloc does not know whether it can safely ask libxml2 to free it (the application may also be using libxml2 outside of hwloc).</p>
233 <p>These unfreed variables cause leak reports in Valgrind. hwloc installs a Valgrind <em>suppressions</em> file to hide them. You should pass the following command-line option to Valgrind to use it: </p><pre class="fragment"> --suppressions=/path/to/hwloc-valgrind.supp
234 </pre><p>
235 </div><div class="section" id="faq4">
236 </p>
237 <h1><a class="anchor" id="faq4"></a>
238 Platform-specific</h1>
239 <h2><a class="anchor" id="faq_cuda_build"></a>
240 How do I enable CUDA and select which CUDA version to use?</h2>
241 <p>hwloc enables CUDA as soon as it finds CUDA development headers and libraries on the system. This detection may be performed thanks to <code>pkg-config</code> but it requires hwloc to know which CUDA version to look for. This may be done by passing <code>--with-cuda-version=11.0</code> to the configure script. Otherwise hwloc will also look for the <code>CUDA_VERSION</code> environment variable.</p>
242 <p>If <code>pkg-config</code> does not work, passing <code>--with-cuda=/path/to/cuda</code> to the configure script is another way to define the corresponding library and header paths. Finally, these paths may also be set through environment variables such as <code>LIBRARY_PATH</code> and <code>C_INCLUDE_PATH</code>.</p>
243 <p>These paths, either detected by <code>pkg-config</code> or given manually, will also be used to detect NVML and OpenCL libraries and enable their hwloc backends.</p>
244 <p>To find out whether CUDA was detected and enabled, look in <em>Probe / display I/O devices</em> at the end of the configure script output. Passing <code>--enable-cuda</code> will also cause configure to fail if CUDA could not be found and enabled in hwloc.</p>
245 <h2><a class="anchor" id="faq_knl_numa"></a>
246 How do I find the local MCDRAM NUMA node on Intel Xeon Phi processor?</h2>
247 <p>Intel Xeon Phi processors introduced a new memory architecture by possibly having two distinct local memories: some normal memory (DDR) and some high-bandwidth on-package memory (MCDRAM). Processors can be configured in various clustering modes to have up to 4 <em>Clusters</em>. Moreover, each <em>Cluster</em> (quarter, half or whole processor) of the processor may have its own local parts of the DDR and of the MCDRAM. This memory and clustering configuration may be probed by looking at MemoryMode and ClusterMode attributes, see <a class="el" href="a00398.html#attributes_info_platform">Hardware Platform Information</a> and doc/examples/get-knl-modes.c in the source directory.</p>
248 <p>Starting with version 2.0, hwloc properly exposes this memory configuration. DDR and MCDRAM are attached as two memory children of the same parent, DDR first, and MCDRAM second if any. Depending on the processor configuration, that parent may be a Package, a Cache, or a Group object of type <code>Cluster</code>.</p>
249 <p>Hence cores may have one or two local NUMA nodes, listed by the core nodeset. An application may allocate local memory from a core by using that nodeset. The operating system will actually allocate from the DDR when possible, or fallback to the MCDRAM.</p>
250 <p>To allocate specifically on one of these memories, one should walk up the parent pointers until finding an object with some memory children. Looking at these memory children will give the DDR first, then the MCDRAM if any. Their nodeset may then be used for allocating or binding memory buffers.</p>
251 <p>One may also traverse the list of NUMA nodes until finding some whose cpuset matches the target core or PUs. The MCDRAM NUMA nodes may be identified thanks to the <code>subtype</code> field which is set to <code>MCDRAM</code>.</p>
252 <p>Command-line tools such as <code>hwloc-bind</code> may bind memory on the MCDRAM by using the <em>hbm</em> keyword. For instance, to bind on the first MCDRAM NUMA node:</p>
253 <pre class="fragment">$ hwloc-bind --membind --hbm numa:0 -- myprogram
254 $ hwloc-bind --membind numa:0 -- myprogram
255 </pre><h2><a class="anchor" id="faq_knl_dump"></a>
256 Why do I need hwloc-dump-hwdata for memory on Intel Xeon Phi processor?</h2>
257 <p>Intel Xeon Phi processors may use the on-package memory (MCDRAM) as either memory or a memory-side cache (reported as a L3 cache by hwloc by default, see <code>HWLOC_KNL_MSCACHE_L3</code> in <a class="el" href="a00394.html">Environment Variables</a>). There are also several clustering modes that significantly affect the memory organization (see <a class="el" href="a00406.html#faq_knl_numa">How do I find the local MCDRAM NUMA node on Intel Xeon Phi processor?</a> for more information about these modes). Details about these are currently only available to privileged users. Without them, hwloc relies on a heuristic for guessing the modes.</p>
258 <p>The hwloc-dump-hwdata utility may be used to dump this privileged binary information into human-readable and world-accessible files that the hwloc library will later load. The utility should usually run as root once during boot, in order to update dumped information (stored under /var/run/hwloc by default) in case the MCDRAM or clustering configuration changed between reboots.</p>
259 <p>When SELinux MLS policy is enabled, a specific hwloc policy module may be required so that all users get access to the dumped files (in /var/run/hwloc by default). One may use hwloc policy files from the SELinux Reference Policy at <a href="https://github.com/TresysTechnology/refpolicy-contrib">https://github.com/TresysTechnology/refpolicy-contrib</a> (see also the documentation at <a href="https://github.com/TresysTechnology/refpolicy/wiki/GettingStarted">https://github.com/TresysTechnology/refpolicy/wiki/GettingStarted</a>).</p>
260 <p>hwloc-dump-hwdata requires <code>dmi-sysfs</code> kernel module loaded.</p>
261 <p>The utility is currently unneeded on platforms without Intel Xeon Phi processors.</p>
262 <p>See <code>HWLOC_DUMPED_HWDATA_DIR</code> in <a class="el" href="a00394.html">Environment Variables</a> for details about the location of dumped files.</p>
263 <h2><a class="anchor" id="faq_bgq"></a>
264 How do I build hwloc for BlueGene/Q?</h2>
265 <p>IBM BlueGene/Q machines run a standard Linux on the login/frontend nodes and a custom CNK (<em>Compute Node Kernel</em>) on the compute nodes.</p>
266 <p>To discover the topology of a login/frontend node, hwloc should be configured as usual, without any BlueGene/Q-specific option.</p>
267 <p>However, one would likely rather discover the topology of the compute nodes where parallel jobs are actually running. If so, hwloc must be cross-compiled with the following configuration line: </p><pre class="fragment">./configure --host=powerpc64-bgq-linux --disable-shared --enable-static \
268 CPPFLAGS='-I/bgsys/drivers/ppcfloor -I/bgsys/drivers/ppcfloor/spi/include/kernel/cnk/'
269 </pre><p>CPPFLAGS may have to be updated if your platform headers are installed in a different directory.</p>
270 <h2><a class="anchor" id="faq_windows"></a>
271 How do I build hwloc for Windows?</h2>
272 <p>hwloc releases are available as pre-built ZIPs for Windows on both 32bits and 64bits x86 platforms. They are built using MSYS2 and MinGW on a Windows host. Such an environment allows using the Unix-like <code>configure</code>, <code>make</code> and <code>make install</code> steps without having to tweak too many variables or options. One may look at <code>contrib/ci.inria.fr/job-3-mingw.sh</code> in the hwloc repository for an example used for nightly testing.</p>
273 <p>hwloc also supports the Cygwin environment for porting Unix code to Windows.</p>
274 <p>hwloc releases also contain a basic Microsoft Visual Studio solution under <code>contrib/windows/</code>.</p>
275 <h2><a class="anchor" id="faq_netbsd_bind"></a>
276 How to get useful topology information on NetBSD?</h2>
277 <p>The NetBSD (and FreeBSD) backend uses x86-specific topology discovery (through the x86 component). This implementation requires CPU binding so as to query topology information from each individual processor. This means that hwloc cannot find any useful topology information unless user-level process binding is allowed by the NetBSD kernel. The <code>security.models.extensions.user_set_cpu_affinity</code> sysctl variable must be set to 1 to do so. Otherwise, only the number of processors will be detected.</p>
278 <h2><a class="anchor" id="faq_aix_bind"></a>
279 Why does binding fail on AIX?</h2>
280 <p>The AIX operating system requires specific user capabilities for attaching processes to resource sets (CAP_NUMA_ATTACH). Otherwise functions such as <a class="el" href="a00199.html#ga80bc07473a8edf840cae17bd7ec21d48" title="Bind current process or thread on cpus given in physical bitmap set.">hwloc_set_cpubind()</a> fail (return -1 with errno set to EPERM).</p>
281 <p>This capability must also be inherited (through the additional CAP_PROPAGATE capability) if you plan to bind a process before forking another process, for instance with <code>hwloc-bind</code>.</p>
282 <p>These capabilities may be given by the administrator with: </p><pre class="fragment">chuser "capabilities=CAP_PROPAGATE,CAP_NUMA_ATTACH" &lt;username&gt;
283 </pre><p>
284 </div><div class="section" id="faq5">
285 </p>
286 <h1><a class="anchor" id="faq5"></a>
287 Compatibility between hwloc versions</h1>
288 <h2><a class="anchor" id="faq_version_api"></a>
289 How do I handle API changes?</h2>
290 <p>The hwloc interface is extended with every new major release. Any application using the hwloc API should be prepared to check at compile-time whether some features are available in the currently installed hwloc distribution.</p>
291 <p>For instance, to check whether the hwloc version is at least 2.0, you should use: </p><pre class="fragment">#include &lt;hwloc.h&gt;
292 #if HWLOC_API_VERSION &gt;= 0x00020000
293 ...
294 #endif
295 </pre><p>To check for the API of release X.Y.Z at build time, you may compare <a class="el" href="a00191.html#ga8f4dfb8eef138af55dd1a0fa802e5476" title="Indicate at build time which hwloc API version is being used.">HWLOC_API_VERSION</a> with <code>(X&lt;&lt;16)+(Y&lt;&lt;8)+Z</code>.</p>
296 <p>For supporting older releases that do not have <code>HWLOC_OBJ_NUMANODE</code> and <code>HWLOC_OBJ_PACKAGE</code> yet, you may use:</p>
297 <pre class="fragment">#include &lt;hwloc.h&gt;
298 #if HWLOC_API_VERSION &lt; 0x00010b00
299 #define HWLOC_OBJ_NUMANODE HWLOC_OBJ_NODE
300 #define HWLOC_OBJ_PACKAGE HWLOC_OBJ_SOCKET
301 #endif
302 </pre><p>Once a program is built against a hwloc library, it may also dynamically link with compatible libraries from other hwloc releases. The version of that runtime library may be queried with <a class="el" href="a00191.html#ga9c0b50c98add1adf57ed1ce85bb5190d" title="Indicate at runtime which hwloc API version was used at build time.">hwloc_get_api_version()</a>. See <a class="el" href="a00406.html#faq_version_abi">How do I handle ABI breaks?</a> for using this function for testing ABI compatibility.</p>
303 <h2><a class="anchor" id="faq_version"></a>
304 What is the difference between API and library version numbers?</h2>
305 <p><a class="el" href="a00191.html#ga8f4dfb8eef138af55dd1a0fa802e5476" title="Indicate at build time which hwloc API version is being used.">HWLOC_API_VERSION</a> is the version of the API. It changes when functions are added, modified, etc. However it does not necessarily change from one release to another. For instance, two releases of the same series (e.g. 2.0.3 and 2.0.4) usually have the same <a class="el" href="a00191.html#ga8f4dfb8eef138af55dd1a0fa802e5476" title="Indicate at build time which hwloc API version is being used.">HWLOC_API_VERSION</a> (<code>0x00020000</code>). However their HWLOC_VERSION strings are different (<code>"2.0.3"</code> and <code>"2.0.4"</code> respectively).</p>
306 <h2><a class="anchor" id="faq_version_abi"></a>
307 How do I handle ABI breaks?</h2>
308 <p>The hwloc interface was deeply modified in release 2.0 to fix several issues of the 1.x interface (see <a class="el" href="a00407.html">Upgrading to the hwloc 2.0 API</a> and the NEWS file in the source directory for details). The ABI was broken, which means <b>applications must be recompiled against the new 2.0 interface</b>.</p>
309 <p>To check that you are not mixing old/recent headers with a recent/old runtime library, check the major revision number in the API version: </p><pre class="fragment">#include &lt;hwloc.h&gt;
310 unsigned version = hwloc_get_api_version();
311 if ((version &gt;&gt; 16) != (HWLOC_API_VERSION &gt;&gt; 16)) {
312 fprintf(stderr,
313 "%s compiled for hwloc API 0x%x but running on library API 0x%x.\n"
314 "You may need to point LD_LIBRARY_PATH to the right hwloc library.\n"
315 "Aborting since the new ABI is not backward compatible.\n",
316 callname, HWLOC_API_VERSION, version);
317 exit(EXIT_FAILURE);
318 }
319 </pre><p> To specifically detect v2.0 issues: </p><pre class="fragment">#include &lt;hwloc.h&gt;
320 #if HWLOC_API_VERSION &gt;= 0x00020000
321 /* headers are recent */
322 if (hwloc_get_api_version() &lt; 0x20000)
323 ... error out, the hwloc runtime library is older than 2.0 ...
324 #else
325 /* headers are pre-2.0 */
326 if (hwloc_get_api_version() &gt;= 0x20000)
327 ... error out, the hwloc runtime library is more recent than 2.0 ...
328 #endif
329 </pre><p>In theory, library sonames prevent linking with incompatible libraries. However custom hwloc installations or improperly configured build environments may still lead to such issues. Hence running one of the above (cheap) checks before initializing hwloc topology may be useful.</p>
330 <h2><a class="anchor" id="faq_version_xml"></a>
331 Are XML topology files compatible between hwloc releases?</h2>
332 <p>XML topology files are forward-compatible: a XML file may be loaded by a hwloc library that is more recent than the hwloc release that exported that file.</p>
333 <p>However, hwloc XMLs are not always backward-compatible: Topologies exported by hwloc 2.x cannot be imported by 1.x by default (see <a class="el" href="a00407.html#upgrade_to_api_2x_xml">XML changes</a> for working around such issues). There are also some corner cases where backward compatibility is not guaranteed because of changes between major releases (for instance 1.11 XMLs could not be imported in 1.10).</p>
334 <p>XMLs are exchanged at runtime between some components of the HPC software stack (for instance the resource managers and MPI processes). Building all these components on the same (cluster-wide) hwloc installation is a good way to avoid such incompatibilities.</p>
335 <h2><a class="anchor" id="faq_version_synthetic"></a>
336 Are synthetic strings compatible between hwloc releases?</h2>
337 <p>Synthetic strings (see <a class="el" href="a00401.html">Synthetic topologies</a>) are forward-compatible: a synthetic string generated by a release may be imported by future hwloc libraries.</p>
338 <p>However they are often not backward-compatible because new details may have been added to synthetic descriptions in recent releases. Some flags may be given to <a class="el" href="a00216.html#ga24b7864a1c588309c4749f621f03b4c7" title="Export the topology as a synthetic string.">hwloc_topology_export_synthetic()</a> to avoid such details and stay backward compatible.</p>
339 <h2><a class="anchor" id="faq_version_shmem"></a>
340 Is it possible to share a shared-memory topology between different hwloc releases?</h2>
341 <p>Shared-memory topologies (see <a class="el" href="a00238.html">Sharing topologies between processes</a>) have strong requirements on compatibility between hwloc libraries. Adopting a shared-memory topology fails if it was exported by a non-compatible hwloc release. Releases with same major revision are usually compatible (e.g. hwloc 2.0.4 may adopt a topology exported by 2.0.3) but different major revisions may be incompatible (e.g. hwloc 2.1.0 cannot adopt from 2.0.x).</p>
342 <p>Topologies are shared at runtime between some components of the HPC software stack (for instance the resource managers and MPI processes). Building all these components on the same (system-wide) hwloc installation is a good way to avoid such incompatibilities. </p>
343 </div></div><!-- contents -->
344 </div><!-- PageDoc -->
345 <!-- start footer part -->
346 <hr class="footer"/><address class="footer"><small>
347 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
348 </small></address>
349 </body>
350 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Upgrading to the hwloc 2.0 API</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="PageDoc"><div class="header">
41 <div class="headertitle">
42 <div class="title">Upgrading to the hwloc 2.0 API </div> </div>
43 </div><!--header-->
44 <div class="contents">
45 <div class="textblock"><p>
46 <div class="section">
47 </p>
48 <p>See <a class="el" href="a00406.html#faq5">Compatibility between hwloc versions</a> for detecting the hwloc version that you are compiling and/or running against.</p>
49 <p>
50 </div><div class="section" id="upgrade_to_api_2x_memory">
51 </p>
52 <h1><a class="anchor" id="upgrade_to_api_2x_memory"></a>
53 New Organization of NUMA nodes and Memory</h1>
54 <h2><a class="anchor" id="upgrade_to_api_2x_memory_children"></a>
55 Memory children</h2>
56 <p>In hwloc v1.x, NUMA nodes were inside the tree, for instance Packages contained 2 NUMA nodes which contained a L3 and several cache.</p>
57 <p>Starting with hwloc v2.0, NUMA nodes are not in the main tree anymore. They are attached under objects as <em>Memory Children</em> on the side of normal children. This memory children list starts at <code>obj-&gt;memory_first_child</code> and its size is <code>obj-&gt;memory_arity</code>. Hence there can now exist two local NUMA nodes, for instance on Intel Xeon Phi processors.</p>
58 <p>The normal list of children (starting at <code>obj-&gt;first_child</code>, ending at <code>obj-&gt;last_child</code>, of size <code>obj-&gt;arity</code>, and available as the array <code>obj-&gt;children</code>) now only contains CPU-side objects: PUs, Cores, Packages, Caches, Groups, Machine and System. <a class="el" href="a00206.html#ga12d8565a3436c565e791ed02a0353621" title="Return the next child.">hwloc_get_next_child()</a> may still be used to iterate over all children of all lists.</p>
59 <p>Hence the CPU-side hierarchy is built using normal children, while memory is attached to that hierarchy depending on its affinity.</p>
60 <h2><a class="anchor" id="upgrade_to_api_2x_memory_examples"></a>
61 Examples</h2>
62 <ul>
63 <li>
64 <p class="startli">a UMA machine with 2 packages and a single NUMA node is now modeled as a "Machine" object with two "Package" children and one "NUMANode" memory children (displayed first in lstopo below): </p><pre class="fragment">Machine (1024MB total)
65 NUMANode L#0 (P#0 1024MB)
66 Package L#0
67 Core L#0 + PU L#0 (P#0)
68 Core L#1 + PU L#1 (P#1)
69 Package L#1
70 Core L#2 + PU L#2 (P#2)
71 Core L#3 + PU L#3 (P#3)
72 </pre> <p class="endli"></p>
73 </li>
74 <li>
75 <p class="startli">a machine with 2 packages with one NUMA node and 2 cores in each is now: </p><pre class="fragment">Machine (2048MB total)
76 Package L#0
77 NUMANode L#0 (P#0 1024MB)
78 Core L#0 + PU L#0 (P#0)
79 Core L#1 + PU L#1 (P#1)
80 Package L#1
81 NUMANode L#1 (P#1 1024MB)
82 Core L#2 + PU L#2 (P#2)
83 Core L#3 + PU L#3 (P#3)
84 </pre> <p class="endli"></p>
85 </li>
86 <li>
87 <p class="startli">if there are two NUMA nodes per package, a Group object may be added to keep cores together with their local NUMA node: </p><pre class="fragment">Machine (4096MB total)
88 Package L#0
89 Group0 L#0
90 NUMANode L#0 (P#0 1024MB)
91 Core L#0 + PU L#0 (P#0)
92 Core L#1 + PU L#1 (P#1)
93 Group0 L#1
94 NUMANode L#1 (P#1 1024MB)
95 Core L#2 + PU L#2 (P#2)
96 Core L#3 + PU L#3 (P#3)
97 Package L#1
98 [...]
99 </pre> <p class="endli"></p>
100 </li>
101 <li>
102 if the platform has L3 caches whose localities are identical to NUMA nodes, Groups aren't needed: <pre class="fragment">Machine (4096MB total)
103 Package L#0
104 L3 L#0 (16MB)
105 NUMANode L#0 (P#0 1024MB)
106 Core L#0 + PU L#0 (P#0)
107 Core L#1 + PU L#1 (P#1)
108 L3 L#1 (16MB)
109 NUMANode L#1 (P#1 1024MB)
110 Core L#2 + PU L#2 (P#2)
111 Core L#3 + PU L#3 (P#3)
112 Package L#1
113 [...]
114 </pre> </li>
115 </ul>
116 <h2><a class="anchor" id="upgrade_to_api_2x_numa_level"></a>
117 NUMA level and depth</h2>
118 <p>NUMA nodes are not in "main" tree of normal objects anymore. Hence, they don't have a meaningful depth anymore (like I/O and Misc objects). They have a virtual (negative) depth (<a class="el" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575a245c34ec9884c2cf5de5049b2153ed9c" title="Virtual depth for NUMA nodes.">HWLOC_TYPE_DEPTH_NUMANODE</a>) so that functions manipulating depths and level still work, and so that we can still iterate over the level of NUMA nodes just like for any other level.</p>
119 <p>For instance we can still use lines such as </p><pre class="fragment">int depth = hwloc_get_type_depth(topology, HWLOC_OBJ_NUMANODE);
120 hwloc_obj_t obj = hwloc_get_obj_by_type(topology, HWLOC_OBJ_NUMANODE, 4);
121 hwloc_obj_t node = hwloc_get_next_obj_by_depth(topology, HWLOC_TYPE_DEPTH_NUMANODE, prev);
122 </pre><p>The NUMA depth should not be compared with others. An unmodified code that still compares NUMA and Package depths (to find out whether Packages contain NUMA or the contrary) would now always assume Packages contain NUMA (because the NUMA depth is negative).</p>
123 <p>However, the depth of the Normal parents of NUMA nodes may be used instead. In the last example above, NUMA nodes are attached to L3 caches, hence one may compare the depth of Packages and L3 to find out that NUMA nodes are contained in Packages. This depth of parents may be retrieved with <a class="el" href="a00196.html#gae85786340b88e24835f8c403a1e2e54b" title="Return the depth of parents where memory objects are attached.">hwloc_get_memory_parents_depth()</a>. However, this function may return <a class="el" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c" title="Objects of given type exist at different depth in the topology (only for Groups).">HWLOC_TYPE_DEPTH_MULTIPLE</a> on future platforms if NUMA nodes are attached to different levels.</p>
124 <h2><a class="anchor" id="upgrade_to_api_2x_memory_find"></a>
125 Finding Local NUMA nodes and looking at Children and Parents</h2>
126 <p>Applications that walked up/down to find NUMANode parent/children must now be updated. Instead of looking directly for a NUMA node, one should now look for an object that has some memory children. NUMA node(s) will be attached there. For instance, when looking for a NUMA node above a given core <code>core</code>: </p><pre class="fragment">hwloc_obj_t parent = core-&gt;parent;
127 while (parent &amp;&amp; !parent-&gt;memory_arity)
128 parent = parent-&gt;parent; /* no memory child, walk up */
129 if (parent)
130 /* use parent-&gt;memory_first_child (and its siblings if there are multiple local NUMA nodes) */
131 </pre><p>The list of local NUMA nodes (usually a single one) is also described by the <code>nodeset</code> attribute of each object (which contains the physical indexes of these nodes). Iterating over the NUMA level is also an easy way to find local NUMA nodes: </p><pre class="fragment">hwloc_obj_t tmp = NULL;
132 while ((tmp = hwloc_get_next_obj_by_type(topology, HWLOC_OBJ_NUMANODE, tmp)) != NULL) {
133 if (hwloc_bitmap_isset(obj-&gt;nodeset, tmp-&gt;os_index))
134 /* tmp is a NUMA node local to obj, use it */
135 }
136 </pre><p>Similarly finding objects that are close to a given NUMA nodes should be updated too. Instead of looking at the NUMA node parents/children, one should now find a Normal parent above that NUMA node, and then look at its parents/children as usual: </p><pre class="fragment">hwloc_obj_t tmp = obj-&gt;parent;
137 while (hwloc_obj_type_is_memory(tmp))
138 tmp = tmp-&gt;parent;
139 /* now use tmp instead of obj */
140 </pre><p>To avoid such hwloc v2.x-specific and NUMA-specific cases in the code, a <b>generic lookup for any kind of object, including NUMA nodes</b>, might also be implemented by iterating over a level. For instance finding an object of type <code>type</code> which either contains or is included in object <code>obj</code> can be performed by traversing the level of that type and comparing CPU sets: </p><pre class="fragment">hwloc_obj_t tmp = NULL;
141 while ((tmp = hwloc_get_next_obj_by_type(topology, type, tmp)) != NULL) {
142 if (hwloc_bitmap_intersects(tmp-&gt;cpuset, obj-&gt;cpuset))
143 /* tmp matches, use it */
144 }
145 </pre><p> <b> This generic lookup works whenever <code>type</code> or <code>obj</code> are Normal or Memory objects since both have CPU sets. Moreover, it is compatible with the hwloc v1.x API. </b></p>
146 <p>
147 </div><div class="section" id="upgrade_to_api_2x_children">
148 </p>
149 <h1><a class="anchor" id="upgrade_to_api_2x_children"></a>
150 4 Kinds of Objects and Children</h1>
151 <h2><a class="anchor" id="upgrade_to_api_2x_io_misc_children"></a>
152 I/O and Misc children</h2>
153 <p>I/O children are not in the main object children list anymore either. They are in the list starting at <code>obj-&gt;io_first_child</code> and its size is <code>obj-&gt;io_arity</code>.</p>
154 <p>Misc children are not in the main object children list anymore. They are in the list starting at <code>obj-&gt;misc_first_child</code> and its size is <code>obj-&gt;misc_arity</code>.</p>
155 <p>See <a class="el" href="a00250.html" title="Structure of a topology object.">hwloc_obj</a> for details about children lists.</p>
156 <p><a class="el" href="a00206.html#ga12d8565a3436c565e791ed02a0353621" title="Return the next child.">hwloc_get_next_child()</a> may still be used to iterate over all children of all lists.</p>
157 <h2><a class="anchor" id="upgrade_to_api_2x_kinds_subsec"></a>
158 Kinds of objects</h2>
159 <p>Given the above, objects may now be of 4 kinds: </p><ul>
160 <li>
161 Normal (everything not listed below, including Machine, Package, Core, PU, CPU Caches, etc); </li>
162 <li>
163 Memory (currently NUMA nodes or Memory-side Caches), attached to parents as Memory children; </li>
164 <li>
165 I/O (Bridges, PCI and OS devices), attached to parents as I/O children; </li>
166 <li>
167 Misc objects, attached to parents as Misc children. </li>
168 </ul>
169 <p>See <a class="el" href="a00250.html" title="Structure of a topology object.">hwloc_obj</a> for details about children lists.</p>
170 <p>For a given object type, the kind may be found with <a class="el" href="a00207.html#ga52ef38431eba383b048b98c669b59a16" title="Check whether an object type is Normal.">hwloc_obj_type_is_normal()</a>, <a class="el" href="a00207.html#ga1d074390c8a3dc3088d84f73fb73f966" title="Check whether an object type is Memory.">hwloc_obj_type_is_memory()</a>, <a class="el" href="a00207.html#ga52ef38431eba383b048b98c669b59a16" title="Check whether an object type is Normal.">hwloc_obj_type_is_normal()</a>, or comparing with <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a19f8a6953fa91efc76bcbcdf2d22de4d" title="Miscellaneous objects (filtered out by default). Objects without particular meaning,...">HWLOC_OBJ_MISC</a>.</p>
171 <p>Normal and Memory objects have (non-NULL) CPU sets and nodesets, while I/O and Misc objects don't have any sets (they are NULL).</p>
172 <p>
173 </div><div class="section" id="upgrade_to_api_2x_cache">
174 </p>
175 <h1><a class="anchor" id="upgrade_to_api_2x_cache"></a>
176 HWLOC_OBJ_CACHE replaced</h1>
177 <p>Instead of a single HWLOC_OBJ_CACHE, there are now 8 types <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a56389b8eb2e2f74f288bb657c4e72140" title="Level 1 Data (or Unified) Cache.">HWLOC_OBJ_L1CACHE</a>, ..., <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a67194c9de5e3e581c64c11d2eb1c109d" title="Level 5 Data (or Unified) Cache.">HWLOC_OBJ_L5CACHE</a>, <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55afa834a85d9e53836cf0db6d0bd8329b4" title="Level 1 instruction Cache (filtered out by default).">HWLOC_OBJ_L1ICACHE</a>, ..., <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55ac22850c717f07bf7ffb316fadd08d218" title="Level 3 instruction Cache (filtered out by default).">HWLOC_OBJ_L3ICACHE</a>.</p>
178 <p>Cache object attributes are unchanged.</p>
179 <p><a class="el" href="a00208.html#gad108a09ce400222fe45545257d575489" title="Find the depth of cache objects matching cache level and type.">hwloc_get_cache_type_depth()</a> is not needed to disambiguate cache types anymore since new types can be passed to <a class="el" href="a00196.html#ga8bec782e21be313750da70cf7428b374" title="Returns the depth of objects of type type.">hwloc_get_type_depth()</a> without ever getting <a class="el" href="a00196.html#ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c" title="Objects of given type exist at different depth in the topology (only for Groups).">HWLOC_TYPE_DEPTH_MULTIPLE</a> anymore.</p>
180 <p><a class="el" href="a00207.html#ga2ed589bea28711e80b92066510a5607d" title="Check whether an object type is a CPU Cache (Data, Unified or Instruction).">hwloc_obj_type_is_cache()</a>, <a class="el" href="a00207.html#ga395e48cd221d107e5891689624e1aec4" title="Check whether an object type is a CPU Data or Unified Cache.">hwloc_obj_type_is_dcache()</a> and <a class="el" href="a00207.html#ga8abcee67b9b074332c1866405a3648a9" title="Check whether an object type is a CPU Instruction Cache,.">hwloc_obj_type_is_icache()</a> may be used to check whether a given type is a cache, data/unified cache or instruction cache.</p>
181 <p>
182 </div><div class="section" id="upgrade_to_api_2x_allowed">
183 </p>
184 <h1><a class="anchor" id="upgrade_to_api_2x_allowed"></a>
185 allowed_cpuset and allowed_nodeset only in the main topology</h1>
186 <p>Objects do not have <code>allowed_cpuset</code> and <code>allowed_nodeset</code> anymore. They are only available for the entire topology using <a class="el" href="a00211.html#ga517d5d68ec9f24583d8933aab713be8e" title="Get allowed CPU set.">hwloc_topology_get_allowed_cpuset()</a> and <a class="el" href="a00211.html#ga21a4d7237a11e76b912ed4524ab78cbd" title="Get allowed node set.">hwloc_topology_get_allowed_nodeset()</a>.</p>
187 <p>As usual, those are only needed when the INCLUDE_DISALLOWED topology flag is given, which means disallowed objects are kept in the topology. If so, one may find out whether some PUs inside an object is allowed by checking </p><pre class="fragment">hwloc_bitmap_intersects(obj-&gt;cpuset, hwloc_topology_get_allowed_cpuset(topology))
188 </pre><p> Replace cpusets with nodesets for NUMA nodes. To find out which ones, replace intersects() with and() to get the actual intersection.</p>
189 <p>
190 </div><div class="section" id="upgrade_to_api_2x_depth">
191 </p>
192 <h1><a class="anchor" id="upgrade_to_api_2x_depth"></a>
193 Object depths are now signed int</h1>
194 <p><code>obj-&gt;depth</code> as well as depths given to functions such as <a class="el" href="a00196.html#ga391f6b2613f0065673eaa4069b93d4e0" title="Returns the topology object at logical index idx from depth depth.">hwloc_get_obj_by_depth()</a> or returned by <a class="el" href="a00196.html#gae54d1782ca9b54bea915f5c18a9158fa" title="Get the depth of the hierarchical tree of objects.">hwloc_topology_get_depth()</a> are now <b>signed int</b>.</p>
195 <p>Other depth such as cache-specific depth attribute are still unsigned.</p>
196 <p>
197 </div><div class="section" id="upgrade_to_api_2x_memory_attrs">
198 </p>
199 <h1><a class="anchor" id="upgrade_to_api_2x_memory_attrs"></a>
200 Memory attributes become NUMANode-specific</h1>
201 <p>Memory attributes such as <code>obj-&gt;memory.local_memory</code> are now only available in NUMANode-specific attributes in <code>obj-&gt;attr-&gt;numanode.local_memory</code>.</p>
202 <p><code>obj-&gt;memory.total_memory</code> is available in all objects as <code>obj-&gt;total_memory</code>.</p>
203 <p>See <a class="el" href="a00258.html" title="NUMA node-specific Object Attributes.">hwloc_obj_attr_u::hwloc_numanode_attr_s</a> and <a class="el" href="a00250.html" title="Structure of a topology object.">hwloc_obj</a> for details.</p>
204 <p>
205 </div><div class="section" id="upgrade_to_api_2x_config">
206 </p>
207 <h1><a class="anchor" id="upgrade_to_api_2x_config"></a>
208 Topology configuration changes</h1>
209 <p>The old ignoring API as well as several configuration flags are replaced with the new filtering API, see <a class="el" href="a00202.html#gad894e70f15f8d4aada7be8d1aba38b7e" title="Set the filtering for the given object type.">hwloc_topology_set_type_filter()</a> and its variants, and <a class="el" href="a00202.html#ga9a5a1f0140cd1952544477833733195b" title="Type filtering flags.">hwloc_type_filter_e</a> for details.</p>
210 <ul>
211 <li>
212 <p class="startli">hwloc_topology_ignore_type(), hwloc_topology_ignore_type_keep_structure() and hwloc_topology_ignore_all_keep_structure() are respectively superseded by </p><pre class="fragment">hwloc_topology_set_type_filter(topology, type, HWLOC_TYPE_FILTER_KEEP_NONE);
213 hwloc_topology_set_type_filter(topology, type, HWLOC_TYPE_FILTER_KEEP_STRUCTURE);
214 hwloc_topology_set_all_types_filter(topology, HWLOC_TYPE_FILTER_KEEP_STRUCTURE);
215 </pre><p class="interli">Also, the meaning of KEEP_STRUCTURE has changed (only entire levels may be ignored, instead of single objects), the old behavior is not available anymore. </p>
216 <p class="endli"></p>
217 </li>
218 <li>
219 <p class="startli">HWLOC_TOPOLOGY_FLAG_ICACHES is superseded by </p><pre class="fragment">hwloc_topology_set_icache_types_filter(topology, HWLOC_TYPE_FILTER_KEEP_ALL);
220 </pre> <p class="endli"></p>
221 </li>
222 <li>
223 <p class="startli">HWLOC_TOPOLOGY_FLAG_WHOLE_IO, HWLOC_TOPOLOGY_FLAG_IO_DEVICES and HWLOC_TOPOLOGY_FLAG_IO_BRIDGES replaced.</p>
224 <p class="interli">To keep all I/O devices (PCI, Bridges, and OS devices), use: </p><pre class="fragment">hwloc_topology_set_io_types_filter(topology, HWLOC_TYPE_FILTER_KEEP_ALL);
225 </pre><p class="interli">To only keep important devices (Bridges with children, common PCI devices and OS devices): </p><pre class="fragment">hwloc_topology_set_io_types_filter(topology, HWLOC_TYPE_FILTER_KEEP_IMPORTANT);
226 </pre> <p class="endli"></p>
227 </li>
228 </ul>
229 <p>
230 </div><div class="section" id="upgrade_to_api_2x_xml">
231 </p>
232 <h1><a class="anchor" id="upgrade_to_api_2x_xml"></a>
233 XML changes</h1>
234 <p>2.0 XML files are not compatible with 1.x</p>
235 <p>2.0 can load 1.x files, but only NUMA distances are imported. Other distance matrices are ignored (they were never used by default anyway).</p>
236 <p>2.0 can export 1.x-compatible files, but only distances attached to the root object are exported (i.e. distances that cover the entire machine). Other distance matrices are dropped (they were never used by default anyway).</p>
237 <p><b>Users are advised to negociate hwloc versions between exporter and importer:</b> If the importer isn't 2.x, the exporter should export to 1.x. Otherwise, things should work by default.</p>
238 <p>Hence <a class="el" href="a00215.html#ga333f79975b4eeb28a3d8fad3373583ce" title="Export the topology into an XML file.">hwloc_topology_export_xml()</a> and <a class="el" href="a00215.html#gad33b7f7c11db10459505a3b1634fd3f1" title="Export the topology into a newly-allocated XML memory buffer.">hwloc_topology_export_xmlbuffer()</a> have a new flags argument. to force a hwloc-1.x-compatible XML export. </p><ul>
239 <li>
240 If both always support 2.0, don't pass any flag. </li>
241 <li>
242 When the importer uses hwloc 1.x, export with <a class="el" href="a00215.html#gga0eb99636aff71fe2704e1fa0ffe8c18dae7d6d96546131ef0043867b836b02e0f" title="Export XML that is loadable by hwloc v1.x. However, the export may miss some details about the topolo...">HWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1</a>. Otherwise the importer will fail to import. </li>
243 <li>
244 When the exporter uses hwloc 1.x, it cannot pass any flag, and a 2.0 importer can import without problem. </li>
245 </ul>
246 <pre class="fragment">#if HWLOC_API_VERSION &gt;= 0x20000
247 if (need 1.x compatible XML export)
248 hwloc_topology_export_xml(...., HWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1);
249 else /* need 2.x compatible XML export */
250 hwloc_topology_export_xml(...., 0);
251 #else
252 hwloc_topology_export_xml(....);
253 #endif
254 </pre><p>Additionally, <a class="el" href="a00237.html#ga2cd902ce8766e90d4f2523a8e87640e9" title="Load a list of topology differences from a XML file.">hwloc_topology_diff_load_xml()</a>, <a class="el" href="a00237.html#gad693810a5c51628529b9dd56f040fb81" title="Load a list of topology differences from a XML buffer.">hwloc_topology_diff_load_xmlbuffer()</a>, <a class="el" href="a00237.html#ga8a14dd7d01efbdd97af7fe85e8b84b20" title="Export a list of topology differences to a XML file.">hwloc_topology_diff_export_xml()</a>, <a class="el" href="a00237.html#gaa2f0918df60c1c4a0bef9411f7d92a13" title="Export a list of topology differences to a XML buffer.">hwloc_topology_diff_export_xmlbuffer()</a> and <a class="el" href="a00237.html#ga5dcff18f80583ac6505a94ba2877fd1b" title="Destroy a list of topology differences.">hwloc_topology_diff_destroy()</a> lost the topology argument: The first argument (topology) isn't needed anymore.</p>
255 <p>
256 </div><div class="section" id="upgrade_to_api_2x_distances">
257 </p>
258 <h1><a class="anchor" id="upgrade_to_api_2x_distances"></a>
259 Distances API totally rewritten</h1>
260 <p>The new distances API is in <a class="el" href="a00134_source.html">hwloc/distances.h</a>.</p>
261 <p>Distances are not accessible directly from objects anymore. One should first call <a class="el" href="a00217.html#ga613e6b2a5d0f06626ee8d0c12fa46691" title="Retrieve distance matrices.">hwloc_distances_get()</a> (or a variant) to retrieve distances (possibly with one call to get the number of available distances structures, and another call to actually get them). Then it may consult these structures, and finally release them.</p>
262 <p>The set of object involved in a distances structure is specified by an array of objects, it may not always cover the entire machine or so.</p>
263 <p>
264 </div><div class="section" id="upgrade_to_api_2x_return">
265 </p>
266 <h1><a class="anchor" id="upgrade_to_api_2x_return"></a>
267 Return values of functions</h1>
268 <p>Bitmap functions (and a couple other functions) can return errors (in theory).</p>
269 <p>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.</p>
270 <p><a class="el" href="a00198.html#gace7654bb8a9002caae1a4b8a59e7452e" title="Add the given info name and value pair to the given object.">hwloc_obj_add_info()</a>, <a class="el" href="a00212.html#gad5ee8691e08a3538ea7633344c00456d" title="Convert a NUMA node set into a CPU set.">hwloc_cpuset_from_nodeset()</a> and <a class="el" href="a00212.html#gad5ee8691e08a3538ea7633344c00456d" title="Convert a NUMA node set into a CPU set.">hwloc_cpuset_from_nodeset()</a> also return an int, which would be -1 in case of allocation errors.</p>
271 <p>
272 </div><div class="section" id="upgrade_to_api_2x_misc">
273 </p>
274 <h1><a class="anchor" id="upgrade_to_api_2x_misc"></a>
275 Misc API changes</h1>
276 <ul>
277 <li>
278 <p class="startli"><a class="el" href="a00197.html#ga510f21b066fba2dab12b8c9b173b1dfd" title="Return an object type and attributes from a type string.">hwloc_type_sscanf()</a> extends hwloc_obj_type_sscanf() by passing a union <a class="el" href="a00254.html" title="Object type-specific Attributes.">hwloc_obj_attr_u</a> which may receive Cache, Group, Bridge or OS device attributes. </p>
279 <p class="endli"></p>
280 </li>
281 <li>
282 <p class="startli"><a class="el" href="a00197.html#ga52c63cd7203e55b804c1314affc9bd12" title="Return an object type and its level depth from a type string.">hwloc_type_sscanf_as_depth()</a> is also added to directly return the corresponding level depth within a topology. </p>
283 <p class="endli"></p>
284 </li>
285 <li>
286 <p class="startli">hwloc_topology_insert_misc_object_by_cpuset() is replaced with <a class="el" href="a00203.html#ga4cea4741165faf5323931a9ed8786ef7" title="Allocate a Group object to insert later with hwloc_topology_insert_group_object().">hwloc_topology_alloc_group_object()</a> and <a class="el" href="a00203.html#ga1fc6012b3e1c249b83f48cb7bcacaa5b" title="Add more structure to the topology by adding an intermediate Group.">hwloc_topology_insert_group_object()</a>. </p>
287 <p class="endli"></p>
288 </li>
289 <li>
290 <p class="startli">hwloc_topology_insert_misc_object_by_parent() is replaced with <a class="el" href="a00203.html#gad980782ade737900c5cf208946768c30" title="Add a MISC object as a leaf of the topology.">hwloc_topology_insert_misc_object()</a>. </p>
291 <p class="endli"></p>
292 </li>
293 </ul>
294 <p>
295 </div><div class="section" id="upgrade_to_api_2x_removals">
296 </p>
297 <h1><a class="anchor" id="upgrade_to_api_2x_removals"></a>
298 API removals and deprecations</h1>
299 <ul>
300 <li>
301 <p class="startli">HWLOC_OBJ_SYSTEM removed: The root object is always <a class="el" href="a00193.html#ggacd37bb612667dc437d66bfb175a8dc55a3f4e83ffc4a259354959ae8a9eaa2a80" title="Machine. A set of processors and memory with cache coherency.">HWLOC_OBJ_MACHINE</a> </p>
302 <p class="endli"></p>
303 </li>
304 <li>
305 <p class="startli">_membind_nodeset() memory binding interfaces deprecated: One should use the variant without _nodeset suffix and pass the <a class="el" href="a00200.html#ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256" title="Consider the bitmap argument as a nodeset.">HWLOC_MEMBIND_BYNODESET</a> flag. </p>
306 <p class="endli"></p>
307 </li>
308 <li>
309 <p class="startli">HWLOC_MEMBIND_REPLICATE removed: no supported operating system supports it anymore. </p>
310 <p class="endli"></p>
311 </li>
312 <li>
313 <p class="startli">hwloc_obj_snprintf() removed because it was long-deprecated by <a class="el" href="a00197.html#gadb8765c260edea80c52cd06a76639ba4" title="Stringify the type of a given topology object into a human-readable form.">hwloc_obj_type_snprintf()</a> and <a class="el" href="a00197.html#ga870e876931c282a1c7aee2f031912ce3" title="Stringify the attributes of a given topology object into a human-readable form.">hwloc_obj_attr_snprintf()</a>. </p>
314 <p class="endli"></p>
315 </li>
316 <li>
317 <p class="startli">hwloc_obj_type_sscanf() deprecated, hwloc_obj_type_of_string() removed. </p>
318 <p class="endli"></p>
319 </li>
320 <li>
321 <p class="startli">hwloc_cpuset_from/to_nodeset_strict() deprecated: Now useless since all topologies are NUMA. Use the variant without the _strict suffix </p>
322 <p class="endli"></p>
323 </li>
324 <li>
325 <p class="startli">hwloc_distribute() and hwloc_distributev() removed, deprecated by <a class="el" href="a00210.html#ga7b0c28f797c2ff17fa2f244ebbd55b33" title="Distribute n items over the topology under roots.">hwloc_distrib()</a>. </p>
326 <p class="endli"></p>
327 </li>
328 <li>
329 <p class="startli">The Custom interface (hwloc_topology_set_custom(), etc.) was removed, as well as the corresponding command-line tools (hwloc-assembler, etc.). Topologies always start with object with valid cpusets and nodesets. </p>
330 <p class="endli"></p>
331 </li>
332 <li>
333 <p class="startli"><code>obj-&gt;online_cpuset</code> removed: Offline PUs are simply listed in the <code>complete_cpuset</code> as previously. </p>
334 <p class="endli"></p>
335 </li>
336 <li>
337 <p class="startli"><code>obj-&gt;os_level</code> removed. </p>
338 <p class="endli"></p>
339 </li>
340 </ul>
341 </div></div><!-- contents -->
342 </div><!-- PageDoc -->
343 <!-- start footer part -->
344 <hr class="footer"/><address class="footer"><small>
345 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
346 </small></address>
347 </body>
348 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Network Locality (netloc)</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="PageDoc"><div class="header">
41 <div class="headertitle">
42 <div class="title">Network Locality (netloc) </div> </div>
43 </div><!--header-->
44 <div class="contents">
45 <div class="textblock"><p>
46 <div class="section">
47 </p>
48 <p>Portable abstraction of network topologies for high-performance computing.</p>
49 <p>The netloc documentation spans of these sections: </p><ul>
50 <li>
51 <a class="el" href="a00408.html">Network Locality (netloc)</a>, this section below </li>
52 <li>
53 <a class="el" href="a00409.html">Netloc with Scotch</a> </li>
54 </ul>
55 <p>
56 </div><div class="section" id="netloc_summary">
57 </p>
58 <h1><a class="anchor" id="netloc_summary"></a>
59 Netloc Summary</h1>
60 <p>The Portable Network Locality (netloc) software package provides network topology discovery tools, and an abstract representation of those networks topologies for a range of network types and configurations. It is provided as a companion to the Portable Hardware Locality (hwloc) package. These two software packages work together to provide a comprehensive view of the HPC system topology, spanning from the processor cores in one server to the cores in another - including the complex network(s) in between.</p>
61 <p>Towards this end, netloc is divided into two sets of components. The first tools are for the admin to extract the information about the topology of the machines with topology discovery tools for each network type and discovery technique (called readers). The second set of tools is for the user to exploit the collected information: to display the topology or create a topology-aware mapping of the processes of an application.</p>
62 <div class="image">
63 <img src="netloc_design.png" alt=""/>
64 </div>
65 <p>
66 </div><div class="section" id="supportednetworks">
67 </p>
68 <h2><a class="anchor" id="supportednetworks"></a>
69 Supported Networks</h2>
70 <p>For now, only InfiniBand (See <a class="el" href="a00408.html#netloc_setup">Setup</a>) is supported, but it is planned to be extended it very soon.</p>
71 <p>
72 </div><div class="section" id="netloc_installation">
73 </p>
74 <h1><a class="anchor" id="netloc_installation"></a>
75 Netloc Installation</h1>
76 <p>The generic installation procedure for both hwloc and netloc is described in <a class="el" href="index.html#common_installation">Installation</a>.</p>
77 <p>Note that netloc is currently not supported on as many platforms as the original hwloc project. netloc is enabled by default when supported, or can be disabled by passing <code>--disable-netloc</code> to the configure command-line.</p>
78 <p>
79 </div><div class="section" id="netloc_setup">
80 </p>
81 <h1><a class="anchor" id="netloc_setup"></a>
82 Setup</h1>
83 <p>To use Netloc tools, we need two steps. The first step consists in getting information about network directly from tools distributed by manufacturers. For Infiniband, for instance, this operation needs privileges to access to the network device. For this step we have wrappers in Netloc that will call the right tools with the right options.</p>
84 <p>The second step will transform the raw files generated by manufacturer tools, into files in a format readable by Netloc tools, and that will not depend on network technologies.</p>
85 <p>To be clear, let's take an example with Infiniband. This first step is handled by <code>netloc_ib_gather_raw</code> that will call <code>ibnetdiscover</code> and <code>ibroutes</code> tools to generate the necessary raw data files. The step has to be run by an administrator, since the Infiniband tools need to access to the network device.</p>
86 <pre class="fragment">shell$ netloc_ib_gather_raw --help
87 Usage: netloc_ib_gather_raw [options] &lt;outdir&gt;
88 Dumps topology information to &lt;outdir&gt;/ib-raw/
89 Subnets are guessed from the &lt;outdir&gt;/hwloc/ directory where
90 the hwloc XML exports of some nodes are stored.
91 Options:
92 --sudo
93 Pass sudo to internal ibnetdiscover and ibroute invocations.
94 Useful when the entire script cannot run as root.
95 --hwloc-dir &lt;dir&gt;
96 Use &lt;dir&gt; instead of &lt;outdir&gt;/hwloc/ for hwloc XML exports.
97 --force-subnet [&lt;subnet&gt;:]&lt;board&gt;:&lt;port&gt; to force the discovery
98 Do not guess subnets from hwloc XML exports.
99 Force discovery on local board &lt;board&gt; port &lt;port&gt;
100 and optionally force the subnet id &lt;subnet&gt;
101 instead of reading it from the first GID.
102 Examples: --force-subnet mlx4_0:1
103 --force-subnet fe80:0000:0000:0000:mlx4_0:1
104 --ibnetdiscover /path/to/ibnetdiscover
105 --ibroute /path/to/ibroute
106 Specify exact location of programs. Default is /usr/bin/&lt;program&gt;
107 --sleep &lt;n&gt;
108 Sleep for &lt;n&gt; seconds between invocations of programs probing the network
109 --ignore-errors
110 Ignore errors from ibnetdiscover and ibroute, assume their outputs are ok
111 --force -f
112 Always rediscover to overwrite existing files without asking
113 --verbose -v
114 Add verbose messages
115 --dry-run
116 Do not actually run programs or modify anything
117 --help -h
118 Show this help
119
120 shell$ ./netloc_ib_gather_raw /home/netloc/data
121 WARNING: Not running as root.
122 Using /home/netloc/data/hwloc as hwloc lstopo XML directory.
123
124 Exporting local node hwloc XML...
125 Running lstopo-no-graphics...
126
127 Found 1 subnets in hwloc directory:
128 Subnet fe80:0000:0000:0000 is locally accessible from board qib0 port 1.
129
130 Looking at fe80:0000:0000:0000 (through local board qib0 port 1)...
131 Running ibnetdiscover...
132 Getting routes...
133 Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L112' LID 18...
134 Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L108' LID 20...
135 Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L102' LID 23...
136 Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L104' LID 25...
137 Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L106' LID 24...
138 Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L114' LID 22...
139 Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L116' LID 21...
140 Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L109' LID 12...
141 Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L111' LID 11...
142 Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L107' LID 13...
143 Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L103' LID 17...
144 Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L105' LID 16...
145 Running ibroute for switch 'QLogic 12800-180 GUID=0x00066a00e8001310 L113' LID 15...
146 </pre><p>The second step, that can be done by a regular user, is done by the tool <code>netloc_ib_extract_dats</code>.</p>
147 <pre class="fragment">shell$ netloc_ib_extract_dats --help
148 Usage: netloc_ib_extract_dats &lt;path to input raw data files&gt; &lt;output path&gt; [--hwloc-dir
149 &lt;hwloc xml path&gt;]
150 hwloc-dir can be an absolute path or a relative path from output path
151
152 shell$ netloc_ib_extract_dats /home/netloc/data/ib-raw /home/netloc/data/netloc \
153 --hwloc-dir ../hwloc
154 Read subnet: fe80:0000:0000:0000
155 2 partitions found
156 'node'
157 'admin'
158 </pre><p>
159 </div><div class="section" id="netloc_draw">
160 </p>
161 <h1><a class="anchor" id="netloc_draw"></a>
162 Topology display</h1>
163 <p>Netloc provides a tool, <code>netloc_draw.html</code>, that displays a topology in a web browser, by using a JSON file.</p>
164 <h2><a class="anchor" id="netloc_draw_setup"></a>
165 Generate the JSON file</h2>
166 <p>In order to display a topology, Netloc needs to generate a JSON file corresponding to a topology. For this operation, the user must run <code>netloc_draw_to_json</code>.</p>
167 <pre class="fragment">shell$ netloc_draw_to_json --help
168 Usage: netloc_draw_to_json &lt;path to topology directory&gt;
169
170 shell$ netloc_draw_to_json /home/netloc/data/netloc
171 </pre><p>The <code>netloc_draw_to_json</code> command will write a JSON file for each topology file found in the input directory. The output files, written also in the input directory, can be open by <code>netloc_draw.html</code> in a web browser.</p>
172 <h2><a class="anchor" id="netloc_draw_tool"></a>
173 Using netloc_draw</h2>
174 <p>Once the JSON file is opened, the rendering is generated by the Javascript vis library for computing the position of the nodes. From the interface, it is possible to search for a specific node, to color the nodes, to expand merged switches, to show statistics, to export as an image... The user can interact with the nodes by moving them. For now, there are bugs and other nodes might move too.</p>
175 <p>The placement of the nodes is done statically if the topology is detected as a tree. If not, vis.js will use physics to find good positions, and it can be very time consuming.</p>
176 <div class="image">
177 <img src="netloc_draw.png" alt=""/>
178 </div>
179 </div></div><!-- contents -->
180 </div><!-- PageDoc -->
181 <!-- start footer part -->
182 <hr class="footer"/><address class="footer"><small>
183 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
184 </small></address>
185 </body>
186 </html>
0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1 <html xmlns="http://www.w3.org/1999/xhtml">
2 <head>
3 <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
4 <meta http-equiv="X-UA-Compatible" content="IE=9"/>
5 <meta name="generator" content="Doxygen 1.9.1"/>
6 <meta name="viewport" content="width=device-width, initial-scale=1"/>
7 <title>Hardware Locality (hwloc): Netloc with Scotch</title>
8 <link href="tabs.css" rel="stylesheet" type="text/css"/>
9 <script type="text/javascript" src="jquery.js"></script>
10 <script type="text/javascript" src="dynsections.js"></script>
11 <link href="doxygen.css" rel="stylesheet" type="text/css" />
12 </head>
13 <body>
14 <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
15 <div id="titlearea">
16 <table cellspacing="0" cellpadding="0">
17 <tbody>
18 <tr style="height: 56px;">
19 <td id="projectalign" style="padding-left: 0.5em;">
20 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.5.0rc1</span>
22 </div>
23 </td>
24 </tr>
25 </tbody>
26 </table>
27 </div>
28 <!-- end header part -->
29 <!-- Generated by Doxygen 1.9.1 -->
30 <script type="text/javascript" src="menudata.js"></script>
31 <script type="text/javascript" src="menu.js"></script>
32 <script type="text/javascript">
33 /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
34 $(function() {
35 initMenu('',false,false,'search.php','Search');
36 });
37 /* @license-end */</script>
38 <div id="main-nav"></div>
39 </div><!-- top -->
40 <div class="PageDoc"><div class="header">
41 <div class="headertitle">
42 <div class="title">Netloc with Scotch </div> </div>
43 </div><!--header-->
44 <div class="contents">
45 <div class="textblock"><p>
46 <div class="section">
47 </p>
48 <p>Scotch is a toolbox for graph partitioning [XXX], that can do mapping between a communication graph and an architecture. Netloc interfaces with Scotch, by getting the topology of the machine and building the Scotch architecture. It is also possible to directly build a mapping file that can be given to <code>mpirun</code>.</p>
49 <p>
50 </div><div class="section" id="scotch_intro">
51 </p>
52 <h1><a class="anchor" id="scotch_intro"></a>
53 Introduction</h1>
54 <p>Scotch is able to deal architectures to represent the topology of a complete machine. Scotch handles several types of topologies: complete graphs, hypercubes, fat trees, meshes, torus, and random graphs. Moreover, Scotch is able to manage parts of architectures that are called sub-architectures. Thus, from a complete architecture, we can create a sub-architecture that will represent the available resources of the complete machine.</p>
55 <p>
56 </div><div class="section" id="scotch_setup">
57 </p>
58 <h1><a class="anchor" id="scotch_setup"></a>
59 Setup</h1>
60 <p>The first step in order to use Netloc tools is to discover the network. For this task, we provide tools called netloc_gather that are wrappers to the dedicated tools provided by the manufacturer of the network, that generate the raw data given by the devices. This task needs privileges to access to the network devices. Once, this task is completed, the raw data is converted in a generic format independent to the fabric by extract_dats. Figure 1 shows how the different modules of Netloc are linked, and what are the tools provided by Netloc.</p>
61 <p>
62 </div><div class="section" id="scotch_tools_api">
63 </p>
64 <h1><a class="anchor" id="scotch_tools_api"></a>
65 Tools and API</h1>
66 <p>When the machine is discovered and all the needed files are generated as seen previously, a user can call the netlocscotch functions from the API and interact with Scotch.</p>
67 <h2><a class="anchor" id="netlocscotch_arch"></a>
68 Build Scotch architectures</h2>
69 <p>Netloc provides a function to export the built topology into the Scotch format. That will give the possibility to the user to play with the topology in Scotch. Since Netloc matches the discovered topology with known topologies, the Scotch architecture won’t be random graphs but known topologies also in Scotch that will lead to optimized graph algorithms. This function is called netlocscotch_build_arch.</p>
70 <p>When the network topology is a tree, the topology converted by netlocscotch is the complete topology of the machine containing intranode topologies from hwloc. In this case, merging the two levels results in a bigger tree. For other network topologies, the global graph created for Scotch is a generic graph since it not not (at this moment) possible to create nested known architectures.</p>
71 <h2><a class="anchor" id="netlocscotch_subarch"></a>
72 Build Scotch sub-architectures</h2>
73 <p>Most of the time, the user does not have access to the complete machine. He uses a resource manager to run his application and he will gain access only to a set of nodes. In this case getting the Scotch architecture of the complete machine is not relevant. Fortunately, Netloc is also able to build a Scotch sub-architecture that will contain only the available nodes. For this operation the user needs to run a specific program, netloc_get_resources, that will record in a file, the lists of available nodes and available cores by using MPI and hwloc. From this file, the function netlocscotch_build_subarch will build the Scotch sub-architecture.</p>
74 <h2><a class="anchor" id="netlocscotch_mapping"></a>
75 Mapping of processes</h2>
76 <p>A main goal in having all these data about the network topology, especially in Scotch structures, is to help the process placement. For that, we use the mapping of a process graph to the architecture provided by Scotch. As we have seen previously, Netloc is able to detect the structure of the topology and will build the adapted Scotch architecture that will be more efficient than a random structure.</p>
77 <p>In case, the network topology is not a tree, netlocscotch converts the complete topology into a generic graph. The drawback in that is the Scotch graph algorithms are less efficient. To overcome that, netlocscotch does two steps of mapping: first it maps the processes to the nodes, and then for each node maps the processes to the cores. We have to conduct tests to check if the method gives better results than using a generic graph directly.</p>
78 <p>The other input needed in Scotch is the process graph. Since we want to optimize the placement to decrease the communication time, a good metric for building the application graph is the amount of communications between all pairs of processes. Studies still have to be done to choose, in the most efficient way, what we take into account to define the amount of communications between the number of messages, the size of messages... This information will be transformed into a process graph.</p>
79 <p>Once we have a good mapping computed by Scotch, we can give it to the user, or Netloc can even generate the corresponding rank file useful to MPI. </p>
80 </div></div><!-- contents -->
81 </div><!-- PageDoc -->
82 <!-- start footer part -->
83 <hr class="footer"/><address class="footer"><small>
84 Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1
85 </small></address>
86 </body>
87 </html>
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4444 <div class="contents">
4545 <div class="textblock">Here are the data structures with brief descriptions:</div><div class="directory">
4646 <div class="levels">[detail level <span onclick="javascript:toggleLevel(1);">1</span><span onclick="javascript:toggleLevel(2);">2</span><span onclick="javascript:toggleLevel(3);">3</span>]</div><table class="directory">
47 <tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00380.html" target="_self">hwloc_backend</a></td><td class="desc">Discovery backend structure </td></tr>
48 <tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00328.html" target="_self">hwloc_cl_device_topology_amd</a></td><td class="desc"></td></tr>
49 <tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00384.html" target="_self">hwloc_component</a></td><td class="desc">Generic component structure </td></tr>
50 <tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00372.html" target="_self">hwloc_disc_component</a></td><td class="desc">Discovery component structure </td></tr>
51 <tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00376.html" target="_self">hwloc_disc_status</a></td><td class="desc">Discovery status structure </td></tr>
52 <tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00316.html" target="_self">hwloc_distances_s</a></td><td class="desc">Matrix of distances between a set of objects </td></tr>
53 <tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00292.html" target="_self">hwloc_info_s</a></td><td class="desc">Object info </td></tr>
54 <tr id="row_7_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_7_" class="arrow" onclick="toggleFolder('7_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00320.html" target="_self">hwloc_location</a></td><td class="desc">Where to measure attributes from </td></tr>
55 <tr id="row_7_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00324.html" target="_self">hwloc_location_u</a></td><td class="desc">Actual location </td></tr>
56 <tr id="row_8_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00244.html" target="_self">hwloc_obj</a></td><td class="desc">Structure of a topology object </td></tr>
57 <tr id="row_9_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_9_" class="arrow" onclick="toggleFolder('9_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00248.html" target="_self">hwloc_obj_attr_u</a></td><td class="desc">Object type-specific Attributes </td></tr>
58 <tr id="row_9_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00272.html" target="_self">hwloc_bridge_attr_s</a></td><td class="desc">Bridge specific Object Attribues </td></tr>
59 <tr id="row_9_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00260.html" target="_self">hwloc_cache_attr_s</a></td><td class="desc">Cache-specific Object Attributes </td></tr>
60 <tr id="row_9_2_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00264.html" target="_self">hwloc_group_attr_s</a></td><td class="desc">Group-specific Object Attributes </td></tr>
61 <tr id="row_9_3_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_9_3_" class="arrow" onclick="toggleFolder('9_3_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00252.html" target="_self">hwloc_numanode_attr_s</a></td><td class="desc">NUMA node-specific Object Attributes </td></tr>
62 <tr id="row_9_3_0_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00256.html" target="_self">hwloc_memory_page_type_s</a></td><td class="desc">Array of local memory page types, <code>NULL</code> if no local memory and <code>page_types</code> is 0 </td></tr>
63 <tr id="row_9_4_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00288.html" target="_self">hwloc_osdev_attr_s</a></td><td class="desc">OS Device specific Object Attributes </td></tr>
64 <tr id="row_9_5_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00268.html" target="_self">hwloc_pcidev_attr_s</a></td><td class="desc">PCI Device specific Object Attributes </td></tr>
65 <tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00300.html" target="_self">hwloc_topology_cpubind_support</a></td><td class="desc">Flags describing actual PU binding support for this topology </td></tr>
66 <tr id="row_11_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_11_" class="arrow" onclick="toggleFolder('11_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00340.html" target="_self">hwloc_topology_diff_obj_attr_u</a></td><td class="desc">One object attribute difference </td></tr>
67 <tr id="row_11_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00344.html" target="_self">hwloc_topology_diff_obj_attr_generic_s</a></td><td class="desc"></td></tr>
68 <tr id="row_11_1_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00352.html" target="_self">hwloc_topology_diff_obj_attr_string_s</a></td><td class="desc">String attribute modification with an optional name </td></tr>
69 <tr id="row_11_2_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00348.html" target="_self">hwloc_topology_diff_obj_attr_uint64_s</a></td><td class="desc">Integer attribute modification with an optional index </td></tr>
70 <tr id="row_12_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_12_" class="arrow" onclick="toggleFolder('12_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00356.html" target="_self">hwloc_topology_diff_u</a></td><td class="desc">One element of a difference list between two topologies </td></tr>
71 <tr id="row_12_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00360.html" target="_self">hwloc_topology_diff_generic_s</a></td><td class="desc"></td></tr>
72 <tr id="row_12_1_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00364.html" target="_self">hwloc_topology_diff_obj_attr_s</a></td><td class="desc"></td></tr>
73 <tr id="row_12_2_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00368.html" target="_self">hwloc_topology_diff_too_complex_s</a></td><td class="desc"></td></tr>
74 <tr id="row_13_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00296.html" target="_self">hwloc_topology_discovery_support</a></td><td class="desc">Flags describing actual discovery support for this topology </td></tr>
75 <tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00304.html" target="_self">hwloc_topology_membind_support</a></td><td class="desc">Flags describing actual memory binding support for this topology </td></tr>
76 <tr id="row_15_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00308.html" target="_self">hwloc_topology_misc_support</a></td><td class="desc">Flags describing miscellaneous features </td></tr>
77 <tr id="row_16_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00312.html" target="_self">hwloc_topology_support</a></td><td class="desc">Set of flags describing actual support for this topology </td></tr>
47 <tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00386.html" target="_self">hwloc_backend</a></td><td class="desc">Discovery backend structure </td></tr>
48 <tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00334.html" target="_self">hwloc_cl_device_topology_amd</a></td><td class="desc"></td></tr>
49 <tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00390.html" target="_self">hwloc_component</a></td><td class="desc">Generic component structure </td></tr>
50 <tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00378.html" target="_self">hwloc_disc_component</a></td><td class="desc">Discovery component structure </td></tr>
51 <tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00382.html" target="_self">hwloc_disc_status</a></td><td class="desc">Discovery status structure </td></tr>
52 <tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00322.html" target="_self">hwloc_distances_s</a></td><td class="desc">Matrix of distances between a set of objects </td></tr>
53 <tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00298.html" target="_self">hwloc_info_s</a></td><td class="desc">Object info </td></tr>
54 <tr id="row_7_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_7_" class="arrow" onclick="toggleFolder('7_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00326.html" target="_self">hwloc_location</a></td><td class="desc">Where to measure attributes from </td></tr>
55 <tr id="row_7_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00330.html" target="_self">hwloc_location_u</a></td><td class="desc">Actual location </td></tr>
56 <tr id="row_8_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00250.html" target="_self">hwloc_obj</a></td><td class="desc">Structure of a topology object </td></tr>
57 <tr id="row_9_" class="even"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_9_" class="arrow" onclick="toggleFolder('9_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00254.html" target="_self">hwloc_obj_attr_u</a></td><td class="desc">Object type-specific Attributes </td></tr>
58 <tr id="row_9_0_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00278.html" target="_self">hwloc_bridge_attr_s</a></td><td class="desc">Bridge specific Object Attribues </td></tr>
59 <tr id="row_9_1_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00266.html" target="_self">hwloc_cache_attr_s</a></td><td class="desc">Cache-specific Object Attributes </td></tr>
60 <tr id="row_9_2_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00270.html" target="_self">hwloc_group_attr_s</a></td><td class="desc">Group-specific Object Attributes </td></tr>
61 <tr id="row_9_3_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span id="arr_9_3_" class="arrow" onclick="toggleFolder('9_3_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00258.html" target="_self">hwloc_numanode_attr_s</a></td><td class="desc">NUMA node-specific Object Attributes </td></tr>
62 <tr id="row_9_3_0_"><td class="entry"><span style="width:48px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00262.html" target="_self">hwloc_memory_page_type_s</a></td><td class="desc">Array of local memory page types, <code>NULL</code> if no local memory and <code>page_types</code> is 0 </td></tr>
63 <tr id="row_9_4_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00294.html" target="_self">hwloc_osdev_attr_s</a></td><td class="desc">OS Device specific Object Attributes </td></tr>
64 <tr id="row_9_5_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00274.html" target="_self">hwloc_pcidev_attr_s</a></td><td class="desc">PCI Device specific Object Attributes </td></tr>
65 <tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00306.html" target="_self">hwloc_topology_cpubind_support</a></td><td class="desc">Flags describing actual PU binding support for this topology </td></tr>
66 <tr id="row_11_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_11_" class="arrow" onclick="toggleFolder('11_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00346.html" target="_self">hwloc_topology_diff_obj_attr_u</a></td><td class="desc">One object attribute difference </td></tr>
67 <tr id="row_11_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00350.html" target="_self">hwloc_topology_diff_obj_attr_generic_s</a></td><td class="desc"></td></tr>
68 <tr id="row_11_1_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00358.html" target="_self">hwloc_topology_diff_obj_attr_string_s</a></td><td class="desc">String attribute modification with an optional name </td></tr>
69 <tr id="row_11_2_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00354.html" target="_self">hwloc_topology_diff_obj_attr_uint64_s</a></td><td class="desc">Integer attribute modification with an optional index </td></tr>
70 <tr id="row_12_"><td class="entry"><span style="width:0px;display:inline-block;">&#160;</span><span id="arr_12_" class="arrow" onclick="toggleFolder('12_')">&#9660;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00362.html" target="_self">hwloc_topology_diff_u</a></td><td class="desc">One element of a difference list between two topologies </td></tr>
71 <tr id="row_12_0_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00366.html" target="_self">hwloc_topology_diff_generic_s</a></td><td class="desc"></td></tr>
72 <tr id="row_12_1_"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00370.html" target="_self">hwloc_topology_diff_obj_attr_s</a></td><td class="desc"></td></tr>
73 <tr id="row_12_2_" class="even"><td class="entry"><span style="width:32px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00374.html" target="_self">hwloc_topology_diff_too_complex_s</a></td><td class="desc"></td></tr>
74 <tr id="row_13_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00302.html" target="_self">hwloc_topology_discovery_support</a></td><td class="desc">Flags describing actual discovery support for this topology </td></tr>
75 <tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00310.html" target="_self">hwloc_topology_membind_support</a></td><td class="desc">Flags describing actual memory binding support for this topology </td></tr>
76 <tr id="row_15_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00314.html" target="_self">hwloc_topology_misc_support</a></td><td class="desc">Flags describing miscellaneous features </td></tr>
77 <tr id="row_16_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><span class="icona"><span class="icon">C</span></span><a class="el" href="a00318.html" target="_self">hwloc_topology_support</a></td><td class="desc">Set of flags describing actual support for this topology </td></tr>
7878 </table>
7979 </div><!-- directory -->
8080 </div><!-- contents -->
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4646 <div class="classindex">
4747 <dl class="classindex even">
4848 <dt class="alphachar"><a name="letter_H">H</a></dt>
49 <dd><a class="el" href="a00380.html">hwloc_backend</a></dd><dd><a class="el" href="a00272.html">hwloc_obj_attr_u::hwloc_bridge_attr_s</a></dd><dd><a class="el" href="a00260.html">hwloc_obj_attr_u::hwloc_cache_attr_s</a></dd><dd><a class="el" href="a00328.html">hwloc_cl_device_topology_amd</a></dd><dd><a class="el" href="a00384.html">hwloc_component</a></dd><dd><a class="el" href="a00372.html">hwloc_disc_component</a></dd><dd><a class="el" href="a00376.html">hwloc_disc_status</a></dd><dd><a class="el" href="a00316.html">hwloc_distances_s</a></dd><dd><a class="el" href="a00264.html">hwloc_obj_attr_u::hwloc_group_attr_s</a></dd><dd><a class="el" href="a00292.html">hwloc_info_s</a></dd><dd><a class="el" href="a00320.html">hwloc_location</a></dd><dd><a class="el" href="a00324.html">hwloc_location::hwloc_location_u</a></dd><dd><a class="el" href="a00256.html">hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s</a></dd><dd><a class="el" href="a00252.html">hwloc_obj_attr_u::hwloc_numanode_attr_s</a></dd><dd><a class="el" href="a00244.html">hwloc_obj</a></dd><dd><a class="el" href="a00248.html">hwloc_obj_attr_u</a></dd><dd><a class="el" href="a00288.html">hwloc_obj_attr_u::hwloc_osdev_attr_s</a></dd><dd><a class="el" href="a00268.html">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a></dd><dd><a class="el" href="a00300.html">hwloc_topology_cpubind_support</a></dd><dd><a class="el" href="a00360.html">hwloc_topology_diff_u::hwloc_topology_diff_generic_s</a></dd><dd><a class="el" href="a00344.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s</a></dd><dd><a class="el" href="a00364.html">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a></dd><dd><a class="el" href="a00352.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a></dd><dd><a class="el" href="a00340.html">hwloc_topology_diff_obj_attr_u</a></dd><dd><a class="el" href="a00348.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a></dd><dd><a class="el" href="a00368.html">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a></dd><dd><a class="el" href="a00356.html">hwloc_topology_diff_u</a></dd><dd><a class="el" href="a00296.html">hwloc_topology_discovery_support</a></dd><dd><a class="el" href="a00304.html">hwloc_topology_membind_support</a></dd><dd><a class="el" href="a00308.html">hwloc_topology_misc_support</a></dd><dd><a class="el" href="a00312.html">hwloc_topology_support</a></dd></dl>
49 <dd><a class="el" href="a00386.html">hwloc_backend</a></dd><dd><a class="el" href="a00278.html">hwloc_obj_attr_u::hwloc_bridge_attr_s</a></dd><dd><a class="el" href="a00266.html">hwloc_obj_attr_u::hwloc_cache_attr_s</a></dd><dd><a class="el" href="a00334.html">hwloc_cl_device_topology_amd</a></dd><dd><a class="el" href="a00390.html">hwloc_component</a></dd><dd><a class="el" href="a00378.html">hwloc_disc_component</a></dd><dd><a class="el" href="a00382.html">hwloc_disc_status</a></dd><dd><a class="el" href="a00322.html">hwloc_distances_s</a></dd><dd><a class="el" href="a00270.html">hwloc_obj_attr_u::hwloc_group_attr_s</a></dd><dd><a class="el" href="a00298.html">hwloc_info_s</a></dd><dd><a class="el" href="a00326.html">hwloc_location</a></dd><dd><a class="el" href="a00330.html">hwloc_location::hwloc_location_u</a></dd><dd><a class="el" href="a00262.html">hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s</a></dd><dd><a class="el" href="a00258.html">hwloc_obj_attr_u::hwloc_numanode_attr_s</a></dd><dd><a class="el" href="a00250.html">hwloc_obj</a></dd><dd><a class="el" href="a00254.html">hwloc_obj_attr_u</a></dd><dd><a class="el" href="a00294.html">hwloc_obj_attr_u::hwloc_osdev_attr_s</a></dd><dd><a class="el" href="a00274.html">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a></dd><dd><a class="el" href="a00306.html">hwloc_topology_cpubind_support</a></dd><dd><a class="el" href="a00366.html">hwloc_topology_diff_u::hwloc_topology_diff_generic_s</a></dd><dd><a class="el" href="a00350.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s</a></dd><dd><a class="el" href="a00370.html">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a></dd><dd><a class="el" href="a00358.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a></dd><dd><a class="el" href="a00346.html">hwloc_topology_diff_obj_attr_u</a></dd><dd><a class="el" href="a00354.html">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a></dd><dd><a class="el" href="a00374.html">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a></dd><dd><a class="el" href="a00362.html">hwloc_topology_diff_u</a></dd><dd><a class="el" href="a00302.html">hwloc_topology_discovery_support</a></dd><dd><a class="el" href="a00310.html">hwloc_topology_membind_support</a></dd><dd><a class="el" href="a00314.html">hwloc_topology_misc_support</a></dd><dd><a class="el" href="a00318.html">hwloc_topology_support</a></dd></dl>
5050 </div>
5151 </div><!-- contents -->
5252 <!-- start footer part -->
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4949 <table class="memberdecls">
5050 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
5151 Files</h2></td></tr>
52 <tr class="memitem:a00131"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>bitmap.h</b> <a href="a00131_source.html">[code]</a></td></tr>
52 <tr class="memitem:a00128"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>bitmap.h</b> <a href="a00128_source.html">[code]</a></td></tr>
5353 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
54 <tr class="memitem:a00143"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>cpukinds.h</b> <a href="a00143_source.html">[code]</a></td></tr>
54 <tr class="memitem:a00140"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>cpukinds.h</b> <a href="a00140_source.html">[code]</a></td></tr>
5555 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
5656 <tr class="memitem:a00158"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>cuda.h</b> <a href="a00158_source.html">[code]</a></td></tr>
5757 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
5858 <tr class="memitem:a00161"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>cudart.h</b> <a href="a00161_source.html">[code]</a></td></tr>
5959 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
60 <tr class="memitem:a00176"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>diff.h</b> <a href="a00176_source.html">[code]</a></td></tr>
60 <tr class="memitem:a00179"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>diff.h</b> <a href="a00179_source.html">[code]</a></td></tr>
6161 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
62 <tr class="memitem:a00137"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>distances.h</b> <a href="a00137_source.html">[code]</a></td></tr>
62 <tr class="memitem:a00134"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>distances.h</b> <a href="a00134_source.html">[code]</a></td></tr>
6363 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
64 <tr class="memitem:a00134"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>export.h</b> <a href="a00134_source.html">[code]</a></td></tr>
64 <tr class="memitem:a00131"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>export.h</b> <a href="a00131_source.html">[code]</a></td></tr>
6565 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
66 <tr class="memitem:a00170"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>gl.h</b> <a href="a00170_source.html">[code]</a></td></tr>
66 <tr class="memitem:a00173"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>gl.h</b> <a href="a00173_source.html">[code]</a></td></tr>
6767 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
6868 <tr class="memitem:a00152"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>glibc-sched.h</b> <a href="a00152_source.html">[code]</a></td></tr>
6969 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
70 <tr class="memitem:a00128"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>helper.h</b> <a href="a00128_source.html">[code]</a></td></tr>
70 <tr class="memitem:a00125"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>helper.h</b> <a href="a00125_source.html">[code]</a></td></tr>
7171 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
72 <tr class="memitem:a00149"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>linux-libnuma.h</b> <a href="a00149_source.html">[code]</a></td></tr>
72 <tr class="memitem:a00170"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>levelzero.h</b> <a href="a00170_source.html">[code]</a></td></tr>
7373 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
74 <tr class="memitem:a00146"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>linux.h</b> <a href="a00146_source.html">[code]</a></td></tr>
74 <tr class="memitem:a00146"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>linux-libnuma.h</b> <a href="a00146_source.html">[code]</a></td></tr>
7575 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
76 <tr class="memitem:a00140"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>memattrs.h</b> <a href="a00140_source.html">[code]</a></td></tr>
76 <tr class="memitem:a00143"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>linux.h</b> <a href="a00143_source.html">[code]</a></td></tr>
77 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
78 <tr class="memitem:a00137"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>memattrs.h</b> <a href="a00137_source.html">[code]</a></td></tr>
7779 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
7880 <tr class="memitem:a00164"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>nvml.h</b> <a href="a00164_source.html">[code]</a></td></tr>
7981 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
8082 <tr class="memitem:a00155"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>opencl.h</b> <a href="a00155_source.html">[code]</a></td></tr>
8183 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
82 <tr class="memitem:a00173"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>openfabrics-verbs.h</b> <a href="a00173_source.html">[code]</a></td></tr>
84 <tr class="memitem:a00176"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>openfabrics-verbs.h</b> <a href="a00176_source.html">[code]</a></td></tr>
8385 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
84 <tr class="memitem:a00182"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>plugins.h</b> <a href="a00182_source.html">[code]</a></td></tr>
86 <tr class="memitem:a00185"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>plugins.h</b> <a href="a00185_source.html">[code]</a></td></tr>
8587 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
8688 <tr class="memitem:a00167"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>rsmi.h</b> <a href="a00167_source.html">[code]</a></td></tr>
8789 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
88 <tr class="memitem:a00179"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>shmem.h</b> <a href="a00179_source.html">[code]</a></td></tr>
90 <tr class="memitem:a00182"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>shmem.h</b> <a href="a00182_source.html">[code]</a></td></tr>
91 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
92 <tr class="memitem:a00149"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>windows.h</b> <a href="a00149_source.html">[code]</a></td></tr>
8993 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
9094 </table>
9195 </div><!-- contents -->
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
5454 </table><table class="memberdecls">
5555 <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
5656 Files</h2></td></tr>
57 <tr class="memitem:a00125"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>hwloc.h</b> <a href="a00125_source.html">[code]</a></td></tr>
57 <tr class="memitem:a00122"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>hwloc.h</b> <a href="a00122_source.html">[code]</a></td></tr>
5858 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
59 <tr class="memitem:a00185"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>netloc.h</b> <a href="a00185_source.html">[code]</a></td></tr>
59 <tr class="memitem:a00188"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><b>netloc.h</b> <a href="a00188_source.html">[code]</a></td></tr>
6060 <tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
6161 </table>
6262 </div><!-- contents -->
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4242
4343 <h3><a id="index_a"></a>- a -</h3><ul>
4444 <li>abi
45 : <a class="el" href="a00384.html#a3250bd6fc9713946991d805e48091b2e">hwloc_component</a>
45 : <a class="el" href="a00390.html#a3250bd6fc9713946991d805e48091b2e">hwloc_component</a>
4646 </li>
4747 <li>alloc_membind
48 : <a class="el" href="a00304.html#ae551abb27d2aa9ce008583488b845b98">hwloc_topology_membind_support</a>
48 : <a class="el" href="a00310.html#ae551abb27d2aa9ce008583488b845b98">hwloc_topology_membind_support</a>
4949 </li>
5050 <li>arity
51 : <a class="el" href="a00244.html#aac3f6da35c9b57599909a44ce2b716c1">hwloc_obj</a>
51 : <a class="el" href="a00250.html#aac3f6da35c9b57599909a44ce2b716c1">hwloc_obj</a>
5252 </li>
5353 <li>associativity
54 : <a class="el" href="a00260.html#ad06525e474d1e2d1423ed71bb998592d">hwloc_obj_attr_u::hwloc_cache_attr_s</a>
54 : <a class="el" href="a00266.html#ad06525e474d1e2d1423ed71bb998592d">hwloc_obj_attr_u::hwloc_cache_attr_s</a>
5555 </li>
5656 <li>attr
57 : <a class="el" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj</a>
57 : <a class="el" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj</a>
5858 </li>
5959 </ul>
6060
6161
6262 <h3><a id="index_b"></a>- b -</h3><ul>
6363 <li>bind_membind
64 : <a class="el" href="a00304.html#ae7cdb1f1b5f0242a69f85b5a5538c764">hwloc_topology_membind_support</a>
64 : <a class="el" href="a00310.html#ae7cdb1f1b5f0242a69f85b5a5538c764">hwloc_topology_membind_support</a>
6565 </li>
6666 <li>bridge
67 : <a class="el" href="a00248.html#a207e6359497b7116d6f4baa9e8bbeb43">hwloc_obj_attr_u</a>
67 : <a class="el" href="a00254.html#a207e6359497b7116d6f4baa9e8bbeb43">hwloc_obj_attr_u</a>
6868 </li>
6969 <li>bus
70 : <a class="el" href="a00328.html#a4a23e3cc034b7ab105cab0e863dcab69">hwloc_cl_device_topology_amd</a>
71 , <a class="el" href="a00268.html#aae99e035e8d1387d7b8768aaa8eceb0a">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
70 : <a class="el" href="a00334.html#a4a23e3cc034b7ab105cab0e863dcab69">hwloc_cl_device_topology_amd</a>
71 , <a class="el" href="a00274.html#aae99e035e8d1387d7b8768aaa8eceb0a">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
7272 </li>
7373 </ul>
7474
7575
7676 <h3><a id="index_c"></a>- c -</h3><ul>
7777 <li>cache
78 : <a class="el" href="a00248.html#a23f553f3252c9d13f2338231cd354ea9">hwloc_obj_attr_u</a>
78 : <a class="el" href="a00254.html#a23f553f3252c9d13f2338231cd354ea9">hwloc_obj_attr_u</a>
7979 </li>
8080 <li>children
81 : <a class="el" href="a00244.html#a04d05403da37bfe17cd63b7c7dd07b1f">hwloc_obj</a>
81 : <a class="el" href="a00250.html#a04d05403da37bfe17cd63b7c7dd07b1f">hwloc_obj</a>
8282 </li>
8383 <li>class_id
84 : <a class="el" href="a00268.html#aee735352d9f1686fd290fc6d6397c334">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
84 : <a class="el" href="a00274.html#aee735352d9f1686fd290fc6d6397c334">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
8585 </li>
8686 <li>complete_cpuset
87 : <a class="el" href="a00244.html#a91788a9da687beb7224cc1fd7b75208c">hwloc_obj</a>
87 : <a class="el" href="a00250.html#a91788a9da687beb7224cc1fd7b75208c">hwloc_obj</a>
8888 </li>
8989 <li>complete_nodeset
90 : <a class="el" href="a00244.html#ac38c4012127525ef74c5615c526f4c2e">hwloc_obj</a>
90 : <a class="el" href="a00250.html#ac38c4012127525ef74c5615c526f4c2e">hwloc_obj</a>
9191 </li>
9292 <li>count
93 : <a class="el" href="a00256.html#a98514e37d57a325b78e21ffd8d7419e0">hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s</a>
93 : <a class="el" href="a00262.html#a98514e37d57a325b78e21ffd8d7419e0">hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s</a>
9494 </li>
9595 <li>cpubind
96 : <a class="el" href="a00312.html#adef2bb91f74c3e70a2a071393caf5f56">hwloc_topology_support</a>
96 : <a class="el" href="a00318.html#adef2bb91f74c3e70a2a071393caf5f56">hwloc_topology_support</a>
9797 </li>
9898 <li>cpukind_efficiency
99 : <a class="el" href="a00296.html#aba80d6f9c15e2395f9ed61db9ff3b75d">hwloc_topology_discovery_support</a>
99 : <a class="el" href="a00302.html#aba80d6f9c15e2395f9ed61db9ff3b75d">hwloc_topology_discovery_support</a>
100100 </li>
101101 <li>cpuset
102 : <a class="el" href="a00324.html#a033bad8f6b891992f0c18b85a88c5561">hwloc_location::hwloc_location_u</a>
103 , <a class="el" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">hwloc_obj</a>
102 : <a class="el" href="a00330.html#a033bad8f6b891992f0c18b85a88c5561">hwloc_location::hwloc_location_u</a>
103 , <a class="el" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">hwloc_obj</a>
104104 </li>
105105 </ul>
106106
107107
108108 <h3><a id="index_d"></a>- d -</h3><ul>
109109 <li>data
110 : <a class="el" href="a00328.html#afbd6b814607b06fc5b2f36ad14420398">hwloc_cl_device_topology_amd</a>
111 , <a class="el" href="a00384.html#a4b8cffd1d943c29fdc102b841b8598d4">hwloc_component</a>
110 : <a class="el" href="a00334.html#afbd6b814607b06fc5b2f36ad14420398">hwloc_cl_device_topology_amd</a>
111 , <a class="el" href="a00390.html#a4b8cffd1d943c29fdc102b841b8598d4">hwloc_component</a>
112112 </li>
113113 <li>depth
114 : <a class="el" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">hwloc_obj</a>
115 , <a class="el" href="a00272.html#a336c8b22893d5d734d8c9dfca4066b46">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
116 , <a class="el" href="a00260.html#a5c8f7f39193736c2187ed626940835d5">hwloc_obj_attr_u::hwloc_cache_attr_s</a>
117 , <a class="el" href="a00264.html#ad914eac61c77481e1b7037877bcc5579">hwloc_obj_attr_u::hwloc_group_attr_s</a>
114 : <a class="el" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">hwloc_obj</a>
115 , <a class="el" href="a00278.html#a336c8b22893d5d734d8c9dfca4066b46">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
116 , <a class="el" href="a00266.html#a5c8f7f39193736c2187ed626940835d5">hwloc_obj_attr_u::hwloc_cache_attr_s</a>
117 , <a class="el" href="a00270.html#ad914eac61c77481e1b7037877bcc5579">hwloc_obj_attr_u::hwloc_group_attr_s</a>
118118 </li>
119119 <li>dev
120 : <a class="el" href="a00268.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
120 : <a class="el" href="a00274.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
121121 </li>
122122 <li>device
123 : <a class="el" href="a00328.html#a017033a953d71455b067007cabb92e9c">hwloc_cl_device_topology_amd</a>
123 : <a class="el" href="a00334.html#a017033a953d71455b067007cabb92e9c">hwloc_cl_device_topology_amd</a>
124124 </li>
125125 <li>device_id
126 : <a class="el" href="a00268.html#a35b66064ab7d768caf7154e410caf0fa">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
126 : <a class="el" href="a00274.html#a35b66064ab7d768caf7154e410caf0fa">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
127127 </li>
128128 <li>diff
129 : <a class="el" href="a00364.html#a91f0645f9062e892652357cd141c8ebb">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>
129 : <a class="el" href="a00370.html#a91f0645f9062e892652357cd141c8ebb">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>
130130 </li>
131131 <li>disable
132 : <a class="el" href="a00380.html#a36c4fa86350525b46340c67b802c69c7">hwloc_backend</a>
132 : <a class="el" href="a00386.html#a36c4fa86350525b46340c67b802c69c7">hwloc_backend</a>
133133 </li>
134134 <li>disallowed_numa
135 : <a class="el" href="a00296.html#a970e65235873bcdb9669a9805161ce03">hwloc_topology_discovery_support</a>
135 : <a class="el" href="a00302.html#a970e65235873bcdb9669a9805161ce03">hwloc_topology_discovery_support</a>
136136 </li>
137137 <li>disallowed_pu
138 : <a class="el" href="a00296.html#af3c97b28781a2972cf8eaaf94a6617da">hwloc_topology_discovery_support</a>
138 : <a class="el" href="a00302.html#af3c97b28781a2972cf8eaaf94a6617da">hwloc_topology_discovery_support</a>
139139 </li>
140140 <li>discover
141 : <a class="el" href="a00380.html#accff2cd8404be43c3b44cec05e6f609b">hwloc_backend</a>
141 : <a class="el" href="a00386.html#accff2cd8404be43c3b44cec05e6f609b">hwloc_backend</a>
142142 </li>
143143 <li>discovery
144 : <a class="el" href="a00312.html#aea3fbd7653d987d81f848636c420504d">hwloc_topology_support</a>
144 : <a class="el" href="a00318.html#aea3fbd7653d987d81f848636c420504d">hwloc_topology_support</a>
145145 </li>
146146 <li>domain
147 : <a class="el" href="a00272.html#a2c31e565a5f0d23d0a0a3dd3ec8f4b17">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
148 , <a class="el" href="a00268.html#a8fba44988deb98613c1505a4019a34dc">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
147 : <a class="el" href="a00278.html#a2c31e565a5f0d23d0a0a3dd3ec8f4b17">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
148 , <a class="el" href="a00274.html#a8fba44988deb98613c1505a4019a34dc">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
149149 </li>
150150 <li>dont_merge
151 : <a class="el" href="a00264.html#afa253d4b70f92e940c226d61f192054f">hwloc_obj_attr_u::hwloc_group_attr_s</a>
151 : <a class="el" href="a00270.html#afa253d4b70f92e940c226d61f192054f">hwloc_obj_attr_u::hwloc_group_attr_s</a>
152152 </li>
153153 <li>downstream
154 : <a class="el" href="a00272.html#a7d5db91d655ba23ffe9bda7a2cbcb9a8">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
154 : <a class="el" href="a00278.html#a7d5db91d655ba23ffe9bda7a2cbcb9a8">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
155155 </li>
156156 <li>downstream_type
157 : <a class="el" href="a00272.html#ac6a169b672d0e9f75756fd5665828b93">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
157 : <a class="el" href="a00278.html#ac6a169b672d0e9f75756fd5665828b93">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
158158 </li>
159159 </ul>
160160
161161
162162 <h3><a id="index_e"></a>- e -</h3><ul>
163163 <li>enabled_by_default
164 : <a class="el" href="a00372.html#ace80cafe2b1732b047b3fc3da47e6517">hwloc_disc_component</a>
164 : <a class="el" href="a00378.html#ace80cafe2b1732b047b3fc3da47e6517">hwloc_disc_component</a>
165165 </li>
166166 <li>excluded_phases
167 : <a class="el" href="a00372.html#acbb9957914dbf7b8f504215aa0c8d3fe">hwloc_disc_component</a>
168 , <a class="el" href="a00376.html#a0f95fa42d46a6e7cf8dee8af12afee3a">hwloc_disc_status</a>
167 : <a class="el" href="a00378.html#acbb9957914dbf7b8f504215aa0c8d3fe">hwloc_disc_component</a>
168 , <a class="el" href="a00382.html#a0f95fa42d46a6e7cf8dee8af12afee3a">hwloc_disc_status</a>
169169 </li>
170170 </ul>
171171
172172
173173 <h3><a id="index_f"></a>- f -</h3><ul>
174174 <li>finalize
175 : <a class="el" href="a00384.html#a4612015451a1c706e8ba19114cb8baae">hwloc_component</a>
175 : <a class="el" href="a00390.html#a4612015451a1c706e8ba19114cb8baae">hwloc_component</a>
176176 </li>
177177 <li>first_child
178 : <a class="el" href="a00244.html#af51d08a0a79dba517c06c5afedc8d2dc">hwloc_obj</a>
178 : <a class="el" href="a00250.html#af51d08a0a79dba517c06c5afedc8d2dc">hwloc_obj</a>
179179 </li>
180180 <li>firsttouch_membind
181 : <a class="el" href="a00304.html#a221098c339dbfab27bd2c9f5d32f123b">hwloc_topology_membind_support</a>
181 : <a class="el" href="a00310.html#a221098c339dbfab27bd2c9f5d32f123b">hwloc_topology_membind_support</a>
182182 </li>
183183 <li>flags
184 : <a class="el" href="a00380.html#aaa8eafe495aadd81c2e3c4ec527c10ba">hwloc_backend</a>
185 , <a class="el" href="a00384.html#ab8043c5b4cc0e81aabba586ccb194335">hwloc_component</a>
186 , <a class="el" href="a00376.html#ad8b123cecb945a9182eb824ccf8ef9d7">hwloc_disc_status</a>
184 : <a class="el" href="a00386.html#aaa8eafe495aadd81c2e3c4ec527c10ba">hwloc_backend</a>
185 , <a class="el" href="a00390.html#ab8043c5b4cc0e81aabba586ccb194335">hwloc_component</a>
186 , <a class="el" href="a00382.html#ad8b123cecb945a9182eb824ccf8ef9d7">hwloc_disc_status</a>
187187 </li>
188188 <li>func
189 : <a class="el" href="a00268.html#a695f32df53f4ef728670bfcf31b74e0f">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
189 : <a class="el" href="a00274.html#a695f32df53f4ef728670bfcf31b74e0f">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
190190 </li>
191191 <li>function
192 : <a class="el" href="a00328.html#a77a67ac73cff98d330ef7258b240bac3">hwloc_cl_device_topology_amd</a>
192 : <a class="el" href="a00334.html#a77a67ac73cff98d330ef7258b240bac3">hwloc_cl_device_topology_amd</a>
193193 </li>
194194 </ul>
195195
196196
197197 <h3><a id="index_g"></a>- g -</h3><ul>
198198 <li>generic
199 : <a class="el" href="a00340.html#aeb449c0e04b14ebf8c3126756b6364f9">hwloc_topology_diff_obj_attr_u</a>
200 , <a class="el" href="a00356.html#a0dd2cbfba0eca2fc7a2645668bcae0f8">hwloc_topology_diff_u</a>
199 : <a class="el" href="a00346.html#aeb449c0e04b14ebf8c3126756b6364f9">hwloc_topology_diff_obj_attr_u</a>
200 , <a class="el" href="a00362.html#a0dd2cbfba0eca2fc7a2645668bcae0f8">hwloc_topology_diff_u</a>
201201 </li>
202202 <li>get_area_membind
203 : <a class="el" href="a00304.html#a0a84e24a06f2fa487fe8c9605c6f68b3">hwloc_topology_membind_support</a>
203 : <a class="el" href="a00310.html#a0a84e24a06f2fa487fe8c9605c6f68b3">hwloc_topology_membind_support</a>
204204 </li>
205205 <li>get_area_memlocation
206 : <a class="el" href="a00304.html#a30173553a68e0a4dd1672d26f8e892b1">hwloc_topology_membind_support</a>
206 : <a class="el" href="a00310.html#a30173553a68e0a4dd1672d26f8e892b1">hwloc_topology_membind_support</a>
207207 </li>
208208 <li>get_pci_busid_cpuset
209 : <a class="el" href="a00380.html#aaac253491264c20930f44817270bc502">hwloc_backend</a>
209 : <a class="el" href="a00386.html#aaac253491264c20930f44817270bc502">hwloc_backend</a>
210210 </li>
211211 <li>get_proc_cpubind
212 : <a class="el" href="a00300.html#aae705bc447adc163ead377362c4dfe9f">hwloc_topology_cpubind_support</a>
212 : <a class="el" href="a00306.html#aae705bc447adc163ead377362c4dfe9f">hwloc_topology_cpubind_support</a>
213213 </li>
214214 <li>get_proc_last_cpu_location
215 : <a class="el" href="a00300.html#a2554620148b7992a5093f338f5ae254f">hwloc_topology_cpubind_support</a>
215 : <a class="el" href="a00306.html#a2554620148b7992a5093f338f5ae254f">hwloc_topology_cpubind_support</a>
216216 </li>
217217 <li>get_proc_membind
218 : <a class="el" href="a00304.html#a9880cd2d605e316fc020167c49ca69ad">hwloc_topology_membind_support</a>
218 : <a class="el" href="a00310.html#a9880cd2d605e316fc020167c49ca69ad">hwloc_topology_membind_support</a>
219219 </li>
220220 <li>get_thisproc_cpubind
221 : <a class="el" href="a00300.html#a77a09ddd78ee3e9ff5f532a6ac74f7eb">hwloc_topology_cpubind_support</a>
221 : <a class="el" href="a00306.html#a77a09ddd78ee3e9ff5f532a6ac74f7eb">hwloc_topology_cpubind_support</a>
222222 </li>
223223 <li>get_thisproc_last_cpu_location
224 : <a class="el" href="a00300.html#ad2d5c94b738d92b7d2ede87e4e96321d">hwloc_topology_cpubind_support</a>
224 : <a class="el" href="a00306.html#ad2d5c94b738d92b7d2ede87e4e96321d">hwloc_topology_cpubind_support</a>
225225 </li>
226226 <li>get_thisproc_membind
227 : <a class="el" href="a00304.html#a3fd51e6fa5f0dd800322301b46b08559">hwloc_topology_membind_support</a>
227 : <a class="el" href="a00310.html#a3fd51e6fa5f0dd800322301b46b08559">hwloc_topology_membind_support</a>
228228 </li>
229229 <li>get_thisthread_cpubind
230 : <a class="el" href="a00300.html#a80d762e532d677dff262d83cc7bb1c60">hwloc_topology_cpubind_support</a>
230 : <a class="el" href="a00306.html#a80d762e532d677dff262d83cc7bb1c60">hwloc_topology_cpubind_support</a>
231231 </li>
232232 <li>get_thisthread_last_cpu_location
233 : <a class="el" href="a00300.html#a6be1f042fdce6bf41b4ea39f6f193808">hwloc_topology_cpubind_support</a>
233 : <a class="el" href="a00306.html#a6be1f042fdce6bf41b4ea39f6f193808">hwloc_topology_cpubind_support</a>
234234 </li>
235235 <li>get_thisthread_membind
236 : <a class="el" href="a00304.html#a63b0b2e26157b472f5717ee93cc7c535">hwloc_topology_membind_support</a>
236 : <a class="el" href="a00310.html#a63b0b2e26157b472f5717ee93cc7c535">hwloc_topology_membind_support</a>
237237 </li>
238238 <li>get_thread_cpubind
239 : <a class="el" href="a00300.html#a8dd4d8531ed2eebdce1507e7d104154e">hwloc_topology_cpubind_support</a>
239 : <a class="el" href="a00306.html#a8dd4d8531ed2eebdce1507e7d104154e">hwloc_topology_cpubind_support</a>
240240 </li>
241241 <li>gp_index
242 : <a class="el" href="a00244.html#a957984a355fa61c85f46605c336e7551">hwloc_obj</a>
242 : <a class="el" href="a00250.html#a957984a355fa61c85f46605c336e7551">hwloc_obj</a>
243243 </li>
244244 <li>group
245 : <a class="el" href="a00248.html#a9eddbd69e34cd2ef6af6d2ac31b6eff3">hwloc_obj_attr_u</a>
245 : <a class="el" href="a00254.html#a9eddbd69e34cd2ef6af6d2ac31b6eff3">hwloc_obj_attr_u</a>
246246 </li>
247247 </ul>
248248
249249
250250 <h3><a id="index_i"></a>- i -</h3><ul>
251251 <li>imported_support
252 : <a class="el" href="a00308.html#adf54a6dbe8e9dd5033dfe9c93df726c4">hwloc_topology_misc_support</a>
252 : <a class="el" href="a00314.html#adf54a6dbe8e9dd5033dfe9c93df726c4">hwloc_topology_misc_support</a>
253253 </li>
254254 <li>index
255 : <a class="el" href="a00348.html#adb772c3f1761ecadf496c80ae14afce3">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a>
255 : <a class="el" href="a00354.html#adb772c3f1761ecadf496c80ae14afce3">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a>
256256 </li>
257257 <li>infos
258 : <a class="el" href="a00244.html#a8604654c38b7a720efae5025d3a96ee6">hwloc_obj</a>
258 : <a class="el" href="a00250.html#a8604654c38b7a720efae5025d3a96ee6">hwloc_obj</a>
259259 </li>
260260 <li>infos_count
261 : <a class="el" href="a00244.html#a9843acc28cfbba903b63ea14b137ff70">hwloc_obj</a>
261 : <a class="el" href="a00250.html#a9843acc28cfbba903b63ea14b137ff70">hwloc_obj</a>
262262 </li>
263263 <li>init
264 : <a class="el" href="a00384.html#aea613546886d9b8221cadba920fe3ebc">hwloc_component</a>
264 : <a class="el" href="a00390.html#aea613546886d9b8221cadba920fe3ebc">hwloc_component</a>
265265 </li>
266266 <li>instantiate
267 : <a class="el" href="a00372.html#ab133956219739a1032a17131757d1961">hwloc_disc_component</a>
267 : <a class="el" href="a00378.html#ab133956219739a1032a17131757d1961">hwloc_disc_component</a>
268268 </li>
269269 <li>interleave_membind
270 : <a class="el" href="a00304.html#a3c44c6012860bbeba8a0f4c19710858d">hwloc_topology_membind_support</a>
270 : <a class="el" href="a00310.html#a3c44c6012860bbeba8a0f4c19710858d">hwloc_topology_membind_support</a>
271271 </li>
272272 <li>io_arity
273 : <a class="el" href="a00244.html#a7b3b29f0be377c7d2d52262019fc7d11">hwloc_obj</a>
273 : <a class="el" href="a00250.html#a7b3b29f0be377c7d2d52262019fc7d11">hwloc_obj</a>
274274 </li>
275275 <li>io_first_child
276 : <a class="el" href="a00244.html#a8d14c88e1ebc4ae67cc69f9e928558b3">hwloc_obj</a>
276 : <a class="el" href="a00250.html#a8d14c88e1ebc4ae67cc69f9e928558b3">hwloc_obj</a>
277277 </li>
278278 <li>is_thissystem
279 : <a class="el" href="a00380.html#ab8806f6db077f1bb2e9d63ec99223f7a">hwloc_backend</a>
279 : <a class="el" href="a00386.html#ab8806f6db077f1bb2e9d63ec99223f7a">hwloc_backend</a>
280280 </li>
281281 </ul>
282282
283283
284284 <h3><a id="index_k"></a>- k -</h3><ul>
285285 <li>kind
286 : <a class="el" href="a00316.html#aef9c83cf467da1b1fa4c36493febb3b5">hwloc_distances_s</a>
287 , <a class="el" href="a00264.html#a3229f269c4cc7e63492c168535e4f0c1">hwloc_obj_attr_u::hwloc_group_attr_s</a>
286 : <a class="el" href="a00322.html#aef9c83cf467da1b1fa4c36493febb3b5">hwloc_distances_s</a>
287 , <a class="el" href="a00270.html#a3229f269c4cc7e63492c168535e4f0c1">hwloc_obj_attr_u::hwloc_group_attr_s</a>
288288 </li>
289289 </ul>
290290
291291
292292 <h3><a id="index_l"></a>- l -</h3><ul>
293293 <li>last_child
294 : <a class="el" href="a00244.html#a84bd65634dbc55f4158b74443a9bd04f">hwloc_obj</a>
294 : <a class="el" href="a00250.html#a84bd65634dbc55f4158b74443a9bd04f">hwloc_obj</a>
295295 </li>
296296 <li>linesize
297 : <a class="el" href="a00260.html#a801e8a668e28caf06c8b88e9ae5c10db">hwloc_obj_attr_u::hwloc_cache_attr_s</a>
297 : <a class="el" href="a00266.html#a801e8a668e28caf06c8b88e9ae5c10db">hwloc_obj_attr_u::hwloc_cache_attr_s</a>
298298 </li>
299299 <li>linkspeed
300 : <a class="el" href="a00268.html#a59b2fce35f7cbde86c4fd305d0ccda5f">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
300 : <a class="el" href="a00274.html#a59b2fce35f7cbde86c4fd305d0ccda5f">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
301301 </li>
302302 <li>local_memory
303 : <a class="el" href="a00252.html#a6703cbf2afbf63c9d60c5ff4dc0c73aa">hwloc_obj_attr_u::hwloc_numanode_attr_s</a>
303 : <a class="el" href="a00258.html#a6703cbf2afbf63c9d60c5ff4dc0c73aa">hwloc_obj_attr_u::hwloc_numanode_attr_s</a>
304304 </li>
305305 <li>location
306 : <a class="el" href="a00320.html#a707a25a5b65177e4d081be49aa0777a2">hwloc_location</a>
306 : <a class="el" href="a00326.html#a707a25a5b65177e4d081be49aa0777a2">hwloc_location</a>
307307 </li>
308308 <li>logical_index
309 : <a class="el" href="a00244.html#a0d07fb7b8935e137c94d75a3eb492ae9">hwloc_obj</a>
309 : <a class="el" href="a00250.html#a0d07fb7b8935e137c94d75a3eb492ae9">hwloc_obj</a>
310310 </li>
311311 </ul>
312312
313313
314314 <h3><a id="index_m"></a>- m -</h3><ul>
315315 <li>membind
316 : <a class="el" href="a00312.html#ac6eb62ae8bc0a68dce679a7107a36194">hwloc_topology_support</a>
316 : <a class="el" href="a00318.html#ac6eb62ae8bc0a68dce679a7107a36194">hwloc_topology_support</a>
317317 </li>
318318 <li>memory_arity
319 : <a class="el" href="a00244.html#a6f834ea4dd26553cdea601d2fae6d3b7">hwloc_obj</a>
319 : <a class="el" href="a00250.html#a6f834ea4dd26553cdea601d2fae6d3b7">hwloc_obj</a>
320320 </li>
321321 <li>memory_first_child
322 : <a class="el" href="a00244.html#ac0e8200dba25b90d5954bd4ec61f97d3">hwloc_obj</a>
322 : <a class="el" href="a00250.html#ac0e8200dba25b90d5954bd4ec61f97d3">hwloc_obj</a>
323323 </li>
324324 <li>migrate_membind
325 : <a class="el" href="a00304.html#aafa7683871a6a760246f9b35209caec5">hwloc_topology_membind_support</a>
325 : <a class="el" href="a00310.html#aafa7683871a6a760246f9b35209caec5">hwloc_topology_membind_support</a>
326326 </li>
327327 <li>misc
328 : <a class="el" href="a00312.html#ab9d08df4b0b03994f21b893ece826e78">hwloc_topology_support</a>
328 : <a class="el" href="a00318.html#ab9d08df4b0b03994f21b893ece826e78">hwloc_topology_support</a>
329329 </li>
330330 <li>misc_arity
331 : <a class="el" href="a00244.html#a2bb7862ce722d7ceda23cfa153da165a">hwloc_obj</a>
331 : <a class="el" href="a00250.html#a2bb7862ce722d7ceda23cfa153da165a">hwloc_obj</a>
332332 </li>
333333 <li>misc_first_child
334 : <a class="el" href="a00244.html#a57812a313fe9b1a9500489f47c3011cc">hwloc_obj</a>
334 : <a class="el" href="a00250.html#a57812a313fe9b1a9500489f47c3011cc">hwloc_obj</a>
335335 </li>
336336 </ul>
337337
338338
339339 <h3><a id="index_n"></a>- n -</h3><ul>
340340 <li>name
341 : <a class="el" href="a00372.html#a4064c3b5d9213027e87caebef380a840">hwloc_disc_component</a>
342 , <a class="el" href="a00292.html#a12ce1309e4381ae38b5c15d242a47124">hwloc_info_s</a>
343 , <a class="el" href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">hwloc_obj</a>
344 , <a class="el" href="a00352.html#a7ef48c66ccddf34d90edb4e4314b41c6">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a>
341 : <a class="el" href="a00378.html#a4064c3b5d9213027e87caebef380a840">hwloc_disc_component</a>
342 , <a class="el" href="a00298.html#a12ce1309e4381ae38b5c15d242a47124">hwloc_info_s</a>
343 , <a class="el" href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">hwloc_obj</a>
344 , <a class="el" href="a00358.html#a7ef48c66ccddf34d90edb4e4314b41c6">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a>
345345 </li>
346346 <li>nbobjs
347 : <a class="el" href="a00316.html#a4ca2af858cebbce7324ec49903d09474">hwloc_distances_s</a>
347 : <a class="el" href="a00322.html#a4ca2af858cebbce7324ec49903d09474">hwloc_distances_s</a>
348348 </li>
349349 <li>newvalue
350 : <a class="el" href="a00352.html#a75f37f4add21cece50fee2701c3b77db">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a>
351 , <a class="el" href="a00348.html#ae63aa59ad65aa783b730a4f213304eb4">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a>
350 : <a class="el" href="a00358.html#a75f37f4add21cece50fee2701c3b77db">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a>
351 , <a class="el" href="a00354.html#ae63aa59ad65aa783b730a4f213304eb4">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a>
352352 </li>
353353 <li>next
354 : <a class="el" href="a00360.html#a720aa94eb73cddfd8d6bf9fcbbfc035e">hwloc_topology_diff_u::hwloc_topology_diff_generic_s</a>
355 , <a class="el" href="a00364.html#acb9170a8eb3392656d70f7f3ef3e3eed">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>
356 , <a class="el" href="a00368.html#a375afbaa043b109be689a7d9a3c7d153">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a>
354 : <a class="el" href="a00366.html#a720aa94eb73cddfd8d6bf9fcbbfc035e">hwloc_topology_diff_u::hwloc_topology_diff_generic_s</a>
355 , <a class="el" href="a00370.html#acb9170a8eb3392656d70f7f3ef3e3eed">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>
356 , <a class="el" href="a00374.html#a375afbaa043b109be689a7d9a3c7d153">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a>
357357 </li>
358358 <li>next_cousin
359 : <a class="el" href="a00244.html#a85a788017457129589318b6c39451acf">hwloc_obj</a>
359 : <a class="el" href="a00250.html#a85a788017457129589318b6c39451acf">hwloc_obj</a>
360360 </li>
361361 <li>next_sibling
362 : <a class="el" href="a00244.html#a7f2343ed476fe4942e6fffd4cade1b40">hwloc_obj</a>
362 : <a class="el" href="a00250.html#a7f2343ed476fe4942e6fffd4cade1b40">hwloc_obj</a>
363363 </li>
364364 <li>nexttouch_membind
365 : <a class="el" href="a00304.html#ab0921af6e0cd6975812a80b8e5c7435c">hwloc_topology_membind_support</a>
365 : <a class="el" href="a00310.html#ab0921af6e0cd6975812a80b8e5c7435c">hwloc_topology_membind_support</a>
366366 </li>
367367 <li>nodeset
368 : <a class="el" href="a00244.html#a08f0d0e16c619a6e653526cbee4ffea3">hwloc_obj</a>
368 : <a class="el" href="a00250.html#a08f0d0e16c619a6e653526cbee4ffea3">hwloc_obj</a>
369369 </li>
370370 <li>numa
371 : <a class="el" href="a00296.html#a955f96066cb9e4cd34e2a3710ad43e80">hwloc_topology_discovery_support</a>
371 : <a class="el" href="a00302.html#a955f96066cb9e4cd34e2a3710ad43e80">hwloc_topology_discovery_support</a>
372372 </li>
373373 <li>numa_memory
374 : <a class="el" href="a00296.html#af193eb858e40e12ef4923f5ed0e1f11a">hwloc_topology_discovery_support</a>
374 : <a class="el" href="a00302.html#af193eb858e40e12ef4923f5ed0e1f11a">hwloc_topology_discovery_support</a>
375375 </li>
376376 <li>numanode
377 : <a class="el" href="a00248.html#ad066b9612802ffa01e132dc3a8e6cc86">hwloc_obj_attr_u</a>
377 : <a class="el" href="a00254.html#ad066b9612802ffa01e132dc3a8e6cc86">hwloc_obj_attr_u</a>
378378 </li>
379379 </ul>
380380
381381
382382 <h3><a id="index_o"></a>- o -</h3><ul>
383383 <li>obj_attr
384 : <a class="el" href="a00356.html#a01dca644feea48448b36baa60cf4c07f">hwloc_topology_diff_u</a>
384 : <a class="el" href="a00362.html#a01dca644feea48448b36baa60cf4c07f">hwloc_topology_diff_u</a>
385385 </li>
386386 <li>obj_depth
387 : <a class="el" href="a00364.html#a82c1d4bab80b9e0bf301a9d8291893e0">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>
388 , <a class="el" href="a00368.html#a94c6498caeaafbb79927395d918d6cb3">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a>
387 : <a class="el" href="a00370.html#a82c1d4bab80b9e0bf301a9d8291893e0">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>
388 , <a class="el" href="a00374.html#a94c6498caeaafbb79927395d918d6cb3">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a>
389389 </li>
390390 <li>obj_index
391 : <a class="el" href="a00364.html#adb9f4d414470b6670cde8d90759a6c1c">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>
392 , <a class="el" href="a00368.html#a6dc6b3c4adb10db74d993e37afaa0580">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a>
391 : <a class="el" href="a00370.html#adb9f4d414470b6670cde8d90759a6c1c">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>
392 , <a class="el" href="a00374.html#a6dc6b3c4adb10db74d993e37afaa0580">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a>
393393 </li>
394394 <li>object
395 : <a class="el" href="a00324.html#acf2ebf75869f0a53a884ac2ab3374122">hwloc_location::hwloc_location_u</a>
395 : <a class="el" href="a00330.html#acf2ebf75869f0a53a884ac2ab3374122">hwloc_location::hwloc_location_u</a>
396396 </li>
397397 <li>objs
398 : <a class="el" href="a00316.html#af1e78b2d628d191fa6cae3fbfe891078">hwloc_distances_s</a>
398 : <a class="el" href="a00322.html#af1e78b2d628d191fa6cae3fbfe891078">hwloc_distances_s</a>
399399 </li>
400400 <li>oldvalue
401 : <a class="el" href="a00352.html#a33cc281d4417129064295a6ae7b79818">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a>
402 , <a class="el" href="a00348.html#a44c0894dce563335d347fde6595c49c9">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a>
401 : <a class="el" href="a00358.html#a33cc281d4417129064295a6ae7b79818">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a>
402 , <a class="el" href="a00354.html#a44c0894dce563335d347fde6595c49c9">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a>
403403 </li>
404404 <li>os_index
405 : <a class="el" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">hwloc_obj</a>
405 : <a class="el" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">hwloc_obj</a>
406406 </li>
407407 <li>osdev
408 : <a class="el" href="a00248.html#aaf7a5c38b5185703ff18c46ad2761dcf">hwloc_obj_attr_u</a>
408 : <a class="el" href="a00254.html#aaf7a5c38b5185703ff18c46ad2761dcf">hwloc_obj_attr_u</a>
409409 </li>
410410 </ul>
411411
412412
413413 <h3><a id="index_p"></a>- p -</h3><ul>
414414 <li>page_types
415 : <a class="el" href="a00252.html#a7e53c5024da2d7741a5cc1e7016bb8d2">hwloc_obj_attr_u::hwloc_numanode_attr_s</a>
415 : <a class="el" href="a00258.html#a7e53c5024da2d7741a5cc1e7016bb8d2">hwloc_obj_attr_u::hwloc_numanode_attr_s</a>
416416 </li>
417417 <li>page_types_len
418 : <a class="el" href="a00252.html#a513078122d403904e16723d30f583cb2">hwloc_obj_attr_u::hwloc_numanode_attr_s</a>
418 : <a class="el" href="a00258.html#a513078122d403904e16723d30f583cb2">hwloc_obj_attr_u::hwloc_numanode_attr_s</a>
419419 </li>
420420 <li>parent
421 : <a class="el" href="a00244.html#adc494f6aed939992be1c55cca5822900">hwloc_obj</a>
421 : <a class="el" href="a00250.html#adc494f6aed939992be1c55cca5822900">hwloc_obj</a>
422422 </li>
423423 <li>pci
424 : <a class="el" href="a00272.html#ab5c564e7c95b747dae9eb84ec0a2c31e">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
424 : <a class="el" href="a00278.html#ab5c564e7c95b747dae9eb84ec0a2c31e">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
425425 </li>
426426 <li>pcidev
427 : <a class="el" href="a00248.html#a0b66da7ab072f7c016f8ed86701f5a7c">hwloc_obj_attr_u</a>
427 : <a class="el" href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">hwloc_obj_attr_u</a>
428428 </li>
429429 <li>pcie
430 : <a class="el" href="a00328.html#a05e9a845012cd9d1f13a39cc35ab40a1">hwloc_cl_device_topology_amd</a>
430 : <a class="el" href="a00334.html#a05e9a845012cd9d1f13a39cc35ab40a1">hwloc_cl_device_topology_amd</a>
431431 </li>
432432 <li>phase
433 : <a class="el" href="a00376.html#abaf7c8c082d43e133171f0723dbf824b">hwloc_disc_status</a>
433 : <a class="el" href="a00382.html#abaf7c8c082d43e133171f0723dbf824b">hwloc_disc_status</a>
434434 </li>
435435 <li>phases
436 : <a class="el" href="a00380.html#aeca769840a6ff03e96462a9533adbccd">hwloc_backend</a>
437 , <a class="el" href="a00372.html#a61ad3151efa02e3dbad5d919758f9c90">hwloc_disc_component</a>
436 : <a class="el" href="a00386.html#aeca769840a6ff03e96462a9533adbccd">hwloc_backend</a>
437 , <a class="el" href="a00378.html#a61ad3151efa02e3dbad5d919758f9c90">hwloc_disc_component</a>
438438 </li>
439439 <li>prev_cousin
440 : <a class="el" href="a00244.html#ac715989f55ff5a0eb6be2969ee477ec0">hwloc_obj</a>
440 : <a class="el" href="a00250.html#ac715989f55ff5a0eb6be2969ee477ec0">hwloc_obj</a>
441441 </li>
442442 <li>prev_sibling
443 : <a class="el" href="a00244.html#a7b89e8c189876c0158a9282aaaf17f50">hwloc_obj</a>
443 : <a class="el" href="a00250.html#a7b89e8c189876c0158a9282aaaf17f50">hwloc_obj</a>
444444 </li>
445445 <li>priority
446 : <a class="el" href="a00372.html#ae86d283c272c5ae24073a235efbf6b59">hwloc_disc_component</a>
446 : <a class="el" href="a00378.html#ae86d283c272c5ae24073a235efbf6b59">hwloc_disc_component</a>
447447 </li>
448448 <li>private_data
449 : <a class="el" href="a00380.html#a2ea5bd36b7f06efdb65b98b32af16c68">hwloc_backend</a>
449 : <a class="el" href="a00386.html#a2ea5bd36b7f06efdb65b98b32af16c68">hwloc_backend</a>
450450 </li>
451451 <li>pu
452 : <a class="el" href="a00296.html#ad7bb4ecf7a82f5a04fc632e9592ad3ab">hwloc_topology_discovery_support</a>
452 : <a class="el" href="a00302.html#ad7bb4ecf7a82f5a04fc632e9592ad3ab">hwloc_topology_discovery_support</a>
453453 </li>
454454 </ul>
455455
456456
457457 <h3><a id="index_r"></a>- r -</h3><ul>
458458 <li>raw
459 : <a class="el" href="a00328.html#a7bba6ab297b6f44e43c5937b80b4cfb6">hwloc_cl_device_topology_amd</a>
459 : <a class="el" href="a00334.html#a7bba6ab297b6f44e43c5937b80b4cfb6">hwloc_cl_device_topology_amd</a>
460460 </li>
461461 <li>revision
462 : <a class="el" href="a00268.html#a13ad54c93d08d8ac808e4de9674c5ee7">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
462 : <a class="el" href="a00274.html#a13ad54c93d08d8ac808e4de9674c5ee7">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
463463 </li>
464464 </ul>
465465
466466
467467 <h3><a id="index_s"></a>- s -</h3><ul>
468468 <li>secondary_bus
469 : <a class="el" href="a00272.html#ae2d9dd73ef1d32045c584a8e66d2f83f">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
469 : <a class="el" href="a00278.html#ae2d9dd73ef1d32045c584a8e66d2f83f">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
470470 </li>
471471 <li>set_area_membind
472 : <a class="el" href="a00304.html#a476c06f96b65c08b287cf2369966123b">hwloc_topology_membind_support</a>
472 : <a class="el" href="a00310.html#a476c06f96b65c08b287cf2369966123b">hwloc_topology_membind_support</a>
473473 </li>
474474 <li>set_proc_cpubind
475 : <a class="el" href="a00300.html#aa166223d1c2a6de7256ab2d8b675a87e">hwloc_topology_cpubind_support</a>
475 : <a class="el" href="a00306.html#aa166223d1c2a6de7256ab2d8b675a87e">hwloc_topology_cpubind_support</a>
476476 </li>
477477 <li>set_proc_membind
478 : <a class="el" href="a00304.html#a756f44912894b176bf979a1b65f12aac">hwloc_topology_membind_support</a>
478 : <a class="el" href="a00310.html#a756f44912894b176bf979a1b65f12aac">hwloc_topology_membind_support</a>
479479 </li>
480480 <li>set_thisproc_cpubind
481 : <a class="el" href="a00300.html#a9403d51657a4d546b3ea9553a2973a27">hwloc_topology_cpubind_support</a>
481 : <a class="el" href="a00306.html#a9403d51657a4d546b3ea9553a2973a27">hwloc_topology_cpubind_support</a>
482482 </li>
483483 <li>set_thisproc_membind
484 : <a class="el" href="a00304.html#a36b3e388df9c6a249427cab7e3724749">hwloc_topology_membind_support</a>
484 : <a class="el" href="a00310.html#a36b3e388df9c6a249427cab7e3724749">hwloc_topology_membind_support</a>
485485 </li>
486486 <li>set_thisthread_cpubind
487 : <a class="el" href="a00300.html#a57a89a4b5f1f74fa6cfe176f1e8b0798">hwloc_topology_cpubind_support</a>
487 : <a class="el" href="a00306.html#a57a89a4b5f1f74fa6cfe176f1e8b0798">hwloc_topology_cpubind_support</a>
488488 </li>
489489 <li>set_thisthread_membind
490 : <a class="el" href="a00304.html#a0697af2e41f2e82b8ce71e3cc13f7eac">hwloc_topology_membind_support</a>
490 : <a class="el" href="a00310.html#a0697af2e41f2e82b8ce71e3cc13f7eac">hwloc_topology_membind_support</a>
491491 </li>
492492 <li>set_thread_cpubind
493 : <a class="el" href="a00300.html#a46fba33e307909ce256624687799dd6d">hwloc_topology_cpubind_support</a>
493 : <a class="el" href="a00306.html#a46fba33e307909ce256624687799dd6d">hwloc_topology_cpubind_support</a>
494494 </li>
495495 <li>sibling_rank
496 : <a class="el" href="a00244.html#aaa6043eee6f55869933c1d974efd9acd">hwloc_obj</a>
496 : <a class="el" href="a00250.html#aaa6043eee6f55869933c1d974efd9acd">hwloc_obj</a>
497497 </li>
498498 <li>size
499 : <a class="el" href="a00260.html#abe5e788943ed04302976740c829674c0">hwloc_obj_attr_u::hwloc_cache_attr_s</a>
500 , <a class="el" href="a00256.html#a8ea7ebe9d91c7378bba03da57efc25cb">hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s</a>
499 : <a class="el" href="a00266.html#abe5e788943ed04302976740c829674c0">hwloc_obj_attr_u::hwloc_cache_attr_s</a>
500 , <a class="el" href="a00262.html#a8ea7ebe9d91c7378bba03da57efc25cb">hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s</a>
501501 </li>
502502 <li>string
503 : <a class="el" href="a00340.html#a42fa15c37f1f59ef638066c4c62c3154">hwloc_topology_diff_obj_attr_u</a>
503 : <a class="el" href="a00346.html#a42fa15c37f1f59ef638066c4c62c3154">hwloc_topology_diff_obj_attr_u</a>
504504 </li>
505505 <li>subdevice_id
506 : <a class="el" href="a00268.html#acac741aecd7a6db64f33409427e3971f">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
506 : <a class="el" href="a00274.html#acac741aecd7a6db64f33409427e3971f">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
507507 </li>
508508 <li>subkind
509 : <a class="el" href="a00264.html#ad514d943960a4036ed5e44dc187c74ed">hwloc_obj_attr_u::hwloc_group_attr_s</a>
509 : <a class="el" href="a00270.html#ad514d943960a4036ed5e44dc187c74ed">hwloc_obj_attr_u::hwloc_group_attr_s</a>
510510 </li>
511511 <li>subordinate_bus
512 : <a class="el" href="a00272.html#af3f3f7d76bf03e8d2afa721c2b8d6771">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
512 : <a class="el" href="a00278.html#af3f3f7d76bf03e8d2afa721c2b8d6771">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
513513 </li>
514514 <li>subtype
515 : <a class="el" href="a00244.html#a5d4f97e76723a9ec8d38046f19e00d33">hwloc_obj</a>
515 : <a class="el" href="a00250.html#a5d4f97e76723a9ec8d38046f19e00d33">hwloc_obj</a>
516516 </li>
517517 <li>subvendor_id
518 : <a class="el" href="a00268.html#a499db3d8cc89eaba04fcaef3df1cba97">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
518 : <a class="el" href="a00274.html#a499db3d8cc89eaba04fcaef3df1cba97">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
519519 </li>
520520 <li>symmetric_subtree
521 : <a class="el" href="a00244.html#a0f41a1d67dc6b661906f2217563637f3">hwloc_obj</a>
521 : <a class="el" href="a00250.html#a0f41a1d67dc6b661906f2217563637f3">hwloc_obj</a>
522522 </li>
523523 </ul>
524524
525525
526526 <h3><a id="index_t"></a>- t -</h3><ul>
527527 <li>too_complex
528 : <a class="el" href="a00356.html#af7dc1148eb656c56e9678218cafd027b">hwloc_topology_diff_u</a>
528 : <a class="el" href="a00362.html#af7dc1148eb656c56e9678218cafd027b">hwloc_topology_diff_u</a>
529529 </li>
530530 <li>total_memory
531 : <a class="el" href="a00244.html#a75603fc36c9284ba48ce814b772a58b6">hwloc_obj</a>
531 : <a class="el" href="a00250.html#a75603fc36c9284ba48ce814b772a58b6">hwloc_obj</a>
532532 </li>
533533 <li>type
534 : <a class="el" href="a00328.html#a8ec4ea89b862bb271845b48063f332b4">hwloc_cl_device_topology_amd</a>
535 , <a class="el" href="a00384.html#a789208ada7e17492cfd3a5a88a6bb0ee">hwloc_component</a>
536 , <a class="el" href="a00320.html#aeb9c0ab74a7d3506a76d0b82600a28a7">hwloc_location</a>
537 , <a class="el" href="a00244.html#acc4f0803f244867e68fe0036800be5de">hwloc_obj</a>
538 , <a class="el" href="a00260.html#ad8edc8ded2b7a70d6abbc874801930f4">hwloc_obj_attr_u::hwloc_cache_attr_s</a>
539 , <a class="el" href="a00288.html#a31e019e27e54ac6138d04be639bb96f9">hwloc_obj_attr_u::hwloc_osdev_attr_s</a>
540 , <a class="el" href="a00344.html#a43f8133b7c30129b002c2d295e6580fc">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s</a>
541 , <a class="el" href="a00352.html#a784ab5827c1bf531b86d1f02f199d04d">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a>
542 , <a class="el" href="a00348.html#afe262b9aa558fe7bfecbd37a7a129197">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a>
543 , <a class="el" href="a00360.html#a373005489fcddeba6319163e60263ae8">hwloc_topology_diff_u::hwloc_topology_diff_generic_s</a>
544 , <a class="el" href="a00364.html#a70a118ad288bd98f18c8ce6dc52e2d10">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>
545 , <a class="el" href="a00368.html#a92084295a4d6faf17a95a7eea526ddbd">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a>
534 : <a class="el" href="a00334.html#a8ec4ea89b862bb271845b48063f332b4">hwloc_cl_device_topology_amd</a>
535 , <a class="el" href="a00390.html#a789208ada7e17492cfd3a5a88a6bb0ee">hwloc_component</a>
536 , <a class="el" href="a00326.html#aeb9c0ab74a7d3506a76d0b82600a28a7">hwloc_location</a>
537 , <a class="el" href="a00250.html#acc4f0803f244867e68fe0036800be5de">hwloc_obj</a>
538 , <a class="el" href="a00266.html#ad8edc8ded2b7a70d6abbc874801930f4">hwloc_obj_attr_u::hwloc_cache_attr_s</a>
539 , <a class="el" href="a00294.html#a31e019e27e54ac6138d04be639bb96f9">hwloc_obj_attr_u::hwloc_osdev_attr_s</a>
540 , <a class="el" href="a00350.html#a43f8133b7c30129b002c2d295e6580fc">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s</a>
541 , <a class="el" href="a00358.html#a784ab5827c1bf531b86d1f02f199d04d">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a>
542 , <a class="el" href="a00354.html#afe262b9aa558fe7bfecbd37a7a129197">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a>
543 , <a class="el" href="a00366.html#a373005489fcddeba6319163e60263ae8">hwloc_topology_diff_u::hwloc_topology_diff_generic_s</a>
544 , <a class="el" href="a00370.html#a70a118ad288bd98f18c8ce6dc52e2d10">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>
545 , <a class="el" href="a00374.html#a92084295a4d6faf17a95a7eea526ddbd">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a>
546546 </li>
547547 </ul>
548548
549549
550550 <h3><a id="index_u"></a>- u -</h3><ul>
551551 <li>uint64
552 : <a class="el" href="a00340.html#a4608ade88460f5f208887775e5a69a0a">hwloc_topology_diff_obj_attr_u</a>
552 : <a class="el" href="a00346.html#a4608ade88460f5f208887775e5a69a0a">hwloc_topology_diff_obj_attr_u</a>
553553 </li>
554554 <li>unused
555 : <a class="el" href="a00328.html#ac8650d7eea96eef290481fee980d1d47">hwloc_cl_device_topology_amd</a>
555 : <a class="el" href="a00334.html#ac8650d7eea96eef290481fee980d1d47">hwloc_cl_device_topology_amd</a>
556556 </li>
557557 <li>upstream
558 : <a class="el" href="a00272.html#ab62888c880f8bb730292722f5811958d">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
558 : <a class="el" href="a00278.html#ab62888c880f8bb730292722f5811958d">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
559559 </li>
560560 <li>upstream_type
561 : <a class="el" href="a00272.html#a265dd2164aa2df4972e25a029da72125">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
561 : <a class="el" href="a00278.html#a265dd2164aa2df4972e25a029da72125">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
562562 </li>
563563 <li>userdata
564 : <a class="el" href="a00244.html#a76fd3ac94401cf32dfccc3a3a8de68a5">hwloc_obj</a>
564 : <a class="el" href="a00250.html#a76fd3ac94401cf32dfccc3a3a8de68a5">hwloc_obj</a>
565565 </li>
566566 </ul>
567567
568568
569569 <h3><a id="index_v"></a>- v -</h3><ul>
570570 <li>value
571 : <a class="el" href="a00292.html#a788a0073bafe660645e7b69f31a43bbb">hwloc_info_s</a>
571 : <a class="el" href="a00298.html#a788a0073bafe660645e7b69f31a43bbb">hwloc_info_s</a>
572572 </li>
573573 <li>values
574 : <a class="el" href="a00316.html#ae43e19b2c743de05c93d71a30beaca75">hwloc_distances_s</a>
574 : <a class="el" href="a00322.html#ae43e19b2c743de05c93d71a30beaca75">hwloc_distances_s</a>
575575 </li>
576576 <li>vendor_id
577 : <a class="el" href="a00268.html#aad970ad19b62eb2d5df30e4802da4f4c">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
577 : <a class="el" href="a00274.html#aad970ad19b62eb2d5df30e4802da4f4c">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
578578 </li>
579579 </ul>
580580 </div><!-- contents -->
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4242
4343 <h3><a id="index_a"></a>- a -</h3><ul>
4444 <li>abi
45 : <a class="el" href="a00384.html#a3250bd6fc9713946991d805e48091b2e">hwloc_component</a>
45 : <a class="el" href="a00390.html#a3250bd6fc9713946991d805e48091b2e">hwloc_component</a>
4646 </li>
4747 <li>alloc_membind
48 : <a class="el" href="a00304.html#ae551abb27d2aa9ce008583488b845b98">hwloc_topology_membind_support</a>
48 : <a class="el" href="a00310.html#ae551abb27d2aa9ce008583488b845b98">hwloc_topology_membind_support</a>
4949 </li>
5050 <li>arity
51 : <a class="el" href="a00244.html#aac3f6da35c9b57599909a44ce2b716c1">hwloc_obj</a>
51 : <a class="el" href="a00250.html#aac3f6da35c9b57599909a44ce2b716c1">hwloc_obj</a>
5252 </li>
5353 <li>associativity
54 : <a class="el" href="a00260.html#ad06525e474d1e2d1423ed71bb998592d">hwloc_obj_attr_u::hwloc_cache_attr_s</a>
54 : <a class="el" href="a00266.html#ad06525e474d1e2d1423ed71bb998592d">hwloc_obj_attr_u::hwloc_cache_attr_s</a>
5555 </li>
5656 <li>attr
57 : <a class="el" href="a00244.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj</a>
57 : <a class="el" href="a00250.html#accd40e29f71f19e88db62ea3df02adc8">hwloc_obj</a>
5858 </li>
5959 </ul>
6060
6161
6262 <h3><a id="index_b"></a>- b -</h3><ul>
6363 <li>bind_membind
64 : <a class="el" href="a00304.html#ae7cdb1f1b5f0242a69f85b5a5538c764">hwloc_topology_membind_support</a>
64 : <a class="el" href="a00310.html#ae7cdb1f1b5f0242a69f85b5a5538c764">hwloc_topology_membind_support</a>
6565 </li>
6666 <li>bridge
67 : <a class="el" href="a00248.html#a207e6359497b7116d6f4baa9e8bbeb43">hwloc_obj_attr_u</a>
67 : <a class="el" href="a00254.html#a207e6359497b7116d6f4baa9e8bbeb43">hwloc_obj_attr_u</a>
6868 </li>
6969 <li>bus
70 : <a class="el" href="a00328.html#a4a23e3cc034b7ab105cab0e863dcab69">hwloc_cl_device_topology_amd</a>
71 , <a class="el" href="a00268.html#aae99e035e8d1387d7b8768aaa8eceb0a">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
70 : <a class="el" href="a00334.html#a4a23e3cc034b7ab105cab0e863dcab69">hwloc_cl_device_topology_amd</a>
71 , <a class="el" href="a00274.html#aae99e035e8d1387d7b8768aaa8eceb0a">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
7272 </li>
7373 </ul>
7474
7575
7676 <h3><a id="index_c"></a>- c -</h3><ul>
7777 <li>cache
78 : <a class="el" href="a00248.html#a23f553f3252c9d13f2338231cd354ea9">hwloc_obj_attr_u</a>
78 : <a class="el" href="a00254.html#a23f553f3252c9d13f2338231cd354ea9">hwloc_obj_attr_u</a>
7979 </li>
8080 <li>children
81 : <a class="el" href="a00244.html#a04d05403da37bfe17cd63b7c7dd07b1f">hwloc_obj</a>
81 : <a class="el" href="a00250.html#a04d05403da37bfe17cd63b7c7dd07b1f">hwloc_obj</a>
8282 </li>
8383 <li>class_id
84 : <a class="el" href="a00268.html#aee735352d9f1686fd290fc6d6397c334">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
84 : <a class="el" href="a00274.html#aee735352d9f1686fd290fc6d6397c334">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
8585 </li>
8686 <li>complete_cpuset
87 : <a class="el" href="a00244.html#a91788a9da687beb7224cc1fd7b75208c">hwloc_obj</a>
87 : <a class="el" href="a00250.html#a91788a9da687beb7224cc1fd7b75208c">hwloc_obj</a>
8888 </li>
8989 <li>complete_nodeset
90 : <a class="el" href="a00244.html#ac38c4012127525ef74c5615c526f4c2e">hwloc_obj</a>
90 : <a class="el" href="a00250.html#ac38c4012127525ef74c5615c526f4c2e">hwloc_obj</a>
9191 </li>
9292 <li>count
93 : <a class="el" href="a00256.html#a98514e37d57a325b78e21ffd8d7419e0">hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s</a>
93 : <a class="el" href="a00262.html#a98514e37d57a325b78e21ffd8d7419e0">hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s</a>
9494 </li>
9595 <li>cpubind
96 : <a class="el" href="a00312.html#adef2bb91f74c3e70a2a071393caf5f56">hwloc_topology_support</a>
96 : <a class="el" href="a00318.html#adef2bb91f74c3e70a2a071393caf5f56">hwloc_topology_support</a>
9797 </li>
9898 <li>cpukind_efficiency
99 : <a class="el" href="a00296.html#aba80d6f9c15e2395f9ed61db9ff3b75d">hwloc_topology_discovery_support</a>
99 : <a class="el" href="a00302.html#aba80d6f9c15e2395f9ed61db9ff3b75d">hwloc_topology_discovery_support</a>
100100 </li>
101101 <li>cpuset
102 : <a class="el" href="a00324.html#a033bad8f6b891992f0c18b85a88c5561">hwloc_location::hwloc_location_u</a>
103 , <a class="el" href="a00244.html#a67925e0f2c47f50408fbdb9bddd0790f">hwloc_obj</a>
102 : <a class="el" href="a00330.html#a033bad8f6b891992f0c18b85a88c5561">hwloc_location::hwloc_location_u</a>
103 , <a class="el" href="a00250.html#a67925e0f2c47f50408fbdb9bddd0790f">hwloc_obj</a>
104104 </li>
105105 </ul>
106106
107107
108108 <h3><a id="index_d"></a>- d -</h3><ul>
109109 <li>data
110 : <a class="el" href="a00328.html#afbd6b814607b06fc5b2f36ad14420398">hwloc_cl_device_topology_amd</a>
111 , <a class="el" href="a00384.html#a4b8cffd1d943c29fdc102b841b8598d4">hwloc_component</a>
110 : <a class="el" href="a00334.html#afbd6b814607b06fc5b2f36ad14420398">hwloc_cl_device_topology_amd</a>
111 , <a class="el" href="a00390.html#a4b8cffd1d943c29fdc102b841b8598d4">hwloc_component</a>
112112 </li>
113113 <li>depth
114 : <a class="el" href="a00244.html#a4876fd165b4fff35521f07ebd85355ed">hwloc_obj</a>
115 , <a class="el" href="a00272.html#a336c8b22893d5d734d8c9dfca4066b46">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
116 , <a class="el" href="a00260.html#a5c8f7f39193736c2187ed626940835d5">hwloc_obj_attr_u::hwloc_cache_attr_s</a>
117 , <a class="el" href="a00264.html#ad914eac61c77481e1b7037877bcc5579">hwloc_obj_attr_u::hwloc_group_attr_s</a>
114 : <a class="el" href="a00250.html#a4876fd165b4fff35521f07ebd85355ed">hwloc_obj</a>
115 , <a class="el" href="a00278.html#a336c8b22893d5d734d8c9dfca4066b46">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
116 , <a class="el" href="a00266.html#a5c8f7f39193736c2187ed626940835d5">hwloc_obj_attr_u::hwloc_cache_attr_s</a>
117 , <a class="el" href="a00270.html#ad914eac61c77481e1b7037877bcc5579">hwloc_obj_attr_u::hwloc_group_attr_s</a>
118118 </li>
119119 <li>dev
120 : <a class="el" href="a00268.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
120 : <a class="el" href="a00274.html#a3d70c84a12f7e93d14c8d47bf4fd9dc5">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
121121 </li>
122122 <li>device
123 : <a class="el" href="a00328.html#a017033a953d71455b067007cabb92e9c">hwloc_cl_device_topology_amd</a>
123 : <a class="el" href="a00334.html#a017033a953d71455b067007cabb92e9c">hwloc_cl_device_topology_amd</a>
124124 </li>
125125 <li>device_id
126 : <a class="el" href="a00268.html#a35b66064ab7d768caf7154e410caf0fa">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
126 : <a class="el" href="a00274.html#a35b66064ab7d768caf7154e410caf0fa">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
127127 </li>
128128 <li>diff
129 : <a class="el" href="a00364.html#a91f0645f9062e892652357cd141c8ebb">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>
129 : <a class="el" href="a00370.html#a91f0645f9062e892652357cd141c8ebb">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>
130130 </li>
131131 <li>disable
132 : <a class="el" href="a00380.html#a36c4fa86350525b46340c67b802c69c7">hwloc_backend</a>
132 : <a class="el" href="a00386.html#a36c4fa86350525b46340c67b802c69c7">hwloc_backend</a>
133133 </li>
134134 <li>disallowed_numa
135 : <a class="el" href="a00296.html#a970e65235873bcdb9669a9805161ce03">hwloc_topology_discovery_support</a>
135 : <a class="el" href="a00302.html#a970e65235873bcdb9669a9805161ce03">hwloc_topology_discovery_support</a>
136136 </li>
137137 <li>disallowed_pu
138 : <a class="el" href="a00296.html#af3c97b28781a2972cf8eaaf94a6617da">hwloc_topology_discovery_support</a>
138 : <a class="el" href="a00302.html#af3c97b28781a2972cf8eaaf94a6617da">hwloc_topology_discovery_support</a>
139139 </li>
140140 <li>discover
141 : <a class="el" href="a00380.html#accff2cd8404be43c3b44cec05e6f609b">hwloc_backend</a>
141 : <a class="el" href="a00386.html#accff2cd8404be43c3b44cec05e6f609b">hwloc_backend</a>
142142 </li>
143143 <li>discovery
144 : <a class="el" href="a00312.html#aea3fbd7653d987d81f848636c420504d">hwloc_topology_support</a>
144 : <a class="el" href="a00318.html#aea3fbd7653d987d81f848636c420504d">hwloc_topology_support</a>
145145 </li>
146146 <li>domain
147 : <a class="el" href="a00272.html#a2c31e565a5f0d23d0a0a3dd3ec8f4b17">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
148 , <a class="el" href="a00268.html#a8fba44988deb98613c1505a4019a34dc">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
147 : <a class="el" href="a00278.html#a2c31e565a5f0d23d0a0a3dd3ec8f4b17">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
148 , <a class="el" href="a00274.html#a8fba44988deb98613c1505a4019a34dc">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
149149 </li>
150150 <li>dont_merge
151 : <a class="el" href="a00264.html#afa253d4b70f92e940c226d61f192054f">hwloc_obj_attr_u::hwloc_group_attr_s</a>
151 : <a class="el" href="a00270.html#afa253d4b70f92e940c226d61f192054f">hwloc_obj_attr_u::hwloc_group_attr_s</a>
152152 </li>
153153 <li>downstream
154 : <a class="el" href="a00272.html#a7d5db91d655ba23ffe9bda7a2cbcb9a8">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
154 : <a class="el" href="a00278.html#a7d5db91d655ba23ffe9bda7a2cbcb9a8">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
155155 </li>
156156 <li>downstream_type
157 : <a class="el" href="a00272.html#ac6a169b672d0e9f75756fd5665828b93">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
157 : <a class="el" href="a00278.html#ac6a169b672d0e9f75756fd5665828b93">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
158158 </li>
159159 </ul>
160160
161161
162162 <h3><a id="index_e"></a>- e -</h3><ul>
163163 <li>enabled_by_default
164 : <a class="el" href="a00372.html#ace80cafe2b1732b047b3fc3da47e6517">hwloc_disc_component</a>
164 : <a class="el" href="a00378.html#ace80cafe2b1732b047b3fc3da47e6517">hwloc_disc_component</a>
165165 </li>
166166 <li>excluded_phases
167 : <a class="el" href="a00372.html#acbb9957914dbf7b8f504215aa0c8d3fe">hwloc_disc_component</a>
168 , <a class="el" href="a00376.html#a0f95fa42d46a6e7cf8dee8af12afee3a">hwloc_disc_status</a>
167 : <a class="el" href="a00378.html#acbb9957914dbf7b8f504215aa0c8d3fe">hwloc_disc_component</a>
168 , <a class="el" href="a00382.html#a0f95fa42d46a6e7cf8dee8af12afee3a">hwloc_disc_status</a>
169169 </li>
170170 </ul>
171171
172172
173173 <h3><a id="index_f"></a>- f -</h3><ul>
174174 <li>finalize
175 : <a class="el" href="a00384.html#a4612015451a1c706e8ba19114cb8baae">hwloc_component</a>
175 : <a class="el" href="a00390.html#a4612015451a1c706e8ba19114cb8baae">hwloc_component</a>
176176 </li>
177177 <li>first_child
178 : <a class="el" href="a00244.html#af51d08a0a79dba517c06c5afedc8d2dc">hwloc_obj</a>
178 : <a class="el" href="a00250.html#af51d08a0a79dba517c06c5afedc8d2dc">hwloc_obj</a>
179179 </li>
180180 <li>firsttouch_membind
181 : <a class="el" href="a00304.html#a221098c339dbfab27bd2c9f5d32f123b">hwloc_topology_membind_support</a>
181 : <a class="el" href="a00310.html#a221098c339dbfab27bd2c9f5d32f123b">hwloc_topology_membind_support</a>
182182 </li>
183183 <li>flags
184 : <a class="el" href="a00380.html#aaa8eafe495aadd81c2e3c4ec527c10ba">hwloc_backend</a>
185 , <a class="el" href="a00384.html#ab8043c5b4cc0e81aabba586ccb194335">hwloc_component</a>
186 , <a class="el" href="a00376.html#ad8b123cecb945a9182eb824ccf8ef9d7">hwloc_disc_status</a>
184 : <a class="el" href="a00386.html#aaa8eafe495aadd81c2e3c4ec527c10ba">hwloc_backend</a>
185 , <a class="el" href="a00390.html#ab8043c5b4cc0e81aabba586ccb194335">hwloc_component</a>
186 , <a class="el" href="a00382.html#ad8b123cecb945a9182eb824ccf8ef9d7">hwloc_disc_status</a>
187187 </li>
188188 <li>func
189 : <a class="el" href="a00268.html#a695f32df53f4ef728670bfcf31b74e0f">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
189 : <a class="el" href="a00274.html#a695f32df53f4ef728670bfcf31b74e0f">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
190190 </li>
191191 <li>function
192 : <a class="el" href="a00328.html#a77a67ac73cff98d330ef7258b240bac3">hwloc_cl_device_topology_amd</a>
192 : <a class="el" href="a00334.html#a77a67ac73cff98d330ef7258b240bac3">hwloc_cl_device_topology_amd</a>
193193 </li>
194194 </ul>
195195
196196
197197 <h3><a id="index_g"></a>- g -</h3><ul>
198198 <li>generic
199 : <a class="el" href="a00340.html#aeb449c0e04b14ebf8c3126756b6364f9">hwloc_topology_diff_obj_attr_u</a>
200 , <a class="el" href="a00356.html#a0dd2cbfba0eca2fc7a2645668bcae0f8">hwloc_topology_diff_u</a>
199 : <a class="el" href="a00346.html#aeb449c0e04b14ebf8c3126756b6364f9">hwloc_topology_diff_obj_attr_u</a>
200 , <a class="el" href="a00362.html#a0dd2cbfba0eca2fc7a2645668bcae0f8">hwloc_topology_diff_u</a>
201201 </li>
202202 <li>get_area_membind
203 : <a class="el" href="a00304.html#a0a84e24a06f2fa487fe8c9605c6f68b3">hwloc_topology_membind_support</a>
203 : <a class="el" href="a00310.html#a0a84e24a06f2fa487fe8c9605c6f68b3">hwloc_topology_membind_support</a>
204204 </li>
205205 <li>get_area_memlocation
206 : <a class="el" href="a00304.html#a30173553a68e0a4dd1672d26f8e892b1">hwloc_topology_membind_support</a>
206 : <a class="el" href="a00310.html#a30173553a68e0a4dd1672d26f8e892b1">hwloc_topology_membind_support</a>
207207 </li>
208208 <li>get_pci_busid_cpuset
209 : <a class="el" href="a00380.html#aaac253491264c20930f44817270bc502">hwloc_backend</a>
209 : <a class="el" href="a00386.html#aaac253491264c20930f44817270bc502">hwloc_backend</a>
210210 </li>
211211 <li>get_proc_cpubind
212 : <a class="el" href="a00300.html#aae705bc447adc163ead377362c4dfe9f">hwloc_topology_cpubind_support</a>
212 : <a class="el" href="a00306.html#aae705bc447adc163ead377362c4dfe9f">hwloc_topology_cpubind_support</a>
213213 </li>
214214 <li>get_proc_last_cpu_location
215 : <a class="el" href="a00300.html#a2554620148b7992a5093f338f5ae254f">hwloc_topology_cpubind_support</a>
215 : <a class="el" href="a00306.html#a2554620148b7992a5093f338f5ae254f">hwloc_topology_cpubind_support</a>
216216 </li>
217217 <li>get_proc_membind
218 : <a class="el" href="a00304.html#a9880cd2d605e316fc020167c49ca69ad">hwloc_topology_membind_support</a>
218 : <a class="el" href="a00310.html#a9880cd2d605e316fc020167c49ca69ad">hwloc_topology_membind_support</a>
219219 </li>
220220 <li>get_thisproc_cpubind
221 : <a class="el" href="a00300.html#a77a09ddd78ee3e9ff5f532a6ac74f7eb">hwloc_topology_cpubind_support</a>
221 : <a class="el" href="a00306.html#a77a09ddd78ee3e9ff5f532a6ac74f7eb">hwloc_topology_cpubind_support</a>
222222 </li>
223223 <li>get_thisproc_last_cpu_location
224 : <a class="el" href="a00300.html#ad2d5c94b738d92b7d2ede87e4e96321d">hwloc_topology_cpubind_support</a>
224 : <a class="el" href="a00306.html#ad2d5c94b738d92b7d2ede87e4e96321d">hwloc_topology_cpubind_support</a>
225225 </li>
226226 <li>get_thisproc_membind
227 : <a class="el" href="a00304.html#a3fd51e6fa5f0dd800322301b46b08559">hwloc_topology_membind_support</a>
227 : <a class="el" href="a00310.html#a3fd51e6fa5f0dd800322301b46b08559">hwloc_topology_membind_support</a>
228228 </li>
229229 <li>get_thisthread_cpubind
230 : <a class="el" href="a00300.html#a80d762e532d677dff262d83cc7bb1c60">hwloc_topology_cpubind_support</a>
230 : <a class="el" href="a00306.html#a80d762e532d677dff262d83cc7bb1c60">hwloc_topology_cpubind_support</a>
231231 </li>
232232 <li>get_thisthread_last_cpu_location
233 : <a class="el" href="a00300.html#a6be1f042fdce6bf41b4ea39f6f193808">hwloc_topology_cpubind_support</a>
233 : <a class="el" href="a00306.html#a6be1f042fdce6bf41b4ea39f6f193808">hwloc_topology_cpubind_support</a>
234234 </li>
235235 <li>get_thisthread_membind
236 : <a class="el" href="a00304.html#a63b0b2e26157b472f5717ee93cc7c535">hwloc_topology_membind_support</a>
236 : <a class="el" href="a00310.html#a63b0b2e26157b472f5717ee93cc7c535">hwloc_topology_membind_support</a>
237237 </li>
238238 <li>get_thread_cpubind
239 : <a class="el" href="a00300.html#a8dd4d8531ed2eebdce1507e7d104154e">hwloc_topology_cpubind_support</a>
239 : <a class="el" href="a00306.html#a8dd4d8531ed2eebdce1507e7d104154e">hwloc_topology_cpubind_support</a>
240240 </li>
241241 <li>gp_index
242 : <a class="el" href="a00244.html#a957984a355fa61c85f46605c336e7551">hwloc_obj</a>
242 : <a class="el" href="a00250.html#a957984a355fa61c85f46605c336e7551">hwloc_obj</a>
243243 </li>
244244 <li>group
245 : <a class="el" href="a00248.html#a9eddbd69e34cd2ef6af6d2ac31b6eff3">hwloc_obj_attr_u</a>
245 : <a class="el" href="a00254.html#a9eddbd69e34cd2ef6af6d2ac31b6eff3">hwloc_obj_attr_u</a>
246246 </li>
247247 </ul>
248248
249249
250250 <h3><a id="index_i"></a>- i -</h3><ul>
251251 <li>imported_support
252 : <a class="el" href="a00308.html#adf54a6dbe8e9dd5033dfe9c93df726c4">hwloc_topology_misc_support</a>
252 : <a class="el" href="a00314.html#adf54a6dbe8e9dd5033dfe9c93df726c4">hwloc_topology_misc_support</a>
253253 </li>
254254 <li>index
255 : <a class="el" href="a00348.html#adb772c3f1761ecadf496c80ae14afce3">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a>
255 : <a class="el" href="a00354.html#adb772c3f1761ecadf496c80ae14afce3">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a>
256256 </li>
257257 <li>infos
258 : <a class="el" href="a00244.html#a8604654c38b7a720efae5025d3a96ee6">hwloc_obj</a>
258 : <a class="el" href="a00250.html#a8604654c38b7a720efae5025d3a96ee6">hwloc_obj</a>
259259 </li>
260260 <li>infos_count
261 : <a class="el" href="a00244.html#a9843acc28cfbba903b63ea14b137ff70">hwloc_obj</a>
261 : <a class="el" href="a00250.html#a9843acc28cfbba903b63ea14b137ff70">hwloc_obj</a>
262262 </li>
263263 <li>init
264 : <a class="el" href="a00384.html#aea613546886d9b8221cadba920fe3ebc">hwloc_component</a>
264 : <a class="el" href="a00390.html#aea613546886d9b8221cadba920fe3ebc">hwloc_component</a>
265265 </li>
266266 <li>instantiate
267 : <a class="el" href="a00372.html#ab133956219739a1032a17131757d1961">hwloc_disc_component</a>
267 : <a class="el" href="a00378.html#ab133956219739a1032a17131757d1961">hwloc_disc_component</a>
268268 </li>
269269 <li>interleave_membind
270 : <a class="el" href="a00304.html#a3c44c6012860bbeba8a0f4c19710858d">hwloc_topology_membind_support</a>
270 : <a class="el" href="a00310.html#a3c44c6012860bbeba8a0f4c19710858d">hwloc_topology_membind_support</a>
271271 </li>
272272 <li>io_arity
273 : <a class="el" href="a00244.html#a7b3b29f0be377c7d2d52262019fc7d11">hwloc_obj</a>
273 : <a class="el" href="a00250.html#a7b3b29f0be377c7d2d52262019fc7d11">hwloc_obj</a>
274274 </li>
275275 <li>io_first_child
276 : <a class="el" href="a00244.html#a8d14c88e1ebc4ae67cc69f9e928558b3">hwloc_obj</a>
276 : <a class="el" href="a00250.html#a8d14c88e1ebc4ae67cc69f9e928558b3">hwloc_obj</a>
277277 </li>
278278 <li>is_thissystem
279 : <a class="el" href="a00380.html#ab8806f6db077f1bb2e9d63ec99223f7a">hwloc_backend</a>
279 : <a class="el" href="a00386.html#ab8806f6db077f1bb2e9d63ec99223f7a">hwloc_backend</a>
280280 </li>
281281 </ul>
282282
283283
284284 <h3><a id="index_k"></a>- k -</h3><ul>
285285 <li>kind
286 : <a class="el" href="a00316.html#aef9c83cf467da1b1fa4c36493febb3b5">hwloc_distances_s</a>
287 , <a class="el" href="a00264.html#a3229f269c4cc7e63492c168535e4f0c1">hwloc_obj_attr_u::hwloc_group_attr_s</a>
286 : <a class="el" href="a00322.html#aef9c83cf467da1b1fa4c36493febb3b5">hwloc_distances_s</a>
287 , <a class="el" href="a00270.html#a3229f269c4cc7e63492c168535e4f0c1">hwloc_obj_attr_u::hwloc_group_attr_s</a>
288288 </li>
289289 </ul>
290290
291291
292292 <h3><a id="index_l"></a>- l -</h3><ul>
293293 <li>last_child
294 : <a class="el" href="a00244.html#a84bd65634dbc55f4158b74443a9bd04f">hwloc_obj</a>
294 : <a class="el" href="a00250.html#a84bd65634dbc55f4158b74443a9bd04f">hwloc_obj</a>
295295 </li>
296296 <li>linesize
297 : <a class="el" href="a00260.html#a801e8a668e28caf06c8b88e9ae5c10db">hwloc_obj_attr_u::hwloc_cache_attr_s</a>
297 : <a class="el" href="a00266.html#a801e8a668e28caf06c8b88e9ae5c10db">hwloc_obj_attr_u::hwloc_cache_attr_s</a>
298298 </li>
299299 <li>linkspeed
300 : <a class="el" href="a00268.html#a59b2fce35f7cbde86c4fd305d0ccda5f">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
300 : <a class="el" href="a00274.html#a59b2fce35f7cbde86c4fd305d0ccda5f">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
301301 </li>
302302 <li>local_memory
303 : <a class="el" href="a00252.html#a6703cbf2afbf63c9d60c5ff4dc0c73aa">hwloc_obj_attr_u::hwloc_numanode_attr_s</a>
303 : <a class="el" href="a00258.html#a6703cbf2afbf63c9d60c5ff4dc0c73aa">hwloc_obj_attr_u::hwloc_numanode_attr_s</a>
304304 </li>
305305 <li>location
306 : <a class="el" href="a00320.html#a707a25a5b65177e4d081be49aa0777a2">hwloc_location</a>
306 : <a class="el" href="a00326.html#a707a25a5b65177e4d081be49aa0777a2">hwloc_location</a>
307307 </li>
308308 <li>logical_index
309 : <a class="el" href="a00244.html#a0d07fb7b8935e137c94d75a3eb492ae9">hwloc_obj</a>
309 : <a class="el" href="a00250.html#a0d07fb7b8935e137c94d75a3eb492ae9">hwloc_obj</a>
310310 </li>
311311 </ul>
312312
313313
314314 <h3><a id="index_m"></a>- m -</h3><ul>
315315 <li>membind
316 : <a class="el" href="a00312.html#ac6eb62ae8bc0a68dce679a7107a36194">hwloc_topology_support</a>
316 : <a class="el" href="a00318.html#ac6eb62ae8bc0a68dce679a7107a36194">hwloc_topology_support</a>
317317 </li>
318318 <li>memory_arity
319 : <a class="el" href="a00244.html#a6f834ea4dd26553cdea601d2fae6d3b7">hwloc_obj</a>
319 : <a class="el" href="a00250.html#a6f834ea4dd26553cdea601d2fae6d3b7">hwloc_obj</a>
320320 </li>
321321 <li>memory_first_child
322 : <a class="el" href="a00244.html#ac0e8200dba25b90d5954bd4ec61f97d3">hwloc_obj</a>
322 : <a class="el" href="a00250.html#ac0e8200dba25b90d5954bd4ec61f97d3">hwloc_obj</a>
323323 </li>
324324 <li>migrate_membind
325 : <a class="el" href="a00304.html#aafa7683871a6a760246f9b35209caec5">hwloc_topology_membind_support</a>
325 : <a class="el" href="a00310.html#aafa7683871a6a760246f9b35209caec5">hwloc_topology_membind_support</a>
326326 </li>
327327 <li>misc
328 : <a class="el" href="a00312.html#ab9d08df4b0b03994f21b893ece826e78">hwloc_topology_support</a>
328 : <a class="el" href="a00318.html#ab9d08df4b0b03994f21b893ece826e78">hwloc_topology_support</a>
329329 </li>
330330 <li>misc_arity
331 : <a class="el" href="a00244.html#a2bb7862ce722d7ceda23cfa153da165a">hwloc_obj</a>
331 : <a class="el" href="a00250.html#a2bb7862ce722d7ceda23cfa153da165a">hwloc_obj</a>
332332 </li>
333333 <li>misc_first_child
334 : <a class="el" href="a00244.html#a57812a313fe9b1a9500489f47c3011cc">hwloc_obj</a>
334 : <a class="el" href="a00250.html#a57812a313fe9b1a9500489f47c3011cc">hwloc_obj</a>
335335 </li>
336336 </ul>
337337
338338
339339 <h3><a id="index_n"></a>- n -</h3><ul>
340340 <li>name
341 : <a class="el" href="a00372.html#a4064c3b5d9213027e87caebef380a840">hwloc_disc_component</a>
342 , <a class="el" href="a00292.html#a12ce1309e4381ae38b5c15d242a47124">hwloc_info_s</a>
343 , <a class="el" href="a00244.html#abb709ec38f2970677e4e57d1d30be96d">hwloc_obj</a>
344 , <a class="el" href="a00352.html#a7ef48c66ccddf34d90edb4e4314b41c6">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a>
341 : <a class="el" href="a00378.html#a4064c3b5d9213027e87caebef380a840">hwloc_disc_component</a>
342 , <a class="el" href="a00298.html#a12ce1309e4381ae38b5c15d242a47124">hwloc_info_s</a>
343 , <a class="el" href="a00250.html#abb709ec38f2970677e4e57d1d30be96d">hwloc_obj</a>
344 , <a class="el" href="a00358.html#a7ef48c66ccddf34d90edb4e4314b41c6">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a>
345345 </li>
346346 <li>nbobjs
347 : <a class="el" href="a00316.html#a4ca2af858cebbce7324ec49903d09474">hwloc_distances_s</a>
347 : <a class="el" href="a00322.html#a4ca2af858cebbce7324ec49903d09474">hwloc_distances_s</a>
348348 </li>
349349 <li>newvalue
350 : <a class="el" href="a00352.html#a75f37f4add21cece50fee2701c3b77db">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a>
351 , <a class="el" href="a00348.html#ae63aa59ad65aa783b730a4f213304eb4">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a>
350 : <a class="el" href="a00358.html#a75f37f4add21cece50fee2701c3b77db">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a>
351 , <a class="el" href="a00354.html#ae63aa59ad65aa783b730a4f213304eb4">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a>
352352 </li>
353353 <li>next
354 : <a class="el" href="a00360.html#a720aa94eb73cddfd8d6bf9fcbbfc035e">hwloc_topology_diff_u::hwloc_topology_diff_generic_s</a>
355 , <a class="el" href="a00364.html#acb9170a8eb3392656d70f7f3ef3e3eed">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>
356 , <a class="el" href="a00368.html#a375afbaa043b109be689a7d9a3c7d153">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a>
354 : <a class="el" href="a00366.html#a720aa94eb73cddfd8d6bf9fcbbfc035e">hwloc_topology_diff_u::hwloc_topology_diff_generic_s</a>
355 , <a class="el" href="a00370.html#acb9170a8eb3392656d70f7f3ef3e3eed">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>
356 , <a class="el" href="a00374.html#a375afbaa043b109be689a7d9a3c7d153">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a>
357357 </li>
358358 <li>next_cousin
359 : <a class="el" href="a00244.html#a85a788017457129589318b6c39451acf">hwloc_obj</a>
359 : <a class="el" href="a00250.html#a85a788017457129589318b6c39451acf">hwloc_obj</a>
360360 </li>
361361 <li>next_sibling
362 : <a class="el" href="a00244.html#a7f2343ed476fe4942e6fffd4cade1b40">hwloc_obj</a>
362 : <a class="el" href="a00250.html#a7f2343ed476fe4942e6fffd4cade1b40">hwloc_obj</a>
363363 </li>
364364 <li>nexttouch_membind
365 : <a class="el" href="a00304.html#ab0921af6e0cd6975812a80b8e5c7435c">hwloc_topology_membind_support</a>
365 : <a class="el" href="a00310.html#ab0921af6e0cd6975812a80b8e5c7435c">hwloc_topology_membind_support</a>
366366 </li>
367367 <li>nodeset
368 : <a class="el" href="a00244.html#a08f0d0e16c619a6e653526cbee4ffea3">hwloc_obj</a>
368 : <a class="el" href="a00250.html#a08f0d0e16c619a6e653526cbee4ffea3">hwloc_obj</a>
369369 </li>
370370 <li>numa
371 : <a class="el" href="a00296.html#a955f96066cb9e4cd34e2a3710ad43e80">hwloc_topology_discovery_support</a>
371 : <a class="el" href="a00302.html#a955f96066cb9e4cd34e2a3710ad43e80">hwloc_topology_discovery_support</a>
372372 </li>
373373 <li>numa_memory
374 : <a class="el" href="a00296.html#af193eb858e40e12ef4923f5ed0e1f11a">hwloc_topology_discovery_support</a>
374 : <a class="el" href="a00302.html#af193eb858e40e12ef4923f5ed0e1f11a">hwloc_topology_discovery_support</a>
375375 </li>
376376 <li>numanode
377 : <a class="el" href="a00248.html#ad066b9612802ffa01e132dc3a8e6cc86">hwloc_obj_attr_u</a>
377 : <a class="el" href="a00254.html#ad066b9612802ffa01e132dc3a8e6cc86">hwloc_obj_attr_u</a>
378378 </li>
379379 </ul>
380380
381381
382382 <h3><a id="index_o"></a>- o -</h3><ul>
383383 <li>obj_attr
384 : <a class="el" href="a00356.html#a01dca644feea48448b36baa60cf4c07f">hwloc_topology_diff_u</a>
384 : <a class="el" href="a00362.html#a01dca644feea48448b36baa60cf4c07f">hwloc_topology_diff_u</a>
385385 </li>
386386 <li>obj_depth
387 : <a class="el" href="a00364.html#a82c1d4bab80b9e0bf301a9d8291893e0">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>
388 , <a class="el" href="a00368.html#a94c6498caeaafbb79927395d918d6cb3">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a>
387 : <a class="el" href="a00370.html#a82c1d4bab80b9e0bf301a9d8291893e0">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>
388 , <a class="el" href="a00374.html#a94c6498caeaafbb79927395d918d6cb3">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a>
389389 </li>
390390 <li>obj_index
391 : <a class="el" href="a00364.html#adb9f4d414470b6670cde8d90759a6c1c">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>
392 , <a class="el" href="a00368.html#a6dc6b3c4adb10db74d993e37afaa0580">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a>
391 : <a class="el" href="a00370.html#adb9f4d414470b6670cde8d90759a6c1c">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>
392 , <a class="el" href="a00374.html#a6dc6b3c4adb10db74d993e37afaa0580">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a>
393393 </li>
394394 <li>object
395 : <a class="el" href="a00324.html#acf2ebf75869f0a53a884ac2ab3374122">hwloc_location::hwloc_location_u</a>
395 : <a class="el" href="a00330.html#acf2ebf75869f0a53a884ac2ab3374122">hwloc_location::hwloc_location_u</a>
396396 </li>
397397 <li>objs
398 : <a class="el" href="a00316.html#af1e78b2d628d191fa6cae3fbfe891078">hwloc_distances_s</a>
398 : <a class="el" href="a00322.html#af1e78b2d628d191fa6cae3fbfe891078">hwloc_distances_s</a>
399399 </li>
400400 <li>oldvalue
401 : <a class="el" href="a00352.html#a33cc281d4417129064295a6ae7b79818">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a>
402 , <a class="el" href="a00348.html#a44c0894dce563335d347fde6595c49c9">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a>
401 : <a class="el" href="a00358.html#a33cc281d4417129064295a6ae7b79818">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a>
402 , <a class="el" href="a00354.html#a44c0894dce563335d347fde6595c49c9">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a>
403403 </li>
404404 <li>os_index
405 : <a class="el" href="a00244.html#a61a7a80a68eaccbaaa28269e678c81a9">hwloc_obj</a>
405 : <a class="el" href="a00250.html#a61a7a80a68eaccbaaa28269e678c81a9">hwloc_obj</a>
406406 </li>
407407 <li>osdev
408 : <a class="el" href="a00248.html#aaf7a5c38b5185703ff18c46ad2761dcf">hwloc_obj_attr_u</a>
408 : <a class="el" href="a00254.html#aaf7a5c38b5185703ff18c46ad2761dcf">hwloc_obj_attr_u</a>
409409 </li>
410410 </ul>
411411
412412
413413 <h3><a id="index_p"></a>- p -</h3><ul>
414414 <li>page_types
415 : <a class="el" href="a00252.html#a7e53c5024da2d7741a5cc1e7016bb8d2">hwloc_obj_attr_u::hwloc_numanode_attr_s</a>
415 : <a class="el" href="a00258.html#a7e53c5024da2d7741a5cc1e7016bb8d2">hwloc_obj_attr_u::hwloc_numanode_attr_s</a>
416416 </li>
417417 <li>page_types_len
418 : <a class="el" href="a00252.html#a513078122d403904e16723d30f583cb2">hwloc_obj_attr_u::hwloc_numanode_attr_s</a>
418 : <a class="el" href="a00258.html#a513078122d403904e16723d30f583cb2">hwloc_obj_attr_u::hwloc_numanode_attr_s</a>
419419 </li>
420420 <li>parent
421 : <a class="el" href="a00244.html#adc494f6aed939992be1c55cca5822900">hwloc_obj</a>
421 : <a class="el" href="a00250.html#adc494f6aed939992be1c55cca5822900">hwloc_obj</a>
422422 </li>
423423 <li>pci
424 : <a class="el" href="a00272.html#ab5c564e7c95b747dae9eb84ec0a2c31e">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
424 : <a class="el" href="a00278.html#ab5c564e7c95b747dae9eb84ec0a2c31e">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
425425 </li>
426426 <li>pcidev
427 : <a class="el" href="a00248.html#a0b66da7ab072f7c016f8ed86701f5a7c">hwloc_obj_attr_u</a>
427 : <a class="el" href="a00254.html#a0b66da7ab072f7c016f8ed86701f5a7c">hwloc_obj_attr_u</a>
428428 </li>
429429 <li>pcie
430 : <a class="el" href="a00328.html#a05e9a845012cd9d1f13a39cc35ab40a1">hwloc_cl_device_topology_amd</a>
430 : <a class="el" href="a00334.html#a05e9a845012cd9d1f13a39cc35ab40a1">hwloc_cl_device_topology_amd</a>
431431 </li>
432432 <li>phase
433 : <a class="el" href="a00376.html#abaf7c8c082d43e133171f0723dbf824b">hwloc_disc_status</a>
433 : <a class="el" href="a00382.html#abaf7c8c082d43e133171f0723dbf824b">hwloc_disc_status</a>
434434 </li>
435435 <li>phases
436 : <a class="el" href="a00380.html#aeca769840a6ff03e96462a9533adbccd">hwloc_backend</a>
437 , <a class="el" href="a00372.html#a61ad3151efa02e3dbad5d919758f9c90">hwloc_disc_component</a>
436 : <a class="el" href="a00386.html#aeca769840a6ff03e96462a9533adbccd">hwloc_backend</a>
437 , <a class="el" href="a00378.html#a61ad3151efa02e3dbad5d919758f9c90">hwloc_disc_component</a>
438438 </li>
439439 <li>prev_cousin
440 : <a class="el" href="a00244.html#ac715989f55ff5a0eb6be2969ee477ec0">hwloc_obj</a>
440 : <a class="el" href="a00250.html#ac715989f55ff5a0eb6be2969ee477ec0">hwloc_obj</a>
441441 </li>
442442 <li>prev_sibling
443 : <a class="el" href="a00244.html#a7b89e8c189876c0158a9282aaaf17f50">hwloc_obj</a>
443 : <a class="el" href="a00250.html#a7b89e8c189876c0158a9282aaaf17f50">hwloc_obj</a>
444444 </li>
445445 <li>priority
446 : <a class="el" href="a00372.html#ae86d283c272c5ae24073a235efbf6b59">hwloc_disc_component</a>
446 : <a class="el" href="a00378.html#ae86d283c272c5ae24073a235efbf6b59">hwloc_disc_component</a>
447447 </li>
448448 <li>private_data
449 : <a class="el" href="a00380.html#a2ea5bd36b7f06efdb65b98b32af16c68">hwloc_backend</a>
449 : <a class="el" href="a00386.html#a2ea5bd36b7f06efdb65b98b32af16c68">hwloc_backend</a>
450450 </li>
451451 <li>pu
452 : <a class="el" href="a00296.html#ad7bb4ecf7a82f5a04fc632e9592ad3ab">hwloc_topology_discovery_support</a>
452 : <a class="el" href="a00302.html#ad7bb4ecf7a82f5a04fc632e9592ad3ab">hwloc_topology_discovery_support</a>
453453 </li>
454454 </ul>
455455
456456
457457 <h3><a id="index_r"></a>- r -</h3><ul>
458458 <li>raw
459 : <a class="el" href="a00328.html#a7bba6ab297b6f44e43c5937b80b4cfb6">hwloc_cl_device_topology_amd</a>
459 : <a class="el" href="a00334.html#a7bba6ab297b6f44e43c5937b80b4cfb6">hwloc_cl_device_topology_amd</a>
460460 </li>
461461 <li>revision
462 : <a class="el" href="a00268.html#a13ad54c93d08d8ac808e4de9674c5ee7">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
462 : <a class="el" href="a00274.html#a13ad54c93d08d8ac808e4de9674c5ee7">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
463463 </li>
464464 </ul>
465465
466466
467467 <h3><a id="index_s"></a>- s -</h3><ul>
468468 <li>secondary_bus
469 : <a class="el" href="a00272.html#ae2d9dd73ef1d32045c584a8e66d2f83f">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
469 : <a class="el" href="a00278.html#ae2d9dd73ef1d32045c584a8e66d2f83f">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
470470 </li>
471471 <li>set_area_membind
472 : <a class="el" href="a00304.html#a476c06f96b65c08b287cf2369966123b">hwloc_topology_membind_support</a>
472 : <a class="el" href="a00310.html#a476c06f96b65c08b287cf2369966123b">hwloc_topology_membind_support</a>
473473 </li>
474474 <li>set_proc_cpubind
475 : <a class="el" href="a00300.html#aa166223d1c2a6de7256ab2d8b675a87e">hwloc_topology_cpubind_support</a>
475 : <a class="el" href="a00306.html#aa166223d1c2a6de7256ab2d8b675a87e">hwloc_topology_cpubind_support</a>
476476 </li>
477477 <li>set_proc_membind
478 : <a class="el" href="a00304.html#a756f44912894b176bf979a1b65f12aac">hwloc_topology_membind_support</a>
478 : <a class="el" href="a00310.html#a756f44912894b176bf979a1b65f12aac">hwloc_topology_membind_support</a>
479479 </li>
480480 <li>set_thisproc_cpubind
481 : <a class="el" href="a00300.html#a9403d51657a4d546b3ea9553a2973a27">hwloc_topology_cpubind_support</a>
481 : <a class="el" href="a00306.html#a9403d51657a4d546b3ea9553a2973a27">hwloc_topology_cpubind_support</a>
482482 </li>
483483 <li>set_thisproc_membind
484 : <a class="el" href="a00304.html#a36b3e388df9c6a249427cab7e3724749">hwloc_topology_membind_support</a>
484 : <a class="el" href="a00310.html#a36b3e388df9c6a249427cab7e3724749">hwloc_topology_membind_support</a>
485485 </li>
486486 <li>set_thisthread_cpubind
487 : <a class="el" href="a00300.html#a57a89a4b5f1f74fa6cfe176f1e8b0798">hwloc_topology_cpubind_support</a>
487 : <a class="el" href="a00306.html#a57a89a4b5f1f74fa6cfe176f1e8b0798">hwloc_topology_cpubind_support</a>
488488 </li>
489489 <li>set_thisthread_membind
490 : <a class="el" href="a00304.html#a0697af2e41f2e82b8ce71e3cc13f7eac">hwloc_topology_membind_support</a>
490 : <a class="el" href="a00310.html#a0697af2e41f2e82b8ce71e3cc13f7eac">hwloc_topology_membind_support</a>
491491 </li>
492492 <li>set_thread_cpubind
493 : <a class="el" href="a00300.html#a46fba33e307909ce256624687799dd6d">hwloc_topology_cpubind_support</a>
493 : <a class="el" href="a00306.html#a46fba33e307909ce256624687799dd6d">hwloc_topology_cpubind_support</a>
494494 </li>
495495 <li>sibling_rank
496 : <a class="el" href="a00244.html#aaa6043eee6f55869933c1d974efd9acd">hwloc_obj</a>
496 : <a class="el" href="a00250.html#aaa6043eee6f55869933c1d974efd9acd">hwloc_obj</a>
497497 </li>
498498 <li>size
499 : <a class="el" href="a00260.html#abe5e788943ed04302976740c829674c0">hwloc_obj_attr_u::hwloc_cache_attr_s</a>
500 , <a class="el" href="a00256.html#a8ea7ebe9d91c7378bba03da57efc25cb">hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s</a>
499 : <a class="el" href="a00266.html#abe5e788943ed04302976740c829674c0">hwloc_obj_attr_u::hwloc_cache_attr_s</a>
500 , <a class="el" href="a00262.html#a8ea7ebe9d91c7378bba03da57efc25cb">hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s</a>
501501 </li>
502502 <li>string
503 : <a class="el" href="a00340.html#a42fa15c37f1f59ef638066c4c62c3154">hwloc_topology_diff_obj_attr_u</a>
503 : <a class="el" href="a00346.html#a42fa15c37f1f59ef638066c4c62c3154">hwloc_topology_diff_obj_attr_u</a>
504504 </li>
505505 <li>subdevice_id
506 : <a class="el" href="a00268.html#acac741aecd7a6db64f33409427e3971f">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
506 : <a class="el" href="a00274.html#acac741aecd7a6db64f33409427e3971f">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
507507 </li>
508508 <li>subkind
509 : <a class="el" href="a00264.html#ad514d943960a4036ed5e44dc187c74ed">hwloc_obj_attr_u::hwloc_group_attr_s</a>
509 : <a class="el" href="a00270.html#ad514d943960a4036ed5e44dc187c74ed">hwloc_obj_attr_u::hwloc_group_attr_s</a>
510510 </li>
511511 <li>subordinate_bus
512 : <a class="el" href="a00272.html#af3f3f7d76bf03e8d2afa721c2b8d6771">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
512 : <a class="el" href="a00278.html#af3f3f7d76bf03e8d2afa721c2b8d6771">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
513513 </li>
514514 <li>subtype
515 : <a class="el" href="a00244.html#a5d4f97e76723a9ec8d38046f19e00d33">hwloc_obj</a>
515 : <a class="el" href="a00250.html#a5d4f97e76723a9ec8d38046f19e00d33">hwloc_obj</a>
516516 </li>
517517 <li>subvendor_id
518 : <a class="el" href="a00268.html#a499db3d8cc89eaba04fcaef3df1cba97">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
518 : <a class="el" href="a00274.html#a499db3d8cc89eaba04fcaef3df1cba97">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
519519 </li>
520520 <li>symmetric_subtree
521 : <a class="el" href="a00244.html#a0f41a1d67dc6b661906f2217563637f3">hwloc_obj</a>
521 : <a class="el" href="a00250.html#a0f41a1d67dc6b661906f2217563637f3">hwloc_obj</a>
522522 </li>
523523 </ul>
524524
525525
526526 <h3><a id="index_t"></a>- t -</h3><ul>
527527 <li>too_complex
528 : <a class="el" href="a00356.html#af7dc1148eb656c56e9678218cafd027b">hwloc_topology_diff_u</a>
528 : <a class="el" href="a00362.html#af7dc1148eb656c56e9678218cafd027b">hwloc_topology_diff_u</a>
529529 </li>
530530 <li>total_memory
531 : <a class="el" href="a00244.html#a75603fc36c9284ba48ce814b772a58b6">hwloc_obj</a>
531 : <a class="el" href="a00250.html#a75603fc36c9284ba48ce814b772a58b6">hwloc_obj</a>
532532 </li>
533533 <li>type
534 : <a class="el" href="a00328.html#a8ec4ea89b862bb271845b48063f332b4">hwloc_cl_device_topology_amd</a>
535 , <a class="el" href="a00384.html#a789208ada7e17492cfd3a5a88a6bb0ee">hwloc_component</a>
536 , <a class="el" href="a00320.html#aeb9c0ab74a7d3506a76d0b82600a28a7">hwloc_location</a>
537 , <a class="el" href="a00244.html#acc4f0803f244867e68fe0036800be5de">hwloc_obj</a>
538 , <a class="el" href="a00260.html#ad8edc8ded2b7a70d6abbc874801930f4">hwloc_obj_attr_u::hwloc_cache_attr_s</a>
539 , <a class="el" href="a00288.html#a31e019e27e54ac6138d04be639bb96f9">hwloc_obj_attr_u::hwloc_osdev_attr_s</a>
540 , <a class="el" href="a00344.html#a43f8133b7c30129b002c2d295e6580fc">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s</a>
541 , <a class="el" href="a00352.html#a784ab5827c1bf531b86d1f02f199d04d">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a>
542 , <a class="el" href="a00348.html#afe262b9aa558fe7bfecbd37a7a129197">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a>
543 , <a class="el" href="a00360.html#a373005489fcddeba6319163e60263ae8">hwloc_topology_diff_u::hwloc_topology_diff_generic_s</a>
544 , <a class="el" href="a00364.html#a70a118ad288bd98f18c8ce6dc52e2d10">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>
545 , <a class="el" href="a00368.html#a92084295a4d6faf17a95a7eea526ddbd">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a>
534 : <a class="el" href="a00334.html#a8ec4ea89b862bb271845b48063f332b4">hwloc_cl_device_topology_amd</a>
535 , <a class="el" href="a00390.html#a789208ada7e17492cfd3a5a88a6bb0ee">hwloc_component</a>
536 , <a class="el" href="a00326.html#aeb9c0ab74a7d3506a76d0b82600a28a7">hwloc_location</a>
537 , <a class="el" href="a00250.html#acc4f0803f244867e68fe0036800be5de">hwloc_obj</a>
538 , <a class="el" href="a00266.html#ad8edc8ded2b7a70d6abbc874801930f4">hwloc_obj_attr_u::hwloc_cache_attr_s</a>
539 , <a class="el" href="a00294.html#a31e019e27e54ac6138d04be639bb96f9">hwloc_obj_attr_u::hwloc_osdev_attr_s</a>
540 , <a class="el" href="a00350.html#a43f8133b7c30129b002c2d295e6580fc">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s</a>
541 , <a class="el" href="a00358.html#a784ab5827c1bf531b86d1f02f199d04d">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</a>
542 , <a class="el" href="a00354.html#afe262b9aa558fe7bfecbd37a7a129197">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</a>
543 , <a class="el" href="a00366.html#a373005489fcddeba6319163e60263ae8">hwloc_topology_diff_u::hwloc_topology_diff_generic_s</a>
544 , <a class="el" href="a00370.html#a70a118ad288bd98f18c8ce6dc52e2d10">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</a>
545 , <a class="el" href="a00374.html#a92084295a4d6faf17a95a7eea526ddbd">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</a>
546546 </li>
547547 </ul>
548548
549549
550550 <h3><a id="index_u"></a>- u -</h3><ul>
551551 <li>uint64
552 : <a class="el" href="a00340.html#a4608ade88460f5f208887775e5a69a0a">hwloc_topology_diff_obj_attr_u</a>
552 : <a class="el" href="a00346.html#a4608ade88460f5f208887775e5a69a0a">hwloc_topology_diff_obj_attr_u</a>
553553 </li>
554554 <li>unused
555 : <a class="el" href="a00328.html#ac8650d7eea96eef290481fee980d1d47">hwloc_cl_device_topology_amd</a>
555 : <a class="el" href="a00334.html#ac8650d7eea96eef290481fee980d1d47">hwloc_cl_device_topology_amd</a>
556556 </li>
557557 <li>upstream
558 : <a class="el" href="a00272.html#ab62888c880f8bb730292722f5811958d">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
558 : <a class="el" href="a00278.html#ab62888c880f8bb730292722f5811958d">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
559559 </li>
560560 <li>upstream_type
561 : <a class="el" href="a00272.html#a265dd2164aa2df4972e25a029da72125">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
561 : <a class="el" href="a00278.html#a265dd2164aa2df4972e25a029da72125">hwloc_obj_attr_u::hwloc_bridge_attr_s</a>
562562 </li>
563563 <li>userdata
564 : <a class="el" href="a00244.html#a76fd3ac94401cf32dfccc3a3a8de68a5">hwloc_obj</a>
564 : <a class="el" href="a00250.html#a76fd3ac94401cf32dfccc3a3a8de68a5">hwloc_obj</a>
565565 </li>
566566 </ul>
567567
568568
569569 <h3><a id="index_v"></a>- v -</h3><ul>
570570 <li>value
571 : <a class="el" href="a00292.html#a788a0073bafe660645e7b69f31a43bbb">hwloc_info_s</a>
571 : <a class="el" href="a00298.html#a788a0073bafe660645e7b69f31a43bbb">hwloc_info_s</a>
572572 </li>
573573 <li>values
574 : <a class="el" href="a00316.html#ae43e19b2c743de05c93d71a30beaca75">hwloc_distances_s</a>
574 : <a class="el" href="a00322.html#ae43e19b2c743de05c93d71a30beaca75">hwloc_distances_s</a>
575575 </li>
576576 <li>vendor_id
577 : <a class="el" href="a00268.html#aad970ad19b62eb2d5df30e4802da4f4c">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
577 : <a class="el" href="a00274.html#aad970ad19b62eb2d5df30e4802da4f4c">hwloc_obj_attr_u::hwloc_pcidev_attr_s</a>
578578 </li>
579579 </ul>
580580 </div><!-- contents -->
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
5252 <p>The Hardware Locality (hwloc) software project aims at easing the process of discovering hardware resources in parallel architectures. It offers command-line tools and a C API for consulting these resources, their locality, attributes, and interconnection. hwloc primarily aims at helping high-performance computing (HPC) applications, but is also applicable to any project seeking to exploit code and/or data locality on modern computing platforms.</p>
5353 <p>hwloc is actually made of two subprojects distributed together: </p><ul>
5454 <li>
55 <b>The original hwloc project for describing the internals of computing nodes</b>. It is described in details starting at section <a class="el" href="a00385.html">Hardware Locality (hwloc) Introduction</a>. </li>
55 <b>The original hwloc project for describing the internals of computing nodes</b>. It is described in details starting at section <a class="el" href="a00391.html">Hardware Locality (hwloc) Introduction</a>. </li>
5656 <li>
57 <b>The network-oriented companion called netloc (Network Locality)</b>, described in details starting with section <a class="el" href="a00402.html">Network Locality (netloc)</a>. </li>
57 <b>The network-oriented companion called netloc (Network Locality)</b>, described in details starting with section <a class="el" href="a00408.html">Network Locality (netloc)</a>. </li>
5858 </ul>
5959 <p>
6060 <b>See also the Related pages tab above for links to other sections.</b>
7272 <pre class="fragment">shell$ ./configure --prefix=...
7373 shell$ make
7474 shell$ make install
75 </pre><p>hwloc- and netloc-specific configure options and requirements are documented in sections <a class="el" href="a00385.html#hwloc_installation">hwloc Installation</a> and <a class="el" href="a00402.html#netloc_installation">Netloc Installation</a> respectively.</p>
75 </pre><p>hwloc- and netloc-specific configure options and requirements are documented in sections <a class="el" href="a00391.html#hwloc_installation">hwloc Installation</a> and <a class="el" href="a00408.html#netloc_installation">Netloc Installation</a> respectively.</p>
7676 <p>Also note that if you install supplemental libraries in non-standard locations, hwloc's configure script may not be able to find them without some help. You may need to specify additional CPPFLAGS, LDFLAGS, or PKG_CONFIG_PATH values on the configure command line.</p>
7777 <p>For example, if libpciaccess was installed into /opt/pciaccess, hwloc's configure script may not find it be default. Try adding PKG_CONFIG_PATH to the ./configure command line, like this:</p>
7878 <pre class="fragment">./configure PKG_CONFIG_PATH=/opt/pciaccess/lib/pkgconfig ...
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4444 <div class="contents">
4545 <div class="textblock">Here is a list of all modules:</div><div class="directory">
4646 <table class="directory">
47 <tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00188.html" target="_self">API version</a></td><td class="desc"></td></tr>
48 <tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00189.html" target="_self">Object Sets (hwloc_cpuset_t and hwloc_nodeset_t)</a></td><td class="desc"></td></tr>
49 <tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00190.html" target="_self">Object Types</a></td><td class="desc"></td></tr>
50 <tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00191.html" target="_self">Object Structure and Attributes</a></td><td class="desc"></td></tr>
51 <tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00192.html" target="_self">Topology Creation and Destruction</a></td><td class="desc"></td></tr>
52 <tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00193.html" target="_self">Object levels, depths and types</a></td><td class="desc"></td></tr>
53 <tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00194.html" target="_self">Converting between Object Types and Attributes, and Strings</a></td><td class="desc"></td></tr>
54 <tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00195.html" target="_self">Consulting and Adding Key-Value Info Attributes</a></td><td class="desc"></td></tr>
55 <tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00196.html" target="_self">CPU binding</a></td><td class="desc"></td></tr>
56 <tr id="row_9_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00197.html" target="_self">Memory binding</a></td><td class="desc"></td></tr>
57 <tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00198.html" target="_self">Changing the Source of Topology Discovery</a></td><td class="desc"></td></tr>
58 <tr id="row_11_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00199.html" target="_self">Topology Detection Configuration and Query</a></td><td class="desc"></td></tr>
59 <tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00200.html" target="_self">Modifying a loaded Topology</a></td><td class="desc"></td></tr>
60 <tr id="row_13_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00201.html" target="_self">Finding Objects inside a CPU set</a></td><td class="desc"></td></tr>
61 <tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00202.html" target="_self">Finding Objects covering at least CPU set</a></td><td class="desc"></td></tr>
62 <tr id="row_15_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00203.html" target="_self">Looking at Ancestor and Child Objects</a></td><td class="desc"></td></tr>
63 <tr id="row_16_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00204.html" target="_self">Kinds of object Type</a></td><td class="desc"></td></tr>
64 <tr id="row_17_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00205.html" target="_self">Looking at Cache Objects</a></td><td class="desc"></td></tr>
65 <tr id="row_18_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00206.html" target="_self">Finding objects, miscellaneous helpers</a></td><td class="desc"></td></tr>
66 <tr id="row_19_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00207.html" target="_self">Distributing items over a topology</a></td><td class="desc"></td></tr>
67 <tr id="row_20_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00208.html" target="_self">CPU and node sets of entire topologies</a></td><td class="desc"></td></tr>
68 <tr id="row_21_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00209.html" target="_self">Converting between CPU sets and node sets</a></td><td class="desc"></td></tr>
69 <tr id="row_22_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00210.html" target="_self">Finding I/O objects</a></td><td class="desc"></td></tr>
70 <tr id="row_23_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00211.html" target="_self">The bitmap API</a></td><td class="desc"></td></tr>
71 <tr id="row_24_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00212.html" target="_self">Exporting Topologies to XML</a></td><td class="desc"></td></tr>
72 <tr id="row_25_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00213.html" target="_self">Exporting Topologies to Synthetic</a></td><td class="desc"></td></tr>
73 <tr id="row_26_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00214.html" target="_self">Retrieve distances between objects</a></td><td class="desc"></td></tr>
74 <tr id="row_27_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00215.html" target="_self">Helpers for consulting distance matrices</a></td><td class="desc"></td></tr>
75 <tr id="row_28_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00216.html" target="_self">Add or remove distances between objects</a></td><td class="desc"></td></tr>
76 <tr id="row_29_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00217.html" target="_self">Comparing memory node attributes for finding where to allocate on</a></td><td class="desc"></td></tr>
77 <tr id="row_30_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00218.html" target="_self">Managing memory attributes</a></td><td class="desc"></td></tr>
78 <tr id="row_31_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00219.html" target="_self">Kinds of CPU cores</a></td><td class="desc"></td></tr>
79 <tr id="row_32_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00220.html" target="_self">Linux-specific helpers</a></td><td class="desc"></td></tr>
80 <tr id="row_33_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00221.html" target="_self">Interoperability with Linux libnuma unsigned long masks</a></td><td class="desc"></td></tr>
81 <tr id="row_34_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00222.html" target="_self">Interoperability with Linux libnuma bitmask</a></td><td class="desc"></td></tr>
82 <tr id="row_35_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00223.html" target="_self">Interoperability with glibc sched affinity</a></td><td class="desc"></td></tr>
83 <tr id="row_36_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00224.html" target="_self">Interoperability with OpenCL</a></td><td class="desc"></td></tr>
84 <tr id="row_37_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00225.html" target="_self">Interoperability with the CUDA Driver API</a></td><td class="desc"></td></tr>
85 <tr id="row_38_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00226.html" target="_self">Interoperability with the CUDA Runtime API</a></td><td class="desc"></td></tr>
86 <tr id="row_39_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00227.html" target="_self">Interoperability with the NVIDIA Management Library</a></td><td class="desc"></td></tr>
87 <tr id="row_40_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00228.html" target="_self">Interoperability with the ROCm SMI Management Library</a></td><td class="desc"></td></tr>
88 <tr id="row_41_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00229.html" target="_self">Interoperability with OpenGL displays</a></td><td class="desc"></td></tr>
89 <tr id="row_42_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00230.html" target="_self">Interoperability with OpenFabrics</a></td><td class="desc"></td></tr>
90 <tr id="row_43_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00231.html" target="_self">Topology differences</a></td><td class="desc"></td></tr>
91 <tr id="row_44_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00232.html" target="_self">Sharing topologies between processes</a></td><td class="desc"></td></tr>
92 <tr id="row_45_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00233.html" target="_self">Components and Plugins: Discovery components</a></td><td class="desc"></td></tr>
93 <tr id="row_46_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00234.html" target="_self">Components and Plugins: Discovery backends</a></td><td class="desc"></td></tr>
94 <tr id="row_47_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00235.html" target="_self">Components and Plugins: Generic components</a></td><td class="desc"></td></tr>
95 <tr id="row_48_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00236.html" target="_self">Components and Plugins: Core functions to be used by components</a></td><td class="desc"></td></tr>
96 <tr id="row_49_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00237.html" target="_self">Components and Plugins: Filtering objects</a></td><td class="desc"></td></tr>
97 <tr id="row_50_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00238.html" target="_self">Components and Plugins: helpers for PCI discovery</a></td><td class="desc"></td></tr>
98 <tr id="row_51_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00239.html" target="_self">Components and Plugins: finding PCI objects during other discoveries</a></td><td class="desc"></td></tr>
99 <tr id="row_52_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00240.html" target="_self">Netloc API</a></td><td class="desc"></td></tr>
47 <tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00191.html" target="_self">API version</a></td><td class="desc"></td></tr>
48 <tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00192.html" target="_self">Object Sets (hwloc_cpuset_t and hwloc_nodeset_t)</a></td><td class="desc"></td></tr>
49 <tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00193.html" target="_self">Object Types</a></td><td class="desc"></td></tr>
50 <tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00194.html" target="_self">Object Structure and Attributes</a></td><td class="desc"></td></tr>
51 <tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00195.html" target="_self">Topology Creation and Destruction</a></td><td class="desc"></td></tr>
52 <tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00196.html" target="_self">Object levels, depths and types</a></td><td class="desc"></td></tr>
53 <tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00197.html" target="_self">Converting between Object Types and Attributes, and Strings</a></td><td class="desc"></td></tr>
54 <tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00198.html" target="_self">Consulting and Adding Key-Value Info Attributes</a></td><td class="desc"></td></tr>
55 <tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00199.html" target="_self">CPU binding</a></td><td class="desc"></td></tr>
56 <tr id="row_9_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00200.html" target="_self">Memory binding</a></td><td class="desc"></td></tr>
57 <tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00201.html" target="_self">Changing the Source of Topology Discovery</a></td><td class="desc"></td></tr>
58 <tr id="row_11_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00202.html" target="_self">Topology Detection Configuration and Query</a></td><td class="desc"></td></tr>
59 <tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00203.html" target="_self">Modifying a loaded Topology</a></td><td class="desc"></td></tr>
60 <tr id="row_13_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00204.html" target="_self">Finding Objects inside a CPU set</a></td><td class="desc"></td></tr>
61 <tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00205.html" target="_self">Finding Objects covering at least CPU set</a></td><td class="desc"></td></tr>
62 <tr id="row_15_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00206.html" target="_self">Looking at Ancestor and Child Objects</a></td><td class="desc"></td></tr>
63 <tr id="row_16_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00207.html" target="_self">Kinds of object Type</a></td><td class="desc"></td></tr>
64 <tr id="row_17_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00208.html" target="_self">Looking at Cache Objects</a></td><td class="desc"></td></tr>
65 <tr id="row_18_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00209.html" target="_self">Finding objects, miscellaneous helpers</a></td><td class="desc"></td></tr>
66 <tr id="row_19_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00210.html" target="_self">Distributing items over a topology</a></td><td class="desc"></td></tr>
67 <tr id="row_20_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00211.html" target="_self">CPU and node sets of entire topologies</a></td><td class="desc"></td></tr>
68 <tr id="row_21_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00212.html" target="_self">Converting between CPU sets and node sets</a></td><td class="desc"></td></tr>
69 <tr id="row_22_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00213.html" target="_self">Finding I/O objects</a></td><td class="desc"></td></tr>
70 <tr id="row_23_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00214.html" target="_self">The bitmap API</a></td><td class="desc"></td></tr>
71 <tr id="row_24_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00215.html" target="_self">Exporting Topologies to XML</a></td><td class="desc"></td></tr>
72 <tr id="row_25_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00216.html" target="_self">Exporting Topologies to Synthetic</a></td><td class="desc"></td></tr>
73 <tr id="row_26_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00217.html" target="_self">Retrieve distances between objects</a></td><td class="desc"></td></tr>
74 <tr id="row_27_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00218.html" target="_self">Helpers for consulting distance matrices</a></td><td class="desc"></td></tr>
75 <tr id="row_28_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00219.html" target="_self">Add distances between objects</a></td><td class="desc"></td></tr>
76 <tr id="row_29_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00220.html" target="_self">Remove distances between objects</a></td><td class="desc"></td></tr>
77 <tr id="row_30_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00221.html" target="_self">Comparing memory node attributes for finding where to allocate on</a></td><td class="desc"></td></tr>
78 <tr id="row_31_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00222.html" target="_self">Managing memory attributes</a></td><td class="desc"></td></tr>
79 <tr id="row_32_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00223.html" target="_self">Kinds of CPU cores</a></td><td class="desc"></td></tr>
80 <tr id="row_33_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00224.html" target="_self">Linux-specific helpers</a></td><td class="desc"></td></tr>
81 <tr id="row_34_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00225.html" target="_self">Interoperability with Linux libnuma unsigned long masks</a></td><td class="desc"></td></tr>
82 <tr id="row_35_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00226.html" target="_self">Interoperability with Linux libnuma bitmask</a></td><td class="desc"></td></tr>
83 <tr id="row_36_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00227.html" target="_self">Windows-specific helpers</a></td><td class="desc"></td></tr>
84 <tr id="row_37_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00228.html" target="_self">Interoperability with glibc sched affinity</a></td><td class="desc"></td></tr>
85 <tr id="row_38_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00229.html" target="_self">Interoperability with OpenCL</a></td><td class="desc"></td></tr>
86 <tr id="row_39_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00230.html" target="_self">Interoperability with the CUDA Driver API</a></td><td class="desc"></td></tr>
87 <tr id="row_40_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00231.html" target="_self">Interoperability with the CUDA Runtime API</a></td><td class="desc"></td></tr>
88 <tr id="row_41_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00232.html" target="_self">Interoperability with the NVIDIA Management Library</a></td><td class="desc"></td></tr>
89 <tr id="row_42_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00233.html" target="_self">Interoperability with the ROCm SMI Management Library</a></td><td class="desc"></td></tr>
90 <tr id="row_43_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00234.html" target="_self">Interoperability with the oneAPI Level Zero interface.</a></td><td class="desc"></td></tr>
91 <tr id="row_44_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00235.html" target="_self">Interoperability with OpenGL displays</a></td><td class="desc"></td></tr>
92 <tr id="row_45_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00236.html" target="_self">Interoperability with OpenFabrics</a></td><td class="desc"></td></tr>
93 <tr id="row_46_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00237.html" target="_self">Topology differences</a></td><td class="desc"></td></tr>
94 <tr id="row_47_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00238.html" target="_self">Sharing topologies between processes</a></td><td class="desc"></td></tr>
95 <tr id="row_48_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00239.html" target="_self">Components and Plugins: Discovery components</a></td><td class="desc"></td></tr>
96 <tr id="row_49_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00240.html" target="_self">Components and Plugins: Discovery backends</a></td><td class="desc"></td></tr>
97 <tr id="row_50_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00241.html" target="_self">Components and Plugins: Generic components</a></td><td class="desc"></td></tr>
98 <tr id="row_51_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00242.html" target="_self">Components and Plugins: Core functions to be used by components</a></td><td class="desc"></td></tr>
99 <tr id="row_52_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00243.html" target="_self">Components and Plugins: Filtering objects</a></td><td class="desc"></td></tr>
100 <tr id="row_53_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00244.html" target="_self">Components and Plugins: helpers for PCI discovery</a></td><td class="desc"></td></tr>
101 <tr id="row_54_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00245.html" target="_self">Components and Plugins: finding PCI objects during other discoveries</a></td><td class="desc"></td></tr>
102 <tr id="row_55_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00246.html" target="_self">Netloc API</a></td><td class="desc"></td></tr>
100103 </table>
101104 </div><!-- directory -->
102105 </div><!-- contents -->
1818 <tr style="height: 56px;">
1919 <td id="projectalign" style="padding-left: 0.5em;">
2020 <div id="projectname">Hardware Locality (hwloc)
21 &#160;<span id="projectnumber">2.4.1</span>
21 &#160;<span id="projectnumber">2.5.0rc1</span>
2222 </div>
2323 </td>
2424 </tr>
4444 <div class="contents">
4545 <div class="textblock">Here is a list of all related documentation pages:</div><div class="directory">
4646 <table class="directory">
47 <tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00385.html" target="_self">Hardware Locality (hwloc) Introduction</a></td><td class="desc"></td></tr>
48 <tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00386.html" target="_self">Terms and Definitions</a></td><td class="desc"></td></tr>
49 <tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00387.html" target="_self">Command-Line Tools</a></td><td class="desc"></td></tr>
50 <tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00388.html" target="_self">Environment Variables</a></td><td class="desc"></td></tr>
51 <tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00389.html" target="_self">CPU and Memory Binding Overview</a></td><td class="desc"></td></tr>
52 <tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00390.html" target="_self">I/O Devices</a></td><td class="desc"></td></tr>
53 <tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00391.html" target="_self">Miscellaneous objects</a></td><td class="desc"></td></tr>
54 <tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00392.html" target="_self">Object attributes</a></td><td class="desc"></td></tr>
55 <tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00393.html" target="_self">Topology Attributes: Distances, Memory Attributes and CPU Kinds</a></td><td class="desc"></td></tr>
56 <tr id="row_9_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00394.html" target="_self">Importing and exporting topologies from/to XML files</a></td><td class="desc"></td></tr>
57 <tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00395.html" target="_self">Synthetic topologies</a></td><td class="desc"></td></tr>
58 <tr id="row_11_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00396.html" target="_self">Interoperability With Other Software</a></td><td class="desc"></td></tr>
59 <tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00397.html" target="_self">Thread Safety</a></td><td class="desc"></td></tr>
60 <tr id="row_13_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00398.html" target="_self">Components and plugins</a></td><td class="desc"></td></tr>
61 <tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00399.html" target="_self">Embedding hwloc in Other Software</a></td><td class="desc"></td></tr>
62 <tr id="row_15_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00400.html" target="_self">Frequently Asked Questions</a></td><td class="desc"></td></tr>
63 <tr id="row_16_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00401.html" target="_self">Upgrading to the hwloc 2.0 API</a></td><td class="desc"></td></tr>
64 <tr id="row_17_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00402.html" target="_self">Network Locality (netloc)</a></td><td class="desc"></td></tr>
65 <tr id="row_18_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00403.html" target="_self">Netloc with Scotch</a></td><td class="desc"></td></tr>
47 <tr id="row_0_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00391.html" target="_self">Hardware Locality (hwloc) Introduction</a></td><td class="desc"></td></tr>
48 <tr id="row_1_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00392.html" target="_self">Terms and Definitions</a></td><td class="desc"></td></tr>
49 <tr id="row_2_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00393.html" target="_self">Command-Line Tools</a></td><td class="desc"></td></tr>
50 <tr id="row_3_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00394.html" target="_self">Environment Variables</a></td><td class="desc"></td></tr>
51 <tr id="row_4_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00395.html" target="_self">CPU and Memory Binding Overview</a></td><td class="desc"></td></tr>
52 <tr id="row_5_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00396.html" target="_self">I/O Devices</a></td><td class="desc"></td></tr>
53 <tr id="row_6_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00397.html" target="_self">Miscellaneous objects</a></td><td class="desc"></td></tr>
54 <tr id="row_7_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00398.html" target="_self">Object attributes</a></td><td class="desc"></td></tr>
55 <tr id="row_8_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00399.html" target="_self">Topology Attributes: Distances, Memory Attributes and CPU Kinds</a></td><td class="desc"></td></tr>
56 <tr id="row_9_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00400.html" target="_self">Importing and exporting topologies from/to XML files</a></td><td class="desc"></td></tr>
57 <tr id="row_10_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00401.html" target="_self">Synthetic topologies</a></td><td class="desc"></td></tr>
58 <tr id="row_11_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00402.html" target="_self">Interoperability With Other Software</a></td><td class="desc"></td></tr>
59 <tr id="row_12_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00403.html" target="_self">Thread Safety</a></td><td class="desc"></td></tr>
60 <tr id="row_13_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00404.html" target="_self">Components and plugins</a></td><td class="desc"></td></tr>
61 <tr id="row_14_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00405.html" target="_self">Embedding hwloc in Other Software</a></td><td class="desc"></td></tr>
62 <tr id="row_15_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00406.html" target="_self">Frequently Asked Questions</a></td><td class="desc"></td></tr>
63 <tr id="row_16_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00407.html" target="_self">Upgrading to the hwloc 2.0 API</a></td><td class="desc"></td></tr>
64 <tr id="row_17_"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00408.html" target="_self">Network Locality (netloc)</a></td><td class="desc"></td></tr>
65 <tr id="row_18_" class="even"><td class="entry"><span style="width:16px;display:inline-block;">&#160;</span><a class="el" href="a00409.html" target="_self">Netloc with Scotch</a></td><td class="desc"></td></tr>
6666 </table>
6767 </div><!-- directory -->
6868 </div><!-- contents -->
11 <tagfile doxygen_version="1.9.1">
22 <compound kind="struct">
33 <name>hwloc_backend</name>
4 <filename>a00380.html</filename>
4 <filename>a00386.html</filename>
55 <member kind="variable">
66 <type>unsigned</type>
77 <name>phases</name>
8 <anchorfile>a00380.html</anchorfile>
8 <anchorfile>a00386.html</anchorfile>
99 <anchor>aeca769840a6ff03e96462a9533adbccd</anchor>
1010 <arglist></arglist>
1111 </member>
1212 <member kind="variable">
1313 <type>unsigned long</type>
1414 <name>flags</name>
15 <anchorfile>a00380.html</anchorfile>
15 <anchorfile>a00386.html</anchorfile>
1616 <anchor>aaa8eafe495aadd81c2e3c4ec527c10ba</anchor>
1717 <arglist></arglist>
1818 </member>
1919 <member kind="variable">
2020 <type>int</type>
2121 <name>is_thissystem</name>
22 <anchorfile>a00380.html</anchorfile>
22 <anchorfile>a00386.html</anchorfile>
2323 <anchor>ab8806f6db077f1bb2e9d63ec99223f7a</anchor>
2424 <arglist></arglist>
2525 </member>
2626 <member kind="variable">
2727 <type>void *</type>
2828 <name>private_data</name>
29 <anchorfile>a00380.html</anchorfile>
29 <anchorfile>a00386.html</anchorfile>
3030 <anchor>a2ea5bd36b7f06efdb65b98b32af16c68</anchor>
3131 <arglist></arglist>
3232 </member>
3333 <member kind="variable">
3434 <type>void(*</type>
3535 <name>disable</name>
36 <anchorfile>a00380.html</anchorfile>
36 <anchorfile>a00386.html</anchorfile>
3737 <anchor>a36c4fa86350525b46340c67b802c69c7</anchor>
3838 <arglist>)(struct hwloc_backend *backend)</arglist>
3939 </member>
4040 <member kind="variable">
4141 <type>int(*</type>
4242 <name>discover</name>
43 <anchorfile>a00380.html</anchorfile>
43 <anchorfile>a00386.html</anchorfile>
4444 <anchor>accff2cd8404be43c3b44cec05e6f609b</anchor>
4545 <arglist>)(struct hwloc_backend *backend, struct hwloc_disc_status *status)</arglist>
4646 </member>
4747 <member kind="variable">
4848 <type>int(*</type>
4949 <name>get_pci_busid_cpuset</name>
50 <anchorfile>a00380.html</anchorfile>
50 <anchorfile>a00386.html</anchorfile>
5151 <anchor>aaac253491264c20930f44817270bc502</anchor>
5252 <arglist>)(struct hwloc_backend *backend, struct hwloc_pcidev_attr_s *busid, hwloc_bitmap_t cpuset)</arglist>
5353 </member>
5454 </compound>
5555 <compound kind="struct">
5656 <name>hwloc_obj_attr_u::hwloc_bridge_attr_s</name>
57 <filename>a00272.html</filename>
57 <filename>a00278.html</filename>
5858 <member kind="variable">
5959 <type>struct hwloc_pcidev_attr_s</type>
6060 <name>pci</name>
61 <anchorfile>a00272.html</anchorfile>
61 <anchorfile>a00278.html</anchorfile>
6262 <anchor>ab5c564e7c95b747dae9eb84ec0a2c31e</anchor>
6363 <arglist></arglist>
6464 </member>
6565 <member kind="variable">
6666 <type>union hwloc_obj_attr_u::hwloc_bridge_attr_s::@0</type>
6767 <name>upstream</name>
68 <anchorfile>a00272.html</anchorfile>
68 <anchorfile>a00278.html</anchorfile>
6969 <anchor>ab62888c880f8bb730292722f5811958d</anchor>
7070 <arglist></arglist>
7171 </member>
7272 <member kind="variable">
7373 <type>hwloc_obj_bridge_type_t</type>
7474 <name>upstream_type</name>
75 <anchorfile>a00272.html</anchorfile>
75 <anchorfile>a00278.html</anchorfile>
7676 <anchor>a265dd2164aa2df4972e25a029da72125</anchor>
7777 <arglist></arglist>
7878 </member>
7979 <member kind="variable">
8080 <type>unsigned short</type>
8181 <name>domain</name>
82 <anchorfile>a00272.html</anchorfile>
82 <anchorfile>a00278.html</anchorfile>
8383 <anchor>a2c31e565a5f0d23d0a0a3dd3ec8f4b17</anchor>
8484 <arglist></arglist>
8585 </member>
8686 <member kind="variable">
8787 <type>unsigned char</type>
8888 <name>secondary_bus</name>
89 <anchorfile>a00272.html</anchorfile>
89 <anchorfile>a00278.html</anchorfile>
9090 <anchor>ae2d9dd73ef1d32045c584a8e66d2f83f</anchor>
9191 <arglist></arglist>
9292 </member>
9393 <member kind="variable">
9494 <type>unsigned char</type>
9595 <name>subordinate_bus</name>
96 <anchorfile>a00272.html</anchorfile>
96 <anchorfile>a00278.html</anchorfile>
9797 <anchor>af3f3f7d76bf03e8d2afa721c2b8d6771</anchor>
9898 <arglist></arglist>
9999 </member>
100100 <member kind="variable">
101101 <type>struct hwloc_obj_attr_u::hwloc_bridge_attr_s::@1::@2</type>
102102 <name>pci</name>
103 <anchorfile>a00272.html</anchorfile>
103 <anchorfile>a00278.html</anchorfile>
104104 <anchor>a2fdc40034b915d504724b35cc776a4ec</anchor>
105105 <arglist></arglist>
106106 </member>
107107 <member kind="variable">
108108 <type>union hwloc_obj_attr_u::hwloc_bridge_attr_s::@1</type>
109109 <name>downstream</name>
110 <anchorfile>a00272.html</anchorfile>
110 <anchorfile>a00278.html</anchorfile>
111111 <anchor>a7d5db91d655ba23ffe9bda7a2cbcb9a8</anchor>
112112 <arglist></arglist>
113113 </member>
114114 <member kind="variable">
115115 <type>hwloc_obj_bridge_type_t</type>
116116 <name>downstream_type</name>
117 <anchorfile>a00272.html</anchorfile>
117 <anchorfile>a00278.html</anchorfile>
118118 <anchor>ac6a169b672d0e9f75756fd5665828b93</anchor>
119119 <arglist></arglist>
120120 </member>
121121 <member kind="variable">
122122 <type>unsigned</type>
123123 <name>depth</name>
124 <anchorfile>a00272.html</anchorfile>
124 <anchorfile>a00278.html</anchorfile>
125125 <anchor>a336c8b22893d5d734d8c9dfca4066b46</anchor>
126126 <arglist></arglist>
127127 </member>
128128 </compound>
129129 <compound kind="struct">
130130 <name>hwloc_obj_attr_u::hwloc_cache_attr_s</name>
131 <filename>a00260.html</filename>
131 <filename>a00266.html</filename>
132132 <member kind="variable">
133133 <type>hwloc_uint64_t</type>
134134 <name>size</name>
135 <anchorfile>a00260.html</anchorfile>
135 <anchorfile>a00266.html</anchorfile>
136136 <anchor>abe5e788943ed04302976740c829674c0</anchor>
137137 <arglist></arglist>
138138 </member>
139139 <member kind="variable">
140140 <type>unsigned</type>
141141 <name>depth</name>
142 <anchorfile>a00260.html</anchorfile>
142 <anchorfile>a00266.html</anchorfile>
143143 <anchor>a5c8f7f39193736c2187ed626940835d5</anchor>
144144 <arglist></arglist>
145145 </member>
146146 <member kind="variable">
147147 <type>unsigned</type>
148148 <name>linesize</name>
149 <anchorfile>a00260.html</anchorfile>
149 <anchorfile>a00266.html</anchorfile>
150150 <anchor>a801e8a668e28caf06c8b88e9ae5c10db</anchor>
151151 <arglist></arglist>
152152 </member>
153153 <member kind="variable">
154154 <type>int</type>
155155 <name>associativity</name>
156 <anchorfile>a00260.html</anchorfile>
156 <anchorfile>a00266.html</anchorfile>
157157 <anchor>ad06525e474d1e2d1423ed71bb998592d</anchor>
158158 <arglist></arglist>
159159 </member>
160160 <member kind="variable">
161161 <type>hwloc_obj_cache_type_t</type>
162162 <name>type</name>
163 <anchorfile>a00260.html</anchorfile>
163 <anchorfile>a00266.html</anchorfile>
164164 <anchor>ad8edc8ded2b7a70d6abbc874801930f4</anchor>
165165 <arglist></arglist>
166166 </member>
167167 </compound>
168168 <compound kind="union">
169169 <name>hwloc_cl_device_topology_amd</name>
170 <filename>a00328.html</filename>
170 <filename>a00334.html</filename>
171171 <member kind="variable">
172172 <type>cl_uint</type>
173173 <name>type</name>
174 <anchorfile>a00328.html</anchorfile>
174 <anchorfile>a00334.html</anchorfile>
175175 <anchor>a8ec4ea89b862bb271845b48063f332b4</anchor>
176176 <arglist></arglist>
177177 </member>
178178 <member kind="variable">
179179 <type>cl_uint</type>
180180 <name>data</name>
181 <anchorfile>a00328.html</anchorfile>
181 <anchorfile>a00334.html</anchorfile>
182182 <anchor>afbd6b814607b06fc5b2f36ad14420398</anchor>
183183 <arglist>[5]</arglist>
184184 </member>
185185 <member kind="variable">
186186 <type>struct hwloc_cl_device_topology_amd::@3</type>
187187 <name>raw</name>
188 <anchorfile>a00328.html</anchorfile>
188 <anchorfile>a00334.html</anchorfile>
189189 <anchor>a7bba6ab297b6f44e43c5937b80b4cfb6</anchor>
190190 <arglist></arglist>
191191 </member>
192192 <member kind="variable">
193193 <type>cl_char</type>
194194 <name>unused</name>
195 <anchorfile>a00328.html</anchorfile>
195 <anchorfile>a00334.html</anchorfile>
196196 <anchor>ac8650d7eea96eef290481fee980d1d47</anchor>
197197 <arglist>[17]</arglist>
198198 </member>
199199 <member kind="variable">
200200 <type>cl_char</type>
201201 <name>bus</name>
202 <anchorfile>a00328.html</anchorfile>
202 <anchorfile>a00334.html</anchorfile>
203203 <anchor>a4a23e3cc034b7ab105cab0e863dcab69</anchor>
204204 <arglist></arglist>
205205 </member>
206206 <member kind="variable">
207207 <type>cl_char</type>
208208 <name>device</name>
209 <anchorfile>a00328.html</anchorfile>
209 <anchorfile>a00334.html</anchorfile>
210210 <anchor>a017033a953d71455b067007cabb92e9c</anchor>
211211 <arglist></arglist>
212212 </member>
213213 <member kind="variable">
214214 <type>cl_char</type>
215215 <name>function</name>
216 <anchorfile>a00328.html</anchorfile>
216 <anchorfile>a00334.html</anchorfile>
217217 <anchor>a77a67ac73cff98d330ef7258b240bac3</anchor>
218218 <arglist></arglist>
219219 </member>
220220 <member kind="variable">
221221 <type>struct hwloc_cl_device_topology_amd::@4</type>
222222 <name>pcie</name>
223 <anchorfile>a00328.html</anchorfile>
223 <anchorfile>a00334.html</anchorfile>
224224 <anchor>a05e9a845012cd9d1f13a39cc35ab40a1</anchor>
225225 <arglist></arglist>
226226 </member>
227227 </compound>
228228 <compound kind="struct">
229229 <name>hwloc_component</name>
230 <filename>a00384.html</filename>
230 <filename>a00390.html</filename>
231231 <member kind="variable">
232232 <type>unsigned</type>
233233 <name>abi</name>
234 <anchorfile>a00384.html</anchorfile>
234 <anchorfile>a00390.html</anchorfile>
235235 <anchor>a3250bd6fc9713946991d805e48091b2e</anchor>
236236 <arglist></arglist>
237237 </member>
238238 <member kind="variable">
239239 <type>int(*</type>
240240 <name>init</name>
241 <anchorfile>a00384.html</anchorfile>
241 <anchorfile>a00390.html</anchorfile>
242242 <anchor>aea613546886d9b8221cadba920fe3ebc</anchor>
243243 <arglist>)(unsigned long flags)</arglist>
244244 </member>
245245 <member kind="variable">
246246 <type>void(*</type>
247247 <name>finalize</name>
248 <anchorfile>a00384.html</anchorfile>
248 <anchorfile>a00390.html</anchorfile>
249249 <anchor>a4612015451a1c706e8ba19114cb8baae</anchor>
250250 <arglist>)(unsigned long flags)</arglist>
251251 </member>
252252 <member kind="variable">
253253 <type>hwloc_component_type_t</type>
254254 <name>type</name>
255 <anchorfile>a00384.html</anchorfile>
255 <anchorfile>a00390.html</anchorfile>
256256 <anchor>a789208ada7e17492cfd3a5a88a6bb0ee</anchor>
257257 <arglist></arglist>
258258 </member>
259259 <member kind="variable">
260260 <type>unsigned long</type>
261261 <name>flags</name>
262 <anchorfile>a00384.html</anchorfile>
262 <anchorfile>a00390.html</anchorfile>
263263 <anchor>ab8043c5b4cc0e81aabba586ccb194335</anchor>
264264 <arglist></arglist>
265265 </member>
266266 <member kind="variable">
267267 <type>void *</type>
268268 <name>data</name>
269 <anchorfile>a00384.html</anchorfile>
269 <anchorfile>a00390.html</anchorfile>
270270 <anchor>a4b8cffd1d943c29fdc102b841b8598d4</anchor>
271271 <arglist></arglist>
272272 </member>
273273 </compound>
274274 <compound kind="struct">
275275 <name>hwloc_disc_component</name>
276 <filename>a00372.html</filename>
276 <filename>a00378.html</filename>
277277 <member kind="variable">
278278 <type>const char *</type>
279279 <name>name</name>
280 <anchorfile>a00372.html</anchorfile>
280 <anchorfile>a00378.html</anchorfile>
281281 <anchor>a4064c3b5d9213027e87caebef380a840</anchor>
282282 <arglist></arglist>
283283 </member>
284284 <member kind="variable">
285285 <type>unsigned</type>
286286 <name>phases</name>
287 <anchorfile>a00372.html</anchorfile>
287 <anchorfile>a00378.html</anchorfile>
288288 <anchor>a61ad3151efa02e3dbad5d919758f9c90</anchor>
289289 <arglist></arglist>
290290 </member>
291291 <member kind="variable">
292292 <type>unsigned</type>
293293 <name>excluded_phases</name>
294 <anchorfile>a00372.html</anchorfile>
294 <anchorfile>a00378.html</anchorfile>
295295 <anchor>acbb9957914dbf7b8f504215aa0c8d3fe</anchor>
296296 <arglist></arglist>
297297 </member>
298298 <member kind="variable">
299299 <type>struct hwloc_backend *(*</type>
300300 <name>instantiate</name>
301 <anchorfile>a00372.html</anchorfile>
301 <anchorfile>a00378.html</anchorfile>
302302 <anchor>ab133956219739a1032a17131757d1961</anchor>
303303 <arglist>)(struct hwloc_topology *topology, struct hwloc_disc_component *component, unsigned excluded_phases, const void *data1, const void *data2, const void *data3)</arglist>
304304 </member>
305305 <member kind="variable">
306306 <type>unsigned</type>
307307 <name>priority</name>
308 <anchorfile>a00372.html</anchorfile>
308 <anchorfile>a00378.html</anchorfile>
309309 <anchor>ae86d283c272c5ae24073a235efbf6b59</anchor>
310310 <arglist></arglist>
311311 </member>
312312 <member kind="variable">
313313 <type>unsigned</type>
314314 <name>enabled_by_default</name>
315 <anchorfile>a00372.html</anchorfile>
315 <anchorfile>a00378.html</anchorfile>
316316 <anchor>ace80cafe2b1732b047b3fc3da47e6517</anchor>
317317 <arglist></arglist>
318318 </member>
319319 </compound>
320320 <compound kind="struct">
321321 <name>hwloc_disc_status</name>
322 <filename>a00376.html</filename>
322 <filename>a00382.html</filename>
323323 <member kind="variable">
324324 <type>hwloc_disc_phase_t</type>
325325 <name>phase</name>
326 <anchorfile>a00376.html</anchorfile>
326 <anchorfile>a00382.html</anchorfile>
327327 <anchor>abaf7c8c082d43e133171f0723dbf824b</anchor>
328328 <arglist></arglist>
329329 </member>
330330 <member kind="variable">
331331 <type>unsigned</type>
332332 <name>excluded_phases</name>
333 <anchorfile>a00376.html</anchorfile>
333 <anchorfile>a00382.html</anchorfile>
334334 <anchor>a0f95fa42d46a6e7cf8dee8af12afee3a</anchor>
335335 <arglist></arglist>
336336 </member>
337337 <member kind="variable">
338338 <type>unsigned long</type>
339339 <name>flags</name>
340 <anchorfile>a00376.html</anchorfile>
340 <anchorfile>a00382.html</anchorfile>
341341 <anchor>ad8b123cecb945a9182eb824ccf8ef9d7</anchor>
342342 <arglist></arglist>
343343 </member>
344344 </compound>
345345 <compound kind="struct">
346346 <name>hwloc_distances_s</name>
347 <filename>a00316.html</filename>
347 <filename>a00322.html</filename>
348348 <member kind="variable">
349349 <type>unsigned</type>
350350 <name>nbobjs</name>
351 <anchorfile>a00316.html</anchorfile>
351 <anchorfile>a00322.html</anchorfile>
352352 <anchor>a4ca2af858cebbce7324ec49903d09474</anchor>
353353 <arglist></arglist>
354354 </member>
355355 <member kind="variable">
356356 <type>hwloc_obj_t *</type>
357357 <name>objs</name>
358 <anchorfile>a00316.html</anchorfile>
358 <anchorfile>a00322.html</anchorfile>
359359 <anchor>af1e78b2d628d191fa6cae3fbfe891078</anchor>
360360 <arglist></arglist>
361361 </member>
362362 <member kind="variable">
363363 <type>unsigned long</type>
364364 <name>kind</name>
365 <anchorfile>a00316.html</anchorfile>
365 <anchorfile>a00322.html</anchorfile>
366366 <anchor>aef9c83cf467da1b1fa4c36493febb3b5</anchor>
367367 <arglist></arglist>
368368 </member>
369369 <member kind="variable">
370370 <type>hwloc_uint64_t *</type>
371371 <name>values</name>
372 <anchorfile>a00316.html</anchorfile>
372 <anchorfile>a00322.html</anchorfile>
373373 <anchor>ae43e19b2c743de05c93d71a30beaca75</anchor>
374374 <arglist></arglist>
375375 </member>
376376 </compound>
377377 <compound kind="struct">
378378 <name>hwloc_obj_attr_u::hwloc_group_attr_s</name>
379 <filename>a00264.html</filename>
379 <filename>a00270.html</filename>
380380 <member kind="variable">
381381 <type>unsigned</type>
382382 <name>depth</name>
383 <anchorfile>a00264.html</anchorfile>
383 <anchorfile>a00270.html</anchorfile>
384384 <anchor>ad914eac61c77481e1b7037877bcc5579</anchor>
385385 <arglist></arglist>
386386 </member>
387387 <member kind="variable">
388388 <type>unsigned</type>
389389 <name>kind</name>
390 <anchorfile>a00264.html</anchorfile>
390 <anchorfile>a00270.html</anchorfile>
391391 <anchor>a3229f269c4cc7e63492c168535e4f0c1</anchor>
392392 <arglist></arglist>
393393 </member>
394394 <member kind="variable">
395395 <type>unsigned</type>
396396 <name>subkind</name>
397 <anchorfile>a00264.html</anchorfile>
397 <anchorfile>a00270.html</anchorfile>
398398 <anchor>ad514d943960a4036ed5e44dc187c74ed</anchor>
399399 <arglist></arglist>
400400 </member>
401401 <member kind="variable">
402402 <type>unsigned char</type>
403403 <name>dont_merge</name>
404 <anchorfile>a00264.html</anchorfile>
404 <anchorfile>a00270.html</anchorfile>
405405 <anchor>afa253d4b70f92e940c226d61f192054f</anchor>
406406 <arglist></arglist>
407407 </member>
408408 </compound>
409409 <compound kind="struct">
410410 <name>hwloc_info_s</name>
411 <filename>a00292.html</filename>
411 <filename>a00298.html</filename>
412412 <member kind="variable">
413413 <type>char *</type>
414414 <name>name</name>
415 <anchorfile>a00292.html</anchorfile>
415 <anchorfile>a00298.html</anchorfile>
416416 <anchor>a12ce1309e4381ae38b5c15d242a47124</anchor>
417417 <arglist></arglist>
418418 </member>
419419 <member kind="variable">
420420 <type>char *</type>
421421 <name>value</name>
422 <anchorfile>a00292.html</anchorfile>
422 <anchorfile>a00298.html</anchorfile>
423423 <anchor>a788a0073bafe660645e7b69f31a43bbb</anchor>
424424 <arglist></arglist>
425425 </member>
426426 </compound>
427427 <compound kind="struct">
428428 <name>hwloc_location</name>
429 <filename>a00320.html</filename>
429 <filename>a00326.html</filename>
430430 <class kind="union">hwloc_location::hwloc_location_u</class>
431431 <member kind="variable">
432432 <type>enum hwloc_location_type_e</type>
433433 <name>type</name>
434 <anchorfile>a00320.html</anchorfile>
434 <anchorfile>a00326.html</anchorfile>
435435 <anchor>aeb9c0ab74a7d3506a76d0b82600a28a7</anchor>
436436 <arglist></arglist>
437437 </member>
438438 <member kind="variable">
439439 <type>union hwloc_location::hwloc_location_u</type>
440440 <name>location</name>
441 <anchorfile>a00320.html</anchorfile>
441 <anchorfile>a00326.html</anchorfile>
442442 <anchor>a707a25a5b65177e4d081be49aa0777a2</anchor>
443443 <arglist></arglist>
444444 </member>
445445 </compound>
446446 <compound kind="union">
447447 <name>hwloc_location::hwloc_location_u</name>
448 <filename>a00324.html</filename>
448 <filename>a00330.html</filename>
449449 <member kind="variable">
450450 <type>hwloc_cpuset_t</type>
451451 <name>cpuset</name>
452 <anchorfile>a00324.html</anchorfile>
452 <anchorfile>a00330.html</anchorfile>
453453 <anchor>a033bad8f6b891992f0c18b85a88c5561</anchor>
454454 <arglist></arglist>
455455 </member>
456456 <member kind="variable">
457457 <type>hwloc_obj_t</type>
458458 <name>object</name>
459 <anchorfile>a00324.html</anchorfile>
459 <anchorfile>a00330.html</anchorfile>
460460 <anchor>acf2ebf75869f0a53a884ac2ab3374122</anchor>
461461 <arglist></arglist>
462462 </member>
463463 </compound>
464464 <compound kind="struct">
465465 <name>hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s</name>
466 <filename>a00256.html</filename>
466 <filename>a00262.html</filename>
467467 <member kind="variable">
468468 <type>hwloc_uint64_t</type>
469469 <name>size</name>
470 <anchorfile>a00256.html</anchorfile>
470 <anchorfile>a00262.html</anchorfile>
471471 <anchor>a8ea7ebe9d91c7378bba03da57efc25cb</anchor>
472472 <arglist></arglist>
473473 </member>
474474 <member kind="variable">
475475 <type>hwloc_uint64_t</type>
476476 <name>count</name>
477 <anchorfile>a00256.html</anchorfile>
477 <anchorfile>a00262.html</anchorfile>
478478 <anchor>a98514e37d57a325b78e21ffd8d7419e0</anchor>
479479 <arglist></arglist>
480480 </member>
481481 </compound>
482482 <compound kind="struct">
483483 <name>hwloc_obj_attr_u::hwloc_numanode_attr_s</name>
484 <filename>a00252.html</filename>
484 <filename>a00258.html</filename>
485485 <class kind="struct">hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s</class>
486486 <member kind="variable">
487487 <type>hwloc_uint64_t</type>
488488 <name>local_memory</name>
489 <anchorfile>a00252.html</anchorfile>
489 <anchorfile>a00258.html</anchorfile>
490490 <anchor>a6703cbf2afbf63c9d60c5ff4dc0c73aa</anchor>
491491 <arglist></arglist>
492492 </member>
493493 <member kind="variable">
494494 <type>unsigned</type>
495495 <name>page_types_len</name>
496 <anchorfile>a00252.html</anchorfile>
496 <anchorfile>a00258.html</anchorfile>
497497 <anchor>a513078122d403904e16723d30f583cb2</anchor>
498498 <arglist></arglist>
499499 </member>
500500 <member kind="variable">
501501 <type>struct hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s *</type>
502502 <name>page_types</name>
503 <anchorfile>a00252.html</anchorfile>
503 <anchorfile>a00258.html</anchorfile>
504504 <anchor>a7e53c5024da2d7741a5cc1e7016bb8d2</anchor>
505505 <arglist></arglist>
506506 </member>
507507 </compound>
508508 <compound kind="struct">
509509 <name>hwloc_obj</name>
510 <filename>a00244.html</filename>
510 <filename>a00250.html</filename>
511511 <member kind="variable">
512512 <type>hwloc_obj_type_t</type>
513513 <name>type</name>
514 <anchorfile>a00244.html</anchorfile>
514 <anchorfile>a00250.html</anchorfile>
515515 <anchor>acc4f0803f244867e68fe0036800be5de</anchor>
516516 <arglist></arglist>
517517 </member>
518518 <member kind="variable">
519519 <type>char *</type>
520520 <name>subtype</name>
521 <anchorfile>a00244.html</anchorfile>
521 <anchorfile>a00250.html</anchorfile>
522522 <anchor>a5d4f97e76723a9ec8d38046f19e00d33</anchor>
523523 <arglist></arglist>
524524 </member>
525525 <member kind="variable">
526526 <type>unsigned</type>
527527 <name>os_index</name>
528 <anchorfile>a00244.html</anchorfile>
528 <anchorfile>a00250.html</anchorfile>
529529 <anchor>a61a7a80a68eaccbaaa28269e678c81a9</anchor>
530530 <arglist></arglist>
531531 </member>
532532 <member kind="variable">
533533 <type>char *</type>
534534 <name>name</name>
535 <anchorfile>a00244.html</anchorfile>
535 <anchorfile>a00250.html</anchorfile>
536536 <anchor>abb709ec38f2970677e4e57d1d30be96d</anchor>
537537 <arglist></arglist>
538538 </member>
539539 <member kind="variable">
540540 <type>hwloc_uint64_t</type>
541541 <name>total_memory</name>
542 <anchorfile>a00244.html</anchorfile>
542 <anchorfile>a00250.html</anchorfile>
543543 <anchor>a75603fc36c9284ba48ce814b772a58b6</anchor>
544544 <arglist></arglist>
545545 </member>
546546 <member kind="variable">
547547 <type>union hwloc_obj_attr_u *</type>
548548 <name>attr</name>
549 <anchorfile>a00244.html</anchorfile>
549 <anchorfile>a00250.html</anchorfile>
550550 <anchor>accd40e29f71f19e88db62ea3df02adc8</anchor>
551551 <arglist></arglist>
552552 </member>
553553 <member kind="variable">
554554 <type>int</type>
555555 <name>depth</name>
556 <anchorfile>a00244.html</anchorfile>
556 <anchorfile>a00250.html</anchorfile>
557557 <anchor>a4876fd165b4fff35521f07ebd85355ed</anchor>
558558 <arglist></arglist>
559559 </member>
560560 <member kind="variable">
561561 <type>unsigned</type>
562562 <name>logical_index</name>
563 <anchorfile>a00244.html</anchorfile>
563 <anchorfile>a00250.html</anchorfile>
564564 <anchor>a0d07fb7b8935e137c94d75a3eb492ae9</anchor>
565565 <arglist></arglist>
566566 </member>
567567 <member kind="variable">
568568 <type>struct hwloc_obj *</type>
569569 <name>next_cousin</name>
570 <anchorfile>a00244.html</anchorfile>
570 <anchorfile>a00250.html</anchorfile>
571571 <anchor>a85a788017457129589318b6c39451acf</anchor>
572572 <arglist></arglist>
573573 </member>
574574 <member kind="variable">
575575 <type>struct hwloc_obj *</type>
576576 <name>prev_cousin</name>
577 <anchorfile>a00244.html</anchorfile>
577 <anchorfile>a00250.html</anchorfile>
578578 <anchor>ac715989f55ff5a0eb6be2969ee477ec0</anchor>
579579 <arglist></arglist>
580580 </member>
581581 <member kind="variable">
582582 <type>struct hwloc_obj *</type>
583583 <name>parent</name>
584 <anchorfile>a00244.html</anchorfile>
584 <anchorfile>a00250.html</anchorfile>
585585 <anchor>adc494f6aed939992be1c55cca5822900</anchor>
586586 <arglist></arglist>
587587 </member>
588588 <member kind="variable">
589589 <type>unsigned</type>
590590 <name>sibling_rank</name>
591 <anchorfile>a00244.html</anchorfile>
591 <anchorfile>a00250.html</anchorfile>
592592 <anchor>aaa6043eee6f55869933c1d974efd9acd</anchor>
593593 <arglist></arglist>
594594 </member>
595595 <member kind="variable">
596596 <type>struct hwloc_obj *</type>
597597 <name>next_sibling</name>
598 <anchorfile>a00244.html</anchorfile>
598 <anchorfile>a00250.html</anchorfile>
599599 <anchor>a7f2343ed476fe4942e6fffd4cade1b40</anchor>
600600 <arglist></arglist>
601601 </member>
602602 <member kind="variable">
603603 <type>struct hwloc_obj *</type>
604604 <name>prev_sibling</name>
605 <anchorfile>a00244.html</anchorfile>
605 <anchorfile>a00250.html</anchorfile>
606606 <anchor>a7b89e8c189876c0158a9282aaaf17f50</anchor>
607607 <arglist></arglist>
608608 </member>
609609 <member kind="variable">
610610 <type>int</type>
611611 <name>symmetric_subtree</name>
612 <anchorfile>a00244.html</anchorfile>
612 <anchorfile>a00250.html</anchorfile>
613613 <anchor>a0f41a1d67dc6b661906f2217563637f3</anchor>
614614 <arglist></arglist>
615615 </member>
616616 <member kind="variable">
617617 <type>hwloc_cpuset_t</type>
618618 <name>cpuset</name>
619 <anchorfile>a00244.html</anchorfile>
619 <anchorfile>a00250.html</anchorfile>
620620 <anchor>a67925e0f2c47f50408fbdb9bddd0790f</anchor>
621621 <arglist></arglist>
622622 </member>
623623 <member kind="variable">
624624 <type>hwloc_cpuset_t</type>
625625 <name>complete_cpuset</name>
626 <anchorfile>a00244.html</anchorfile>
626 <anchorfile>a00250.html</anchorfile>
627627 <anchor>a91788a9da687beb7224cc1fd7b75208c</anchor>
628628 <arglist></arglist>
629629 </member>
630630 <member kind="variable">
631631 <type>hwloc_nodeset_t</type>
632632 <name>nodeset</name>
633 <anchorfile>a00244.html</anchorfile>
633 <anchorfile>a00250.html</anchorfile>
634634 <anchor>a08f0d0e16c619a6e653526cbee4ffea3</anchor>
635635 <arglist></arglist>
636636 </member>
637637 <member kind="variable">
638638 <type>hwloc_nodeset_t</type>
639639 <name>complete_nodeset</name>
640 <anchorfile>a00244.html</anchorfile>
640 <anchorfile>a00250.html</anchorfile>
641641 <anchor>ac38c4012127525ef74c5615c526f4c2e</anchor>
642642 <arglist></arglist>
643643 </member>
644644 <member kind="variable">
645645 <type>struct hwloc_info_s *</type>
646646 <name>infos</name>
647 <anchorfile>a00244.html</anchorfile>
647 <anchorfile>a00250.html</anchorfile>
648648 <anchor>a8604654c38b7a720efae5025d3a96ee6</anchor>
649649 <arglist></arglist>
650650 </member>
651651 <member kind="variable">
652652 <type>unsigned</type>
653653 <name>infos_count</name>
654 <anchorfile>a00244.html</anchorfile>
654 <anchorfile>a00250.html</anchorfile>
655655 <anchor>a9843acc28cfbba903b63ea14b137ff70</anchor>
656656 <arglist></arglist>
657657 </member>
658658 <member kind="variable">
659659 <type>void *</type>
660660 <name>userdata</name>
661 <anchorfile>a00244.html</anchorfile>
661 <anchorfile>a00250.html</anchorfile>
662662 <anchor>a76fd3ac94401cf32dfccc3a3a8de68a5</anchor>
663663 <arglist></arglist>
664664 </member>
665665 <member kind="variable">
666666 <type>hwloc_uint64_t</type>
667667 <name>gp_index</name>
668 <anchorfile>a00244.html</anchorfile>
668 <anchorfile>a00250.html</anchorfile>
669669 <anchor>a957984a355fa61c85f46605c336e7551</anchor>
670670 <arglist></arglist>
671671 </member>
672672 <member kind="variable">
673673 <type>unsigned</type>
674674 <name>arity</name>
675 <anchorfile>a00244.html</anchorfile>
675 <anchorfile>a00250.html</anchorfile>
676676 <anchor>aac3f6da35c9b57599909a44ce2b716c1</anchor>
677677 <arglist></arglist>
678678 </member>
679679 <member kind="variable">
680680 <type>struct hwloc_obj **</type>
681681 <name>children</name>
682 <anchorfile>a00244.html</anchorfile>
682 <anchorfile>a00250.html</anchorfile>
683683 <anchor>a04d05403da37bfe17cd63b7c7dd07b1f</anchor>
684684 <arglist></arglist>
685685 </member>
686686 <member kind="variable">
687687 <type>struct hwloc_obj *</type>
688688 <name>first_child</name>
689 <anchorfile>a00244.html</anchorfile>
689 <anchorfile>a00250.html</anchorfile>
690690 <anchor>af51d08a0a79dba517c06c5afedc8d2dc</anchor>
691691 <arglist></arglist>
692692 </member>
693693 <member kind="variable">
694694 <type>struct hwloc_obj *</type>
695695 <name>last_child</name>
696 <anchorfile>a00244.html</anchorfile>
696 <anchorfile>a00250.html</anchorfile>
697697 <anchor>a84bd65634dbc55f4158b74443a9bd04f</anchor>
698698 <arglist></arglist>
699699 </member>
700700 <member kind="variable">
701701 <type>unsigned</type>
702702 <name>memory_arity</name>
703 <anchorfile>a00244.html</anchorfile>
703 <anchorfile>a00250.html</anchorfile>
704704 <anchor>a6f834ea4dd26553cdea601d2fae6d3b7</anchor>
705705 <arglist></arglist>
706706 </member>
707707 <member kind="variable">
708708 <type>struct hwloc_obj *</type>
709709 <name>memory_first_child</name>
710 <anchorfile>a00244.html</anchorfile>
710 <anchorfile>a00250.html</anchorfile>
711711 <anchor>ac0e8200dba25b90d5954bd4ec61f97d3</anchor>
712712 <arglist></arglist>
713713 </member>
714714 <member kind="variable">
715715 <type>unsigned</type>
716716 <name>io_arity</name>
717 <anchorfile>a00244.html</anchorfile>
717 <anchorfile>a00250.html</anchorfile>
718718 <anchor>a7b3b29f0be377c7d2d52262019fc7d11</anchor>
719719 <arglist></arglist>
720720 </member>
721721 <member kind="variable">
722722 <type>struct hwloc_obj *</type>
723723 <name>io_first_child</name>
724 <anchorfile>a00244.html</anchorfile>
724 <anchorfile>a00250.html</anchorfile>
725725 <anchor>a8d14c88e1ebc4ae67cc69f9e928558b3</anchor>
726726 <arglist></arglist>
727727 </member>
728728 <member kind="variable">
729729 <type>unsigned</type>
730730 <name>misc_arity</name>
731 <anchorfile>a00244.html</anchorfile>
731 <anchorfile>a00250.html</anchorfile>
732732 <anchor>a2bb7862ce722d7ceda23cfa153da165a</anchor>
733733 <arglist></arglist>
734734 </member>
735735 <member kind="variable">
736736 <type>struct hwloc_obj *</type>
737737 <name>misc_first_child</name>
738 <anchorfile>a00244.html</anchorfile>
738 <anchorfile>a00250.html</anchorfile>
739739 <anchor>a57812a313fe9b1a9500489f47c3011cc</anchor>
740740 <arglist></arglist>
741741 </member>
742742 <member kind="variable">
743743 <type>unsigned</type>
744744 <name>arity</name>
745 <anchorfile>a00244.html</anchorfile>
745 <anchorfile>a00250.html</anchorfile>
746746 <anchor>aac3f6da35c9b57599909a44ce2b716c1</anchor>
747747 <arglist></arglist>
748748 </member>
749749 <member kind="variable">
750750 <type>struct hwloc_obj **</type>
751751 <name>children</name>
752 <anchorfile>a00244.html</anchorfile>
752 <anchorfile>a00250.html</anchorfile>
753753 <anchor>a04d05403da37bfe17cd63b7c7dd07b1f</anchor>
754754 <arglist></arglist>
755755 </member>
756756 <member kind="variable">
757757 <type>struct hwloc_obj *</type>
758758 <name>first_child</name>
759 <anchorfile>a00244.html</anchorfile>
759 <anchorfile>a00250.html</anchorfile>
760760 <anchor>af51d08a0a79dba517c06c5afedc8d2dc</anchor>
761761 <arglist></arglist>
762762 </member>
763763 <member kind="variable">
764764 <type>struct hwloc_obj *</type>
765765 <name>last_child</name>
766 <anchorfile>a00244.html</anchorfile>
766 <anchorfile>a00250.html</anchorfile>
767767 <anchor>a84bd65634dbc55f4158b74443a9bd04f</anchor>
768768 <arglist></arglist>
769769 </member>
770770 <member kind="variable">
771771 <type>unsigned</type>
772772 <name>memory_arity</name>
773 <anchorfile>a00244.html</anchorfile>
773 <anchorfile>a00250.html</anchorfile>
774774 <anchor>a6f834ea4dd26553cdea601d2fae6d3b7</anchor>
775775 <arglist></arglist>
776776 </member>
777777 <member kind="variable">
778778 <type>struct hwloc_obj *</type>
779779 <name>memory_first_child</name>
780 <anchorfile>a00244.html</anchorfile>
780 <anchorfile>a00250.html</anchorfile>
781781 <anchor>ac0e8200dba25b90d5954bd4ec61f97d3</anchor>
782782 <arglist></arglist>
783783 </member>
784784 <member kind="variable">
785785 <type>unsigned</type>
786786 <name>io_arity</name>
787 <anchorfile>a00244.html</anchorfile>
787 <anchorfile>a00250.html</anchorfile>
788788 <anchor>a7b3b29f0be377c7d2d52262019fc7d11</anchor>
789789 <arglist></arglist>
790790 </member>
791791 <member kind="variable">
792792 <type>struct hwloc_obj *</type>
793793 <name>io_first_child</name>
794 <anchorfile>a00244.html</anchorfile>
794 <anchorfile>a00250.html</anchorfile>
795795 <anchor>a8d14c88e1ebc4ae67cc69f9e928558b3</anchor>
796796 <arglist></arglist>
797797 </member>
798798 <member kind="variable">
799799 <type>unsigned</type>
800800 <name>misc_arity</name>
801 <anchorfile>a00244.html</anchorfile>
801 <anchorfile>a00250.html</anchorfile>
802802 <anchor>a2bb7862ce722d7ceda23cfa153da165a</anchor>
803803 <arglist></arglist>
804804 </member>
805805 <member kind="variable">
806806 <type>struct hwloc_obj *</type>
807807 <name>misc_first_child</name>
808 <anchorfile>a00244.html</anchorfile>
808 <anchorfile>a00250.html</anchorfile>
809809 <anchor>a57812a313fe9b1a9500489f47c3011cc</anchor>
810810 <arglist></arglist>
811811 </member>
812812 </compound>
813813 <compound kind="union">
814814 <name>hwloc_obj_attr_u</name>
815 <filename>a00248.html</filename>
815 <filename>a00254.html</filename>
816816 <class kind="struct">hwloc_obj_attr_u::hwloc_bridge_attr_s</class>
817817 <class kind="struct">hwloc_obj_attr_u::hwloc_cache_attr_s</class>
818818 <class kind="struct">hwloc_obj_attr_u::hwloc_group_attr_s</class>
822822 <member kind="variable">
823823 <type>struct hwloc_obj_attr_u::hwloc_numanode_attr_s</type>
824824 <name>numanode</name>
825 <anchorfile>a00248.html</anchorfile>
825 <anchorfile>a00254.html</anchorfile>
826826 <anchor>ad066b9612802ffa01e132dc3a8e6cc86</anchor>
827827 <arglist></arglist>
828828 </member>
829829 <member kind="variable">
830830 <type>struct hwloc_obj_attr_u::hwloc_cache_attr_s</type>
831831 <name>cache</name>
832 <anchorfile>a00248.html</anchorfile>
832 <anchorfile>a00254.html</anchorfile>
833833 <anchor>a23f553f3252c9d13f2338231cd354ea9</anchor>
834834 <arglist></arglist>
835835 </member>
836836 <member kind="variable">
837837 <type>struct hwloc_obj_attr_u::hwloc_group_attr_s</type>
838838 <name>group</name>
839 <anchorfile>a00248.html</anchorfile>
839 <anchorfile>a00254.html</anchorfile>
840840 <anchor>a9eddbd69e34cd2ef6af6d2ac31b6eff3</anchor>
841841 <arglist></arglist>
842842 </member>
843843 <member kind="variable">
844844 <type>struct hwloc_obj_attr_u::hwloc_pcidev_attr_s</type>
845845 <name>pcidev</name>
846 <anchorfile>a00248.html</anchorfile>
846 <anchorfile>a00254.html</anchorfile>
847847 <anchor>a0b66da7ab072f7c016f8ed86701f5a7c</anchor>
848848 <arglist></arglist>
849849 </member>
850850 <member kind="variable">
851851 <type>struct hwloc_obj_attr_u::hwloc_bridge_attr_s</type>
852852 <name>bridge</name>
853 <anchorfile>a00248.html</anchorfile>
853 <anchorfile>a00254.html</anchorfile>
854854 <anchor>a207e6359497b7116d6f4baa9e8bbeb43</anchor>
855855 <arglist></arglist>
856856 </member>
857857 <member kind="variable">
858858 <type>struct hwloc_obj_attr_u::hwloc_osdev_attr_s</type>
859859 <name>osdev</name>
860 <anchorfile>a00248.html</anchorfile>
860 <anchorfile>a00254.html</anchorfile>
861861 <anchor>aaf7a5c38b5185703ff18c46ad2761dcf</anchor>
862862 <arglist></arglist>
863863 </member>
864864 </compound>
865865 <compound kind="struct">
866866 <name>hwloc_obj_attr_u::hwloc_osdev_attr_s</name>
867 <filename>a00288.html</filename>
867 <filename>a00294.html</filename>
868868 <member kind="variable">
869869 <type>hwloc_obj_osdev_type_t</type>
870870 <name>type</name>
871 <anchorfile>a00288.html</anchorfile>
871 <anchorfile>a00294.html</anchorfile>
872872 <anchor>a31e019e27e54ac6138d04be639bb96f9</anchor>
873873 <arglist></arglist>
874874 </member>
875875 </compound>
876876 <compound kind="struct">
877877 <name>hwloc_obj_attr_u::hwloc_pcidev_attr_s</name>
878 <filename>a00268.html</filename>
878 <filename>a00274.html</filename>
879879 <member kind="variable">
880880 <type>unsigned short</type>
881881 <name>domain</name>
882 <anchorfile>a00268.html</anchorfile>
882 <anchorfile>a00274.html</anchorfile>
883883 <anchor>a8fba44988deb98613c1505a4019a34dc</anchor>
884884 <arglist></arglist>
885885 </member>
886886 <member kind="variable">
887887 <type>unsigned char</type>
888888 <name>bus</name>
889 <anchorfile>a00268.html</anchorfile>
889 <anchorfile>a00274.html</anchorfile>
890890 <anchor>aae99e035e8d1387d7b8768aaa8eceb0a</anchor>
891891 <arglist></arglist>
892892 </member>
893893 <member kind="variable">
894894 <type>unsigned char</type>
895895 <name>dev</name>
896 <anchorfile>a00268.html</anchorfile>
896 <anchorfile>a00274.html</anchorfile>
897897 <anchor>a3d70c84a12f7e93d14c8d47bf4fd9dc5</anchor>
898898 <arglist></arglist>
899899 </member>
900900 <member kind="variable">
901901 <type>unsigned char</type>
902902 <name>func</name>
903 <anchorfile>a00268.html</anchorfile>
903 <anchorfile>a00274.html</anchorfile>
904904 <anchor>a695f32df53f4ef728670bfcf31b74e0f</anchor>
905905 <arglist></arglist>
906906 </member>
907907 <member kind="variable">
908908 <type>unsigned short</type>
909909 <name>class_id</name>
910 <anchorfile>a00268.html</anchorfile>
910 <anchorfile>a00274.html</anchorfile>
911911 <anchor>aee735352d9f1686fd290fc6d6397c334</anchor>
912912 <arglist></arglist>
913913 </member>
914914 <member kind="variable">
915915 <type>unsigned short</type>
916916 <name>vendor_id</name>
917 <anchorfile>a00268.html</anchorfile>
917 <anchorfile>a00274.html</anchorfile>
918918 <anchor>aad970ad19b62eb2d5df30e4802da4f4c</anchor>
919919 <arglist></arglist>
920920 </member>
921921 <member kind="variable">
922922 <type>unsigned short</type>
923923 <name>device_id</name>
924 <anchorfile>a00268.html</anchorfile>
924 <anchorfile>a00274.html</anchorfile>
925925 <anchor>a35b66064ab7d768caf7154e410caf0fa</anchor>
926926 <arglist></arglist>
927927 </member>
928928 <member kind="variable">
929929 <type>unsigned short</type>
930930 <name>subvendor_id</name>
931 <anchorfile>a00268.html</anchorfile>
931 <anchorfile>a00274.html</anchorfile>
932932 <anchor>a499db3d8cc89eaba04fcaef3df1cba97</anchor>
933933 <arglist></arglist>
934934 </member>
935935 <member kind="variable">
936936 <type>unsigned short</type>
937937 <name>subdevice_id</name>
938 <anchorfile>a00268.html</anchorfile>
938 <anchorfile>a00274.html</anchorfile>
939939 <anchor>acac741aecd7a6db64f33409427e3971f</anchor>
940940 <arglist></arglist>
941941 </member>
942942 <member kind="variable">
943943 <type>unsigned char</type>
944944 <name>revision</name>
945 <anchorfile>a00268.html</anchorfile>
945 <anchorfile>a00274.html</anchorfile>
946946 <anchor>a13ad54c93d08d8ac808e4de9674c5ee7</anchor>
947947 <arglist></arglist>
948948 </member>
949949 <member kind="variable">
950950 <type>float</type>
951951 <name>linkspeed</name>
952 <anchorfile>a00268.html</anchorfile>
952 <anchorfile>a00274.html</anchorfile>
953953 <anchor>a59b2fce35f7cbde86c4fd305d0ccda5f</anchor>
954954 <arglist></arglist>
955955 </member>
956956 </compound>
957957 <compound kind="struct">
958958 <name>hwloc_topology_cpubind_support</name>
959 <filename>a00300.html</filename>
959 <filename>a00306.html</filename>
960960 <member kind="variable">
961961 <type>unsigned char</type>
962962 <name>set_thisproc_cpubind</name>
963 <anchorfile>a00300.html</anchorfile>
963 <anchorfile>a00306.html</anchorfile>
964964 <anchor>a9403d51657a4d546b3ea9553a2973a27</anchor>
965965 <arglist></arglist>
966966 </member>
967967 <member kind="variable">
968968 <type>unsigned char</type>
969969 <name>get_thisproc_cpubind</name>
970 <anchorfile>a00300.html</anchorfile>
970 <anchorfile>a00306.html</anchorfile>
971971 <anchor>a77a09ddd78ee3e9ff5f532a6ac74f7eb</anchor>
972972 <arglist></arglist>
973973 </member>
974974 <member kind="variable">
975975 <type>unsigned char</type>
976976 <name>set_proc_cpubind</name>
977 <anchorfile>a00300.html</anchorfile>
977 <anchorfile>a00306.html</anchorfile>
978978 <anchor>aa166223d1c2a6de7256ab2d8b675a87e</anchor>
979979 <arglist></arglist>
980980 </member>
981981 <member kind="variable">
982982 <type>unsigned char</type>
983983 <name>get_proc_cpubind</name>
984 <anchorfile>a00300.html</anchorfile>
984 <anchorfile>a00306.html</anchorfile>
985985 <anchor>aae705bc447adc163ead377362c4dfe9f</anchor>
986986 <arglist></arglist>
987987 </member>
988988 <member kind="variable">
989989 <type>unsigned char</type>
990990 <name>set_thisthread_cpubind</name>
991 <anchorfile>a00300.html</anchorfile>
991 <anchorfile>a00306.html</anchorfile>
992992 <anchor>a57a89a4b5f1f74fa6cfe176f1e8b0798</anchor>
993993 <arglist></arglist>
994994 </member>
995995 <member kind="variable">
996996 <type>unsigned char</type>
997997 <name>get_thisthread_cpubind</name>
998 <anchorfile>a00300.html</anchorfile>
998 <anchorfile>a00306.html</anchorfile>
999999 <anchor>a80d762e532d677dff262d83cc7bb1c60</anchor>
10001000 <arglist></arglist>
10011001 </member>
10021002 <member kind="variable">
10031003 <type>unsigned char</type>
10041004 <name>set_thread_cpubind</name>
1005 <anchorfile>a00300.html</anchorfile>
1005 <anchorfile>a00306.html</anchorfile>
10061006 <anchor>a46fba33e307909ce256624687799dd6d</anchor>
10071007 <arglist></arglist>
10081008 </member>
10091009 <member kind="variable">
10101010 <type>unsigned char</type>
10111011 <name>get_thread_cpubind</name>
1012 <anchorfile>a00300.html</anchorfile>
1012 <anchorfile>a00306.html</anchorfile>
10131013 <anchor>a8dd4d8531ed2eebdce1507e7d104154e</anchor>
10141014 <arglist></arglist>
10151015 </member>
10161016 <member kind="variable">
10171017 <type>unsigned char</type>
10181018 <name>get_thisproc_last_cpu_location</name>
1019 <anchorfile>a00300.html</anchorfile>
1019 <anchorfile>a00306.html</anchorfile>
10201020 <anchor>ad2d5c94b738d92b7d2ede87e4e96321d</anchor>
10211021 <arglist></arglist>
10221022 </member>
10231023 <member kind="variable">
10241024 <type>unsigned char</type>
10251025 <name>get_proc_last_cpu_location</name>
1026 <anchorfile>a00300.html</anchorfile>
1026 <anchorfile>a00306.html</anchorfile>
10271027 <anchor>a2554620148b7992a5093f338f5ae254f</anchor>
10281028 <arglist></arglist>
10291029 </member>
10301030 <member kind="variable">
10311031 <type>unsigned char</type>
10321032 <name>get_thisthread_last_cpu_location</name>
1033 <anchorfile>a00300.html</anchorfile>
1033 <anchorfile>a00306.html</anchorfile>
10341034 <anchor>a6be1f042fdce6bf41b4ea39f6f193808</anchor>
10351035 <arglist></arglist>
10361036 </member>
10371037 </compound>
10381038 <compound kind="struct">
10391039 <name>hwloc_topology_diff_u::hwloc_topology_diff_generic_s</name>
1040 <filename>a00360.html</filename>
1040 <filename>a00366.html</filename>
10411041 <member kind="variable">
10421042 <type>hwloc_topology_diff_type_t</type>
10431043 <name>type</name>
1044 <anchorfile>a00360.html</anchorfile>
1044 <anchorfile>a00366.html</anchorfile>
10451045 <anchor>a373005489fcddeba6319163e60263ae8</anchor>
10461046 <arglist></arglist>
10471047 </member>
10481048 <member kind="variable">
10491049 <type>union hwloc_topology_diff_u *</type>
10501050 <name>next</name>
1051 <anchorfile>a00360.html</anchorfile>
1051 <anchorfile>a00366.html</anchorfile>
10521052 <anchor>a720aa94eb73cddfd8d6bf9fcbbfc035e</anchor>
10531053 <arglist></arglist>
10541054 </member>
10551055 </compound>
10561056 <compound kind="struct">
10571057 <name>hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s</name>
1058 <filename>a00344.html</filename>
1058 <filename>a00350.html</filename>
10591059 <member kind="variable">
10601060 <type>hwloc_topology_diff_obj_attr_type_t</type>
10611061 <name>type</name>
1062 <anchorfile>a00344.html</anchorfile>
1062 <anchorfile>a00350.html</anchorfile>
10631063 <anchor>a43f8133b7c30129b002c2d295e6580fc</anchor>
10641064 <arglist></arglist>
10651065 </member>
10661066 </compound>
10671067 <compound kind="struct">
10681068 <name>hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</name>
1069 <filename>a00364.html</filename>
1069 <filename>a00370.html</filename>
10701070 <member kind="variable">
10711071 <type>hwloc_topology_diff_type_t</type>
10721072 <name>type</name>
1073 <anchorfile>a00364.html</anchorfile>
1073 <anchorfile>a00370.html</anchorfile>
10741074 <anchor>a70a118ad288bd98f18c8ce6dc52e2d10</anchor>
10751075 <arglist></arglist>
10761076 </member>
10771077 <member kind="variable">
10781078 <type>union hwloc_topology_diff_u *</type>
10791079 <name>next</name>
1080 <anchorfile>a00364.html</anchorfile>
1080 <anchorfile>a00370.html</anchorfile>
10811081 <anchor>acb9170a8eb3392656d70f7f3ef3e3eed</anchor>
10821082 <arglist></arglist>
10831083 </member>
10841084 <member kind="variable">
10851085 <type>int</type>
10861086 <name>obj_depth</name>
1087 <anchorfile>a00364.html</anchorfile>
1087 <anchorfile>a00370.html</anchorfile>
10881088 <anchor>a82c1d4bab80b9e0bf301a9d8291893e0</anchor>
10891089 <arglist></arglist>
10901090 </member>
10911091 <member kind="variable">
10921092 <type>unsigned</type>
10931093 <name>obj_index</name>
1094 <anchorfile>a00364.html</anchorfile>
1094 <anchorfile>a00370.html</anchorfile>
10951095 <anchor>adb9f4d414470b6670cde8d90759a6c1c</anchor>
10961096 <arglist></arglist>
10971097 </member>
10981098 <member kind="variable">
10991099 <type>union hwloc_topology_diff_obj_attr_u</type>
11001100 <name>diff</name>
1101 <anchorfile>a00364.html</anchorfile>
1101 <anchorfile>a00370.html</anchorfile>
11021102 <anchor>a91f0645f9062e892652357cd141c8ebb</anchor>
11031103 <arglist></arglist>
11041104 </member>
11051105 </compound>
11061106 <compound kind="struct">
11071107 <name>hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</name>
1108 <filename>a00352.html</filename>
1108 <filename>a00358.html</filename>
11091109 <member kind="variable">
11101110 <type>hwloc_topology_diff_obj_attr_type_t</type>
11111111 <name>type</name>
1112 <anchorfile>a00352.html</anchorfile>
1112 <anchorfile>a00358.html</anchorfile>
11131113 <anchor>a784ab5827c1bf531b86d1f02f199d04d</anchor>
11141114 <arglist></arglist>
11151115 </member>
11161116 <member kind="variable">
11171117 <type>char *</type>
11181118 <name>name</name>
1119 <anchorfile>a00352.html</anchorfile>
1119 <anchorfile>a00358.html</anchorfile>
11201120 <anchor>a7ef48c66ccddf34d90edb4e4314b41c6</anchor>
11211121 <arglist></arglist>
11221122 </member>
11231123 <member kind="variable">
11241124 <type>char *</type>
11251125 <name>oldvalue</name>
1126 <anchorfile>a00352.html</anchorfile>
1126 <anchorfile>a00358.html</anchorfile>
11271127 <anchor>a33cc281d4417129064295a6ae7b79818</anchor>
11281128 <arglist></arglist>
11291129 </member>
11301130 <member kind="variable">
11311131 <type>char *</type>
11321132 <name>newvalue</name>
1133 <anchorfile>a00352.html</anchorfile>
1133 <anchorfile>a00358.html</anchorfile>
11341134 <anchor>a75f37f4add21cece50fee2701c3b77db</anchor>
11351135 <arglist></arglist>
11361136 </member>
11371137 </compound>
11381138 <compound kind="union">
11391139 <name>hwloc_topology_diff_obj_attr_u</name>
1140 <filename>a00340.html</filename>
1140 <filename>a00346.html</filename>
11411141 <class kind="struct">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s</class>
11421142 <class kind="struct">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</class>
11431143 <class kind="struct">hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</class>
11441144 <member kind="variable">
11451145 <type>struct hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s</type>
11461146 <name>generic</name>
1147 <anchorfile>a00340.html</anchorfile>
1147 <anchorfile>a00346.html</anchorfile>
11481148 <anchor>aeb449c0e04b14ebf8c3126756b6364f9</anchor>
11491149 <arglist></arglist>
11501150 </member>
11511151 <member kind="variable">
11521152 <type>struct hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</type>
11531153 <name>uint64</name>
1154 <anchorfile>a00340.html</anchorfile>
1154 <anchorfile>a00346.html</anchorfile>
11551155 <anchor>a4608ade88460f5f208887775e5a69a0a</anchor>
11561156 <arglist></arglist>
11571157 </member>
11581158 <member kind="variable">
11591159 <type>struct hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s</type>
11601160 <name>string</name>
1161 <anchorfile>a00340.html</anchorfile>
1161 <anchorfile>a00346.html</anchorfile>
11621162 <anchor>a42fa15c37f1f59ef638066c4c62c3154</anchor>
11631163 <arglist></arglist>
11641164 </member>
11651165 </compound>
11661166 <compound kind="struct">
11671167 <name>hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s</name>
1168 <filename>a00348.html</filename>
1168 <filename>a00354.html</filename>
11691169 <member kind="variable">
11701170 <type>hwloc_topology_diff_obj_attr_type_t</type>
11711171 <name>type</name>
1172 <anchorfile>a00348.html</anchorfile>
1172 <anchorfile>a00354.html</anchorfile>
11731173 <anchor>afe262b9aa558fe7bfecbd37a7a129197</anchor>
11741174 <arglist></arglist>
11751175 </member>
11761176 <member kind="variable">
11771177 <type>hwloc_uint64_t</type>
11781178 <name>index</name>
1179 <anchorfile>a00348.html</anchorfile>
1179 <anchorfile>a00354.html</anchorfile>
11801180 <anchor>adb772c3f1761ecadf496c80ae14afce3</anchor>
11811181 <arglist></arglist>
11821182 </member>
11831183 <member kind="variable">
11841184 <type>hwloc_uint64_t</type>
11851185 <name>oldvalue</name>
1186 <anchorfile>a00348.html</anchorfile>
1186 <anchorfile>a00354.html</anchorfile>
11871187 <anchor>a44c0894dce563335d347fde6595c49c9</anchor>
11881188 <arglist></arglist>
11891189 </member>
11901190 <member kind="variable">
11911191 <type>hwloc_uint64_t</type>
11921192 <name>newvalue</name>
1193 <anchorfile>a00348.html</anchorfile>
1193 <anchorfile>a00354.html</anchorfile>
11941194 <anchor>ae63aa59ad65aa783b730a4f213304eb4</anchor>
11951195 <arglist></arglist>
11961196 </member>
11971197 </compound>
11981198 <compound kind="struct">
11991199 <name>hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</name>
1200 <filename>a00368.html</filename>
1200 <filename>a00374.html</filename>
12011201 <member kind="variable">
12021202 <type>hwloc_topology_diff_type_t</type>
12031203 <name>type</name>
1204 <anchorfile>a00368.html</anchorfile>
1204 <anchorfile>a00374.html</anchorfile>
12051205 <anchor>a92084295a4d6faf17a95a7eea526ddbd</anchor>
12061206 <arglist></arglist>
12071207 </member>
12081208 <member kind="variable">
12091209 <type>union hwloc_topology_diff_u *</type>
12101210 <name>next</name>
1211 <anchorfile>a00368.html</anchorfile>
1211 <anchorfile>a00374.html</anchorfile>
12121212 <anchor>a375afbaa043b109be689a7d9a3c7d153</anchor>
12131213 <arglist></arglist>
12141214 </member>
12151215 <member kind="variable">
12161216 <type>int</type>
12171217 <name>obj_depth</name>
1218 <anchorfile>a00368.html</anchorfile>
1218 <anchorfile>a00374.html</anchorfile>
12191219 <anchor>a94c6498caeaafbb79927395d918d6cb3</anchor>
12201220 <arglist></arglist>
12211221 </member>
12221222 <member kind="variable">
12231223 <type>unsigned</type>
12241224 <name>obj_index</name>
1225 <anchorfile>a00368.html</anchorfile>
1225 <anchorfile>a00374.html</anchorfile>
12261226 <anchor>a6dc6b3c4adb10db74d993e37afaa0580</anchor>
12271227 <arglist></arglist>
12281228 </member>
12291229 </compound>
12301230 <compound kind="union">
12311231 <name>hwloc_topology_diff_u</name>
1232 <filename>a00356.html</filename>
1232 <filename>a00362.html</filename>
12331233 <class kind="struct">hwloc_topology_diff_u::hwloc_topology_diff_generic_s</class>
12341234 <class kind="struct">hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</class>
12351235 <class kind="struct">hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</class>
12361236 <member kind="variable">
12371237 <type>struct hwloc_topology_diff_u::hwloc_topology_diff_generic_s</type>
12381238 <name>generic</name>
1239 <anchorfile>a00356.html</anchorfile>
1239 <anchorfile>a00362.html</anchorfile>
12401240 <anchor>a0dd2cbfba0eca2fc7a2645668bcae0f8</anchor>
12411241 <arglist></arglist>
12421242 </member>
12431243 <member kind="variable">
12441244 <type>struct hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s</type>
12451245 <name>obj_attr</name>
1246 <anchorfile>a00356.html</anchorfile>
1246 <anchorfile>a00362.html</anchorfile>
12471247 <anchor>a01dca644feea48448b36baa60cf4c07f</anchor>
12481248 <arglist></arglist>
12491249 </member>
12501250 <member kind="variable">
12511251 <type>struct hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s</type>
12521252 <name>too_complex</name>
1253 <anchorfile>a00356.html</anchorfile>
1253 <anchorfile>a00362.html</anchorfile>
12541254 <anchor>af7dc1148eb656c56e9678218cafd027b</anchor>
12551255 <arglist></arglist>
12561256 </member>
12571257 </compound>
12581258 <compound kind="struct">
12591259 <name>hwloc_topology_discovery_support</name>
1260 <filename>a00296.html</filename>
1260 <filename>a00302.html</filename>
12611261 <member kind="variable">
12621262 <type>unsigned char</type>
12631263 <name>pu</name>
1264 <anchorfile>a00296.html</anchorfile>
1264 <anchorfile>a00302.html</anchorfile>
12651265 <anchor>ad7bb4ecf7a82f5a04fc632e9592ad3ab</anchor>
12661266 <arglist></arglist>
12671267 </member>
12681268 <member kind="variable">
12691269 <type>unsigned char</type>
12701270 <name>numa</name>
1271 <anchorfile>a00296.html</anchorfile>
1271 <anchorfile>a00302.html</anchorfile>
12721272 <anchor>a955f96066cb9e4cd34e2a3710ad43e80</anchor>
12731273 <arglist></arglist>
12741274 </member>
12751275 <member kind="variable">
12761276 <type>unsigned char</type>
12771277 <name>numa_memory</name>
1278 <anchorfile>a00296.html</anchorfile>
1278 <anchorfile>a00302.html</anchorfile>
12791279 <anchor>af193eb858e40e12ef4923f5ed0e1f11a</anchor>
12801280 <arglist></arglist>
12811281 </member>
12821282 <member kind="variable">
12831283 <type>unsigned char</type>
12841284 <name>disallowed_pu</name>
1285 <anchorfile>a00296.html</anchorfile>
1285 <anchorfile>a00302.html</anchorfile>
12861286 <anchor>af3c97b28781a2972cf8eaaf94a6617da</anchor>
12871287 <arglist></arglist>
12881288 </member>
12891289 <member kind="variable">
12901290 <type>unsigned char</type>
12911291 <name>disallowed_numa</name>
1292 <anchorfile>a00296.html</anchorfile>
1292 <anchorfile>a00302.html</anchorfile>
12931293 <anchor>a970e65235873bcdb9669a9805161ce03</anchor>
12941294 <arglist></arglist>
12951295 </member>
12961296 <member kind="variable">
12971297 <type>unsigned char</type>
12981298 <name>cpukind_efficiency</name>
1299 <anchorfile>a00296.html</anchorfile>
1299 <anchorfile>a00302.html</anchorfile>
13001300 <anchor>aba80d6f9c15e2395f9ed61db9ff3b75d</anchor>
13011301 <arglist></arglist>
13021302 </member>
13031303 </compound>
13041304 <compound kind="struct">
13051305 <name>hwloc_topology_membind_support</name>
1306 <filename>a00304.html</filename>
1306 <filename>a00310.html</filename>
13071307 <member kind="variable">
13081308 <type>unsigned char</type>
13091309 <name>set_thisproc_membind</name>
1310 <anchorfile>a00304.html</anchorfile>
1310 <anchorfile>a00310.html</anchorfile>
13111311 <anchor>a36b3e388df9c6a249427cab7e3724749</anchor>
13121312 <arglist></arglist>
13131313 </member>
13141314 <member kind="variable">
13151315 <type>unsigned char</type>
13161316 <name>get_thisproc_membind</name>
1317 <anchorfile>a00304.html</anchorfile>
1317 <anchorfile>a00310.html</anchorfile>
13181318 <anchor>a3fd51e6fa5f0dd800322301b46b08559</anchor>
13191319 <arglist></arglist>
13201320 </member>
13211321 <member kind="variable">
13221322 <type>unsigned char</type>
13231323 <name>set_proc_membind</name>
1324 <anchorfile>a00304.html</anchorfile>
1324 <anchorfile>a00310.html</anchorfile>
13251325 <anchor>a756f44912894b176bf979a1b65f12aac</anchor>
13261326 <arglist></arglist>
13271327 </member>
13281328 <member kind="variable">
13291329 <type>unsigned char</type>
13301330 <name>get_proc_membind</name>
1331 <anchorfile>a00304.html</anchorfile>
1331 <anchorfile>a00310.html</anchorfile>
13321332 <anchor>a9880cd2d605e316fc020167c49ca69ad</anchor>
13331333 <arglist></arglist>
13341334 </member>
13351335 <member kind="variable">
13361336 <type>unsigned char</type>
13371337 <name>set_thisthread_membind</name>
1338 <anchorfile>a00304.html</anchorfile>
1338 <anchorfile>a00310.html</anchorfile>
13391339 <anchor>a0697af2e41f2e82b8ce71e3cc13f7eac</anchor>
13401340 <arglist></arglist>
13411341 </member>
13421342 <member kind="variable">
13431343 <type>unsigned char</type>
13441344 <name>get_thisthread_membind</name>
1345 <anchorfile>a00304.html</anchorfile>
1345 <anchorfile>a00310.html</anchorfile>
13461346 <anchor>a63b0b2e26157b472f5717ee93cc7c535</anchor>
13471347 <arglist></arglist>
13481348 </member>
13491349 <member kind="variable">
13501350 <type>unsigned char</type>
13511351 <name>set_area_membind</name>
1352 <anchorfile>a00304.html</anchorfile>
1352 <anchorfile>a00310.html</anchorfile>
13531353 <anchor>a476c06f96b65c08b287cf2369966123b</anchor>
13541354 <arglist></arglist>
13551355 </member>
13561356 <member kind="variable">
13571357 <type>unsigned char</type>
13581358 <name>get_area_membind</name>
1359 <anchorfile>a00304.html</anchorfile>
1359 <anchorfile>a00310.html</anchorfile>
13601360 <anchor>a0a84e24a06f2fa487fe8c9605c6f68b3</anchor>
13611361 <arglist></arglist>
13621362 </member>
13631363 <member kind="variable">
13641364 <type>unsigned char</type>
13651365 <name>alloc_membind</name>
1366 <anchorfile>a00304.html</anchorfile>
1366 <anchorfile>a00310.html</anchorfile>
13671367 <anchor>ae551abb27d2aa9ce008583488b845b98</anchor>
13681368 <arglist></arglist>
13691369 </member>
13701370 <member kind="variable">
13711371 <type>unsigned char</type>
13721372 <name>firsttouch_membind</name>
1373 <anchorfile>a00304.html</anchorfile>
1373 <anchorfile>a00310.html</anchorfile>
13741374 <anchor>a221098c339dbfab27bd2c9f5d32f123b</anchor>
13751375 <arglist></arglist>
13761376 </member>
13771377 <member kind="variable">
13781378 <type>unsigned char</type>
13791379 <name>bind_membind</name>
1380 <anchorfile>a00304.html</anchorfile>
1380 <anchorfile>a00310.html</anchorfile>
13811381 <anchor>ae7cdb1f1b5f0242a69f85b5a5538c764</anchor>
13821382 <arglist></arglist>
13831383 </member>
13841384 <member kind="variable">
13851385 <type>unsigned char</type>
13861386 <name>interleave_membind</name>
1387 <anchorfile>a00304.html</anchorfile>
1387 <anchorfile>a00310.html</anchorfile>
13881388 <anchor>a3c44c6012860bbeba8a0f4c19710858d</anchor>
13891389 <arglist></arglist>
13901390 </member>
13911391 <member kind="variable">
13921392 <type>unsigned char</type>
13931393 <name>nexttouch_membind</name>
1394 <anchorfile>a00304.html</anchorfile>
1394 <anchorfile>a00310.html</anchorfile>
13951395 <anchor>ab0921af6e0cd6975812a80b8e5c7435c</anchor>
13961396 <arglist></arglist>
13971397 </member>
13981398 <member kind="variable">
13991399 <type>unsigned char</type>
14001400 <name>migrate_membind</name>
1401 <anchorfile>a00304.html</anchorfile>
1401 <anchorfile>a00310.html</anchorfile>
14021402 <anchor>aafa7683871a6a760246f9b35209caec5</anchor>
14031403 <arglist></arglist>
14041404 </member>
14051405 <member kind="variable">
14061406 <type>unsigned char</type>
14071407 <name>get_area_memlocation</name>
1408 <anchorfile>a00304.html</anchorfile>
1408 <anchorfile>a00310.html</anchorfile>
14091409 <anchor>a30173553a68e0a4dd1672d26f8e892b1</anchor>
14101410 <arglist></arglist>
14111411 </member>
14121412 </compound>
14131413 <compound kind="struct">
14141414 <name>hwloc_topology_misc_support</name>
1415 <filename>a00308.html</filename>
1415 <filename>a00314.html</filename>
14161416 <member kind="variable">
14171417 <type>unsigned char</type>
14181418 <name>imported_support</name>
1419 <anchorfile>a00308.html</anchorfile>
1419 <anchorfile>a00314.html</anchorfile>
14201420 <anchor>adf54a6dbe8e9dd5033dfe9c93df726c4</anchor>
14211421 <arglist></arglist>
14221422 </member>
14231423 </compound>
14241424 <compound kind="struct">
14251425 <name>hwloc_topology_support</name>
1426 <filename>a00312.html</filename>
1426 <filename>a00318.html</filename>
14271427 <member kind="variable">
14281428 <type>struct hwloc_topology_discovery_support *</type>
14291429 <name>discovery</name>
1430 <anchorfile>a00312.html</anchorfile>
1430 <anchorfile>a00318.html</anchorfile>
14311431 <anchor>aea3fbd7653d987d81f848636c420504d</anchor>
14321432 <arglist></arglist>
14331433 </member>
14341434 <member kind="variable">
14351435 <type>struct hwloc_topology_cpubind_support *</type>
14361436 <name>cpubind</name>
1437 <anchorfile>a00312.html</anchorfile>
1437 <anchorfile>a00318.html</anchorfile>
14381438 <anchor>adef2bb91f74c3e70a2a071393caf5f56</anchor>
14391439 <arglist></arglist>
14401440 </member>
14411441 <member kind="variable">
14421442 <type>struct hwloc_topology_membind_support *</type>
14431443 <name>membind</name>
1444 <anchorfile>a00312.html</anchorfile>
1444 <anchorfile>a00318.html</anchorfile>
14451445 <anchor>ac6eb62ae8bc0a68dce679a7107a36194</anchor>
14461446 <arglist></arglist>
14471447 </member>
14481448 <member kind="variable">
14491449 <type>struct hwloc_topology_misc_support *</type>
14501450 <name>misc</name>
1451 <anchorfile>a00312.html</anchorfile>
1451 <anchorfile>a00318.html</anchorfile>
14521452 <anchor>ab9d08df4b0b03994f21b893ece826e78</anchor>
14531453 <arglist></arglist>
14541454 </member>
14561456 <compound kind="group">
14571457 <name>hwlocality_api_version</name>
14581458 <title>API version</title>
1459 <filename>a00188.html</filename>
1459 <filename>a00191.html</filename>
14601460 <member kind="define">
14611461 <type>#define</type>
14621462 <name>HWLOC_API_VERSION</name>
1463 <anchorfile>a00188.html</anchorfile>
1463 <anchorfile>a00191.html</anchorfile>
14641464 <anchor>ga8f4dfb8eef138af55dd1a0fa802e5476</anchor>
14651465 <arglist></arglist>
14661466 </member>
14671467 <member kind="define">
14681468 <type>#define</type>
14691469 <name>HWLOC_COMPONENT_ABI</name>
1470 <anchorfile>a00188.html</anchorfile>
1470 <anchorfile>a00191.html</anchorfile>
14711471 <anchor>gaac5bc1f46f55e10ef0141a68ce70e21f</anchor>
14721472 <arglist></arglist>
14731473 </member>
14741474 <member kind="function">
14751475 <type>unsigned</type>
14761476 <name>hwloc_get_api_version</name>
1477 <anchorfile>a00188.html</anchorfile>
1477 <anchorfile>a00191.html</anchorfile>
14781478 <anchor>ga9c0b50c98add1adf57ed1ce85bb5190d</anchor>
14791479 <arglist>(void)</arglist>
14801480 </member>
14821482 <compound kind="group">
14831483 <name>hwlocality_object_sets</name>
14841484 <title>Object Sets (hwloc_cpuset_t and hwloc_nodeset_t)</title>
1485 <filename>a00189.html</filename>
1485 <filename>a00192.html</filename>
14861486 <member kind="typedef">
14871487 <type>hwloc_bitmap_t</type>
14881488 <name>hwloc_cpuset_t</name>
1489 <anchorfile>a00189.html</anchorfile>
1489 <anchorfile>a00192.html</anchorfile>
14901490 <anchor>ga4bbf39b68b6f568fb92739e7c0ea7801</anchor>
14911491 <arglist></arglist>
14921492 </member>
14931493 <member kind="typedef">
14941494 <type>hwloc_const_bitmap_t</type>
14951495 <name>hwloc_const_cpuset_t</name>
1496 <anchorfile>a00189.html</anchorfile>
1496 <anchorfile>a00192.html</anchorfile>
14971497 <anchor>ga1f784433e9b606261f62d1134f6a3b25</anchor>
14981498 <arglist></arglist>
14991499 </member>
15001500 <member kind="typedef">
15011501 <type>hwloc_bitmap_t</type>
15021502 <name>hwloc_nodeset_t</name>
1503 <anchorfile>a00189.html</anchorfile>
1503 <anchorfile>a00192.html</anchorfile>
15041504 <anchor>ga37e35730fa7e775b5bb0afe893d6d508</anchor>
15051505 <arglist></arglist>
15061506 </member>
15071507 <member kind="typedef">
15081508 <type>hwloc_const_bitmap_t</type>
15091509 <name>hwloc_const_nodeset_t</name>
1510 <anchorfile>a00189.html</anchorfile>
1510 <anchorfile>a00192.html</anchorfile>
15111511 <anchor>ga2f5276235841ad66a79bedad16a5a10c</anchor>
15121512 <arglist></arglist>
15131513 </member>
15151515 <compound kind="group">
15161516 <name>hwlocality_object_types</name>
15171517 <title>Object Types</title>
1518 <filename>a00190.html</filename>
1518 <filename>a00193.html</filename>
15191519 <member kind="define">
15201520 <type>#define</type>
15211521 <name>HWLOC_TYPE_UNORDERED</name>
1522 <anchorfile>a00190.html</anchorfile>
1522 <anchorfile>a00193.html</anchorfile>
15231523 <anchor>ga3b6e4128e9fe773863b123fa6e4a080b</anchor>
15241524 <arglist></arglist>
15251525 </member>
15261526 <member kind="typedef">
15271527 <type>enum hwloc_obj_cache_type_e</type>
15281528 <name>hwloc_obj_cache_type_t</name>
1529 <anchorfile>a00190.html</anchorfile>
1529 <anchorfile>a00193.html</anchorfile>
15301530 <anchor>ga552ec74296a024237f474acec98694c0</anchor>
15311531 <arglist></arglist>
15321532 </member>
15331533 <member kind="typedef">
15341534 <type>enum hwloc_obj_bridge_type_e</type>
15351535 <name>hwloc_obj_bridge_type_t</name>
1536 <anchorfile>a00190.html</anchorfile>
1536 <anchorfile>a00193.html</anchorfile>
15371537 <anchor>gab34362c7a23296c3f12c5756747abda3</anchor>
15381538 <arglist></arglist>
15391539 </member>
15401540 <member kind="typedef">
15411541 <type>enum hwloc_obj_osdev_type_e</type>
15421542 <name>hwloc_obj_osdev_type_t</name>
1543 <anchorfile>a00190.html</anchorfile>
1543 <anchorfile>a00193.html</anchorfile>
15441544 <anchor>gaa9a6941ef7b1c169412518d7ef71b3d2</anchor>
15451545 <arglist></arglist>
15461546 </member>
15471547 <member kind="enumeration">
15481548 <type></type>
15491549 <name>hwloc_obj_type_t</name>
1550 <anchorfile>a00190.html</anchorfile>
1550 <anchorfile>a00193.html</anchorfile>
15511551 <anchor>gacd37bb612667dc437d66bfb175a8dc55</anchor>
15521552 <arglist></arglist>
15531553 </member>
15541554 <member kind="enumvalue">
15551555 <name>HWLOC_OBJ_MACHINE</name>
1556 <anchorfile>a00190.html</anchorfile>
1556 <anchorfile>a00193.html</anchorfile>
15571557 <anchor>ggacd37bb612667dc437d66bfb175a8dc55a3f4e83ffc4a259354959ae8a9eaa2a80</anchor>
15581558 <arglist></arglist>
15591559 </member>
15601560 <member kind="enumvalue">
15611561 <name>HWLOC_OBJ_PACKAGE</name>
1562 <anchorfile>a00190.html</anchorfile>
1562 <anchorfile>a00193.html</anchorfile>
15631563 <anchor>ggacd37bb612667dc437d66bfb175a8dc55ab16ab8c0dbffc234921d86f3dfb63129</anchor>
15641564 <arglist></arglist>
15651565 </member>
15661566 <member kind="enumvalue">
15671567 <name>HWLOC_OBJ_CORE</name>
1568 <anchorfile>a00190.html</anchorfile>
1568 <anchorfile>a00193.html</anchorfile>
15691569 <anchor>ggacd37bb612667dc437d66bfb175a8dc55ac793958f330bca371aa1535de8aff45f</anchor>
15701570 <arglist></arglist>
15711571 </member>
15721572 <member kind="enumvalue">
15731573 <name>HWLOC_OBJ_PU</name>
1574 <anchorfile>a00190.html</anchorfile>
1574 <anchorfile>a00193.html</anchorfile>
15751575 <anchor>ggacd37bb612667dc437d66bfb175a8dc55abca6887e80cb291353b0a0c1da83f661</anchor>
15761576 <arglist></arglist>
15771577 </member>
15781578 <member kind="enumvalue">
15791579 <name>HWLOC_OBJ_L1CACHE</name>
1580 <anchorfile>a00190.html</anchorfile>
1580 <anchorfile>a00193.html</anchorfile>
15811581 <anchor>ggacd37bb612667dc437d66bfb175a8dc55a56389b8eb2e2f74f288bb657c4e72140</anchor>
15821582 <arglist></arglist>
15831583 </member>
15841584 <member kind="enumvalue">
15851585 <name>HWLOC_OBJ_L2CACHE</name>
1586 <anchorfile>a00190.html</anchorfile>
1586 <anchorfile>a00193.html</anchorfile>
15871587 <anchor>ggacd37bb612667dc437d66bfb175a8dc55a18f61d19fe9f4bcea978fcc68bc078fb</anchor>
15881588 <arglist></arglist>
15891589 </member>
15901590 <member kind="enumvalue">
15911591 <name>HWLOC_OBJ_L3CACHE</name>
1592 <anchorfile>a00190.html</anchorfile>
1592 <anchorfile>a00193.html</anchorfile>
15931593 <anchor>ggacd37bb612667dc437d66bfb175a8dc55a25fae0e0514c90e3973a29866a5a837d</anchor>
15941594 <arglist></arglist>
15951595 </member>
15961596 <member kind="enumvalue">
15971597 <name>HWLOC_OBJ_L4CACHE</name>
1598 <anchorfile>a00190.html</anchorfile>
1598 <anchorfile>a00193.html</anchorfile>
15991599 <anchor>ggacd37bb612667dc437d66bfb175a8dc55a54923bfa13df9d7e6d6dd0d5baff5f72</anchor>
16001600 <arglist></arglist>
16011601 </member>
16021602 <member kind="enumvalue">
16031603 <name>HWLOC_OBJ_L5CACHE</name>
1604 <anchorfile>a00190.html</anchorfile>
1604 <anchorfile>a00193.html</anchorfile>
16051605 <anchor>ggacd37bb612667dc437d66bfb175a8dc55a67194c9de5e3e581c64c11d2eb1c109d</anchor>
16061606 <arglist></arglist>
16071607 </member>
16081608 <member kind="enumvalue">
16091609 <name>HWLOC_OBJ_L1ICACHE</name>
1610 <anchorfile>a00190.html</anchorfile>
1610 <anchorfile>a00193.html</anchorfile>
16111611 <anchor>ggacd37bb612667dc437d66bfb175a8dc55afa834a85d9e53836cf0db6d0bd8329b4</anchor>
16121612 <arglist></arglist>
16131613 </member>
16141614 <member kind="enumvalue">
16151615 <name>HWLOC_OBJ_L2ICACHE</name>
1616 <anchorfile>a00190.html</anchorfile>
1616 <anchorfile>a00193.html</anchorfile>
16171617 <anchor>ggacd37bb612667dc437d66bfb175a8dc55a10713b7e561b8cc32544cd31b1c17f8d</anchor>
16181618 <arglist></arglist>
16191619 </member>
16201620 <member kind="enumvalue">
16211621 <name>HWLOC_OBJ_L3ICACHE</name>
1622 <anchorfile>a00190.html</anchorfile>
1622 <anchorfile>a00193.html</anchorfile>
16231623 <anchor>ggacd37bb612667dc437d66bfb175a8dc55ac22850c717f07bf7ffb316fadd08d218</anchor>
16241624 <arglist></arglist>
16251625 </member>
16261626 <member kind="enumvalue">
16271627 <name>HWLOC_OBJ_GROUP</name>
1628 <anchorfile>a00190.html</anchorfile>
1628 <anchorfile>a00193.html</anchorfile>
16291629 <anchor>ggacd37bb612667dc437d66bfb175a8dc55a5269ef95be72f88465559d35c9b7ad56</anchor>
16301630 <arglist></arglist>
16311631 </member>
16321632 <member kind="enumvalue">
16331633 <name>HWLOC_OBJ_NUMANODE</name>
1634 <anchorfile>a00190.html</anchorfile>
1634 <anchorfile>a00193.html</anchorfile>
16351635 <anchor>ggacd37bb612667dc437d66bfb175a8dc55a9d917a3e5497950c6d8948b8e183db5a</anchor>
16361636 <arglist></arglist>
16371637 </member>
16381638 <member kind="enumvalue">
16391639 <name>HWLOC_OBJ_BRIDGE</name>
1640 <anchorfile>a00190.html</anchorfile>
1640 <anchorfile>a00193.html</anchorfile>
16411641 <anchor>ggacd37bb612667dc437d66bfb175a8dc55a6825f10895fea60aca7a6ba9fe273db0</anchor>
16421642 <arglist></arglist>
16431643 </member>
16441644 <member kind="enumvalue">
16451645 <name>HWLOC_OBJ_PCI_DEVICE</name>
1646 <anchorfile>a00190.html</anchorfile>
1646 <anchorfile>a00193.html</anchorfile>
16471647 <anchor>ggacd37bb612667dc437d66bfb175a8dc55a5d8117a54df1fbd3606ab19e42cb0ea9</anchor>
16481648 <arglist></arglist>
16491649 </member>
16501650 <member kind="enumvalue">
16511651 <name>HWLOC_OBJ_OS_DEVICE</name>
1652 <anchorfile>a00190.html</anchorfile>
1652 <anchorfile>a00193.html</anchorfile>
16531653 <anchor>ggacd37bb612667dc437d66bfb175a8dc55a51e7280240fd9f25589cbbe538bdb075</anchor>
16541654 <arglist></arglist>
16551655 </member>
16561656 <member kind="enumvalue">
16571657 <name>HWLOC_OBJ_MISC</name>
1658 <anchorfile>a00190.html</anchorfile>
1658 <anchorfile>a00193.html</anchorfile>
16591659 <anchor>ggacd37bb612667dc437d66bfb175a8dc55a19f8a6953fa91efc76bcbcdf2d22de4d</anchor>
16601660 <arglist></arglist>
16611661 </member>
16621662 <member kind="enumvalue">
16631663 <name>HWLOC_OBJ_MEMCACHE</name>
1664 <anchorfile>a00190.html</anchorfile>
1664 <anchorfile>a00193.html</anchorfile>
16651665 <anchor>ggacd37bb612667dc437d66bfb175a8dc55a0ed5bd98974729a0c476c39e917dabd6</anchor>
16661666 <arglist></arglist>
16671667 </member>
16681668 <member kind="enumvalue">
16691669 <name>HWLOC_OBJ_DIE</name>
1670 <anchorfile>a00190.html</anchorfile>
1670 <anchorfile>a00193.html</anchorfile>
16711671 <anchor>ggacd37bb612667dc437d66bfb175a8dc55af78bb6cde53aaaaa162a7dc420c409da</anchor>
16721672 <arglist></arglist>
16731673 </member>
16741674 <member kind="enumeration">
16751675 <type></type>
16761676 <name>hwloc_obj_cache_type_e</name>
1677 <anchorfile>a00190.html</anchorfile>
1677 <anchorfile>a00193.html</anchorfile>
16781678 <anchor>ga791c9875c8fe20f3e1e5871e0657e59b</anchor>
16791679 <arglist></arglist>
16801680 </member>
16811681 <member kind="enumvalue">
16821682 <name>HWLOC_OBJ_CACHE_UNIFIED</name>
1683 <anchorfile>a00190.html</anchorfile>
1683 <anchorfile>a00193.html</anchorfile>
16841684 <anchor>gga791c9875c8fe20f3e1e5871e0657e59ba3900b3b2db54941aac249e5a638a2d7a</anchor>
16851685 <arglist></arglist>
16861686 </member>
16871687 <member kind="enumvalue">
16881688 <name>HWLOC_OBJ_CACHE_DATA</name>
1689 <anchorfile>a00190.html</anchorfile>
1689 <anchorfile>a00193.html</anchorfile>
16901690 <anchor>gga791c9875c8fe20f3e1e5871e0657e59bacac60ecad4206f85aeb79bef1604b488</anchor>
16911691 <arglist></arglist>
16921692 </member>
16931693 <member kind="enumvalue">
16941694 <name>HWLOC_OBJ_CACHE_INSTRUCTION</name>
1695 <anchorfile>a00190.html</anchorfile>
1695 <anchorfile>a00193.html</anchorfile>
16961696 <anchor>gga791c9875c8fe20f3e1e5871e0657e59ba6f98b0d422b38ba90c5f5c79a11b0658</anchor>
16971697 <arglist></arglist>
16981698 </member>
16991699 <member kind="enumeration">
17001700 <type></type>
17011701 <name>hwloc_obj_bridge_type_e</name>
1702 <anchorfile>a00190.html</anchorfile>
1702 <anchorfile>a00193.html</anchorfile>
17031703 <anchor>ga48a4803c72574191d7ead1c62aaf9860</anchor>
17041704 <arglist></arglist>
17051705 </member>
17061706 <member kind="enumvalue">
17071707 <name>HWLOC_OBJ_BRIDGE_HOST</name>
1708 <anchorfile>a00190.html</anchorfile>
1708 <anchorfile>a00193.html</anchorfile>
17091709 <anchor>gga48a4803c72574191d7ead1c62aaf9860a2c7660f3864ad2810c1e72aad285e574</anchor>
17101710 <arglist></arglist>
17111711 </member>
17121712 <member kind="enumvalue">
17131713 <name>HWLOC_OBJ_BRIDGE_PCI</name>
1714 <anchorfile>a00190.html</anchorfile>
1714 <anchorfile>a00193.html</anchorfile>
17151715 <anchor>gga48a4803c72574191d7ead1c62aaf9860a8f3b4cecf3dab6073d74696d10863c60</anchor>
17161716 <arglist></arglist>
17171717 </member>
17181718 <member kind="enumeration">
17191719 <type></type>
17201720 <name>hwloc_obj_osdev_type_e</name>
1721 <anchorfile>a00190.html</anchorfile>
1721 <anchorfile>a00193.html</anchorfile>
17221722 <anchor>ga64f5d539df299c97ae80ce53fc4b56c0</anchor>
17231723 <arglist></arglist>
17241724 </member>
17251725 <member kind="enumvalue">
17261726 <name>HWLOC_OBJ_OSDEV_BLOCK</name>
1727 <anchorfile>a00190.html</anchorfile>
1727 <anchorfile>a00193.html</anchorfile>
17281728 <anchor>gga64f5d539df299c97ae80ce53fc4b56c0a689b0488c3c0d08d116751c6b9cb8871</anchor>
17291729 <arglist></arglist>
17301730 </member>
17311731 <member kind="enumvalue">
17321732 <name>HWLOC_OBJ_OSDEV_GPU</name>
1733 <anchorfile>a00190.html</anchorfile>
1733 <anchorfile>a00193.html</anchorfile>
17341734 <anchor>gga64f5d539df299c97ae80ce53fc4b56c0aa3a09798ef2836abb236dc3a645ffc90</anchor>
17351735 <arglist></arglist>
17361736 </member>
17371737 <member kind="enumvalue">
17381738 <name>HWLOC_OBJ_OSDEV_NETWORK</name>
1739 <anchorfile>a00190.html</anchorfile>
1739 <anchorfile>a00193.html</anchorfile>
17401740 <anchor>gga64f5d539df299c97ae80ce53fc4b56c0ab715d81155f771573c8682dffc65021b</anchor>
17411741 <arglist></arglist>
17421742 </member>
17431743 <member kind="enumvalue">
17441744 <name>HWLOC_OBJ_OSDEV_OPENFABRICS</name>
1745 <anchorfile>a00190.html</anchorfile>
1745 <anchorfile>a00193.html</anchorfile>
17461746 <anchor>gga64f5d539df299c97ae80ce53fc4b56c0a52157d03694fdae82dddd57ca8c973b6</anchor>
17471747 <arglist></arglist>
17481748 </member>
17491749 <member kind="enumvalue">
17501750 <name>HWLOC_OBJ_OSDEV_DMA</name>
1751 <anchorfile>a00190.html</anchorfile>
1751 <anchorfile>a00193.html</anchorfile>
17521752 <anchor>gga64f5d539df299c97ae80ce53fc4b56c0a827ad1643360711a8b6c6af671366791</anchor>
17531753 <arglist></arglist>
17541754 </member>
17551755 <member kind="enumvalue">
17561756 <name>HWLOC_OBJ_OSDEV_COPROC</name>
1757 <anchorfile>a00190.html</anchorfile>
1757 <anchorfile>a00193.html</anchorfile>
17581758 <anchor>gga64f5d539df299c97ae80ce53fc4b56c0a46f8927e1c3e137eaa86cc8f6861fb83</anchor>
17591759 <arglist></arglist>
17601760 </member>
17611761 <member kind="function">
17621762 <type>int</type>
17631763 <name>hwloc_compare_types</name>
1764 <anchorfile>a00190.html</anchorfile>
1764 <anchorfile>a00193.html</anchorfile>
17651765 <anchor>ga1820ea0dfd8e9dca28f9ea7624df5ae2</anchor>
17661766 <arglist>(hwloc_obj_type_t type1, hwloc_obj_type_t type2)</arglist>
17671767 </member>
17691769 <compound kind="group">
17701770 <name>hwlocality_objects</name>
17711771 <title>Object Structure and Attributes</title>
1772 <filename>a00191.html</filename>
1772 <filename>a00194.html</filename>
17731773 <class kind="struct">hwloc_obj</class>
17741774 <class kind="union">hwloc_obj_attr_u</class>
17751775 <class kind="struct">hwloc_info_s</class>
17761776 <member kind="typedef">
17771777 <type>struct hwloc_obj *</type>
17781778 <name>hwloc_obj_t</name>
1779 <anchorfile>a00191.html</anchorfile>
1779 <anchorfile>a00194.html</anchorfile>
17801780 <anchor>ga79b8ab56877ef99ac59b833203391c7d</anchor>
17811781 <arglist></arglist>
17821782 </member>
17841784 <compound kind="group">
17851785 <name>hwlocality_creation</name>
17861786 <title>Topology Creation and Destruction</title>
1787 <filename>a00192.html</filename>
1787 <filename>a00195.html</filename>
17881788 <member kind="typedef">
17891789 <type>struct hwloc_topology *</type>
17901790 <name>hwloc_topology_t</name>
1791 <anchorfile>a00192.html</anchorfile>
1791 <anchorfile>a00195.html</anchorfile>
17921792 <anchor>ga9d1e76ee15a7dee158b786c30b6a6e38</anchor>
17931793 <arglist></arglist>
17941794 </member>
17951795 <member kind="function">
17961796 <type>int</type>
17971797 <name>hwloc_topology_init</name>
1798 <anchorfile>a00192.html</anchorfile>
1798 <anchorfile>a00195.html</anchorfile>
17991799 <anchor>ga03fd4a16d8b9ee1ffc32b25fd2f6bdfa</anchor>
18001800 <arglist>(hwloc_topology_t *topologyp)</arglist>
18011801 </member>
18021802 <member kind="function">
18031803 <type>int</type>
18041804 <name>hwloc_topology_load</name>
1805 <anchorfile>a00192.html</anchorfile>
1805 <anchorfile>a00195.html</anchorfile>
18061806 <anchor>gabdf58d87ad77f6615fccdfe0535ff826</anchor>
18071807 <arglist>(hwloc_topology_t topology)</arglist>
18081808 </member>
18091809 <member kind="function">
18101810 <type>void</type>
18111811 <name>hwloc_topology_destroy</name>
1812 <anchorfile>a00192.html</anchorfile>
1812 <anchorfile>a00195.html</anchorfile>
18131813 <anchor>ga9f34a640b6fd28d23699d4d084667b15</anchor>
18141814 <arglist>(hwloc_topology_t topology)</arglist>
18151815 </member>
18161816 <member kind="function">
18171817 <type>int</type>
18181818 <name>hwloc_topology_dup</name>
1819 <anchorfile>a00192.html</anchorfile>
1819 <anchorfile>a00195.html</anchorfile>
18201820 <anchor>ga62a161fc5e6f120344dc69a7bee4e587</anchor>
18211821 <arglist>(hwloc_topology_t *newtopology, hwloc_topology_t oldtopology)</arglist>
18221822 </member>
18231823 <member kind="function">
18241824 <type>int</type>
18251825 <name>hwloc_topology_abi_check</name>
1826 <anchorfile>a00192.html</anchorfile>
1826 <anchorfile>a00195.html</anchorfile>
18271827 <anchor>ga0647ae66458fe68172eb5a320042f870</anchor>
18281828 <arglist>(hwloc_topology_t topology)</arglist>
18291829 </member>
18301830 <member kind="function">
18311831 <type>void</type>
18321832 <name>hwloc_topology_check</name>
1833 <anchorfile>a00192.html</anchorfile>
1833 <anchorfile>a00195.html</anchorfile>
18341834 <anchor>gaf6746bc3a558ef1ac8348b4491d091b5</anchor>
18351835 <arglist>(hwloc_topology_t topology)</arglist>
18361836 </member>
18381838 <compound kind="group">
18391839 <name>hwlocality_levels</name>
18401840 <title>Object levels, depths and types</title>
1841 <filename>a00193.html</filename>
1841 <filename>a00196.html</filename>
18421842 <member kind="enumeration">
18431843 <type></type>
18441844 <name>hwloc_get_type_depth_e</name>
1845 <anchorfile>a00193.html</anchorfile>
1845 <anchorfile>a00196.html</anchorfile>
18461846 <anchor>gaf4e663cf42bbe20756b849c6293ef575</anchor>
18471847 <arglist></arglist>
18481848 </member>
18491849 <member kind="enumvalue">
18501850 <name>HWLOC_TYPE_DEPTH_UNKNOWN</name>
1851 <anchorfile>a00193.html</anchorfile>
1851 <anchorfile>a00196.html</anchorfile>
18521852 <anchor>ggaf4e663cf42bbe20756b849c6293ef575a0565ab92ab72cb0cec91e23003294aad</anchor>
18531853 <arglist></arglist>
18541854 </member>
18551855 <member kind="enumvalue">
18561856 <name>HWLOC_TYPE_DEPTH_MULTIPLE</name>
1857 <anchorfile>a00193.html</anchorfile>
1857 <anchorfile>a00196.html</anchorfile>
18581858 <anchor>ggaf4e663cf42bbe20756b849c6293ef575ae99465995cacde6c210d5fc2e409798c</anchor>
18591859 <arglist></arglist>
18601860 </member>
18611861 <member kind="enumvalue">
18621862 <name>HWLOC_TYPE_DEPTH_NUMANODE</name>
1863 <anchorfile>a00193.html</anchorfile>
1863 <anchorfile>a00196.html</anchorfile>
18641864 <anchor>ggaf4e663cf42bbe20756b849c6293ef575a245c34ec9884c2cf5de5049b2153ed9c</anchor>
18651865 <arglist></arglist>
18661866 </member>
18671867 <member kind="enumvalue">
18681868 <name>HWLOC_TYPE_DEPTH_BRIDGE</name>
1869 <anchorfile>a00193.html</anchorfile>
1869 <anchorfile>a00196.html</anchorfile>
18701870 <anchor>ggaf4e663cf42bbe20756b849c6293ef575af93b50182973e4a718d9d4db9e253a90</anchor>
18711871 <arglist></arglist>
18721872 </member>
18731873 <member kind="enumvalue">
18741874 <name>HWLOC_TYPE_DEPTH_PCI_DEVICE</name>
1875 <anchorfile>a00193.html</anchorfile>
1875 <anchorfile>a00196.html</anchorfile>
18761876 <anchor>ggaf4e663cf42bbe20756b849c6293ef575ad8b1516e699b57ce1c8d107fbd2f674c</anchor>
18771877 <arglist></arglist>
18781878 </member>
18791879 <member kind="enumvalue">
18801880 <name>HWLOC_TYPE_DEPTH_OS_DEVICE</name>
1881 <anchorfile>a00193.html</anchorfile>
1881 <anchorfile>a00196.html</anchorfile>
18821882 <anchor>ggaf4e663cf42bbe20756b849c6293ef575afe9a2131073eebbe129d4aa2928d3f46</anchor>
18831883 <arglist></arglist>
18841884 </member>
18851885 <member kind="enumvalue">
18861886 <name>HWLOC_TYPE_DEPTH_MISC</name>
1887 <anchorfile>a00193.html</anchorfile>
1887 <anchorfile>a00196.html</anchorfile>
18881888 <anchor>ggaf4e663cf42bbe20756b849c6293ef575a96436a392b4cdcaa1a29bc65351b373f</anchor>
18891889 <arglist></arglist>
18901890 </member>
18911891 <member kind="enumvalue">
18921892 <name>HWLOC_TYPE_DEPTH_MEMCACHE</name>
1893 <anchorfile>a00193.html</anchorfile>
1893 <anchorfile>a00196.html</anchorfile>
18941894 <anchor>ggaf4e663cf42bbe20756b849c6293ef575a8b8d7d300c018c0eb65e6c9a9f162101</anchor>
18951895 <arglist></arglist>
18961896 </member>
18971897 <member kind="function">
18981898 <type>int</type>
18991899 <name>hwloc_topology_get_depth</name>
1900 <anchorfile>a00193.html</anchorfile>
1900 <anchorfile>a00196.html</anchorfile>
19011901 <anchor>gae54d1782ca9b54bea915f5c18a9158fa</anchor>
19021902 <arglist>(hwloc_topology_t restrict topology)</arglist>
19031903 </member>
19041904 <member kind="function">
19051905 <type>int</type>
19061906 <name>hwloc_get_type_depth</name>
1907 <anchorfile>a00193.html</anchorfile>
1907 <anchorfile>a00196.html</anchorfile>
19081908 <anchor>ga8bec782e21be313750da70cf7428b374</anchor>
19091909 <arglist>(hwloc_topology_t topology, hwloc_obj_type_t type)</arglist>
19101910 </member>
19111911 <member kind="function">
19121912 <type>int</type>
19131913 <name>hwloc_get_memory_parents_depth</name>
1914 <anchorfile>a00193.html</anchorfile>
1914 <anchorfile>a00196.html</anchorfile>
19151915 <anchor>gae85786340b88e24835f8c403a1e2e54b</anchor>
19161916 <arglist>(hwloc_topology_t topology)</arglist>
19171917 </member>
19181918 <member kind="function" static="yes">
19191919 <type>static int</type>
19201920 <name>hwloc_get_type_or_below_depth</name>
1921 <anchorfile>a00193.html</anchorfile>
1921 <anchorfile>a00196.html</anchorfile>
19221922 <anchor>ga8125328e69eba709c33ea8055c12589b</anchor>
19231923 <arglist>(hwloc_topology_t topology, hwloc_obj_type_t type)</arglist>
19241924 </member>
19251925 <member kind="function" static="yes">
19261926 <type>static int</type>
19271927 <name>hwloc_get_type_or_above_depth</name>
1928 <anchorfile>a00193.html</anchorfile>
1928 <anchorfile>a00196.html</anchorfile>
19291929 <anchor>ga8a9ee573b7d2190272095d10712a7cca</anchor>
19301930 <arglist>(hwloc_topology_t topology, hwloc_obj_type_t type)</arglist>
19311931 </member>
19321932 <member kind="function">
19331933 <type>hwloc_obj_type_t</type>
19341934 <name>hwloc_get_depth_type</name>
1935 <anchorfile>a00193.html</anchorfile>
1935 <anchorfile>a00196.html</anchorfile>
19361936 <anchor>ga506b0682b98aa264d53e934d2e9badb0</anchor>
19371937 <arglist>(hwloc_topology_t topology, int depth)</arglist>
19381938 </member>
19391939 <member kind="function">
19401940 <type>unsigned</type>
19411941 <name>hwloc_get_nbobjs_by_depth</name>
1942 <anchorfile>a00193.html</anchorfile>
1942 <anchorfile>a00196.html</anchorfile>
19431943 <anchor>ga1d5ceafe8130fe6e8657bf0bc666ba50</anchor>
19441944 <arglist>(hwloc_topology_t topology, int depth)</arglist>
19451945 </member>
19461946 <member kind="function" static="yes">
19471947 <type>static int</type>
19481948 <name>hwloc_get_nbobjs_by_type</name>
1949 <anchorfile>a00193.html</anchorfile>
1949 <anchorfile>a00196.html</anchorfile>
19501950 <anchor>ga789a3f65aedff644be64a18526a03065</anchor>
19511951 <arglist>(hwloc_topology_t topology, hwloc_obj_type_t type)</arglist>
19521952 </member>
19531953 <member kind="function" static="yes">
19541954 <type>static hwloc_obj_t</type>
19551955 <name>hwloc_get_root_obj</name>
1956 <anchorfile>a00193.html</anchorfile>
1956 <anchorfile>a00196.html</anchorfile>
19571957 <anchor>ga2d4b12fc187dfc53b35f2fa21d21044d</anchor>
19581958 <arglist>(hwloc_topology_t topology)</arglist>
19591959 </member>
19601960 <member kind="function">
19611961 <type>hwloc_obj_t</type>
19621962 <name>hwloc_get_obj_by_depth</name>
1963 <anchorfile>a00193.html</anchorfile>
1963 <anchorfile>a00196.html</anchorfile>
19641964 <anchor>ga391f6b2613f0065673eaa4069b93d4e0</anchor>
19651965 <arglist>(hwloc_topology_t topology, int depth, unsigned idx)</arglist>
19661966 </member>
19671967 <member kind="function" static="yes">
19681968 <type>static hwloc_obj_t</type>
19691969 <name>hwloc_get_obj_by_type</name>
1970 <anchorfile>a00193.html</anchorfile>
1970 <anchorfile>a00196.html</anchorfile>
19711971 <anchor>ga6f414dd80a2b943967a0ac92da3181a2</anchor>
19721972 <arglist>(hwloc_topology_t topology, hwloc_obj_type_t type, unsigned idx)</arglist>
19731973 </member>
19741974 <member kind="function" static="yes">
19751975 <type>static hwloc_obj_t</type>
19761976 <name>hwloc_get_next_obj_by_depth</name>
1977 <anchorfile>a00193.html</anchorfile>
1977 <anchorfile>a00196.html</anchorfile>
19781978 <anchor>gac140a9b939d9fa0b30c4a910efcb0656</anchor>
19791979 <arglist>(hwloc_topology_t topology, int depth, hwloc_obj_t prev)</arglist>
19801980 </member>
19811981 <member kind="function" static="yes">
19821982 <type>static hwloc_obj_t</type>
19831983 <name>hwloc_get_next_obj_by_type</name>
1984 <anchorfile>a00193.html</anchorfile>
1984 <anchorfile>a00196.html</anchorfile>
19851985 <anchor>ga759e88eaf5a230ad283e9d4c42486735</anchor>
19861986 <arglist>(hwloc_topology_t topology, hwloc_obj_type_t type, hwloc_obj_t prev)</arglist>
19871987 </member>
19891989 <compound kind="group">
19901990 <name>hwlocality_object_strings</name>
19911991 <title>Converting between Object Types and Attributes, and Strings</title>
1992 <filename>a00194.html</filename>
1992 <filename>a00197.html</filename>
19931993 <member kind="function">
19941994 <type>const char *</type>
19951995 <name>hwloc_obj_type_string</name>
1996 <anchorfile>a00194.html</anchorfile>
1996 <anchorfile>a00197.html</anchorfile>
19971997 <anchor>ga5ca0bf94bbbb080d0eff17a57bd90422</anchor>
19981998 <arglist>(hwloc_obj_type_t type)</arglist>
19991999 </member>
20002000 <member kind="function">
20012001 <type>int</type>
20022002 <name>hwloc_obj_type_snprintf</name>
2003 <anchorfile>a00194.html</anchorfile>
2003 <anchorfile>a00197.html</anchorfile>
20042004 <anchor>gadb8765c260edea80c52cd06a76639ba4</anchor>
20052005 <arglist>(char *restrict string, size_t size, hwloc_obj_t obj, int verbose)</arglist>
20062006 </member>
20072007 <member kind="function">
20082008 <type>int</type>
20092009 <name>hwloc_obj_attr_snprintf</name>
2010 <anchorfile>a00194.html</anchorfile>
2010 <anchorfile>a00197.html</anchorfile>
20112011 <anchor>ga870e876931c282a1c7aee2f031912ce3</anchor>
20122012 <arglist>(char *restrict string, size_t size, hwloc_obj_t obj, const char *restrict separator, int verbose)</arglist>
20132013 </member>
20142014 <member kind="function">
20152015 <type>int</type>
20162016 <name>hwloc_type_sscanf</name>
2017 <anchorfile>a00194.html</anchorfile>
2017 <anchorfile>a00197.html</anchorfile>
20182018 <anchor>ga510f21b066fba2dab12b8c9b173b1dfd</anchor>
20192019 <arglist>(const char *string, hwloc_obj_type_t *typep, union hwloc_obj_attr_u *attrp, size_t attrsize)</arglist>
20202020 </member>
20212021 <member kind="function">
20222022 <type>int</type>
20232023 <name>hwloc_type_sscanf_as_depth</name>
2024 <anchorfile>a00194.html</anchorfile>
2024 <anchorfile>a00197.html</anchorfile>
20252025 <anchor>ga52c63cd7203e55b804c1314affc9bd12</anchor>
20262026 <arglist>(const char *string, hwloc_obj_type_t *typep, hwloc_topology_t topology, int *depthp)</arglist>
20272027 </member>
20292029 <compound kind="group">
20302030 <name>hwlocality_info_attr</name>
20312031 <title>Consulting and Adding Key-Value Info Attributes</title>
2032 <filename>a00195.html</filename>
2032 <filename>a00198.html</filename>
20332033 <member kind="function" static="yes">
20342034 <type>static const char *</type>
20352035 <name>hwloc_obj_get_info_by_name</name>
2036 <anchorfile>a00195.html</anchorfile>
2036 <anchorfile>a00198.html</anchorfile>
20372037 <anchor>gab358661a92bb27d8542b255cc9f6f25e</anchor>
20382038 <arglist>(hwloc_obj_t obj, const char *name)</arglist>
20392039 </member>
20402040 <member kind="function">
20412041 <type>int</type>
20422042 <name>hwloc_obj_add_info</name>
2043 <anchorfile>a00195.html</anchorfile>
2043 <anchorfile>a00198.html</anchorfile>
20442044 <anchor>gace7654bb8a9002caae1a4b8a59e7452e</anchor>
20452045 <arglist>(hwloc_obj_t obj, const char *name, const char *value)</arglist>
20462046 </member>
20482048 <compound kind="group">
20492049 <name>hwlocality_cpubinding</name>
20502050 <title>CPU binding</title>
2051 <filename>a00196.html</filename>
2051 <filename>a00199.html</filename>
20522052 <member kind="enumeration">
20532053 <type></type>
20542054 <name>hwloc_cpubind_flags_t</name>
2055 <anchorfile>a00196.html</anchorfile>
2055 <anchorfile>a00199.html</anchorfile>
20562056 <anchor>ga217dc8d373f8958cc93c154ebce1c71c</anchor>
20572057 <arglist></arglist>
20582058 </member>
20592059 <member kind="enumvalue">
20602060 <name>HWLOC_CPUBIND_PROCESS</name>
2061 <anchorfile>a00196.html</anchorfile>
2061 <anchorfile>a00199.html</anchorfile>
20622062 <anchor>gga217dc8d373f8958cc93c154ebce1c71ca2e0dd0128dac6b03408c7dd170477fdc</anchor>
20632063 <arglist></arglist>
20642064 </member>
20652065 <member kind="enumvalue">
20662066 <name>HWLOC_CPUBIND_THREAD</name>
2067 <anchorfile>a00196.html</anchorfile>
2067 <anchorfile>a00199.html</anchorfile>
20682068 <anchor>gga217dc8d373f8958cc93c154ebce1c71caf1b6bbad00d7b1017b918e3719f4d421</anchor>
20692069 <arglist></arglist>
20702070 </member>
20712071 <member kind="enumvalue">
20722072 <name>HWLOC_CPUBIND_STRICT</name>
2073 <anchorfile>a00196.html</anchorfile>
2073 <anchorfile>a00199.html</anchorfile>
20742074 <anchor>gga217dc8d373f8958cc93c154ebce1c71ca679a7e0f0c7ee06b123565f90d98e7fa</anchor>
20752075 <arglist></arglist>
20762076 </member>
20772077 <member kind="enumvalue">
20782078 <name>HWLOC_CPUBIND_NOMEMBIND</name>
2079 <anchorfile>a00196.html</anchorfile>
2079 <anchorfile>a00199.html</anchorfile>
20802080 <anchor>gga217dc8d373f8958cc93c154ebce1c71ca41ce440443cc3087caed95ab60edcad6</anchor>
20812081 <arglist></arglist>
20822082 </member>
20832083 <member kind="function">
20842084 <type>int</type>
20852085 <name>hwloc_set_cpubind</name>
2086 <anchorfile>a00196.html</anchorfile>
2086 <anchorfile>a00199.html</anchorfile>
20872087 <anchor>ga80bc07473a8edf840cae17bd7ec21d48</anchor>
20882088 <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t set, int flags)</arglist>
20892089 </member>
20902090 <member kind="function">
20912091 <type>int</type>
20922092 <name>hwloc_get_cpubind</name>
2093 <anchorfile>a00196.html</anchorfile>
2093 <anchorfile>a00199.html</anchorfile>
20942094 <anchor>gacba7ecb979baf824d5240fa2cb2a8be6</anchor>
20952095 <arglist>(hwloc_topology_t topology, hwloc_cpuset_t set, int flags)</arglist>
20962096 </member>
20972097 <member kind="function">
20982098 <type>int</type>
20992099 <name>hwloc_set_proc_cpubind</name>
2100 <anchorfile>a00196.html</anchorfile>
2100 <anchorfile>a00199.html</anchorfile>
21012101 <anchor>ga296db8a3c6d49b51fb83d6f3e45c02a6</anchor>
21022102 <arglist>(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_cpuset_t set, int flags)</arglist>
21032103 </member>
21042104 <member kind="function">
21052105 <type>int</type>
21062106 <name>hwloc_get_proc_cpubind</name>
2107 <anchorfile>a00196.html</anchorfile>
2107 <anchorfile>a00199.html</anchorfile>
21082108 <anchor>gac82de91f788fa82dacf99c6e0d4b7158</anchor>
21092109 <arglist>(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int flags)</arglist>
21102110 </member>
21112111 <member kind="function">
21122112 <type>int</type>
21132113 <name>hwloc_set_thread_cpubind</name>
2114 <anchorfile>a00196.html</anchorfile>
2114 <anchorfile>a00199.html</anchorfile>
21152115 <anchor>gae42c01b2addcfbf6048b9a516dd7a906</anchor>
21162116 <arglist>(hwloc_topology_t topology, hwloc_thread_t thread, hwloc_const_cpuset_t set, int flags)</arglist>
21172117 </member>
21182118 <member kind="function">
21192119 <type>int</type>
21202120 <name>hwloc_get_thread_cpubind</name>
2121 <anchorfile>a00196.html</anchorfile>
2121 <anchorfile>a00199.html</anchorfile>
21222122 <anchor>gaf13f765642b5d0d9a9813e6bb043671b</anchor>
21232123 <arglist>(hwloc_topology_t topology, hwloc_thread_t thread, hwloc_cpuset_t set, int flags)</arglist>
21242124 </member>
21252125 <member kind="function">
21262126 <type>int</type>
21272127 <name>hwloc_get_last_cpu_location</name>
2128 <anchorfile>a00196.html</anchorfile>
2128 <anchorfile>a00199.html</anchorfile>
21292129 <anchor>gafdb374627358bf09203b5a4215b13032</anchor>
21302130 <arglist>(hwloc_topology_t topology, hwloc_cpuset_t set, int flags)</arglist>
21312131 </member>
21322132 <member kind="function">
21332133 <type>int</type>
21342134 <name>hwloc_get_proc_last_cpu_location</name>
2135 <anchorfile>a00196.html</anchorfile>
2135 <anchorfile>a00199.html</anchorfile>
21362136 <anchor>ga910a05c2d47f68a3155bf176b50fa555</anchor>
21372137 <arglist>(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_cpuset_t set, int flags)</arglist>
21382138 </member>
21402140 <compound kind="group">
21412141 <name>hwlocality_membinding</name>
21422142 <title>Memory binding</title>
2143 <filename>a00197.html</filename>
2143 <filename>a00200.html</filename>
21442144 <member kind="enumeration">
21452145 <type></type>
21462146 <name>hwloc_membind_policy_t</name>
2147 <anchorfile>a00197.html</anchorfile>
2147 <anchorfile>a00200.html</anchorfile>
21482148 <anchor>gac9764f79505775d06407b40f5e4661e8</anchor>
21492149 <arglist></arglist>
21502150 </member>
21512151 <member kind="enumvalue">
21522152 <name>HWLOC_MEMBIND_DEFAULT</name>
2153 <anchorfile>a00197.html</anchorfile>
2153 <anchorfile>a00200.html</anchorfile>
21542154 <anchor>ggac9764f79505775d06407b40f5e4661e8a18675bb80ebc1bce5b652e9de8f3998c</anchor>
21552155 <arglist></arglist>
21562156 </member>
21572157 <member kind="enumvalue">
21582158 <name>HWLOC_MEMBIND_FIRSTTOUCH</name>
2159 <anchorfile>a00197.html</anchorfile>
2159 <anchorfile>a00200.html</anchorfile>
21602160 <anchor>ggac9764f79505775d06407b40f5e4661e8a979c7aa78dd32780858f30f47a72cca0</anchor>
21612161 <arglist></arglist>
21622162 </member>
21632163 <member kind="enumvalue">
21642164 <name>HWLOC_MEMBIND_BIND</name>
2165 <anchorfile>a00197.html</anchorfile>
2165 <anchorfile>a00200.html</anchorfile>
21662166 <anchor>ggac9764f79505775d06407b40f5e4661e8ad811fa4b2a6002c4d63695a408ffde2c</anchor>
21672167 <arglist></arglist>
21682168 </member>
21692169 <member kind="enumvalue">
21702170 <name>HWLOC_MEMBIND_INTERLEAVE</name>
2171 <anchorfile>a00197.html</anchorfile>
2171 <anchorfile>a00200.html</anchorfile>
21722172 <anchor>ggac9764f79505775d06407b40f5e4661e8ae370075e5af016d42310f87ea5af236b</anchor>
21732173 <arglist></arglist>
21742174 </member>
21752175 <member kind="enumvalue">
21762176 <name>HWLOC_MEMBIND_NEXTTOUCH</name>
2177 <anchorfile>a00197.html</anchorfile>
2177 <anchorfile>a00200.html</anchorfile>
21782178 <anchor>ggac9764f79505775d06407b40f5e4661e8aecdd4164d647708fbb51a00d98dbb138</anchor>
21792179 <arglist></arglist>
21802180 </member>
21812181 <member kind="enumvalue">
21822182 <name>HWLOC_MEMBIND_MIXED</name>
2183 <anchorfile>a00197.html</anchorfile>
2183 <anchorfile>a00200.html</anchorfile>
21842184 <anchor>ggac9764f79505775d06407b40f5e4661e8a3185bd869b67817fb2bd5164bf360402</anchor>
21852185 <arglist></arglist>
21862186 </member>
21872187 <member kind="enumeration">
21882188 <type></type>
21892189 <name>hwloc_membind_flags_t</name>
2190 <anchorfile>a00197.html</anchorfile>
2190 <anchorfile>a00200.html</anchorfile>
21912191 <anchor>gab00475fd98815bf4fb9aaf752030e7d2</anchor>
21922192 <arglist></arglist>
21932193 </member>
21942194 <member kind="enumvalue">
21952195 <name>HWLOC_MEMBIND_PROCESS</name>
2196 <anchorfile>a00197.html</anchorfile>
2196 <anchorfile>a00200.html</anchorfile>
21972197 <anchor>ggab00475fd98815bf4fb9aaf752030e7d2a1b1b74aef138f64aff214a8cbdfe8eb4</anchor>
21982198 <arglist></arglist>
21992199 </member>
22002200 <member kind="enumvalue">
22012201 <name>HWLOC_MEMBIND_THREAD</name>
2202 <anchorfile>a00197.html</anchorfile>
2202 <anchorfile>a00200.html</anchorfile>
22032203 <anchor>ggab00475fd98815bf4fb9aaf752030e7d2a1dc7dd5cdcd5796893a325a524555298</anchor>
22042204 <arglist></arglist>
22052205 </member>
22062206 <member kind="enumvalue">
22072207 <name>HWLOC_MEMBIND_STRICT</name>
2208 <anchorfile>a00197.html</anchorfile>
2208 <anchorfile>a00200.html</anchorfile>
22092209 <anchor>ggab00475fd98815bf4fb9aaf752030e7d2a0335311a0ee04166df2888d52b4a42c6</anchor>
22102210 <arglist></arglist>
22112211 </member>
22122212 <member kind="enumvalue">
22132213 <name>HWLOC_MEMBIND_MIGRATE</name>
2214 <anchorfile>a00197.html</anchorfile>
2214 <anchorfile>a00200.html</anchorfile>
22152215 <anchor>ggab00475fd98815bf4fb9aaf752030e7d2aa6e49e54f52827cb143cc869cfd748af</anchor>
22162216 <arglist></arglist>
22172217 </member>
22182218 <member kind="enumvalue">
22192219 <name>HWLOC_MEMBIND_NOCPUBIND</name>
2220 <anchorfile>a00197.html</anchorfile>
2220 <anchorfile>a00200.html</anchorfile>
22212221 <anchor>ggab00475fd98815bf4fb9aaf752030e7d2aad6b9eaf2ee324ca58dc8f58094b9997</anchor>
22222222 <arglist></arglist>
22232223 </member>
22242224 <member kind="enumvalue">
22252225 <name>HWLOC_MEMBIND_BYNODESET</name>
2226 <anchorfile>a00197.html</anchorfile>
2226 <anchorfile>a00200.html</anchorfile>
22272227 <anchor>ggab00475fd98815bf4fb9aaf752030e7d2a71f19fe4505f1c083dc8e6f7bdea6256</anchor>
22282228 <arglist></arglist>
22292229 </member>
22302230 <member kind="function">
22312231 <type>int</type>
22322232 <name>hwloc_set_membind</name>
2233 <anchorfile>a00197.html</anchorfile>
2233 <anchorfile>a00200.html</anchorfile>
22342234 <anchor>ga020951efa0ce3862bd4faec295501a7f</anchor>
22352235 <arglist>(hwloc_topology_t topology, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)</arglist>
22362236 </member>
22372237 <member kind="function">
22382238 <type>int</type>
22392239 <name>hwloc_get_membind</name>
2240 <anchorfile>a00197.html</anchorfile>
2240 <anchorfile>a00200.html</anchorfile>
22412241 <anchor>gae21f0a1a884929c784bebf070252aa56</anchor>
22422242 <arglist>(hwloc_topology_t topology, hwloc_bitmap_t set, hwloc_membind_policy_t *policy, int flags)</arglist>
22432243 </member>
22442244 <member kind="function">
22452245 <type>int</type>
22462246 <name>hwloc_set_proc_membind</name>
2247 <anchorfile>a00197.html</anchorfile>
2247 <anchorfile>a00200.html</anchorfile>
22482248 <anchor>gabc91ff16f7e41047924e3a4ae6d9da7e</anchor>
22492249 <arglist>(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)</arglist>
22502250 </member>
22512251 <member kind="function">
22522252 <type>int</type>
22532253 <name>hwloc_get_proc_membind</name>
2254 <anchorfile>a00197.html</anchorfile>
2254 <anchorfile>a00200.html</anchorfile>
22552255 <anchor>ga1730ceb18ec6ee3b7bd3d0db81f07dc8</anchor>
22562256 <arglist>(hwloc_topology_t topology, hwloc_pid_t pid, hwloc_bitmap_t set, hwloc_membind_policy_t *policy, int flags)</arglist>
22572257 </member>
22582258 <member kind="function">
22592259 <type>int</type>
22602260 <name>hwloc_set_area_membind</name>
2261 <anchorfile>a00197.html</anchorfile>
2261 <anchorfile>a00200.html</anchorfile>
22622262 <anchor>gaf881faefe20701229f07dd7dbd0125ed</anchor>
22632263 <arglist>(hwloc_topology_t topology, const void *addr, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)</arglist>
22642264 </member>
22652265 <member kind="function">
22662266 <type>int</type>
22672267 <name>hwloc_get_area_membind</name>
2268 <anchorfile>a00197.html</anchorfile>
2268 <anchorfile>a00200.html</anchorfile>
22692269 <anchor>gaa87e0a6946ff145914fdf0b1c60567f8</anchor>
22702270 <arglist>(hwloc_topology_t topology, const void *addr, size_t len, hwloc_bitmap_t set, hwloc_membind_policy_t *policy, int flags)</arglist>
22712271 </member>
22722272 <member kind="function">
22732273 <type>int</type>
22742274 <name>hwloc_get_area_memlocation</name>
2275 <anchorfile>a00197.html</anchorfile>
2275 <anchorfile>a00200.html</anchorfile>
22762276 <anchor>ga537c7508a4e2d1db05673ec5be6e805c</anchor>
22772277 <arglist>(hwloc_topology_t topology, const void *addr, size_t len, hwloc_bitmap_t set, int flags)</arglist>
22782278 </member>
22792279 <member kind="function">
22802280 <type>void *</type>
22812281 <name>hwloc_alloc</name>
2282 <anchorfile>a00197.html</anchorfile>
2282 <anchorfile>a00200.html</anchorfile>
22832283 <anchor>ga972b335a86a7d5e7b34bce2b243c41bc</anchor>
22842284 <arglist>(hwloc_topology_t topology, size_t len)</arglist>
22852285 </member>
22862286 <member kind="function">
22872287 <type>void *</type>
22882288 <name>hwloc_alloc_membind</name>
2289 <anchorfile>a00197.html</anchorfile>
2289 <anchorfile>a00200.html</anchorfile>
22902290 <anchor>ga04736461780fadcf193af218c0122273</anchor>
22912291 <arglist>(hwloc_topology_t topology, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)</arglist>
22922292 </member>
22932293 <member kind="function" static="yes">
22942294 <type>static void *</type>
22952295 <name>hwloc_alloc_membind_policy</name>
2296 <anchorfile>a00197.html</anchorfile>
2296 <anchorfile>a00200.html</anchorfile>
22972297 <anchor>gab1b77b8408bacaf03c7e8878f7577922</anchor>
22982298 <arglist>(hwloc_topology_t topology, size_t len, hwloc_const_bitmap_t set, hwloc_membind_policy_t policy, int flags)</arglist>
22992299 </member>
23002300 <member kind="function">
23012301 <type>int</type>
23022302 <name>hwloc_free</name>
2303 <anchorfile>a00197.html</anchorfile>
2303 <anchorfile>a00200.html</anchorfile>
23042304 <anchor>ga32dbd4f54e9e4a7179f2dde37ffe6ad7</anchor>
23052305 <arglist>(hwloc_topology_t topology, void *addr, size_t len)</arglist>
23062306 </member>
23082308 <compound kind="group">
23092309 <name>hwlocality_setsource</name>
23102310 <title>Changing the Source of Topology Discovery</title>
2311 <filename>a00198.html</filename>
2311 <filename>a00201.html</filename>
23122312 <member kind="enumeration">
23132313 <type></type>
23142314 <name>hwloc_topology_components_flag_e</name>
2315 <anchorfile>a00198.html</anchorfile>
2315 <anchorfile>a00201.html</anchorfile>
23162316 <anchor>ga949f656c779208a36790feba24048b7e</anchor>
23172317 <arglist></arglist>
23182318 </member>
23192319 <member kind="enumvalue">
23202320 <name>HWLOC_TOPOLOGY_COMPONENTS_FLAG_BLACKLIST</name>
2321 <anchorfile>a00198.html</anchorfile>
2321 <anchorfile>a00201.html</anchorfile>
23222322 <anchor>gga949f656c779208a36790feba24048b7ea33eec25d29253a2aba21dd3c731b416e</anchor>
23232323 <arglist></arglist>
23242324 </member>
23252325 <member kind="function">
23262326 <type>int</type>
23272327 <name>hwloc_topology_set_pid</name>
2328 <anchorfile>a00198.html</anchorfile>
2328 <anchorfile>a00201.html</anchorfile>
23292329 <anchor>ga341fc17b5867a4715570baab131f68cd</anchor>
23302330 <arglist>(hwloc_topology_t restrict topology, hwloc_pid_t pid)</arglist>
23312331 </member>
23322332 <member kind="function">
23332333 <type>int</type>
23342334 <name>hwloc_topology_set_synthetic</name>
2335 <anchorfile>a00198.html</anchorfile>
2335 <anchorfile>a00201.html</anchorfile>
23362336 <anchor>ga4fab186bb6181a00bcf585825fddd38d</anchor>
23372337 <arglist>(hwloc_topology_t restrict topology, const char *restrict description)</arglist>
23382338 </member>
23392339 <member kind="function">
23402340 <type>int</type>
23412341 <name>hwloc_topology_set_xml</name>
2342 <anchorfile>a00198.html</anchorfile>
2342 <anchorfile>a00201.html</anchorfile>
23432343 <anchor>ga879439b7ee99407ee911b3ac64e9a25e</anchor>
23442344 <arglist>(hwloc_topology_t restrict topology, const char *restrict xmlpath)</arglist>
23452345 </member>
23462346 <member kind="function">
23472347 <type>int</type>
23482348 <name>hwloc_topology_set_xmlbuffer</name>
2349 <anchorfile>a00198.html</anchorfile>
2349 <anchorfile>a00201.html</anchorfile>
23502350 <anchor>ga2745616b65595e1c1e579ecc7e461fa8</anchor>
23512351 <arglist>(hwloc_topology_t restrict topology, const char *restrict buffer, int size)</arglist>
23522352 </member>
23532353 <member kind="function">
23542354 <type>int</type>
23552355 <name>hwloc_topology_set_components</name>
2356 <anchorfile>a00198.html</anchorfile>
2356 <anchorfile>a00201.html</anchorfile>
23572357 <anchor>ga9ad41adf418cee1c0ee32ba9bd4a3d36</anchor>
23582358 <arglist>(hwloc_topology_t restrict topology, unsigned long flags, const char *restrict name)</arglist>
23592359 </member>
23612361 <compound kind="group">
23622362 <name>hwlocality_configuration</name>
23632363 <title>Topology Detection Configuration and Query</title>
2364 <filename>a00199.html</filename>
2364 <filename>a00202.html</filename>
23652365 <class kind="struct">hwloc_topology_discovery_support</class>
23662366 <class kind="struct">hwloc_topology_cpubind_support</class>
23672367 <class kind="struct">hwloc_topology_membind_support</class>
23702370 <member kind="enumeration">
23712371 <type></type>
23722372 <name>hwloc_topology_flags_e</name>
2373 <anchorfile>a00199.html</anchorfile>
2373 <anchorfile>a00202.html</anchorfile>
23742374 <anchor>gada025d3ec20b4b420f8038d23d6e7bde</anchor>
23752375 <arglist></arglist>
23762376 </member>
23772377 <member kind="enumvalue">
23782378 <name>HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED</name>
2379 <anchorfile>a00199.html</anchorfile>
2379 <anchorfile>a00202.html</anchorfile>
23802380 <anchor>ggada025d3ec20b4b420f8038d23d6e7bdea10907044bbb306fd0dc76acf046d9258</anchor>
23812381 <arglist></arglist>
23822382 </member>
23832383 <member kind="enumvalue">
23842384 <name>HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM</name>
2385 <anchorfile>a00199.html</anchorfile>
2385 <anchorfile>a00202.html</anchorfile>
23862386 <anchor>ggada025d3ec20b4b420f8038d23d6e7bdea6ecb6abc6a0bb75e81564f8bca85783b</anchor>
23872387 <arglist></arglist>
23882388 </member>
23892389 <member kind="enumvalue">
23902390 <name>HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES</name>
2391 <anchorfile>a00199.html</anchorfile>
2391 <anchorfile>a00202.html</anchorfile>
23922392 <anchor>ggada025d3ec20b4b420f8038d23d6e7bdea1b66bbd66e900e5c837f71defb32ad89</anchor>
23932393 <arglist></arglist>
23942394 </member>
23952395 <member kind="enumvalue">
23962396 <name>HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT</name>
2397 <anchorfile>a00199.html</anchorfile>
2397 <anchorfile>a00202.html</anchorfile>
23982398 <anchor>ggada025d3ec20b4b420f8038d23d6e7bdead93e82b8668ee90e4f9354e201a2ed9c</anchor>
2399 <arglist></arglist>
2400 </member>
2401 <member kind="enumvalue">
2402 <name>HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING</name>
2403 <anchorfile>a00202.html</anchorfile>
2404 <anchor>ggada025d3ec20b4b420f8038d23d6e7bdeaa595aed197779012acf43e8ca4a2658d</anchor>
2405 <arglist></arglist>
2406 </member>
2407 <member kind="enumvalue">
2408 <name>HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_MEMBINDING</name>
2409 <anchorfile>a00202.html</anchorfile>
2410 <anchor>ggada025d3ec20b4b420f8038d23d6e7bdea368d7741135fe309f3782c59644d3caa</anchor>
2411 <arglist></arglist>
2412 </member>
2413 <member kind="enumvalue">
2414 <name>HWLOC_TOPOLOGY_FLAG_DONT_CHANGE_BINDING</name>
2415 <anchorfile>a00202.html</anchorfile>
2416 <anchor>ggada025d3ec20b4b420f8038d23d6e7bdeae7a792e3db4360360a10f9160b10e631</anchor>
23992417 <arglist></arglist>
24002418 </member>
24012419 <member kind="enumeration">
24022420 <type></type>
24032421 <name>hwloc_type_filter_e</name>
2404 <anchorfile>a00199.html</anchorfile>
2422 <anchorfile>a00202.html</anchorfile>
24052423 <anchor>ga9a5a1f0140cd1952544477833733195b</anchor>
24062424 <arglist></arglist>
24072425 </member>
24082426 <member kind="enumvalue">
24092427 <name>HWLOC_TYPE_FILTER_KEEP_ALL</name>
2410 <anchorfile>a00199.html</anchorfile>
2428 <anchorfile>a00202.html</anchorfile>
24112429 <anchor>gga9a5a1f0140cd1952544477833733195bafda7b59e6810dfe778d8f9a4cc1e350e</anchor>
24122430 <arglist></arglist>
24132431 </member>
24142432 <member kind="enumvalue">
24152433 <name>HWLOC_TYPE_FILTER_KEEP_NONE</name>
2416 <anchorfile>a00199.html</anchorfile>
2434 <anchorfile>a00202.html</anchorfile>
24172435 <anchor>gga9a5a1f0140cd1952544477833733195ba4f835955414de92c77d99b8419d4647a</anchor>
24182436 <arglist></arglist>
24192437 </member>
24202438 <member kind="enumvalue">
24212439 <name>HWLOC_TYPE_FILTER_KEEP_STRUCTURE</name>
2422 <anchorfile>a00199.html</anchorfile>
2440 <anchorfile>a00202.html</anchorfile>
24232441 <anchor>gga9a5a1f0140cd1952544477833733195ba7664716643bf1db83e631eed34f659e4</anchor>
24242442 <arglist></arglist>
24252443 </member>
24262444 <member kind="enumvalue">
24272445 <name>HWLOC_TYPE_FILTER_KEEP_IMPORTANT</name>
2428 <anchorfile>a00199.html</anchorfile>
2446 <anchorfile>a00202.html</anchorfile>
24292447 <anchor>gga9a5a1f0140cd1952544477833733195ba63fd24954e18c83ff7eae9588759adb5</anchor>
24302448 <arglist></arglist>
24312449 </member>
24322450 <member kind="function">
24332451 <type>int</type>
24342452 <name>hwloc_topology_set_flags</name>
2435 <anchorfile>a00199.html</anchorfile>
2453 <anchorfile>a00202.html</anchorfile>
24362454 <anchor>gaaeed4df656979e5f16befea9d29b814b</anchor>
24372455 <arglist>(hwloc_topology_t topology, unsigned long flags)</arglist>
24382456 </member>
24392457 <member kind="function">
24402458 <type>unsigned long</type>
24412459 <name>hwloc_topology_get_flags</name>
2442 <anchorfile>a00199.html</anchorfile>
2460 <anchorfile>a00202.html</anchorfile>
24432461 <anchor>ga09318f81c1d4713be907d64748a6f93c</anchor>
24442462 <arglist>(hwloc_topology_t topology)</arglist>
24452463 </member>
24462464 <member kind="function">
24472465 <type>int</type>
24482466 <name>hwloc_topology_is_thissystem</name>
2449 <anchorfile>a00199.html</anchorfile>
2467 <anchorfile>a00202.html</anchorfile>
24502468 <anchor>ga68ffdcfd9175cdf40709801092f18017</anchor>
24512469 <arglist>(hwloc_topology_t restrict topology)</arglist>
24522470 </member>
24532471 <member kind="function">
24542472 <type>const struct hwloc_topology_support *</type>
24552473 <name>hwloc_topology_get_support</name>
2456 <anchorfile>a00199.html</anchorfile>
2474 <anchorfile>a00202.html</anchorfile>
24572475 <anchor>gab8c76173c4a8ce1a9a9366012b1388e6</anchor>
24582476 <arglist>(hwloc_topology_t restrict topology)</arglist>
24592477 </member>
24602478 <member kind="function">
24612479 <type>int</type>
24622480 <name>hwloc_topology_set_type_filter</name>
2463 <anchorfile>a00199.html</anchorfile>
2481 <anchorfile>a00202.html</anchorfile>
24642482 <anchor>gad894e70f15f8d4aada7be8d1aba38b7e</anchor>
24652483 <arglist>(hwloc_topology_t topology, hwloc_obj_type_t type, enum hwloc_type_filter_e filter)</arglist>
24662484 </member>
24672485 <member kind="function">
24682486 <type>int</type>
24692487 <name>hwloc_topology_get_type_filter</name>
2470 <anchorfile>a00199.html</anchorfile>
2488 <anchorfile>a00202.html</anchorfile>
24712489 <anchor>ga137ad1178f7a79f2383974d983083401</anchor>
24722490 <arglist>(hwloc_topology_t topology, hwloc_obj_type_t type, enum hwloc_type_filter_e *filter)</arglist>
24732491 </member>
24742492 <member kind="function">
24752493 <type>int</type>
24762494 <name>hwloc_topology_set_all_types_filter</name>
2477 <anchorfile>a00199.html</anchorfile>
2495 <anchorfile>a00202.html</anchorfile>
24782496 <anchor>ga9eb8dc3b106f84921bf5789101e97e24</anchor>
24792497 <arglist>(hwloc_topology_t topology, enum hwloc_type_filter_e filter)</arglist>
24802498 </member>
24812499 <member kind="function">
24822500 <type>int</type>
24832501 <name>hwloc_topology_set_cache_types_filter</name>
2484 <anchorfile>a00199.html</anchorfile>
2502 <anchorfile>a00202.html</anchorfile>
24852503 <anchor>ga30bd6d330fe3c8f0cbaad724d114ee20</anchor>
24862504 <arglist>(hwloc_topology_t topology, enum hwloc_type_filter_e filter)</arglist>
24872505 </member>
24882506 <member kind="function">
24892507 <type>int</type>
24902508 <name>hwloc_topology_set_icache_types_filter</name>
2491 <anchorfile>a00199.html</anchorfile>
2509 <anchorfile>a00202.html</anchorfile>
24922510 <anchor>ga37c7b2e599ed3cd76ad9164630024f30</anchor>
24932511 <arglist>(hwloc_topology_t topology, enum hwloc_type_filter_e filter)</arglist>
24942512 </member>
24952513 <member kind="function">
24962514 <type>int</type>
24972515 <name>hwloc_topology_set_io_types_filter</name>
2498 <anchorfile>a00199.html</anchorfile>
2516 <anchorfile>a00202.html</anchorfile>
24992517 <anchor>ga0ab38705357bc1203abe829da8a12ad3</anchor>
25002518 <arglist>(hwloc_topology_t topology, enum hwloc_type_filter_e filter)</arglist>
25012519 </member>
25022520 <member kind="function">
25032521 <type>void</type>
25042522 <name>hwloc_topology_set_userdata</name>
2505 <anchorfile>a00199.html</anchorfile>
2523 <anchorfile>a00202.html</anchorfile>
25062524 <anchor>ga2cc7b7b155cba58dda203e54f1637b9c</anchor>
25072525 <arglist>(hwloc_topology_t topology, const void *userdata)</arglist>
25082526 </member>
25092527 <member kind="function">
25102528 <type>void *</type>
25112529 <name>hwloc_topology_get_userdata</name>
2512 <anchorfile>a00199.html</anchorfile>
2530 <anchorfile>a00202.html</anchorfile>
25132531 <anchor>ga91f992f8d6c4905b2d3c4f43e509c2a3</anchor>
25142532 <arglist>(hwloc_topology_t topology)</arglist>
25152533 </member>
25172535 <compound kind="group">
25182536 <name>hwlocality_tinker</name>
25192537 <title>Modifying a loaded Topology</title>
2520 <filename>a00200.html</filename>
2538 <filename>a00203.html</filename>
25212539 <member kind="enumeration">
25222540 <type></type>
25232541 <name>hwloc_restrict_flags_e</name>
2524 <anchorfile>a00200.html</anchorfile>
2542 <anchorfile>a00203.html</anchorfile>
25252543 <anchor>ga9d80f08eb25b7ac22f1b998dc8bf521f</anchor>
25262544 <arglist></arglist>
25272545 </member>
25282546 <member kind="enumvalue">
25292547 <name>HWLOC_RESTRICT_FLAG_REMOVE_CPULESS</name>
2530 <anchorfile>a00200.html</anchorfile>
2548 <anchorfile>a00203.html</anchorfile>
25312549 <anchor>gga9d80f08eb25b7ac22f1b998dc8bf521fa80eeb9cbba401ab050f8fb4573725891</anchor>
25322550 <arglist></arglist>
25332551 </member>
25342552 <member kind="enumvalue">
25352553 <name>HWLOC_RESTRICT_FLAG_BYNODESET</name>
2536 <anchorfile>a00200.html</anchorfile>
2554 <anchorfile>a00203.html</anchorfile>
25372555 <anchor>gga9d80f08eb25b7ac22f1b998dc8bf521fae4c5b1b87232f2d8a60559e77ac65a68</anchor>
25382556 <arglist></arglist>
25392557 </member>
25402558 <member kind="enumvalue">
25412559 <name>HWLOC_RESTRICT_FLAG_REMOVE_MEMLESS</name>
2542 <anchorfile>a00200.html</anchorfile>
2560 <anchorfile>a00203.html</anchorfile>
25432561 <anchor>gga9d80f08eb25b7ac22f1b998dc8bf521faf5ba49808855704bfe9cb9fe7347f93b</anchor>
25442562 <arglist></arglist>
25452563 </member>
25462564 <member kind="enumvalue">
25472565 <name>HWLOC_RESTRICT_FLAG_ADAPT_MISC</name>
2548 <anchorfile>a00200.html</anchorfile>
2566 <anchorfile>a00203.html</anchorfile>
25492567 <anchor>gga9d80f08eb25b7ac22f1b998dc8bf521fa699969227a09bbc1a7de51dc9fb7be4b</anchor>
25502568 <arglist></arglist>
25512569 </member>
25522570 <member kind="enumvalue">
25532571 <name>HWLOC_RESTRICT_FLAG_ADAPT_IO</name>
2554 <anchorfile>a00200.html</anchorfile>
2572 <anchorfile>a00203.html</anchorfile>
25552573 <anchor>gga9d80f08eb25b7ac22f1b998dc8bf521faa95d6985e36ec1e55f68b210297a85cb</anchor>
25562574 <arglist></arglist>
25572575 </member>
25582576 <member kind="enumeration">
25592577 <type></type>
25602578 <name>hwloc_allow_flags_e</name>
2561 <anchorfile>a00200.html</anchorfile>
2579 <anchorfile>a00203.html</anchorfile>
25622580 <anchor>ga38b1be3922094d880f6e76bf56c973d6</anchor>
25632581 <arglist></arglist>
25642582 </member>
25652583 <member kind="enumvalue">
25662584 <name>HWLOC_ALLOW_FLAG_ALL</name>
2567 <anchorfile>a00200.html</anchorfile>
2585 <anchorfile>a00203.html</anchorfile>
25682586 <anchor>gga38b1be3922094d880f6e76bf56c973d6aca107692455774f9d323d21b8abfce72</anchor>
25692587 <arglist></arglist>
25702588 </member>
25712589 <member kind="enumvalue">
25722590 <name>HWLOC_ALLOW_FLAG_LOCAL_RESTRICTIONS</name>
2573 <anchorfile>a00200.html</anchorfile>
2591 <anchorfile>a00203.html</anchorfile>
25742592 <anchor>gga38b1be3922094d880f6e76bf56c973d6a88c50088c09dcf1e1a496c0817556fb9</anchor>
25752593 <arglist></arglist>
25762594 </member>
25772595 <member kind="enumvalue">
25782596 <name>HWLOC_ALLOW_FLAG_CUSTOM</name>
2579 <anchorfile>a00200.html</anchorfile>
2597 <anchorfile>a00203.html</anchorfile>
25802598 <anchor>gga38b1be3922094d880f6e76bf56c973d6a489c8c1b67ce7e0b8cf7a665852760e1</anchor>
25812599 <arglist></arglist>
25822600 </member>
25832601 <member kind="function">
25842602 <type>int</type>
25852603 <name>hwloc_topology_restrict</name>
2586 <anchorfile>a00200.html</anchorfile>
2604 <anchorfile>a00203.html</anchorfile>
25872605 <anchor>ga6db81ed13ac0a9d70cc80372ab537815</anchor>
25882606 <arglist>(hwloc_topology_t restrict topology, hwloc_const_bitmap_t set, unsigned long flags)</arglist>
25892607 </member>
25902608 <member kind="function">
25912609 <type>int</type>
25922610 <name>hwloc_topology_allow</name>
2593 <anchorfile>a00200.html</anchorfile>
2611 <anchorfile>a00203.html</anchorfile>
25942612 <anchor>gaf955b190c0299dcfb5bc985d777f92a1</anchor>
25952613 <arglist>(hwloc_topology_t restrict topology, hwloc_const_cpuset_t cpuset, hwloc_const_nodeset_t nodeset, unsigned long flags)</arglist>
25962614 </member>
25972615 <member kind="function">
25982616 <type>hwloc_obj_t</type>
25992617 <name>hwloc_topology_insert_misc_object</name>
2600 <anchorfile>a00200.html</anchorfile>
2618 <anchorfile>a00203.html</anchorfile>
26012619 <anchor>gad980782ade737900c5cf208946768c30</anchor>
26022620 <arglist>(hwloc_topology_t topology, hwloc_obj_t parent, const char *name)</arglist>
26032621 </member>
26042622 <member kind="function">
26052623 <type>hwloc_obj_t</type>
26062624 <name>hwloc_topology_alloc_group_object</name>
2607 <anchorfile>a00200.html</anchorfile>
2625 <anchorfile>a00203.html</anchorfile>
26082626 <anchor>ga4cea4741165faf5323931a9ed8786ef7</anchor>
26092627 <arglist>(hwloc_topology_t topology)</arglist>
26102628 </member>
26112629 <member kind="function">
26122630 <type>hwloc_obj_t</type>
26132631 <name>hwloc_topology_insert_group_object</name>
2614 <anchorfile>a00200.html</anchorfile>
2632 <anchorfile>a00203.html</anchorfile>
26152633 <anchor>ga1fc6012b3e1c249b83f48cb7bcacaa5b</anchor>
26162634 <arglist>(hwloc_topology_t topology, hwloc_obj_t group)</arglist>
26172635 </member>
26182636 <member kind="function">
26192637 <type>int</type>
26202638 <name>hwloc_obj_add_other_obj_sets</name>
2621 <anchorfile>a00200.html</anchorfile>
2639 <anchorfile>a00203.html</anchorfile>
26222640 <anchor>gad458715d3335df44849216cc123d1055</anchor>
26232641 <arglist>(hwloc_obj_t dst, hwloc_obj_t src)</arglist>
26242642 </member>
26252643 <member kind="function">
26262644 <type>int</type>
26272645 <name>hwloc_topology_refresh</name>
2628 <anchorfile>a00200.html</anchorfile>
2646 <anchorfile>a00203.html</anchorfile>
26292647 <anchor>ga698ecd640d2b76742bba3829a145cd9a</anchor>
26302648 <arglist>(hwloc_topology_t topology)</arglist>
26312649 </member>
26332651 <compound kind="group">
26342652 <name>hwlocality_helper_find_inside</name>
26352653 <title>Finding Objects inside a CPU set</title>
2636 <filename>a00201.html</filename>
2654 <filename>a00204.html</filename>
26372655 <member kind="function" static="yes">
26382656 <type>static hwloc_obj_t</type>
26392657 <name>hwloc_get_first_largest_obj_inside_cpuset</name>
2640 <anchorfile>a00201.html</anchorfile>
2658 <anchorfile>a00204.html</anchorfile>
26412659 <anchor>ga547325a4193dbc215d07c23097519d79</anchor>
26422660 <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t set)</arglist>
26432661 </member>
26442662 <member kind="function">
26452663 <type>int</type>
26462664 <name>hwloc_get_largest_objs_inside_cpuset</name>
2647 <anchorfile>a00201.html</anchorfile>
2665 <anchorfile>a00204.html</anchorfile>
26482666 <anchor>ga34ca563fa3a6a4e05268f36a87668511</anchor>
26492667 <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_t *restrict objs, int max)</arglist>
26502668 </member>
26512669 <member kind="function" static="yes">
26522670 <type>static hwloc_obj_t</type>
26532671 <name>hwloc_get_next_obj_inside_cpuset_by_depth</name>
2654 <anchorfile>a00201.html</anchorfile>
2672 <anchorfile>a00204.html</anchorfile>
26552673 <anchor>ga63e3784e7c60fbae5073428cb98ac787</anchor>
26562674 <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t set, int depth, hwloc_obj_t prev)</arglist>
26572675 </member>
26582676 <member kind="function" static="yes">
26592677 <type>static hwloc_obj_t</type>
26602678 <name>hwloc_get_next_obj_inside_cpuset_by_type</name>
2661 <anchorfile>a00201.html</anchorfile>
2679 <anchorfile>a00204.html</anchorfile>
26622680 <anchor>gafe859176cf9233f215fea0e87cef47e7</anchor>
26632681 <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_type_t type, hwloc_obj_t prev)</arglist>
26642682 </member>
26652683 <member kind="function" static="yes">
26662684 <type>static hwloc_obj_t</type>
26672685 <name>hwloc_get_obj_inside_cpuset_by_depth</name>
2668 <anchorfile>a00201.html</anchorfile>
2686 <anchorfile>a00204.html</anchorfile>
26692687 <anchor>gaec86f1f88832836e3f9338e246ea5862</anchor>
26702688 <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t set, int depth, unsigned idx)</arglist>
26712689 </member>
26722690 <member kind="function" static="yes">
26732691 <type>static hwloc_obj_t</type>
26742692 <name>hwloc_get_obj_inside_cpuset_by_type</name>
2675 <anchorfile>a00201.html</anchorfile>
2693 <anchorfile>a00204.html</anchorfile>
26762694 <anchor>ga2edf924e5a0cca9cb22f65cc77c6ddb5</anchor>
26772695 <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_type_t type, unsigned idx)</arglist>
26782696 </member>
26792697 <member kind="function" static="yes">
26802698 <type>static unsigned</type>
26812699 <name>hwloc_get_nbobjs_inside_cpuset_by_depth</name>
2682 <anchorfile>a00201.html</anchorfile>
2700 <anchorfile>a00204.html</anchorfile>
26832701 <anchor>gaa43c64512ddb33fd181990c4261cec7d</anchor>
26842702 <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t set, int depth)</arglist>
26852703 </member>
26862704 <member kind="function" static="yes">
26872705 <type>static int</type>
26882706 <name>hwloc_get_nbobjs_inside_cpuset_by_type</name>
2689 <anchorfile>a00201.html</anchorfile>
2707 <anchorfile>a00204.html</anchorfile>
26902708 <anchor>ga133c40415de008518608f8bff52a5ab9</anchor>
26912709 <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_type_t type)</arglist>
26922710 </member>
26932711 <member kind="function" static="yes">
26942712 <type>static int</type>
26952713 <name>hwloc_get_obj_index_inside_cpuset</name>
2696 <anchorfile>a00201.html</anchorfile>
2714 <anchorfile>a00204.html</anchorfile>
26972715 <anchor>ga4c3a20d61e9beb06c667b21688c772c5</anchor>
26982716 <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_t obj)</arglist>
26992717 </member>
27012719 <compound kind="group">
27022720 <name>hwlocality_helper_find_covering</name>
27032721 <title>Finding Objects covering at least CPU set</title>
2704 <filename>a00202.html</filename>
2722 <filename>a00205.html</filename>
27052723 <member kind="function" static="yes">
27062724 <type>static hwloc_obj_t</type>
27072725 <name>hwloc_get_child_covering_cpuset</name>
2708 <anchorfile>a00202.html</anchorfile>
2726 <anchorfile>a00205.html</anchorfile>
27092727 <anchor>ga0e66aa2dc6b2527cfd10723af646c9d7</anchor>
27102728 <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_t parent)</arglist>
27112729 </member>
27122730 <member kind="function" static="yes">
27132731 <type>static hwloc_obj_t</type>
27142732 <name>hwloc_get_obj_covering_cpuset</name>
2715 <anchorfile>a00202.html</anchorfile>
2733 <anchorfile>a00205.html</anchorfile>
27162734 <anchor>ga41acdcdbb8b95d70ecf6c572a3f67dca</anchor>
27172735 <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t set)</arglist>
27182736 </member>
27192737 <member kind="function" static="yes">
27202738 <type>static hwloc_obj_t</type>
27212739 <name>hwloc_get_next_obj_covering_cpuset_by_depth</name>
2722 <anchorfile>a00202.html</anchorfile>
2740 <anchorfile>a00205.html</anchorfile>
27232741 <anchor>gaba4b6d86eba1169ced4b0e941d2bb5f0</anchor>
27242742 <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t set, int depth, hwloc_obj_t prev)</arglist>
27252743 </member>
27262744 <member kind="function" static="yes">
27272745 <type>static hwloc_obj_t</type>
27282746 <name>hwloc_get_next_obj_covering_cpuset_by_type</name>
2729 <anchorfile>a00202.html</anchorfile>
2747 <anchorfile>a00205.html</anchorfile>
27302748 <anchor>ga91cfae08b092e7966002e15d1e987213</anchor>
27312749 <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t set, hwloc_obj_type_t type, hwloc_obj_t prev)</arglist>
27322750 </member>
27342752 <compound kind="group">
27352753 <name>hwlocality_helper_ancestors</name>
27362754 <title>Looking at Ancestor and Child Objects</title>
2737 <filename>a00203.html</filename>
2755 <filename>a00206.html</filename>
27382756 <member kind="function" static="yes">
27392757 <type>static hwloc_obj_t</type>
27402758 <name>hwloc_get_ancestor_obj_by_depth</name>
2741 <anchorfile>a00203.html</anchorfile>
2759 <anchorfile>a00206.html</anchorfile>
27422760 <anchor>ga9f8c93fde236e9642a96957af01a11cb</anchor>
27432761 <arglist>(hwloc_topology_t topology, int depth, hwloc_obj_t obj)</arglist>
27442762 </member>
27452763 <member kind="function" static="yes">
27462764 <type>static hwloc_obj_t</type>
27472765 <name>hwloc_get_ancestor_obj_by_type</name>
2748 <anchorfile>a00203.html</anchorfile>
2766 <anchorfile>a00206.html</anchorfile>
27492767 <anchor>ga70f0c7583291da707c15ae4daa850f41</anchor>
27502768 <arglist>(hwloc_topology_t topology, hwloc_obj_type_t type, hwloc_obj_t obj)</arglist>
27512769 </member>
27522770 <member kind="function" static="yes">
27532771 <type>static hwloc_obj_t</type>
27542772 <name>hwloc_get_common_ancestor_obj</name>
2755 <anchorfile>a00203.html</anchorfile>
2773 <anchorfile>a00206.html</anchorfile>
27562774 <anchor>gab1fa883021928b5c476911c4102e9be3</anchor>
27572775 <arglist>(hwloc_topology_t topology, hwloc_obj_t obj1, hwloc_obj_t obj2)</arglist>
27582776 </member>
27592777 <member kind="function" static="yes">
27602778 <type>static int</type>
27612779 <name>hwloc_obj_is_in_subtree</name>
2762 <anchorfile>a00203.html</anchorfile>
2780 <anchorfile>a00206.html</anchorfile>
27632781 <anchor>ga408cf74f5bf9ed497911a320c7f8cc56</anchor>
27642782 <arglist>(hwloc_topology_t topology, hwloc_obj_t obj, hwloc_obj_t subtree_root)</arglist>
27652783 </member>
27662784 <member kind="function" static="yes">
27672785 <type>static hwloc_obj_t</type>
27682786 <name>hwloc_get_next_child</name>
2769 <anchorfile>a00203.html</anchorfile>
2787 <anchorfile>a00206.html</anchorfile>
27702788 <anchor>ga12d8565a3436c565e791ed02a0353621</anchor>
27712789 <arglist>(hwloc_topology_t topology, hwloc_obj_t parent, hwloc_obj_t prev)</arglist>
27722790 </member>
27742792 <compound kind="group">
27752793 <name>hwlocality_helper_types</name>
27762794 <title>Kinds of object Type</title>
2777 <filename>a00204.html</filename>
2795 <filename>a00207.html</filename>
27782796 <member kind="function">
27792797 <type>int</type>
27802798 <name>hwloc_obj_type_is_normal</name>
2781 <anchorfile>a00204.html</anchorfile>
2799 <anchorfile>a00207.html</anchorfile>
27822800 <anchor>ga52ef38431eba383b048b98c669b59a16</anchor>
27832801 <arglist>(hwloc_obj_type_t type)</arglist>
27842802 </member>
27852803 <member kind="function">
27862804 <type>int</type>
27872805 <name>hwloc_obj_type_is_io</name>
2788 <anchorfile>a00204.html</anchorfile>
2806 <anchorfile>a00207.html</anchorfile>
27892807 <anchor>gac8a954ed37a4376097234c828068cbef</anchor>
27902808 <arglist>(hwloc_obj_type_t type)</arglist>
27912809 </member>
27922810 <member kind="function">
27932811 <type>int</type>
27942812 <name>hwloc_obj_type_is_memory</name>
2795 <anchorfile>a00204.html</anchorfile>
2813 <anchorfile>a00207.html</anchorfile>
27962814 <anchor>ga1d074390c8a3dc3088d84f73fb73f966</anchor>
27972815 <arglist>(hwloc_obj_type_t type)</arglist>
27982816 </member>
27992817 <member kind="function">
28002818 <type>int</type>
28012819 <name>hwloc_obj_type_is_cache</name>
2802 <anchorfile>a00204.html</anchorfile>
2820 <anchorfile>a00207.html</anchorfile>
28032821 <anchor>ga2ed589bea28711e80b92066510a5607d</anchor>
28042822 <arglist>(hwloc_obj_type_t type)</arglist>
28052823 </member>
28062824 <member kind="function">
28072825 <type>int</type>
28082826 <name>hwloc_obj_type_is_dcache</name>
2809 <anchorfile>a00204.html</anchorfile>
2827 <anchorfile>a00207.html</anchorfile>
28102828 <anchor>ga395e48cd221d107e5891689624e1aec4</anchor>
28112829 <arglist>(hwloc_obj_type_t type)</arglist>
28122830 </member>
28132831 <member kind="function">
28142832 <type>int</type>
28152833 <name>hwloc_obj_type_is_icache</name>
2816 <anchorfile>a00204.html</anchorfile>
2834 <anchorfile>a00207.html</anchorfile>
28172835 <anchor>ga8abcee67b9b074332c1866405a3648a9</anchor>
28182836 <arglist>(hwloc_obj_type_t type)</arglist>
28192837 </member>
28212839 <compound kind="group">
28222840 <name>hwlocality_helper_find_cache</name>
28232841 <title>Looking at Cache Objects</title>
2824 <filename>a00205.html</filename>
2842 <filename>a00208.html</filename>
28252843 <member kind="function" static="yes">
28262844 <type>static int</type>
28272845 <name>hwloc_get_cache_type_depth</name>
2828 <anchorfile>a00205.html</anchorfile>
2846 <anchorfile>a00208.html</anchorfile>
28292847 <anchor>gad108a09ce400222fe45545257d575489</anchor>
28302848 <arglist>(hwloc_topology_t topology, unsigned cachelevel, hwloc_obj_cache_type_t cachetype)</arglist>
28312849 </member>
28322850 <member kind="function" static="yes">
28332851 <type>static hwloc_obj_t</type>
28342852 <name>hwloc_get_cache_covering_cpuset</name>
2835 <anchorfile>a00205.html</anchorfile>
2853 <anchorfile>a00208.html</anchorfile>
28362854 <anchor>gac4cd480a5deaa4ada047fdd11ae4c070</anchor>
28372855 <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t set)</arglist>
28382856 </member>
28392857 <member kind="function" static="yes">
28402858 <type>static hwloc_obj_t</type>
28412859 <name>hwloc_get_shared_cache_covering_obj</name>
2842 <anchorfile>a00205.html</anchorfile>
2860 <anchorfile>a00208.html</anchorfile>
28432861 <anchor>ga36f48c32837c7a70b424706e213dcd71</anchor>
28442862 <arglist>(hwloc_topology_t topology, hwloc_obj_t obj)</arglist>
28452863 </member>
28472865 <compound kind="group">
28482866 <name>hwlocality_helper_find_misc</name>
28492867 <title>Finding objects, miscellaneous helpers</title>
2850 <filename>a00206.html</filename>
2868 <filename>a00209.html</filename>
28512869 <member kind="function">
28522870 <type>int</type>
28532871 <name>hwloc_bitmap_singlify_per_core</name>
2854 <anchorfile>a00206.html</anchorfile>
2872 <anchorfile>a00209.html</anchorfile>
28552873 <anchor>ga050646458efc8ca1120d9f124c5ad861</anchor>
28562874 <arglist>(hwloc_topology_t topology, hwloc_bitmap_t cpuset, unsigned which)</arglist>
28572875 </member>
28582876 <member kind="function" static="yes">
28592877 <type>static hwloc_obj_t</type>
28602878 <name>hwloc_get_pu_obj_by_os_index</name>
2861 <anchorfile>a00206.html</anchorfile>
2879 <anchorfile>a00209.html</anchorfile>
28622880 <anchor>ga751c238a4931db5cc0ca3181b7dd7479</anchor>
28632881 <arglist>(hwloc_topology_t topology, unsigned os_index)</arglist>
28642882 </member>
28652883 <member kind="function" static="yes">
28662884 <type>static hwloc_obj_t</type>
28672885 <name>hwloc_get_numanode_obj_by_os_index</name>
2868 <anchorfile>a00206.html</anchorfile>
2886 <anchorfile>a00209.html</anchorfile>
28692887 <anchor>gab89d9ed9edfaa3dd526fb6ee1a1618ea</anchor>
28702888 <arglist>(hwloc_topology_t topology, unsigned os_index)</arglist>
28712889 </member>
28722890 <member kind="function">
28732891 <type>unsigned</type>
28742892 <name>hwloc_get_closest_objs</name>
2875 <anchorfile>a00206.html</anchorfile>
2893 <anchorfile>a00209.html</anchorfile>
28762894 <anchor>ga2cd22a34360643f7f5bad09576dec205</anchor>
28772895 <arglist>(hwloc_topology_t topology, hwloc_obj_t src, hwloc_obj_t *restrict objs, unsigned max)</arglist>
28782896 </member>
28792897 <member kind="function" static="yes">
28802898 <type>static hwloc_obj_t</type>
28812899 <name>hwloc_get_obj_below_by_type</name>
2882 <anchorfile>a00206.html</anchorfile>
2900 <anchorfile>a00209.html</anchorfile>
28832901 <anchor>ga7a0c1046851f7a88bd52f5a1d4ba0a97</anchor>
28842902 <arglist>(hwloc_topology_t topology, hwloc_obj_type_t type1, unsigned idx1, hwloc_obj_type_t type2, unsigned idx2)</arglist>
28852903 </member>
28862904 <member kind="function" static="yes">
28872905 <type>static hwloc_obj_t</type>
28882906 <name>hwloc_get_obj_below_array_by_type</name>
2889 <anchorfile>a00206.html</anchorfile>
2907 <anchorfile>a00209.html</anchorfile>
28902908 <anchor>gacb51295ff3fbd3a96f990f20c6492b1d</anchor>
28912909 <arglist>(hwloc_topology_t topology, int nr, hwloc_obj_type_t *typev, unsigned *idxv)</arglist>
28922910 </member>
2911 <member kind="function">
2912 <type>hwloc_obj_t</type>
2913 <name>hwloc_get_obj_with_same_locality</name>
2914 <anchorfile>a00209.html</anchorfile>
2915 <anchor>gab5df3ad1e8565ea0c2cf06412f6f6233</anchor>
2916 <arglist>(hwloc_topology_t topology, hwloc_obj_t src, hwloc_obj_type_t type, const char *subtype, const char *nameprefix, unsigned long flags)</arglist>
2917 </member>
28932918 </compound>
28942919 <compound kind="group">
28952920 <name>hwlocality_helper_distribute</name>
28962921 <title>Distributing items over a topology</title>
2897 <filename>a00207.html</filename>
2922 <filename>a00210.html</filename>
28982923 <member kind="enumeration">
28992924 <type></type>
29002925 <name>hwloc_distrib_flags_e</name>
2901 <anchorfile>a00207.html</anchorfile>
2926 <anchorfile>a00210.html</anchorfile>
29022927 <anchor>ga8b835295a52b6768a5e6c8abb1f9c54d</anchor>
29032928 <arglist></arglist>
29042929 </member>
29052930 <member kind="enumvalue">
29062931 <name>HWLOC_DISTRIB_FLAG_REVERSE</name>
2907 <anchorfile>a00207.html</anchorfile>
2932 <anchorfile>a00210.html</anchorfile>
29082933 <anchor>gga8b835295a52b6768a5e6c8abb1f9c54da2ca08404bfbebe9ed5f34c3d7635425a</anchor>
29092934 <arglist></arglist>
29102935 </member>
29112936 <member kind="function" static="yes">
29122937 <type>static int</type>
29132938 <name>hwloc_distrib</name>
2914 <anchorfile>a00207.html</anchorfile>
2939 <anchorfile>a00210.html</anchorfile>
29152940 <anchor>ga7b0c28f797c2ff17fa2f244ebbd55b33</anchor>
29162941 <arglist>(hwloc_topology_t topology, hwloc_obj_t *roots, unsigned n_roots, hwloc_cpuset_t *set, unsigned n, int until, unsigned long flags)</arglist>
29172942 </member>
29192944 <compound kind="group">
29202945 <name>hwlocality_helper_topology_sets</name>
29212946 <title>CPU and node sets of entire topologies</title>
2922 <filename>a00208.html</filename>
2947 <filename>a00211.html</filename>
29232948 <member kind="function">
29242949 <type>hwloc_const_cpuset_t</type>
29252950 <name>hwloc_topology_get_complete_cpuset</name>
2926 <anchorfile>a00208.html</anchorfile>
2951 <anchorfile>a00211.html</anchorfile>
29272952 <anchor>gaee30e03391c1ed7dfd617fb5c7bbb033</anchor>
29282953 <arglist>(hwloc_topology_t topology)</arglist>
29292954 </member>
29302955 <member kind="function">
29312956 <type>hwloc_const_cpuset_t</type>
29322957 <name>hwloc_topology_get_topology_cpuset</name>
2933 <anchorfile>a00208.html</anchorfile>
2958 <anchorfile>a00211.html</anchorfile>
29342959 <anchor>ga79212faa07b70dd26588941b17d9fa82</anchor>
29352960 <arglist>(hwloc_topology_t topology)</arglist>
29362961 </member>
29372962 <member kind="function">
29382963 <type>hwloc_const_cpuset_t</type>
29392964 <name>hwloc_topology_get_allowed_cpuset</name>
2940 <anchorfile>a00208.html</anchorfile>
2965 <anchorfile>a00211.html</anchorfile>
29412966 <anchor>ga517d5d68ec9f24583d8933aab713be8e</anchor>
29422967 <arglist>(hwloc_topology_t topology)</arglist>
29432968 </member>
29442969 <member kind="function">
29452970 <type>hwloc_const_nodeset_t</type>
29462971 <name>hwloc_topology_get_complete_nodeset</name>
2947 <anchorfile>a00208.html</anchorfile>
2972 <anchorfile>a00211.html</anchorfile>
29482973 <anchor>ga773fd98949461ef4c1e3170bb0c0418f</anchor>
29492974 <arglist>(hwloc_topology_t topology)</arglist>
29502975 </member>
29512976 <member kind="function">
29522977 <type>hwloc_const_nodeset_t</type>
29532978 <name>hwloc_topology_get_topology_nodeset</name>
2954 <anchorfile>a00208.html</anchorfile>
2979 <anchorfile>a00211.html</anchorfile>
29552980 <anchor>ga3fd37303e99ace8b0d0ea03f95f8c514</anchor>
29562981 <arglist>(hwloc_topology_t topology)</arglist>
29572982 </member>
29582983 <member kind="function">
29592984 <type>hwloc_const_nodeset_t</type>
29602985 <name>hwloc_topology_get_allowed_nodeset</name>
2961 <anchorfile>a00208.html</anchorfile>
2986 <anchorfile>a00211.html</anchorfile>
29622987 <anchor>ga21a4d7237a11e76b912ed4524ab78cbd</anchor>
29632988 <arglist>(hwloc_topology_t topology)</arglist>
29642989 </member>
29662991 <compound kind="group">
29672992 <name>hwlocality_helper_nodeset_convert</name>
29682993 <title>Converting between CPU sets and node sets</title>
2969 <filename>a00209.html</filename>
2994 <filename>a00212.html</filename>
29702995 <member kind="function" static="yes">
29712996 <type>static int</type>
29722997 <name>hwloc_cpuset_to_nodeset</name>
2973 <anchorfile>a00209.html</anchorfile>
2998 <anchorfile>a00212.html</anchorfile>
29742999 <anchor>ga185751c1653fedbeb7cc480840f38cde</anchor>
29753000 <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t _cpuset, hwloc_nodeset_t nodeset)</arglist>
29763001 </member>
29773002 <member kind="function" static="yes">
29783003 <type>static int</type>
29793004 <name>hwloc_cpuset_from_nodeset</name>
2980 <anchorfile>a00209.html</anchorfile>
3005 <anchorfile>a00212.html</anchorfile>
29813006 <anchor>gad5ee8691e08a3538ea7633344c00456d</anchor>
29823007 <arglist>(hwloc_topology_t topology, hwloc_cpuset_t _cpuset, hwloc_const_nodeset_t nodeset)</arglist>
29833008 </member>
29853010 <compound kind="group">
29863011 <name>hwlocality_advanced_io</name>
29873012 <title>Finding I/O objects</title>
2988 <filename>a00210.html</filename>
3013 <filename>a00213.html</filename>
29893014 <member kind="function" static="yes">
29903015 <type>static hwloc_obj_t</type>
29913016 <name>hwloc_get_non_io_ancestor_obj</name>
2992 <anchorfile>a00210.html</anchorfile>
3017 <anchorfile>a00213.html</anchorfile>
29933018 <anchor>gaf139bb61375178e90cc3f1835b452ab6</anchor>
29943019 <arglist>(hwloc_topology_t topology, hwloc_obj_t ioobj)</arglist>
29953020 </member>
29963021 <member kind="function" static="yes">
29973022 <type>static hwloc_obj_t</type>
29983023 <name>hwloc_get_next_pcidev</name>
2999 <anchorfile>a00210.html</anchorfile>
3024 <anchorfile>a00213.html</anchorfile>
30003025 <anchor>ga66470dabce9db19a57c5940a909d0baa</anchor>
30013026 <arglist>(hwloc_topology_t topology, hwloc_obj_t prev)</arglist>
30023027 </member>
30033028 <member kind="function" static="yes">
30043029 <type>static hwloc_obj_t</type>
30053030 <name>hwloc_get_pcidev_by_busid</name>
3006 <anchorfile>a00210.html</anchorfile>
3031 <anchorfile>a00213.html</anchorfile>
30073032 <anchor>gacdbaf0db98872e224b7883a84bfb0455</anchor>
30083033 <arglist>(hwloc_topology_t topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)</arglist>
30093034 </member>
30103035 <member kind="function" static="yes">
30113036 <type>static hwloc_obj_t</type>
30123037 <name>hwloc_get_pcidev_by_busidstring</name>
3013 <anchorfile>a00210.html</anchorfile>
3038 <anchorfile>a00213.html</anchorfile>
30143039 <anchor>ga23a978469353134b3104b846fe2efceb</anchor>
30153040 <arglist>(hwloc_topology_t topology, const char *busid)</arglist>
30163041 </member>
30173042 <member kind="function" static="yes">
30183043 <type>static hwloc_obj_t</type>
30193044 <name>hwloc_get_next_osdev</name>
3020 <anchorfile>a00210.html</anchorfile>
3045 <anchorfile>a00213.html</anchorfile>
30213046 <anchor>ga8b4584c8949e2c5f1c97ba7fe92b8145</anchor>
30223047 <arglist>(hwloc_topology_t topology, hwloc_obj_t prev)</arglist>
30233048 </member>
30243049 <member kind="function" static="yes">
30253050 <type>static hwloc_obj_t</type>
30263051 <name>hwloc_get_next_bridge</name>
3027 <anchorfile>a00210.html</anchorfile>
3052 <anchorfile>a00213.html</anchorfile>
30283053 <anchor>ga9dba22a3f4f701f2a46780ba9a0bbbe7</anchor>
30293054 <arglist>(hwloc_topology_t topology, hwloc_obj_t prev)</arglist>
30303055 </member>
30313056 <member kind="function" static="yes">
30323057 <type>static int</type>
30333058 <name>hwloc_bridge_covers_pcibus</name>
3034 <anchorfile>a00210.html</anchorfile>
3059 <anchorfile>a00213.html</anchorfile>
30353060 <anchor>ga0d92a9462a3d317f29ecb4442a307fb1</anchor>
30363061 <arglist>(hwloc_obj_t bridge, unsigned domain, unsigned bus)</arglist>
30373062 </member>
30393064 <compound kind="group">
30403065 <name>hwlocality_bitmap</name>
30413066 <title>The bitmap API</title>
3042 <filename>a00211.html</filename>
3067 <filename>a00214.html</filename>
30433068 <member kind="define">
30443069 <type>#define</type>
30453070 <name>hwloc_bitmap_foreach_begin</name>
3046 <anchorfile>a00211.html</anchorfile>
3071 <anchorfile>a00214.html</anchorfile>
30473072 <anchor>ga3f6861045a8029ade373510ffa727d2a</anchor>
30483073 <arglist>(id, bitmap)</arglist>
30493074 </member>
30503075 <member kind="define">
30513076 <type>#define</type>
30523077 <name>hwloc_bitmap_foreach_end</name>
3053 <anchorfile>a00211.html</anchorfile>
3078 <anchorfile>a00214.html</anchorfile>
30543079 <anchor>gafcf3246db406218d4e155735b3fa6528</anchor>
30553080 <arglist>()</arglist>
30563081 </member>
30573082 <member kind="typedef">
30583083 <type>struct hwloc_bitmap_s *</type>
30593084 <name>hwloc_bitmap_t</name>
3060 <anchorfile>a00211.html</anchorfile>
3085 <anchorfile>a00214.html</anchorfile>
30613086 <anchor>gaa3c2bf4c776d603dcebbb61b0c923d84</anchor>
30623087 <arglist></arglist>
30633088 </member>
30643089 <member kind="typedef">
30653090 <type>const struct hwloc_bitmap_s *</type>
30663091 <name>hwloc_const_bitmap_t</name>
3067 <anchorfile>a00211.html</anchorfile>
3092 <anchorfile>a00214.html</anchorfile>
30683093 <anchor>gae991a108af01d408be2776c5b2c467b2</anchor>
30693094 <arglist></arglist>
30703095 </member>
30713096 <member kind="function">
30723097 <type>hwloc_bitmap_t</type>
30733098 <name>hwloc_bitmap_alloc</name>
3074 <anchorfile>a00211.html</anchorfile>
3099 <anchorfile>a00214.html</anchorfile>
30753100 <anchor>gadece3d1eb5199fc2fb99bc7dcf1ccc05</anchor>
30763101 <arglist>(void)</arglist>
30773102 </member>
30783103 <member kind="function">
30793104 <type>hwloc_bitmap_t</type>
30803105 <name>hwloc_bitmap_alloc_full</name>
3081 <anchorfile>a00211.html</anchorfile>
3106 <anchorfile>a00214.html</anchorfile>
30823107 <anchor>ga02853b4a224970587b9d7a0e20d857c0</anchor>
30833108 <arglist>(void)</arglist>
30843109 </member>
30853110 <member kind="function">
30863111 <type>void</type>
30873112 <name>hwloc_bitmap_free</name>
3088 <anchorfile>a00211.html</anchorfile>
3113 <anchorfile>a00214.html</anchorfile>
30893114 <anchor>ga156130d85b3a0674d6e0e6770fe68fbe</anchor>
30903115 <arglist>(hwloc_bitmap_t bitmap)</arglist>
30913116 </member>
30923117 <member kind="function">
30933118 <type>hwloc_bitmap_t</type>
30943119 <name>hwloc_bitmap_dup</name>
3095 <anchorfile>a00211.html</anchorfile>
3120 <anchorfile>a00214.html</anchorfile>
30963121 <anchor>gae679434c1a5f41d3560a8a7e2c1b0dee</anchor>
30973122 <arglist>(hwloc_const_bitmap_t bitmap)</arglist>
30983123 </member>
30993124 <member kind="function">
31003125 <type>int</type>
31013126 <name>hwloc_bitmap_copy</name>
3102 <anchorfile>a00211.html</anchorfile>
3127 <anchorfile>a00214.html</anchorfile>
31033128 <anchor>ga72a29824798b48784b8217471ec8f14c</anchor>
31043129 <arglist>(hwloc_bitmap_t dst, hwloc_const_bitmap_t src)</arglist>
31053130 </member>
31063131 <member kind="function">
31073132 <type>int</type>
31083133 <name>hwloc_bitmap_snprintf</name>
3109 <anchorfile>a00211.html</anchorfile>
3134 <anchorfile>a00214.html</anchorfile>
31103135 <anchor>ga9511644657030a021dce9941e3cda583</anchor>
31113136 <arglist>(char *restrict buf, size_t buflen, hwloc_const_bitmap_t bitmap)</arglist>
31123137 </member>
31133138 <member kind="function">
31143139 <type>int</type>
31153140 <name>hwloc_bitmap_asprintf</name>
3116 <anchorfile>a00211.html</anchorfile>
3141 <anchorfile>a00214.html</anchorfile>
31173142 <anchor>ga0fece972134fdecf2da9bc7a11dd827e</anchor>
31183143 <arglist>(char **strp, hwloc_const_bitmap_t bitmap)</arglist>
31193144 </member>
31203145 <member kind="function">
31213146 <type>int</type>
31223147 <name>hwloc_bitmap_sscanf</name>
3123 <anchorfile>a00211.html</anchorfile>
3148 <anchorfile>a00214.html</anchorfile>
31243149 <anchor>ga064a85c643a364b60acbfa0f3663fc18</anchor>
31253150 <arglist>(hwloc_bitmap_t bitmap, const char *restrict string)</arglist>
31263151 </member>
31273152 <member kind="function">
31283153 <type>int</type>
31293154 <name>hwloc_bitmap_list_snprintf</name>
3130 <anchorfile>a00211.html</anchorfile>
3155 <anchorfile>a00214.html</anchorfile>
31313156 <anchor>ga3d06e6447edeb61e56a9ad83f31f0a37</anchor>
31323157 <arglist>(char *restrict buf, size_t buflen, hwloc_const_bitmap_t bitmap)</arglist>
31333158 </member>
31343159 <member kind="function">
31353160 <type>int</type>
31363161 <name>hwloc_bitmap_list_asprintf</name>
3137 <anchorfile>a00211.html</anchorfile>
3162 <anchorfile>a00214.html</anchorfile>
31383163 <anchor>ga39c0f1b02053de66d205c9f8260b3665</anchor>
31393164 <arglist>(char **strp, hwloc_const_bitmap_t bitmap)</arglist>
31403165 </member>
31413166 <member kind="function">
31423167 <type>int</type>
31433168 <name>hwloc_bitmap_list_sscanf</name>
3144 <anchorfile>a00211.html</anchorfile>
3169 <anchorfile>a00214.html</anchorfile>
31453170 <anchor>gaf9314311d482c621e17c6a53a9fe993e</anchor>
31463171 <arglist>(hwloc_bitmap_t bitmap, const char *restrict string)</arglist>
31473172 </member>
31483173 <member kind="function">
31493174 <type>int</type>
31503175 <name>hwloc_bitmap_taskset_snprintf</name>
3151 <anchorfile>a00211.html</anchorfile>
3176 <anchorfile>a00214.html</anchorfile>
31523177 <anchor>ga5beb68a987fe48e5c5edef06ab260e14</anchor>
31533178 <arglist>(char *restrict buf, size_t buflen, hwloc_const_bitmap_t bitmap)</arglist>
31543179 </member>
31553180 <member kind="function">
31563181 <type>int</type>
31573182 <name>hwloc_bitmap_taskset_asprintf</name>
3158 <anchorfile>a00211.html</anchorfile>
3183 <anchorfile>a00214.html</anchorfile>
31593184 <anchor>ga391312513f17c985d871f18367c59512</anchor>
31603185 <arglist>(char **strp, hwloc_const_bitmap_t bitmap)</arglist>
31613186 </member>
31623187 <member kind="function">
31633188 <type>int</type>
31643189 <name>hwloc_bitmap_taskset_sscanf</name>
3165 <anchorfile>a00211.html</anchorfile>
3190 <anchorfile>a00214.html</anchorfile>
31663191 <anchor>ga4f23db5041240e03e348752f8bd6ec2d</anchor>
31673192 <arglist>(hwloc_bitmap_t bitmap, const char *restrict string)</arglist>
31683193 </member>
31693194 <member kind="function">
31703195 <type>void</type>
31713196 <name>hwloc_bitmap_zero</name>
3172 <anchorfile>a00211.html</anchorfile>
3197 <anchorfile>a00214.html</anchorfile>
31733198 <anchor>gaa97c5217613c8cae9862287170ea2132</anchor>
31743199 <arglist>(hwloc_bitmap_t bitmap)</arglist>
31753200 </member>
31763201 <member kind="function">
31773202 <type>void</type>
31783203 <name>hwloc_bitmap_fill</name>
3179 <anchorfile>a00211.html</anchorfile>
3204 <anchorfile>a00214.html</anchorfile>
31803205 <anchor>ga07b2de8786b3cdb22f21d9dd42588275</anchor>
31813206 <arglist>(hwloc_bitmap_t bitmap)</arglist>
31823207 </member>
31833208 <member kind="function">
31843209 <type>int</type>
31853210 <name>hwloc_bitmap_only</name>
3186 <anchorfile>a00211.html</anchorfile>
3211 <anchorfile>a00214.html</anchorfile>
31873212 <anchor>ga10be0840cdeb7ce26d862819dd303baa</anchor>
31883213 <arglist>(hwloc_bitmap_t bitmap, unsigned id)</arglist>
31893214 </member>
31903215 <member kind="function">
31913216 <type>int</type>
31923217 <name>hwloc_bitmap_allbut</name>
3193 <anchorfile>a00211.html</anchorfile>
3218 <anchorfile>a00214.html</anchorfile>
31943219 <anchor>ga06d505f8a1c0a536614f65f503ee6d93</anchor>
31953220 <arglist>(hwloc_bitmap_t bitmap, unsigned id)</arglist>
31963221 </member>
31973222 <member kind="function">
31983223 <type>int</type>
31993224 <name>hwloc_bitmap_from_ulong</name>
3200 <anchorfile>a00211.html</anchorfile>
3225 <anchorfile>a00214.html</anchorfile>
32013226 <anchor>gad59b0ebeb29c1bfabbb2a379e55c1159</anchor>
32023227 <arglist>(hwloc_bitmap_t bitmap, unsigned long mask)</arglist>
32033228 </member>
32043229 <member kind="function">
32053230 <type>int</type>
32063231 <name>hwloc_bitmap_from_ith_ulong</name>
3207 <anchorfile>a00211.html</anchorfile>
3232 <anchorfile>a00214.html</anchorfile>
32083233 <anchor>ga4947c46d47bcfcd3faf3f59569be3e37</anchor>
32093234 <arglist>(hwloc_bitmap_t bitmap, unsigned i, unsigned long mask)</arglist>
32103235 </member>
32113236 <member kind="function">
32123237 <type>int</type>
32133238 <name>hwloc_bitmap_from_ulongs</name>
3214 <anchorfile>a00211.html</anchorfile>
3239 <anchorfile>a00214.html</anchorfile>
32153240 <anchor>gabcfef22f6fc4d4b33f068dd91a1c38f5</anchor>
32163241 <arglist>(hwloc_bitmap_t bitmap, unsigned nr, const unsigned long *masks)</arglist>
32173242 </member>
32183243 <member kind="function">
32193244 <type>int</type>
32203245 <name>hwloc_bitmap_set</name>
3221 <anchorfile>a00211.html</anchorfile>
3246 <anchorfile>a00214.html</anchorfile>
32223247 <anchor>ga062dbff93baeff3b425a7260c5463646</anchor>
32233248 <arglist>(hwloc_bitmap_t bitmap, unsigned id)</arglist>
32243249 </member>
32253250 <member kind="function">
32263251 <type>int</type>
32273252 <name>hwloc_bitmap_set_range</name>
3228 <anchorfile>a00211.html</anchorfile>
3253 <anchorfile>a00214.html</anchorfile>
32293254 <anchor>ga9c9a8433732fb9f24899e7aa4c014d7e</anchor>
32303255 <arglist>(hwloc_bitmap_t bitmap, unsigned begin, int end)</arglist>
32313256 </member>
32323257 <member kind="function">
32333258 <type>int</type>
32343259 <name>hwloc_bitmap_set_ith_ulong</name>
3235 <anchorfile>a00211.html</anchorfile>
3260 <anchorfile>a00214.html</anchorfile>
32363261 <anchor>ga3daeed965c35c6d2fd4820a318219985</anchor>
32373262 <arglist>(hwloc_bitmap_t bitmap, unsigned i, unsigned long mask)</arglist>
32383263 </member>
32393264 <member kind="function">
32403265 <type>int</type>
32413266 <name>hwloc_bitmap_clr</name>
3242 <anchorfile>a00211.html</anchorfile>
3267 <anchorfile>a00214.html</anchorfile>
32433268 <anchor>gaf20bb350b6844d08931a064a73f86743</anchor>
32443269 <arglist>(hwloc_bitmap_t bitmap, unsigned id)</arglist>
32453270 </member>
32463271 <member kind="function">
32473272 <type>int</type>
32483273 <name>hwloc_bitmap_clr_range</name>
3249 <anchorfile>a00211.html</anchorfile>
3274 <anchorfile>a00214.html</anchorfile>
32503275 <anchor>ga833776709df94d727f8c22304b3388cf</anchor>
32513276 <arglist>(hwloc_bitmap_t bitmap, unsigned begin, int end)</arglist>
32523277 </member>
32533278 <member kind="function">
32543279 <type>int</type>
32553280 <name>hwloc_bitmap_singlify</name>
3256 <anchorfile>a00211.html</anchorfile>
3281 <anchorfile>a00214.html</anchorfile>
32573282 <anchor>gaa611a77c092e679246afdf9a60d5db8b</anchor>
32583283 <arglist>(hwloc_bitmap_t bitmap)</arglist>
32593284 </member>
32603285 <member kind="function">
32613286 <type>unsigned long</type>
32623287 <name>hwloc_bitmap_to_ulong</name>
3263 <anchorfile>a00211.html</anchorfile>
3288 <anchorfile>a00214.html</anchorfile>
32643289 <anchor>gab6a6bae22a33ec6adfc169a953c13e6c</anchor>
32653290 <arglist>(hwloc_const_bitmap_t bitmap)</arglist>
32663291 </member>
32673292 <member kind="function">
32683293 <type>unsigned long</type>
32693294 <name>hwloc_bitmap_to_ith_ulong</name>
3270 <anchorfile>a00211.html</anchorfile>
3295 <anchorfile>a00214.html</anchorfile>
32713296 <anchor>gac92e6404f648d6b99d2c626b05b2ffa4</anchor>
32723297 <arglist>(hwloc_const_bitmap_t bitmap, unsigned i)</arglist>
32733298 </member>
32743299 <member kind="function">
32753300 <type>int</type>
32763301 <name>hwloc_bitmap_to_ulongs</name>
3277 <anchorfile>a00211.html</anchorfile>
3302 <anchorfile>a00214.html</anchorfile>
32783303 <anchor>gacd215a2348732de25d94a4ecd76d528c</anchor>
32793304 <arglist>(hwloc_const_bitmap_t bitmap, unsigned nr, unsigned long *masks)</arglist>
32803305 </member>
32813306 <member kind="function">
32823307 <type>int</type>
32833308 <name>hwloc_bitmap_nr_ulongs</name>
3284 <anchorfile>a00211.html</anchorfile>
3309 <anchorfile>a00214.html</anchorfile>
32853310 <anchor>gac0744734d761d65c977aece565364908</anchor>
32863311 <arglist>(hwloc_const_bitmap_t bitmap)</arglist>
32873312 </member>
32883313 <member kind="function">
32893314 <type>int</type>
32903315 <name>hwloc_bitmap_isset</name>
3291 <anchorfile>a00211.html</anchorfile>
3316 <anchorfile>a00214.html</anchorfile>
32923317 <anchor>ga11340dd487f110bb84f0a6e4ae90bd06</anchor>
32933318 <arglist>(hwloc_const_bitmap_t bitmap, unsigned id)</arglist>
32943319 </member>
32953320 <member kind="function">
32963321 <type>int</type>
32973322 <name>hwloc_bitmap_iszero</name>
3298 <anchorfile>a00211.html</anchorfile>
3323 <anchorfile>a00214.html</anchorfile>
32993324 <anchor>ga5b64be28f5a7176ed8ad0d6a90bdf108</anchor>
33003325 <arglist>(hwloc_const_bitmap_t bitmap)</arglist>
33013326 </member>
33023327 <member kind="function">
33033328 <type>int</type>
33043329 <name>hwloc_bitmap_isfull</name>
3305 <anchorfile>a00211.html</anchorfile>
3330 <anchorfile>a00214.html</anchorfile>
33063331 <anchor>ga5fdcb8c19c336511c37076d649e74af4</anchor>
33073332 <arglist>(hwloc_const_bitmap_t bitmap)</arglist>
33083333 </member>
33093334 <member kind="function">
33103335 <type>int</type>
33113336 <name>hwloc_bitmap_first</name>
3312 <anchorfile>a00211.html</anchorfile>
3337 <anchorfile>a00214.html</anchorfile>
33133338 <anchor>ga3ec1ced43afadf8c0a7197320bc016ed</anchor>
33143339 <arglist>(hwloc_const_bitmap_t bitmap)</arglist>
33153340 </member>
33163341 <member kind="function">
33173342 <type>int</type>
33183343 <name>hwloc_bitmap_next</name>
3319 <anchorfile>a00211.html</anchorfile>
3344 <anchorfile>a00214.html</anchorfile>
33203345 <anchor>gaab7240b4b644693b775dad17b44ffd68</anchor>
33213346 <arglist>(hwloc_const_bitmap_t bitmap, int prev)</arglist>
33223347 </member>
33233348 <member kind="function">
33243349 <type>int</type>
33253350 <name>hwloc_bitmap_last</name>
3326 <anchorfile>a00211.html</anchorfile>
3351 <anchorfile>a00214.html</anchorfile>
33273352 <anchor>ga3d9b08b060a59bbab5a4ea6d0a1ed7a6</anchor>
33283353 <arglist>(hwloc_const_bitmap_t bitmap)</arglist>
33293354 </member>
33303355 <member kind="function">
33313356 <type>int</type>
33323357 <name>hwloc_bitmap_weight</name>
3333 <anchorfile>a00211.html</anchorfile>
3358 <anchorfile>a00214.html</anchorfile>
33343359 <anchor>ga0200466842c0e1f5da75e84dde460b10</anchor>
33353360 <arglist>(hwloc_const_bitmap_t bitmap)</arglist>
33363361 </member>
33373362 <member kind="function">
33383363 <type>int</type>
33393364 <name>hwloc_bitmap_first_unset</name>
3340 <anchorfile>a00211.html</anchorfile>
3365 <anchorfile>a00214.html</anchorfile>
33413366 <anchor>gae408841487b288e148a478ba0465c99e</anchor>
33423367 <arglist>(hwloc_const_bitmap_t bitmap)</arglist>
33433368 </member>
33443369 <member kind="function">
33453370 <type>int</type>
33463371 <name>hwloc_bitmap_next_unset</name>
3347 <anchorfile>a00211.html</anchorfile>
3372 <anchorfile>a00214.html</anchorfile>
33483373 <anchor>ga9653af34d1460ef106b7df25af4cdca8</anchor>
33493374 <arglist>(hwloc_const_bitmap_t bitmap, int prev)</arglist>
33503375 </member>
33513376 <member kind="function">
33523377 <type>int</type>
33533378 <name>hwloc_bitmap_last_unset</name>
3354 <anchorfile>a00211.html</anchorfile>
3379 <anchorfile>a00214.html</anchorfile>
33553380 <anchor>ga45d49aeb45c7da631b1480a93dc3fc92</anchor>
33563381 <arglist>(hwloc_const_bitmap_t bitmap)</arglist>
33573382 </member>
33583383 <member kind="function">
33593384 <type>int</type>
33603385 <name>hwloc_bitmap_or</name>
3361 <anchorfile>a00211.html</anchorfile>
3386 <anchorfile>a00214.html</anchorfile>
33623387 <anchor>ga120b8aefb9ce7ef349929656359b1859</anchor>
33633388 <arglist>(hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</arglist>
33643389 </member>
33653390 <member kind="function">
33663391 <type>int</type>
33673392 <name>hwloc_bitmap_and</name>
3368 <anchorfile>a00211.html</anchorfile>
3393 <anchorfile>a00214.html</anchorfile>
33693394 <anchor>ga674533016ffed922a28b4f0b49b82cd4</anchor>
33703395 <arglist>(hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</arglist>
33713396 </member>
33723397 <member kind="function">
33733398 <type>int</type>
33743399 <name>hwloc_bitmap_andnot</name>
3375 <anchorfile>a00211.html</anchorfile>
3400 <anchorfile>a00214.html</anchorfile>
33763401 <anchor>ga7ca5c72db65406b85aca032c8a990f9e</anchor>
33773402 <arglist>(hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</arglist>
33783403 </member>
33793404 <member kind="function">
33803405 <type>int</type>
33813406 <name>hwloc_bitmap_xor</name>
3382 <anchorfile>a00211.html</anchorfile>
3407 <anchorfile>a00214.html</anchorfile>
33833408 <anchor>ga205508218e09cb9befd0687f16409f09</anchor>
33843409 <arglist>(hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</arglist>
33853410 </member>
33863411 <member kind="function">
33873412 <type>int</type>
33883413 <name>hwloc_bitmap_not</name>
3389 <anchorfile>a00211.html</anchorfile>
3414 <anchorfile>a00214.html</anchorfile>
33903415 <anchor>ga84cfdb4f8ab8c1f7e097728e613a2a3f</anchor>
33913416 <arglist>(hwloc_bitmap_t res, hwloc_const_bitmap_t bitmap)</arglist>
33923417 </member>
33933418 <member kind="function">
33943419 <type>int</type>
33953420 <name>hwloc_bitmap_intersects</name>
3396 <anchorfile>a00211.html</anchorfile>
3421 <anchorfile>a00214.html</anchorfile>
33973422 <anchor>gaefa070f9232857ba5a57297ea9a08ea2</anchor>
33983423 <arglist>(hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</arglist>
33993424 </member>
34003425 <member kind="function">
34013426 <type>int</type>
34023427 <name>hwloc_bitmap_isincluded</name>
3403 <anchorfile>a00211.html</anchorfile>
3428 <anchorfile>a00214.html</anchorfile>
34043429 <anchor>ga0526e03db81956fb02acc8260b66d6a4</anchor>
34053430 <arglist>(hwloc_const_bitmap_t sub_bitmap, hwloc_const_bitmap_t super_bitmap)</arglist>
34063431 </member>
34073432 <member kind="function">
34083433 <type>int</type>
34093434 <name>hwloc_bitmap_isequal</name>
3410 <anchorfile>a00211.html</anchorfile>
3435 <anchorfile>a00214.html</anchorfile>
34113436 <anchor>ga32376b1405e57472b73c3aa53bb39663</anchor>
34123437 <arglist>(hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</arglist>
34133438 </member>
34143439 <member kind="function">
34153440 <type>int</type>
34163441 <name>hwloc_bitmap_compare_first</name>
3417 <anchorfile>a00211.html</anchorfile>
3442 <anchorfile>a00214.html</anchorfile>
34183443 <anchor>gaa39cda1510ab721b5c012c76ead72365</anchor>
34193444 <arglist>(hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</arglist>
34203445 </member>
34213446 <member kind="function">
34223447 <type>int</type>
34233448 <name>hwloc_bitmap_compare</name>
3424 <anchorfile>a00211.html</anchorfile>
3449 <anchorfile>a00214.html</anchorfile>
34253450 <anchor>ga14cdbc0ef0a705e84999bd48a2e649f3</anchor>
34263451 <arglist>(hwloc_const_bitmap_t bitmap1, hwloc_const_bitmap_t bitmap2)</arglist>
34273452 </member>
34293454 <compound kind="group">
34303455 <name>hwlocality_xmlexport</name>
34313456 <title>Exporting Topologies to XML</title>
3432 <filename>a00212.html</filename>
3457 <filename>a00215.html</filename>
34333458 <member kind="enumeration">
34343459 <type></type>
34353460 <name>hwloc_topology_export_xml_flags_e</name>
3436 <anchorfile>a00212.html</anchorfile>
3461 <anchorfile>a00215.html</anchorfile>
34373462 <anchor>ga0eb99636aff71fe2704e1fa0ffe8c18d</anchor>
34383463 <arglist></arglist>
34393464 </member>
34403465 <member kind="enumvalue">
34413466 <name>HWLOC_TOPOLOGY_EXPORT_XML_FLAG_V1</name>
3442 <anchorfile>a00212.html</anchorfile>
3467 <anchorfile>a00215.html</anchorfile>
34433468 <anchor>gga0eb99636aff71fe2704e1fa0ffe8c18dae7d6d96546131ef0043867b836b02e0f</anchor>
34443469 <arglist></arglist>
34453470 </member>
34463471 <member kind="function">
34473472 <type>int</type>
34483473 <name>hwloc_topology_export_xml</name>
3449 <anchorfile>a00212.html</anchorfile>
3474 <anchorfile>a00215.html</anchorfile>
34503475 <anchor>ga333f79975b4eeb28a3d8fad3373583ce</anchor>
34513476 <arglist>(hwloc_topology_t topology, const char *xmlpath, unsigned long flags)</arglist>
34523477 </member>
34533478 <member kind="function">
34543479 <type>int</type>
34553480 <name>hwloc_topology_export_xmlbuffer</name>
3456 <anchorfile>a00212.html</anchorfile>
3481 <anchorfile>a00215.html</anchorfile>
34573482 <anchor>gad33b7f7c11db10459505a3b1634fd3f1</anchor>
34583483 <arglist>(hwloc_topology_t topology, char **xmlbuffer, int *buflen, unsigned long flags)</arglist>
34593484 </member>
34603485 <member kind="function">
34613486 <type>void</type>
34623487 <name>hwloc_free_xmlbuffer</name>
3463 <anchorfile>a00212.html</anchorfile>
3488 <anchorfile>a00215.html</anchorfile>
34643489 <anchor>ga293e4a6489f15fd16ad22a5734561cf1</anchor>
34653490 <arglist>(hwloc_topology_t topology, char *xmlbuffer)</arglist>
34663491 </member>
34673492 <member kind="function">
34683493 <type>void</type>
34693494 <name>hwloc_topology_set_userdata_export_callback</name>
3470 <anchorfile>a00212.html</anchorfile>
3495 <anchorfile>a00215.html</anchorfile>
34713496 <anchor>ga9d6ff0f7a8dd45be9aa8575ef31978cc</anchor>
34723497 <arglist>(hwloc_topology_t topology, void(*export_cb)(void *reserved, hwloc_topology_t topology, hwloc_obj_t obj))</arglist>
34733498 </member>
34743499 <member kind="function">
34753500 <type>int</type>
34763501 <name>hwloc_export_obj_userdata</name>
3477 <anchorfile>a00212.html</anchorfile>
3502 <anchorfile>a00215.html</anchorfile>
34783503 <anchor>gaa541bdd628416dbbe97d0df69d3de958</anchor>
34793504 <arglist>(void *reserved, hwloc_topology_t topology, hwloc_obj_t obj, const char *name, const void *buffer, size_t length)</arglist>
34803505 </member>
34813506 <member kind="function">
34823507 <type>int</type>
34833508 <name>hwloc_export_obj_userdata_base64</name>
3484 <anchorfile>a00212.html</anchorfile>
3509 <anchorfile>a00215.html</anchorfile>
34853510 <anchor>ga1b7358137cec27bd073f58a606ecbaba</anchor>
34863511 <arglist>(void *reserved, hwloc_topology_t topology, hwloc_obj_t obj, const char *name, const void *buffer, size_t length)</arglist>
34873512 </member>
34883513 <member kind="function">
34893514 <type>void</type>
34903515 <name>hwloc_topology_set_userdata_import_callback</name>
3491 <anchorfile>a00212.html</anchorfile>
3516 <anchorfile>a00215.html</anchorfile>
34923517 <anchor>ga5ac6917ea7289955fb1ffda4353af9b0</anchor>
34933518 <arglist>(hwloc_topology_t topology, void(*import_cb)(hwloc_topology_t topology, hwloc_obj_t obj, const char *name, const void *buffer, size_t length))</arglist>
34943519 </member>
34963521 <compound kind="group">
34973522 <name>hwlocality_syntheticexport</name>
34983523 <title>Exporting Topologies to Synthetic</title>
3499 <filename>a00213.html</filename>
3524 <filename>a00216.html</filename>
35003525 <member kind="enumeration">
35013526 <type></type>
35023527 <name>hwloc_topology_export_synthetic_flags_e</name>
3503 <anchorfile>a00213.html</anchorfile>
3528 <anchorfile>a00216.html</anchorfile>
35043529 <anchor>ga7ac6f97cc40bd50c40285084f869ba63</anchor>
35053530 <arglist></arglist>
35063531 </member>
35073532 <member kind="enumvalue">
35083533 <name>HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_EXTENDED_TYPES</name>
3509 <anchorfile>a00213.html</anchorfile>
3534 <anchorfile>a00216.html</anchorfile>
35103535 <anchor>gga7ac6f97cc40bd50c40285084f869ba63a3b3bd4ba2ef9990810865e561034ccc9</anchor>
35113536 <arglist></arglist>
35123537 </member>
35133538 <member kind="enumvalue">
35143539 <name>HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_NO_ATTRS</name>
3515 <anchorfile>a00213.html</anchorfile>
3540 <anchorfile>a00216.html</anchorfile>
35163541 <anchor>gga7ac6f97cc40bd50c40285084f869ba63aaa2702ffba050bab079b3041aec737d4</anchor>
35173542 <arglist></arglist>
35183543 </member>
35193544 <member kind="enumvalue">
35203545 <name>HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_V1</name>
3521 <anchorfile>a00213.html</anchorfile>
3546 <anchorfile>a00216.html</anchorfile>
35223547 <anchor>gga7ac6f97cc40bd50c40285084f869ba63a7896bdf4ccfcdcd09a9f76c0f5e3a5b8</anchor>
35233548 <arglist></arglist>
35243549 </member>
35253550 <member kind="enumvalue">
35263551 <name>HWLOC_TOPOLOGY_EXPORT_SYNTHETIC_FLAG_IGNORE_MEMORY</name>
3527 <anchorfile>a00213.html</anchorfile>
3552 <anchorfile>a00216.html</anchorfile>
35283553 <anchor>gga7ac6f97cc40bd50c40285084f869ba63a22c57cf18e1da4a6c584fb783b552f9f</anchor>
35293554 <arglist></arglist>
35303555 </member>
35313556 <member kind="function">
35323557 <type>int</type>
35333558 <name>hwloc_topology_export_synthetic</name>
3534 <anchorfile>a00213.html</anchorfile>
3559 <anchorfile>a00216.html</anchorfile>
35353560 <anchor>ga24b7864a1c588309c4749f621f03b4c7</anchor>
35363561 <arglist>(hwloc_topology_t topology, char *buffer, size_t buflen, unsigned long flags)</arglist>
35373562 </member>
35393564 <compound kind="group">
35403565 <name>hwlocality_distances_get</name>
35413566 <title>Retrieve distances between objects</title>
3542 <filename>a00214.html</filename>
3567 <filename>a00217.html</filename>
35433568 <class kind="struct">hwloc_distances_s</class>
35443569 <member kind="enumeration">
35453570 <type></type>
35463571 <name>hwloc_distances_kind_e</name>
3547 <anchorfile>a00214.html</anchorfile>
3572 <anchorfile>a00217.html</anchorfile>
35483573 <anchor>gab1bb10d3adb85b52cdc6fe5a7f74f108</anchor>
35493574 <arglist></arglist>
35503575 </member>
35513576 <member kind="enumvalue">
35523577 <name>HWLOC_DISTANCES_KIND_FROM_OS</name>
3553 <anchorfile>a00214.html</anchorfile>
3578 <anchorfile>a00217.html</anchorfile>
35543579 <anchor>ggab1bb10d3adb85b52cdc6fe5a7f74f108a90dc38248c8d5392d4dd3e88f391e984</anchor>
35553580 <arglist></arglist>
35563581 </member>
35573582 <member kind="enumvalue">
35583583 <name>HWLOC_DISTANCES_KIND_FROM_USER</name>
3559 <anchorfile>a00214.html</anchorfile>
3584 <anchorfile>a00217.html</anchorfile>
35603585 <anchor>ggab1bb10d3adb85b52cdc6fe5a7f74f108a0148d7f9be833a04f5a55455437c227b</anchor>
35613586 <arglist></arglist>
35623587 </member>
35633588 <member kind="enumvalue">
35643589 <name>HWLOC_DISTANCES_KIND_MEANS_LATENCY</name>
3565 <anchorfile>a00214.html</anchorfile>
3590 <anchorfile>a00217.html</anchorfile>
35663591 <anchor>ggab1bb10d3adb85b52cdc6fe5a7f74f108afd6a3503fbc8f7c1a31235373cefc4c6</anchor>
35673592 <arglist></arglist>
35683593 </member>
35693594 <member kind="enumvalue">
35703595 <name>HWLOC_DISTANCES_KIND_MEANS_BANDWIDTH</name>
3571 <anchorfile>a00214.html</anchorfile>
3596 <anchorfile>a00217.html</anchorfile>
35723597 <anchor>ggab1bb10d3adb85b52cdc6fe5a7f74f108a41b19f141a3c0ffe85f9affaca4b0293</anchor>
35733598 <arglist></arglist>
35743599 </member>
35753600 <member kind="enumvalue">
35763601 <name>HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES</name>
3577 <anchorfile>a00214.html</anchorfile>
3602 <anchorfile>a00217.html</anchorfile>
35783603 <anchor>ggab1bb10d3adb85b52cdc6fe5a7f74f108aa6cf2b6dfcf148b65952f811814efbe1</anchor>
35793604 <arglist></arglist>
35803605 </member>
3606 <member kind="enumeration">
3607 <type></type>
3608 <name>hwloc_distances_transform_e</name>
3609 <anchorfile>a00217.html</anchorfile>
3610 <anchor>ga42859b651adec5ef0aaacb53ff220b00</anchor>
3611 <arglist></arglist>
3612 </member>
3613 <member kind="enumvalue">
3614 <name>HWLOC_DISTANCES_TRANSFORM_REMOVE_NULL</name>
3615 <anchorfile>a00217.html</anchorfile>
3616 <anchor>gga42859b651adec5ef0aaacb53ff220b00a4b7bdb7e3ccca30e03b7ae671e7f6dc1</anchor>
3617 <arglist></arglist>
3618 </member>
3619 <member kind="enumvalue">
3620 <name>HWLOC_DISTANCES_TRANSFORM_LINKS</name>
3621 <anchorfile>a00217.html</anchorfile>
3622 <anchor>gga42859b651adec5ef0aaacb53ff220b00a441e6bb393558319af3bb1f89f51f44d</anchor>
3623 <arglist></arglist>
3624 </member>
3625 <member kind="enumvalue">
3626 <name>HWLOC_DISTANCES_TRANSFORM_MERGE_SWITCH_PORTS</name>
3627 <anchorfile>a00217.html</anchorfile>
3628 <anchor>gga42859b651adec5ef0aaacb53ff220b00a3d2aaf03e17be54eddbb94aab327fded</anchor>
3629 <arglist></arglist>
3630 </member>
3631 <member kind="enumvalue">
3632 <name>HWLOC_DISTANCES_TRANSFORM_TRANSITIVE_CLOSURE</name>
3633 <anchorfile>a00217.html</anchorfile>
3634 <anchor>gga42859b651adec5ef0aaacb53ff220b00a1264abf9b9463f252995f37eb1057047</anchor>
3635 <arglist></arglist>
3636 </member>
35813637 <member kind="function">
35823638 <type>int</type>
35833639 <name>hwloc_distances_get</name>
3584 <anchorfile>a00214.html</anchorfile>
3640 <anchorfile>a00217.html</anchorfile>
35853641 <anchor>ga613e6b2a5d0f06626ee8d0c12fa46691</anchor>
35863642 <arglist>(hwloc_topology_t topology, unsigned *nr, struct hwloc_distances_s **distances, unsigned long kind, unsigned long flags)</arglist>
35873643 </member>
35883644 <member kind="function">
35893645 <type>int</type>
35903646 <name>hwloc_distances_get_by_depth</name>
3591 <anchorfile>a00214.html</anchorfile>
3647 <anchorfile>a00217.html</anchorfile>
35923648 <anchor>ga5d1d35eccfcc2ebcef71a10972ce9b03</anchor>
35933649 <arglist>(hwloc_topology_t topology, int depth, unsigned *nr, struct hwloc_distances_s **distances, unsigned long kind, unsigned long flags)</arglist>
35943650 </member>
35953651 <member kind="function">
35963652 <type>int</type>
35973653 <name>hwloc_distances_get_by_type</name>
3598 <anchorfile>a00214.html</anchorfile>
3654 <anchorfile>a00217.html</anchorfile>
35993655 <anchor>gaaa6bfbc20072a4f4de132eec859067f6</anchor>
36003656 <arglist>(hwloc_topology_t topology, hwloc_obj_type_t type, unsigned *nr, struct hwloc_distances_s **distances, unsigned long kind, unsigned long flags)</arglist>
36013657 </member>
36023658 <member kind="function">
36033659 <type>int</type>
36043660 <name>hwloc_distances_get_by_name</name>
3605 <anchorfile>a00214.html</anchorfile>
3661 <anchorfile>a00217.html</anchorfile>
36063662 <anchor>gaa457f35b8745ca41ec17797c0d7b20f0</anchor>
36073663 <arglist>(hwloc_topology_t topology, const char *name, unsigned *nr, struct hwloc_distances_s **distances, unsigned long flags)</arglist>
36083664 </member>
36093665 <member kind="function">
36103666 <type>const char *</type>
36113667 <name>hwloc_distances_get_name</name>
3612 <anchorfile>a00214.html</anchorfile>
3668 <anchorfile>a00217.html</anchorfile>
36133669 <anchor>gaa6f9697028c589cef0458edef5fe273f</anchor>
36143670 <arglist>(hwloc_topology_t topology, struct hwloc_distances_s *distances)</arglist>
36153671 </member>
36163672 <member kind="function">
36173673 <type>void</type>
36183674 <name>hwloc_distances_release</name>
3619 <anchorfile>a00214.html</anchorfile>
3675 <anchorfile>a00217.html</anchorfile>
36203676 <anchor>ga1dd78c1f9acd54f26aba0e284e97e51d</anchor>
36213677 <arglist>(hwloc_topology_t topology, struct hwloc_distances_s *distances)</arglist>
36223678 </member>
3679 <member kind="function">
3680 <type>int</type>
3681 <name>hwloc_distances_transform</name>
3682 <anchorfile>a00217.html</anchorfile>
3683 <anchor>gabcadd041f3072999d68f2d94e38670f7</anchor>
3684 <arglist>(hwloc_topology_t topology, struct hwloc_distances_s *distances, enum hwloc_distances_transform_e transform, void *transform_attr, unsigned long flags)</arglist>
3685 </member>
36233686 </compound>
36243687 <compound kind="group">
36253688 <name>hwlocality_distances_consult</name>
36263689 <title>Helpers for consulting distance matrices</title>
3627 <filename>a00215.html</filename>
3690 <filename>a00218.html</filename>
36283691 <member kind="function" static="yes">
36293692 <type>static int</type>
36303693 <name>hwloc_distances_obj_index</name>
3631 <anchorfile>a00215.html</anchorfile>
3694 <anchorfile>a00218.html</anchorfile>
36323695 <anchor>gab9e770c7d56c5d6040f26bd1dc8854cd</anchor>
36333696 <arglist>(struct hwloc_distances_s *distances, hwloc_obj_t obj)</arglist>
36343697 </member>
36353698 <member kind="function" static="yes">
36363699 <type>static int</type>
36373700 <name>hwloc_distances_obj_pair_values</name>
3638 <anchorfile>a00215.html</anchorfile>
3701 <anchorfile>a00218.html</anchorfile>
36393702 <anchor>ga3c665b23056e3269f777b21a67148c82</anchor>
36403703 <arglist>(struct hwloc_distances_s *distances, hwloc_obj_t obj1, hwloc_obj_t obj2, hwloc_uint64_t *value1to2, hwloc_uint64_t *value2to1)</arglist>
36413704 </member>
36423705 </compound>
36433706 <compound kind="group">
36443707 <name>hwlocality_distances_add</name>
3645 <title>Add or remove distances between objects</title>
3646 <filename>a00216.html</filename>
3708 <title>Add distances between objects</title>
3709 <filename>a00219.html</filename>
3710 <member kind="typedef">
3711 <type>void *</type>
3712 <name>hwloc_distances_add_handle_t</name>
3713 <anchorfile>a00219.html</anchorfile>
3714 <anchor>ga554a4c1e315265f961830e2b616e4989</anchor>
3715 <arglist></arglist>
3716 </member>
36473717 <member kind="enumeration">
36483718 <type></type>
36493719 <name>hwloc_distances_add_flag_e</name>
3650 <anchorfile>a00216.html</anchorfile>
3720 <anchorfile>a00219.html</anchorfile>
36513721 <anchor>ga22428b6bab271411e3834e6b4ca22e37</anchor>
36523722 <arglist></arglist>
36533723 </member>
36543724 <member kind="enumvalue">
36553725 <name>HWLOC_DISTANCES_ADD_FLAG_GROUP</name>
3656 <anchorfile>a00216.html</anchorfile>
3726 <anchorfile>a00219.html</anchorfile>
36573727 <anchor>gga22428b6bab271411e3834e6b4ca22e37a7f6baba797d70538d03c9d13052c62ab</anchor>
36583728 <arglist></arglist>
36593729 </member>
36603730 <member kind="enumvalue">
36613731 <name>HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE</name>
3662 <anchorfile>a00216.html</anchorfile>
3732 <anchorfile>a00219.html</anchorfile>
36633733 <anchor>gga22428b6bab271411e3834e6b4ca22e37a5233ccf631c3bc53dd5c3e7a5d5c9b77</anchor>
36643734 <arglist></arglist>
36653735 </member>
36663736 <member kind="function">
3667 <type>int</type>
3668 <name>hwloc_distances_add</name>
3669 <anchorfile>a00216.html</anchorfile>
3670 <anchor>gac5a71d96cd86efe31d6f8d282aae3d97</anchor>
3671 <arglist>(hwloc_topology_t topology, unsigned nbobjs, hwloc_obj_t *objs, hwloc_uint64_t *values, unsigned long kind, unsigned long flags)</arglist>
3672 </member>
3737 <type>hwloc_distances_add_handle_t</type>
3738 <name>hwloc_distances_add_create</name>
3739 <anchorfile>a00219.html</anchorfile>
3740 <anchor>ga823d38fa8d21dc338497fb0f79c96704</anchor>
3741 <arglist>(hwloc_topology_t topology, const char *name, unsigned long kind, unsigned long flags)</arglist>
3742 </member>
3743 <member kind="function">
3744 <type>int</type>
3745 <name>hwloc_distances_add_values</name>
3746 <anchorfile>a00219.html</anchorfile>
3747 <anchor>ga8c9715481b0bce344c8a33c6e6a56469</anchor>
3748 <arglist>(hwloc_topology_t topology, hwloc_distances_add_handle_t handle, unsigned nbobjs, hwloc_obj_t *objs, hwloc_uint64_t *values, unsigned long flags)</arglist>
3749 </member>
3750 <member kind="function">
3751 <type>int</type>
3752 <name>hwloc_distances_add_commit</name>
3753 <anchorfile>a00219.html</anchorfile>
3754 <anchor>ga1f5a29760ebb8f9af831e645315f553c</anchor>
3755 <arglist>(hwloc_topology_t topology, hwloc_distances_add_handle_t handle, unsigned long flags)</arglist>
3756 </member>
3757 </compound>
3758 <compound kind="group">
3759 <name>hwlocality_distances_remove</name>
3760 <title>Remove distances between objects</title>
3761 <filename>a00220.html</filename>
36733762 <member kind="function">
36743763 <type>int</type>
36753764 <name>hwloc_distances_remove</name>
3676 <anchorfile>a00216.html</anchorfile>
3765 <anchorfile>a00220.html</anchorfile>
36773766 <anchor>gac188d9b64d9560255ce5f6d0a20f9c0a</anchor>
36783767 <arglist>(hwloc_topology_t topology)</arglist>
36793768 </member>
36803769 <member kind="function">
36813770 <type>int</type>
36823771 <name>hwloc_distances_remove_by_depth</name>
3683 <anchorfile>a00216.html</anchorfile>
3772 <anchorfile>a00220.html</anchorfile>
36843773 <anchor>gaa642a4c1a21c84f38ae23fca8a27845d</anchor>
36853774 <arglist>(hwloc_topology_t topology, int depth)</arglist>
36863775 </member>
36873776 <member kind="function" static="yes">
36883777 <type>static int</type>
36893778 <name>hwloc_distances_remove_by_type</name>
3690 <anchorfile>a00216.html</anchorfile>
3779 <anchorfile>a00220.html</anchorfile>
36913780 <anchor>ga93db53773c96f5b83815e8441e2ebb93</anchor>
36923781 <arglist>(hwloc_topology_t topology, hwloc_obj_type_t type)</arglist>
36933782 </member>
36943783 <member kind="function">
36953784 <type>int</type>
36963785 <name>hwloc_distances_release_remove</name>
3697 <anchorfile>a00216.html</anchorfile>
3786 <anchorfile>a00220.html</anchorfile>
36983787 <anchor>ga80bbf6f0db9af48c61780dd5152664c2</anchor>
36993788 <arglist>(hwloc_topology_t topology, struct hwloc_distances_s *distances)</arglist>
37003789 </member>
37023791 <compound kind="group">
37033792 <name>hwlocality_memattrs</name>
37043793 <title>Comparing memory node attributes for finding where to allocate on</title>
3705 <filename>a00217.html</filename>
3794 <filename>a00221.html</filename>
37063795 <class kind="struct">hwloc_location</class>
37073796 <member kind="typedef">
37083797 <type>unsigned</type>
37093798 <name>hwloc_memattr_id_t</name>
3710 <anchorfile>a00217.html</anchorfile>
3799 <anchorfile>a00221.html</anchorfile>
37113800 <anchor>gacc82003a8610be554615995f0996c888</anchor>
37123801 <arglist></arglist>
37133802 </member>
37143803 <member kind="enumeration">
37153804 <type></type>
37163805 <name>hwloc_memattr_id_e</name>
3717 <anchorfile>a00217.html</anchorfile>
3806 <anchorfile>a00221.html</anchorfile>
37183807 <anchor>gab4bde745db676fc2ea4b47011cd9a80e</anchor>
37193808 <arglist></arglist>
37203809 </member>
37213810 <member kind="enumvalue">
37223811 <name>HWLOC_MEMATTR_ID_CAPACITY</name>
3723 <anchorfile>a00217.html</anchorfile>
3812 <anchorfile>a00221.html</anchorfile>
37243813 <anchor>ggab4bde745db676fc2ea4b47011cd9a80eaa1cfa3ff3d56ff00ecabf7da4f5642cc</anchor>
37253814 <arglist></arglist>
37263815 </member>
37273816 <member kind="enumvalue">
37283817 <name>HWLOC_MEMATTR_ID_LOCALITY</name>
3729 <anchorfile>a00217.html</anchorfile>
3818 <anchorfile>a00221.html</anchorfile>
37303819 <anchor>ggab4bde745db676fc2ea4b47011cd9a80ea9334e3a4c30a67f491c6523255134efe</anchor>
37313820 <arglist></arglist>
37323821 </member>
37333822 <member kind="enumvalue">
37343823 <name>HWLOC_MEMATTR_ID_BANDWIDTH</name>
3735 <anchorfile>a00217.html</anchorfile>
3824 <anchorfile>a00221.html</anchorfile>
37363825 <anchor>ggab4bde745db676fc2ea4b47011cd9a80ea25fe3c7376ae6f9b584bacdb039f8c0f</anchor>
37373826 <arglist></arglist>
37383827 </member>
37393828 <member kind="enumvalue">
37403829 <name>HWLOC_MEMATTR_ID_LATENCY</name>
3741 <anchorfile>a00217.html</anchorfile>
3830 <anchorfile>a00221.html</anchorfile>
37423831 <anchor>ggab4bde745db676fc2ea4b47011cd9a80ead1796413759b8b87b61ad195a9349b19</anchor>
37433832 <arglist></arglist>
37443833 </member>
37453834 <member kind="enumeration">
37463835 <type></type>
37473836 <name>hwloc_location_type_e</name>
3748 <anchorfile>a00217.html</anchorfile>
3837 <anchorfile>a00221.html</anchorfile>
37493838 <anchor>ga33099ba58f607fc70925da3777688586</anchor>
37503839 <arglist></arglist>
37513840 </member>
37523841 <member kind="enumvalue">
37533842 <name>HWLOC_LOCATION_TYPE_CPUSET</name>
3754 <anchorfile>a00217.html</anchorfile>
3843 <anchorfile>a00221.html</anchorfile>
37553844 <anchor>gga33099ba58f607fc70925da3777688586a7135318a86361ad75fd1648e6bf6d174</anchor>
37563845 <arglist></arglist>
37573846 </member>
37583847 <member kind="enumvalue">
37593848 <name>HWLOC_LOCATION_TYPE_OBJECT</name>
3760 <anchorfile>a00217.html</anchorfile>
3849 <anchorfile>a00221.html</anchorfile>
37613850 <anchor>gga33099ba58f607fc70925da3777688586af637c39b23d48cff15ddb008644aaa84</anchor>
37623851 <arglist></arglist>
37633852 </member>
37643853 <member kind="enumeration">
37653854 <type></type>
37663855 <name>hwloc_local_numanode_flag_e</name>
3767 <anchorfile>a00217.html</anchorfile>
3856 <anchorfile>a00221.html</anchorfile>
37683857 <anchor>gab9c963ca37255da71b00d94e1b106f9d</anchor>
37693858 <arglist></arglist>
37703859 </member>
37713860 <member kind="enumvalue">
37723861 <name>HWLOC_LOCAL_NUMANODE_FLAG_LARGER_LOCALITY</name>
3773 <anchorfile>a00217.html</anchorfile>
3862 <anchorfile>a00221.html</anchorfile>
37743863 <anchor>ggab9c963ca37255da71b00d94e1b106f9da200c6c133bb2125ba36d77ce9ca268cc</anchor>
37753864 <arglist></arglist>
37763865 </member>
37773866 <member kind="enumvalue">
37783867 <name>HWLOC_LOCAL_NUMANODE_FLAG_SMALLER_LOCALITY</name>
3779 <anchorfile>a00217.html</anchorfile>
3868 <anchorfile>a00221.html</anchorfile>
37803869 <anchor>ggab9c963ca37255da71b00d94e1b106f9daac9c5e3a2cfb1b193e4acfceaf3bad57</anchor>
37813870 <arglist></arglist>
37823871 </member>
37833872 <member kind="enumvalue">
37843873 <name>HWLOC_LOCAL_NUMANODE_FLAG_ALL</name>
3785 <anchorfile>a00217.html</anchorfile>
3874 <anchorfile>a00221.html</anchorfile>
37863875 <anchor>ggab9c963ca37255da71b00d94e1b106f9dab5778b34c961a5d56f98f1549edeaed0</anchor>
37873876 <arglist></arglist>
37883877 </member>
37893878 <member kind="function">
37903879 <type>int</type>
37913880 <name>hwloc_memattr_get_by_name</name>
3792 <anchorfile>a00217.html</anchorfile>
3881 <anchorfile>a00221.html</anchorfile>
37933882 <anchor>ga79f44f8e1cfd2f97a19171417a75a137</anchor>
37943883 <arglist>(hwloc_topology_t topology, const char *name, hwloc_memattr_id_t *id)</arglist>
37953884 </member>
37963885 <member kind="function">
37973886 <type>int</type>
37983887 <name>hwloc_get_local_numanode_objs</name>
3799 <anchorfile>a00217.html</anchorfile>
3888 <anchorfile>a00221.html</anchorfile>
38003889 <anchor>ga569e80c5be7ef27649b0ef5aa52ffcdc</anchor>
38013890 <arglist>(hwloc_topology_t topology, struct hwloc_location *location, unsigned *nr, hwloc_obj_t *nodes, unsigned long flags)</arglist>
38023891 </member>
38033892 <member kind="function">
38043893 <type>int</type>
38053894 <name>hwloc_memattr_get_value</name>
3806 <anchorfile>a00217.html</anchorfile>
3895 <anchorfile>a00221.html</anchorfile>
38073896 <anchor>ga297e4a9adc2272446a4c7449dacef0df</anchor>
38083897 <arglist>(hwloc_topology_t topology, hwloc_memattr_id_t attribute, hwloc_obj_t target_node, struct hwloc_location *initiator, unsigned long flags, hwloc_uint64_t *value)</arglist>
38093898 </member>
38103899 <member kind="function">
38113900 <type>int</type>
38123901 <name>hwloc_memattr_get_best_target</name>
3813 <anchorfile>a00217.html</anchorfile>
3902 <anchorfile>a00221.html</anchorfile>
38143903 <anchor>ga884d1f2ad745c2fa69c1583c82d28f10</anchor>
38153904 <arglist>(hwloc_topology_t topology, hwloc_memattr_id_t attribute, struct hwloc_location *initiator, unsigned long flags, hwloc_obj_t *best_target, hwloc_uint64_t *value)</arglist>
38163905 </member>
38173906 <member kind="function">
38183907 <type>int</type>
38193908 <name>hwloc_memattr_get_best_initiator</name>
3820 <anchorfile>a00217.html</anchorfile>
3909 <anchorfile>a00221.html</anchorfile>
38213910 <anchor>ga9a453879892893cf8a3fcd431ade84cd</anchor>
38223911 <arglist>(hwloc_topology_t topology, hwloc_memattr_id_t attribute, hwloc_obj_t target, unsigned long flags, struct hwloc_location *best_initiator, hwloc_uint64_t *value)</arglist>
38233912 </member>
38253914 <compound kind="group">
38263915 <name>hwlocality_memattrs_manage</name>
38273916 <title>Managing memory attributes</title>
3828 <filename>a00218.html</filename>
3917 <filename>a00222.html</filename>
38293918 <member kind="enumeration">
38303919 <type></type>
38313920 <name>hwloc_memattr_flag_e</name>
3832 <anchorfile>a00218.html</anchorfile>
3921 <anchorfile>a00222.html</anchorfile>
38333922 <anchor>ga78aceb4cac4d614c0f5e82dbfeb779e5</anchor>
38343923 <arglist></arglist>
38353924 </member>
38363925 <member kind="enumvalue">
38373926 <name>HWLOC_MEMATTR_FLAG_HIGHER_FIRST</name>
3838 <anchorfile>a00218.html</anchorfile>
3927 <anchorfile>a00222.html</anchorfile>
38393928 <anchor>gga78aceb4cac4d614c0f5e82dbfeb779e5af29e65444a6ed00f5cc246df06f65815</anchor>
38403929 <arglist></arglist>
38413930 </member>
38423931 <member kind="enumvalue">
38433932 <name>HWLOC_MEMATTR_FLAG_LOWER_FIRST</name>
3844 <anchorfile>a00218.html</anchorfile>
3933 <anchorfile>a00222.html</anchorfile>
38453934 <anchor>gga78aceb4cac4d614c0f5e82dbfeb779e5a9601b5b0e1e68635e7e9901f28bd93bf</anchor>
38463935 <arglist></arglist>
38473936 </member>
38483937 <member kind="enumvalue">
38493938 <name>HWLOC_MEMATTR_FLAG_NEED_INITIATOR</name>
3850 <anchorfile>a00218.html</anchorfile>
3939 <anchorfile>a00222.html</anchorfile>
38513940 <anchor>gga78aceb4cac4d614c0f5e82dbfeb779e5a9d16523e285b2e22cfc78cc84dce8c96</anchor>
38523941 <arglist></arglist>
38533942 </member>
38543943 <member kind="function">
38553944 <type>int</type>
38563945 <name>hwloc_memattr_get_name</name>
3857 <anchorfile>a00218.html</anchorfile>
3946 <anchorfile>a00222.html</anchorfile>
38583947 <anchor>ga5300e9be1abdea2e00c18492148aecd0</anchor>
38593948 <arglist>(hwloc_topology_t topology, hwloc_memattr_id_t attribute, const char **name)</arglist>
38603949 </member>
38613950 <member kind="function">
38623951 <type>int</type>
38633952 <name>hwloc_memattr_get_flags</name>
3864 <anchorfile>a00218.html</anchorfile>
3953 <anchorfile>a00222.html</anchorfile>
38653954 <anchor>ga4c62b626085adeaffb233e5f2a03a5eb</anchor>
38663955 <arglist>(hwloc_topology_t topology, hwloc_memattr_id_t attribute, unsigned long *flags)</arglist>
38673956 </member>
38683957 <member kind="function">
38693958 <type>int</type>
38703959 <name>hwloc_memattr_register</name>
3871 <anchorfile>a00218.html</anchorfile>
3960 <anchorfile>a00222.html</anchorfile>
38723961 <anchor>ga770657d1e44b09e93e09f623936c1e5f</anchor>
38733962 <arglist>(hwloc_topology_t topology, const char *name, unsigned long flags, hwloc_memattr_id_t *id)</arglist>
38743963 </member>
38753964 <member kind="function">
38763965 <type>int</type>
38773966 <name>hwloc_memattr_set_value</name>
3878 <anchorfile>a00218.html</anchorfile>
3967 <anchorfile>a00222.html</anchorfile>
38793968 <anchor>ga960529c08b25cf15825e0f72ecceb504</anchor>
38803969 <arglist>(hwloc_topology_t topology, hwloc_memattr_id_t attribute, hwloc_obj_t target_node, struct hwloc_location *initiator, unsigned long flags, hwloc_uint64_t value)</arglist>
38813970 </member>
38823971 <member kind="function">
38833972 <type>int</type>
38843973 <name>hwloc_memattr_get_targets</name>
3885 <anchorfile>a00218.html</anchorfile>
3974 <anchorfile>a00222.html</anchorfile>
38863975 <anchor>ga3177cc0ab47e4dd1fa69ca1df4c7cb1a</anchor>
38873976 <arglist>(hwloc_topology_t topology, hwloc_memattr_id_t attribute, struct hwloc_location *initiator, unsigned long flags, unsigned *nrp, hwloc_obj_t *targets, hwloc_uint64_t *values)</arglist>
38883977 </member>
38893978 <member kind="function">
38903979 <type>int</type>
38913980 <name>hwloc_memattr_get_initiators</name>
3892 <anchorfile>a00218.html</anchorfile>
3981 <anchorfile>a00222.html</anchorfile>
38933982 <anchor>ga049aaa860dcbbf0792f0fd4251a99ec0</anchor>
38943983 <arglist>(hwloc_topology_t topology, hwloc_memattr_id_t attribute, hwloc_obj_t target_node, unsigned long flags, unsigned *nr, struct hwloc_location *initiators, hwloc_uint64_t *values)</arglist>
38953984 </member>
38973986 <compound kind="group">
38983987 <name>hwlocality_cpukinds</name>
38993988 <title>Kinds of CPU cores</title>
3900 <filename>a00219.html</filename>
3989 <filename>a00223.html</filename>
39013990 <member kind="function">
39023991 <type>int</type>
39033992 <name>hwloc_cpukinds_get_nr</name>
3904 <anchorfile>a00219.html</anchorfile>
3993 <anchorfile>a00223.html</anchorfile>
39053994 <anchor>ga7553f7c6d3920b169f3fc18dfe6a33e3</anchor>
39063995 <arglist>(hwloc_topology_t topology, unsigned long flags)</arglist>
39073996 </member>
39083997 <member kind="function">
39093998 <type>int</type>
39103999 <name>hwloc_cpukinds_get_by_cpuset</name>
3911 <anchorfile>a00219.html</anchorfile>
4000 <anchorfile>a00223.html</anchorfile>
39124001 <anchor>gaf979833aab18d2e7f4b17c932cbcf5d8</anchor>
39134002 <arglist>(hwloc_topology_t topology, hwloc_const_bitmap_t cpuset, unsigned long flags)</arglist>
39144003 </member>
39154004 <member kind="function">
39164005 <type>int</type>
39174006 <name>hwloc_cpukinds_get_info</name>
3918 <anchorfile>a00219.html</anchorfile>
4007 <anchorfile>a00223.html</anchorfile>
39194008 <anchor>gae1b38fbe9c645583fc16052ce6fbb275</anchor>
39204009 <arglist>(hwloc_topology_t topology, unsigned kind_index, hwloc_bitmap_t cpuset, int *efficiency, unsigned *nr_infos, struct hwloc_info_s **infos, unsigned long flags)</arglist>
39214010 </member>
39224011 <member kind="function">
39234012 <type>int</type>
39244013 <name>hwloc_cpukinds_register</name>
3925 <anchorfile>a00219.html</anchorfile>
4014 <anchorfile>a00223.html</anchorfile>
39264015 <anchor>ga6164ba92cfd06f530ec2c4a18a0dd5a9</anchor>
39274016 <arglist>(hwloc_topology_t topology, hwloc_bitmap_t cpuset, int forced_efficiency, unsigned nr_infos, struct hwloc_info_s *infos, unsigned long flags)</arglist>
39284017 </member>
39304019 <compound kind="group">
39314020 <name>hwlocality_linux</name>
39324021 <title>Linux-specific helpers</title>
3933 <filename>a00220.html</filename>
4022 <filename>a00224.html</filename>
39344023 <member kind="function">
39354024 <type>int</type>
39364025 <name>hwloc_linux_set_tid_cpubind</name>
3937 <anchorfile>a00220.html</anchorfile>
4026 <anchorfile>a00224.html</anchorfile>
39384027 <anchor>ga630e699c56b5f3d2e534b475944c216e</anchor>
39394028 <arglist>(hwloc_topology_t topology, pid_t tid, hwloc_const_cpuset_t set)</arglist>
39404029 </member>
39414030 <member kind="function">
39424031 <type>int</type>
39434032 <name>hwloc_linux_get_tid_cpubind</name>
3944 <anchorfile>a00220.html</anchorfile>
4033 <anchorfile>a00224.html</anchorfile>
39454034 <anchor>gaddcb985cb56337a4d6693cee72e7bf94</anchor>
39464035 <arglist>(hwloc_topology_t topology, pid_t tid, hwloc_cpuset_t set)</arglist>
39474036 </member>
39484037 <member kind="function">
39494038 <type>int</type>
39504039 <name>hwloc_linux_get_tid_last_cpu_location</name>
3951 <anchorfile>a00220.html</anchorfile>
4040 <anchorfile>a00224.html</anchorfile>
39524041 <anchor>gacc7945c2d06c6db1e58f8fd953009134</anchor>
39534042 <arglist>(hwloc_topology_t topology, pid_t tid, hwloc_bitmap_t set)</arglist>
39544043 </member>
39554044 <member kind="function">
39564045 <type>int</type>
39574046 <name>hwloc_linux_read_path_as_cpumask</name>
3958 <anchorfile>a00220.html</anchorfile>
4047 <anchorfile>a00224.html</anchorfile>
39594048 <anchor>gaf72d83e273803226ce772973e37b85de</anchor>
39604049 <arglist>(const char *path, hwloc_bitmap_t set)</arglist>
39614050 </member>
39634052 <compound kind="group">
39644053 <name>hwlocality_linux_libnuma_ulongs</name>
39654054 <title>Interoperability with Linux libnuma unsigned long masks</title>
3966 <filename>a00221.html</filename>
4055 <filename>a00225.html</filename>
39674056 <member kind="function" static="yes">
39684057 <type>static int</type>
39694058 <name>hwloc_cpuset_to_linux_libnuma_ulongs</name>
3970 <anchorfile>a00221.html</anchorfile>
4059 <anchorfile>a00225.html</anchorfile>
39714060 <anchor>gae577962390f84b0b12f503314ab0f972</anchor>
39724061 <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t cpuset, unsigned long *mask, unsigned long *maxnode)</arglist>
39734062 </member>
39744063 <member kind="function" static="yes">
39754064 <type>static int</type>
39764065 <name>hwloc_nodeset_to_linux_libnuma_ulongs</name>
3977 <anchorfile>a00221.html</anchorfile>
4066 <anchorfile>a00225.html</anchorfile>
39784067 <anchor>ga585ccf818d2f217f4e53f9c6506c3128</anchor>
39794068 <arglist>(hwloc_topology_t topology, hwloc_const_nodeset_t nodeset, unsigned long *mask, unsigned long *maxnode)</arglist>
39804069 </member>
39814070 <member kind="function" static="yes">
39824071 <type>static int</type>
39834072 <name>hwloc_cpuset_from_linux_libnuma_ulongs</name>
3984 <anchorfile>a00221.html</anchorfile>
4073 <anchorfile>a00225.html</anchorfile>
39854074 <anchor>ga0e9d051e068940f722f6fdc61814149d</anchor>
39864075 <arglist>(hwloc_topology_t topology, hwloc_cpuset_t cpuset, const unsigned long *mask, unsigned long maxnode)</arglist>
39874076 </member>
39884077 <member kind="function" static="yes">
39894078 <type>static int</type>
39904079 <name>hwloc_nodeset_from_linux_libnuma_ulongs</name>
3991 <anchorfile>a00221.html</anchorfile>
4080 <anchorfile>a00225.html</anchorfile>
39924081 <anchor>gad8491c672eb2594cc5e7b0a026867192</anchor>
39934082 <arglist>(hwloc_topology_t topology, hwloc_nodeset_t nodeset, const unsigned long *mask, unsigned long maxnode)</arglist>
39944083 </member>
39964085 <compound kind="group">
39974086 <name>hwlocality_linux_libnuma_bitmask</name>
39984087 <title>Interoperability with Linux libnuma bitmask</title>
3999 <filename>a00222.html</filename>
4088 <filename>a00226.html</filename>
40004089 <member kind="function" static="yes">
40014090 <type>static struct bitmask *</type>
40024091 <name>hwloc_cpuset_to_linux_libnuma_bitmask</name>
4003 <anchorfile>a00222.html</anchorfile>
4092 <anchorfile>a00226.html</anchorfile>
40044093 <anchor>gad8769b4544c0aeef154fc8223144e343</anchor>
40054094 <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t cpuset)</arglist>
40064095 </member>
40074096 <member kind="function" static="yes">
40084097 <type>static struct bitmask *</type>
40094098 <name>hwloc_nodeset_to_linux_libnuma_bitmask</name>
4010 <anchorfile>a00222.html</anchorfile>
4099 <anchorfile>a00226.html</anchorfile>
40114100 <anchor>gadfaa14c1bec76965ac2e05f0c3f3473b</anchor>
40124101 <arglist>(hwloc_topology_t topology, hwloc_const_nodeset_t nodeset)</arglist>
40134102 </member>
40144103 <member kind="function" static="yes">
40154104 <type>static int</type>
40164105 <name>hwloc_cpuset_from_linux_libnuma_bitmask</name>
4017 <anchorfile>a00222.html</anchorfile>
4106 <anchorfile>a00226.html</anchorfile>
40184107 <anchor>ga37c8421110b1842414809019098794ef</anchor>
40194108 <arglist>(hwloc_topology_t topology, hwloc_cpuset_t cpuset, const struct bitmask *bitmask)</arglist>
40204109 </member>
40214110 <member kind="function" static="yes">
40224111 <type>static int</type>
40234112 <name>hwloc_nodeset_from_linux_libnuma_bitmask</name>
4024 <anchorfile>a00222.html</anchorfile>
4113 <anchorfile>a00226.html</anchorfile>
40254114 <anchor>gaaca6bff3086aad5bdbd2f4c5f0ad14cc</anchor>
40264115 <arglist>(hwloc_topology_t topology, hwloc_nodeset_t nodeset, const struct bitmask *bitmask)</arglist>
40274116 </member>
40284117 </compound>
40294118 <compound kind="group">
4119 <name>hwlocality_windows</name>
4120 <title>Windows-specific helpers</title>
4121 <filename>a00227.html</filename>
4122 <member kind="function">
4123 <type>int</type>
4124 <name>hwloc_windows_get_nr_processor_groups</name>
4125 <anchorfile>a00227.html</anchorfile>
4126 <anchor>gaa4376a1969660a344911d117f645d3dd</anchor>
4127 <arglist>(hwloc_topology_t topology, unsigned long flags)</arglist>
4128 </member>
4129 <member kind="function">
4130 <type>int</type>
4131 <name>hwloc_windows_get_processor_group_cpuset</name>
4132 <anchorfile>a00227.html</anchorfile>
4133 <anchor>ga167d1f28d3bd9defe1ffa940c14e8dd1</anchor>
4134 <arglist>(hwloc_topology_t topology, unsigned pg_index, hwloc_cpuset_t cpuset, unsigned long flags)</arglist>
4135 </member>
4136 </compound>
4137 <compound kind="group">
40304138 <name>hwlocality_glibc_sched</name>
40314139 <title>Interoperability with glibc sched affinity</title>
4032 <filename>a00223.html</filename>
4140 <filename>a00228.html</filename>
40334141 <member kind="function" static="yes">
40344142 <type>static int</type>
40354143 <name>hwloc_cpuset_to_glibc_sched_affinity</name>
4036 <anchorfile>a00223.html</anchorfile>
4144 <anchorfile>a00228.html</anchorfile>
40374145 <anchor>ga88699a0c86c66a9b7baa3468cd9d24c3</anchor>
40384146 <arglist>(hwloc_topology_t topology, hwloc_const_cpuset_t hwlocset, cpu_set_t *schedset, size_t schedsetsize)</arglist>
40394147 </member>
40404148 <member kind="function" static="yes">
40414149 <type>static int</type>
40424150 <name>hwloc_cpuset_from_glibc_sched_affinity</name>
4043 <anchorfile>a00223.html</anchorfile>
4151 <anchorfile>a00228.html</anchorfile>
40444152 <anchor>ga8ec807ec17de57fa77aa5cfd6c8e4bfb</anchor>
40454153 <arglist>(hwloc_topology_t topology, hwloc_cpuset_t hwlocset, const cpu_set_t *schedset, size_t schedsetsize)</arglist>
40464154 </member>
40484156 <compound kind="group">
40494157 <name>hwlocality_opencl</name>
40504158 <title>Interoperability with OpenCL</title>
4051 <filename>a00224.html</filename>
4159 <filename>a00229.html</filename>
40524160 <member kind="function" static="yes">
40534161 <type>static int</type>
40544162 <name>hwloc_opencl_get_device_pci_busid</name>
4055 <anchorfile>a00224.html</anchorfile>
4163 <anchorfile>a00229.html</anchorfile>
40564164 <anchor>gab89e4d20f8a353299351b41849e35ac9</anchor>
40574165 <arglist>(cl_device_id device, unsigned *domain, unsigned *bus, unsigned *dev, unsigned *func)</arglist>
40584166 </member>
40594167 <member kind="function" static="yes">
40604168 <type>static int</type>
40614169 <name>hwloc_opencl_get_device_cpuset</name>
4062 <anchorfile>a00224.html</anchorfile>
4170 <anchorfile>a00229.html</anchorfile>
40634171 <anchor>gacc32737d4648d16b0d292438f210ec90</anchor>
40644172 <arglist>(hwloc_topology_t topology, cl_device_id device, hwloc_cpuset_t set)</arglist>
40654173 </member>
40664174 <member kind="function" static="yes">
40674175 <type>static hwloc_obj_t</type>
40684176 <name>hwloc_opencl_get_device_osdev_by_index</name>
4069 <anchorfile>a00224.html</anchorfile>
4177 <anchorfile>a00229.html</anchorfile>
40704178 <anchor>gae39352d124cb330eb37b84b418ed6cc5</anchor>
40714179 <arglist>(hwloc_topology_t topology, unsigned platform_index, unsigned device_index)</arglist>
40724180 </member>
40734181 <member kind="function" static="yes">
40744182 <type>static hwloc_obj_t</type>
40754183 <name>hwloc_opencl_get_device_osdev</name>
4076 <anchorfile>a00224.html</anchorfile>
4184 <anchorfile>a00229.html</anchorfile>
40774185 <anchor>gadabfa6516aa12e5d8f79b9b4dd9f3cf8</anchor>
40784186 <arglist>(hwloc_topology_t topology, cl_device_id device)</arglist>
40794187 </member>
40814189 <compound kind="group">
40824190 <name>hwlocality_cuda</name>
40834191 <title>Interoperability with the CUDA Driver API</title>
4084 <filename>a00225.html</filename>
4192 <filename>a00230.html</filename>
40854193 <member kind="function" static="yes">
40864194 <type>static int</type>
40874195 <name>hwloc_cuda_get_device_pci_ids</name>
4088 <anchorfile>a00225.html</anchorfile>
4196 <anchorfile>a00230.html</anchorfile>
40894197 <anchor>ga1084285e8ff8b7df91c28917637481c6</anchor>
40904198 <arglist>(hwloc_topology_t topology, CUdevice cudevice, int *domain, int *bus, int *dev)</arglist>
40914199 </member>
40924200 <member kind="function" static="yes">
40934201 <type>static int</type>
40944202 <name>hwloc_cuda_get_device_cpuset</name>
4095 <anchorfile>a00225.html</anchorfile>
4203 <anchorfile>a00230.html</anchorfile>
40964204 <anchor>gaec41c6b4dc3361156beb7dea2a74f5a3</anchor>
40974205 <arglist>(hwloc_topology_t topology, CUdevice cudevice, hwloc_cpuset_t set)</arglist>
40984206 </member>
40994207 <member kind="function" static="yes">
41004208 <type>static hwloc_obj_t</type>
41014209 <name>hwloc_cuda_get_device_pcidev</name>
4102 <anchorfile>a00225.html</anchorfile>
4210 <anchorfile>a00230.html</anchorfile>
41034211 <anchor>ga11fed607fa404e29e8da010f3ec128e4</anchor>
41044212 <arglist>(hwloc_topology_t topology, CUdevice cudevice)</arglist>
41054213 </member>
41064214 <member kind="function" static="yes">
41074215 <type>static hwloc_obj_t</type>
41084216 <name>hwloc_cuda_get_device_osdev</name>
4109 <anchorfile>a00225.html</anchorfile>
4217 <anchorfile>a00230.html</anchorfile>
41104218 <anchor>ga252cb72175f1a2d682f883a0add80a66</anchor>
41114219 <arglist>(hwloc_topology_t topology, CUdevice cudevice)</arglist>
41124220 </member>
41134221 <member kind="function" static="yes">
41144222 <type>static hwloc_obj_t</type>
41154223 <name>hwloc_cuda_get_device_osdev_by_index</name>
4116 <anchorfile>a00225.html</anchorfile>
4224 <anchorfile>a00230.html</anchorfile>
41174225 <anchor>ga12ee892994ed037e8f64bbffda02cf2e</anchor>
41184226 <arglist>(hwloc_topology_t topology, unsigned idx)</arglist>
41194227 </member>
41214229 <compound kind="group">
41224230 <name>hwlocality_cudart</name>
41234231 <title>Interoperability with the CUDA Runtime API</title>
4124 <filename>a00226.html</filename>
4232 <filename>a00231.html</filename>
41254233 <member kind="function" static="yes">
41264234 <type>static int</type>
41274235 <name>hwloc_cudart_get_device_pci_ids</name>
4128 <anchorfile>a00226.html</anchorfile>
4236 <anchorfile>a00231.html</anchorfile>
41294237 <anchor>gad8b701d9a34923e34bd58defd4c1e704</anchor>
41304238 <arglist>(hwloc_topology_t topology, int idx, int *domain, int *bus, int *dev)</arglist>
41314239 </member>
41324240 <member kind="function" static="yes">
41334241 <type>static int</type>
41344242 <name>hwloc_cudart_get_device_cpuset</name>
4135 <anchorfile>a00226.html</anchorfile>
4243 <anchorfile>a00231.html</anchorfile>
41364244 <anchor>ga187ca00c6e12800a25151ce331620980</anchor>
41374245 <arglist>(hwloc_topology_t topology, int idx, hwloc_cpuset_t set)</arglist>
41384246 </member>
41394247 <member kind="function" static="yes">
41404248 <type>static hwloc_obj_t</type>
41414249 <name>hwloc_cudart_get_device_pcidev</name>
4142 <anchorfile>a00226.html</anchorfile>
4250 <anchorfile>a00231.html</anchorfile>
41434251 <anchor>gaeda4e6efbb36b518b2c286434ad23bb2</anchor>
41444252 <arglist>(hwloc_topology_t topology, int idx)</arglist>
41454253 </member>
41464254 <member kind="function" static="yes">
41474255 <type>static hwloc_obj_t</type>
41484256 <name>hwloc_cudart_get_device_osdev_by_index</name>
4149 <anchorfile>a00226.html</anchorfile>
4257 <anchorfile>a00231.html</anchorfile>
41504258 <anchor>gac0f3eeaf7712919f298097b1a21307b0</anchor>
41514259 <arglist>(hwloc_topology_t topology, unsigned idx)</arglist>
41524260 </member>
41544262 <compound kind="group">
41554263 <name>hwlocality_nvml</name>
41564264 <title>Interoperability with the NVIDIA Management Library</title>
4157 <filename>a00227.html</filename>
4265 <filename>a00232.html</filename>
41584266 <member kind="function" static="yes">
41594267 <type>static int</type>
41604268 <name>hwloc_nvml_get_device_cpuset</name>
4161 <anchorfile>a00227.html</anchorfile>
4269 <anchorfile>a00232.html</anchorfile>
41624270 <anchor>ga26cf0036d09ec4d7cb692380fac9659d</anchor>
41634271 <arglist>(hwloc_topology_t topology, nvmlDevice_t device, hwloc_cpuset_t set)</arglist>
41644272 </member>
41654273 <member kind="function" static="yes">
41664274 <type>static hwloc_obj_t</type>
41674275 <name>hwloc_nvml_get_device_osdev_by_index</name>
4168 <anchorfile>a00227.html</anchorfile>
4276 <anchorfile>a00232.html</anchorfile>
41694277 <anchor>gacd50fd0e2766ee05bc13234b46714756</anchor>
41704278 <arglist>(hwloc_topology_t topology, unsigned idx)</arglist>
41714279 </member>
41724280 <member kind="function" static="yes">
41734281 <type>static hwloc_obj_t</type>
41744282 <name>hwloc_nvml_get_device_osdev</name>
4175 <anchorfile>a00227.html</anchorfile>
4283 <anchorfile>a00232.html</anchorfile>
41764284 <anchor>gaf176159b5760a191871eff23f5a69ee9</anchor>
41774285 <arglist>(hwloc_topology_t topology, nvmlDevice_t device)</arglist>
41784286 </member>
41804288 <compound kind="group">
41814289 <name>hwlocality_rsmi</name>
41824290 <title>Interoperability with the ROCm SMI Management Library</title>
4183 <filename>a00228.html</filename>
4291 <filename>a00233.html</filename>
41844292 <member kind="function" static="yes">
41854293 <type>static int</type>
41864294 <name>hwloc_rsmi_get_device_cpuset</name>
4187 <anchorfile>a00228.html</anchorfile>
4295 <anchorfile>a00233.html</anchorfile>
41884296 <anchor>gaf939e697e3769c3524255318262b9c29</anchor>
41894297 <arglist>(hwloc_topology_t topology, uint32_t dv_ind, hwloc_cpuset_t set)</arglist>
41904298 </member>
41914299 <member kind="function" static="yes">
41924300 <type>static hwloc_obj_t</type>
41934301 <name>hwloc_rsmi_get_device_osdev_by_index</name>
4194 <anchorfile>a00228.html</anchorfile>
4302 <anchorfile>a00233.html</anchorfile>
41954303 <anchor>ga507d0acdd5e9ac374a8d120d59604c80</anchor>
41964304 <arglist>(hwloc_topology_t topology, uint32_t dv_ind)</arglist>
41974305 </member>
41984306 <member kind="function" static="yes">
41994307 <type>static hwloc_obj_t</type>
42004308 <name>hwloc_rsmi_get_device_osdev</name>
4201 <anchorfile>a00228.html</anchorfile>
4309 <anchorfile>a00233.html</anchorfile>
42024310 <anchor>gaba05bf9710655bb5b1439bee654340ba</anchor>
42034311 <arglist>(hwloc_topology_t topology, uint32_t dv_ind)</arglist>
42044312 </member>
42054313 </compound>
42064314 <compound kind="group">
4315 <name>hwlocality_levelzero</name>
4316 <title>Interoperability with the oneAPI Level Zero interface.</title>
4317 <filename>a00234.html</filename>
4318 <member kind="function" static="yes">
4319 <type>static int</type>
4320 <name>hwloc_levelzero_get_device_cpuset</name>
4321 <anchorfile>a00234.html</anchorfile>
4322 <anchor>ga66281a9ba621357b1c7070b4fa19b5b8</anchor>
4323 <arglist>(hwloc_topology_t topology, ze_device_handle_t device, hwloc_cpuset_t set)</arglist>
4324 </member>
4325 <member kind="function" static="yes">
4326 <type>static hwloc_obj_t</type>
4327 <name>hwloc_levelzero_get_device_osdev</name>
4328 <anchorfile>a00234.html</anchorfile>
4329 <anchor>gaf06cb737abcd2dc6db894c8914302d85</anchor>
4330 <arglist>(hwloc_topology_t topology, ze_device_handle_t device)</arglist>
4331 </member>
4332 </compound>
4333 <compound kind="group">
42074334 <name>hwlocality_gl</name>
42084335 <title>Interoperability with OpenGL displays</title>
4209 <filename>a00229.html</filename>
4336 <filename>a00235.html</filename>
42104337 <member kind="function" static="yes">
42114338 <type>static hwloc_obj_t</type>
42124339 <name>hwloc_gl_get_display_osdev_by_port_device</name>
4213 <anchorfile>a00229.html</anchorfile>
4340 <anchorfile>a00235.html</anchorfile>
42144341 <anchor>ga4d66a77e4fe4051d6e5b772c1b8fcec5</anchor>
42154342 <arglist>(hwloc_topology_t topology, unsigned port, unsigned device)</arglist>
42164343 </member>
42174344 <member kind="function" static="yes">
42184345 <type>static hwloc_obj_t</type>
42194346 <name>hwloc_gl_get_display_osdev_by_name</name>
4220 <anchorfile>a00229.html</anchorfile>
4347 <anchorfile>a00235.html</anchorfile>
42214348 <anchor>ga2d36ef441d1dfddf49cfb5c01bd58d8e</anchor>
42224349 <arglist>(hwloc_topology_t topology, const char *name)</arglist>
42234350 </member>
42244351 <member kind="function" static="yes">
42254352 <type>static int</type>
42264353 <name>hwloc_gl_get_display_by_osdev</name>
4227 <anchorfile>a00229.html</anchorfile>
4354 <anchorfile>a00235.html</anchorfile>
42284355 <anchor>ga936665ab5f0d29a081c4b78d11f4ad07</anchor>
42294356 <arglist>(hwloc_topology_t topology, hwloc_obj_t osdev, unsigned *port, unsigned *device)</arglist>
42304357 </member>
42324359 <compound kind="group">
42334360 <name>hwlocality_openfabrics</name>
42344361 <title>Interoperability with OpenFabrics</title>
4235 <filename>a00230.html</filename>
4362 <filename>a00236.html</filename>
42364363 <member kind="function" static="yes">
42374364 <type>static int</type>
42384365 <name>hwloc_ibv_get_device_cpuset</name>
4239 <anchorfile>a00230.html</anchorfile>
4366 <anchorfile>a00236.html</anchorfile>
42404367 <anchor>ga3ea0d838c1e7f1671b35687aae2da6ae</anchor>
42414368 <arglist>(hwloc_topology_t topology, struct ibv_device *ibdev, hwloc_cpuset_t set)</arglist>
42424369 </member>
42434370 <member kind="function" static="yes">
42444371 <type>static hwloc_obj_t</type>
42454372 <name>hwloc_ibv_get_device_osdev_by_name</name>
4246 <anchorfile>a00230.html</anchorfile>
4373 <anchorfile>a00236.html</anchorfile>
42474374 <anchor>ga31d794567f4420bbdc8baa7bf8bf6138</anchor>
42484375 <arglist>(hwloc_topology_t topology, const char *ibname)</arglist>
42494376 </member>
42504377 <member kind="function" static="yes">
42514378 <type>static hwloc_obj_t</type>
42524379 <name>hwloc_ibv_get_device_osdev</name>
4253 <anchorfile>a00230.html</anchorfile>
4380 <anchorfile>a00236.html</anchorfile>
42544381 <anchor>ga7324cdfd5db6ed2669c051ef7e1b64e1</anchor>
42554382 <arglist>(hwloc_topology_t topology, struct ibv_device *ibdev)</arglist>
42564383 </member>
42584385 <compound kind="group">
42594386 <name>hwlocality_diff</name>
42604387 <title>Topology differences</title>
4261 <filename>a00231.html</filename>
4388 <filename>a00237.html</filename>
42624389 <class kind="union">hwloc_topology_diff_obj_attr_u</class>
42634390 <class kind="union">hwloc_topology_diff_u</class>
42644391 <member kind="typedef">
42654392 <type>enum hwloc_topology_diff_obj_attr_type_e</type>
42664393 <name>hwloc_topology_diff_obj_attr_type_t</name>
4267 <anchorfile>a00231.html</anchorfile>
4394 <anchorfile>a00237.html</anchorfile>
42684395 <anchor>ga74a3fefbaa17582fea86d76b312d6254</anchor>
42694396 <arglist></arglist>
42704397 </member>
42714398 <member kind="typedef">
42724399 <type>enum hwloc_topology_diff_type_e</type>
42734400 <name>hwloc_topology_diff_type_t</name>
4274 <anchorfile>a00231.html</anchorfile>
4401 <anchorfile>a00237.html</anchorfile>
42754402 <anchor>ga8470f631b7365c839d3e40d38c5b6291</anchor>
42764403 <arglist></arglist>
42774404 </member>
42784405 <member kind="typedef">
42794406 <type>union hwloc_topology_diff_u *</type>
42804407 <name>hwloc_topology_diff_t</name>
4281 <anchorfile>a00231.html</anchorfile>
4408 <anchorfile>a00237.html</anchorfile>
42824409 <anchor>ga1bd6363f26f7961f83153aaa484a9b85</anchor>
42834410 <arglist></arglist>
42844411 </member>
42854412 <member kind="enumeration">
42864413 <type></type>
42874414 <name>hwloc_topology_diff_obj_attr_type_e</name>
4288 <anchorfile>a00231.html</anchorfile>
4415 <anchorfile>a00237.html</anchorfile>
42894416 <anchor>ga86f044210b0a9e9fa83acbdbbf7e05fd</anchor>
42904417 <arglist></arglist>
42914418 </member>
42924419 <member kind="enumvalue">
42934420 <name>HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_SIZE</name>
4294 <anchorfile>a00231.html</anchorfile>
4421 <anchorfile>a00237.html</anchorfile>
42954422 <anchor>gga86f044210b0a9e9fa83acbdbbf7e05fdabc7f0c7ed0b6864e902f4b70f2c7bc94</anchor>
42964423 <arglist></arglist>
42974424 </member>
42984425 <member kind="enumvalue">
42994426 <name>HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_NAME</name>
4300 <anchorfile>a00231.html</anchorfile>
4427 <anchorfile>a00237.html</anchorfile>
43014428 <anchor>gga86f044210b0a9e9fa83acbdbbf7e05fda94a8f37c51d62d15ac6192665dd49310</anchor>
43024429 <arglist></arglist>
43034430 </member>
43044431 <member kind="enumvalue">
43054432 <name>HWLOC_TOPOLOGY_DIFF_OBJ_ATTR_INFO</name>
4306 <anchorfile>a00231.html</anchorfile>
4433 <anchorfile>a00237.html</anchorfile>
43074434 <anchor>gga86f044210b0a9e9fa83acbdbbf7e05fda63430bf932434bc456282f636d39c2c2</anchor>
43084435 <arglist></arglist>
43094436 </member>
43104437 <member kind="enumeration">
43114438 <type></type>
43124439 <name>hwloc_topology_diff_type_e</name>
4313 <anchorfile>a00231.html</anchorfile>
4440 <anchorfile>a00237.html</anchorfile>
43144441 <anchor>ga38b28b7423b85a3321e6d0062d5f83d0</anchor>
43154442 <arglist></arglist>
43164443 </member>
43174444 <member kind="enumvalue">
43184445 <name>HWLOC_TOPOLOGY_DIFF_OBJ_ATTR</name>
4319 <anchorfile>a00231.html</anchorfile>
4446 <anchorfile>a00237.html</anchorfile>
43204447 <anchor>gga38b28b7423b85a3321e6d0062d5f83d0accbcaee230f79989debb284c8626f0c0</anchor>
43214448 <arglist></arglist>
43224449 </member>
43234450 <member kind="enumvalue">
43244451 <name>HWLOC_TOPOLOGY_DIFF_TOO_COMPLEX</name>
4325 <anchorfile>a00231.html</anchorfile>
4452 <anchorfile>a00237.html</anchorfile>
43264453 <anchor>gga38b28b7423b85a3321e6d0062d5f83d0a3dc01fdeff355efe3fb2516bb454a147</anchor>
43274454 <arglist></arglist>
43284455 </member>
43294456 <member kind="enumeration">
43304457 <type></type>
43314458 <name>hwloc_topology_diff_apply_flags_e</name>
4332 <anchorfile>a00231.html</anchorfile>
4459 <anchorfile>a00237.html</anchorfile>
43334460 <anchor>gada4c1273ce020afaf02b649496f7edf5</anchor>
43344461 <arglist></arglist>
43354462 </member>
43364463 <member kind="enumvalue">
43374464 <name>HWLOC_TOPOLOGY_DIFF_APPLY_REVERSE</name>
4338 <anchorfile>a00231.html</anchorfile>
4465 <anchorfile>a00237.html</anchorfile>
43394466 <anchor>ggada4c1273ce020afaf02b649496f7edf5a821a160512d67ea0dd05dab873d2fc54</anchor>
43404467 <arglist></arglist>
43414468 </member>
43424469 <member kind="function">
43434470 <type>int</type>
43444471 <name>hwloc_topology_diff_build</name>
4345 <anchorfile>a00231.html</anchorfile>
4472 <anchorfile>a00237.html</anchorfile>
43464473 <anchor>ga8a1754f69fbb31364ea3ea2c39827c9f</anchor>
43474474 <arglist>(hwloc_topology_t topology, hwloc_topology_t newtopology, unsigned long flags, hwloc_topology_diff_t *diff)</arglist>
43484475 </member>
43494476 <member kind="function">
43504477 <type>int</type>
43514478 <name>hwloc_topology_diff_apply</name>
4352 <anchorfile>a00231.html</anchorfile>
4479 <anchorfile>a00237.html</anchorfile>
43534480 <anchor>gae7b350d7e7478a4c6047b08aa6544f40</anchor>
43544481 <arglist>(hwloc_topology_t topology, hwloc_topology_diff_t diff, unsigned long flags)</arglist>
43554482 </member>
43564483 <member kind="function">
43574484 <type>int</type>
43584485 <name>hwloc_topology_diff_destroy</name>
4359 <anchorfile>a00231.html</anchorfile>
4486 <anchorfile>a00237.html</anchorfile>
43604487 <anchor>ga5dcff18f80583ac6505a94ba2877fd1b</anchor>
43614488 <arglist>(hwloc_topology_diff_t diff)</arglist>
43624489 </member>
43634490 <member kind="function">
43644491 <type>int</type>
43654492 <name>hwloc_topology_diff_load_xml</name>
4366 <anchorfile>a00231.html</anchorfile>
4493 <anchorfile>a00237.html</anchorfile>
43674494 <anchor>ga2cd902ce8766e90d4f2523a8e87640e9</anchor>
43684495 <arglist>(const char *xmlpath, hwloc_topology_diff_t *diff, char **refname)</arglist>
43694496 </member>
43704497 <member kind="function">
43714498 <type>int</type>
43724499 <name>hwloc_topology_diff_export_xml</name>
4373 <anchorfile>a00231.html</anchorfile>
4500 <anchorfile>a00237.html</anchorfile>
43744501 <anchor>ga8a14dd7d01efbdd97af7fe85e8b84b20</anchor>
43754502 <arglist>(hwloc_topology_diff_t diff, const char *refname, const char *xmlpath)</arglist>
43764503 </member>
43774504 <member kind="function">
43784505 <type>int</type>
43794506 <name>hwloc_topology_diff_load_xmlbuffer</name>
4380 <anchorfile>a00231.html</anchorfile>
4507 <anchorfile>a00237.html</anchorfile>
43814508 <anchor>gad693810a5c51628529b9dd56f040fb81</anchor>
43824509 <arglist>(const char *xmlbuffer, int buflen, hwloc_topology_diff_t *diff, char **refname)</arglist>
43834510 </member>
43844511 <member kind="function">
43854512 <type>int</type>
43864513 <name>hwloc_topology_diff_export_xmlbuffer</name>
4387 <anchorfile>a00231.html</anchorfile>
4514 <anchorfile>a00237.html</anchorfile>
43884515 <anchor>gaa2f0918df60c1c4a0bef9411f7d92a13</anchor>
43894516 <arglist>(hwloc_topology_diff_t diff, const char *refname, char **xmlbuffer, int *buflen)</arglist>
43904517 </member>
43924519 <compound kind="group">
43934520 <name>hwlocality_shmem</name>
43944521 <title>Sharing topologies between processes</title>
4395 <filename>a00232.html</filename>
4522 <filename>a00238.html</filename>
43964523 <member kind="function">
43974524 <type>int</type>
43984525 <name>hwloc_shmem_topology_get_length</name>
4399 <anchorfile>a00232.html</anchorfile>
4526 <anchorfile>a00238.html</anchorfile>
44004527 <anchor>ga772ab52750cdd0eec85128df24888001</anchor>
44014528 <arglist>(hwloc_topology_t topology, size_t *lengthp, unsigned long flags)</arglist>
44024529 </member>
44034530 <member kind="function">
44044531 <type>int</type>
44054532 <name>hwloc_shmem_topology_write</name>
4406 <anchorfile>a00232.html</anchorfile>
4533 <anchorfile>a00238.html</anchorfile>
44074534 <anchor>ga61b20e346fc76f76420e3a88cc80a671</anchor>
44084535 <arglist>(hwloc_topology_t topology, int fd, hwloc_uint64_t fileoffset, void *mmap_address, size_t length, unsigned long flags)</arglist>
44094536 </member>
44104537 <member kind="function">
44114538 <type>int</type>
44124539 <name>hwloc_shmem_topology_adopt</name>
4413 <anchorfile>a00232.html</anchorfile>
4540 <anchorfile>a00238.html</anchorfile>
44144541 <anchor>ga21545bd0f09d9b554c8e60a630e0e629</anchor>
44154542 <arglist>(hwloc_topology_t *topologyp, int fd, hwloc_uint64_t fileoffset, void *mmap_address, size_t length, unsigned long flags)</arglist>
44164543 </member>
44184545 <compound kind="group">
44194546 <name>hwlocality_disc_components</name>
44204547 <title>Components and Plugins: Discovery components</title>
4421 <filename>a00233.html</filename>
4548 <filename>a00239.html</filename>
44224549 <class kind="struct">hwloc_disc_component</class>
44234550 </compound>
44244551 <compound kind="group">
44254552 <name>hwlocality_disc_backends</name>
44264553 <title>Components and Plugins: Discovery backends</title>
4427 <filename>a00234.html</filename>
4554 <filename>a00240.html</filename>
44284555 <class kind="struct">hwloc_disc_status</class>
44294556 <class kind="struct">hwloc_backend</class>
44304557 <member kind="typedef">
44314558 <type>enum hwloc_disc_phase_e</type>
44324559 <name>hwloc_disc_phase_t</name>
4433 <anchorfile>a00234.html</anchorfile>
4560 <anchorfile>a00240.html</anchorfile>
44344561 <anchor>ga600bba1a62022d5f516800649b1edb61</anchor>
44354562 <arglist></arglist>
44364563 </member>
44374564 <member kind="enumeration">
44384565 <type></type>
44394566 <name>hwloc_disc_phase_e</name>
4440 <anchorfile>a00234.html</anchorfile>
4567 <anchorfile>a00240.html</anchorfile>
44414568 <anchor>ga8c314121c2fc478161bcce758688b9a1</anchor>
44424569 <arglist></arglist>
44434570 </member>
44444571 <member kind="enumvalue">
44454572 <name>HWLOC_DISC_PHASE_GLOBAL</name>
4446 <anchorfile>a00234.html</anchorfile>
4573 <anchorfile>a00240.html</anchorfile>
44474574 <anchor>gga8c314121c2fc478161bcce758688b9a1ab41c626c79e9ccb1e7d41e7076972283</anchor>
44484575 <arglist></arglist>
44494576 </member>
44504577 <member kind="enumvalue">
44514578 <name>HWLOC_DISC_PHASE_CPU</name>
4452 <anchorfile>a00234.html</anchorfile>
4579 <anchorfile>a00240.html</anchorfile>
44534580 <anchor>gga8c314121c2fc478161bcce758688b9a1a6360474df197027761a69bd5fc620250</anchor>
44544581 <arglist></arglist>
44554582 </member>
44564583 <member kind="enumvalue">
44574584 <name>HWLOC_DISC_PHASE_MEMORY</name>
4458 <anchorfile>a00234.html</anchorfile>
4585 <anchorfile>a00240.html</anchorfile>
44594586 <anchor>gga8c314121c2fc478161bcce758688b9a1ac4264a243844c5fbbff495cdb1b4d51d</anchor>
44604587 <arglist></arglist>
44614588 </member>
44624589 <member kind="enumvalue">
44634590 <name>HWLOC_DISC_PHASE_PCI</name>
4464 <anchorfile>a00234.html</anchorfile>
4591 <anchorfile>a00240.html</anchorfile>
44654592 <anchor>gga8c314121c2fc478161bcce758688b9a1a677c52064dd987af4988346319b3675a</anchor>
44664593 <arglist></arglist>
44674594 </member>
44684595 <member kind="enumvalue">
44694596 <name>HWLOC_DISC_PHASE_IO</name>
4470 <anchorfile>a00234.html</anchorfile>
4597 <anchorfile>a00240.html</anchorfile>
44714598 <anchor>gga8c314121c2fc478161bcce758688b9a1aa8e10626cba9af72f5605a1acbdc0015</anchor>
44724599 <arglist></arglist>
44734600 </member>
44744601 <member kind="enumvalue">
44754602 <name>HWLOC_DISC_PHASE_MISC</name>
4476 <anchorfile>a00234.html</anchorfile>
4603 <anchorfile>a00240.html</anchorfile>
44774604 <anchor>gga8c314121c2fc478161bcce758688b9a1a8a7cde9bff0ab0d085b102a3e934939b</anchor>
44784605 <arglist></arglist>
44794606 </member>
44804607 <member kind="enumvalue">
44814608 <name>HWLOC_DISC_PHASE_ANNOTATE</name>
4482 <anchorfile>a00234.html</anchorfile>
4609 <anchorfile>a00240.html</anchorfile>
44834610 <anchor>gga8c314121c2fc478161bcce758688b9a1a68ca5c7ad75a6d9e5355689411621773</anchor>
44844611 <arglist></arglist>
44854612 </member>
44864613 <member kind="enumvalue">
44874614 <name>HWLOC_DISC_PHASE_TWEAK</name>
4488 <anchorfile>a00234.html</anchorfile>
4615 <anchorfile>a00240.html</anchorfile>
44894616 <anchor>gga8c314121c2fc478161bcce758688b9a1ada3ed3f00e74909353d6ea4a96cde5ad</anchor>
44904617 <arglist></arglist>
44914618 </member>
44924619 <member kind="enumeration">
44934620 <type></type>
44944621 <name>hwloc_disc_status_flag_e</name>
4495 <anchorfile>a00234.html</anchorfile>
4622 <anchorfile>a00240.html</anchorfile>
44964623 <anchor>gaae1b38cf9b12e489884ce2a07275964b</anchor>
44974624 <arglist></arglist>
44984625 </member>
44994626 <member kind="enumvalue">
45004627 <name>HWLOC_DISC_STATUS_FLAG_GOT_ALLOWED_RESOURCES</name>
4501 <anchorfile>a00234.html</anchorfile>
4628 <anchorfile>a00240.html</anchorfile>
45024629 <anchor>ggaae1b38cf9b12e489884ce2a07275964ba205d644d54a0840bd9165fce7d19e6b1</anchor>
45034630 <arglist></arglist>
45044631 </member>
45054632 <member kind="function">
45064633 <type>struct hwloc_backend *</type>
45074634 <name>hwloc_backend_alloc</name>
4508 <anchorfile>a00234.html</anchorfile>
4635 <anchorfile>a00240.html</anchorfile>
45094636 <anchor>gadb068565ab6043cbe4d16bfcce067a61</anchor>
45104637 <arglist>(struct hwloc_topology *topology, struct hwloc_disc_component *component)</arglist>
45114638 </member>
45124639 <member kind="function">
45134640 <type>int</type>
45144641 <name>hwloc_backend_enable</name>
4515 <anchorfile>a00234.html</anchorfile>
4642 <anchorfile>a00240.html</anchorfile>
45164643 <anchor>ga4715779d7191833e9b1a7490989a7497</anchor>
45174644 <arglist>(struct hwloc_backend *backend)</arglist>
45184645 </member>
45204647 <compound kind="group">
45214648 <name>hwlocality_generic_components</name>
45224649 <title>Components and Plugins: Generic components</title>
4523 <filename>a00235.html</filename>
4650 <filename>a00241.html</filename>
45244651 <class kind="struct">hwloc_component</class>
45254652 <member kind="typedef">
45264653 <type>enum hwloc_component_type_e</type>
45274654 <name>hwloc_component_type_t</name>
4528 <anchorfile>a00235.html</anchorfile>
4655 <anchorfile>a00241.html</anchorfile>
45294656 <anchor>ga31a5a455f4e666b936f0a9e8fb9a0f47</anchor>
45304657 <arglist></arglist>
45314658 </member>
45324659 <member kind="enumeration">
45334660 <type></type>
45344661 <name>hwloc_component_type_e</name>
4535 <anchorfile>a00235.html</anchorfile>
4662 <anchorfile>a00241.html</anchorfile>
45364663 <anchor>ga397a1bf7d21dd073320ad0045340f463</anchor>
45374664 <arglist></arglist>
45384665 </member>
45394666 <member kind="enumvalue">
45404667 <name>HWLOC_COMPONENT_TYPE_DISC</name>
4541 <anchorfile>a00235.html</anchorfile>
4668 <anchorfile>a00241.html</anchorfile>
45424669 <anchor>gga397a1bf7d21dd073320ad0045340f463a5d6e561f467fe9795a29e7368b613900</anchor>
45434670 <arglist></arglist>
45444671 </member>
45454672 <member kind="enumvalue">
45464673 <name>HWLOC_COMPONENT_TYPE_XML</name>
4547 <anchorfile>a00235.html</anchorfile>
4674 <anchorfile>a00241.html</anchorfile>
45484675 <anchor>gga397a1bf7d21dd073320ad0045340f463adea00cd839c2141c032e1569fd5592bd</anchor>
45494676 <arglist></arglist>
45504677 </member>
45524679 <compound kind="group">
45534680 <name>hwlocality_components_core_funcs</name>
45544681 <title>Components and Plugins: Core functions to be used by components</title>
4555 <filename>a00236.html</filename>
4682 <filename>a00242.html</filename>
45564683 <member kind="function">
45574684 <type>int</type>
45584685 <name>hwloc_hide_errors</name>
4559 <anchorfile>a00236.html</anchorfile>
4686 <anchorfile>a00242.html</anchorfile>
45604687 <anchor>gab527c1e0f243f057d31a724794ad9f88</anchor>
45614688 <arglist>(void)</arglist>
45624689 </member>
45634690 <member kind="function">
45644691 <type>hwloc_obj_t</type>
45654692 <name>hwloc__insert_object_by_cpuset</name>
4566 <anchorfile>a00236.html</anchorfile>
4693 <anchorfile>a00242.html</anchorfile>
45674694 <anchor>ga1e105cfe3c8e77f34cc6df3841deebbc</anchor>
45684695 <arglist>(struct hwloc_topology *topology, hwloc_obj_t root, hwloc_obj_t obj, const char *reason)</arglist>
45694696 </member>
45704697 <member kind="function">
45714698 <type>void</type>
45724699 <name>hwloc_insert_object_by_parent</name>
4573 <anchorfile>a00236.html</anchorfile>
4700 <anchorfile>a00242.html</anchorfile>
45744701 <anchor>ga0ef97debde503b56367689b07bb3e901</anchor>
45754702 <arglist>(struct hwloc_topology *topology, hwloc_obj_t parent, hwloc_obj_t obj)</arglist>
45764703 </member>
45774704 <member kind="function">
45784705 <type>hwloc_obj_t</type>
45794706 <name>hwloc_alloc_setup_object</name>
4580 <anchorfile>a00236.html</anchorfile>
4707 <anchorfile>a00242.html</anchorfile>
45814708 <anchor>ga0b5c75b2dc37cea2e8a29c4812baf4b3</anchor>
45824709 <arglist>(hwloc_topology_t topology, hwloc_obj_type_t type, unsigned os_index)</arglist>
45834710 </member>
45844711 <member kind="function">
45854712 <type>int</type>
45864713 <name>hwloc_obj_add_children_sets</name>
4587 <anchorfile>a00236.html</anchorfile>
4714 <anchorfile>a00242.html</anchorfile>
45884715 <anchor>ga754b61041ceee9685534a2c5d3cd0156</anchor>
45894716 <arglist>(hwloc_obj_t obj)</arglist>
45904717 </member>
45914718 <member kind="function">
45924719 <type>int</type>
45934720 <name>hwloc_topology_reconnect</name>
4594 <anchorfile>a00236.html</anchorfile>
4721 <anchorfile>a00242.html</anchorfile>
45954722 <anchor>ga120d8bd74922e1030b621409a6b0be61</anchor>
45964723 <arglist>(hwloc_topology_t topology, unsigned long flags)</arglist>
45974724 </member>
45984725 <member kind="function" static="yes">
45994726 <type>static int</type>
46004727 <name>hwloc_plugin_check_namespace</name>
4601 <anchorfile>a00236.html</anchorfile>
4728 <anchorfile>a00242.html</anchorfile>
46024729 <anchor>gac2eaed287bb215cf0bd33014e9e1d374</anchor>
46034730 <arglist>(const char *pluginname, const char *symbol)</arglist>
46044731 </member>
46064733 <compound kind="group">
46074734 <name>hwlocality_components_filtering</name>
46084735 <title>Components and Plugins: Filtering objects</title>
4609 <filename>a00237.html</filename>
4736 <filename>a00243.html</filename>
46104737 <member kind="function" static="yes">
46114738 <type>static int</type>
46124739 <name>hwloc_filter_check_pcidev_subtype_important</name>
4613 <anchorfile>a00237.html</anchorfile>
4740 <anchorfile>a00243.html</anchorfile>
46144741 <anchor>ga60203db6459ebf275bf48c40a37661a0</anchor>
46154742 <arglist>(unsigned classid)</arglist>
46164743 </member>
46174744 <member kind="function" static="yes">
46184745 <type>static int</type>
46194746 <name>hwloc_filter_check_osdev_subtype_important</name>
4620 <anchorfile>a00237.html</anchorfile>
4747 <anchorfile>a00243.html</anchorfile>
46214748 <anchor>gac7d57a6d669820f360cf2a070a396560</anchor>
46224749 <arglist>(hwloc_obj_osdev_type_t subtype)</arglist>
46234750 </member>
46244751 <member kind="function" static="yes">
46254752 <type>static int</type>
46264753 <name>hwloc_filter_check_keep_object_type</name>
4627 <anchorfile>a00237.html</anchorfile>
4754 <anchorfile>a00243.html</anchorfile>
46284755 <anchor>ga2f402a43025a8a91e8513be1a15e4635</anchor>
46294756 <arglist>(hwloc_topology_t topology, hwloc_obj_type_t type)</arglist>
46304757 </member>
46314758 <member kind="function" static="yes">
46324759 <type>static int</type>
46334760 <name>hwloc_filter_check_keep_object</name>
4634 <anchorfile>a00237.html</anchorfile>
4761 <anchorfile>a00243.html</anchorfile>
46354762 <anchor>ga4d2fdce071e5646ef147c9ff1539d1c9</anchor>
46364763 <arglist>(hwloc_topology_t topology, hwloc_obj_t obj)</arglist>
46374764 </member>
46394766 <compound kind="group">
46404767 <name>hwlocality_components_pcidisc</name>
46414768 <title>Components and Plugins: helpers for PCI discovery</title>
4642 <filename>a00238.html</filename>
4769 <filename>a00244.html</filename>
46434770 <member kind="function">
46444771 <type>unsigned</type>
46454772 <name>hwloc_pcidisc_find_cap</name>
4646 <anchorfile>a00238.html</anchorfile>
4773 <anchorfile>a00244.html</anchorfile>
46474774 <anchor>ga706f71cfea09d547d2cbafa642d6e03b</anchor>
46484775 <arglist>(const unsigned char *config, unsigned cap)</arglist>
46494776 </member>
46504777 <member kind="function">
46514778 <type>int</type>
46524779 <name>hwloc_pcidisc_find_linkspeed</name>
4653 <anchorfile>a00238.html</anchorfile>
4780 <anchorfile>a00244.html</anchorfile>
46544781 <anchor>ga51d1ebcbf9729987c9d17df3aa57d209</anchor>
46554782 <arglist>(const unsigned char *config, unsigned offset, float *linkspeed)</arglist>
46564783 </member>
46574784 <member kind="function">
46584785 <type>hwloc_obj_type_t</type>
46594786 <name>hwloc_pcidisc_check_bridge_type</name>
4660 <anchorfile>a00238.html</anchorfile>
4787 <anchorfile>a00244.html</anchorfile>
46614788 <anchor>ga6c55fb80c3d0c8c8e61078b3f38adde8</anchor>
46624789 <arglist>(unsigned device_class, const unsigned char *config)</arglist>
46634790 </member>
46644791 <member kind="function">
46654792 <type>int</type>
46664793 <name>hwloc_pcidisc_find_bridge_buses</name>
4667 <anchorfile>a00238.html</anchorfile>
4794 <anchorfile>a00244.html</anchorfile>
46684795 <anchor>ga95acf6822a49447c11067d0b843965ba</anchor>
46694796 <arglist>(unsigned domain, unsigned bus, unsigned dev, unsigned func, unsigned *secondary_busp, unsigned *subordinate_busp, const unsigned char *config)</arglist>
46704797 </member>
46714798 <member kind="function">
46724799 <type>void</type>
46734800 <name>hwloc_pcidisc_tree_insert_by_busid</name>
4674 <anchorfile>a00238.html</anchorfile>
4801 <anchorfile>a00244.html</anchorfile>
46754802 <anchor>gab76ddc4f55db8101ef0d44317965128c</anchor>
46764803 <arglist>(struct hwloc_obj **treep, struct hwloc_obj *obj)</arglist>
46774804 </member>
46784805 <member kind="function">
46794806 <type>int</type>
46804807 <name>hwloc_pcidisc_tree_attach</name>
4681 <anchorfile>a00238.html</anchorfile>
4808 <anchorfile>a00244.html</anchorfile>
46824809 <anchor>gabda1d6c1799e50b9226f8a4da9bd29ea</anchor>
46834810 <arglist>(struct hwloc_topology *topology, struct hwloc_obj *tree)</arglist>
46844811 </member>
46864813 <compound kind="group">
46874814 <name>hwlocality_components_pcifind</name>
46884815 <title>Components and Plugins: finding PCI objects during other discoveries</title>
4689 <filename>a00239.html</filename>
4816 <filename>a00245.html</filename>
4817 <member kind="typedef">
4818 <type>void *</type>
4819 <name>hwloc_backend_distances_add_handle_t</name>
4820 <anchorfile>a00245.html</anchorfile>
4821 <anchor>gafe5e49d32dd0a28ead94b6e31048e042</anchor>
4822 <arglist></arglist>
4823 </member>
46904824 <member kind="function">
46914825 <type>struct hwloc_obj *</type>
46924826 <name>hwloc_pci_find_parent_by_busid</name>
4693 <anchorfile>a00239.html</anchorfile>
4827 <anchorfile>a00245.html</anchorfile>
46944828 <anchor>ga7964833550947636ab8975909de3fa98</anchor>
46954829 <arglist>(struct hwloc_topology *topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)</arglist>
46964830 </member>
4831 <member kind="function">
4832 <type>struct hwloc_obj *</type>
4833 <name>hwloc_pci_find_by_busid</name>
4834 <anchorfile>a00245.html</anchorfile>
4835 <anchor>ga1cc465a010c5f75e0f280cdc8e27197d</anchor>
4836 <arglist>(struct hwloc_topology *topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)</arglist>
4837 </member>
4838 <member kind="function">
4839 <type>hwloc_backend_distances_add_handle_t</type>
4840 <name>hwloc_backend_distances_add_create</name>
4841 <anchorfile>a00245.html</anchorfile>
4842 <anchor>gaa66a0bd519a5b1183a3e9b0c35a7f6cc</anchor>
4843 <arglist>(hwloc_topology_t topology, const char *name, unsigned long kind, unsigned long flags)</arglist>
4844 </member>
4845 <member kind="function">
4846 <type>int</type>
4847 <name>hwloc_backend_distances_add_values</name>
4848 <anchorfile>a00245.html</anchorfile>
4849 <anchor>gaa27036bd83102f8e406f1051d560da6c</anchor>
4850 <arglist>(hwloc_topology_t topology, hwloc_backend_distances_add_handle_t handle, unsigned nbobjs, hwloc_obj_t *objs, hwloc_uint64_t *values, unsigned long flags)</arglist>
4851 </member>
4852 <member kind="function">
4853 <type>int</type>
4854 <name>hwloc_backend_distances_add_commit</name>
4855 <anchorfile>a00245.html</anchorfile>
4856 <anchor>ga1468ac5f0bfb0e18bfc04c9ce5a5a4a3</anchor>
4857 <arglist>(hwloc_topology_t topology, hwloc_backend_distances_add_handle_t handle, unsigned long flags)</arglist>
4858 </member>
46974859 </compound>
46984860 <compound kind="group">
46994861 <name>netloc_api</name>
47004862 <title>Netloc API</title>
4701 <filename>a00240.html</filename>
4863 <filename>a00246.html</filename>
47024864 <member kind="enumvalue">
47034865 <name>NETLOC_SUCCESS</name>
4704 <anchorfile>a00240.html</anchorfile>
4866 <anchorfile>a00246.html</anchorfile>
47054867 <anchor>gga61dadd085c1777f559549e05962b2c9ea4deb864e4b46fe70b83c3220442a627c</anchor>
47064868 <arglist></arglist>
47074869 </member>
47084870 <member kind="enumvalue">
47094871 <name>NETLOC_ERROR</name>
4710 <anchorfile>a00240.html</anchorfile>
4872 <anchorfile>a00246.html</anchorfile>
47114873 <anchor>gga61dadd085c1777f559549e05962b2c9ea4b33f8da6efc963562a93569ac8b349a</anchor>
47124874 <arglist></arglist>
47134875 </member>
47144876 <member kind="enumvalue">
47154877 <name>NETLOC_ERROR_NOTDIR</name>
4716 <anchorfile>a00240.html</anchorfile>
4878 <anchorfile>a00246.html</anchorfile>
47174879 <anchor>gga61dadd085c1777f559549e05962b2c9ea6e4322619d38dec18dbd16a606b14aa8</anchor>
47184880 <arglist></arglist>
47194881 </member>
47204882 <member kind="enumvalue">
47214883 <name>NETLOC_ERROR_NOENT</name>
4722 <anchorfile>a00240.html</anchorfile>
4884 <anchorfile>a00246.html</anchorfile>
47234885 <anchor>gga61dadd085c1777f559549e05962b2c9ea81bc77a77d1a42054dc64b11a4cc8612</anchor>
47244886 <arglist></arglist>
47254887 </member>
47264888 <member kind="enumvalue">
47274889 <name>NETLOC_ERROR_EMPTY</name>
4728 <anchorfile>a00240.html</anchorfile>
4890 <anchorfile>a00246.html</anchorfile>
47294891 <anchor>gga61dadd085c1777f559549e05962b2c9ea0dc7c18a5a3d027bf3f835eacdbed932</anchor>
47304892 <arglist></arglist>
47314893 </member>
47324894 <member kind="enumvalue">
47334895 <name>NETLOC_ERROR_MULTIPLE</name>
4734 <anchorfile>a00240.html</anchorfile>
4896 <anchorfile>a00246.html</anchorfile>
47354897 <anchor>gga61dadd085c1777f559549e05962b2c9ea4485021555c6cb24d5f6e391b1bd6dee</anchor>
47364898 <arglist></arglist>
47374899 </member>
47384900 <member kind="enumvalue">
47394901 <name>NETLOC_ERROR_NOT_IMPL</name>
4740 <anchorfile>a00240.html</anchorfile>
4902 <anchorfile>a00246.html</anchorfile>
47414903 <anchor>gga61dadd085c1777f559549e05962b2c9ea4a55d10dfc1eb5c84027de7d48dfac4d</anchor>
47424904 <arglist></arglist>
47434905 </member>
47444906 <member kind="enumvalue">
47454907 <name>NETLOC_ERROR_EXISTS</name>
4746 <anchorfile>a00240.html</anchorfile>
4908 <anchorfile>a00246.html</anchorfile>
47474909 <anchor>gga61dadd085c1777f559549e05962b2c9ea67dfc8498fa899900e2231fad4538556</anchor>
47484910 <arglist></arglist>
47494911 </member>
47504912 <member kind="enumvalue">
47514913 <name>NETLOC_ERROR_NOT_FOUND</name>
4752 <anchorfile>a00240.html</anchorfile>
4914 <anchorfile>a00246.html</anchorfile>
47534915 <anchor>gga61dadd085c1777f559549e05962b2c9ea61b43e2553779d3610f894fd6698a6ee</anchor>
47544916 <arglist></arglist>
47554917 </member>
47564918 <member kind="enumvalue">
47574919 <name>NETLOC_ERROR_MAX</name>
4758 <anchorfile>a00240.html</anchorfile>
4920 <anchorfile>a00246.html</anchorfile>
47594921 <anchor>gga61dadd085c1777f559549e05962b2c9ea39974c6110bed527cb7658672b8eeeb9</anchor>
47604922 <arglist></arglist>
47614923 </member>
47634925 <compound kind="page">
47644926 <name>hwloc_intro</name>
47654927 <title>Hardware Locality (hwloc) Introduction</title>
4766 <filename>a00385.html</filename>
4767 <docanchor file="a00385.html" title="hwloc Summary">hwloc_summary</docanchor>
4768 <docanchor file="a00385.html" title="hwloc Installation">hwloc_installation</docanchor>
4769 <docanchor file="a00385.html" title="Command-line Examples">cli_examples</docanchor>
4770 <docanchor file="a00385.html" title="Programming Interface">interface</docanchor>
4771 <docanchor file="a00385.html" title="Portability">portability</docanchor>
4772 <docanchor file="a00385.html" title="API Example">interface_example</docanchor>
4773 <docanchor file="a00385.html" title="History / Credits">history</docanchor>
4774 <docanchor file="a00385.html" title="Further Reading">further_reading</docanchor>
4928 <filename>a00391.html</filename>
4929 <docanchor file="a00391.html" title="hwloc Summary">hwloc_summary</docanchor>
4930 <docanchor file="a00391.html" title="hwloc Installation">hwloc_installation</docanchor>
4931 <docanchor file="a00391.html" title="Command-line Examples">cli_examples</docanchor>
4932 <docanchor file="a00391.html" title="Programming Interface">interface</docanchor>
4933 <docanchor file="a00391.html" title="Portability">portability</docanchor>
4934 <docanchor file="a00391.html" title="API Example">interface_example</docanchor>
4935 <docanchor file="a00391.html" title="History / Credits">history</docanchor>
4936 <docanchor file="a00391.html" title="Further Reading">further_reading</docanchor>
47754937 </compound>
47764938 <compound kind="page">
47774939 <name>termsanddefs</name>
47784940 <title>Terms and Definitions</title>
4779 <filename>a00386.html</filename>
4780 <docanchor file="a00386.html" title="Objects">termsanddefs_objects</docanchor>
4781 <docanchor file="a00386.html" title="Indexes and Sets">termsanddefs_indexes</docanchor>
4782 <docanchor file="a00386.html" title="Hierarchy, Tree and Levels">termsanddefs_tree</docanchor>
4941 <filename>a00392.html</filename>
4942 <docanchor file="a00392.html" title="Objects">termsanddefs_objects</docanchor>
4943 <docanchor file="a00392.html" title="Indexes and Sets">termsanddefs_indexes</docanchor>
4944 <docanchor file="a00392.html" title="Hierarchy, Tree and Levels">termsanddefs_tree</docanchor>
47834945 </compound>
47844946 <compound kind="page">
47854947 <name>tools</name>
47864948 <title>Command-Line Tools</title>
4787 <filename>a00387.html</filename>
4788 <docanchor file="a00387.html" title="lstopo and lstopo-no-graphics">cli_lstopo</docanchor>
4789 <docanchor file="a00387.html" title="hwloc-bind">cli_hwloc_bind</docanchor>
4790 <docanchor file="a00387.html" title="hwloc-calc">cli_hwloc_calc</docanchor>
4791 <docanchor file="a00387.html" title="hwloc-info">cli_hwloc_info</docanchor>
4792 <docanchor file="a00387.html" title="hwloc-distrib">cli_hwloc_distrib</docanchor>
4793 <docanchor file="a00387.html" title="hwloc-ps">cli_hwloc_ps</docanchor>
4794 <docanchor file="a00387.html" title="hwloc-annotate">cli_hwloc_annotate</docanchor>
4795 <docanchor file="a00387.html" title="hwloc-diff, hwloc-patch and hwloc-compress-dir">cli_hwloc_diffpatchcompress</docanchor>
4796 <docanchor file="a00387.html" title="hwloc-dump-hwdata">cli_hwloc_dump_hwdata</docanchor>
4797 <docanchor file="a00387.html" title="hwloc-gather-topology and hwloc-gather-cpuid">cli_hwloc_gather</docanchor>
4949 <filename>a00393.html</filename>
4950 <docanchor file="a00393.html" title="lstopo and lstopo-no-graphics">cli_lstopo</docanchor>
4951 <docanchor file="a00393.html" title="hwloc-bind">cli_hwloc_bind</docanchor>
4952 <docanchor file="a00393.html" title="hwloc-calc">cli_hwloc_calc</docanchor>
4953 <docanchor file="a00393.html" title="hwloc-info">cli_hwloc_info</docanchor>
4954 <docanchor file="a00393.html" title="hwloc-distrib">cli_hwloc_distrib</docanchor>
4955 <docanchor file="a00393.html" title="hwloc-ps">cli_hwloc_ps</docanchor>
4956 <docanchor file="a00393.html" title="hwloc-annotate">cli_hwloc_annotate</docanchor>
4957 <docanchor file="a00393.html" title="hwloc-diff, hwloc-patch and hwloc-compress-dir">cli_hwloc_diffpatchcompress</docanchor>
4958 <docanchor file="a00393.html" title="hwloc-dump-hwdata">cli_hwloc_dump_hwdata</docanchor>
4959 <docanchor file="a00393.html" title="hwloc-gather-topology and hwloc-gather-cpuid">cli_hwloc_gather</docanchor>
47984960 </compound>
47994961 <compound kind="page">
48004962 <name>envvar</name>
48014963 <title>Environment Variables</title>
4802 <filename>a00388.html</filename>
4964 <filename>a00394.html</filename>
48034965 </compound>
48044966 <compound kind="page">
48054967 <name>cpu_mem_bind</name>
48064968 <title>CPU and Memory Binding Overview</title>
4807 <filename>a00389.html</filename>
4969 <filename>a00395.html</filename>
48084970 </compound>
48094971 <compound kind="page">
48104972 <name>iodevices</name>
48114973 <title>I/O Devices</title>
4812 <filename>a00390.html</filename>
4813 <docanchor file="a00390.html" title="Enabling and requirements">iodevices_enabling</docanchor>
4814 <docanchor file="a00390.html" title="I/O objects">iodevices_objects</docanchor>
4815 <docanchor file="a00390.html" title="OS devices">iodevices_osdev</docanchor>
4816 <docanchor file="a00390.html" title="PCI devices and bridges">iodevices_pci</docanchor>
4817 <docanchor file="a00390.html" title="Consulting I/O devices and binding">iodevices_consult</docanchor>
4818 <docanchor file="a00390.html" title="Examples">iodevices_examples</docanchor>
4974 <filename>a00396.html</filename>
4975 <docanchor file="a00396.html" title="Enabling and requirements">iodevices_enabling</docanchor>
4976 <docanchor file="a00396.html" title="I/O objects">iodevices_objects</docanchor>
4977 <docanchor file="a00396.html" title="OS devices">iodevices_osdev</docanchor>
4978 <docanchor file="a00396.html" title="PCI devices and bridges">iodevices_pci</docanchor>
4979 <docanchor file="a00396.html" title="Consulting I/O devices and binding">iodevices_consult</docanchor>
4980 <docanchor file="a00396.html" title="Examples">iodevices_examples</docanchor>
48194981 </compound>
48204982 <compound kind="page">
48214983 <name>miscobjs</name>
48224984 <title>Miscellaneous objects</title>
4823 <filename>a00391.html</filename>
4824 <docanchor file="a00391.html" title="Misc objects added by hwloc">miscobjs_auto</docanchor>
4825 <docanchor file="a00391.html" title="Annotating topologies with Misc objects">miscobjs_annotate</docanchor>
4985 <filename>a00397.html</filename>
4986 <docanchor file="a00397.html" title="Misc objects added by hwloc">miscobjs_auto</docanchor>
4987 <docanchor file="a00397.html" title="Annotating topologies with Misc objects">miscobjs_annotate</docanchor>
48264988 </compound>
48274989 <compound kind="page">
48284990 <name>attributes</name>
48294991 <title>Object attributes</title>
4830 <filename>a00392.html</filename>
4831 <docanchor file="a00392.html" title="Normal attributes">attributes_normal</docanchor>
4832 <docanchor file="a00392.html" title="Custom string infos">attributes_info</docanchor>
4833 <docanchor file="a00392.html" title="Hardware Platform Information">attributes_info_platform</docanchor>
4834 <docanchor file="a00392.html" title="Operating System Information">attributes_info_os</docanchor>
4835 <docanchor file="a00392.html" title="hwloc Information">attributes_info_hwloc</docanchor>
4836 <docanchor file="a00392.html" title="CPU Information">attributes_info_cpu</docanchor>
4837 <docanchor file="a00392.html" title="OS Device Information">attributes_info_osdev</docanchor>
4838 <docanchor file="a00392.html" title="Other Object-specific Information">attributes_info_otherobjs</docanchor>
4839 <docanchor file="a00392.html" title="User-Given Information">attributes_info_user</docanchor>
4992 <filename>a00398.html</filename>
4993 <docanchor file="a00398.html" title="Normal attributes">attributes_normal</docanchor>
4994 <docanchor file="a00398.html" title="Custom string infos">attributes_info</docanchor>
4995 <docanchor file="a00398.html" title="Hardware Platform Information">attributes_info_platform</docanchor>
4996 <docanchor file="a00398.html" title="Operating System Information">attributes_info_os</docanchor>
4997 <docanchor file="a00398.html" title="hwloc Information">attributes_info_hwloc</docanchor>
4998 <docanchor file="a00398.html" title="CPU Information">attributes_info_cpu</docanchor>
4999 <docanchor file="a00398.html" title="OS Device Information">attributes_info_osdev</docanchor>
5000 <docanchor file="a00398.html" title="Other Object-specific Information">attributes_info_otherobjs</docanchor>
5001 <docanchor file="a00398.html" title="User-Given Information">attributes_info_user</docanchor>
48405002 </compound>
48415003 <compound kind="page">
48425004 <name>topoattrs</name>
48435005 <title>Topology Attributes: Distances, Memory Attributes and CPU Kinds</title>
4844 <filename>a00393.html</filename>
4845 <docanchor file="a00393.html" title="Distances">topoattrs_distances</docanchor>
4846 <docanchor file="a00393.html" title="Memory Attributes">topoattrs_memattrs</docanchor>
4847 <docanchor file="a00393.html" title="CPU Kinds">topoattrs_cpukinds</docanchor>
5006 <filename>a00399.html</filename>
5007 <docanchor file="a00399.html" title="Distances">topoattrs_distances</docanchor>
5008 <docanchor file="a00399.html" title="Memory Attributes">topoattrs_memattrs</docanchor>
5009 <docanchor file="a00399.html" title="CPU Kinds">topoattrs_cpukinds</docanchor>
48485010 </compound>
48495011 <compound kind="page">
48505012 <name>xml</name>
48515013 <title>Importing and exporting topologies from/to XML files</title>
4852 <filename>a00394.html</filename>
4853 <docanchor file="a00394.html" title="libxml2 and minimalistic XML backends">xml_backends</docanchor>
4854 <docanchor file="a00394.html" title="XML import error management">xml_errors</docanchor>
5014 <filename>a00400.html</filename>
5015 <docanchor file="a00400.html" title="libxml2 and minimalistic XML backends">xml_backends</docanchor>
5016 <docanchor file="a00400.html" title="XML import error management">xml_errors</docanchor>
48555017 </compound>
48565018 <compound kind="page">
48575019 <name>synthetic</name>
48585020 <title>Synthetic topologies</title>
4859 <filename>a00395.html</filename>
4860 <docanchor file="a00395.html" title="Synthetic description string">synthetic_string</docanchor>
4861 <docanchor file="a00395.html" title="Loading a synthetic topology">synthetic_use</docanchor>
4862 <docanchor file="a00395.html" title="Exporting a topology as a synthetic string">synthetic_export</docanchor>
5021 <filename>a00401.html</filename>
5022 <docanchor file="a00401.html" title="Synthetic description string">synthetic_string</docanchor>
5023 <docanchor file="a00401.html" title="Loading a synthetic topology">synthetic_use</docanchor>
5024 <docanchor file="a00401.html" title="Exporting a topology as a synthetic string">synthetic_export</docanchor>
48635025 </compound>
48645026 <compound kind="page">
48655027 <name>interoperability</name>
48665028 <title>Interoperability With Other Software</title>
4867 <filename>a00396.html</filename>
5029 <filename>a00402.html</filename>
48685030 </compound>
48695031 <compound kind="page">
48705032 <name>threadsafety</name>
48715033 <title>Thread Safety</title>
4872 <filename>a00397.html</filename>
5034 <filename>a00403.html</filename>
48735035 </compound>
48745036 <compound kind="page">
48755037 <name>plugins</name>
48765038 <title>Components and plugins</title>
4877 <filename>a00398.html</filename>
4878 <docanchor file="a00398.html" title="Components enabled by default">plugins_default</docanchor>
4879 <docanchor file="a00398.html" title="Selecting which components to use">plugins_select</docanchor>
4880 <docanchor file="a00398.html" title="Loading components from plugins">plugins_load</docanchor>
4881 <docanchor file="a00398.html" title="Existing components and plugins">plugins_list</docanchor>
5039 <filename>a00404.html</filename>
5040 <docanchor file="a00404.html" title="Components enabled by default">plugins_default</docanchor>
5041 <docanchor file="a00404.html" title="Selecting which components to use">plugins_select</docanchor>
5042 <docanchor file="a00404.html" title="Loading components from plugins">plugins_load</docanchor>
5043 <docanchor file="a00404.html" title="Existing components and plugins">plugins_list</docanchor>
48825044 </compound>
48835045 <compound kind="page">
48845046 <name>embed</name>
48855047 <title>Embedding hwloc in Other Software</title>
4886 <filename>a00399.html</filename>
4887 <docanchor file="a00399.html" title="Using hwloc&apos;s M4 Embedding Capabilities">embedding_m4</docanchor>
4888 <docanchor file="a00399.html" title="Example Embedding hwloc">embedding_example</docanchor>
5048 <filename>a00405.html</filename>
5049 <docanchor file="a00405.html" title="Using hwloc&apos;s M4 Embedding Capabilities">embedding_m4</docanchor>
5050 <docanchor file="a00405.html" title="Example Embedding hwloc">embedding_example</docanchor>
48895051 </compound>
48905052 <compound kind="page">
48915053 <name>faq</name>
48925054 <title>Frequently Asked Questions</title>
4893 <filename>a00400.html</filename>
4894 <docanchor file="a00400.html" title="Concepts">faq1</docanchor>
4895 <docanchor file="a00400.html" title="I only need binding, why should I use hwloc ?">faq_why</docanchor>
4896 <docanchor file="a00400.html" title="Should I use logical or physical/OS indexes? and how?">faq_indexes</docanchor>
4897 <docanchor file="a00400.html" title="hwloc is only a structural model, it ignores performance models, memory bandwidth, etc.?">faq_structural</docanchor>
4898 <docanchor file="a00400.html" title="hwloc only has a one-dimensional view of the architecture, it ignores distances?">faq_onedim</docanchor>
4899 <docanchor file="a00400.html" title="What are these Group objects in my topology?">faq_groups</docanchor>
4900 <docanchor file="a00400.html" title="What happens if my topology is asymmetric?">faq_asymmetric</docanchor>
4901 <docanchor file="a00400.html" title="What happens to my topology if I disable symmetric multithreading, hyper-threading, etc. in the system?">faq_nosmt</docanchor>
4902 <docanchor file="a00400.html" title="How may I ignore symmetric multithreading, hyper-threading, etc. in hwloc?">faq_smt</docanchor>
4903 <docanchor file="a00400.html" title="Advanced">faq2</docanchor>
4904 <docanchor file="a00400.html" title="I do not want hwloc to rediscover my enormous machine topology every time I rerun a process">faq_xml</docanchor>
4905 <docanchor file="a00400.html" title="How many topologies may I use in my program?">faq_multitopo</docanchor>
4906 <docanchor file="a00400.html" title="How to avoid memory waste when manipulating multiple similar topologies?">faq_diff</docanchor>
4907 <docanchor file="a00400.html" title="How do I annotate the topology with private notes?">faq_annotate</docanchor>
4908 <docanchor file="a00400.html" title="Caveats">faq3</docanchor>
4909 <docanchor file="a00400.html" title="Why is hwloc slow?">faq_slow_lstopo</docanchor>
4910 <docanchor file="a00400.html" title="Does hwloc require privileged access?">faq_privileged</docanchor>
4911 <docanchor file="a00400.html" title="What should I do when hwloc reports &quot;operating system&quot; warnings?">faq_os_error</docanchor>
4912 <docanchor file="a00400.html" title="Why does Valgrind complain about hwloc memory leaks?">faq_valgrind</docanchor>
4913 <docanchor file="a00400.html" title="Platform-specific">faq4</docanchor>
4914 <docanchor file="a00400.html" title="How do I find the local MCDRAM NUMA node on Intel Xeon Phi processor?">faq_knl_numa</docanchor>
4915 <docanchor file="a00400.html" title="Why do I need hwloc-dump-hwdata for memory on Intel Xeon Phi processor?">faq_knl_dump</docanchor>
4916 <docanchor file="a00400.html" title="How do I build hwloc for BlueGene/Q?">faq_bgq</docanchor>
4917 <docanchor file="a00400.html" title="How do I build hwloc for Windows?">faq_windows</docanchor>
4918 <docanchor file="a00400.html" title="How to get useful topology information on NetBSD?">faq_netbsd_bind</docanchor>
4919 <docanchor file="a00400.html" title="Why does binding fail on AIX?">faq_aix_bind</docanchor>
4920 <docanchor file="a00400.html" title="Compatibility between hwloc versions">faq5</docanchor>
4921 <docanchor file="a00400.html" title="How do I handle API changes?">faq_version_api</docanchor>
4922 <docanchor file="a00400.html" title="What is the difference between API and library version numbers?">faq_version</docanchor>
4923 <docanchor file="a00400.html" title="How do I handle ABI breaks?">faq_version_abi</docanchor>
4924 <docanchor file="a00400.html" title="Are XML topology files compatible between hwloc releases?">faq_version_xml</docanchor>
4925 <docanchor file="a00400.html" title="Are synthetic strings compatible between hwloc releases?">faq_version_synthetic</docanchor>
4926 <docanchor file="a00400.html" title="Is it possible to share a shared-memory topology between different hwloc releases?">faq_version_shmem</docanchor>
5055 <filename>a00406.html</filename>
5056 <docanchor file="a00406.html" title="Concepts">faq1</docanchor>
5057 <docanchor file="a00406.html" title="I only need binding, why should I use hwloc ?">faq_why</docanchor>
5058 <docanchor file="a00406.html" title="Should I use logical or physical/OS indexes? and how?">faq_indexes</docanchor>
5059 <docanchor file="a00406.html" title="hwloc is only a structural model, it ignores performance models, memory bandwidth, etc.?">faq_structural</docanchor>
5060 <docanchor file="a00406.html" title="hwloc only has a one-dimensional view of the architecture, it ignores distances?">faq_onedim</docanchor>
5061 <docanchor file="a00406.html" title="What are these Group objects in my topology?">faq_groups</docanchor>
5062 <docanchor file="a00406.html" title="What happens if my topology is asymmetric?">faq_asymmetric</docanchor>
5063 <docanchor file="a00406.html" title="What happens to my topology if I disable symmetric multithreading, hyper-threading, etc. in the system?">faq_nosmt</docanchor>
5064 <docanchor file="a00406.html" title="How may I ignore symmetric multithreading, hyper-threading, etc. in hwloc?">faq_smt</docanchor>
5065 <docanchor file="a00406.html" title="Advanced">faq2</docanchor>
5066 <docanchor file="a00406.html" title="I do not want hwloc to rediscover my enormous machine topology every time I rerun a process">faq_xml</docanchor>
5067 <docanchor file="a00406.html" title="How many topologies may I use in my program?">faq_multitopo</docanchor>
5068 <docanchor file="a00406.html" title="How to avoid memory waste when manipulating multiple similar topologies?">faq_diff</docanchor>
5069 <docanchor file="a00406.html" title="How do I annotate the topology with private notes?">faq_annotate</docanchor>
5070 <docanchor file="a00406.html" title="Caveats">faq3</docanchor>
5071 <docanchor file="a00406.html" title="Why is hwloc slow?">faq_slow_lstopo</docanchor>
5072 <docanchor file="a00406.html" title="Does hwloc require privileged access?">faq_privileged</docanchor>
5073 <docanchor file="a00406.html" title="What should I do when hwloc reports &quot;operating system&quot; warnings?">faq_os_error</docanchor>
5074 <docanchor file="a00406.html" title="Why does Valgrind complain about hwloc memory leaks?">faq_valgrind</docanchor>
5075 <docanchor file="a00406.html" title="Platform-specific">faq4</docanchor>
5076 <docanchor file="a00406.html" title="How do I enable CUDA and select which CUDA version to use?">faq_cuda_build</docanchor>
5077 <docanchor file="a00406.html" title="How do I find the local MCDRAM NUMA node on Intel Xeon Phi processor?">faq_knl_numa</docanchor>
5078 <docanchor file="a00406.html" title="Why do I need hwloc-dump-hwdata for memory on Intel Xeon Phi processor?">faq_knl_dump</docanchor>
5079 <docanchor file="a00406.html" title="How do I build hwloc for BlueGene/Q?">faq_bgq</docanchor>
5080 <docanchor file="a00406.html" title="How do I build hwloc for Windows?">faq_windows</docanchor>
5081 <docanchor file="a00406.html" title="How to get useful topology information on NetBSD?">faq_netbsd_bind</docanchor>
5082 <docanchor file="a00406.html" title="Why does binding fail on AIX?">faq_aix_bind</docanchor>
5083 <docanchor file="a00406.html" title="Compatibility between hwloc versions">faq5</docanchor>
5084 <docanchor file="a00406.html" title="How do I handle API changes?">faq_version_api</docanchor>
5085 <docanchor file="a00406.html" title="What is the difference between API and library version numbers?">faq_version</docanchor>
5086 <docanchor file="a00406.html" title="How do I handle ABI breaks?">faq_version_abi</docanchor>
5087 <docanchor file="a00406.html" title="Are XML topology files compatible between hwloc releases?">faq_version_xml</docanchor>
5088 <docanchor file="a00406.html" title="Are synthetic strings compatible between hwloc releases?">faq_version_synthetic</docanchor>
5089 <docanchor file="a00406.html" title="Is it possible to share a shared-memory topology between different hwloc releases?">faq_version_shmem</docanchor>
49275090 </compound>
49285091 <compound kind="page">
49295092 <name>upgrade_to_api_2x</name>
49305093 <title>Upgrading to the hwloc 2.0 API</title>
4931 <filename>a00401.html</filename>
4932 <docanchor file="a00401.html" title="New Organization of NUMA nodes and Memory">upgrade_to_api_2x_memory</docanchor>
4933 <docanchor file="a00401.html" title="Memory children">upgrade_to_api_2x_memory_children</docanchor>
4934 <docanchor file="a00401.html" title="Examples">upgrade_to_api_2x_memory_examples</docanchor>
4935 <docanchor file="a00401.html" title="NUMA level and depth">upgrade_to_api_2x_numa_level</docanchor>
4936 <docanchor file="a00401.html" title="Finding Local NUMA nodes and looking at Children and Parents">upgrade_to_api_2x_memory_find</docanchor>
4937 <docanchor file="a00401.html" title="4 Kinds of Objects and Children">upgrade_to_api_2x_children</docanchor>
4938 <docanchor file="a00401.html" title="I/O and Misc children">upgrade_to_api_2x_io_misc_children</docanchor>
4939 <docanchor file="a00401.html" title="Kinds of objects">upgrade_to_api_2x_kinds_subsec</docanchor>
4940 <docanchor file="a00401.html" title="HWLOC_OBJ_CACHE replaced">upgrade_to_api_2x_cache</docanchor>
4941 <docanchor file="a00401.html" title="allowed_cpuset and allowed_nodeset only in the main topology">upgrade_to_api_2x_allowed</docanchor>
4942 <docanchor file="a00401.html" title="Object depths are now signed int">upgrade_to_api_2x_depth</docanchor>
4943 <docanchor file="a00401.html" title="Memory attributes become NUMANode-specific">upgrade_to_api_2x_memory_attrs</docanchor>
4944 <docanchor file="a00401.html" title="Topology configuration changes">upgrade_to_api_2x_config</docanchor>
4945 <docanchor file="a00401.html" title="XML changes">upgrade_to_api_2x_xml</docanchor>
4946 <docanchor file="a00401.html" title="Distances API totally rewritten">upgrade_to_api_2x_distances</docanchor>
4947 <docanchor file="a00401.html" title="Return values of functions">upgrade_to_api_2x_return</docanchor>
4948 <docanchor file="a00401.html" title="Misc API changes">upgrade_to_api_2x_misc</docanchor>
4949 <docanchor file="a00401.html" title="API removals and deprecations">upgrade_to_api_2x_removals</docanchor>
5094 <filename>a00407.html</filename>
5095 <docanchor file="a00407.html" title="New Organization of NUMA nodes and Memory">upgrade_to_api_2x_memory</docanchor>
5096 <docanchor file="a00407.html" title="Memory children">upgrade_to_api_2x_memory_children</docanchor>
5097 <docanchor file="a00407.html" title="Examples">upgrade_to_api_2x_memory_examples</docanchor>
5098 <docanchor file="a00407.html" title="NUMA level and depth">upgrade_to_api_2x_numa_level</docanchor>
5099 <docanchor file="a00407.html" title="Finding Local NUMA nodes and looking at Children and Parents">upgrade_to_api_2x_memory_find</docanchor>
5100 <docanchor file="a00407.html" title="4 Kinds of Objects and Children">upgrade_to_api_2x_children</docanchor>
5101 <docanchor file="a00407.html" title="I/O and Misc children">upgrade_to_api_2x_io_misc_children</docanchor>
5102 <docanchor file="a00407.html" title="Kinds of objects">upgrade_to_api_2x_kinds_subsec</docanchor>
5103 <docanchor file="a00407.html" title="HWLOC_OBJ_CACHE replaced">upgrade_to_api_2x_cache</docanchor>
5104 <docanchor file="a00407.html" title="allowed_cpuset and allowed_nodeset only in the main topology">upgrade_to_api_2x_allowed</docanchor>
5105 <docanchor file="a00407.html" title="Object depths are now signed int">upgrade_to_api_2x_depth</docanchor>
5106 <docanchor file="a00407.html" title="Memory attributes become NUMANode-specific">upgrade_to_api_2x_memory_attrs</docanchor>
5107 <docanchor file="a00407.html" title="Topology configuration changes">upgrade_to_api_2x_config</docanchor>
5108 <docanchor file="a00407.html" title="XML changes">upgrade_to_api_2x_xml</docanchor>
5109 <docanchor file="a00407.html" title="Distances API totally rewritten">upgrade_to_api_2x_distances</docanchor>
5110 <docanchor file="a00407.html" title="Return values of functions">upgrade_to_api_2x_return</docanchor>
5111 <docanchor file="a00407.html" title="Misc API changes">upgrade_to_api_2x_misc</docanchor>
5112 <docanchor file="a00407.html" title="API removals and deprecations">upgrade_to_api_2x_removals</docanchor>
49505113 </compound>
49515114 <compound kind="page">
49525115 <name>netloc_intro</name>
49535116 <title>Network Locality (netloc)</title>
4954 <filename>a00402.html</filename>
4955 <docanchor file="a00402.html" title="Netloc Summary">netloc_summary</docanchor>
4956 <docanchor file="a00402.html" title="Supported Networks">supportednetworks</docanchor>
4957 <docanchor file="a00402.html" title="Netloc Installation">netloc_installation</docanchor>
4958 <docanchor file="a00402.html" title="Setup">netloc_setup</docanchor>
4959 <docanchor file="a00402.html" title="Topology display">netloc_draw</docanchor>
4960 <docanchor file="a00402.html" title="Generate the JSON file">netloc_draw_setup</docanchor>
4961 <docanchor file="a00402.html" title="Using netloc_draw">netloc_draw_tool</docanchor>
5117 <filename>a00408.html</filename>
5118 <docanchor file="a00408.html" title="Netloc Summary">netloc_summary</docanchor>
5119 <docanchor file="a00408.html" title="Supported Networks">supportednetworks</docanchor>
5120 <docanchor file="a00408.html" title="Netloc Installation">netloc_installation</docanchor>
5121 <docanchor file="a00408.html" title="Setup">netloc_setup</docanchor>
5122 <docanchor file="a00408.html" title="Topology display">netloc_draw</docanchor>
5123 <docanchor file="a00408.html" title="Generate the JSON file">netloc_draw_setup</docanchor>
5124 <docanchor file="a00408.html" title="Using netloc_draw">netloc_draw_tool</docanchor>
49625125 </compound>
49635126 <compound kind="page">
49645127 <name>netloc_scotch</name>
49655128 <title>Netloc with Scotch</title>
4966 <filename>a00403.html</filename>
4967 <docanchor file="a00403.html" title="Introduction">scotch_intro</docanchor>
4968 <docanchor file="a00403.html" title="Setup">scotch_setup</docanchor>
4969 <docanchor file="a00403.html" title="Tools and API">scotch_tools_api</docanchor>
4970 <docanchor file="a00403.html" title="Build Scotch architectures">netlocscotch_arch</docanchor>
4971 <docanchor file="a00403.html" title="Build Scotch sub-architectures">netlocscotch_subarch</docanchor>
4972 <docanchor file="a00403.html" title="Mapping of processes">netlocscotch_mapping</docanchor>
5129 <filename>a00409.html</filename>
5130 <docanchor file="a00409.html" title="Introduction">scotch_intro</docanchor>
5131 <docanchor file="a00409.html" title="Setup">scotch_setup</docanchor>
5132 <docanchor file="a00409.html" title="Tools and API">scotch_tools_api</docanchor>
5133 <docanchor file="a00409.html" title="Build Scotch architectures">netlocscotch_arch</docanchor>
5134 <docanchor file="a00409.html" title="Build Scotch sub-architectures">netlocscotch_subarch</docanchor>
5135 <docanchor file="a00409.html" title="Mapping of processes">netlocscotch_mapping</docanchor>
49735136 </compound>
49745137 <compound kind="page">
49755138 <name>index</name>
0 .TH "hwloc_backend" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwloc_backend" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .so man3/hwlocality_components_pcifind.3
0 .so man3/hwlocality_components_pcifind.3
0 .so man3/hwlocality_components_pcifind.3
0 .so man3/hwlocality_components_pcifind.3
0 .TH "hwloc_cl_device_topology_amd" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwloc_cl_device_topology_amd" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwloc_component" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwloc_component" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwloc_disc_component" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwloc_disc_component" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwloc_disc_status" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwloc_disc_status" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
+0
-1
doc/doxygen-doc/man/man3/hwloc_distances_add.3 less more
0 .so man3/hwlocality_distances_add.3
0 .so man3/hwlocality_distances_add.3
0 .so man3/hwlocality_distances_add.3
0 .so man3/hwlocality_distances_add.3
0 .so man3/hwlocality_distances_add.3
0 .so man3/hwlocality_distances_add.3
0 .so man3/hwlocality_distances_remove.3
0 .so man3/hwlocality_distances_add.3
0 .so man3/hwlocality_distances_remove.3
0 .so man3/hwlocality_distances_add.3
0 .so man3/hwlocality_distances_remove.3
0 .so man3/hwlocality_distances_add.3
0 .so man3/hwlocality_distances_remove.3
0 .TH "hwloc_distances_s" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwloc_distances_s" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
2727 .PP
2828 Matrix of distances between a set of objects\&.
2929
30 This matrix often contains latencies between NUMA nodes (as reported in the System Locality Distance Information Table (SLIT) in the ACPI specification), which may or may not be physically accurate\&. It corresponds to the latency for accessing the memory of one node from a core in another node\&. The corresponding kind is \fBHWLOC_DISTANCES_KIND_FROM_OS\fP | \fBHWLOC_DISTANCES_KIND_FROM_USER\fP\&. The name of this distances structure is 'NUMALatency'\&.
30 This matrix often contains latencies between NUMA nodes (as reported in the System Locality Distance Information Table (SLIT) in the ACPI specification), which may or may not be physically accurate\&. It corresponds to the latency for accessing the memory of one node from a core in another node\&. The corresponding kind is \fBHWLOC_DISTANCES_KIND_FROM_OS\fP | \fBHWLOC_DISTANCES_KIND_FROM_USER\fP\&. The name of this distances structure is 'NUMALatency'\&. Others distance structures include and 'XGMIBandwidth' and 'NVLinkBandwidth'\&.
3131 .PP
32 The matrix may also contain bandwidths between random sets of objects, possibly provided by the user, as specified in the \fCkind\fP attribute\&.
32 The matrix may also contain bandwidths between random sets of objects, possibly provided by the user, as specified in the \fCkind\fP attribute\&.
33 .PP
34 Pointers \fCobjs\fP and \fCvalues\fP should not be replaced, reallocated, freed, etc\&. However callers are allowed to modify \fCkind\fP as well as the contents of \fCobjs\fP and \fCvalues\fP arrays\&. For instance, if there is a single NUMA node per Package, \fBhwloc_get_obj_with_same_locality()\fP may be used to convert between them and replace NUMA nodes in the \fCobjs\fP array with the corresponding Packages\&. See also \fBhwloc_distances_transform()\fP for applying some transformations to the structure\&.
3335 .SH "Field Documentation"
3436 .PP
3537 .SS "unsigned long hwloc_distances_s::kind"
0 .so man3/hwlocality_distances_get.3
0 .so man3/hwlocality_distances_get.3
0 .so man3/hwlocality_helper_find_misc.3
0 .TH "hwloc_info_s" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwloc_info_s" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwloc_intro" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwloc_intro" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
8787 .IP "\(bu" 2
8888 AMD or NVIDIA OpenCL implementations for OpenCL device discovery\&.
8989 .IP "\(bu" 2
90 the NVIDIA CUDA Toolkit for CUDA device discovery\&.
90 the NVIDIA CUDA Toolkit for CUDA device discovery\&. See \fBHow do I enable CUDA and select which CUDA version to use?\fP\&.
9191 .IP "\(bu" 2
9292 the NVIDIA Management Library (NVML) for NVML device discovery\&. It is included in CUDA since version 8\&.0\&. Older NVML releases were available within the NVIDIA GPU Deployment Kit from https://developer.nvidia.com/gpu-deployment-kit \&.
9393 .IP "\(bu" 2
9494 the NV-CONTROL X extension library (NVCtrl) for NVIDIA display discovery\&. The relevant development package is usually \fClibXNVCtrl-devel\fP or \fClibxnvctrl-dev\fP\&. It is also available within nvidia-settings from ftp://download.nvidia.com/XFree86/nvidia-settings/ and https://github.com/NVIDIA/nvidia-settings/ \&.
9595 .IP "\(bu" 2
9696 the AMD ROCm SMI library for RSMI device discovery\&. The relevant development package is usually \fCrocm-smi-lib64\fP or \fClibrocm-smi-dev\fP\&.
97 .IP "\(bu" 2
98 the oneAPI Level Zero library\&. The relevant development package is usually \fClevel-zero-dev\fP or \fClevel-zero-devel\fP\&.
9799 .IP "\(bu" 2
98100 libxml2 for full XML import/export support (otherwise, the internal minimalistic parser will only be able to import XML files that were exported by the same hwloc release)\&. See \fBImporting and exporting topologies from/to XML files\fP for details\&. The relevant development package is usually \fClibxml2-devel\fP or \fClibxml2-dev\fP\&.
99101 .IP "\(bu" 2
0 .TH "hwloc_location" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwloc_location" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwloc_location::hwloc_location_u" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwloc_location::hwloc_location_u" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwloc_obj" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwloc_obj" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwloc_obj_attr_u" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwloc_obj_attr_u" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwloc_obj_attr_u::hwloc_bridge_attr_s" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwloc_obj_attr_u::hwloc_bridge_attr_s" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwloc_obj_attr_u::hwloc_cache_attr_s" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwloc_obj_attr_u::hwloc_cache_attr_s" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwloc_obj_attr_u::hwloc_group_attr_s" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwloc_obj_attr_u::hwloc_group_attr_s" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwloc_obj_attr_u::hwloc_numanode_attr_s" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwloc_obj_attr_u::hwloc_numanode_attr_s" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwloc_obj_attr_u::hwloc_numanode_attr_s::hwloc_memory_page_type_s" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwloc_obj_attr_u::hwloc_osdev_attr_s" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwloc_obj_attr_u::hwloc_osdev_attr_s" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwloc_obj_attr_u::hwloc_pcidev_attr_s" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwloc_obj_attr_u::hwloc_pcidev_attr_s" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .so man3/hwlocality_components_pcifind.3
0 .TH "hwloc_topology_cpubind_support" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwloc_topology_cpubind_support" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwloc_topology_diff_obj_attr_u" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwloc_topology_diff_obj_attr_u" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_generic_s" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_string_s" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwloc_topology_diff_obj_attr_u::hwloc_topology_diff_obj_attr_uint64_s" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwloc_topology_diff_u" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwloc_topology_diff_u" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwloc_topology_diff_u::hwloc_topology_diff_generic_s" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwloc_topology_diff_u::hwloc_topology_diff_generic_s" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwloc_topology_diff_u::hwloc_topology_diff_obj_attr_s" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwloc_topology_diff_u::hwloc_topology_diff_too_complex_s" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwloc_topology_discovery_support" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwloc_topology_discovery_support" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwloc_topology_membind_support" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwloc_topology_membind_support" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwloc_topology_misc_support" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwloc_topology_misc_support" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwloc_topology_support" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwloc_topology_support" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwlocality_advanced_io" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_advanced_io" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwlocality_api_version" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_api_version" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
99
1010 .in +1c
1111 .ti -1c
12 .RI "#define \fBHWLOC_API_VERSION\fP 0x00020400"
12 .RI "#define \fBHWLOC_API_VERSION\fP 0x00020500"
1313 .br
1414 .ti -1c
1515 .RI "#define \fBHWLOC_COMPONENT_ABI\fP 7"
2727
2828 .SH "Macro Definition Documentation"
2929 .PP
30 .SS "#define HWLOC_API_VERSION 0x00020400"
30 .SS "#define HWLOC_API_VERSION 0x00020500"
3131
3232 .PP
3333 Indicate at build time which hwloc API version is being used\&. This number is updated to (X<<16)+(Y<<8)+Z when a new release X\&.Y\&.Z actually modifies the API\&.
0 .TH "hwlocality_bitmap" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_bitmap" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwlocality_components_core_funcs" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_components_core_funcs" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
3333 .SH "Detailed Description"
3434 .PP
3535
36 .PP
37 \fBNote\fP
38 .RS 4
39 These structures and functions may change when \fBHWLOC_COMPONENT_ABI\fP is modified\&.
40 .RE
41 .PP
42
3643 .SH "Function Documentation"
3744 .PP
3845 .SS "\fBhwloc_obj_t\fP hwloc__insert_object_by_cpuset (struct hwloc_topology * topology, \fBhwloc_obj_t\fP root, \fBhwloc_obj_t\fP obj, const char * reason)"
6269 .SS "int hwloc_hide_errors (void)"
6370
6471 .PP
65 Check whether insertion errors are hidden\&.
72 Check whether error messages are hidden\&. Callers should print critical error messages (e\&.g\&. invalid hw topo info, invalid config) only if this function returns strictly less than 2\&.
73 .PP
74 Callers should print non-critical error messages (e\&.g\&. failure to initialize CUDA) if this function returns 0\&.
75 .PP
76 This function return 1 by default (show critical only), 0 in lstopo (show all), or anything set in HWLOC_HIDE_ERRORS in the environment\&.
6677 .SS "void hwloc_insert_object_by_parent (struct hwloc_topology * topology, \fBhwloc_obj_t\fP parent, \fBhwloc_obj_t\fP obj)"
6778
6879 .PP
0 .TH "hwlocality_components_filtering" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_components_filtering" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
2323 .in -1c
2424 .SH "Detailed Description"
2525 .PP
26
27 .PP
28 \fBNote\fP
29 .RS 4
30 These structures and functions may change when \fBHWLOC_COMPONENT_ABI\fP is modified\&.
31 .RE
32 .PP
2633
2734 .SH "Function Documentation"
2835 .PP
0 .TH "hwlocality_components_pcidisc" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_components_pcidisc" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
3030 .SH "Detailed Description"
3131 .PP
3232
33 .PP
34 \fBNote\fP
35 .RS 4
36 These structures and functions may change when \fBHWLOC_COMPONENT_ABI\fP is modified\&.
37 .RE
38 .PP
39
3340 .SH "Function Documentation"
3441 .PP
3542 .SS "\fBhwloc_obj_type_t\fP hwloc_pcidisc_check_bridge_type (unsigned device_class, const unsigned char * config)"
0 .TH "hwlocality_components_pcifind" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_components_pcifind" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
55 .SH SYNOPSIS
66 .br
77 .PP
8 .SS "Typedefs"
9
10 .in +1c
11 .ti -1c
12 .RI "typedef void * \fBhwloc_backend_distances_add_handle_t\fP"
13 .br
14 .in -1c
815 .SS "Functions"
916
1017 .in +1c
1118 .ti -1c
1219 .RI "struct \fBhwloc_obj\fP * \fBhwloc_pci_find_parent_by_busid\fP (struct hwloc_topology *topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)"
1320 .br
21 .ti -1c
22 .RI "struct \fBhwloc_obj\fP * \fBhwloc_pci_find_by_busid\fP (struct hwloc_topology *topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)"
23 .br
24 .ti -1c
25 .RI "\fBhwloc_backend_distances_add_handle_t\fP \fBhwloc_backend_distances_add_create\fP (\fBhwloc_topology_t\fP topology, const char *name, unsigned long kind, unsigned long flags)"
26 .br
27 .ti -1c
28 .RI "int \fBhwloc_backend_distances_add_values\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_backend_distances_add_handle_t\fP handle, unsigned nbobjs, \fBhwloc_obj_t\fP *objs, hwloc_uint64_t *values, unsigned long flags)"
29 .br
30 .ti -1c
31 .RI "int \fBhwloc_backend_distances_add_commit\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_backend_distances_add_handle_t\fP handle, unsigned long flags)"
32 .br
1433 .in -1c
1534 .SH "Detailed Description"
1635 .PP
1736
37 .PP
38 \fBNote\fP
39 .RS 4
40 These structures and functions may change when \fBHWLOC_COMPONENT_ABI\fP is modified\&.
41 .RE
42 .PP
43
44 .SH "Typedef Documentation"
45 .PP
46 .SS "typedef void* \fBhwloc_backend_distances_add_handle_t\fP"
47
48 .PP
49 Handle to a new distances structure during its addition to the topology\&.
1850 .SH "Function Documentation"
1951 .PP
52 .SS "int hwloc_backend_distances_add_commit (\fBhwloc_topology_t\fP topology, \fBhwloc_backend_distances_add_handle_t\fP handle, unsigned long flags)"
53
54 .PP
55 Commit a new distances structure\&. This is similar to \fBhwloc_distances_add_commit()\fP but this variant is designed for backend inserting distances during topology discovery\&.
56 .SS "\fBhwloc_backend_distances_add_handle_t\fP hwloc_backend_distances_add_create (\fBhwloc_topology_t\fP topology, const char * name, unsigned long kind, unsigned long flags)"
57
58 .PP
59 Create a new empty distances structure\&. This is identical to \fBhwloc_distances_add_create()\fP but this variant is designed for backend inserting distances during topology discovery\&.
60 .SS "int hwloc_backend_distances_add_values (\fBhwloc_topology_t\fP topology, \fBhwloc_backend_distances_add_handle_t\fP handle, unsigned nbobjs, \fBhwloc_obj_t\fP * objs, hwloc_uint64_t * values, unsigned long flags)"
61
62 .PP
63 Specify the objects and values in a new empty distances structure\&. This is similar to \fBhwloc_distances_add_values()\fP but this variant is designed for backend inserting distances during topology discovery\&.
64 .PP
65 The only semantical difference is that \fCobjs\fP and \fCvalues\fP are not duplicated, but directly attached to the topology\&. On success, these arrays are given to the core and should not ever be freed by the caller anymore\&.
66 .SS "struct \fBhwloc_obj\fP* hwloc_pci_find_by_busid (struct hwloc_topology * topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)"
67
68 .PP
69 Find the PCI device or bridge matching a PCI bus ID exactly\&. This is useful for adding specific information about some objects based on their PCI id\&. When it comes to attaching objects based on PCI locality, \fBhwloc_pci_find_parent_by_busid()\fP should be preferred\&.
2070 .SS "struct \fBhwloc_obj\fP* hwloc_pci_find_parent_by_busid (struct hwloc_topology * topology, unsigned domain, unsigned bus, unsigned dev, unsigned func)"
2171
2272 .PP
23 Find the normal parent of a PCI bus ID\&. Look at PCI affinity to find out where the given PCI bus ID should be attached\&.
73 Find the object or a parent of a PCI bus ID\&. When attaching a new object (typically an OS device) whose locality is specified by PCI bus ID, this function returns the PCI object to use as a parent for attaching\&.
2474 .PP
25 This function should be used to attach an I/O device under the corresponding PCI object (if any), or under a normal (non-I/O) object with same locality\&.
75 If the exact PCI device with this bus ID exists, it is returned\&. Otherwise (for instance if it was filtered out), the function returns another object with similar locality (for instance a parent bridge, or the local CPU Package)\&.
2676 .SH "Author"
2777 .PP
2878 Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
0 .TH "hwlocality_configuration" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_configuration" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
2828
2929 .in +1c
3030 .ti -1c
31 .RI "enum \fBhwloc_topology_flags_e\fP { \fBHWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED\fP, \fBHWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM\fP, \fBHWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES\fP, \fBHWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT\fP = (1UL<<3) }"
31 .RI "enum \fBhwloc_topology_flags_e\fP { \fBHWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED\fP, \fBHWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM\fP, \fBHWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES\fP, \fBHWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT\fP = (1UL<<3), \fBHWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING\fP = (1UL<<4), \fBHWLOC_TOPOLOGY_FLAG_RESTRICT_TO_MEMBINDING\fP = (1UL<<5), \fBHWLOC_TOPOLOGY_FLAG_DONT_CHANGE_BINDING\fP = (1UL<<6) }"
3232 .br
3333 .ti -1c
3434 .RI "enum \fBhwloc_type_filter_e\fP { \fBHWLOC_TYPE_FILTER_KEEP_ALL\fP, \fBHWLOC_TYPE_FILTER_KEEP_NONE\fP, \fBHWLOC_TYPE_FILTER_KEEP_STRUCTURE\fP, \fBHWLOC_TYPE_FILTER_KEEP_IMPORTANT\fP }"
120120 Note that these supported features are only relevant for the hwloc installation that actually exported the XML topology (it may vary with the operating system, or with how hwloc was compiled)\&.
121121 .PP
122122 Note that setting this flag however does not enable binding for the locally imported hwloc topology, it only reports what the remote hwloc and machine support\&.
123 .TP
124 \fB\fIHWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING \fP\fP
125 Do not consider resources outside of the process CPU binding\&. If the binding of the process is limited to a subset of cores, ignore the other cores during discovery\&.
126 .PP
127 The resulting topology is identical to what a call to \fBhwloc_topology_restrict()\fP would generate, but this flag also prevents hwloc from ever touching other resources during the discovery\&.
128 .PP
129 This flag especially tells the x86 backend to never temporarily rebind a thread on any excluded core\&. This is useful on Windows because such temporary rebinding can change the process binding\&.
130 .PP
131 If process CPU binding is not supported, the thread CPU binding is considered instead if supported, or the flag is ignored\&.
132 .PP
133 This flag requires \fBHWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM\fP as well since binding support is required\&.
134 .TP
135 \fB\fIHWLOC_TOPOLOGY_FLAG_RESTRICT_TO_MEMBINDING \fP\fP
136 Do not consider resources outside of the process memory binding\&. If the binding of the process is limited to a subset of NUMA nodes, ignore the other NUMA nodes during discovery\&.
137 .PP
138 The resulting topology is identical to what a call to \fBhwloc_topology_restrict()\fP would generate, but this flag also prevents hwloc from ever touching other resources during the discovery\&.
139 .PP
140 This flag is meant to be used together with \fBHWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING\fP when both cores and NUMA nodes should be ignored outside of the process binding\&.
141 .PP
142 If process memory binding is not supported, the thread memory binding is considered instead if supported, or the flag is ignored\&.
143 .PP
144 This flag requires \fBHWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM\fP as well since binding support is required\&.
145 .TP
146 \fB\fIHWLOC_TOPOLOGY_FLAG_DONT_CHANGE_BINDING \fP\fP
147 Do not ever modify the process or thread binding during discovery\&. This flag disables all hwloc discovery steps that require a change of the process or thread binding\&. This currently only affects the x86 backend which gets entirely disabled\&.
148 .PP
149 This is useful when \fBhwloc_topology_load()\fP is called while the application also creates additional threads or modifies the binding\&.
150 .PP
151 This flag is also a strict way to make sure the process binding will not change to due thread binding changes on Windows (see \fBHWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING\fP)\&.
123152 .SS "enum \fBhwloc_type_filter_e\fP"
124153
125154 .PP
0 .TH "hwlocality_cpubinding" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_cpubinding" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwlocality_cpukinds" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_cpukinds" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwlocality_creation" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_creation" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwlocality_cuda" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_cuda" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
3232 .SS "static int hwloc_cuda_get_device_cpuset (\fBhwloc_topology_t\fP topology, CUdevice cudevice, \fBhwloc_cpuset_t\fP set)\fC [inline]\fP, \fC [static]\fP"
3333
3434 .PP
35 Get the CPU set of processors that are physically close to device \fCcudevice\fP\&. Return the CPU set describing the locality of the CUDA device \fCcudevice\fP\&.
35 Get the CPU set of processors that are physically close to device \fCcudevice\fP\&. Store in \fCset\fP the CPU-set describing the locality of the CUDA device \fCcudevice\fP\&.
3636 .PP
3737 Topology \fCtopology\fP and device \fCcudevice\fP must match the local machine\&. I/O devices detection and the CUDA component are not needed in the topology\&.
3838 .PP
4242 .SS "static \fBhwloc_obj_t\fP hwloc_cuda_get_device_osdev (\fBhwloc_topology_t\fP topology, CUdevice cudevice)\fC [inline]\fP, \fC [static]\fP"
4343
4444 .PP
45 Get the hwloc OS device object corresponding to CUDA device \fCcudevice\fP\&. Return the hwloc OS device object that describes the given CUDA device \fCcudevice\fP\&. Return NULL if there is none\&.
45 Get the hwloc OS device object corresponding to CUDA device \fCcudevice\fP\&.
46 .PP
47 \fBReturns\fP
48 .RS 4
49 The hwloc OS device object that describes the given CUDA device \fCcudevice\fP\&.
50 .PP
51 \fCNULL\fP if none could be found\&.
52 .RE
4653 .PP
4754 Topology \fCtopology\fP and device \fCcudevice\fP 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 \fBhwloc_cuda_get_device_cpuset()\fP\&.
4855 .PP
5764 .SS "static \fBhwloc_obj_t\fP hwloc_cuda_get_device_osdev_by_index (\fBhwloc_topology_t\fP topology, unsigned idx)\fC [inline]\fP, \fC [static]\fP"
5865
5966 .PP
60 Get the hwloc OS device object corresponding to the CUDA device whose index is \fCidx\fP\&. Return the OS device object describing the CUDA device whose index is \fCidx\fP\&. Return NULL if there is none\&.
67 Get the hwloc OS device object corresponding to the CUDA device whose index is \fCidx\fP\&.
68 .PP
69 \fBReturns\fP
70 .RS 4
71 The hwloc OS device object describing the CUDA device whose index is \fCidx\fP\&.
72 .PP
73 \fCNULL\fP if none could be found\&.
74 .RE
6175 .PP
6276 The topology \fCtopology\fP 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\&.
6377 .PP
7690 .SS "static \fBhwloc_obj_t\fP hwloc_cuda_get_device_pcidev (\fBhwloc_topology_t\fP topology, CUdevice cudevice)\fC [inline]\fP, \fC [static]\fP"
7791
7892 .PP
79 Get the hwloc PCI device object corresponding to the CUDA device \fCcudevice\fP\&. Return the PCI device object describing the CUDA device \fCcudevice\fP\&. Return NULL if there is none\&.
93 Get the hwloc PCI device object corresponding to the CUDA device \fCcudevice\fP\&.
94 .PP
95 \fBReturns\fP
96 .RS 4
97 The hwloc PCI device object describing the CUDA device \fCcudevice\fP\&.
98 .PP
99 \fCNULL\fP if none could be found\&.
100 .RE
80101 .PP
81102 Topology \fCtopology\fP and device \fCcudevice\fP must match the local machine\&. I/O devices detection must be enabled in topology \fCtopology\fP\&. The CUDA component is not needed in the topology\&.
82103 .SH "Author"
0 .TH "hwlocality_cudart" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_cudart" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
2929 .SS "static int hwloc_cudart_get_device_cpuset (\fBhwloc_topology_t\fP topology, int idx, \fBhwloc_cpuset_t\fP set)\fC [inline]\fP, \fC [static]\fP"
3030
3131 .PP
32 Get the CPU set of processors that are physically close to device \fCidx\fP\&. Return the CPU set describing the locality of the CUDA device whose index is \fCidx\fP\&.
32 Get the CPU set of processors that are physically close to device \fCidx\fP\&. Store in \fCset\fP the CPU-set describing the locality of the CUDA device whose index is \fCidx\fP\&.
3333 .PP
3434 Topology \fCtopology\fP and device \fCidx\fP must match the local machine\&. I/O devices detection and the CUDA component are not needed in the topology\&.
3535 .PP
3939 .SS "static \fBhwloc_obj_t\fP hwloc_cudart_get_device_osdev_by_index (\fBhwloc_topology_t\fP topology, unsigned idx)\fC [inline]\fP, \fC [static]\fP"
4040
4141 .PP
42 Get the hwloc OS device object corresponding to the CUDA device whose index is \fCidx\fP\&. Return the OS device object describing the CUDA device whose index is \fCidx\fP\&. Return NULL if there is none\&.
42 Get the hwloc OS device object corresponding to the CUDA device whose index is \fCidx\fP\&.
43 .PP
44 \fBReturns\fP
45 .RS 4
46 The hwloc OS device object describing the CUDA device whose index is \fCidx\fP\&.
47 .PP
48 \fCNULL\fP if none could be found\&.
49 .RE
4350 .PP
4451 The topology \fCtopology\fP 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 \fBhwloc_cudart_get_device_cpuset()\fP\&.
4552 .PP
5865 .SS "static \fBhwloc_obj_t\fP hwloc_cudart_get_device_pcidev (\fBhwloc_topology_t\fP topology, int idx)\fC [inline]\fP, \fC [static]\fP"
5966
6067 .PP
61 Get the hwloc PCI device object corresponding to the CUDA device whose index is \fCidx\fP\&. Return the PCI device object describing the CUDA device whose index is \fCidx\fP\&. Return NULL if there is none\&.
68 Get the hwloc PCI device object corresponding to the CUDA device whose index is \fCidx\fP\&.
69 .PP
70 \fBReturns\fP
71 .RS 4
72 The hwloc PCI device object describing the CUDA device whose index is \fCidx\fP\&.
73 .PP
74 \fCNULL\fP if none could be found\&.
75 .RE
6276 .PP
6377 Topology \fCtopology\fP and device \fCidx\fP must match the local machine\&. I/O devices detection must be enabled in topology \fCtopology\fP\&. The CUDA component is not needed in the topology\&.
6478 .SH "Author"
0 .TH "hwlocality_diff" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_diff" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwlocality_disc_backends" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_disc_backends" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
4444 .in -1c
4545 .SH "Detailed Description"
4646 .PP
47
48 .PP
49 \fBNote\fP
50 .RS 4
51 These structures and functions may change when \fBHWLOC_COMPONENT_ABI\fP is modified\&.
52 .RE
53 .PP
4754
4855 .SH "Typedef Documentation"
4956 .PP
0 .TH "hwlocality_disc_components" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_disc_components" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
1515 .SH "Detailed Description"
1616 .PP
1717
18 .PP
19 \fBNote\fP
20 .RS 4
21 These structures and functions may change when \fBHWLOC_COMPONENT_ABI\fP is modified\&.
22 .RE
23 .PP
24
1825 .SH "Author"
1926 .PP
2027 Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
0 .TH "hwlocality_distances_add" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_distances_add" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
4 hwlocality_distances_add \- Add or remove distances between objects
4 hwlocality_distances_add \- Add distances between objects
55 .SH SYNOPSIS
66 .br
77 .PP
8 .SS "Typedefs"
9
10 .in +1c
11 .ti -1c
12 .RI "typedef void * \fBhwloc_distances_add_handle_t\fP"
13 .br
14 .in -1c
815 .SS "Enumerations"
916
1017 .in +1c
1623
1724 .in +1c
1825 .ti -1c
19 .RI "int \fBhwloc_distances_add\fP (\fBhwloc_topology_t\fP topology, unsigned nbobjs, \fBhwloc_obj_t\fP *objs, hwloc_uint64_t *values, unsigned long kind, unsigned long flags)"
26 .RI "\fBhwloc_distances_add_handle_t\fP \fBhwloc_distances_add_create\fP (\fBhwloc_topology_t\fP topology, const char *name, unsigned long kind, unsigned long flags)"
2027 .br
2128 .ti -1c
22 .RI "int \fBhwloc_distances_remove\fP (\fBhwloc_topology_t\fP topology)"
29 .RI "int \fBhwloc_distances_add_values\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_distances_add_handle_t\fP handle, unsigned nbobjs, \fBhwloc_obj_t\fP *objs, hwloc_uint64_t *values, unsigned long flags)"
2330 .br
2431 .ti -1c
25 .RI "int \fBhwloc_distances_remove_by_depth\fP (\fBhwloc_topology_t\fP topology, int depth)"
26 .br
27 .ti -1c
28 .RI "static int \fBhwloc_distances_remove_by_type\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_type_t\fP type)"
29 .br
30 .ti -1c
31 .RI "int \fBhwloc_distances_release_remove\fP (\fBhwloc_topology_t\fP topology, struct \fBhwloc_distances_s\fP *distances)"
32 .RI "int \fBhwloc_distances_add_commit\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_distances_add_handle_t\fP handle, unsigned long flags)"
3233 .br
3334 .in -1c
3435 .SH "Detailed Description"
3536 .PP
37 The usual way to add distances is:
38 .PP
39 .nf
40 hwloc_distances_add_handle_t handle;
41 int err = -1;
42 handle = hwloc_distances_add_create(topology, "name", kind, 0);
43 if (handle) {
44 err = hwloc_distances_add_values(topology, handle, nbobjs, objs, values, 0);
45 if (!err)
46 err = hwloc_distances_add_commit(topology, handle, flags);
47 }
3648
49 .fi
50 .PP
51 If \fCerr\fP is \fC0\fP at the end, then addition was successful\&.
52 .SH "Typedef Documentation"
53 .PP
54 .SS "typedef void* \fBhwloc_distances_add_handle_t\fP"
55
56 .PP
57 Handle to a new distances structure during its addition to the topology\&.
3758 .SH "Enumeration Type Documentation"
3859 .PP
3960 .SS "enum \fBhwloc_distances_add_flag_e\fP"
4566 .in +1c
4667 .TP
4768 \fB\fIHWLOC_DISTANCES_ADD_FLAG_GROUP \fP\fP
48 Try to group objects based on the newly provided distance information\&.
69 Try to group objects based on the newly provided distance information\&. This is ignored for distances between objects of different types\&.
4970 .TP
5071 \fB\fIHWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE \fP\fP
5172 If grouping, consider the distance values as inaccurate and relax the comparisons during the grouping algorithms\&. The actual accuracy may be modified through the HWLOC_GROUPING_ACCURACY environment variable (see \fBEnvironment Variables\fP)\&.
5273 .SH "Function Documentation"
5374 .PP
54 .SS "int hwloc_distances_add (\fBhwloc_topology_t\fP topology, unsigned nbobjs, \fBhwloc_obj_t\fP * objs, hwloc_uint64_t * values, unsigned long kind, unsigned long flags)"
75 .SS "int hwloc_distances_add_commit (\fBhwloc_topology_t\fP topology, \fBhwloc_distances_add_handle_t\fP handle, unsigned long flags)"
5576
5677 .PP
57 Provide a new distance matrix\&. Provide the matrix of distances between a set of objects given by \fCnbobjs\fP and the \fCobjs\fP array\&. \fCnbobjs\fP must be at least 2\&. The distances are stored as a one-dimension array in \fCvalues\fP\&. The distance from object i to object j is in slot i*nbobjs+j\&.
78 Commit a new distances structure\&. This function finalizes the distances structure and inserts in it the topology\&.
5879 .PP
59 \fCkind\fP specifies the kind of distance as a OR'ed set of \fBhwloc_distances_kind_e\fP\&. Kind \fBHWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES\fP will be automatically added if objects of different types are given\&.
80 Parameter \fChandle\fP was previously returned by \fBhwloc_distances_add_create()\fP\&. Then objects and values were specified with \fBhwloc_distances_add_values()\fP\&.
6081 .PP
61 \fCflags\fP configures the behavior of the function using an optional OR'ed set of \fBhwloc_distances_add_flag_e\fP\&.
62 .SS "int hwloc_distances_release_remove (\fBhwloc_topology_t\fP topology, struct \fBhwloc_distances_s\fP * distances)"
82 \fCflags\fP configures the behavior of the function using an optional OR'ed set of \fBhwloc_distances_add_flag_e\fP\&. It may be used to request the grouping of existing objects based on distances\&.
83 .PP
84 On error, the temporary distances structure and its content are destroyed\&.
85 .PP
86 \fBReturns\fP
87 .RS 4
88 \fC0\fP on success\&.
89 .PP
90 \fC-1\fP on error\&.
91 .RE
92 .PP
93
94 .SS "\fBhwloc_distances_add_handle_t\fP hwloc_distances_add_create (\fBhwloc_topology_t\fP topology, const char * name, unsigned long kind, unsigned long flags)"
6395
6496 .PP
65 Release and remove the given distance matrice from the topology\&. This function includes a call to \fBhwloc_distances_release()\fP\&.
66 .SS "int hwloc_distances_remove (\fBhwloc_topology_t\fP topology)"
97 Create a new empty distances structure\&. Create an empty distances structure to be filled with \fBhwloc_distances_add_values()\fP and then committed with \fBhwloc_distances_add_commit()\fP\&.
98 .PP
99 Parameter \fCname\fP is optional, it may be \fCNULL\fP\&. Otherwise, it will be copied internally and may later be freed by the caller\&.
100 .PP
101 \fCkind\fP specifies the kind of distance as a OR'ed set of \fBhwloc_distances_kind_e\fP\&. Kind \fBHWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES\fP will be automatically set according to objects having different types in \fBhwloc_distances_add_values()\fP\&.
102 .PP
103 \fCflags\fP must be \fC0\fP for now\&.
104 .PP
105 \fBReturns\fP
106 .RS 4
107 A hwloc_distances_add_handle_t that should then be passed to \fBhwloc_distances_add_values()\fP and \fBhwloc_distances_add_commit()\fP\&.
108 .PP
109 \fCNULL\fP on error\&.
110 .RE
111 .PP
112
113 .SS "int hwloc_distances_add_values (\fBhwloc_topology_t\fP topology, \fBhwloc_distances_add_handle_t\fP handle, unsigned nbobjs, \fBhwloc_obj_t\fP * objs, hwloc_uint64_t * values, unsigned long flags)"
67114
68115 .PP
69 Remove all distance matrices from a topology\&. Remove all distance matrices, either provided by the user or gathered through the OS\&.
116 Specify the objects and values in a new empty distances structure\&. Specify the objects and values for a new distances structure that was returned as a handle by \fBhwloc_distances_add_create()\fP\&. The structure must then be committed with \fBhwloc_distances_add_commit()\fP\&.
70117 .PP
71 If these distances were used to group objects, these additional Group objects are not removed from the topology\&.
72 .SS "int hwloc_distances_remove_by_depth (\fBhwloc_topology_t\fP topology, int depth)"
118 The number of objects is \fCnbobjs\fP and the array of objects is \fCobjs\fP\&. Distance values are stored as a one-dimension array in \fCvalues\fP\&. The distance from object i to object j is in slot i*nbobjs+j\&.
119 .PP
120 \fCnbobjs\fP must be at least 2\&.
121 .PP
122 Arrays \fCobjs\fP and \fCvalues\fP will be copied internally, they may later be freed by the caller\&.
123 .PP
124 On error, the temporary distances structure and its content are destroyed\&.
125 .PP
126 \fCflags\fP must be \fC0\fP for now\&.
127 .PP
128 \fBReturns\fP
129 .RS 4
130 \fC0\fP on success\&.
131 .PP
132 \fC-1\fP on error\&.
133 .RE
134 .PP
73135
74 .PP
75 Remove distance matrices for objects at a specific depth in the topology\&. Identical to \fBhwloc_distances_remove()\fP but only applies to one level of the topology\&.
76 .SS "static int hwloc_distances_remove_by_type (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_type_t\fP type)\fC [inline]\fP, \fC [static]\fP"
77
78 .PP
79 Remove distance matrices for objects of a specific type in the topology\&. Identical to \fBhwloc_distances_remove()\fP but only applies to one level of the topology\&.
80136 .SH "Author"
81137 .PP
82138 Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
0 .TH "hwlocality_distances_consult" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_distances_consult" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwlocality_distances_get" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_distances_get" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
1717 .in +1c
1818 .ti -1c
1919 .RI "enum \fBhwloc_distances_kind_e\fP { \fBHWLOC_DISTANCES_KIND_FROM_OS\fP, \fBHWLOC_DISTANCES_KIND_FROM_USER\fP, \fBHWLOC_DISTANCES_KIND_MEANS_LATENCY\fP, \fBHWLOC_DISTANCES_KIND_MEANS_BANDWIDTH\fP, \fBHWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES\fP }"
20 .br
21 .ti -1c
22 .RI "enum \fBhwloc_distances_transform_e\fP { \fBHWLOC_DISTANCES_TRANSFORM_REMOVE_NULL\fP, \fBHWLOC_DISTANCES_TRANSFORM_LINKS\fP, \fBHWLOC_DISTANCES_TRANSFORM_MERGE_SWITCH_PORTS\fP, \fBHWLOC_DISTANCES_TRANSFORM_TRANSITIVE_CLOSURE\fP }"
2023 .br
2124 .in -1c
2225 .SS "Functions"
3942 .br
4043 .ti -1c
4144 .RI "void \fBhwloc_distances_release\fP (\fBhwloc_topology_t\fP topology, struct \fBhwloc_distances_s\fP *distances)"
45 .br
46 .ti -1c
47 .RI "int \fBhwloc_distances_transform\fP (\fBhwloc_topology_t\fP topology, struct \fBhwloc_distances_s\fP *distances, enum \fBhwloc_distances_transform_e\fP transform, void *transform_attr, unsigned long flags)"
4248 .br
4349 .in -1c
4450 .SH "Detailed Description"
7177 Distance values are similar to bandwidths between objects\&. Values are higher for closer objects, hence maximal on the diagonal of the matrix (distance between an object and itself)\&. Such values are currently ignored for distance-based grouping\&.
7278 .TP
7379 \fB\fIHWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES \fP\fP
74 This distances structure covers objects of different types\&.
80 This distances structure covers objects of different types\&. This may apply to the 'NVLinkBandwidth' structure in presence of a NVSwitch or POWER processor NVLink port\&.
81 .SS "enum \fBhwloc_distances_transform_e\fP"
82
83 .PP
84 Transformations of distances structures\&.
85 .PP
86 \fBEnumerator\fP
87 .in +1c
88 .TP
89 \fB\fIHWLOC_DISTANCES_TRANSFORM_REMOVE_NULL \fP\fP
90 Remove \fCNULL\fP objects from the distances structure\&. Every object that was replaced with \fCNULL\fP in the \fCobjs\fP array is removed and the \fCvalues\fP array is updated accordingly\&.
91 .PP
92 At least \fC2\fP objects must remain, otherwise \fBhwloc_distances_transform()\fP will return \fC-1\fP with \fCerrno\fP set to \fCEINVAL\fP\&.
93 .PP
94 \fCkind\fP will be updated with or without \fBHWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES\fP according to the remaining objects\&.
95 .TP
96 \fB\fIHWLOC_DISTANCES_TRANSFORM_LINKS \fP\fP
97 Replace bandwidth values with a number of links\&. Usually all values will be either \fC0\fP (no link) or \fC1\fP (one link)\&. However some matrices could get larger values if some pairs of peers are connected by different numbers of links\&.
98 .PP
99 Values on the diagonal are set to \fC0\fP\&.
100 .PP
101 This transformation only applies to bandwidth matrices\&.
102 .TP
103 \fB\fIHWLOC_DISTANCES_TRANSFORM_MERGE_SWITCH_PORTS \fP\fP
104 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 \fBHWLOC_DISTANCES_TRANSFORM_REMOVE_NULL\fP internally\&.
105 .TP
106 \fB\fIHWLOC_DISTANCES_TRANSFORM_TRANSITIVE_CLOSURE \fP\fP
107 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\&.
75108 .SH "Function Documentation"
76109 .PP
77110 .SS "int hwloc_distances_get (\fBhwloc_topology_t\fP topology, unsigned * nr, struct \fBhwloc_distances_s\fP ** distances, unsigned long kind, unsigned long flags)"
95128 .PP
96129 Retrieve a distance matrix with the given name\&. Usually only one distances structure may match a given name\&.
97130 .PP
98 The name of the most common structure is 'NUMALatency'\&.
131 The name of the most common structure is 'NUMALatency'\&. Others include 'XGMIBandwidth' and 'NVLinkBandwidth'\&.
99132 .SS "int hwloc_distances_get_by_type (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_type_t\fP type, unsigned * nr, struct \fBhwloc_distances_s\fP ** distances, unsigned long kind, unsigned long flags)"
100133
101134 .PP
115148 .RE
116149 .PP
117150
151 .SS "int hwloc_distances_transform (\fBhwloc_topology_t\fP topology, struct \fBhwloc_distances_s\fP * distances, enum \fBhwloc_distances_transform_e\fP transform, void * transform_attr, unsigned long flags)"
152
153 .PP
154 Apply a transformation to a distances structure\&. Modify a distances structure that was previously obtained with \fBhwloc_distances_get()\fP or one of its variants\&.
155 .PP
156 This modifies the local copy of the distances structures but does not modify the distances information stored inside the topology (retrieved by another call to \fBhwloc_distances_get()\fP or exported to XML)\&. To do so, one should add a new distances structure with same name, kind, objects and values (see \fBAdd distances between objects\fP) and then remove this old one with \fBhwloc_distances_release_remove()\fP\&.
157 .PP
158 \fCtransform\fP must be one of the transformations listed in \fBhwloc_distances_transform_e\fP\&.
159 .PP
160 These transformations may modify the contents of the \fCobjs\fP or \fCvalues\fP arrays\&.
161 .PP
162 \fCtransform_attr\fP must be \fCNULL\fP for now\&.
163 .PP
164 \fCflags\fP must be \fC0\fP for now\&.
165 .PP
166 \fBNote\fP
167 .RS 4
168 Objects in distances array \fCobjs\fP may be directly modified in place without using \fBhwloc_distances_transform()\fP\&. One may use \fBhwloc_get_obj_with_same_locality()\fP to easily convert between similar objects of different types\&.
169 .RE
170 .PP
171
118172 .SH "Author"
119173 .PP
120174 Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
0 .TH "hwlocality_distances_remove" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
1 .ad l
2 .nh
3 .SH NAME
4 hwlocality_distances_remove \- Remove distances between objects
5 .SH SYNOPSIS
6 .br
7 .PP
8 .SS "Functions"
9
10 .in +1c
11 .ti -1c
12 .RI "int \fBhwloc_distances_remove\fP (\fBhwloc_topology_t\fP topology)"
13 .br
14 .ti -1c
15 .RI "int \fBhwloc_distances_remove_by_depth\fP (\fBhwloc_topology_t\fP topology, int depth)"
16 .br
17 .ti -1c
18 .RI "static int \fBhwloc_distances_remove_by_type\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_type_t\fP type)"
19 .br
20 .ti -1c
21 .RI "int \fBhwloc_distances_release_remove\fP (\fBhwloc_topology_t\fP topology, struct \fBhwloc_distances_s\fP *distances)"
22 .br
23 .in -1c
24 .SH "Detailed Description"
25 .PP
26
27 .SH "Function Documentation"
28 .PP
29 .SS "int hwloc_distances_release_remove (\fBhwloc_topology_t\fP topology, struct \fBhwloc_distances_s\fP * distances)"
30
31 .PP
32 Release and remove the given distance matrice from the topology\&. This function includes a call to \fBhwloc_distances_release()\fP\&.
33 .SS "int hwloc_distances_remove (\fBhwloc_topology_t\fP topology)"
34
35 .PP
36 Remove all distance matrices from a topology\&. Remove all distance matrices, either provided by the user or gathered through the OS\&.
37 .PP
38 If these distances were used to group objects, these additional Group objects are not removed from the topology\&.
39 .SS "int hwloc_distances_remove_by_depth (\fBhwloc_topology_t\fP topology, int depth)"
40
41 .PP
42 Remove distance matrices for objects at a specific depth in the topology\&. Identical to \fBhwloc_distances_remove()\fP but only applies to one level of the topology\&.
43 .SS "static int hwloc_distances_remove_by_type (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_type_t\fP type)\fC [inline]\fP, \fC [static]\fP"
44
45 .PP
46 Remove distance matrices for objects of a specific type in the topology\&. Identical to \fBhwloc_distances_remove()\fP but only applies to one level of the topology\&.
47 .SH "Author"
48 .PP
49 Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
0 .TH "hwlocality_generic_components" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_generic_components" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
2929 .SH "Detailed Description"
3030 .PP
3131
32 .PP
33 \fBNote\fP
34 .RS 4
35 These structures and functions may change when \fBHWLOC_COMPONENT_ABI\fP is modified\&.
36 .RE
37 .PP
38
3239 .SH "Typedef Documentation"
3340 .PP
3441 .SS "typedef enum \fBhwloc_component_type_e\fP \fBhwloc_component_type_t\fP"
0 .TH "hwlocality_gl" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_gl" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
2828 .SS "static int hwloc_gl_get_display_by_osdev (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP osdev, unsigned * port, unsigned * device)\fC [inline]\fP, \fC [static]\fP"
2929
3030 .PP
31 Get the OpenGL display port and device corresponding to the given hwloc OS object\&. Return the OpenGL display port (server) in \fCport\fP and device (screen) in \fCscreen\fP that correspond to the given hwloc OS device object\&. Return \fC-1\fP if there is none\&.
31 Get the OpenGL display port and device corresponding to the given hwloc OS object\&. Retrieves the OpenGL display port (server) in \fCport\fP and device (screen) in \fCscreen\fP that correspond to the given hwloc OS device object\&.
32 .PP
33 \fBReturns\fP
34 .RS 4
35 \fC-1\fP if none could be found\&.
36 .RE
3237 .PP
3338 The topology \fCtopology\fP 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 GL component must be enabled in the topology\&.
3439 .SS "static \fBhwloc_obj_t\fP hwloc_gl_get_display_osdev_by_name (\fBhwloc_topology_t\fP topology, const char * name)\fC [inline]\fP, \fC [static]\fP"
3540
3641 .PP
37 Get the hwloc OS device object corresponding to the OpenGL display given by name\&. Return the OS device object describing the OpenGL display whose name is \fCname\fP, built as ':port\&.device' such as ':0\&.0' \&. Return NULL if there is none\&.
42 Get the hwloc OS device object corresponding to the OpenGL display given by name\&.
43 .PP
44 \fBReturns\fP
45 .RS 4
46 The hwloc OS device object describing the OpenGL display whose name is \fCname\fP, built as ':port\&.device' such as ':0\&.0' \&.
47 .PP
48 \fCNULL\fP if none could be found\&.
49 .RE
3850 .PP
3951 The topology \fCtopology\fP 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 GL component must be enabled in the topology\&.
4052 .PP
4759 .SS "static \fBhwloc_obj_t\fP hwloc_gl_get_display_osdev_by_port_device (\fBhwloc_topology_t\fP topology, unsigned port, unsigned device)\fC [inline]\fP, \fC [static]\fP"
4860
4961 .PP
50 Get the hwloc OS device object corresponding to the OpenGL display given by port and device index\&. Return the OS device object describing the OpenGL display whose port (server) is \fCport\fP and device (screen) is \fCdevice\fP\&. Return NULL if there is none\&.
62 Get the hwloc OS device object corresponding to the OpenGL display given by port and device index\&.
63 .PP
64 \fBReturns\fP
65 .RS 4
66 The hwloc OS device object describing the OpenGL display whose port (server) is \fCport\fP and device (screen) is \fCdevice\fP\&.
67 .PP
68 \fCNULL\fP if none could be found\&.
69 .RE
5170 .PP
5271 The topology \fCtopology\fP 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 GL component must be enabled in the topology\&.
5372 .PP
0 .TH "hwlocality_glibc_sched" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_glibc_sched" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwlocality_helper_ancestors" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_helper_ancestors" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwlocality_helper_distribute" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_helper_distribute" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwlocality_helper_find_cache" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_helper_find_cache" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwlocality_helper_find_covering" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_helper_find_covering" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwlocality_helper_find_inside" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_helper_find_inside" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwlocality_helper_find_misc" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_helper_find_misc" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
2525 .br
2626 .ti -1c
2727 .RI "static \fBhwloc_obj_t\fP \fBhwloc_get_obj_below_array_by_type\fP (\fBhwloc_topology_t\fP topology, int nr, \fBhwloc_obj_type_t\fP *typev, unsigned *idxv)"
28 .br
29 .ti -1c
30 .RI "\fBhwloc_obj_t\fP \fBhwloc_get_obj_with_same_locality\fP (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP src, \fBhwloc_obj_type_t\fP type, const char *subtype, const char *nameprefix, unsigned long flags)"
2831 .br
2932 .in -1c
3033 .SH "Detailed Description"
99102 .RE
100103 .PP
101104
105 .SS "\fBhwloc_obj_t\fP hwloc_get_obj_with_same_locality (\fBhwloc_topology_t\fP topology, \fBhwloc_obj_t\fP src, \fBhwloc_obj_type_t\fP type, const char * subtype, const char * nameprefix, unsigned long flags)"
106
107 .PP
108 Return an object of a different type with same locality\&. If the source object \fCsrc\fP is a normal or memory type, this function returns an object of type \fCtype\fP with same CPU and node sets, either below or above in the hierarchy\&.
109 .PP
110 If the source object \fCsrc\fP is a PCI or an OS device within a PCI device, the function may either return that PCI device, or another OS device in the same PCI parent\&. This may for instance be useful for converting between OS devices such as 'nvml0' or 'rsmi1' used in distance structures into the the PCI device, or the CUDA or OpenCL OS device that correspond to the same physical card\&.
111 .PP
112 If not \fCNULL\fP, parameter \fCsubtype\fP only select objects whose subtype attribute exists and is \fCsubtype\fP (case-insensitively), for instance 'OpenCL' or 'CUDA'\&.
113 .PP
114 If not \fCNULL\fP, parameter \fCnameprefix\fP only selects objects whose name attribute exists and starts with \fCnameprefix\fP (case-insensitively), for instance 'rsmi' for matching 'rsmi0'\&.
115 .PP
116 If multiple objects match, the first one is returned\&.
117 .PP
118 This function will not walk the hierarchy across bridges since the PCI locality may become different\&. This function cannot also convert between normal/memory objects and I/O or Misc objects\&.
119 .PP
120 \fCflags\fP must be \fC0\fP for now\&.
121 .PP
122 \fBReturns\fP
123 .RS 4
124 An object with identical locality, matching \fCsubtype\fP and \fCnameprefix\fP if any\&.
125 .PP
126 \fCNULL\fP if no matching object could be found, or if the source object and target type are incompatible, for instance if converting between CPU and I/O objects\&.
127 .RE
128 .PP
129
102130 .SS "static \fBhwloc_obj_t\fP hwloc_get_pu_obj_by_os_index (\fBhwloc_topology_t\fP topology, unsigned os_index)\fC [inline]\fP, \fC [static]\fP"
103131
104132 .PP
0 .TH "hwlocality_helper_nodeset_convert" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_helper_nodeset_convert" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwlocality_helper_topology_sets" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_helper_topology_sets" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwlocality_helper_types" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_helper_types" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwlocality_info_attr" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_info_attr" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwlocality_levels" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_levels" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwlocality_levelzero" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
1 .ad l
2 .nh
3 .SH NAME
4 hwlocality_levelzero \- Interoperability with the oneAPI Level Zero interface\&.
5 .SH SYNOPSIS
6 .br
7 .PP
8 .SS "Functions"
9
10 .in +1c
11 .ti -1c
12 .RI "static int \fBhwloc_levelzero_get_device_cpuset\fP (\fBhwloc_topology_t\fP topology, ze_device_handle_t device, \fBhwloc_cpuset_t\fP set)"
13 .br
14 .ti -1c
15 .RI "static \fBhwloc_obj_t\fP \fBhwloc_levelzero_get_device_osdev\fP (\fBhwloc_topology_t\fP topology, ze_device_handle_t device)"
16 .br
17 .in -1c
18 .SH "Detailed Description"
19 .PP
20 This interface offers ways to retrieve topology information about devices managed by the Level Zero API\&.
21 .SH "Function Documentation"
22 .PP
23 .SS "static int hwloc_levelzero_get_device_cpuset (\fBhwloc_topology_t\fP topology, ze_device_handle_t device, \fBhwloc_cpuset_t\fP set)\fC [inline]\fP, \fC [static]\fP"
24
25 .PP
26 Get the CPU set of logical processors that are physically close to the Level Zero device \fCdevice\fP\&. Store in \fCset\fP the CPU-set describing the locality of the Level Zero device \fCdevice\fP\&.
27 .PP
28 Topology \fCtopology\fP and device \fCdevice\fP must match the local machine\&. The Level Zero must have been initialized with Sysman enabled (ZES_ENABLE_SYSMAN=1 in the environment)\&. I/O devices detection and the Level Zero component are not needed in the topology\&.
29 .PP
30 The function only returns the locality of the device\&. If more information about the device is needed, OS objects should be used instead, see \fBhwloc_levelzero_get_device_osdev()\fP\&.
31 .PP
32 This function is currently only implemented in a meaningful way for Linux; other systems will simply get a full cpuset\&.
33 .SS "static \fBhwloc_obj_t\fP hwloc_levelzero_get_device_osdev (\fBhwloc_topology_t\fP topology, ze_device_handle_t device)\fC [inline]\fP, \fC [static]\fP"
34
35 .PP
36 Get the hwloc OS device object corresponding to Level Zero device \fCdevice\fP\&.
37 .PP
38 \fBReturns\fP
39 .RS 4
40 The hwloc OS device object that describes the given Level Zero device \fCdevice\fP\&.
41 .PP
42 \fCNULL\fP if none could be found\&.
43 .RE
44 .PP
45 Topology \fCtopology\fP and device \fCdv_ind\fP must match the local machine\&. 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 \fBhwloc_levelzero_get_device_cpuset()\fP\&.
46 .PP
47 \fBNote\fP
48 .RS 4
49 The corresponding hwloc PCI device may be found by looking at the result parent pointer (unless PCI devices are filtered out)\&.
50 .RE
51 .PP
52
53 .SH "Author"
54 .PP
55 Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
0 .TH "hwlocality_linux" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_linux" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwlocality_linux_libnuma_bitmask" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_linux_libnuma_bitmask" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwlocality_linux_libnuma_ulongs" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_linux_libnuma_ulongs" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwlocality_memattrs" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_memattrs" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwlocality_memattrs_manage" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_memattrs_manage" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwlocality_membinding" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_membinding" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwlocality_nvml" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_nvml" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
2626 .SS "static int hwloc_nvml_get_device_cpuset (\fBhwloc_topology_t\fP topology, nvmlDevice_t device, \fBhwloc_cpuset_t\fP set)\fC [inline]\fP, \fC [static]\fP"
2727
2828 .PP
29 Get the CPU set of processors that are physically close to NVML device \fCdevice\fP\&. Return the CPU set describing the locality of the NVML device \fCdevice\fP\&.
29 Get the CPU set of processors that are physically close to NVML device \fCdevice\fP\&. Store in \fCset\fP the CPU-set describing the locality of the NVML device \fCdevice\fP\&.
3030 .PP
3131 Topology \fCtopology\fP and device \fCdevice\fP must match the local machine\&. I/O devices detection and the NVML component are not needed in the topology\&.
3232 .PP
3636 .SS "static \fBhwloc_obj_t\fP hwloc_nvml_get_device_osdev (\fBhwloc_topology_t\fP topology, nvmlDevice_t device)\fC [inline]\fP, \fC [static]\fP"
3737
3838 .PP
39 Get the hwloc OS device object corresponding to NVML device \fCdevice\fP\&. Return the hwloc OS device object that describes the given NVML device \fCdevice\fP\&. Return NULL if there is none\&.
39 Get the hwloc OS device object corresponding to NVML device \fCdevice\fP\&.
40 .PP
41 \fBReturns\fP
42 .RS 4
43 The hwloc OS device object that describes the given NVML device \fCdevice\fP\&.
44 .PP
45 \fCNULL\fP if none could be found\&.
46 .RE
4047 .PP
4148 Topology \fCtopology\fP and device \fCdevice\fP 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 \fBhwloc_nvml_get_device_cpuset()\fP\&.
4249 .PP
4956 .SS "static \fBhwloc_obj_t\fP hwloc_nvml_get_device_osdev_by_index (\fBhwloc_topology_t\fP topology, unsigned idx)\fC [inline]\fP, \fC [static]\fP"
5057
5158 .PP
52 Get the hwloc OS device object corresponding to the NVML device whose index is \fCidx\fP\&. Return the OS device object describing the NVML device whose index is \fCidx\fP\&. Returns NULL if there is none\&.
59 Get the hwloc OS device object corresponding to the NVML device whose index is \fCidx\fP\&.
60 .PP
61 \fBReturns\fP
62 .RS 4
63 The hwloc OS device object describing the NVML device whose index is \fCidx\fP\&.
64 .PP
65 \fCNULL\fP if none could be found\&.
66 .RE
5367 .PP
5468 The topology \fCtopology\fP 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 NVML component must be enabled in the topology\&.
5569 .PP
0 .TH "hwlocality_object_sets" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_object_sets" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwlocality_object_strings" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_object_strings" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwlocality_object_types" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_object_types" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwlocality_objects" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_objects" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwlocality_opencl" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_opencl" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
3131 .SS "static int hwloc_opencl_get_device_cpuset (\fBhwloc_topology_t\fP topology, cl_device_id device, \fBhwloc_cpuset_t\fP set)\fC [inline]\fP, \fC [static]\fP"
3232
3333 .PP
34 Get the CPU set of processors that are physically close to OpenCL device \fCdevice\fP\&. Return the CPU set describing the locality of the OpenCL device \fCdevice\fP\&.
34 Get the CPU set of processors that are physically close to OpenCL device \fCdevice\fP\&. Store in \fCset\fP the CPU-set describing the locality of the OpenCL device \fCdevice\fP\&.
3535 .PP
3636 Topology \fCtopology\fP and device \fCdevice\fP must match the local machine\&. I/O devices detection and the OpenCL component are not needed in the topology\&.
3737 .PP
4141 .SS "static \fBhwloc_obj_t\fP hwloc_opencl_get_device_osdev (\fBhwloc_topology_t\fP topology, cl_device_id device)\fC [inline]\fP, \fC [static]\fP"
4242
4343 .PP
44 Get the hwloc OS device object corresponding to OpenCL device \fCdeviceX\fP\&. Use OpenCL device attributes to find the corresponding hwloc OS device object\&. Return NULL if there is none or if useful attributes are not available\&.
44 Get the hwloc OS device object corresponding to OpenCL device \fCdeviceX\fP\&.
45 .PP
46 \fBReturns\fP
47 .RS 4
48 The hwloc OS device object corresponding to the given OpenCL device \fCdevice\fP\&.
49 .PP
50 \fCNULL\fP if none could be found, for instance if required OpenCL attributes are not available\&.
51 .RE
4552 .PP
4653 This function currently only works on AMD and NVIDIA OpenCL devices that support relevant OpenCL extensions\&. \fBhwloc_opencl_get_device_osdev_by_index()\fP should be preferred whenever possible, i\&.e\&. when platform and device index are known\&.
4754 .PP
5865 .SS "static \fBhwloc_obj_t\fP hwloc_opencl_get_device_osdev_by_index (\fBhwloc_topology_t\fP topology, unsigned platform_index, unsigned device_index)\fC [inline]\fP, \fC [static]\fP"
5966
6067 .PP
61 Get the hwloc OS device object corresponding to the OpenCL device for the given indexes\&. Return the OS device object describing the OpenCL device whose platform index is \fCplatform_index\fP, and whose device index within this platform if \fCdevice_index\fP\&. Return NULL if there is none\&.
68 Get the hwloc OS device object corresponding to the OpenCL device for the given indexes\&.
69 .PP
70 \fBReturns\fP
71 .RS 4
72 The hwloc OS device object describing the OpenCL device whose platform index is \fCplatform_index\fP, and whose device index within this platform if \fCdevice_index\fP\&.
73 .PP
74 \fCNULL\fP if there is none\&.
75 .RE
6276 .PP
6377 The topology \fCtopology\fP 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 OpenCL component must be enabled in the topology\&.
6478 .PP
0 .TH "hwlocality_openfabrics" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_openfabrics" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
2626 .SS "static int hwloc_ibv_get_device_cpuset (\fBhwloc_topology_t\fP topology, struct ibv_device * ibdev, \fBhwloc_cpuset_t\fP set)\fC [inline]\fP, \fC [static]\fP"
2727
2828 .PP
29 Get the CPU set of processors that are physically close to device \fCibdev\fP\&. Return the CPU set describing the locality of the OpenFabrics device \fCibdev\fP (InfiniBand, etc)\&.
29 Get the CPU set of processors that are physically close to device \fCibdev\fP\&. Store in \fCset\fP the CPU-set describing the locality of the OpenFabrics device \fCibdev\fP (InfiniBand, etc)\&.
3030 .PP
3131 Topology \fCtopology\fP and device \fCibdev\fP must match the local machine\&. I/O devices detection is not needed in the topology\&.
3232 .PP
3636 .SS "static \fBhwloc_obj_t\fP hwloc_ibv_get_device_osdev (\fBhwloc_topology_t\fP topology, struct ibv_device * ibdev)\fC [inline]\fP, \fC [static]\fP"
3737
3838 .PP
39 Get the hwloc OS device object corresponding to the OpenFabrics device \fCibdev\fP\&. Return the OS device object describing the OpenFabrics device \fCibdev\fP (InfiniBand, etc)\&. Returns NULL if there is none\&.
39 Get the hwloc OS device object corresponding to the OpenFabrics device \fCibdev\fP\&.
40 .PP
41 \fBReturns\fP
42 .RS 4
43 The hwloc OS device object describing the OpenFabrics device \fCibdev\fP (InfiniBand, etc)\&.
44 .PP
45 \fCNULL\fP if none could be found\&.
46 .RE
4047 .PP
4148 Topology \fCtopology\fP and device \fCibdev\fP 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 \fBhwloc_ibv_get_device_cpuset()\fP\&.
4249 .PP
4956 .SS "static \fBhwloc_obj_t\fP hwloc_ibv_get_device_osdev_by_name (\fBhwloc_topology_t\fP topology, const char * ibname)\fC [inline]\fP, \fC [static]\fP"
5057
5158 .PP
52 Get the hwloc OS device object corresponding to the OpenFabrics device named \fCibname\fP\&. Return the OS device object describing the OpenFabrics device (InfiniBand, Omni-Path, usNIC, etc) whose name is \fCibname\fP (mlx5_0, hfi1_0, usnic_0, qib0, etc)\&. Returns NULL if there is none\&. The name \fCibname\fP is usually obtained from ibv_get_device_name()\&.
59 Get the hwloc OS device object corresponding to the OpenFabrics device named \fCibname\fP\&.
60 .PP
61 \fBReturns\fP
62 .RS 4
63 The hwloc OS device object describing the OpenFabrics device (InfiniBand, Omni-Path, usNIC, etc) whose name is \fCibname\fP (mlx5_0, hfi1_0, usnic_0, qib0, etc)\&.
64 .PP
65 \fCNULL\fP if none could be found\&.
66 .RE
67 .PP
68 The name \fCibname\fP is usually obtained from ibv_get_device_name()\&.
5369 .PP
5470 The topology \fCtopology\fP 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 must be enabled in the topology\&.
5571 .PP
0 .TH "hwlocality_rsmi" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_rsmi" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
2626 .SS "static int hwloc_rsmi_get_device_cpuset (\fBhwloc_topology_t\fP topology, uint32_t dv_ind, \fBhwloc_cpuset_t\fP set)\fC [inline]\fP, \fC [static]\fP"
2727
2828 .PP
29 Get the CPU set of logical processors that are physically close to AMD GPU device whose index is \fCdv_ind\fP\&. Return the CPU set describing the locality of the AMD GPU device whose index is \fCdv_ind\fP\&.
29 Get the CPU set of logical processors that are physically close to AMD GPU device whose index is \fCdv_ind\fP\&. Store in \fCset\fP the CPU-set describing the locality of the AMD GPU device whose index is \fCdv_ind\fP\&.
3030 .PP
3131 Topology \fCtopology\fP and device \fCdv_ind\fP must match the local machine\&. I/O devices detection and the ROCm SMI component are not needed in the topology\&.
3232 .PP
3636 .SS "static \fBhwloc_obj_t\fP hwloc_rsmi_get_device_osdev (\fBhwloc_topology_t\fP topology, uint32_t dv_ind)\fC [inline]\fP, \fC [static]\fP"
3737
3838 .PP
39 Get the hwloc OS device object corresponding to AMD GPU device, whose index is \fCdv_ind\fP\&. Return the hwloc OS device object that describes the given AMD GPU, whose index is \fCdv_ind\fP Return NULL if there is none\&.
39 Get the hwloc OS device object corresponding to AMD GPU device, whose index is \fCdv_ind\fP\&.
40 .PP
41 \fBReturns\fP
42 .RS 4
43 The hwloc OS device object that describes the given AMD GPU, whose index is \fCdv_ind\fP\&.
44 .PP
45 \fCNULL\fP if none could be found\&.
46 .RE
4047 .PP
4148 Topology \fCtopology\fP and device \fCdv_ind\fP 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 \fBhwloc_rsmi_get_device_cpuset()\fP\&.
4249 .PP
4956 .SS "static \fBhwloc_obj_t\fP hwloc_rsmi_get_device_osdev_by_index (\fBhwloc_topology_t\fP topology, uint32_t dv_ind)\fC [inline]\fP, \fC [static]\fP"
5057
5158 .PP
52 Get the hwloc OS device object corresponding to the AMD GPU device whose index is \fCdv_ind\fP\&. Return the OS device object describing the AMD GPU device whose index is \fCdv_ind\fP\&. Returns NULL if there is none\&.
59 Get the hwloc OS device object corresponding to the AMD GPU device whose index is \fCdv_ind\fP\&.
60 .PP
61 \fBReturns\fP
62 .RS 4
63 The hwloc OS device object describing the AMD GPU device whose index is \fCdv_ind\fP\&.
64 .PP
65 \fCNULL\fP if none could be found\&.
66 .RE
5367 .PP
5468 The topology \fCtopology\fP 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 ROCm SMI component must be enabled in the topology\&.
5569 .PP
0 .TH "hwlocality_setsource" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_setsource" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwlocality_shmem" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_shmem" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwlocality_syntheticexport" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_syntheticexport" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwlocality_tinker" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_tinker" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
0 .TH "hwlocality_windows" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
1 .ad l
2 .nh
3 .SH NAME
4 hwlocality_windows \- Windows-specific helpers
5 .SH SYNOPSIS
6 .br
7 .PP
8 .SS "Functions"
9
10 .in +1c
11 .ti -1c
12 .RI "int \fBhwloc_windows_get_nr_processor_groups\fP (\fBhwloc_topology_t\fP topology, unsigned long flags)"
13 .br
14 .ti -1c
15 .RI "int \fBhwloc_windows_get_processor_group_cpuset\fP (\fBhwloc_topology_t\fP topology, unsigned pg_index, \fBhwloc_cpuset_t\fP cpuset, unsigned long flags)"
16 .br
17 .in -1c
18 .SH "Detailed Description"
19 .PP
20 These functions query Windows processor groups\&. These groups partition the operating system into virtual sets of up to 64 neighbor PUs\&. Threads and processes may only be bound inside a single group\&. Although Windows processor groups may be exposed in the hwloc hierarchy as hwloc Groups, they are also often merged into existing hwloc objects such as NUMA nodes or Packages\&. This API provides explicit information about Windows processor groups so that applications know whether binding to a large set of PUs may fail because it spans over multiple Windows processor groups\&.
21 .SH "Function Documentation"
22 .PP
23 .SS "int hwloc_windows_get_nr_processor_groups (\fBhwloc_topology_t\fP topology, unsigned long flags)"
24
25 .PP
26 Get the number of Windows processor groups\&. \fCflags\fP must be 0 for now\&.
27 .PP
28 \fBReturns\fP
29 .RS 4
30 at least \fC1\fP on success\&.
31 .PP
32 -1 on error, for instance if the topology does not match the current system (e\&.g\&. loaded from another machine through XML)\&.
33 .RE
34 .PP
35
36 .SS "int hwloc_windows_get_processor_group_cpuset (\fBhwloc_topology_t\fP topology, unsigned pg_index, \fBhwloc_cpuset_t\fP cpuset, unsigned long flags)"
37
38 .PP
39 Get the CPU-set of a Windows processor group\&. Get the set of PU included in the processor group specified by \fCpg_index\fP\&. \fCpg_index\fP must be between \fC0\fP and the value returned by \fBhwloc_windows_get_nr_processor_groups()\fP minus 1\&.
40 .PP
41 \fCflags\fP must be 0 for now\&.
42 .PP
43 \fBReturns\fP
44 .RS 4
45 \fC0\fP on success\&.
46 .PP
47 \fC-1\fP on error, for instance if \fCpg_index\fP is invalid, or if the topology does not match the current system (e\&.g\&. loaded from another machine through XML)\&.
48 .RE
49 .PP
50
51 .SH "Author"
52 .PP
53 Generated automatically by Doxygen for Hardware Locality (hwloc) from the source code\&.
0 .TH "hwlocality_xmlexport" 3 "Thu Feb 11 2021" "Version 2.4.1" "Hardware Locality (hwloc)" \" -*- nroff -*-
0 .TH "hwlocality_xmlexport" 3 "Tue Jun 8 2021" "Version 2.5.0rc1" "Hardware Locality (hwloc)" \" -*- nroff -*-
11 .ad l
22 .nh
33 .SH NAME
476476 CONFIGURE_DEPENDENCIES = @CONFIGURE_DEPENDENCIES@
477477 CPP = @CPP@
478478 CPPFLAGS = @CPPFLAGS@
479 CUDA_VERSION = @CUDA_VERSION@
479480 CXX = @CXX@
480481 CXXCPP = @CXXCPP@
481482 CXXDEPMODE = @CXXDEPMODE@
502503 HWLOC_CAIRO_LIBS = @HWLOC_CAIRO_LIBS@
503504 HWLOC_CFLAGS = @HWLOC_CFLAGS@
504505 HWLOC_CPPFLAGS = @HWLOC_CPPFLAGS@
506 HWLOC_CUDART_CFLAGS = @HWLOC_CUDART_CFLAGS@
507 HWLOC_CUDART_CPPFLAGS = @HWLOC_CUDART_CPPFLAGS@
508 HWLOC_CUDART_LDFLAGS = @HWLOC_CUDART_LDFLAGS@
509 HWLOC_CUDART_LIBS = @HWLOC_CUDART_LIBS@
510 HWLOC_CUDA_CFLAGS = @HWLOC_CUDA_CFLAGS@
511 HWLOC_CUDA_CPPFLAGS = @HWLOC_CUDA_CPPFLAGS@
512 HWLOC_CUDA_LDFLAGS = @HWLOC_CUDA_LDFLAGS@
505513 HWLOC_CUDA_LIBS = @HWLOC_CUDA_LIBS@
506514 HWLOC_DIFF_U = @HWLOC_DIFF_U@
507515 HWLOC_DIFF_W = @HWLOC_DIFF_W@
512520 HWLOC_EMBEDDED_LDFLAGS = @HWLOC_EMBEDDED_LDFLAGS@
513521 HWLOC_EMBEDDED_LIBS = @HWLOC_EMBEDDED_LIBS@
514522 HWLOC_GL_LIBS = @HWLOC_GL_LIBS@
523 HWLOC_HAVE_LEVELZERO = @HWLOC_HAVE_LEVELZERO@
515524 HWLOC_HAVE_LIBXML2 = @HWLOC_HAVE_LIBXML2@
516525 HWLOC_HAVE_NVML = @HWLOC_HAVE_NVML@
517526 HWLOC_HAVE_OPENCL = @HWLOC_HAVE_OPENCL@
518527 HWLOC_HAVE_RSMI = @HWLOC_HAVE_RSMI@
528 HWLOC_IBVERBS_LIBS = @HWLOC_IBVERBS_LIBS@
519529 HWLOC_LDFLAGS = @HWLOC_LDFLAGS@
530 HWLOC_LEVELZERO_CFLAGS = @HWLOC_LEVELZERO_CFLAGS@
531 HWLOC_LEVELZERO_LIBS = @HWLOC_LEVELZERO_LIBS@
520532 HWLOC_LIBS = @HWLOC_LIBS@
521533 HWLOC_LIBS_PRIVATE = @HWLOC_LIBS_PRIVATE@
522534 HWLOC_LIBXML2_CFLAGS = @HWLOC_LIBXML2_CFLAGS@
526538 HWLOC_MS_LIB_ARCH = @HWLOC_MS_LIB_ARCH@
527539 HWLOC_NUMA_CFLAGS = @HWLOC_NUMA_CFLAGS@
528540 HWLOC_NUMA_LIBS = @HWLOC_NUMA_LIBS@
541 HWLOC_NVML_CPPFLAGS = @HWLOC_NVML_CPPFLAGS@
542 HWLOC_NVML_LDFLAGS = @HWLOC_NVML_LDFLAGS@
529543 HWLOC_NVML_LIBS = @HWLOC_NVML_LIBS@
530 HWLOC_OPENCL_CFLAGS = @HWLOC_OPENCL_CFLAGS@
544 HWLOC_OPENCL_CPPFLAGS = @HWLOC_OPENCL_CPPFLAGS@
531545 HWLOC_OPENCL_LDFLAGS = @HWLOC_OPENCL_LDFLAGS@
532546 HWLOC_OPENCL_LIBS = @HWLOC_OPENCL_LIBS@
533547 HWLOC_PCIACCESS_CFLAGS = @HWLOC_PCIACCESS_CFLAGS@
653667 prefix = @prefix@
654668 program_transform_name = @program_transform_name@
655669 psdir = @psdir@
670 runstatedir = @runstatedir@
656671 sbindir = @sbindir@
657672 sharedstatedir = @sharedstatedir@
658673 srcdir = @srcdir@
00 /*
11 * Copyright © 2009 CNRS
2 * Copyright © 2009-2020 Inria. All rights reserved.
2 * Copyright © 2009-2021 Inria. All rights reserved.
33 * Copyright © 2009-2013 Université Bordeaux
44 * Copyright © 2009-2020 Cisco Systems, Inc. All rights reserved.
55 * Copyright © 2020 Hewlett Packard Enterprise. All rights reserved.
133133 <li>AMD or NVIDIA OpenCL implementations for OpenCL device discovery.
134134 </li>
135135 <li>the NVIDIA CUDA Toolkit for CUDA device discovery.
136 See \ref faq_cuda_build.
136137 </li>
137138 <li>the NVIDIA Management Library (NVML) for NVML device discovery.
138139 It is included in CUDA since version 8.0.
148149 <li>the AMD ROCm SMI library for RSMI device discovery.
149150 The relevant development package is usually <tt>rocm-smi-lib64</tt>
150151 or <tt>librocm-smi-dev</tt>.
152 </li>
153 <li>the oneAPI Level Zero library.
154 The relevant development package is usually <tt>level-zero-dev</tt>
155 or <tt>level-zero-devel</tt>.
151156 </li>
152157 <li>libxml2 for full XML import/export support (otherwise, the
153158 internal minimalistic parser will only be able to import
9961001 which gathers all resources but marks the unavailable ones as disallowed.
9971002 </dt>
9981003
999 <dt>HWLOC_HIDE_ERRORS=0</dt>
1004 <dt>HWLOC_HIDE_ERRORS=1</dt>
10001005 <dd>enables or disables verbose reporting of errors.
10011006 The hwloc library may issue warnings to the standard error stream
10021007 when it detects a problem during topology discovery, for instance
10031008 if the operating system (or user) gives contradictory topology
1004 information. Setting this environment variable to 1 removes the
1005 actual displaying of these error messages.
1009 information.
1010
1011 By default (1), hwloc only shows critical errors such as invalid
1012 hardware topology information or invalid configuration.
1013 If set to 0 (default in lstopo), more errors are displayed,
1014 for instance a failure to initialize CUDA or NVML.
1015 If set to 2, no hwloc error messages are shown.
1016
1017 Note that additional verbose messages may be enabled with
1018 other variables such as HWLOC_GROUPING_VERBOSE.
10061019 </dd>
10071020
10081021 <dt>HWLOC_USE_NUMA_DISTANCES=7</dt>
12831296 force rsmi_shutdown to make valgrind happy
12841297 not enabled by default on rsmi <= 3.3.x because those old libs do not
12851298 refcount and somebody else might be using rsmi
1299 HWLOC_NVML_USE_OPENCAPI_LOCALITY
1300 use the OpenCAPI bridge locality for finding the CPU where a NVLink
1301 OpenCAPI endpoint is connecter. this may be wrong on POWER8, that's
1302 why we use the GPU locality instead (assuming GPU have PCIe and
1303 NVLink connecting to the same socket).
12861304 -->
12871305
12881306
14821500 <li>GPUs (::HWLOC_OBJ_OSDEV_GPU)
14831501 <ul>
14841502 <li><em>rsmi0</em> for the first RSMI device
1485 (RSMI component, using the AMD ROCm SMI library)</li>
1503 ("RSMI" subtype, from the RSMI component, using the AMD ROCm SMI library)</li>
1504 <li><em>ze0</em> for the first Level Zero device
1505 ("LevelZero" subtype, from the levelzero component, using the oneAPI Level Zero library)</li>
14861506 <li><em>nvml0</em> for the first NVML device
1487 (NVML component, using the NVIDIA Management Library)</li>
1507 ("NVML" subtype, from the NVML component, using the NVIDIA Management Library)</li>
14881508 <li><em>:0.0</em> for the first display
1489 (GL component, using the NV-CONTROL X extension library, NVCtrl)</li>
1509 ("Display" subtype, from the GL component, using the NV-CONTROL X extension library, NVCtrl)</li>
1510 <li><em>card0</em> and <em>renderD128</em> for DRM device files
1511 (from the Linux component, filtered-out by default because considered non-important)</li>
14901512 </ul>
14911513 </li>
14921514 <li>Co-Processors (::HWLOC_OBJ_OSDEV_COPROC)
14931515 <ul>
14941516 <li><em>opencl0d0</em> for the first device of the first OpenCL platform,
14951517 <em>opencl1d3</em> for the fourth device of the second OpenCL platform
1496 (OpenCL component)</li>
1518 ("OpenCL" subtype, from the OpenCL component)</li>
14971519 <li><em>cuda0</em> for the first NVIDIA CUDA device
1498 (CUDA component, using the NVIDIA CUDA Library)</li>
1520 ("CUDA" subtype, from the CUDA component, using the NVIDIA CUDA Library)</li>
1521 <li><em>ve0</em> for the first NEC Vector Engine device
1522 ("VectorEngine" subtype, from the Linux component)</li>
1523 </ul>
14991524 </li>
15001525 <li>DMA engine channel (::HWLOC_OBJ_OSDEV_DMA)
15011526 <ul>
19031928 <dt>OpenCLComputeUnits, OpenCLGlobalMemorySize (OpenCL OS devices)</dt>
19041929 <dd>The number of compute units and global memory size (in kB) of an OpenCL device.
19051930 </dd>
1931 <dt>LevelZeroVendor, LevelZeroModel, LevelZeroBrand,</dt>
1932 <dt>LevelZeroSerialNumber, LevelZeroBoardNumber (LevelZero OS devices)</dt>
1933 <dd>
1934 The name of the vendor, device mode, brand of a Level Zero device,
1935 and its serial and board numbers.
1936 </dd>
1937 <dt>LevelZeroDriverIndex, LevelZeroDriverDeviceIndex (LevelZero OS devices)</dt>
1938 <dd>The index of the Level Zero driver within the list of drivers,
1939 and the index of the device within the list of devices managed by this driver.
1940 </dd>
1941 <dt>LevelZeroCQGroups, LevelZeroCQGroup2 (LevelZero OS devices)</dt>
1942 <dd>The number of completion queue groups, and the description of the third group
1943 (as <tt>N*0xX</tt> where <tt>N</tt> is the number of queues in the group,
1944 and <tt>0xX</tt> is the hexadecimal bitmask of <tt>ze_command_queue_group_property_flag_t</tt>
1945 listing properties of those queues).
1946 </dd>
19061947 <dt>AMDUUID, AMDSerial (RSMI GPU OS devices)</dt>
19071948 <dd>The UUID and serial number of AMD GPUs.
19081949 </dd>
19261967 and size of the shared memory in each multiprocessor of a CUDA device.
19271968 Sizes are in kB.
19281969 </dd>
1970 <dt>VectorEngineModel, VectorEngineSerialNumber (VectorEngine OS devices)</dt>
1971 <dd>
1972 The model and serial number of a VectorEngine device.
1973 </dd>
1974 <dt>VectorEngineCores, VectorEngineMemorySize, VectorEngineLLCSize,</dt>
1975 <dt>VectorEngineL2Size, VectorEngineL1dSize, VectorEngineL1iSize (VectorEngine OS devices)</dt>
1976 <dd>
1977 The number of cores, memory size, and the sizes of the (global)
1978 last level cache and of L2, L1d and L1i caches of a VectorEngine device.
1979 Sizes are in kB.
1980 </dd>
1981 <dt>VectorEngineNUMAPartitioned (VectorEngine OS devices)</dt>
1982 <dd>
1983 If this attribute exists, the VectorEngine device is configured in
1984 partitioned mode with multiple NUMA nodes.
1985 </dd>
19291986 <dt>Address, Port (Network interface OS devices)</dt>
19301987 <dd>The MAC address and the port number of a software network
19311988 interface, such as <tt>eth4</tt> on Linux.
20392096 <dt>NUMALatency (Linux, Solaris, FreeBSD)</dt>
20402097 <dd>This is the matrix of theoretical latencies described above.
20412098 </dd>
2099 <dt>XGMIBandwidth (RSMI)</dt>
2100 <dd>This is matrix of unidirectional XGMI bandwidths between AMD GPUs (in MB/s).
2101 It contains 0 when there is no direct XGMI link between objects.
2102 Values on the diagonal are artificially set to very high so
2103 that local access always appears faster than remote access.
2104
2105 GPUs are identified by RSMI OS devices such as "rsmi0".
2106 They may be converted into the corresponding OpenCL or PCI devices
2107 using hwloc_get_obj_with_same_locality() or the hwloc-annotate tool.
2108
2109 hwloc_distances_transform() or hwloc-annotate may also be used
2110 to transform this matrix into something more convenient,
2111 for instance by replacing bandwidths with numbers of links between peers.
2112 </dt>
2113 <dt>NVLinkBandwidth (NVML)</dt>
2114 <dd>This is the matrix of unidirectional NVLink bandwidths between
2115 NVIDIA GPUs (in MB/s).
2116 It contains 0 when there is no direct NVLink between objects.
2117 When there are multiple links, their bandwidth is aggregated.
2118 Values on the diagonal are artificially set to very high so
2119 that local access always appears faster than remote access.
2120
2121 On POWER platforms, NVLinks may also connects GPUs to CPUs.
2122 On NVIDIA platforms such as DGX-2, a NVSwitch may interconnect GPUs through NVLinks.
2123 In these cases, the distances structure is heterogeneous.
2124 GPUs always appear first in the matrix (as NVML OS devices such as "nvml0"),
2125 and non-GPU objects may appear at the end (Package for POWER processors,
2126 PCI device for NVSwitch).
2127
2128 NVML OS devices may be converted into the corresponding CUDA, OpenCL or PCI devices
2129 using hwloc_get_obj_with_same_locality() or the hwloc-annotate tool.
2130
2131 hwloc_distances_transform() or hwloc-annotate may also be used
2132 to transform this matrix into something more convenient,
2133 for instance by removing switches or CPU ports,
2134 or by replacing bandwidths with numbers of links between peers.
2135
2136 When a NVSwitch interconnects GPUs, only links between one GPU and
2137 different NVSwitch ports are reported. They may be merged into a single
2138 switch port with hwloc_distances_transform() or hwloc-annotate.
2139 Or a transitive closure may also be applied to report the bandwidth
2140 between GPUs across the NVSwitch.
20422141 </dl>
20432142
20442143 Users may also specify their own matrices between any set of objects,
24132512 hwloc/linux.h offers Linux-specific helpers that utilize some
24142513 non-portable features of the Linux system, such as binding threads
24152514 through their thread ID ("tid") or parsing kernel CPU mask files.
2515 See \ref hwlocality_linux.
2516 </dd>
2517
2518 <dt>Windows specific features</dt>
2519 <dd>
2520 hwloc/windows.h offers Windows-specific helpers to query information
2521 about Windows processor groups.
2522 See \ref hwlocality_windows.
24162523 </dd>
24172524
24182525 <dt>Linux libnuma</dt>
24202527 hwloc/linux-libnuma.h provides conversion helpers between hwloc CPU
24212528 sets and libnuma-specific types, such as bitmasks. It
24222529 helps you use libnuma memory-binding functions with hwloc CPU sets.
2530 See \ref hwlocality_linux_libnuma_bitmask and \ref hwlocality_linux_libnuma_ulongs.
24232531 </dd>
24242532
24252533 <dt>Glibc</dt>
24272535 hwloc/glibc-sched.h offers conversion routines between Glibc and
24282536 hwloc CPU sets in order to use hwloc with functions such as
24292537 sched_getaffinity() or pthread_attr_setaffinity_np().
2538 See \ref hwlocality_glibc_sched.
24302539 </dd>
24312540
24322541 <dt>OpenFabrics Verbs</dt>
24362545 processors near an OpenFabrics device.
24372546 It may also return the corresponding OS device hwloc object for further
24382547 information (if I/O device discovery is enabled).
2548 See \ref hwlocality_openfabrics.
24392549 </dd>
24402550
24412551 <dt>OpenCL</dt>
24462556 a <tt>cl_device_id</tt>.
24472557 It may also return the corresponding OS device hwloc object for further
24482558 information (if I/O device discovery is enabled).
2559 See \ref hwlocality_opencl.
2560 </dd>
2561
2562 <dt>oneAPI Level Zero</dt>
2563 <dd>
2564 hwloc/levelzero.h enables interoperability with the oneAPI Level Zero interface.
2565 It may return the list of processors near an accelerator or GPU.
2566 It may also return the corresponding OS device hwloc object for further
2567 information (if I/O device discovery is enabled).
2568 See \ref hwlocality_levelzero.
24492569 </dd>
24502570
24512571 <dt>AMD ROCm SMI Library (RSMI)</dt>
24542574 It may return the list of processors near an AMD GPU.
24552575 It may also return the corresponding OS device hwloc object for further
24562576 information (if I/O device discovery is enabled).
2577 See \ref hwlocality_rsmi.
24572578 </dd>
24582579
24592580 <dt>NVIDIA CUDA</dt>
24632584 return the list of processors near NVIDIA GPUs.
24642585 It may also return the corresponding OS device hwloc object for further
24652586 information (if I/O device discovery is enabled).
2587 See \ref hwlocality_cuda and \ref hwlocality_cudart.
24662588 </dd>
24672589
24682590 <dt>NVIDIA Management Library (NVML)</dt>
24722594 a <tt>nvmlDevice_t</tt>.
24732595 It may also return the corresponding OS device hwloc object for further
24742596 information (if I/O device discovery is enabled).
2597 See \ref hwlocality_nvml.
24752598 </dd>
24762599
24772600 <dt>NVIDIA displays</dt>
24822605 hwloc object that corresponds to a display
24832606 given as a name such as <em>:0.0</em>
24842607 or given as a port/device pair (server/screen).
2608 See \ref hwlocality_gl.
24852609 </dd>
24862610
24872611 <dt>Taskset command-line tool</dt>
24922616 string in fixed-size subsets and separates them with commas).
24932617 To ease interoperability, hwloc offers routines to convert
24942618 hwloc CPU sets from/to taskset-specific string format.
2619 See for instance hwloc_bitmap_taskset_snprintf() in
2620 \ref hwlocality_bitmap().
2621
24952622 Most hwloc command-line tools also support the <tt>\--taskset</tt>
24962623 option to manipulate taskset-specific strings.
24972624 </dd>
25462673 (see \ref hwlocality_tinker) may modify the topology significantly by adding
25472674 objects inside the tree, changing the topology depth, etc.
25482675
2549 <tt>hwloc_distances_add()</tt> and <tt>hwloc_distances_remove()</tt>
2676 <tt>hwloc_distances_add_commit()</tt> and <tt>hwloc_distances_remove()</tt>
25502677 (see \ref hwlocality_distances_add) modify the list of distance structures
25512678 in the topology, and the former may even insert new Group objects.
25522679
28202947 <dd>
28212948 This component creates GPU OS device objects such as
28222949 <em>rsmi0</em> for describing AMD GPUs.
2950 <b>It may be built as a plugin</b>.
2951 </dd>
2952 <dt>levelzero</dt>
2953 <dd>
2954 This component creates co-processor OS device objects such as
2955 <em>ze0</em> for describing oneAPI Level Zero devices.
28232956 <b>It may be built as a plugin</b>.
28242957 </dd>
28252958 <dt>cuda</dt>
36583791 \section faq4 Platform-specific
36593792
36603793
3794 \subsection faq_cuda_build How do I enable CUDA and select which CUDA version to use?
3795
3796 hwloc enables CUDA as soon as it finds CUDA development headers and libraries
3797 on the system.
3798 This detection may be performed thanks to <tt>pkg-config</tt> but it requires
3799 hwloc to know which CUDA version to look for. This may be done by passing
3800 <tt>\--with-cuda-version=11.0</tt> to the configure script. Otherwise hwloc
3801 will also look for the <tt>CUDA_VERSION</tt> environment variable.
3802
3803 If <tt>pkg-config</tt> does not work, passing <tt>\--with-cuda=/path/to/cuda</tt>
3804 to the configure script is another way to define the corresponding library
3805 and header paths.
3806 Finally, these paths may also be set through environment variables such
3807 as <tt>LIBRARY_PATH</tt> and <tt>C_INCLUDE_PATH</tt>.
3808
3809 These paths, either detected by <tt>pkg-config</tt> or given manually, will
3810 also be used to detect NVML and OpenCL libraries and enable their hwloc backends.
3811
3812 To find out whether CUDA was detected and enabled, look in <i>Probe / display I/O devices</i>
3813 at the end of the configure script output.
3814 Passing <tt>\--enable-cuda</tt> will also cause configure to fail
3815 if CUDA could not be found and enabled in hwloc.
3816
3817
3818
36613819 \subsection faq_knl_numa How do I find the local MCDRAM NUMA node on Intel Xeon Phi processor?
36623820
36633821 Intel Xeon Phi processors introduced a new memory architecture by
37633921 and <tt>make install</tt> steps without having to tweak too many variables or options.
37643922 One may look at <tt>contrib/ci.inria.fr/job-3-mingw.sh</tt> in the hwloc
37653923 repository for an example used for nightly testing.
3924
3925 hwloc also supports the Cygwin environment for porting Unix code to Windows.
37663926
37673927 hwloc releases also contain a basic Microsoft Visual Studio solution
37683928 under <tt>contrib/windows/</tt>.
00 %!PS-Adobe-3.0 EPSF-3.0
11 %%Title: images/diagram.fig
2 %%Creator: fig2dev Version 3.2.7b
3 %%CreationDate: 2020-11-23 15:38:20
2 %%Creator: fig2dev Version 3.2.8
3 %%CreationDate: 2021-06-08 09:17:17
44 %%BoundingBox: 0 0 720 705
55 %%Magnification: 1.0000
66 %%EndComments
4949 bind def
5050 /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
5151 4 -2 roll mul srgb} bind def
52 /xfig_image {image Data flushfile} def
5253 /reencdict 12 dict def /ReEncode { reencdict begin
5354 /newcodesandnames exch def /newfontname exch def /basefontname exch def
5455 /basefontdict basefontname findfont def /newfont basefontdict maxlength dict def
Binary diff not shown
0 # Copyright © 2009-2020 Inria. All rights reserved.
0 # Copyright © 2009-2021 Inria. All rights reserved.
11 # Copyright © 2009-2012 Université Bordeaux
22 # Copyright © 2009-2014 Cisco Systems, Inc. All rights reserved.
33 # Copyright © 2011-2012 Oracle and/or its affiliates. All rights reserved.
5454 else
5555 plugins_LTLIBRARIES += hwloc_xml_libxml.la
5656 hwloc_xml_libxml_la_SOURCES = topology-xml-libxml.c
57 hwloc_xml_libxml_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_LIBXML2_CFLAGS) -DHWLOC_INSIDE_PLUGIN
58 hwloc_xml_libxml_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_LIBXML2_LIBS)
57 hwloc_xml_libxml_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_LIBXML2_CPPFLAGS) $(HWLOC_LIBXML2_CFLAGS) -DHWLOC_INSIDE_PLUGIN
58 hwloc_xml_libxml_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_LIBXML2_LIBS) $(HWLOC_LIBXML2_LDFLAGS)
5959 endif
6060 endif HWLOC_HAVE_LIBXML2
6161
6565 else
6666 plugins_LTLIBRARIES += hwloc_pci.la
6767 hwloc_pci_la_SOURCES = topology-pci.c
68 hwloc_pci_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_PCIACCESS_CFLAGS) -DHWLOC_INSIDE_PLUGIN
69 hwloc_pci_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_PCIACCESS_LIBS)
68 hwloc_pci_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_PCIACCESS_CPPFLAGS) $(HWLOC_PCIACCESS_CFLAGS) -DHWLOC_INSIDE_PLUGIN
69 hwloc_pci_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_PCIACCESS_LIBS) $(HWLOC_PCIACCESS_LDFLAGS)
7070 endif
7171 endif HWLOC_HAVE_PCIACCESS
7272
7676 else
7777 plugins_LTLIBRARIES += hwloc_opencl.la
7878 hwloc_opencl_la_SOURCES = topology-opencl.c
79 hwloc_opencl_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_OPENCL_CFLAGS) -DHWLOC_INSIDE_PLUGIN
79 hwloc_opencl_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_OPENCL_CPPFLAGS) $(HWLOC_OPENCL_CFLAGS) -DHWLOC_INSIDE_PLUGIN
8080 hwloc_opencl_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_OPENCL_LIBS) $(HWLOC_OPENCL_LDFLAGS)
8181 endif
8282 endif HWLOC_HAVE_OPENCL
8787 else
8888 plugins_LTLIBRARIES += hwloc_cuda.la
8989 hwloc_cuda_la_SOURCES = topology-cuda.c
90 hwloc_cuda_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_CUDA_CFLAGS) -DHWLOC_INSIDE_PLUGIN
91 hwloc_cuda_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_CUDA_LIBS)
90 hwloc_cuda_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_CUDART_CPPFLAGS) $(HWLOC_CUDART_CFLAGS) -DHWLOC_INSIDE_PLUGIN
91 hwloc_cuda_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_CUDART_LIBS) $(HWLOC_CUDART_LDFLAGS)
9292 endif
9393 endif HWLOC_HAVE_CUDART
9494
9898 else
9999 plugins_LTLIBRARIES += hwloc_nvml.la
100100 hwloc_nvml_la_SOURCES = topology-nvml.c
101 hwloc_nvml_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_NVML_CFLAGS) -DHWLOC_INSIDE_PLUGIN
102 hwloc_nvml_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_NVML_LIBS)
101 hwloc_nvml_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_NVML_CPPFLAGS) $(HWLOC_NVML_CFLAGS) -DHWLOC_INSIDE_PLUGIN
102 hwloc_nvml_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_NVML_LIBS) $(HWLOC_NVML_LDFLAGS)
103103 endif
104104 endif HWLOC_HAVE_NVML
105105
109109 else
110110 plugins_LTLIBRARIES += hwloc_rsmi.la
111111 hwloc_rsmi_la_SOURCES = topology-rsmi.c
112 hwloc_rsmi_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_RSMI_CFLAGS) -DHWLOC_INSIDE_PLUGIN
113 hwloc_rsmi_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_RSMI_LIBS)
112 hwloc_rsmi_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_RSMI_CPPFLAGS) $(HWLOC_RSMI_CFLAGS) -DHWLOC_INSIDE_PLUGIN
113 hwloc_rsmi_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_RSMI_LIBS) $(HWLOC_RSMI_LDFLAGS)
114114 endif
115115 endif HWLOC_HAVE_RSMI
116
117 if HWLOC_HAVE_LEVELZERO
118 if HWLOC_LEVELZERO_BUILD_STATIC
119 sources += topology-levelzero.c
120 else
121 plugins_LTLIBRARIES += hwloc_levelzero.la
122 hwloc_levelzero_la_SOURCES = topology-levelzero.c
123 hwloc_levelzero_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_LEVELZERO_CFLAGS) -DHWLOC_INSIDE_PLUGIN
124 hwloc_levelzero_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_LEVELZERO_LIBS)
125 endif
126 endif HWLOC_HAVE_LEVELZERO
116127
117128 if HWLOC_HAVE_GL
118129 if HWLOC_GL_BUILD_STATIC
120131 else
121132 plugins_LTLIBRARIES += hwloc_gl.la
122133 hwloc_gl_la_SOURCES = topology-gl.c
123 hwloc_gl_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_GL_CFLAGS) -DHWLOC_INSIDE_PLUGIN
124 hwloc_gl_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_GL_LIBS)
134 hwloc_gl_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_GL_CPPFLAGS) $(HWLOC_GL_CFLAGS) -DHWLOC_INSIDE_PLUGIN
135 hwloc_gl_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_GL_LIBS) $(HWLOC_GL_LDFLAGS)
125136 endif
126137 endif HWLOC_HAVE_GL
127138
1313
1414 @SET_MAKE@
1515
16 # Copyright © 2009-2020 Inria. All rights reserved.
16 # Copyright © 2009-2021 Inria. All rights reserved.
1717 # Copyright © 2009-2012 Université Bordeaux
1818 # Copyright © 2009-2014 Cisco Systems, Inc. All rights reserved.
1919 # Copyright © 2011-2012 Oracle and/or its affiliates. All rights reserved.
109109 @HWLOC_HAVE_NVML_TRUE@@HWLOC_NVML_BUILD_STATIC_FALSE@am__append_10 = hwloc_nvml.la
110110 @HWLOC_HAVE_RSMI_TRUE@@HWLOC_RSMI_BUILD_STATIC_TRUE@am__append_11 = topology-rsmi.c
111111 @HWLOC_HAVE_RSMI_TRUE@@HWLOC_RSMI_BUILD_STATIC_FALSE@am__append_12 = hwloc_rsmi.la
112 @HWLOC_GL_BUILD_STATIC_TRUE@@HWLOC_HAVE_GL_TRUE@am__append_13 = topology-gl.c
113 @HWLOC_GL_BUILD_STATIC_FALSE@@HWLOC_HAVE_GL_TRUE@am__append_14 = hwloc_gl.la
114 @HWLOC_HAVE_SOLARIS_TRUE@am__append_15 = topology-solaris.c \
112 @HWLOC_HAVE_LEVELZERO_TRUE@@HWLOC_LEVELZERO_BUILD_STATIC_TRUE@am__append_13 = topology-levelzero.c
113 @HWLOC_HAVE_LEVELZERO_TRUE@@HWLOC_LEVELZERO_BUILD_STATIC_FALSE@am__append_14 = hwloc_levelzero.la
114 @HWLOC_GL_BUILD_STATIC_TRUE@@HWLOC_HAVE_GL_TRUE@am__append_15 = topology-gl.c
115 @HWLOC_GL_BUILD_STATIC_FALSE@@HWLOC_HAVE_GL_TRUE@am__append_16 = hwloc_gl.la
116 @HWLOC_HAVE_SOLARIS_TRUE@am__append_17 = topology-solaris.c \
115117 @HWLOC_HAVE_SOLARIS_TRUE@ topology-solaris-chiptype.c
116 @HWLOC_HAVE_LINUX_TRUE@am__append_16 = topology-linux.c topology-hardwired.c
117 @HWLOC_HAVE_BGQ_TRUE@am__append_17 = topology-bgq.c
118 @HWLOC_HAVE_AIX_TRUE@am__append_18 = topology-aix.c
119 @HWLOC_HAVE_AIX_TRUE@am__append_19 = -lpthread
120 @HWLOC_HAVE_HPUX_TRUE@am__append_20 = topology-hpux.c
121 @HWLOC_HAVE_HPUX_TRUE@am__append_21 = -lpthread
122 @HWLOC_HAVE_WINDOWS_TRUE@am__append_22 = topology-windows.c
123 @HWLOC_HAVE_DARWIN_TRUE@am__append_23 = topology-darwin.c
124 @HWLOC_HAVE_FREEBSD_TRUE@am__append_24 = topology-freebsd.c
125 @HWLOC_HAVE_NETBSD_TRUE@am__append_25 = topology-netbsd.c
126 @HWLOC_HAVE_NETBSD_TRUE@am__append_26 = -lpthread
127 @HWLOC_HAVE_X86_CPUID_TRUE@am__append_27 = topology-x86.c
128 @HWLOC_HAVE_GCC_TRUE@am__append_28 = -no-undefined
129 @HWLOC_HAVE_WINDOWS_TRUE@am__append_29 = -Xlinker --output-def -Xlinker .libs/libhwloc.def
130 @HWLOC_HAVE_PLUGINS_TRUE@am__append_30 = -export-dynamic
131 @HWLOC_BUILD_STANDALONE_TRUE@am__append_31 = hwloc.dtd hwloc2.dtd hwloc2-diff.dtd
118 @HWLOC_HAVE_LINUX_TRUE@am__append_18 = topology-linux.c topology-hardwired.c
119 @HWLOC_HAVE_BGQ_TRUE@am__append_19 = topology-bgq.c
120 @HWLOC_HAVE_AIX_TRUE@am__append_20 = topology-aix.c
121 @HWLOC_HAVE_AIX_TRUE@am__append_21 = -lpthread
122 @HWLOC_HAVE_HPUX_TRUE@am__append_22 = topology-hpux.c
123 @HWLOC_HAVE_HPUX_TRUE@am__append_23 = -lpthread
124 @HWLOC_HAVE_WINDOWS_TRUE@am__append_24 = topology-windows.c
125 @HWLOC_HAVE_DARWIN_TRUE@am__append_25 = topology-darwin.c
126 @HWLOC_HAVE_FREEBSD_TRUE@am__append_26 = topology-freebsd.c
127 @HWLOC_HAVE_NETBSD_TRUE@am__append_27 = topology-netbsd.c
128 @HWLOC_HAVE_NETBSD_TRUE@am__append_28 = -lpthread
129 @HWLOC_HAVE_X86_CPUID_TRUE@am__append_29 = topology-x86.c
130 @HWLOC_HAVE_GCC_TRUE@am__append_30 = -no-undefined
131 @HWLOC_HAVE_WINDOWS_TRUE@am__append_31 = -Xlinker --output-def -Xlinker .libs/libhwloc.def
132 @HWLOC_HAVE_PLUGINS_TRUE@am__append_32 = -export-dynamic
133 @HWLOC_BUILD_STANDALONE_TRUE@am__append_33 = hwloc.dtd hwloc2.dtd hwloc2-diff.dtd
132134 subdir = hwloc
133135 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
134136 am__aclocal_m4_deps = $(top_srcdir)/config/hwloc.m4 \
215217 @HWLOC_GL_BUILD_STATIC_FALSE@@HWLOC_HAVE_GL_TRUE@am_hwloc_gl_la_rpath = \
216218 @HWLOC_GL_BUILD_STATIC_FALSE@@HWLOC_HAVE_GL_TRUE@ -rpath \
217219 @HWLOC_GL_BUILD_STATIC_FALSE@@HWLOC_HAVE_GL_TRUE@ $(pluginsdir)
220 hwloc_levelzero_la_LIBADD =
221 am__hwloc_levelzero_la_SOURCES_DIST = topology-levelzero.c
222 @HWLOC_HAVE_LEVELZERO_TRUE@@HWLOC_LEVELZERO_BUILD_STATIC_FALSE@am_hwloc_levelzero_la_OBJECTS = hwloc_levelzero_la-topology-levelzero.lo
223 hwloc_levelzero_la_OBJECTS = $(am_hwloc_levelzero_la_OBJECTS)
224 hwloc_levelzero_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
225 $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
226 $(hwloc_levelzero_la_CFLAGS) $(CFLAGS) \
227 $(hwloc_levelzero_la_LDFLAGS) $(LDFLAGS) -o $@
228 @HWLOC_HAVE_LEVELZERO_TRUE@@HWLOC_LEVELZERO_BUILD_STATIC_FALSE@am_hwloc_levelzero_la_rpath = -rpath \
229 @HWLOC_HAVE_LEVELZERO_TRUE@@HWLOC_LEVELZERO_BUILD_STATIC_FALSE@ $(pluginsdir)
218230 hwloc_nvml_la_LIBADD =
219231 am__hwloc_nvml_la_SOURCES_DIST = topology-nvml.c
220232 @HWLOC_HAVE_NVML_TRUE@@HWLOC_NVML_BUILD_STATIC_FALSE@am_hwloc_nvml_la_OBJECTS = hwloc_nvml_la-topology-nvml.lo
270282 pci-common.c diff.c shmem.c misc.c base64.c topology-noos.c \
271283 topology-synthetic.c topology-xml.c topology-xml-nolibxml.c \
272284 topology-xml-libxml.c topology-pci.c topology-opencl.c \
273 topology-cuda.c topology-nvml.c topology-rsmi.c topology-gl.c \
274 topology-solaris.c topology-solaris-chiptype.c \
275 topology-linux.c topology-hardwired.c topology-bgq.c \
276 topology-aix.c topology-hpux.c topology-windows.c \
277 topology-darwin.c topology-freebsd.c topology-netbsd.c \
278 topology-x86.c
285 topology-cuda.c topology-nvml.c topology-rsmi.c \
286 topology-levelzero.c topology-gl.c topology-solaris.c \
287 topology-solaris-chiptype.c topology-linux.c \
288 topology-hardwired.c topology-bgq.c topology-aix.c \
289 topology-hpux.c topology-windows.c topology-darwin.c \
290 topology-freebsd.c topology-netbsd.c topology-x86.c
279291 @HWLOC_HAVE_LIBXML2_TRUE@@HWLOC_XML_LIBXML_BUILD_STATIC_TRUE@am__objects_1 = topology-xml-libxml.lo
280292 @HWLOC_HAVE_PCIACCESS_TRUE@@HWLOC_PCI_BUILD_STATIC_TRUE@am__objects_2 = topology-pci.lo
281293 @HWLOC_HAVE_OPENCL_TRUE@@HWLOC_OPENCL_BUILD_STATIC_TRUE@am__objects_3 = topology-opencl.lo
282294 @HWLOC_CUDA_BUILD_STATIC_TRUE@@HWLOC_HAVE_CUDART_TRUE@am__objects_4 = topology-cuda.lo
283295 @HWLOC_HAVE_NVML_TRUE@@HWLOC_NVML_BUILD_STATIC_TRUE@am__objects_5 = topology-nvml.lo
284296 @HWLOC_HAVE_RSMI_TRUE@@HWLOC_RSMI_BUILD_STATIC_TRUE@am__objects_6 = topology-rsmi.lo
285 @HWLOC_GL_BUILD_STATIC_TRUE@@HWLOC_HAVE_GL_TRUE@am__objects_7 = topology-gl.lo
286 @HWLOC_HAVE_SOLARIS_TRUE@am__objects_8 = topology-solaris.lo \
297 @HWLOC_HAVE_LEVELZERO_TRUE@@HWLOC_LEVELZERO_BUILD_STATIC_TRUE@am__objects_7 = topology-levelzero.lo
298 @HWLOC_GL_BUILD_STATIC_TRUE@@HWLOC_HAVE_GL_TRUE@am__objects_8 = topology-gl.lo
299 @HWLOC_HAVE_SOLARIS_TRUE@am__objects_9 = topology-solaris.lo \
287300 @HWLOC_HAVE_SOLARIS_TRUE@ topology-solaris-chiptype.lo
288 @HWLOC_HAVE_LINUX_TRUE@am__objects_9 = topology-linux.lo \
301 @HWLOC_HAVE_LINUX_TRUE@am__objects_10 = topology-linux.lo \
289302 @HWLOC_HAVE_LINUX_TRUE@ topology-hardwired.lo
290 @HWLOC_HAVE_BGQ_TRUE@am__objects_10 = topology-bgq.lo
291 @HWLOC_HAVE_AIX_TRUE@am__objects_11 = topology-aix.lo
292 @HWLOC_HAVE_HPUX_TRUE@am__objects_12 = topology-hpux.lo
293 @HWLOC_HAVE_WINDOWS_TRUE@am__objects_13 = topology-windows.lo
294 @HWLOC_HAVE_DARWIN_TRUE@am__objects_14 = topology-darwin.lo
295 @HWLOC_HAVE_FREEBSD_TRUE@am__objects_15 = topology-freebsd.lo
296 @HWLOC_HAVE_NETBSD_TRUE@am__objects_16 = topology-netbsd.lo
297 @HWLOC_HAVE_X86_CPUID_TRUE@am__objects_17 = topology-x86.lo
298 am__objects_18 = topology.lo traversal.lo distances.lo memattrs.lo \
303 @HWLOC_HAVE_BGQ_TRUE@am__objects_11 = topology-bgq.lo
304 @HWLOC_HAVE_AIX_TRUE@am__objects_12 = topology-aix.lo
305 @HWLOC_HAVE_HPUX_TRUE@am__objects_13 = topology-hpux.lo
306 @HWLOC_HAVE_WINDOWS_TRUE@am__objects_14 = topology-windows.lo
307 @HWLOC_HAVE_DARWIN_TRUE@am__objects_15 = topology-darwin.lo
308 @HWLOC_HAVE_FREEBSD_TRUE@am__objects_16 = topology-freebsd.lo
309 @HWLOC_HAVE_NETBSD_TRUE@am__objects_17 = topology-netbsd.lo
310 @HWLOC_HAVE_X86_CPUID_TRUE@am__objects_18 = topology-x86.lo
311 am__objects_19 = topology.lo traversal.lo distances.lo memattrs.lo \
299312 cpukinds.lo components.lo bind.lo bitmap.lo pci-common.lo \
300313 diff.lo shmem.lo misc.lo base64.lo topology-noos.lo \
301314 topology-synthetic.lo topology-xml.lo topology-xml-nolibxml.lo \
304317 $(am__objects_7) $(am__objects_8) $(am__objects_9) \
305318 $(am__objects_10) $(am__objects_11) $(am__objects_12) \
306319 $(am__objects_13) $(am__objects_14) $(am__objects_15) \
307 $(am__objects_16) $(am__objects_17)
308 am_libhwloc_la_OBJECTS = $(am__objects_18)
320 $(am__objects_16) $(am__objects_17) $(am__objects_18)
321 am_libhwloc_la_OBJECTS = $(am__objects_19)
309322 libhwloc_la_OBJECTS = $(am_libhwloc_la_OBJECTS)
310323 libhwloc_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
311324 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
317330 pci-common.c diff.c shmem.c misc.c base64.c topology-noos.c \
318331 topology-synthetic.c topology-xml.c topology-xml-nolibxml.c \
319332 topology-xml-libxml.c topology-pci.c topology-opencl.c \
320 topology-cuda.c topology-nvml.c topology-rsmi.c topology-gl.c \
321 topology-solaris.c topology-solaris-chiptype.c \
322 topology-linux.c topology-hardwired.c topology-bgq.c \
323 topology-aix.c topology-hpux.c topology-windows.c \
324 topology-darwin.c topology-freebsd.c topology-netbsd.c \
325 topology-x86.c
326 am_libhwloc_embedded_la_OBJECTS = $(am__objects_18)
333 topology-cuda.c topology-nvml.c topology-rsmi.c \
334 topology-levelzero.c topology-gl.c topology-solaris.c \
335 topology-solaris-chiptype.c topology-linux.c \
336 topology-hardwired.c topology-bgq.c topology-aix.c \
337 topology-hpux.c topology-windows.c topology-darwin.c \
338 topology-freebsd.c topology-netbsd.c topology-x86.c
339 am_libhwloc_embedded_la_OBJECTS = $(am__objects_19)
327340 libhwloc_embedded_la_OBJECTS = $(am_libhwloc_embedded_la_OBJECTS)
328341 @HWLOC_BUILD_STANDALONE_FALSE@am_libhwloc_embedded_la_rpath =
329342 AM_V_P = $(am__v_P_@AM_V@)
347360 ./$(DEPDIR)/distances.Plo \
348361 ./$(DEPDIR)/hwloc_cuda_la-topology-cuda.Plo \
349362 ./$(DEPDIR)/hwloc_gl_la-topology-gl.Plo \
363 ./$(DEPDIR)/hwloc_levelzero_la-topology-levelzero.Plo \
350364 ./$(DEPDIR)/hwloc_nvml_la-topology-nvml.Plo \
351365 ./$(DEPDIR)/hwloc_opencl_la-topology-opencl.Plo \
352366 ./$(DEPDIR)/hwloc_pci_la-topology-pci.Plo \
358372 ./$(DEPDIR)/topology-cuda.Plo ./$(DEPDIR)/topology-darwin.Plo \
359373 ./$(DEPDIR)/topology-fake.Plo ./$(DEPDIR)/topology-freebsd.Plo \
360374 ./$(DEPDIR)/topology-gl.Plo ./$(DEPDIR)/topology-hardwired.Plo \
361 ./$(DEPDIR)/topology-hpux.Plo ./$(DEPDIR)/topology-linux.Plo \
362 ./$(DEPDIR)/topology-netbsd.Plo ./$(DEPDIR)/topology-noos.Plo \
363 ./$(DEPDIR)/topology-nvml.Plo ./$(DEPDIR)/topology-opencl.Plo \
364 ./$(DEPDIR)/topology-pci.Plo ./$(DEPDIR)/topology-rsmi.Plo \
375 ./$(DEPDIR)/topology-hpux.Plo \
376 ./$(DEPDIR)/topology-levelzero.Plo \
377 ./$(DEPDIR)/topology-linux.Plo ./$(DEPDIR)/topology-netbsd.Plo \
378 ./$(DEPDIR)/topology-noos.Plo ./$(DEPDIR)/topology-nvml.Plo \
379 ./$(DEPDIR)/topology-opencl.Plo ./$(DEPDIR)/topology-pci.Plo \
380 ./$(DEPDIR)/topology-rsmi.Plo \
365381 ./$(DEPDIR)/topology-solaris-chiptype.Plo \
366382 ./$(DEPDIR)/topology-solaris.Plo \
367383 ./$(DEPDIR)/topology-synthetic.Plo \
390406 am__v_CCLD_0 = @echo " CCLD " $@;
391407 am__v_CCLD_1 =
392408 SOURCES = $(hwloc_cuda_la_SOURCES) $(hwloc_fake_la_SOURCES) \
393 $(hwloc_gl_la_SOURCES) $(hwloc_nvml_la_SOURCES) \
394 $(hwloc_opencl_la_SOURCES) $(hwloc_pci_la_SOURCES) \
395 $(hwloc_rsmi_la_SOURCES) $(hwloc_xml_libxml_la_SOURCES) \
396 $(libhwloc_la_SOURCES) $(libhwloc_embedded_la_SOURCES)
409 $(hwloc_gl_la_SOURCES) $(hwloc_levelzero_la_SOURCES) \
410 $(hwloc_nvml_la_SOURCES) $(hwloc_opencl_la_SOURCES) \
411 $(hwloc_pci_la_SOURCES) $(hwloc_rsmi_la_SOURCES) \
412 $(hwloc_xml_libxml_la_SOURCES) $(libhwloc_la_SOURCES) \
413 $(libhwloc_embedded_la_SOURCES)
397414 DIST_SOURCES = $(am__hwloc_cuda_la_SOURCES_DIST) \
398415 $(am__hwloc_fake_la_SOURCES_DIST) \
399416 $(am__hwloc_gl_la_SOURCES_DIST) \
417 $(am__hwloc_levelzero_la_SOURCES_DIST) \
400418 $(am__hwloc_nvml_la_SOURCES_DIST) \
401419 $(am__hwloc_opencl_la_SOURCES_DIST) \
402420 $(am__hwloc_pci_la_SOURCES_DIST) \
433451 $(srcdir)/topology-bgq.c $(srcdir)/topology-cuda.c \
434452 $(srcdir)/topology-darwin.c $(srcdir)/topology-freebsd.c \
435453 $(srcdir)/topology-gl.c $(srcdir)/topology-hpux.c \
436 $(srcdir)/topology-netbsd.c $(srcdir)/topology-nvml.c \
437 $(srcdir)/topology-opencl.c $(srcdir)/topology-rsmi.c \
454 $(srcdir)/topology-levelzero.c $(srcdir)/topology-netbsd.c \
455 $(srcdir)/topology-nvml.c $(srcdir)/topology-opencl.c \
456 $(srcdir)/topology-rsmi.c \
438457 $(srcdir)/topology-solaris-chiptype.c \
439458 $(srcdir)/topology-solaris.c $(srcdir)/topology-windows.c \
440459 $(top_srcdir)/./config/depcomp
457476 CONFIGURE_DEPENDENCIES = @CONFIGURE_DEPENDENCIES@
458477 CPP = @CPP@
459478 CPPFLAGS = @CPPFLAGS@
479 CUDA_VERSION = @CUDA_VERSION@
460480 CXX = @CXX@
461481 CXXCPP = @CXXCPP@
462482 CXXDEPMODE = @CXXDEPMODE@
483503 HWLOC_CAIRO_LIBS = @HWLOC_CAIRO_LIBS@
484504 HWLOC_CFLAGS = @HWLOC_CFLAGS@
485505 HWLOC_CPPFLAGS = @HWLOC_CPPFLAGS@
506 HWLOC_CUDART_CFLAGS = @HWLOC_CUDART_CFLAGS@
507 HWLOC_CUDART_CPPFLAGS = @HWLOC_CUDART_CPPFLAGS@
508 HWLOC_CUDART_LDFLAGS = @HWLOC_CUDART_LDFLAGS@
509 HWLOC_CUDART_LIBS = @HWLOC_CUDART_LIBS@
510 HWLOC_CUDA_CFLAGS = @HWLOC_CUDA_CFLAGS@
511 HWLOC_CUDA_CPPFLAGS = @HWLOC_CUDA_CPPFLAGS@
512 HWLOC_CUDA_LDFLAGS = @HWLOC_CUDA_LDFLAGS@
486513 HWLOC_CUDA_LIBS = @HWLOC_CUDA_LIBS@
487514 HWLOC_DIFF_U = @HWLOC_DIFF_U@
488515 HWLOC_DIFF_W = @HWLOC_DIFF_W@
493520 HWLOC_EMBEDDED_LDFLAGS = @HWLOC_EMBEDDED_LDFLAGS@
494521 HWLOC_EMBEDDED_LIBS = @HWLOC_EMBEDDED_LIBS@
495522 HWLOC_GL_LIBS = @HWLOC_GL_LIBS@
523 HWLOC_HAVE_LEVELZERO = @HWLOC_HAVE_LEVELZERO@
496524 HWLOC_HAVE_LIBXML2 = @HWLOC_HAVE_LIBXML2@
497525 HWLOC_HAVE_NVML = @HWLOC_HAVE_NVML@
498526 HWLOC_HAVE_OPENCL = @HWLOC_HAVE_OPENCL@
499527 HWLOC_HAVE_RSMI = @HWLOC_HAVE_RSMI@
528 HWLOC_IBVERBS_LIBS = @HWLOC_IBVERBS_LIBS@
500529 HWLOC_LDFLAGS = @HWLOC_LDFLAGS@
530 HWLOC_LEVELZERO_CFLAGS = @HWLOC_LEVELZERO_CFLAGS@
531 HWLOC_LEVELZERO_LIBS = @HWLOC_LEVELZERO_LIBS@
501532 HWLOC_LIBS = @HWLOC_LIBS@
502533 HWLOC_LIBS_PRIVATE = @HWLOC_LIBS_PRIVATE@
503534 HWLOC_LIBXML2_CFLAGS = @HWLOC_LIBXML2_CFLAGS@
507538 HWLOC_MS_LIB_ARCH = @HWLOC_MS_LIB_ARCH@
508539 HWLOC_NUMA_CFLAGS = @HWLOC_NUMA_CFLAGS@
509540 HWLOC_NUMA_LIBS = @HWLOC_NUMA_LIBS@
541 HWLOC_NVML_CPPFLAGS = @HWLOC_NVML_CPPFLAGS@
542 HWLOC_NVML_LDFLAGS = @HWLOC_NVML_LDFLAGS@
510543 HWLOC_NVML_LIBS = @HWLOC_NVML_LIBS@
511 HWLOC_OPENCL_CFLAGS = @HWLOC_OPENCL_CFLAGS@
544 HWLOC_OPENCL_CPPFLAGS = @HWLOC_OPENCL_CPPFLAGS@
512545 HWLOC_OPENCL_LDFLAGS = @HWLOC_OPENCL_LDFLAGS@
513546 HWLOC_OPENCL_LIBS = @HWLOC_OPENCL_LIBS@
514547 HWLOC_PCIACCESS_CFLAGS = @HWLOC_PCIACCESS_CFLAGS@
634667 prefix = @prefix@
635668 program_transform_name = @program_transform_name@
636669 psdir = @psdir@
670 runstatedir = @runstatedir@
637671 sbindir = @sbindir@
638672 sharedstatedir = @sharedstatedir@
639673 srcdir = @srcdir@
653687 -DHWLOC_PLUGINS_PATH="\"$(HWLOC_PLUGINS_PATH)\"" \
654688 -DRUNSTATEDIR="\"$(HWLOC_runstatedir)\""
655689 AM_LDFLAGS = $(HWLOC_LDFLAGS)
656 EXTRA_DIST = dolib.c $(am__append_31)
690 EXTRA_DIST = dolib.c $(am__append_33)
657691
658692 # If we're in standalone mode, build the installable library.
659693 # Otherwise, build the embedded library.
662696 pluginsdir = @HWLOC_PLUGINS_DIR@
663697 plugins_LTLIBRARIES = $(am__append_2) $(am__append_4) $(am__append_6) \
664698 $(am__append_8) $(am__append_10) $(am__append_12) \
665 $(am__append_14)
699 $(am__append_14) $(am__append_16)
666700 plugins_ldflags = -module -avoid-version $(HWLOC_DL_LIBS) $(HWLOC_LTDL_LIBS)
667701
668702 # Sources and ldflags
672706 topology-xml.c topology-xml-nolibxml.c $(am__append_1) \
673707 $(am__append_3) $(am__append_5) $(am__append_7) \
674708 $(am__append_9) $(am__append_11) $(am__append_13) \
675 $(am__append_15) $(am__append_16) $(am__append_17) \
676 $(am__append_18) $(am__append_20) $(am__append_22) \
677 $(am__append_23) $(am__append_24) $(am__append_25) \
678 $(am__append_27)
679 ldflags = $(am__append_19) $(am__append_21) $(am__append_26) \
680 $(am__append_28) $(am__append_29)
709 $(am__append_15) $(am__append_17) $(am__append_18) \
710 $(am__append_19) $(am__append_20) $(am__append_22) \
711 $(am__append_24) $(am__append_25) $(am__append_26) \
712 $(am__append_27) $(am__append_29)
713 ldflags = $(am__append_21) $(am__append_23) $(am__append_28) \
714 $(am__append_30) $(am__append_31)
681715 @HWLOC_HAVE_LIBXML2_TRUE@@HWLOC_XML_LIBXML_BUILD_STATIC_FALSE@hwloc_xml_libxml_la_SOURCES = topology-xml-libxml.c
682 @HWLOC_HAVE_LIBXML2_TRUE@@HWLOC_XML_LIBXML_BUILD_STATIC_FALSE@hwloc_xml_libxml_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_LIBXML2_CFLAGS) -DHWLOC_INSIDE_PLUGIN
683 @HWLOC_HAVE_LIBXML2_TRUE@@HWLOC_XML_LIBXML_BUILD_STATIC_FALSE@hwloc_xml_libxml_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_LIBXML2_LIBS)
716 @HWLOC_HAVE_LIBXML2_TRUE@@HWLOC_XML_LIBXML_BUILD_STATIC_FALSE@hwloc_xml_libxml_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_LIBXML2_CPPFLAGS) $(HWLOC_LIBXML2_CFLAGS) -DHWLOC_INSIDE_PLUGIN
717 @HWLOC_HAVE_LIBXML2_TRUE@@HWLOC_XML_LIBXML_BUILD_STATIC_FALSE@hwloc_xml_libxml_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_LIBXML2_LIBS) $(HWLOC_LIBXML2_LDFLAGS)
684718 @HWLOC_HAVE_PCIACCESS_TRUE@@HWLOC_PCI_BUILD_STATIC_FALSE@hwloc_pci_la_SOURCES = topology-pci.c
685 @HWLOC_HAVE_PCIACCESS_TRUE@@HWLOC_PCI_BUILD_STATIC_FALSE@hwloc_pci_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_PCIACCESS_CFLAGS) -DHWLOC_INSIDE_PLUGIN
686 @HWLOC_HAVE_PCIACCESS_TRUE@@HWLOC_PCI_BUILD_STATIC_FALSE@hwloc_pci_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_PCIACCESS_LIBS)
719 @HWLOC_HAVE_PCIACCESS_TRUE@@HWLOC_PCI_BUILD_STATIC_FALSE@hwloc_pci_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_PCIACCESS_CPPFLAGS) $(HWLOC_PCIACCESS_CFLAGS) -DHWLOC_INSIDE_PLUGIN
720 @HWLOC_HAVE_PCIACCESS_TRUE@@HWLOC_PCI_BUILD_STATIC_FALSE@hwloc_pci_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_PCIACCESS_LIBS) $(HWLOC_PCIACCESS_LDFLAGS)
687721 @HWLOC_HAVE_OPENCL_TRUE@@HWLOC_OPENCL_BUILD_STATIC_FALSE@hwloc_opencl_la_SOURCES = topology-opencl.c
688 @HWLOC_HAVE_OPENCL_TRUE@@HWLOC_OPENCL_BUILD_STATIC_FALSE@hwloc_opencl_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_OPENCL_CFLAGS) -DHWLOC_INSIDE_PLUGIN
722 @HWLOC_HAVE_OPENCL_TRUE@@HWLOC_OPENCL_BUILD_STATIC_FALSE@hwloc_opencl_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_OPENCL_CPPFLAGS) $(HWLOC_OPENCL_CFLAGS) -DHWLOC_INSIDE_PLUGIN
689723 @HWLOC_HAVE_OPENCL_TRUE@@HWLOC_OPENCL_BUILD_STATIC_FALSE@hwloc_opencl_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_OPENCL_LIBS) $(HWLOC_OPENCL_LDFLAGS)
690724 @HWLOC_CUDA_BUILD_STATIC_FALSE@@HWLOC_HAVE_CUDART_TRUE@hwloc_cuda_la_SOURCES = topology-cuda.c
691 @HWLOC_CUDA_BUILD_STATIC_FALSE@@HWLOC_HAVE_CUDART_TRUE@hwloc_cuda_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_CUDA_CFLAGS) -DHWLOC_INSIDE_PLUGIN
692 @HWLOC_CUDA_BUILD_STATIC_FALSE@@HWLOC_HAVE_CUDART_TRUE@hwloc_cuda_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_CUDA_LIBS)
725 @HWLOC_CUDA_BUILD_STATIC_FALSE@@HWLOC_HAVE_CUDART_TRUE@hwloc_cuda_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_CUDART_CPPFLAGS) $(HWLOC_CUDART_CFLAGS) -DHWLOC_INSIDE_PLUGIN
726 @HWLOC_CUDA_BUILD_STATIC_FALSE@@HWLOC_HAVE_CUDART_TRUE@hwloc_cuda_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_CUDART_LIBS) $(HWLOC_CUDART_LDFLAGS)
693727 @HWLOC_HAVE_NVML_TRUE@@HWLOC_NVML_BUILD_STATIC_FALSE@hwloc_nvml_la_SOURCES = topology-nvml.c
694 @HWLOC_HAVE_NVML_TRUE@@HWLOC_NVML_BUILD_STATIC_FALSE@hwloc_nvml_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_NVML_CFLAGS) -DHWLOC_INSIDE_PLUGIN
695 @HWLOC_HAVE_NVML_TRUE@@HWLOC_NVML_BUILD_STATIC_FALSE@hwloc_nvml_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_NVML_LIBS)
728 @HWLOC_HAVE_NVML_TRUE@@HWLOC_NVML_BUILD_STATIC_FALSE@hwloc_nvml_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_NVML_CPPFLAGS) $(HWLOC_NVML_CFLAGS) -DHWLOC_INSIDE_PLUGIN
729 @HWLOC_HAVE_NVML_TRUE@@HWLOC_NVML_BUILD_STATIC_FALSE@hwloc_nvml_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_NVML_LIBS) $(HWLOC_NVML_LDFLAGS)
696730 @HWLOC_HAVE_RSMI_TRUE@@HWLOC_RSMI_BUILD_STATIC_FALSE@hwloc_rsmi_la_SOURCES = topology-rsmi.c
697 @HWLOC_HAVE_RSMI_TRUE@@HWLOC_RSMI_BUILD_STATIC_FALSE@hwloc_rsmi_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_RSMI_CFLAGS) -DHWLOC_INSIDE_PLUGIN
698 @HWLOC_HAVE_RSMI_TRUE@@HWLOC_RSMI_BUILD_STATIC_FALSE@hwloc_rsmi_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_RSMI_LIBS)
731 @HWLOC_HAVE_RSMI_TRUE@@HWLOC_RSMI_BUILD_STATIC_FALSE@hwloc_rsmi_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_RSMI_CPPFLAGS) $(HWLOC_RSMI_CFLAGS) -DHWLOC_INSIDE_PLUGIN
732 @HWLOC_HAVE_RSMI_TRUE@@HWLOC_RSMI_BUILD_STATIC_FALSE@hwloc_rsmi_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_RSMI_LIBS) $(HWLOC_RSMI_LDFLAGS)
733 @HWLOC_HAVE_LEVELZERO_TRUE@@HWLOC_LEVELZERO_BUILD_STATIC_FALSE@hwloc_levelzero_la_SOURCES = topology-levelzero.c
734 @HWLOC_HAVE_LEVELZERO_TRUE@@HWLOC_LEVELZERO_BUILD_STATIC_FALSE@hwloc_levelzero_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_LEVELZERO_CFLAGS) -DHWLOC_INSIDE_PLUGIN
735 @HWLOC_HAVE_LEVELZERO_TRUE@@HWLOC_LEVELZERO_BUILD_STATIC_FALSE@hwloc_levelzero_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_LEVELZERO_LIBS)
699736 @HWLOC_GL_BUILD_STATIC_FALSE@@HWLOC_HAVE_GL_TRUE@hwloc_gl_la_SOURCES = topology-gl.c
700 @HWLOC_GL_BUILD_STATIC_FALSE@@HWLOC_HAVE_GL_TRUE@hwloc_gl_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_GL_CFLAGS) -DHWLOC_INSIDE_PLUGIN
701 @HWLOC_GL_BUILD_STATIC_FALSE@@HWLOC_HAVE_GL_TRUE@hwloc_gl_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_GL_LIBS)
737 @HWLOC_GL_BUILD_STATIC_FALSE@@HWLOC_HAVE_GL_TRUE@hwloc_gl_la_CFLAGS = $(AM_CFLAGS) $(HWLOC_GL_CPPFLAGS) $(HWLOC_GL_CFLAGS) -DHWLOC_INSIDE_PLUGIN
738 @HWLOC_GL_BUILD_STATIC_FALSE@@HWLOC_HAVE_GL_TRUE@hwloc_gl_la_LDFLAGS = $(plugins_ldflags) $(HWLOC_GL_LIBS) $(HWLOC_GL_LDFLAGS)
702739
703740 # Windows specific rules
704741 @HWLOC_HAVE_WINDOWS_TRUE@LC_MESSAGES = C
709746 libhwloc_la_SOURCES = $(sources)
710747 libhwloc_la_LDFLAGS = $(ldflags) -version-info $(libhwloc_so_version) \
711748 $(HWLOC_LIBS) $(HWLOC_DL_LIBS) $(HWLOC_LTDL_LIBS) \
712 $(HWLOC_LDFLAGS) $(am__append_30)
749 $(HWLOC_LDFLAGS) $(am__append_32)
713750
714751 # Embedded library (note the lack of a .so version number -- that
715752 # intentionally only appears in the installable library). Also note
859896 hwloc_gl.la: $(hwloc_gl_la_OBJECTS) $(hwloc_gl_la_DEPENDENCIES) $(EXTRA_hwloc_gl_la_DEPENDENCIES)
860897 $(AM_V_CCLD)$(hwloc_gl_la_LINK) $(am_hwloc_gl_la_rpath) $(hwloc_gl_la_OBJECTS) $(hwloc_gl_la_LIBADD) $(LIBS)
861898
899 hwloc_levelzero.la: $(hwloc_levelzero_la_OBJECTS) $(hwloc_levelzero_la_DEPENDENCIES) $(EXTRA_hwloc_levelzero_la_DEPENDENCIES)
900 $(AM_V_CCLD)$(hwloc_levelzero_la_LINK) $(am_hwloc_levelzero_la_rpath) $(hwloc_levelzero_la_OBJECTS) $(hwloc_levelzero_la_LIBADD) $(LIBS)
901
862902 hwloc_nvml.la: $(hwloc_nvml_la_OBJECTS) $(hwloc_nvml_la_DEPENDENCIES) $(EXTRA_hwloc_nvml_la_DEPENDENCIES)
863903 $(AM_V_CCLD)$(hwloc_nvml_la_LINK) $(am_hwloc_nvml_la_rpath) $(hwloc_nvml_la_OBJECTS) $(hwloc_nvml_la_LIBADD) $(LIBS)
864904
895935 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/distances.Plo@am__quote@ # am--include-marker
896936 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hwloc_cuda_la-topology-cuda.Plo@am__quote@ # am--include-marker
897937 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hwloc_gl_la-topology-gl.Plo@am__quote@ # am--include-marker
938 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hwloc_levelzero_la-topology-levelzero.Plo@am__quote@ # am--include-marker
898939 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hwloc_nvml_la-topology-nvml.Plo@am__quote@ # am--include-marker
899940 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hwloc_opencl_la-topology-opencl.Plo@am__quote@ # am--include-marker
900941 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hwloc_pci_la-topology-pci.Plo@am__quote@ # am--include-marker
913954 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/topology-gl.Plo@am__quote@ # am--include-marker
914955 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/topology-hardwired.Plo@am__quote@ # am--include-marker
915956 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/topology-hpux.Plo@am__quote@ # am--include-marker
957 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/topology-levelzero.Plo@am__quote@ # am--include-marker
916958 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/topology-linux.Plo@am__quote@ # am--include-marker
917959 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/topology-netbsd.Plo@am__quote@ # am--include-marker
918960 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/topology-noos.Plo@am__quote@ # am--include-marker
9741016 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='topology-gl.c' object='hwloc_gl_la-topology-gl.lo' libtool=yes @AMDEPBACKSLASH@
9751017 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
9761018 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hwloc_gl_la_CFLAGS) $(CFLAGS) -c -o hwloc_gl_la-topology-gl.lo `test -f 'topology-gl.c' || echo '$(srcdir)/'`topology-gl.c
1019
1020 hwloc_levelzero_la-topology-levelzero.lo: topology-levelzero.c
1021 @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hwloc_levelzero_la_CFLAGS) $(CFLAGS) -MT hwloc_levelzero_la-topology-levelzero.lo -MD -MP -MF $(DEPDIR)/hwloc_levelzero_la-topology-levelzero.Tpo -c -o hwloc_levelzero_la-topology-levelzero.lo `test -f 'topology-levelzero.c' || echo '$(srcdir)/'`topology-levelzero.c
1022 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/hwloc_levelzero_la-topology-levelzero.Tpo $(DEPDIR)/hwloc_levelzero_la-topology-levelzero.Plo
1023 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='topology-levelzero.c' object='hwloc_levelzero_la-topology-levelzero.lo' libtool=yes @AMDEPBACKSLASH@
1024 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1025 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hwloc_levelzero_la_CFLAGS) $(CFLAGS) -c -o hwloc_levelzero_la-topology-levelzero.lo `test -f 'topology-levelzero.c' || echo '$(srcdir)/'`topology-levelzero.c
9771026
9781027 hwloc_nvml_la-topology-nvml.lo: topology-nvml.c
9791028 @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(hwloc_nvml_la_CFLAGS) $(CFLAGS) -MT hwloc_nvml_la-topology-nvml.lo -MD -MP -MF $(DEPDIR)/hwloc_nvml_la-topology-nvml.Tpo -c -o hwloc_nvml_la-topology-nvml.lo `test -f 'topology-nvml.c' || echo '$(srcdir)/'`topology-nvml.c
11831232 -rm -f ./$(DEPDIR)/distances.Plo
11841233 -rm -f ./$(DEPDIR)/hwloc_cuda_la-topology-cuda.Plo
11851234 -rm -f ./$(DEPDIR)/hwloc_gl_la-topology-gl.Plo
1235 -rm -f ./$(DEPDIR)/hwloc_levelzero_la-topology-levelzero.Plo
11861236 -rm -f ./$(DEPDIR)/hwloc_nvml_la-topology-nvml.Plo
11871237 -rm -f ./$(DEPDIR)/hwloc_opencl_la-topology-opencl.Plo
11881238 -rm -f ./$(DEPDIR)/hwloc_pci_la-topology-pci.Plo
12011251 -rm -f ./$(DEPDIR)/topology-gl.Plo
12021252 -rm -f ./$(DEPDIR)/topology-hardwired.Plo
12031253 -rm -f ./$(DEPDIR)/topology-hpux.Plo
1254 -rm -f ./$(DEPDIR)/topology-levelzero.Plo
12041255 -rm -f ./$(DEPDIR)/topology-linux.Plo
12051256 -rm -f ./$(DEPDIR)/topology-netbsd.Plo
12061257 -rm -f ./$(DEPDIR)/topology-noos.Plo
12731324 -rm -f ./$(DEPDIR)/distances.Plo
12741325 -rm -f ./$(DEPDIR)/hwloc_cuda_la-topology-cuda.Plo
12751326 -rm -f ./$(DEPDIR)/hwloc_gl_la-topology-gl.Plo
1327 -rm -f ./$(DEPDIR)/hwloc_levelzero_la-topology-levelzero.Plo
12761328 -rm -f ./$(DEPDIR)/hwloc_nvml_la-topology-nvml.Plo
12771329 -rm -f ./$(DEPDIR)/hwloc_opencl_la-topology-opencl.Plo
12781330 -rm -f ./$(DEPDIR)/hwloc_pci_la-topology-pci.Plo
12911343 -rm -f ./$(DEPDIR)/topology-gl.Plo
12921344 -rm -f ./$(DEPDIR)/topology-hardwired.Plo
12931345 -rm -f ./$(DEPDIR)/topology-hpux.Plo
1346 -rm -f ./$(DEPDIR)/topology-levelzero.Plo
12941347 -rm -f ./$(DEPDIR)/topology-linux.Plo
12951348 -rm -f ./$(DEPDIR)/topology-netbsd.Plo
12961349 -rm -f ./$(DEPDIR)/topology-noos.Plo
00 /*
1 * Copyright © 2009-2020 Inria. All rights reserved.
1 * Copyright © 2009-2021 Inria. All rights reserved.
22 * Copyright © 2012 Université Bordeaux
33 * See COPYING in top-level directory.
44 */
123123 *colon = '\0';
124124
125125 if (hwloc_plugins_verbose)
126 fprintf(stderr, " Looking under %s\n", path);
126 fprintf(stderr, "hwloc: Looking under %s\n", path);
127127
128128 dir = opendir(path);
129129 if (!dir)
197197 char *componentsymbolname;
198198
199199 if (hwloc_plugins_verbose)
200 fprintf(stderr, "Plugin dlforeach found `%s'\n", filename);
200 fprintf(stderr, "hwloc: Plugin dlforeach found `%s'\n", filename);
201201
202202 basename = strrchr(filename, '/');
203203 if (!basename)
207207
208208 if (hwloc_plugins_blacklist && strstr(hwloc_plugins_blacklist, basename)) {
209209 if (hwloc_plugins_verbose)
210 fprintf(stderr, "Plugin `%s' is blacklisted in the environment\n", basename);
210 fprintf(stderr, "hwloc: Plugin `%s' is blacklisted in the environment\n", basename);
211211 goto out;
212212 }
213213
215215 handle = hwloc_dlopenext(filename);
216216 if (!handle) {
217217 if (hwloc_plugins_verbose)
218 fprintf(stderr, "Failed to load plugin: %s\n", hwloc_dlerror());
218 fprintf(stderr, "hwloc: Failed to load plugin: %s\n", hwloc_dlerror());
219219 goto out;
220220 }
221221
222222 componentsymbolname = malloc(strlen(basename)+10+1);
223223 if (!componentsymbolname) {
224224 if (hwloc_plugins_verbose)
225 fprintf(stderr, "Failed to allocation component `%s' symbol\n",
225 fprintf(stderr, "hwloc: Failed to allocation component `%s' symbol\n",
226226 basename);
227227 goto out_with_handle;
228228 }
230230 component = hwloc_dlsym(handle, componentsymbolname);
231231 if (!component) {
232232 if (hwloc_plugins_verbose)
233 fprintf(stderr, "Failed to find component symbol `%s'\n",
233 fprintf(stderr, "hwloc: Failed to find component symbol `%s'\n",
234234 componentsymbolname);
235235 free(componentsymbolname);
236236 goto out_with_handle;
237237 }
238238 if (component->abi != HWLOC_COMPONENT_ABI) {
239239 if (hwloc_plugins_verbose)
240 fprintf(stderr, "Plugin symbol ABI %u instead of %d\n",
240 fprintf(stderr, "hwloc: Plugin symbol ABI %u instead of %d\n",
241241 component->abi, HWLOC_COMPONENT_ABI);
242242 free(componentsymbolname);
243243 goto out_with_handle;
244244 }
245245 if (hwloc_plugins_verbose)
246 fprintf(stderr, "Plugin contains expected symbol `%s'\n",
246 fprintf(stderr, "hwloc: Plugin contains expected symbol `%s'\n",
247247 componentsymbolname);
248248 free(componentsymbolname);
249249
250250 if (HWLOC_COMPONENT_TYPE_DISC == component->type) {
251251 if (strncmp(basename, "hwloc_", 6)) {
252252 if (hwloc_plugins_verbose)
253 fprintf(stderr, "Plugin name `%s' doesn't match its type DISCOVERY\n", basename);
253 fprintf(stderr, "hwloc: Plugin name `%s' doesn't match its type DISCOVERY\n", basename);
254254 goto out_with_handle;
255255 }
256256 } else if (HWLOC_COMPONENT_TYPE_XML == component->type) {
257257 if (strncmp(basename, "hwloc_xml_", 10)) {
258258 if (hwloc_plugins_verbose)
259 fprintf(stderr, "Plugin name `%s' doesn't match its type XML\n", basename);
259 fprintf(stderr, "hwloc: Plugin name `%s' doesn't match its type XML\n", basename);
260260 goto out_with_handle;
261261 }
262262 } else {
263263 if (hwloc_plugins_verbose)
264 fprintf(stderr, "Plugin name `%s' has invalid type %u\n",
264 fprintf(stderr, "hwloc: Plugin name `%s' has invalid type %u\n",
265265 basename, (unsigned) component->type);
266266 goto out_with_handle;
267267 }
276276 desc->handle = handle;
277277 desc->next = NULL;
278278 if (hwloc_plugins_verbose)
279 fprintf(stderr, "Plugin descriptor `%s' ready\n", basename);
279 fprintf(stderr, "hwloc: Plugin descriptor `%s' ready\n", basename);
280280
281281 /* append to the list */
282282 prevdesc = &hwloc_plugins;
284284 prevdesc = &((*prevdesc)->next);
285285 *prevdesc = desc;
286286 if (hwloc_plugins_verbose)
287 fprintf(stderr, "Plugin descriptor `%s' queued\n", basename);
287 fprintf(stderr, "hwloc: Plugin descriptor `%s' queued\n", basename);
288288 return 0;
289289
290290 out_with_handle:
299299 struct hwloc__plugin_desc *desc, *next;
300300
301301 if (hwloc_plugins_verbose)
302 fprintf(stderr, "Closing all plugins\n");
302 fprintf(stderr, "hwloc: Closing all plugins\n");
303303
304304 desc = hwloc_plugins;
305305 while (desc) {
339339 hwloc_plugins = NULL;
340340
341341 if (hwloc_plugins_verbose)
342 fprintf(stderr, "Starting plugin dlforeach in %s\n", path);
342 fprintf(stderr, "hwloc: Starting plugin dlforeach in %s\n", path);
343343 err = hwloc_dlforeachfile(path, hwloc__dlforeach_cb, NULL);
344344 if (err)
345345 goto out_with_init;
363363 /* check that the component name is valid */
364364 if (!strcmp(component->name, HWLOC_COMPONENT_STOP_NAME)) {
365365 if (hwloc_components_verbose)
366 fprintf(stderr, "Cannot register discovery component with reserved name `" HWLOC_COMPONENT_STOP_NAME "'\n");
366 fprintf(stderr, "hwloc: Cannot register discovery component with reserved name `" HWLOC_COMPONENT_STOP_NAME "'\n");
367367 return -1;
368368 }
369369 if (strchr(component->name, HWLOC_COMPONENT_EXCLUDE_CHAR)
370370 || strchr(component->name, HWLOC_COMPONENT_PHASESEP_CHAR)
371371 || strcspn(component->name, HWLOC_COMPONENT_SEPS) != strlen(component->name)) {
372372 if (hwloc_components_verbose)
373 fprintf(stderr, "Cannot register discovery component with name `%s' containing reserved characters `%c" HWLOC_COMPONENT_SEPS "'\n",
373 fprintf(stderr, "hwloc: Cannot register discovery component with name `%s' containing reserved characters `%c" HWLOC_COMPONENT_SEPS "'\n",
374374 component->name, HWLOC_COMPONENT_EXCLUDE_CHAR);
375375 return -1;
376376 }
385385 |HWLOC_DISC_PHASE_MISC
386386 |HWLOC_DISC_PHASE_ANNOTATE
387387 |HWLOC_DISC_PHASE_TWEAK))) {
388 fprintf(stderr, "Cannot register discovery component `%s' with invalid phases 0x%x\n",
389 component->name, component->phases);
388 if (hwloc_hide_errors() < 2)
389 fprintf(stderr, "hwloc: Cannot register discovery component `%s' with invalid phases 0x%x\n",
390 component->name, component->phases);
390391 return -1;
391392 }
392393
397398 if ((*prev)->priority < component->priority) {
398399 /* drop the existing component */
399400 if (hwloc_components_verbose)
400 fprintf(stderr, "Dropping previously registered discovery component `%s', priority %u lower than new one %u\n",
401 fprintf(stderr, "hwloc: Dropping previously registered discovery component `%s', priority %u lower than new one %u\n",
401402 (*prev)->name, (*prev)->priority, component->priority);
402403 *prev = (*prev)->next;
403404 } else {
404405 /* drop the new one */
405406 if (hwloc_components_verbose)
406 fprintf(stderr, "Ignoring new discovery component `%s', priority %u lower than previously registered one %u\n",
407 fprintf(stderr, "hwloc: Ignoring new discovery component `%s', priority %u lower than previously registered one %u\n",
407408 component->name, component->priority, (*prev)->priority);
408409 return -1;
409410 }
411412 prev = &((*prev)->next);
412413 }
413414 if (hwloc_components_verbose)
414 fprintf(stderr, "Registered discovery component `%s' phases 0x%x with priority %u (%s%s)\n",
415 fprintf(stderr, "hwloc: Registered discovery component `%s' phases 0x%x with priority %u (%s%s)\n",
415416 component->name, component->phases, component->priority,
416417 filename ? "from plugin " : "statically build", filename ? filename : "");
417418
474475 /* hwloc_static_components is created by configure in static-components.h */
475476 for(i=0; NULL != hwloc_static_components[i]; i++) {
476477 if (hwloc_static_components[i]->flags) {
477 fprintf(stderr, "Ignoring static component with invalid flags %lx\n",
478 hwloc_static_components[i]->flags);
478 if (hwloc_hide_errors() < 2)
479 fprintf(stderr, "hwloc: Ignoring static component with invalid flags %lx\n",
480 hwloc_static_components[i]->flags);
479481 continue;
480482 }
481483
482484 /* initialize the component */
483485 if (hwloc_static_components[i]->init && hwloc_static_components[i]->init(0) < 0) {
484486 if (hwloc_components_verbose)
485 fprintf(stderr, "Ignoring static component, failed to initialize\n");
487 fprintf(stderr, "hwloc: Ignoring static component, failed to initialize\n");
486488 continue;
487489 }
488490 /* queue ->finalize() callback if any */
502504 #ifdef HWLOC_HAVE_PLUGINS
503505 for(desc = hwloc_plugins; NULL != desc; desc = desc->next) {
504506 if (desc->component->flags) {
505 fprintf(stderr, "Ignoring plugin `%s' component with invalid flags %lx\n",
506 desc->name, desc->component->flags);
507 if (hwloc_hide_errors() < 2)
508 fprintf(stderr, "hwloc: Ignoring plugin `%s' component with invalid flags %lx\n",
509 desc->name, desc->component->flags);
507510 continue;
508511 }
509512
510513 /* initialize the component */
511514 if (desc->component->init && desc->component->init(0) < 0) {
512515 if (hwloc_components_verbose)
513 fprintf(stderr, "Ignoring plugin `%s', failed to initialize\n", desc->name);
516 fprintf(stderr, "hwloc: Ignoring plugin `%s', failed to initialize\n", desc->name);
514517 continue;
515518 }
516519 /* queue ->finalize() callback if any */
607610 /* replace linuxpci and linuxio with linux (with IO phases)
608611 * for backward compatibility with pre-v2.0 and v2.0 respectively */
609612 if (hwloc_components_verbose)
610 fprintf(stderr, "Replacing deprecated component `%s' with `linux' IO phases in blacklisting\n", name);
613 fprintf(stderr, "hwloc: Replacing deprecated component `%s' with `linux' IO phases in blacklisting\n", name);
611614 comp = hwloc_disc_component_find("linux", NULL);
612615 phases = HWLOC_DISC_PHASE_PCI | HWLOC_DISC_PHASE_IO | HWLOC_DISC_PHASE_MISC | HWLOC_DISC_PHASE_ANNOTATE;
613616
623626 }
624627
625628 if (hwloc_components_verbose)
626 fprintf(stderr, "Blacklisting component `%s` phases 0x%x\n", comp->name, phases);
629 fprintf(stderr, "hwloc: Blacklisting component `%s` phases 0x%x\n", comp->name, phases);
627630
628631 for(i=0; i<topology->nr_blacklisted_components; i++) {
629632 if (topology->blacklisted_components[i].component == comp) {
726729 if (hwloc_components_verbose)
727730 /* do not warn if envvar_forced since system-wide HWLOC_COMPONENTS must be silently ignored after set_xml() etc.
728731 */
729 fprintf(stderr, "Excluding discovery component `%s' phases 0x%x, conflicts with excludes 0x%x\n",
732 fprintf(stderr, "hwloc: Excluding discovery component `%s' phases 0x%x, conflicts with excludes 0x%x\n",
730733 comp->name, comp->phases, topology->backend_excluded_phases);
731734 return -1;
732735 }
734737 backend = comp->instantiate(topology, comp, topology->backend_excluded_phases | blacklisted_phases,
735738 NULL, NULL, NULL);
736739 if (!backend) {
737 if (hwloc_components_verbose || envvar_forced)
738 fprintf(stderr, "Failed to instantiate discovery component `%s'\n", comp->name);
740 if (hwloc_components_verbose || (envvar_forced && hwloc_hide_errors() < 2))
741 fprintf(stderr, "hwloc: Failed to instantiate discovery component `%s'\n", comp->name);
739742 return -1;
740743 }
741744
816819 name = curenv;
817820 if (!strcmp(name, "linuxpci") || !strcmp(name, "linuxio")) {
818821 if (hwloc_components_verbose)
819 fprintf(stderr, "Replacing deprecated component `%s' with `linux' in envvar forcing\n", name);
822 fprintf(stderr, "hwloc: Replacing deprecated component `%s' with `linux' in envvar forcing\n", name);
820823 name = "linux";
821824 }
822825
831834 if (comp->phases & ~blacklisted_phases)
832835 hwloc_disc_component_try_enable(topology, comp, 1 /* envvar forced */, blacklisted_phases);
833836 } else {
834 fprintf(stderr, "Cannot find discovery component `%s'\n", name);
837 if (hwloc_hide_errors() < 2)
838 fprintf(stderr, "hwloc: Cannot find discovery component `%s'\n", name);
835839 }
836840
837841 /* restore chars (the second loop below needs env to be unmodified) */
863867
864868 if (!(comp->phases & ~blacklisted_phases)) {
865869 if (hwloc_components_verbose)
866 fprintf(stderr, "Excluding blacklisted discovery component `%s' phases 0x%x\n",
870 fprintf(stderr, "hwloc: Excluding blacklisted discovery component `%s' phases 0x%x\n",
867871 comp->name, comp->phases);
868872 goto nextcomp;
869873 }
878882 /* print a summary */
879883 int first = 1;
880884 backend = topology->backends;
881 fprintf(stderr, "Final list of enabled discovery components: ");
885 fprintf(stderr, "hwloc: Final list of enabled discovery components: ");
882886 while (backend != NULL) {
883887 fprintf(stderr, "%s%s(0x%x)", first ? "" : ",", backend->component->name, backend->phases);
884888 backend = backend->next;
934938 /* filter-out component phases that are excluded */
935939 backend->phases = component->phases & ~topology->backend_excluded_phases;
936940 if (backend->phases != component->phases && hwloc_components_verbose)
937 fprintf(stderr, "Trying discovery component `%s' with phases 0x%x instead of 0x%x\n",
941 fprintf(stderr, "hwloc: Trying discovery component `%s' with phases 0x%x instead of 0x%x\n",
938942 component->name, backend->phases, component->phases);
939943 backend->flags = 0;
940944 backend->discover = NULL;
962966
963967 /* check backend flags */
964968 if (backend->flags) {
965 fprintf(stderr, "Cannot enable discovery component `%s' phases 0x%x with unknown flags %lx\n",
966 backend->component->name, backend->component->phases, backend->flags);
969 if (hwloc_hide_errors() < 2)
970 fprintf(stderr, "hwloc: Cannot enable discovery component `%s' phases 0x%x with unknown flags %lx\n",
971 backend->component->name, backend->component->phases, backend->flags);
967972 return -1;
968973 }
969974
972977 while (NULL != *pprev) {
973978 if ((*pprev)->component == backend->component) {
974979 if (hwloc_components_verbose)
975 fprintf(stderr, "Cannot enable discovery component `%s' phases 0x%x twice\n",
980 fprintf(stderr, "hwloc: Cannot enable discovery component `%s' phases 0x%x twice\n",
976981 backend->component->name, backend->component->phases);
977982 hwloc_backend_disable(backend);
978983 errno = EBUSY;
982987 }
983988
984989 if (hwloc_components_verbose)
985 fprintf(stderr, "Enabling discovery component `%s' with phases 0x%x (among 0x%x)\n",
990 fprintf(stderr, "hwloc: Enabling discovery component `%s' with phases 0x%x (among 0x%x)\n",
986991 backend->component->name, backend->phases, backend->component->phases);
987992
988993 /* enqueue at the end */
10661071 while (NULL != (backend = topology->backends)) {
10671072 struct hwloc_backend *next = backend->next;
10681073 if (hwloc_components_verbose)
1069 fprintf(stderr, "Disabling discovery component `%s'\n",
1074 fprintf(stderr, "hwloc: Disabling discovery component `%s'\n",
10701075 backend->component->name);
10711076 hwloc_backend_disable(backend);
10721077 topology->backends = next;
342342 HWLOC_CPUKINDS_RANKING_DEFAULT, /* forced + frequency on ARM, forced + coretype_frequency otherwise */
343343 HWLOC_CPUKINDS_RANKING_NO_FORCED_EFFICIENCY, /* default without forced */
344344 HWLOC_CPUKINDS_RANKING_FORCED_EFFICIENCY,
345 HWLOC_CPUKINDS_RANKING_CORETYPE_FREQUENCY,
345 HWLOC_CPUKINDS_RANKING_CORETYPE_FREQUENCY, /* either coretype or frequency or both */
346 HWLOC_CPUKINDS_RANKING_CORETYPE_FREQUENCY_STRICT, /* both coretype and frequency are required */
346347 HWLOC_CPUKINDS_RANKING_CORETYPE,
347348 HWLOC_CPUKINDS_RANKING_FREQUENCY,
348349 HWLOC_CPUKINDS_RANKING_FREQUENCY_MAX,
357358 {
358359 unsigned i;
359360
360 if (HWLOC_CPUKINDS_RANKING_CORETYPE_FREQUENCY == heuristics) {
361 hwloc_debug("Trying to rank cpukinds by coretype+frequency...\n");
362 /* we need intel_core_type + (base or max freq) for all kinds */
361 if (HWLOC_CPUKINDS_RANKING_CORETYPE_FREQUENCY_STRICT == heuristics) {
362 hwloc_debug("Trying to rank cpukinds by coretype+frequency_strict...\n");
363 /* we need intel_core_type AND (base or max freq) for all kinds */
363364 if (!summary->have_intel_core_type
364365 || (!summary->have_max_freq && !summary->have_base_freq))
366 return -1;
367 /* rank first by coretype (Core>>Atom) then by frequency, base if available, max otherwise */
368 for(i=0; i<topology->nr_cpukinds; i++) {
369 struct hwloc_internal_cpukind_s *kind = &topology->cpukinds[i];
370 if (summary->have_base_freq)
371 kind->ranking_value = (summary->summaries[i].intel_core_type << 20) + summary->summaries[i].base_freq;
372 else
373 kind->ranking_value = (summary->summaries[i].intel_core_type << 20) + summary->summaries[i].max_freq;
374 }
375
376 } else if (HWLOC_CPUKINDS_RANKING_CORETYPE_FREQUENCY == heuristics) {
377 hwloc_debug("Trying to rank cpukinds by coretype+frequency...\n");
378 /* we need intel_core_type OR (base or max freq) for all kinds */
379 if (!summary->have_intel_core_type
380 && (!summary->have_max_freq && !summary->have_base_freq))
365381 return -1;
366382 /* rank first by coretype (Core>>Atom) then by frequency, base if available, max otherwise */
367383 for(i=0; i<topology->nr_cpukinds; i++) {
468484 heuristics = HWLOC_CPUKINDS_RANKING_NONE;
469485 else if (!strcmp(env, "coretype+frequency"))
470486 heuristics = HWLOC_CPUKINDS_RANKING_CORETYPE_FREQUENCY;
487 else if (!strcmp(env, "coretype+frequency_strict"))
488 heuristics = HWLOC_CPUKINDS_RANKING_CORETYPE_FREQUENCY_STRICT;
471489 else if (!strcmp(env, "coretype"))
472490 heuristics = HWLOC_CPUKINDS_RANKING_CORETYPE;
473491 else if (!strcmp(env, "frequency"))
480498 heuristics = HWLOC_CPUKINDS_RANKING_FORCED_EFFICIENCY;
481499 else if (!strcmp(env, "no_forced_efficiency"))
482500 heuristics = HWLOC_CPUKINDS_RANKING_NO_FORCED_EFFICIENCY;
483 else if (!hwloc_hide_errors())
484 fprintf(stderr, "Failed to recognize HWLOC_CPUKINDS_RANKING value %s\n", env);
501 else if (hwloc_hide_errors() < 2)
502 fprintf(stderr, "hwloc: Failed to recognize HWLOC_CPUKINDS_RANKING value %s\n", env);
485503 }
486504
487505 if (heuristics == HWLOC_CPUKINDS_RANKING_DEFAULT
488506 || heuristics == HWLOC_CPUKINDS_RANKING_NO_FORCED_EFFICIENCY) {
489507 /* default is forced_efficiency first */
490508 struct hwloc_cpukinds_info_summary summary;
491 enum hwloc_cpukinds_ranking subheuristics;
492 const char *arch;
493509
494510 if (heuristics == HWLOC_CPUKINDS_RANKING_DEFAULT)
495511 hwloc_debug("Using default ranking strategy...\n");
507523 goto failed;
508524 hwloc__cpukinds_summarize_info(topology, &summary);
509525
510 arch = hwloc_obj_get_info_by_name(topology->levels[0][0], "Architecture");
511 /* TODO: rather coretype_frequency only on x86/Intel? */
512 if (arch && (!strncmp(arch, "arm", 3) || !strncmp(arch, "aarch", 5)))
513 /* then frequency on ARM */
514 subheuristics = HWLOC_CPUKINDS_RANKING_FREQUENCY;
515 else
516 /* or coretype+frequency otherwise */
517 subheuristics = HWLOC_CPUKINDS_RANKING_CORETYPE_FREQUENCY;
518
519 err = hwloc__cpukinds_try_rank_by_info(topology, subheuristics, &summary);
526 err = hwloc__cpukinds_try_rank_by_info(topology, HWLOC_CPUKINDS_RANKING_CORETYPE_FREQUENCY, &summary);
520527 free(summary.summaries);
521528 if (!err)
522529 goto ready;
00 /*
1 * Copyright © 2010-2020 Inria. All rights reserved.
1 * Copyright © 2010-2021 Inria. All rights reserved.
22 * Copyright © 2011-2012 Université Bordeaux
33 * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
44 * See COPYING in top-level directory.
1515
1616 static struct hwloc_internal_distances_s *
1717 hwloc__internal_distances_from_public(hwloc_topology_t topology, struct hwloc_distances_s *distances);
18
19 static void
20 hwloc__groups_by_distances(struct hwloc_topology *topology, unsigned nbobjs, struct hwloc_obj **objs, uint64_t *values, unsigned long kind, unsigned nbaccuracies, float *accuracies, int needcheck);
21
22 static void
23 hwloc_internal_distances_restrict(hwloc_obj_t *objs,
24 uint64_t *indexes,
25 hwloc_obj_type_t *different_types,
26 uint64_t *values,
27 unsigned nbobjs, unsigned disappeared);
28
29 static void
30 hwloc_internal_distances_print_matrix(struct hwloc_internal_distances_s *dist)
31 {
32 unsigned nbobjs = dist->nbobjs;
33 hwloc_obj_t *objs = dist->objs;
34 hwloc_uint64_t *values = dist->values;
35 int gp = !HWLOC_DIST_TYPE_USE_OS_INDEX(dist->unique_type);
36 unsigned i, j;
37
38 fprintf(stderr, "%s", gp ? "gp_index" : "os_index");
39 for(j=0; j<nbobjs; j++)
40 fprintf(stderr, " % 5d", (int)(gp ? objs[j]->gp_index : objs[j]->os_index));
41 fprintf(stderr, "\n");
42 for(i=0; i<nbobjs; i++) {
43 fprintf(stderr, " % 5d", (int)(gp ? objs[i]->gp_index : objs[i]->os_index));
44 for(j=0; j<nbobjs; j++)
45 fprintf(stderr, " % 5lld", (long long) values[i*nbobjs + j]);
46 fprintf(stderr, "\n");
47 }
48 }
1849
1950 /******************************************************
2051 * Global init, prepare, destroy, dup
243274 return 0;
244275 }
245276
246 /******************************************************
247 * Add distances to the topology
277 /*********************************************************
278 * Backend functions for adding distances to the topology
248279 */
249280
281 /* cancel a distances handle. only needed internally for now */
250282 static void
251 hwloc__groups_by_distances(struct hwloc_topology *topology, unsigned nbobjs, struct hwloc_obj **objs, uint64_t *values, unsigned long kind, unsigned nbaccuracies, float *accuracies, int needcheck);
252
253 /* insert a distance matrix in the topology.
254 * the caller gives us the distances and objs pointers, we'll free them later.
283 hwloc_backend_distances_add__cancel(struct hwloc_internal_distances_s *dist)
284 {
285 /* everything is set to NULL in hwloc_backend_distances_add_create() */
286 free(dist->name);
287 free(dist->indexes);
288 free(dist->objs);
289 free(dist->different_types);
290 free(dist->values);
291 free(dist);
292 }
293
294 /* prepare a distances handle for later commit in the topology.
295 * we duplicate the caller's name.
255296 */
256 static int
257 hwloc_internal_distances__add(hwloc_topology_t topology, const char *name,
258 hwloc_obj_type_t unique_type, hwloc_obj_type_t *different_types,
259 unsigned nbobjs, hwloc_obj_t *objs, uint64_t *indexes, uint64_t *values,
260 unsigned long kind, unsigned iflags)
297 hwloc_backend_distances_add_handle_t
298 hwloc_backend_distances_add_create(hwloc_topology_t topology,
299 const char *name, unsigned long kind, unsigned long flags)
261300 {
262301 struct hwloc_internal_distances_s *dist;
263302
264 if (different_types) {
265 kind |= HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES; /* the user isn't forced to give it */
266 } else if (kind & HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES) {
303 if (flags) {
267304 errno = EINVAL;
268305 goto err;
269306 }
272309 if (!dist)
273310 goto err;
274311
275 if (name)
312 if (name) {
276313 dist->name = strdup(name); /* ignore failure */
277
278 dist->unique_type = unique_type;
279 dist->different_types = different_types;
280 dist->nbobjs = nbobjs;
314 if (!dist->name)
315 goto err_with_dist;
316 }
317
281318 dist->kind = kind;
282 dist->iflags = iflags;
283
284 assert(!!(iflags & HWLOC_INTERNAL_DIST_FLAG_OBJS_VALID) == !!objs);
285
286 if (!objs) {
287 assert(indexes);
288 /* we only have indexes, we'll refresh objs from there */
289 dist->indexes = indexes;
290 dist->objs = calloc(nbobjs, sizeof(hwloc_obj_t));
291 if (!dist->objs)
292 goto err_with_dist;
293
294 } else {
295 unsigned i;
296 assert(!indexes);
297 /* we only have objs, generate the indexes arrays so that we can refresh objs later */
298 dist->objs = objs;
299 dist->indexes = malloc(nbobjs * sizeof(*dist->indexes));
300 if (!dist->indexes)
301 goto err_with_dist;
302 if (HWLOC_DIST_TYPE_USE_OS_INDEX(dist->unique_type)) {
303 for(i=0; i<nbobjs; i++)
304 dist->indexes[i] = objs[i]->os_index;
305 } else {
306 for(i=0; i<nbobjs; i++)
307 dist->indexes[i] = objs[i]->gp_index;
308 }
309 }
310
311 dist->values = values;
319 dist->iflags = HWLOC_INTERNAL_DIST_FLAG_NOT_COMMITTED;
320
321 dist->unique_type = HWLOC_OBJ_TYPE_NONE;
322 dist->different_types = NULL;
323 dist->nbobjs = 0;
324 dist->indexes = NULL;
325 dist->objs = NULL;
326 dist->values = NULL;
312327
313328 dist->id = topology->next_dist_id++;
314
315 if (topology->last_dist)
316 topology->last_dist->next = dist;
317 else
318 topology->first_dist = dist;
319 dist->prev = topology->last_dist;
320 dist->next = NULL;
321 topology->last_dist = dist;
322 return 0;
329 return dist;
323330
324331 err_with_dist:
325 if (name)
326 free(dist->name);
327 free(dist);
332 hwloc_backend_distances_add__cancel(dist);
328333 err:
329 free(different_types);
330 free(objs);
331 free(indexes);
332 free(values);
333 return -1;
334 }
335
336 int hwloc_internal_distances_add_by_index(hwloc_topology_t topology, const char *name,
337 hwloc_obj_type_t unique_type, hwloc_obj_type_t *different_types, unsigned nbobjs, uint64_t *indexes, uint64_t *values,
338 unsigned long kind, unsigned long flags)
339 {
340 unsigned iflags = 0; /* objs not valid */
341
342 if (nbobjs < 2) {
334 return NULL;
335 }
336
337 /* attach objects and values to a distances handle.
338 * on success, objs and values arrays are attached and will be freed with the distances.
339 * on failure, the handle is freed.
340 */
341 int
342 hwloc_backend_distances_add_values(hwloc_topology_t topology __hwloc_attribute_unused,
343 hwloc_backend_distances_add_handle_t handle,
344 unsigned nbobjs, hwloc_obj_t *objs,
345 hwloc_uint64_t *values,
346 unsigned long flags)
347 {
348 struct hwloc_internal_distances_s *dist = handle;
349 hwloc_obj_type_t unique_type, *different_types = NULL;
350 hwloc_uint64_t *indexes = NULL;
351 unsigned i, disappeared = 0;
352
353 if (dist->nbobjs || !(dist->iflags & HWLOC_INTERNAL_DIST_FLAG_NOT_COMMITTED)) {
354 /* target distances is already set */
343355 errno = EINVAL;
344356 goto err;
345357 }
346358
347 /* cannot group without objects,
348 * and we don't group from XML anyway since the hwloc that generated the XML should have grouped already.
349 */
350 if (flags & HWLOC_DISTANCES_ADD_FLAG_GROUP) {
351 errno = EINVAL;
352 goto err;
353 }
354
355 return hwloc_internal_distances__add(topology, name, unique_type, different_types, nbobjs, NULL, indexes, values, kind, iflags);
356
357 err:
358 free(indexes);
359 free(values);
360 free(different_types);
361 return -1;
362 }
363
364 static void
365 hwloc_internal_distances_restrict(hwloc_obj_t *objs,
366 uint64_t *indexes,
367 uint64_t *values,
368 unsigned nbobjs, unsigned disappeared);
369
370 int hwloc_internal_distances_add(hwloc_topology_t topology, const char *name,
371 unsigned nbobjs, hwloc_obj_t *objs, uint64_t *values,
372 unsigned long kind, unsigned long flags)
373 {
374 hwloc_obj_type_t unique_type, *different_types;
375 unsigned i, disappeared = 0;
376 unsigned iflags = HWLOC_INTERNAL_DIST_FLAG_OBJS_VALID;
377
378 if (nbobjs < 2) {
359 if (flags || nbobjs < 2 || !objs || !values) {
379360 errno = EINVAL;
380361 goto err;
381362 }
388369 /* some objects are NULL */
389370 if (disappeared == nbobjs) {
390371 /* nothing left, drop the matrix */
391 free(objs);
392 free(values);
393 return 0;
372 errno = ENOENT;
373 goto err;
394374 }
395375 /* restrict the matrix */
396 hwloc_internal_distances_restrict(objs, NULL, values, nbobjs, disappeared);
376 hwloc_internal_distances_restrict(objs, NULL, NULL, values, nbobjs, disappeared);
397377 nbobjs -= disappeared;
398378 }
379
380 indexes = malloc(nbobjs * sizeof(*indexes));
381 if (!indexes)
382 goto err;
399383
400384 unique_type = objs[0]->type;
401385 for(i=1; i<nbobjs; i++)
407391 /* heterogeneous types */
408392 different_types = malloc(nbobjs * sizeof(*different_types));
409393 if (!different_types)
410 goto err;
394 goto err_with_indexes;
411395 for(i=0; i<nbobjs; i++)
412396 different_types[i] = objs[i]->type;
413
414 } else {
415 /* homogeneous types */
416 different_types = NULL;
417 }
418
419 if (topology->grouping && (flags & HWLOC_DISTANCES_ADD_FLAG_GROUP) && !different_types) {
397 }
398
399 dist->nbobjs = nbobjs;
400 dist->objs = objs;
401 dist->iflags |= HWLOC_INTERNAL_DIST_FLAG_OBJS_VALID;
402 dist->indexes = indexes;
403 dist->unique_type = unique_type;
404 dist->different_types = different_types;
405 dist->values = values;
406
407 if (different_types)
408 dist->kind |= HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES;
409
410 if (HWLOC_DIST_TYPE_USE_OS_INDEX(dist->unique_type)) {
411 for(i=0; i<nbobjs; i++)
412 dist->indexes[i] = objs[i]->os_index;
413 } else {
414 for(i=0; i<nbobjs; i++)
415 dist->indexes[i] = objs[i]->gp_index;
416 }
417
418 return 0;
419
420 err_with_indexes:
421 free(indexes);
422 err:
423 hwloc_backend_distances_add__cancel(dist);
424 return -1;
425 }
426
427 /* attach objects and values to a distance handle.
428 * on success, objs and values arrays are attached and will be freed with the distances.
429 * on failure, the handle is freed.
430 */
431 static int
432 hwloc_backend_distances_add_values_by_index(hwloc_topology_t topology __hwloc_attribute_unused,
433 hwloc_backend_distances_add_handle_t handle,
434 unsigned nbobjs, hwloc_obj_type_t unique_type, hwloc_obj_type_t *different_types, hwloc_uint64_t *indexes,
435 hwloc_uint64_t *values)
436 {
437 struct hwloc_internal_distances_s *dist = handle;
438 hwloc_obj_t *objs;
439
440 if (dist->nbobjs || !(dist->iflags & HWLOC_INTERNAL_DIST_FLAG_NOT_COMMITTED)) {
441 /* target distances is already set */
442 errno = EINVAL;
443 goto err;
444 }
445 if (nbobjs < 2 || !indexes || !values || (unique_type == HWLOC_OBJ_TYPE_NONE && !different_types)) {
446 errno = EINVAL;
447 goto err;
448 }
449
450 objs = malloc(nbobjs * sizeof(*objs));
451 if (!objs)
452 goto err;
453
454 dist->nbobjs = nbobjs;
455 dist->objs = objs;
456 dist->indexes = indexes;
457 dist->unique_type = unique_type;
458 dist->different_types = different_types;
459 dist->values = values;
460
461 if (different_types)
462 dist->kind |= HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES;
463
464 return 0;
465
466 err:
467 hwloc_backend_distances_add__cancel(dist);
468 return -1;
469 }
470
471 /* commit a distances handle.
472 * on failure, the handle is freed with its objects and values arrays.
473 */
474 int
475 hwloc_backend_distances_add_commit(hwloc_topology_t topology,
476 hwloc_backend_distances_add_handle_t handle,
477 unsigned long flags)
478 {
479 struct hwloc_internal_distances_s *dist = handle;
480
481 if (!dist->nbobjs || !(dist->iflags & HWLOC_INTERNAL_DIST_FLAG_NOT_COMMITTED)) {
482 /* target distances not ready for commit */
483 errno = EINVAL;
484 goto err;
485 }
486
487 if ((flags & HWLOC_DISTANCES_ADD_FLAG_GROUP) && !dist->objs) {
488 /* cannot group without objects,
489 * and we don't group from XML anyway since the hwloc that generated the XML should have grouped already.
490 */
491 errno = EINVAL;
492 goto err;
493 }
494
495 if (topology->grouping && (flags & HWLOC_DISTANCES_ADD_FLAG_GROUP) && !dist->different_types) {
420496 float full_accuracy = 0.f;
421497 float *accuracies;
422498 unsigned nbaccuracies;
430506 }
431507
432508 if (topology->grouping_verbose) {
433 unsigned j;
434 int gp = !HWLOC_DIST_TYPE_USE_OS_INDEX(unique_type);
435509 fprintf(stderr, "Trying to group objects using distance matrix:\n");
436 fprintf(stderr, "%s", gp ? "gp_index" : "os_index");
437 for(j=0; j<nbobjs; j++)
438 fprintf(stderr, " % 5d", (int)(gp ? objs[j]->gp_index : objs[j]->os_index));
439 fprintf(stderr, "\n");
440 for(i=0; i<nbobjs; i++) {
441 fprintf(stderr, " % 5d", (int)(gp ? objs[i]->gp_index : objs[i]->os_index));
442 for(j=0; j<nbobjs; j++)
443 fprintf(stderr, " % 5lld", (long long) values[i*nbobjs + j]);
444 fprintf(stderr, "\n");
445 }
446 }
447
448 hwloc__groups_by_distances(topology, nbobjs, objs, values,
449 kind, nbaccuracies, accuracies, 1 /* check the first matrice */);
450 }
451
452 return hwloc_internal_distances__add(topology, name, unique_type, different_types, nbobjs, objs, NULL, values, kind, iflags);
510 hwloc_internal_distances_print_matrix(dist);
511 }
512
513 hwloc__groups_by_distances(topology, dist->nbobjs, dist->objs, dist->values,
514 dist->kind, nbaccuracies, accuracies, 1 /* check the first matrix */);
515 }
516
517 if (topology->last_dist)
518 topology->last_dist->next = dist;
519 else
520 topology->first_dist = dist;
521 dist->prev = topology->last_dist;
522 dist->next = NULL;
523 topology->last_dist = dist;
524
525 dist->iflags &= ~HWLOC_INTERNAL_DIST_FLAG_NOT_COMMITTED;
526 return 0;
527
528 err:
529 hwloc_backend_distances_add__cancel(dist);
530 return -1;
531 }
532
533 /* all-in-one backend function not exported to plugins, only used by XML for now */
534 int hwloc_internal_distances_add_by_index(hwloc_topology_t topology, const char *name,
535 hwloc_obj_type_t unique_type, hwloc_obj_type_t *different_types, unsigned nbobjs, uint64_t *indexes, uint64_t *values,
536 unsigned long kind, unsigned long flags)
537 {
538 hwloc_backend_distances_add_handle_t handle;
539 int err;
540
541 handle = hwloc_backend_distances_add_create(topology, name, kind, 0);
542 if (!handle)
543 goto err;
544
545 err = hwloc_backend_distances_add_values_by_index(topology, handle,
546 nbobjs, unique_type, different_types, indexes,
547 values);
548 if (err < 0)
549 goto err;
550
551 /* arrays are now attached to the handle */
552 indexes = NULL;
553 different_types = NULL;
554 values = NULL;
555
556 err = hwloc_backend_distances_add_commit(topology, handle, flags);
557 if (err < 0)
558 goto err;
559
560 return 0;
561
562 err:
563 free(indexes);
564 free(different_types);
565 free(values);
566 return -1;
567 }
568
569 /* all-in-one backend function not exported to plugins, used by OS backends */
570 int hwloc_internal_distances_add(hwloc_topology_t topology, const char *name,
571 unsigned nbobjs, hwloc_obj_t *objs, uint64_t *values,
572 unsigned long kind, unsigned long flags)
573 {
574 hwloc_backend_distances_add_handle_t handle;
575 int err;
576
577 handle = hwloc_backend_distances_add_create(topology, name, kind, 0);
578 if (!handle)
579 goto err;
580
581 err = hwloc_backend_distances_add_values(topology, handle,
582 nbobjs, objs,
583 values,
584 0);
585 if (err < 0)
586 goto err;
587
588 /* arrays are now attached to the handle */
589 objs = NULL;
590 values = NULL;
591
592 err = hwloc_backend_distances_add_commit(topology, handle, flags);
593 if (err < 0)
594 goto err;
595
596 return 0;
453597
454598 err:
455599 free(objs);
457601 return -1;
458602 }
459603
604 /********************************
605 * User API for adding distances
606 */
607
460608 #define HWLOC_DISTANCES_KIND_FROM_ALL (HWLOC_DISTANCES_KIND_FROM_OS|HWLOC_DISTANCES_KIND_FROM_USER)
461609 #define HWLOC_DISTANCES_KIND_MEANS_ALL (HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_MEANS_BANDWIDTH)
462 #define HWLOC_DISTANCES_KIND_ALL (HWLOC_DISTANCES_KIND_FROM_ALL|HWLOC_DISTANCES_KIND_MEANS_ALL)
610 #define HWLOC_DISTANCES_KIND_ALL (HWLOC_DISTANCES_KIND_FROM_ALL|HWLOC_DISTANCES_KIND_MEANS_ALL|HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES)
463611 #define HWLOC_DISTANCES_ADD_FLAG_ALL (HWLOC_DISTANCES_ADD_FLAG_GROUP|HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE)
464612
465 /* The actual function exported to the user
466 */
467 int hwloc_distances_add(hwloc_topology_t topology,
468 unsigned nbobjs, hwloc_obj_t *objs, hwloc_uint64_t *values,
469 unsigned long kind, unsigned long flags)
613 void * hwloc_distances_add_create(hwloc_topology_t topology,
614 const char *name, unsigned long kind,
615 unsigned long flags)
616 {
617 if (!topology->is_loaded) {
618 errno = EINVAL;
619 return NULL;
620 }
621 if (topology->adopted_shmem_addr) {
622 errno = EPERM;
623 return NULL;
624 }
625 if ((kind & ~HWLOC_DISTANCES_KIND_ALL)
626 || hwloc_weight_long(kind & HWLOC_DISTANCES_KIND_FROM_ALL) != 1
627 || hwloc_weight_long(kind & HWLOC_DISTANCES_KIND_MEANS_ALL) != 1) {
628 errno = EINVAL;
629 return NULL;
630 }
631
632 return hwloc_backend_distances_add_create(topology, name, kind, flags);
633 }
634
635 int hwloc_distances_add_values(hwloc_topology_t topology,
636 void *handle,
637 unsigned nbobjs, hwloc_obj_t *objs,
638 hwloc_uint64_t *values,
639 unsigned long flags)
470640 {
471641 unsigned i;
472642 uint64_t *_values;
473643 hwloc_obj_t *_objs;
474644 int err;
475645
476 if (nbobjs < 2 || !objs || !values || !topology->is_loaded) {
477 errno = EINVAL;
478 return -1;
479 }
480 if (topology->adopted_shmem_addr) {
481 errno = EPERM;
482 return -1;
483 }
484 if ((kind & ~HWLOC_DISTANCES_KIND_ALL)
485 || hwloc_weight_long(kind & HWLOC_DISTANCES_KIND_FROM_ALL) != 1
486 || hwloc_weight_long(kind & HWLOC_DISTANCES_KIND_MEANS_ALL) != 1
487 || (flags & ~HWLOC_DISTANCES_ADD_FLAG_ALL)) {
488 errno = EINVAL;
489 return -1;
490 }
491
492646 /* no strict need to check for duplicates, things shouldn't break */
493647
494648 for(i=1; i<nbobjs; i++)
495649 if (!objs[i]) {
496650 errno = EINVAL;
497 return -1;
651 goto out;
498652 }
499653
500654 /* copy the input arrays and give them to the topology */
505659
506660 memcpy(_objs, objs, nbobjs*sizeof(hwloc_obj_t));
507661 memcpy(_values, values, nbobjs*nbobjs*sizeof(*_values));
508 err = hwloc_internal_distances_add(topology, NULL, nbobjs, _objs, _values, kind, flags);
509 if (err < 0)
510 goto out; /* _objs and _values freed in hwloc_internal_distances_add() */
662
663 err = hwloc_backend_distances_add_values(topology, handle, nbobjs, _objs, _values, flags);
664 if (err < 0) {
665 /* handle was canceled inside hwloc_backend_distances_add_values */
666 handle = NULL;
667 goto out_with_arrays;
668 }
669
670 return 0;
671
672 out_with_arrays:
673 free(_objs);
674 free(_values);
675 out:
676 if (handle)
677 hwloc_backend_distances_add__cancel(handle);
678 return -1;
679 }
680
681 int
682 hwloc_distances_add_commit(hwloc_topology_t topology,
683 void *handle,
684 unsigned long flags)
685 {
686 int err;
687
688 if (flags & ~HWLOC_DISTANCES_ADD_FLAG_ALL) {
689 errno = EINVAL;
690 goto out;
691 }
692
693 err = hwloc_backend_distances_add_commit(topology, handle, flags);
694 if (err < 0) {
695 /* handle was canceled inside hwloc_backend_distances_add_commit */
696 handle = NULL;
697 goto out;
698 }
511699
512700 /* in case we added some groups, see if we need to reconnect */
513701 hwloc_topology_reconnect(topology, 0);
514702
515703 return 0;
516704
517 out_with_arrays:
518 free(_values);
519 free(_objs);
520705 out:
706 if (handle)
707 hwloc_backend_distances_add__cancel(handle);
521708 return -1;
709 }
710
711 /* deprecated all-in-one user function */
712 int hwloc_distances_add(hwloc_topology_t topology,
713 unsigned nbobjs, hwloc_obj_t *objs, hwloc_uint64_t *values,
714 unsigned long kind, unsigned long flags)
715 {
716 void *handle;
717 int err;
718
719 handle = hwloc_distances_add_create(topology, NULL, kind, 0);
720 if (!handle)
721 return -1;
722
723 err = hwloc_distances_add_values(topology, handle, nbobjs, objs, values, 0);
724 if (err < 0)
725 return -1;
726
727 err = hwloc_distances_add_commit(topology, handle, flags);
728 if (err < 0)
729 return -1;
730
731 return 0;
522732 }
523733
524734 /******************************************************
528738 static void
529739 hwloc_internal_distances_restrict(hwloc_obj_t *objs,
530740 uint64_t *indexes,
741 hwloc_obj_type_t *different_types,
531742 uint64_t *values,
532743 unsigned nbobjs, unsigned disappeared)
533744 {
549760 objs[newi] = objs[i];
550761 if (indexes)
551762 indexes[newi] = indexes[i];
763 if (different_types)
764 different_types[newi] = different_types[i];
552765 newi++;
553766 }
554767 }
593806 return -1;
594807
595808 if (disappeared) {
596 hwloc_internal_distances_restrict(objs, dist->indexes, dist->values, nbobjs, disappeared);
809 hwloc_internal_distances_restrict(objs, dist->indexes, dist->different_types, dist->values, nbobjs, disappeared);
597810 dist->nbobjs -= disappeared;
598811 }
599812
10861299 out_with_groupids:
10871300 free(groupids);
10881301 }
1302
1303 static int
1304 hwloc__distances_transform_remove_null(struct hwloc_distances_s *distances)
1305 {
1306 hwloc_uint64_t *values = distances->values;
1307 hwloc_obj_t *objs = distances->objs;
1308 unsigned i, nb, nbobjs = distances->nbobjs;
1309 hwloc_obj_type_t unique_type;
1310
1311 for(i=0, nb=0; i<nbobjs; i++)
1312 if (objs[i])
1313 nb++;
1314
1315 if (nb < 2) {
1316 errno = EINVAL;
1317 return -1;
1318 }
1319
1320 if (nb == nbobjs)
1321 return 0;
1322
1323 hwloc_internal_distances_restrict(objs, NULL, NULL, values, nbobjs, nbobjs-nb);
1324 distances->nbobjs = nb;
1325
1326 /* update HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES for convenience */
1327 unique_type = objs[0]->type;
1328 for(i=1; i<nb; i++)
1329 if (objs[i]->type != unique_type) {
1330 unique_type = HWLOC_OBJ_TYPE_NONE;
1331 break;
1332 }
1333 if (unique_type == HWLOC_OBJ_TYPE_NONE)
1334 distances->kind |= HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES;
1335 else
1336 distances->kind &= ~HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES;
1337
1338 return 0;
1339 }
1340
1341 static int
1342 hwloc__distances_transform_links(struct hwloc_distances_s *distances)
1343 {
1344 /* FIXME: we should look for the greatest common denominator
1345 * but we just use the smallest positive value, that's enough for current use-cases.
1346 * We'll return -1 in other cases.
1347 */
1348 hwloc_uint64_t divider, *values = distances->values;
1349 unsigned i, nbobjs = distances->nbobjs;
1350
1351 if (!(distances->kind & HWLOC_DISTANCES_KIND_MEANS_BANDWIDTH)) {
1352 errno = EINVAL;
1353 return -1;
1354 }
1355
1356 for(i=0; i<nbobjs; i++)
1357 values[i*nbobjs+i] = 0;
1358
1359 /* find the smallest positive value */
1360 divider = 0;
1361 for(i=0; i<nbobjs*nbobjs; i++)
1362 if (values[i] && (!divider || values[i] < divider))
1363 divider = values[i];
1364
1365 if (!divider)
1366 /* only zeroes? do nothing */
1367 return 0;
1368
1369 /* check it divides all values */
1370 for(i=0; i<nbobjs*nbobjs; i++)
1371 if (values[i]%divider) {
1372 errno = ENOENT;
1373 return -1;
1374 }
1375
1376 /* ok, now divide for real */
1377 for(i=0; i<nbobjs*nbobjs; i++)
1378 values[i] /= divider;
1379
1380 return 0;
1381 }
1382
1383 static __hwloc_inline int is_nvswitch(hwloc_obj_t obj)
1384 {
1385 return obj && obj->subtype && !strcmp(obj->subtype, "NVSwitch");
1386 }
1387
1388 static int
1389 hwloc__distances_transform_merge_switch_ports(hwloc_topology_t topology,
1390 struct hwloc_distances_s *distances)
1391 {
1392 struct hwloc_internal_distances_s *dist = hwloc__internal_distances_from_public(topology, distances);
1393 hwloc_obj_t *objs = distances->objs;
1394 hwloc_uint64_t *values = distances->values;
1395 unsigned first, i, j, nbobjs = distances->nbobjs;
1396
1397 if (strcmp(dist->name, "NVLinkBandwidth")) {
1398 errno = EINVAL;
1399 return -1;
1400 }
1401
1402 /* find the first port */
1403 first = (unsigned) -1;
1404 for(i=0; i<nbobjs; i++)
1405 if (is_nvswitch(objs[i])) {
1406 first = i;
1407 break;
1408 }
1409 if (first == (unsigned)-1) {
1410 errno = ENOENT;
1411 return -1;
1412 }
1413
1414 for(j=i+1; j<nbobjs; j++) {
1415 if (is_nvswitch(objs[j])) {
1416 /* another port, merge it */
1417 unsigned k;
1418 for(k=0; k<nbobjs; k++) {
1419 if (k==i || k==j)
1420 continue;
1421 values[k*nbobjs+i] += values[k*nbobjs+j];
1422 values[k*nbobjs+j] = 0;
1423 values[i*nbobjs+k] += values[j*nbobjs+k];
1424 values[j*nbobjs+k] = 0;
1425 }
1426 values[i*nbobjs+i] += values[j*nbobjs+j];
1427 values[j*nbobjs+j] = 0;
1428 }
1429 /* the caller will also call REMOVE_NULL to remove other ports */
1430 objs[j] = NULL;
1431 }
1432
1433 return 0;
1434 }
1435
1436 static int
1437 hwloc__distances_transform_transitive_closure(hwloc_topology_t topology,
1438 struct hwloc_distances_s *distances)
1439 {
1440 struct hwloc_internal_distances_s *dist = hwloc__internal_distances_from_public(topology, distances);
1441 hwloc_obj_t *objs = distances->objs;
1442 hwloc_uint64_t *values = distances->values;
1443 unsigned nbobjs = distances->nbobjs;
1444 unsigned i, j, k;
1445
1446 if (strcmp(dist->name, "NVLinkBandwidth")) {
1447 errno = EINVAL;
1448 return -1;
1449 }
1450
1451 for(i=0; i<nbobjs; i++) {
1452 hwloc_uint64_t bw_i2sw = 0;
1453 if (is_nvswitch(objs[i]))
1454 continue;
1455 /* count our BW to the switch */
1456 for(k=0; k<nbobjs; k++)
1457 if (is_nvswitch(objs[k]))
1458 bw_i2sw += values[i*nbobjs+k];
1459
1460 for(j=0; j<nbobjs; j++) {
1461 hwloc_uint64_t bw_sw2j = 0;
1462 if (i == j || is_nvswitch(objs[j]))
1463 continue;
1464 /* count our BW from the switch */
1465 for(k=0; k<nbobjs; k++)
1466 if (is_nvswitch(objs[k]))
1467 bw_sw2j += values[k*nbobjs+j];
1468
1469 /* bandwidth from i to j is now min(i2sw,sw2j) */
1470 values[i*nbobjs+j] = bw_i2sw > bw_sw2j ? bw_sw2j : bw_i2sw;
1471 }
1472 }
1473
1474 return 0;
1475 }
1476
1477 int
1478 hwloc_distances_transform(hwloc_topology_t topology,
1479 struct hwloc_distances_s *distances,
1480 enum hwloc_distances_transform_e transform,
1481 void *transform_attr,
1482 unsigned long flags)
1483 {
1484 if (flags || transform_attr) {
1485 errno = EINVAL;
1486 return -1;
1487 }
1488
1489 switch (transform) {
1490 case HWLOC_DISTANCES_TRANSFORM_REMOVE_NULL:
1491 return hwloc__distances_transform_remove_null(distances);
1492 case HWLOC_DISTANCES_TRANSFORM_LINKS:
1493 return hwloc__distances_transform_links(distances);
1494 case HWLOC_DISTANCES_TRANSFORM_MERGE_SWITCH_PORTS:
1495 {
1496 int err;
1497 err = hwloc__distances_transform_merge_switch_ports(topology, distances);
1498 if (!err)
1499 err = hwloc__distances_transform_remove_null(distances);
1500 return err;
1501 }
1502 case HWLOC_DISTANCES_TRANSFORM_TRANSITIVE_CLOSURE:
1503 return hwloc__distances_transform_transitive_closure(topology, distances);
1504 default:
1505 errno = EINVAL;
1506 return -1;
1507 }
1508 }
00 <!--
11 Copyright © 2009 CNRS
2 Copyright © 2009-2020 Inria. All rights reserved.
2 Copyright © 2009-2021 Inria. All rights reserved.
33 Copyright © 2009-2011 Université Bordeaux.
44 See COPYING in top-level directory.
55
5555 <!ELEMENT distances2hetero (indexes+,u64values+)>
5656 <!ATTLIST distances2hetero nbobjs CDATA #REQUIRED>
5757 <!ATTLIST distances2hetero kind CDATA #REQUIRED>
58 <!ATTLIST distances2hetero name CDATA "">
5859
5960 <!ELEMENT memattr (memattr_value*)>
6061 <!ATTLIST memattr name CDATA #REQUIRED>
00 /*
1 * Copyright © 2009-2020 Inria. All rights reserved.
1 * Copyright © 2009-2021 Inria. All rights reserved.
22 * See COPYING in top-level directory.
33 */
44
145145 }
146146 free(buffer);
147147 } else {
148 fprintf(stderr, "Ignoring HWLOC_PCI_LOCALITY file `%s' too large (%lu bytes)\n",
149 env, (unsigned long) st.st_size);
148 if (hwloc_hide_errors() < 2)
149 fprintf(stderr, "hwloc/pci: Ignoring HWLOC_PCI_LOCALITY file `%s' too large (%lu bytes)\n",
150 env, (unsigned long) st.st_size);
150151 }
151152 }
152153 close(fd);
205206 else
206207 hwloc_debug("%s Bridge [%04x:%04x]", busid,
207208 pcidev->attr->pcidev.vendor_id, pcidev->attr->pcidev.device_id);
208 hwloc_debug(" to %04x:[%02x:%02x]\n",
209 pcidev->attr->bridge.downstream.pci.domain, pcidev->attr->bridge.downstream.pci.secondary_bus, pcidev->attr->bridge.downstream.pci.subordinate_bus);
209 if (pcidev->attr->bridge.downstream_type == HWLOC_OBJ_BRIDGE_PCI)
210 hwloc_debug(" to %04x:[%02x:%02x]\n",
211 pcidev->attr->bridge.downstream.pci.domain, pcidev->attr->bridge.downstream.pci.secondary_bus, pcidev->attr->bridge.downstream.pci.subordinate_bus);
212 else
213 assert(0);
210214 } else
211215 hwloc_debug("%s Device [%04x:%04x (%04x:%04x) rev=%02x class=%04x]\n", busid,
212216 pcidev->attr->pcidev.vendor_id, pcidev->attr->pcidev.device_id,
250254 if (a->attr->pcidev.domain > b->attr->pcidev.domain)
251255 return HWLOC_PCI_BUSID_HIGHER;
252256
253 if (a->type == HWLOC_OBJ_BRIDGE
257 if (a->type == HWLOC_OBJ_BRIDGE && a->attr->bridge.downstream_type == HWLOC_OBJ_BRIDGE_PCI
254258 && b->attr->pcidev.bus >= a->attr->bridge.downstream.pci.secondary_bus
255259 && b->attr->pcidev.bus <= a->attr->bridge.downstream.pci.subordinate_bus)
256260 return HWLOC_PCI_BUSID_SUPERSET;
257 if (b->type == HWLOC_OBJ_BRIDGE
261 if (b->type == HWLOC_OBJ_BRIDGE && b->attr->bridge.downstream_type == HWLOC_OBJ_BRIDGE_PCI
258262 && a->attr->pcidev.bus >= b->attr->bridge.downstream.pci.secondary_bus
259263 && a->attr->pcidev.bus <= b->attr->bridge.downstream.pci.subordinate_bus)
260264 return HWLOC_PCI_BUSID_INCLUDED;
301305 new->next_sibling = *curp;
302306 *curp = new;
303307 new->parent = parent;
304 if (new->type == HWLOC_OBJ_BRIDGE) {
308 if (new->type == HWLOC_OBJ_BRIDGE && new->attr->bridge.downstream_type == HWLOC_OBJ_BRIDGE_PCI) {
305309 /* look at remaining siblings and move some below new */
306310 childp = &new->io_first_child;
307311 curp = &new->next_sibling;
328332 }
329333 case HWLOC_PCI_BUSID_EQUAL: {
330334 static int reported = 0;
331 if (!reported && !hwloc_hide_errors()) {
335 if (!reported && hwloc_hide_errors() < 2) {
332336 fprintf(stderr, "*********************************************************\n");
333337 fprintf(stderr, "* hwloc %s received invalid PCI information.\n", HWLOC_VERSION);
334338 fprintf(stderr, "*\n");
410414 dstnextp = &child->next_sibling;
411415
412416 /* compute hostbridge secondary/subordinate buses */
413 if (child->type == HWLOC_OBJ_BRIDGE
417 if (child->type == HWLOC_OBJ_BRIDGE && child->attr->bridge.downstream_type == HWLOC_OBJ_BRIDGE_PCI
414418 && child->attr->bridge.downstream.pci.subordinate_bus > current_subordinate)
415419 current_subordinate = child->attr->bridge.downstream.pci.subordinate_bus;
416420
485489 if (env) {
486490 static int reported = 0;
487491 if (!topology->pci_has_forced_locality && !reported) {
488 fprintf(stderr, "Environment variable %s is deprecated, please use HWLOC_PCI_LOCALITY instead.\n", env);
492 if (!hwloc_hide_errors())
493 fprintf(stderr, "hwloc/pci: Environment variable %s is deprecated, please use HWLOC_PCI_LOCALITY instead.\n", env);
489494 reported = 1;
490495 }
491496 if (*env) {
564569 assert(pciobj->type == HWLOC_OBJ_PCI_DEVICE
565570 || (pciobj->type == HWLOC_OBJ_BRIDGE && pciobj->attr->bridge.upstream_type == HWLOC_OBJ_BRIDGE_PCI));
566571
567 if (obj->type == HWLOC_OBJ_BRIDGE) {
572 if (obj->type == HWLOC_OBJ_BRIDGE && obj->attr->bridge.downstream_type == HWLOC_OBJ_BRIDGE_PCI) {
568573 domain = obj->attr->bridge.downstream.pci.domain;
569574 bus_min = obj->attr->bridge.downstream.pci.secondary_bus;
570575 bus_max = obj->attr->bridge.downstream.pci.subordinate_bus;
00 /*
11 * Copyright © 2009 CNRS
2 * Copyright © 2009-2019 Inria. All rights reserved.
2 * Copyright © 2009-2021 Inria. All rights reserved.
33 * Copyright © 2009-2011, 2013 Université Bordeaux
44 * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
55 * See COPYING in top-level directory.
625625 unsigned os_index = HWLOC_UNKNOWN_INDEX; /* no os_index except for PU and NUMANODE below */
626626
627627 if (rs_getrad(rset, rad, sdl, i, 0)) {
628 fprintf(stderr,"rs_getrad(%d) failed: %s\n", i, strerror(errno));
628 if (hwloc_hide_errors() < 2)
629 fprintf(stderr, "hwloc/aix: rs_getrad(%d) failed: %s\n", i, strerror(errno));
629630 continue;
630631 }
631632 if (!rs_getinfo(rad, R_NUMPROCS, 0))
00 /*
11 * Copyright © 2011 Université Bordeaux
2 * Copyright © 2012-2020 Inria. All rights reserved.
2 * Copyright © 2012-2021 Inria. All rights reserved.
33 * See COPYING in top-level directory.
44 */
55
7474
7575 cures = cudaGetDeviceCount(&nb);
7676 if (cures) {
77 if (!hwloc_hide_errors()) {
77 if (cures != cudaErrorNoDevice && !hwloc_hide_errors()) {
7878 const char *error = cudaGetErrorString(cures);
79 fprintf(stderr, "CUDA: Failed to get number of devices with cudaGetDeviceCount(): %s\n", error);
79 fprintf(stderr, "hwloc/cuda: Failed to get number of devices with cudaGetDeviceCount(): %s\n", error);
8080 }
8181 return -1;
8282 }
00 /*
11 * Copyright © 2012-2013 Blue Brain Project, BBP/EPFL. All rights reserved.
2 * Copyright © 2012-2019 Inria. All rights reserved.
2 * Copyright © 2012-2021 Inria. All rights reserved.
33 * See COPYING in top-level directory.
44 */
55
120120
121121 osdev = hwloc_alloc_setup_object(topology, HWLOC_OBJ_OS_DEVICE, HWLOC_UNKNOWN_INDEX);
122122 osdev->name = strdup(name);
123 osdev->subtype = strdup("Display");
123124 osdev->attr->osdev.type = HWLOC_OBJ_OSDEV_GPU;
124125 hwloc_obj_add_info(osdev, "Backend", "GL");
125126 hwloc_obj_add_info(osdev, "GPUVendor", "NVIDIA Corporation");
0 /*
1 * Copyright © 2020-2021 Inria. All rights reserved.
2 * See COPYING in top-level directory.
3 */
4
5 #include "private/autogen/config.h"
6 #include "hwloc.h"
7 #include "hwloc/plugins.h"
8
9 /* private headers allowed for convenience because this plugin is built within hwloc */
10 #include "private/misc.h"
11 #include "private/debug.h"
12
13 #include <level_zero/ze_api.h>
14 #include <level_zero/zes_api.h>
15
16 static int
17 hwloc_levelzero_discover(struct hwloc_backend *backend, struct hwloc_disc_status *dstatus)
18 {
19 /*
20 * This backend uses the underlying OS.
21 * However we don't enforce topology->is_thissystem so that
22 * we may still force use this backend when debugging with !thissystem.
23 */
24
25 struct hwloc_topology *topology = backend->topology;
26 enum hwloc_type_filter_e filter;
27 ze_result_t res;
28 ze_driver_handle_t *drh;
29 uint32_t nbdrivers, i, k, zeidx;
30 int sysman_maybe_missing = 0; /* 1 if ZES_ENABLE_SYSMAN=1 was NOT set early, 2 if ZES_ENABLE_SYSMAN=0 */
31 char *env;
32
33 assert(dstatus->phase == HWLOC_DISC_PHASE_IO);
34
35 hwloc_topology_get_type_filter(topology, HWLOC_OBJ_OS_DEVICE, &filter);
36 if (filter == HWLOC_TYPE_FILTER_KEEP_NONE)
37 return 0;
38
39 /* Tell L0 to create sysman devices.
40 * If somebody already initialized L0 without Sysman, zesDeviceGetProperties() will fail below.
41 * The lib constructor and Windows DllMain tried to set ZES_ENABLE_SYSMAN=1 early (see topology.c),
42 * we try again in case they didn't.
43 */
44 env = getenv("ZES_ENABLE_SYSMAN");
45 if (!env) {
46 putenv((char *) "ZES_ENABLE_SYSMAN=1");
47 /* we'll warn below if we fail to get zes devices */
48 sysman_maybe_missing = 1;
49 } else if (!atoi(env)) {
50 sysman_maybe_missing = 2;
51 }
52
53 res = zeInit(0);
54 if (res != ZE_RESULT_SUCCESS) {
55 if (!hwloc_hide_errors()) {
56 fprintf(stderr, "Failed to initialize LevelZero in ze_init(): %d\n", (int)res);
57 }
58 return 0;
59 }
60
61 nbdrivers = 0;
62 res = zeDriverGet(&nbdrivers, NULL);
63 if (res != ZE_RESULT_SUCCESS || !nbdrivers)
64 return 0;
65 drh = malloc(nbdrivers * sizeof(*drh));
66 if (!drh)
67 return 0;
68 res = zeDriverGet(&nbdrivers, drh);
69 if (res != ZE_RESULT_SUCCESS) {
70 free(drh);
71 return 0;
72 }
73
74 zeidx = 0;
75 for(i=0; i<nbdrivers; i++) {
76 uint32_t nbdevices, j;
77 ze_device_handle_t *dvh;
78 char buffer[13];
79
80 nbdevices = 0;
81 res = zeDeviceGet(drh[i], &nbdevices, NULL);
82 if (res != ZE_RESULT_SUCCESS || !nbdevices)
83 continue;
84 dvh = malloc(nbdevices * sizeof(*dvh));
85 if (!dvh)
86 continue;
87 res = zeDeviceGet(drh[i], &nbdevices, dvh);
88 if (res != ZE_RESULT_SUCCESS) {
89 free(dvh);
90 continue;
91 }
92
93 for(j=0; j<nbdevices; j++) {
94 zes_device_properties_t prop;
95 unsigned nr_cqprops;
96 zes_pci_properties_t pci;
97 zes_device_handle_t sdvh = dvh[j];
98 hwloc_obj_t osdev, parent;
99
100 res = zesDeviceGetProperties(sdvh, &prop);
101 if (res != ZE_RESULT_SUCCESS) {
102 /* L0 was likely initialized without sysman, don't bother */
103 if (sysman_maybe_missing == 1 && !hwloc_hide_errors())
104 fprintf(stderr, "hwloc/levelzero: zesDeviceGetProperties() failed (ZES_ENABLE_SYSMAN=1 set too late?).\n");
105 else if (sysman_maybe_missing == 2 && !hwloc_hide_errors())
106 fprintf(stderr, "hwloc/levelzero: zesDeviceGetProperties() failed (ZES_ENABLE_SYSMAN=0).\n");
107 continue;
108 }
109
110 osdev = hwloc_alloc_setup_object(topology, HWLOC_OBJ_OS_DEVICE, HWLOC_UNKNOWN_INDEX);
111 snprintf(buffer, sizeof(buffer), "ze%u", zeidx); // ze0d0 ?
112 osdev->name = strdup(buffer);
113 osdev->depth = HWLOC_TYPE_DEPTH_UNKNOWN;
114 osdev->attr->osdev.type = HWLOC_OBJ_OSDEV_COPROC;
115 osdev->subtype = strdup("LevelZero");
116 hwloc_obj_add_info(osdev, "Backend", "LevelZero");
117
118 snprintf(buffer, sizeof(buffer), "%u", i);
119 hwloc_obj_add_info(osdev, "LevelZeroDriverIndex", buffer);
120 snprintf(buffer, sizeof(buffer), "%u", j);
121 hwloc_obj_add_info(osdev, "LevelZeroDriverDeviceIndex", buffer);
122
123 /* these strings aren't useful with current implementations:
124 * prop.vendorName is "Unknown" or "Intel(R) Corporation"
125 * prop.modelName is "0x1234" (PCI device id)
126 * prop.brandName is "Unknown" (subvendor name)
127 * prop.serialNumber is "Unknown"
128 * prop.boardNumber is "Unknown"
129 */
130 if (strcmp((const char *) prop.vendorName, "Unknown"))
131 hwloc_obj_add_info(osdev, "LevelZeroVendor", (const char *) prop.vendorName);
132 if (strcmp((const char *) prop.vendorName, "Unknown"))
133 /* Model is always "0x...." in early implementations */
134 hwloc_obj_add_info(osdev, "LevelZeroModel", (const char *) prop.modelName);
135 if (strcmp((const char *) prop.brandName, "Unknown"))
136 hwloc_obj_add_info(osdev, "LevelZeroBrand", (const char *) prop.brandName);
137 if (strcmp((const char *) prop.serialNumber, "Unknown"))
138 hwloc_obj_add_info(osdev, "LevelZeroSerialNumber", (const char *) prop.serialNumber);
139 if (strcmp((const char *) prop.boardNumber, "Unknown"))
140 hwloc_obj_add_info(osdev, "LevelZeroBoardNumber", (const char *) prop.boardNumber);
141
142 nr_cqprops = 0;
143 res = zeDeviceGetCommandQueueGroupProperties(dvh[j], &nr_cqprops, NULL);
144 if (res == ZE_RESULT_SUCCESS && nr_cqprops) {
145 ze_command_queue_group_properties_t *cqprops;
146 cqprops = malloc(nr_cqprops * sizeof(*cqprops));
147 if (cqprops) {
148 res = zeDeviceGetCommandQueueGroupProperties(dvh[j], &nr_cqprops, cqprops);
149 if (res == ZE_RESULT_SUCCESS) {
150 char tmp[32];
151 snprintf(tmp, sizeof(tmp), "%u", nr_cqprops);
152 hwloc_obj_add_info(osdev, "LevelZeroCQGroups", tmp);
153 for(k=0; k<nr_cqprops; k++) {
154 char name[32];
155 snprintf(name, sizeof(name), "LevelZeroCQGroup%u", k);
156 snprintf(tmp, sizeof(tmp), "%u*0x%lx", (unsigned) cqprops[k].numQueues, (unsigned long) cqprops[k].flags);
157 hwloc_obj_add_info(osdev, name, tmp);
158 }
159 }
160 free(cqprops);
161 }
162 }
163
164 parent = NULL;
165 res = zesDevicePciGetProperties(sdvh, &pci);
166 if (res == ZE_RESULT_SUCCESS) {
167 parent = hwloc_pci_find_parent_by_busid(topology,
168 pci.address.domain,
169 pci.address.bus,
170 pci.address.device,
171 pci.address.function);
172 if (parent && parent->type == HWLOC_OBJ_PCI_DEVICE) {
173 if (pci.maxSpeed.maxBandwidth)
174 parent->attr->pcidev.linkspeed = ((float)pci.maxSpeed.maxBandwidth)/1000/1000/1000;
175 }
176 }
177 if (!parent)
178 parent = hwloc_get_root_obj(topology);
179
180 hwloc_insert_object_by_parent(topology, parent, osdev);
181 zeidx++;
182 }
183
184 free(dvh);
185 }
186
187 free(drh);
188 return 0;
189 }
190
191 static struct hwloc_backend *
192 hwloc_levelzero_component_instantiate(struct hwloc_topology *topology,
193 struct hwloc_disc_component *component,
194 unsigned excluded_phases __hwloc_attribute_unused,
195 const void *_data1 __hwloc_attribute_unused,
196 const void *_data2 __hwloc_attribute_unused,
197 const void *_data3 __hwloc_attribute_unused)
198 {
199 struct hwloc_backend *backend;
200
201 backend = hwloc_backend_alloc(topology, component);
202 if (!backend)
203 return NULL;
204 backend->discover = hwloc_levelzero_discover;
205 return backend;
206 }
207
208 static struct hwloc_disc_component hwloc_levelzero_disc_component = {
209 "levelzero",
210 HWLOC_DISC_PHASE_IO,
211 HWLOC_DISC_PHASE_GLOBAL,
212 hwloc_levelzero_component_instantiate,
213 10, /* after pci */
214 1,
215 NULL
216 };
217
218 static int
219 hwloc_levelzero_component_init(unsigned long flags)
220 {
221 if (flags)
222 return -1;
223 if (hwloc_plugin_check_namespace("levelzero", "hwloc_backend_alloc") < 0)
224 return -1;
225 return 0;
226 }
227
228 #ifdef HWLOC_INSIDE_PLUGIN
229 HWLOC_DECLSPEC extern const struct hwloc_component hwloc_levelzero_component;
230 #endif
231
232 const struct hwloc_component hwloc_levelzero_component = {
233 HWLOC_COMPONENT_ABI,
234 hwloc_levelzero_component_init, NULL,
235 HWLOC_COMPONENT_TYPE_DISC,
236 0,
237 &hwloc_levelzero_disc_component
238 };
00 /*
11 * Copyright © 2009 CNRS
2 * Copyright © 2009-2020 Inria. All rights reserved.
2 * Copyright © 2009-2021 Inria. All rights reserved.
33 * Copyright © 2009-2013, 2015, 2020 Université Bordeaux
44 * Copyright © 2009-2018 Cisco Systems, Inc. All rights reserved.
55 * Copyright © 2015 Intel, Inc. All rights reserved.
27122712 return 0;
27132713
27142714 if (nbnodes != 2 && nbnodes != 4 && nbnodes != 8) {
2715 fprintf(stderr, "Ignoring KNL NUMA quirk, nbnodes (%u) isn't 2, 4 or 8.\n", nbnodes);
2715 if (hwloc_hide_errors() < 2)
2716 fprintf(stderr, "hwloc/linux: Ignoring KNL NUMA quirk, nbnodes (%u) isn't 2, 4 or 8.\n", nbnodes);
27162717 return -1;
27172718 }
27182719
27192720 if (!distances) {
2720 fprintf(stderr, "Ignoring KNL NUMA quirk, distance matrix missing.\n");
2721 if (hwloc_hide_errors() < 2)
2722 fprintf(stderr, "hwloc/linux: Ignoring KNL NUMA quirk, distance matrix missing.\n");
27212723 return -1;
27222724 }
27232725
27242726 for(i=0; i<nbnodes; i++) {
27252727 /* check we have 10 on the diagonal */
27262728 if (distances[i*nbnodes+i] != 10) {
2727 fprintf(stderr, "Ignoring KNL NUMA quirk, distance matrix does not contain 10 on the diagonal.\n");
2729 if (hwloc_hide_errors() < 2)
2730 fprintf(stderr, "hwloc/linux: hwloc/linux: Ignoring KNL NUMA quirk, distance matrix does not contain 10 on the diagonal.\n");
27282731 return -1;
27292732 }
27302733 for(j=i+1; j<nbnodes; j++) {
27312734 uint64_t distance = distances[i*nbnodes+j];
27322735 /* check things are symmetric */
27332736 if (distance != distances[i+j*nbnodes]) {
2734 fprintf(stderr, "Ignoring KNL NUMA quirk, distance matrix isn't symmetric.\n");
2737 if (hwloc_hide_errors() < 2)
2738 fprintf(stderr, "hwloc/linux: Ignoring KNL NUMA quirk, distance matrix isn't symmetric.\n");
27352739 return -1;
27362740 }
27372741 /* check everything outside the diagonal is > 10 */
27382742 if (distance <= 10) {
2739 fprintf(stderr, "Ignoring KNL NUMA quirk, distance matrix contains values <= 10.\n");
2743 if (hwloc_hide_errors() < 2)
2744 fprintf(stderr, "hwloc/linux: Ignoring KNL NUMA quirk, distance matrix contains values <= 10.\n");
27402745 return -1;
27412746 }
27422747 /* did we already see this value? */
27482753 if (k == summary->nb_values) {
27492754 /* add a new value */
27502755 if (k == 4) {
2751 fprintf(stderr, "Ignoring KNL NUMA quirk, distance matrix contains more than 4 different values.\n");
2756 if (hwloc_hide_errors() < 2)
2757 fprintf(stderr, "hwloc/linux: Ignoring KNL NUMA quirk, distance matrix contains more than 4 different values.\n");
27522758 return -1;
27532759 }
27542760 summary->values[k].value = distance;
27622768
27632769 if (nbnodes == 2) {
27642770 if (summary->nb_values != 2) {
2765 fprintf(stderr, "Ignoring KNL NUMA quirk, distance matrix for 2 nodes cannot contain %u different values instead of 2.\n",
2766 summary->nb_values);
2771 if (hwloc_hide_errors() < 2)
2772 fprintf(stderr, "hwloc/linux: Ignoring KNL NUMA quirk, distance matrix for 2 nodes cannot contain %u different values instead of 2.\n",
2773 summary->nb_values);
27672774 return -1;
27682775 }
27692776
27702777 } else if (nbnodes == 4) {
27712778 if (summary->nb_values != 2 && summary->nb_values != 4) {
2772 fprintf(stderr, "Ignoring KNL NUMA quirk, distance matrix for 8 nodes cannot contain %u different values instead of 2 or 4.\n",
2773 summary->nb_values);
2779 if (hwloc_hide_errors() < 2)
2780 fprintf(stderr, "hwloc/linux: Ignoring KNL NUMA quirk, distance matrix for 8 nodes cannot contain %u different values instead of 2 or 4.\n",
2781 summary->nb_values);
27742782 return -1;
27752783 }
27762784
27772785 } else if (nbnodes == 8) {
27782786 if (summary->nb_values != 4) {
2779 fprintf(stderr, "Ignoring KNL NUMA quirk, distance matrix for 8 nodes cannot contain %u different values instead of 4.\n",
2780 summary->nb_values);
2787 if (hwloc_hide_errors() < 2)
2788 fprintf(stderr, "hwloc/linux: Ignoring KNL NUMA quirk, distance matrix for 8 nodes cannot contain %u different values instead of 4.\n",
2789 summary->nb_values);
27812790 return -1;
27822791 }
27832792
33073316 && strcmp(hwdata.cluster_mode, "Quadrant")
33083317 && strcmp(hwdata.cluster_mode, "SNC2")
33093318 && strcmp(hwdata.cluster_mode, "SNC4")) {
3310 fprintf(stderr, "Failed to find a usable KNL cluster mode (%s)\n", hwdata.cluster_mode);
3319 if (hwloc_hide_errors() < 2)
3320 fprintf(stderr, "hwloc/linux: Failed to find a usable KNL cluster mode (%s)\n", hwdata.cluster_mode);
33113321 goto error;
33123322 }
33133323 if (strcmp(hwdata.memory_mode, "Cache")
33143324 && strcmp(hwdata.memory_mode, "Flat")
33153325 && strcmp(hwdata.memory_mode, "Hybrid25")
33163326 && strcmp(hwdata.memory_mode, "Hybrid50")) {
3317 fprintf(stderr, "Failed to find a usable KNL memory mode (%s)\n", hwdata.memory_mode);
3327 if (hwloc_hide_errors() < 2)
3328 fprintf(stderr, "hwloc/linux: Failed to find a usable KNL memory mode (%s)\n", hwdata.memory_mode);
33183329 goto error;
33193330 }
33203331
33353346 if (!strcmp(hwdata.memory_mode, "Cache")) {
33363347 /* Quadrant-Cache */
33373348 if (nbnodes != 1) {
3338 fprintf(stderr, "Found %u NUMA nodes instead of 1 in mode %s-%s\n", nbnodes, hwdata.cluster_mode, hwdata.memory_mode);
3349 if (hwloc_hide_errors() < 2)
3350 fprintf(stderr, "hwloc/linux: Found %u NUMA nodes instead of 1 in mode %s-%s\n", nbnodes, hwdata.cluster_mode, hwdata.memory_mode);
33393351 goto error;
33403352 }
33413353 hwloc_linux_knl_add_cluster(topology, nodes[0], NULL, &hwdata, mscache_as_l3, 1, failednodes);
33433355 } else {
33443356 /* Quadrant-Flat/Hybrid */
33453357 if (nbnodes != 2) {
3346 fprintf(stderr, "Found %u NUMA nodes instead of 2 in mode %s-%s\n", nbnodes, hwdata.cluster_mode, hwdata.memory_mode);
3358 if (hwloc_hide_errors() < 2)
3359 fprintf(stderr, "hwloc/linux: Found %u NUMA nodes instead of 2 in mode %s-%s\n", nbnodes, hwdata.cluster_mode, hwdata.memory_mode);
33473360 goto error;
33483361 }
33493362 if (!strcmp(hwdata.memory_mode, "Flat"))
33553368 if (!strcmp(hwdata.memory_mode, "Cache")) {
33563369 /* SNC2-Cache */
33573370 if (nbnodes != 2) {
3358 fprintf(stderr, "Found %u NUMA nodes instead of 2 in mode %s-%s\n", nbnodes, hwdata.cluster_mode, hwdata.memory_mode);
3371 if (hwloc_hide_errors() < 2)
3372 fprintf(stderr, "hwloc/linux: Found %u NUMA nodes instead of 2 in mode %s-%s\n", nbnodes, hwdata.cluster_mode, hwdata.memory_mode);
33593373 goto error;
33603374 }
33613375 hwloc_linux_knl_add_cluster(topology, nodes[0], NULL, &hwdata, mscache_as_l3, 2, failednodes);
33653379 /* SNC2-Flat/Hybrid */
33663380 unsigned ddr[2], mcdram[2];
33673381 if (nbnodes != 4) {
3368 fprintf(stderr, "Found %u NUMA nodes instead of 2 in mode %s-%s\n", nbnodes, hwdata.cluster_mode, hwdata.memory_mode);
3382 if (hwloc_hide_errors() < 2)
3383 fprintf(stderr, "hwloc/linux: Found %u NUMA nodes instead of 2 in mode %s-%s\n", nbnodes, hwdata.cluster_mode, hwdata.memory_mode);
33693384 goto error;
33703385 }
33713386 if (hwloc_linux_knl_identify_4nodes(distances, &dist, ddr, mcdram) < 0) {
3372 fprintf(stderr, "Unexpected distance layout for mode %s-%s\n", hwdata.cluster_mode, hwdata.memory_mode);
3387 if (hwloc_hide_errors() < 2)
3388 fprintf(stderr, "Uhwloc/linux: nexpected distance layout for mode %s-%s\n", hwdata.cluster_mode, hwdata.memory_mode);
33733389 goto error;
33743390 }
33753391 if (!strcmp(hwdata.memory_mode, "Flat"))
33823398 if (!strcmp(hwdata.memory_mode, "Cache")) {
33833399 /* SNC4-Cache */
33843400 if (nbnodes != 4) {
3385 fprintf(stderr, "Found %u NUMA nodes instead of 4 in mode %s-%s\n", nbnodes, hwdata.cluster_mode, hwdata.memory_mode);
3401 if (hwloc_hide_errors() < 2)
3402 fprintf(stderr, "hwloc/linux: Found %u NUMA nodes instead of 4 in mode %s-%s\n", nbnodes, hwdata.cluster_mode, hwdata.memory_mode);
33863403 goto error;
33873404 }
33883405 hwloc_linux_knl_add_cluster(topology, nodes[0], NULL, &hwdata, mscache_as_l3, 4, failednodes);
33943411 /* SNC4-Flat/Hybrid */
33953412 unsigned ddr[4], mcdram[4];
33963413 if (nbnodes != 8) {
3397 fprintf(stderr, "Found %u NUMA nodes instead of 2 in mode %s-%s\n", nbnodes, hwdata.cluster_mode, hwdata.memory_mode);
3414 if (hwloc_hide_errors() < 2)
3415 fprintf(stderr, "hwloc/linux: Found %u NUMA nodes instead of 2 in mode %s-%s\n", nbnodes, hwdata.cluster_mode, hwdata.memory_mode);
33983416 goto error;
33993417 }
34003418 if (hwloc_linux_knl_identify_8nodes(distances, &dist, ddr, mcdram) < 0) {
3401 fprintf(stderr, "Unexpected distance layout for mode %s-%s\n", hwdata.cluster_mode, hwdata.memory_mode);
3419 if (hwloc_hide_errors() < 2)
3420 fprintf(stderr, "hwloc/linux: Unexpected distance layout for mode %s-%s\n", hwdata.cluster_mode, hwdata.memory_mode);
34023421 goto error;
34033422 }
34043423 if (!strcmp(hwdata.memory_mode, "Flat"))
36783697 char *sn, *tn;
36793698 hwloc_bitmap_asprintf(&sn, nodeset);
36803699 hwloc_bitmap_asprintf(&tn, topology->levels[0][0]->nodeset);
3681 fprintf(stderr, "linux/sysfs: ignoring nodes because nodeset %s doesn't match existing nodeset %s.\n", tn, sn);
3700 if (hwloc_hide_errors() < 2)
3701 fprintf(stderr, "hwloc/linux: ignoring nodes because nodeset %s doesn't match existing nodeset %s.\n", tn, sn);
36823702 free(sn);
36833703 free(tn);
36843704 hwloc_bitmap_free(nodeset);
38463866 failednodes++;
38473867 continue;
38483868 }
3849 fprintf(stderr, "node P#%u cpuset intersects with previous nodes, forcing its acceptance\n", osnode);
3869 if (hwloc_hide_errors() < 2)
3870 fprintf(stderr, "hwloc/linux: node P#%u cpuset intersects with previous nodes, forcing its acceptance\n", osnode);
38503871 }
38513872 hwloc_bitmap_or(nodes_cpuset, nodes_cpuset, cpuset);
38523873
41524173 free (cpufreqs->sets);
41534174 }
41544175
4176 static int
4177 look_sysfscpukinds(struct hwloc_topology *topology,
4178 struct hwloc_linux_backend_data_s *data,
4179 const char *path)
4180 {
4181 struct hwloc_linux_cpufreqs cpufreqs_max, cpufreqs_base;
4182 char str[293];
4183 int i;
4184 DIR *dir;
4185
4186 hwloc_linux_cpufreqs_init(&cpufreqs_max);
4187 hwloc_linux_cpufreqs_init(&cpufreqs_base);
4188 /* look at the PU frequency for cpukinds */
4189 hwloc_bitmap_foreach_begin(i, topology->levels[0][0]->cpuset) {
4190 unsigned maxfreq, basefreq;
4191 /* cpuinfo_max_freq is the hardware max. scaling_max_freq is the software policy current max */
4192 sprintf(str, "%s/cpu%d/cpufreq/cpuinfo_max_freq", path, i);
4193 if (hwloc_read_path_as_uint(str, &maxfreq, data->root_fd) >= 0)
4194 if (maxfreq)
4195 hwloc_linux_cpufreqs_add(&cpufreqs_max, i, maxfreq);
4196 /* base_frequency is intel_pstate specific */
4197 sprintf(str, "%s/cpu%d/cpufreq/base_frequency", path, i);
4198 if (hwloc_read_path_as_uint(str, &basefreq, data->root_fd) >= 0)
4199 if (basefreq)
4200 hwloc_linux_cpufreqs_add(&cpufreqs_base, i, basefreq);
4201 } hwloc_bitmap_foreach_end();
4202 hwloc_linux_cpufreqs_register_cpukinds(&cpufreqs_max, topology, "FrequencyMaxMHz");
4203 hwloc_linux_cpufreqs_register_cpukinds(&cpufreqs_base, topology, "FrequencyBaseMHz");
4204 hwloc_linux_cpufreqs_destroy(&cpufreqs_max);
4205 hwloc_linux_cpufreqs_destroy(&cpufreqs_base);
4206
4207 dir = hwloc_opendir("/sys/devices/system/cpu/types", data->root_fd); /* "types" is not in /sys/bus/cpu */
4208 if (dir) {
4209 struct dirent *dirent;
4210 while ((dirent = readdir(dir)) != NULL) {
4211 hwloc_bitmap_t cpukind_cpuset;
4212
4213 if (*dirent->d_name == '.')
4214 continue;
4215
4216 sprintf(str, "/sys/devices/system/cpu/types/%s/cpumap", dirent->d_name);
4217 cpukind_cpuset = hwloc__alloc_read_path_as_cpumask(str, data->root_fd);
4218 if (cpukind_cpuset) {
4219 if (!hwloc_bitmap_iszero(cpukind_cpuset)) {
4220 struct hwloc_info_s infos[2];
4221 unsigned nr_infos = 0;
4222 /* expose a convenient CoreType if any */
4223 if (!strncmp(dirent->d_name, "intel_atom", 10)) {
4224 infos[nr_infos].name = (char*) "CoreType";
4225 infos[nr_infos].value = (char*) "IntelAtom";
4226 nr_infos++;
4227 } else if (!strncmp(dirent->d_name, "intel_core", 10)) {
4228 infos[nr_infos].name = (char*) "CoreType";
4229 infos[nr_infos].value = (char*) "IntelCore";
4230 nr_infos++;
4231 }
4232 /* then expose the raw LinuxCPUType */
4233 infos[nr_infos].name = (char*) "LinuxCPUType";
4234 infos[nr_infos].value = dirent->d_name;
4235 nr_infos++;
4236
4237 hwloc_internal_cpukinds_register(topology, cpukind_cpuset, HWLOC_CPUKIND_EFFICIENCY_UNKNOWN, infos, nr_infos, 0);
4238 } else {
4239 hwloc_bitmap_free(cpukind_cpuset);
4240 }
4241 }
4242 }
4243 closedir(dir);
4244 }
4245
4246 return 0;
4247 }
4248
41554249
41564250 /**********************************************
41574251 * sysfs CPU discovery
41654259 {
41664260 hwloc_bitmap_t cpuset; /* Set of cpus for which we have topology information */
41674261 hwloc_bitmap_t online_set; /* Set of online CPUs if easily available, or NULL */
4168 struct hwloc_linux_cpufreqs cpufreqs_max, cpufreqs_base;
41694262 #define CPU_TOPOLOGY_STR_LEN 512
41704263 char str[CPU_TOPOLOGY_STR_LEN];
41714264 DIR *dir;
42334326 }
42344327 closedir(dir);
42354328 }
4236
4237 hwloc_linux_cpufreqs_init(&cpufreqs_max);
4238 hwloc_linux_cpufreqs_init(&cpufreqs_base);
42394329
42404330 topology->support.discovery->pu = 1;
42414331 topology->support.discovery->disallowed_pu = 1;
44574547 hwloc__insert_object_by_cpuset(topology, NULL, thread, "linux:sysfs:pu");
44584548 }
44594549
4460 /* look at the PU frequency for cpukinds */
4461 {
4462 unsigned maxfreq, basefreq;
4463 /* cpuinfo_max_freq is the hardware max. scaling_max_freq is the software policy current max */
4464 sprintf(str, "%s/cpu%d/cpufreq/cpuinfo_max_freq", path, i);
4465 if (hwloc_read_path_as_uint(str, &maxfreq, data->root_fd) >= 0)
4466 if (maxfreq)
4467 hwloc_linux_cpufreqs_add(&cpufreqs_max, i, maxfreq);
4468 /* base_frequency is intel_pstate specific */
4469 sprintf(str, "%s/cpu%d/cpufreq/base_frequency", path, i);
4470 if (hwloc_read_path_as_uint(str, &basefreq, data->root_fd) >= 0)
4471 if (basefreq)
4472 hwloc_linux_cpufreqs_add(&cpufreqs_base, i, basefreq);
4473 }
4474
44754550 /* look at the caches */
44764551 for(j=0; j<10; j++) {
44774552 char str2[20]; /* enough for a level number (one digit) or a type (Data/Instruction/Unified) */
45864661
45874662 } hwloc_bitmap_foreach_end();
45884663
4589 hwloc_linux_cpufreqs_register_cpukinds(&cpufreqs_max, topology, "FrequencyMaxMHz");
4590 hwloc_linux_cpufreqs_register_cpukinds(&cpufreqs_base, topology, "FrequencyBaseMHz");
4591 hwloc_linux_cpufreqs_destroy(&cpufreqs_max);
4592 hwloc_linux_cpufreqs_destroy(&cpufreqs_base);
45934664 hwloc_bitmap_free(cpuset);
45944665 hwloc_bitmap_free(online_set);
4595
4596 dir = hwloc_opendir("/sys/devices/system/cpu/types", data->root_fd); /* "types" is not in /sys/bus/cpu */
4597 if (dir) {
4598 struct dirent *dirent;
4599 while ((dirent = readdir(dir)) != NULL) {
4600 hwloc_bitmap_t cpukind_cpuset;
4601
4602 if (*dirent->d_name == '.')
4603 continue;
4604
4605 sprintf(str, "/sys/devices/system/cpu/types/%s/cpumap", dirent->d_name);
4606 cpukind_cpuset = hwloc__alloc_read_path_as_cpumask(str, data->root_fd);
4607 if (cpukind_cpuset) {
4608 if (!hwloc_bitmap_iszero(cpukind_cpuset)) {
4609 struct hwloc_info_s infos[2];
4610 unsigned nr_infos = 0;
4611 /* expose a convenient CoreType if any */
4612 if (!strncmp(dirent->d_name, "intel_atom", 10)) {
4613 infos[nr_infos].name = (char*) "CoreType";
4614 infos[nr_infos].value = (char*) "IntelAtom";
4615 nr_infos++;
4616 } else if (!strncmp(dirent->d_name, "intel_core", 10)) {
4617 infos[nr_infos].name = (char*) "CoreType";
4618 infos[nr_infos].value = (char*) "IntelCore";
4619 nr_infos++;
4620 }
4621 /* then expose the raw LinuxCPUType */
4622 infos[nr_infos].name = (char*) "LinuxCPUType";
4623 infos[nr_infos].value = dirent->d_name;
4624 nr_infos++;
4625
4626 hwloc_internal_cpukinds_register(topology, cpukind_cpuset, HWLOC_CPUKIND_EFFICIENCY_UNKNOWN, infos, nr_infos, 0);
4627 } else {
4628 hwloc_bitmap_free(cpukind_cpuset);
4629 }
4630 }
4631 }
4632 closedir(dir);
4633 }
46344666
46354667 return 0;
46364668 }
52315263
52325264 static const char *find_sysfs_node_path(int root_fd)
52335265 {
5266 unsigned first;
5267 int err;
5268
52345269 if (!hwloc_access("/sys/bus/node/devices", R_OK|X_OK, root_fd)
52355270 && !hwloc_access("/sys/bus/node/devices/node0/cpumap", R_OK, root_fd))
52365271 return "/sys/bus/node/devices";
52385273 if (!hwloc_access("/sys/devices/system/node", R_OK|X_OK, root_fd)
52395274 && !hwloc_access("/sys/devices/system/node/node0/cpumap", R_OK, root_fd))
52405275 return "/sys/devices/system/node";
5276
5277 /* node0 might be offline, fallback to looking at the first online node.
5278 * online contains comma-separated ranges, just read the first number.
5279 */
5280 hwloc_debug("Failed to find sysfs node files using node0, looking at online nodes...\n");
5281 err = hwloc_read_path_as_uint("/sys/devices/system/node/online", &first, root_fd);
5282 if (err) {
5283 hwloc_debug("Failed to find read /sys/devices/system/node/online.\n");
5284 } else {
5285 char path[PATH_MAX];
5286 hwloc_debug("Found node#%u as first online node\n", first);
5287
5288 snprintf(path, sizeof(path), "/sys/bus/node/devices/node%u/cpumap", first);
5289 if (!hwloc_access("/sys/bus/node/devices", R_OK|X_OK, root_fd)
5290 && !hwloc_access(path, R_OK, root_fd))
5291 return "/sys/bus/node/devices";
5292
5293 snprintf(path, sizeof(path), "/sys/devices/system/node/node%u/cpumap", first);
5294 if (!hwloc_access("/sys/devices/system/node", R_OK|X_OK, root_fd)
5295 && !hwloc_access(path, R_OK, root_fd))
5296 return "/sys/devices/system/node";
5297 }
52415298
52425299 return NULL;
52435300 }
53685425 }
53695426
53705427 cpudone:
5428 look_sysfscpukinds(topology, data, sysfs_cpu_path);
53715429
53725430 /*********************
53735431 * Memory information
60686126 obj = hwloc_linux_add_os_device(backend, parent, HWLOC_OBJ_OSDEV_OPENFABRICS, dirent->d_name);
60696127
60706128 hwloc_linuxfs_infiniband_class_fillinfos(root_fd, obj, path);
6129 }
6130
6131 closedir(dir);
6132
6133 return 0;
6134 }
6135
6136 static void
6137 hwloc_linuxfs_ve_class_fillinfos(int root_fd,
6138 struct hwloc_obj *obj, const char *osdevpath)
6139 {
6140 char path[296]; /* osdevpath <= 256 */
6141 char tmp[64];
6142 unsigned val;
6143 obj->subtype = strdup("VectorEngine");
6144
6145 snprintf(path, sizeof(path), "%s/model", osdevpath); /* in GB */
6146 if (hwloc_read_path_by_length(path, tmp, sizeof(tmp), root_fd) > 0) {
6147 char *end = strchr(tmp, '\n');
6148 if (end)
6149 *end = '\0';
6150 hwloc_obj_add_info(obj, "VectorEngineModel", tmp);
6151 }
6152
6153 snprintf(path, sizeof(path), "%s/serial", osdevpath); /* in GB */
6154 if (hwloc_read_path_by_length(path, tmp, sizeof(tmp), root_fd) > 0) {
6155 char *end = strchr(tmp, '\n');
6156 if (end)
6157 *end = '\0';
6158 hwloc_obj_add_info(obj, "VectorEngineSerialNumber", tmp);
6159 }
6160
6161 snprintf(path, sizeof(path), "%s/partitioning_mode", osdevpath); /* in GB */
6162 if (hwloc_read_path_by_length(path, tmp, sizeof(tmp), root_fd) > 0) {
6163 if (atoi(tmp) > 0)
6164 hwloc_obj_add_info(obj, "VectorEngineNUMAPartitioned", "1");
6165 }
6166
6167 snprintf(path, sizeof(path), "%s/num_of_core", osdevpath);
6168 if (hwloc_read_path_by_length(path, tmp, sizeof(tmp), root_fd) > 0) {
6169 size_t len;
6170 len = strspn(tmp, "0123456789");
6171 tmp[len] = '\0';
6172 hwloc_obj_add_info(obj, "VectorEngineCores", tmp);
6173 }
6174
6175 snprintf(path, sizeof(path), "%s/memory_size", osdevpath); /* in GB */
6176 if (!hwloc_read_path_as_uint(path, &val, root_fd)) {
6177 snprintf(tmp, sizeof(tmp), "%llu", ((unsigned long long) val) * 1024*1024); /* convert from GB to kB */
6178 hwloc_obj_add_info(obj, "VectorEngineMemorySize", tmp);
6179 }
6180 snprintf(path, sizeof(path), "%s/cache_llc", osdevpath); /* in kB */
6181 if (hwloc_read_path_by_length(path, tmp, sizeof(tmp), root_fd) > 0) {
6182 size_t len;
6183 len = strspn(tmp, "0123456789");
6184 tmp[len] = '\0';
6185 hwloc_obj_add_info(obj, "VectorEngineLLCSize", tmp);
6186 }
6187 snprintf(path, sizeof(path), "%s/cache_l2", osdevpath); /* in kB */
6188 if (hwloc_read_path_by_length(path, tmp, sizeof(tmp), root_fd) > 0) {
6189 size_t len;
6190 len = strspn(tmp, "0123456789");
6191 tmp[len] = '\0';
6192 hwloc_obj_add_info(obj, "VectorEngineL2Size", tmp);
6193 }
6194 snprintf(path, sizeof(path), "%s/cache_l1d", osdevpath); /* in kB */
6195 if (hwloc_read_path_by_length(path, tmp, sizeof(tmp), root_fd) > 0) {
6196 size_t len;
6197 len = strspn(tmp, "0123456789");
6198 tmp[len] = '\0';
6199 hwloc_obj_add_info(obj, "VectorEngineL1dSize", tmp);
6200 }
6201 snprintf(path, sizeof(path), "%s/cache_l1i", osdevpath); /* in kB */
6202 if (hwloc_read_path_by_length(path, tmp, sizeof(tmp), root_fd) > 0) {
6203 size_t len;
6204 len = strspn(tmp, "0123456789");
6205 tmp[len] = '\0';
6206 hwloc_obj_add_info(obj, "VectorEngineL1iSize", tmp);
6207 }
6208 }
6209
6210 static int
6211 hwloc_linuxfs_lookup_ve_class(struct hwloc_backend *backend, unsigned osdev_flags)
6212 {
6213 struct hwloc_linux_backend_data_s *data = backend->private_data;
6214 int root_fd = data->root_fd;
6215 DIR *dir;
6216 struct dirent *dirent;
6217
6218 dir = hwloc_opendir("/sys/class/ve", root_fd);
6219 if (!dir)
6220 return 0;
6221
6222 while ((dirent = readdir(dir)) != NULL) {
6223 char path[256];
6224 hwloc_obj_t obj, parent;
6225 int err;
6226
6227 if (!strcmp(dirent->d_name, ".") || !strcmp(dirent->d_name, ".."))
6228 continue;
6229
6230 err = snprintf(path, sizeof(path), "/sys/class/ve/%s", dirent->d_name);
6231 if ((size_t) err > sizeof(path))
6232 continue;
6233 parent = hwloc_linuxfs_find_osdev_parent(backend, root_fd, path, osdev_flags);
6234 if (!parent)
6235 continue;
6236
6237 obj = hwloc_linux_add_os_device(backend, parent, HWLOC_OBJ_OSDEV_COPROC, dirent->d_name);
6238
6239 hwloc_linuxfs_ve_class_fillinfos(root_fd, obj, path);
60716240 }
60726241
60736242 closedir(dir);
62756444 }
62766445 /* couldn't read a single full string from that buffer, we're screwed */
62776446 if (!boff) {
6278 fprintf(stderr, "hwloc could read a DMI firmware entry #%u in %s\n",
6279 i, path);
6447 if (hwloc_hide_errors() < 2)
6448 fprintf(stderr, "hwloc/linux: hwloc could read a DMI firmware entry #%u in %s\n",
6449 i, path);
62806450 break;
62816451 }
62826452 /* reread buffer after previous string */
63926562 #ifndef HWLOC_HAVE_32BITS_PCI_DOMAIN
63936563 if (domain > 0xffff) {
63946564 static int warned = 0;
6395 if (!warned && !hwloc_hide_errors())
6396 fprintf(stderr, "Ignoring PCI device with non-16bit domain.\nPass --enable-32bits-pci-domain to configure to support such devices\n(warning: it would break the library ABI, don't enable unless really needed).\n");
6565 if (!warned && hwloc_hide_errors() < 2)
6566 fprintf(stderr, "hwloc/linux: Ignoring PCI device with non-16bit domain.\nPass --enable-32bits-pci-domain to configure to support such devices\n(warning: it would break the library ABI, don't enable unless really needed).\n");
63976567 warned = 1;
63986568 continue;
63996569 }
64146584 class_id = strtoul(value, NULL, 16) >> 8;
64156585
64166586 type = hwloc_pcidisc_check_bridge_type(class_id, config_space_cache);
6417
6587 /* only HWLOC_OBJ_BRIDGE for bridges to-PCI */
64186588 if (type == HWLOC_OBJ_BRIDGE) {
64196589 /* since 4.13, there's secondary_bus_number and subordinate_bus_number in sysfs,
64206590 * but reading them from the config-space is easy anyway.
64546624
64556625 /* bridge specific attributes */
64566626 if (type == HWLOC_OBJ_BRIDGE) {
6627 /* assumes this is a Bridge to-PCI */
64576628 struct hwloc_bridge_attr_s *battr = &obj->attr->bridge;
64586629 battr->upstream_type = HWLOC_OBJ_BRIDGE_PCI;
64596630 battr->downstream_type = HWLOC_OBJ_BRIDGE_PCI;
66306801 hwloc_linuxfs_lookup_dax_class(backend, osdev_flags);
66316802 hwloc_linuxfs_lookup_net_class(backend, osdev_flags);
66326803 hwloc_linuxfs_lookup_infiniband_class(backend, osdev_flags);
6804 hwloc_linuxfs_lookup_ve_class(backend, osdev_flags);
66336805 if (ofilter != HWLOC_TYPE_FILTER_KEEP_IMPORTANT) {
66346806 hwloc_linuxfs_lookup_drm_class(backend, osdev_flags);
66356807 hwloc_linuxfs_lookup_dma_class(backend, osdev_flags);
67286900 goto out_with_data;
67296901 }
67306902 #else
6731 fprintf(stderr, "Cannot change Linux fsroot without openat() support.\n");
6903 if (hwloc_hide_errors() < 2)
6904 fprintf(stderr, "hwloc/linux: Cannot change fsroot without openat() support.\n");
67326905 errno = ENOSYS;
67336906 goto out_with_data;
67346907 #endif
00 /*
1 * Copyright © 2012-2020 Inria. All rights reserved.
1 * Copyright © 2012-2021 Inria. All rights reserved.
22 * See COPYING in top-level directory.
33 */
44
1111 #include "private/debug.h"
1212
1313 #include <nvml.h>
14
15
16 #ifdef NVML_NVLINK_MAX_LINKS
17
18 static unsigned
19 hwloc__nvml_get_peer_gpu_by_pci(nvmlPciInfo_t peer, unsigned nb, nvmlPciInfo_t *gpus)
20 {
21 unsigned i;
22 for(i=0; i<nb; i++)
23 if (gpus[i].domain == peer.domain && gpus[i].bus == peer.bus && gpus[i].device == peer.device)
24 return i;
25 return (unsigned)-1;
26 }
27
28 static hwloc_obj_t
29 hwloc__nvml_get_peer_obj_by_pci(struct hwloc_topology *topology, hwloc_obj_t gpu, nvmlPciInfo_t peer_bdf)
30 {
31 hwloc_obj_t obj;
32
33 /* we want the exact object here because we'll use it PCI class below
34 * (we can't use hwloc_pci_find_parent_by_busid() which is enough for inserting OSdev by locality).
35 */
36 obj = hwloc_pci_find_by_busid(topology, peer_bdf.domain, peer_bdf.bus, peer_bdf.device, 0);
37 if (!obj) {
38 enum hwloc_type_filter_e pfilter;
39 hwloc_topology_get_type_filter(topology, HWLOC_OBJ_PCI_DEVICE, &pfilter);
40 /* we need PCI devices to be filtered-in */
41 if (pfilter != HWLOC_TYPE_FILTER_KEEP_NONE) {
42 static int warned = 0;
43 if (!warned && !hwloc_hide_errors())
44 fprintf(stderr, "hwloc failed to find NVLink peer %04x:%02x:%02x\n",
45 peer_bdf.domain, peer_bdf.bus, peer_bdf.device);
46 warned = 1;
47 } else {
48 static int warned = 0;
49 if (!warned)
50 hwloc_debug("hwloc failed to find NVLink peer %04x:%02x:%02x because PCI devices are filtered-out\n",
51 peer_bdf.domain, peer_bdf.bus, peer_bdf.device);
52 warned = 1;
53 }
54 return NULL;
55 }
56
57 /* We want a non-PCI bridge.
58 * On POWER8/9, it's class 0680 vendor 1014 (IBM) model 04ea prog-if 00.
59 * For NVSwitch, it's class 0680 with prog-if 01 vendor 10de (NVIDIA).
60 * Baseclass 0x06 is enough to avoid GPUs (baseclass 0x03),
61 * and that's needed because some GPUs may be hidden from us because of cgroups.
62 */
63 if (obj->type != HWLOC_OBJ_PCI_DEVICE || (obj->attr->pcidev.class_id >> 8 != 0x06))
64 return NULL;
65
66 switch (obj->attr->pcidev.vendor_id) {
67 case 0x1014: {
68 /* IBM OpenCAPI port, return the CPU object. */
69 if (!getenv("HWLOC_NVML_USE_OPENCAPI_LOCALITY")) {
70 /* OpenCAPI Bridge PCI locality is wrong on POWER8 (equal to the entire machine).
71 * Both POWER8 and POWER9 have correct GPU locality, use that one instead.
72 * This will only break if PCI and NVLink are not connected to the same location, unlikely.
73 */
74 obj = gpu;
75 }
76 /* return a CPU side parent */
77 while (!obj->cpuset)
78 obj = obj->parent;
79 return obj;
80 }
81 case 0x10de: {
82 /* NVIDIA NVSwitch, return the PCI object, we don't have anything better.
83 * Mark it as subtype NVSwitch so that the core doesn't remove it.
84 */
85 if (!obj->subtype)
86 obj->subtype = strdup("NVSwitch");
87 return obj;
88 }
89 default: {
90 static int warned = 0;
91 if (!warned && !hwloc_hide_errors())
92 fprintf(stderr, "hwloc failed to recognize NVLink peer %04x:%02x:%02x class %04x vendor %04x device %04x\n",
93 peer_bdf.domain, peer_bdf.bus, peer_bdf.device,
94 obj->attr->pcidev.class_id, obj->attr->pcidev.vendor_id, obj->attr->pcidev.device_id);
95 warned = 1;
96 return NULL;
97 }
98 }
99 }
100
101 static unsigned
102 hwloc__nvml_store_peer_obj(hwloc_obj_t obj,
103 unsigned nbgpus, unsigned *nbobjs, hwloc_obj_t *objs)
104 {
105 unsigned i;
106 /* is it already in the array? */
107 for(i=nbgpus; i<*nbobjs; i++)
108 if (objs[i] == obj)
109 return i;
110 /* append it */
111 objs[*nbobjs] = obj;
112 return (*nbobjs)++;
113 }
114
115 static int
116 hwloc__nvml_add_nvlink_bandwidth(hwloc_topology_t topology,
117 unsigned nbobjs, hwloc_obj_t *objs, hwloc_uint64_t *bws)
118 {
119 void *handle;
120 int err;
121
122 handle = hwloc_backend_distances_add_create(topology, "NVLinkBandwidth",
123 HWLOC_DISTANCES_KIND_FROM_OS|HWLOC_DISTANCES_KIND_MEANS_BANDWIDTH,
124 0);
125 if (!handle)
126 goto out;
127
128 err = hwloc_backend_distances_add_values(topology, handle, nbobjs, objs, bws, 0);
129 if (err < 0)
130 goto out;
131 /* arrays are now attached to the handle */
132 objs = NULL;
133 bws = NULL;
134
135 err = hwloc_backend_distances_add_commit(topology, handle, 0 /* don't group GPUs */);
136 if (err < 0)
137 goto out;
138
139 return 0;
140
141 out:
142 free(objs);
143 free(bws);
144 return -1;
145 }
146 #endif /* NVML_NVLINK_MAX_LINKS */
147
14148
15149 static int
16150 hwloc_nvml_discover(struct hwloc_backend *backend, struct hwloc_disc_status *dstatus)
25159 enum hwloc_type_filter_e filter;
26160 nvmlReturn_t ret;
27161 unsigned nb, i;
162 #ifdef NVML_NVLINK_MAX_LINKS
163 unsigned nbobjs, j;
164 hwloc_obj_t *objs;
165 unsigned *peer_indexes;
166 nvmlPciInfo_t *gpu_bdfs;
167 hwloc_uint64_t *bws;
168 int found_nvlinks = 0;
169 #endif
28170
29171 assert(dstatus->phase == HWLOC_DISC_PHASE_IO);
30172
36178 if (NVML_SUCCESS != ret) {
37179 if (!hwloc_hide_errors()) {
38180 const char *error = nvmlErrorString(ret);
39 fprintf(stderr, "NVML: Failed to initialize with nvmlInit(): %s\n", error);
181 fprintf(stderr, "hwloc/nvml: Failed to initialize with nvmlInit(): %s\n", error);
40182 }
41183 return -1;
42184 }
45187 nvmlShutdown();
46188 return 0;
47189 }
190
191 #ifdef NVML_NVLINK_MAX_LINKS
192 /* the PCI BDF of each GPU */
193 gpu_bdfs = calloc(nb, sizeof(*gpu_bdfs));
194 /* the nvlink matrix will require one slot per GPU and possibly additional slots for non-GPU endpoints,
195 * usually one per CPU, but let's take an easy upper bound.
196 */
197 objs = calloc(nb * NVML_NVLINK_MAX_LINKS, sizeof(*objs));
198 bws = calloc(nb * NVML_NVLINK_MAX_LINKS * nb * NVML_NVLINK_MAX_LINKS, sizeof(*bws));
199 /* array to translate peer of i-th link of j-th GPU into an peer object index inside objs */
200 peer_indexes = calloc(nb * NVML_NVLINK_MAX_LINKS, sizeof(*peer_indexes));
201 if (!gpu_bdfs || !objs || !gpu_bdfs || !bws || !peer_indexes) {
202 free(gpu_bdfs);
203 free(objs);
204 free(bws);
205 free(peer_indexes);
206 return -1;
207 }
208 #endif
48209
49210 for(i=0; i<nb; i++) {
50211 nvmlPciInfo_t pci;
58219 osdev = hwloc_alloc_setup_object(topology, HWLOC_OBJ_OS_DEVICE, HWLOC_UNKNOWN_INDEX);
59220 snprintf(buffer, sizeof(buffer), "nvml%u", i);
60221 osdev->name = strdup(buffer);
222 osdev->subtype = strdup("NVML");
61223 osdev->depth = HWLOC_TYPE_DEPTH_UNKNOWN;
62224 osdev->attr->osdev.type = HWLOC_OBJ_OSDEV_GPU;
63225
81243
82244 parent = NULL;
83245 if (NVML_SUCCESS == nvmlDeviceGetPciInfo(device, &pci)) {
246 #ifdef NVML_NVLINK_MAX_LINKS
247 gpu_bdfs[i] = pci;
248 #endif
84249 parent = hwloc_pci_find_parent_by_busid(topology, pci.domain, pci.bus, pci.device, 0);
85250 #if HAVE_DECL_NVMLDEVICEGETMAXPCIELINKGENERATION
86251 if (parent && parent->type == HWLOC_OBJ_PCI_DEVICE) {
103268 parent = hwloc_get_root_obj(topology);
104269
105270 hwloc_insert_object_by_parent(topology, parent, osdev);
106 }
271 #ifdef NVML_NVLINK_MAX_LINKS
272 objs[i] = osdev;
273 #endif
274 }
275
276 #ifdef NVML_NVLINK_MAX_LINKS
277 nbobjs = nb;
278
279 /* list peer objects */
280 for(i=0; i<nb; i++) {
281 /* look at nvlinks */
282 nvmlDevice_t device;
283 nvmlPciInfo_t pci;
284
285 ret = nvmlDeviceGetHandleByIndex(i, &device);
286 assert(ret == NVML_SUCCESS);
287
288 hwloc_debug("looking at NVLinks for NVML GPU #%u...\n", i);
289 for(j=0; j<NVML_NVLINK_MAX_LINKS; j++) {
290 nvmlEnableState_t isActive;
291
292 /* mark the peer as unknown for now */
293 peer_indexes[i*NVML_NVLINK_MAX_LINKS+j] = (unsigned) -1;
294
295 ret = nvmlDeviceGetNvLinkState(device, j, &isActive);
296 if (ret != NVML_SUCCESS)
297 break;
298 if (isActive != NVML_FEATURE_ENABLED)
299 continue;
300 found_nvlinks++;
301 hwloc_debug(" NVLink #%u is active\n", j);
302
303 ret = nvmlDeviceGetNvLinkRemotePciInfo(device, j, &pci);
304 if (ret == NVML_SUCCESS) {
305 unsigned peer_index;
306 hwloc_debug(" goes to PCI %04x:%02x:%02x\n", pci.domain, pci.bus, pci.device);
307 peer_index = hwloc__nvml_get_peer_gpu_by_pci(pci, nb, gpu_bdfs);
308 if (peer_index == (unsigned)-1) {
309 hwloc_obj_t peer_obj = hwloc__nvml_get_peer_obj_by_pci(topology, objs[i], pci);
310 if (!peer_obj)
311 continue;
312
313 peer_index = hwloc__nvml_store_peer_obj(peer_obj, nb, &nbobjs, objs);
314 hwloc_debug(" adding NVML peer index #%u\n", peer_index);
315 } else {
316 hwloc_debug(" reusing NVML peer index #%u\n", peer_index);
317 }
318 peer_indexes[i*NVML_NVLINK_MAX_LINKS+j] = peer_index;
319 }
320 }
321 }
322 hwloc_debug("NVML found %u GPUs within %u peers total, with %u nvlinks total\n", nb, nbobjs, found_nvlinks);
323
324 if (found_nvlinks) {
325 /* now build the matrix */
326 found_nvlinks = 0; /* reset back in case the version is unknown below and the matrix remains empty */
327 for(i=0; i<nb; i++) {
328 nvmlDevice_t device;
329 ret = nvmlDeviceGetHandleByIndex(i, &device);
330 assert(ret == NVML_SUCCESS);
331
332 for(j=0; j<NVML_NVLINK_MAX_LINKS; j++) {
333 unsigned version;
334 hwloc_uint64_t bw;
335 unsigned peer_index = peer_indexes[i*NVML_NVLINK_MAX_LINKS+j];
336
337 if (peer_index == (unsigned)-1)
338 continue;
339
340 /* For GPU-to-GPU link, we'll get info for both direction, while GPU-to-CPU info is unique.
341 * Only store once on both sides of diagonal.
342 */
343 if (peer_index < i)
344 continue;
345
346 ret = nvmlDeviceGetNvLinkVersion(device, j, &version);
347 if (ret != NVML_SUCCESS)
348 continue;
349
350 hwloc_debug("GPU #%u NVLink #%u has version %u\n", i, j, version);
351 /* version1 = 20GB/s, version2=25GB/s */
352 if (version == 1) {
353 bw = 20000; /* multiple links may connect same GPUs */
354 } else if (version == 2) {
355 bw = 25000; /* multiple links may connect same GPUs */
356 } else {
357 static int warned = 0;
358 if (!warned && !hwloc_hide_errors())
359 fprintf(stderr, "Failed to recognize NVLink version %u\n", version);
360 warned = 1;
361 continue;
362 }
363
364 bws[i*nbobjs+peer_index] += bw;
365 bws[peer_index*nbobjs+i] += bw;
366 found_nvlinks++;
367 }
368 }
369 if (found_nvlinks) {
370 /* add very high artifical values on the diagonal since local is faster than remote.
371 * there are 6 link per GPU max for now, 150GB/s, use 1TB/s for local, it somehow matches the HBM.
372 */
373 for(i=0; i<nbobjs; i++)
374 bws[i*nbobjs+i] = 1000000;
375
376 hwloc__nvml_add_nvlink_bandwidth(topology, nbobjs, objs, bws);
377 /* matrices don't need to be freed anymore */
378 objs = NULL;
379 bws = NULL;
380 }
381 }
382 free(objs);
383 free(bws);
384 free(gpu_bdfs);
385 free(peer_indexes);
386 #endif /* NVML_NVLINK_MAX_LINKS */
107387
108388 nvmlShutdown();
109389 return 0;
00 /*
1 * Copyright © 2012-2020 Inria. All rights reserved.
1 * Copyright © 2012-2021 Inria. All rights reserved.
22 * Copyright © 2013, 2018 Université Bordeaux. All right reserved.
33 * See COPYING in top-level directory.
44 */
6161 clret = clGetPlatformIDs(0, NULL, &nr_platforms);
6262 if (CL_SUCCESS != clret || !nr_platforms) {
6363 if (CL_SUCCESS != clret && HWLOC_CL_PLATFORM_NOT_FOUND_KHR != clret && !hwloc_hide_errors()) {
64 fprintf(stderr, "OpenCL: Failed to get number of platforms with clGetPlatformIDs(): %d\n", clret);
64 fprintf(stderr, "hwloc/opencl: Failed to get number of platforms with clGetPlatformIDs(): %d\n", clret);
6565 }
6666 return -1;
6767 }
108108 hwloc_debug("This is opencl%ud%u\n", j, i);
109109
110110 clGetDeviceInfo(device_ids[i], CL_DEVICE_TYPE, sizeof(type), &type, NULL);
111 /* type is a bitset, remove DEFAULT, we don't care about it */
112 type &= ~CL_DEVICE_TYPE_DEFAULT;
113
114 /* we don't want CPU-only opencl devices */
111115 if (type == CL_DEVICE_TYPE_CPU)
112 /* we don't want CPU opencl devices */
113116 continue;
114117
115118 osdev = hwloc_alloc_setup_object(topology, HWLOC_OBJ_OS_DEVICE, HWLOC_UNKNOWN_INDEX);
121124 osdev->subtype = strdup("OpenCL");
122125 hwloc_obj_add_info(osdev, "Backend", "OpenCL");
123126
124 if (type == CL_DEVICE_TYPE_GPU)
127 /* in theory, we should handle cases such GPU|Accelerator|CPU for strange platforms/devices */
128 if (type & CL_DEVICE_TYPE_GPU)
125129 hwloc_obj_add_info(osdev, "OpenCLDeviceType", "GPU");
126 else if (type == CL_DEVICE_TYPE_ACCELERATOR)
130 else if (type & CL_DEVICE_TYPE_ACCELERATOR)
127131 hwloc_obj_add_info(osdev, "OpenCLDeviceType", "Accelerator");
128 else if (type == HWLOC_CL_DEVICE_TYPE_CUSTOM)
129 hwloc_obj_add_info(osdev, "OpenCLDeviceType", "Custom");
132 else if (type & HWLOC_CL_DEVICE_TYPE_CUSTOM)
133 hwloc_obj_add_info(osdev, "OpenCLDeviceType", "Custom"); /* Custom cannot be combined with any other type */
130134 else
131135 hwloc_obj_add_info(osdev, "OpenCLDeviceType", "Unknown");
132136
00 /*
11 * Copyright © 2009 CNRS
2 * Copyright © 2009-2020 Inria. All rights reserved.
2 * Copyright © 2009-2021 Inria. All rights reserved.
33 * Copyright © 2009-2011, 2013 Université Bordeaux
44 * Copyright © 2014-2018 Cisco Systems, Inc. All rights reserved.
55 * Copyright © 2015 Research Organization for Information Science
175175 if (ret) {
176176 HWLOC_PCIACCESS_UNLOCK();
177177 if (!hwloc_hide_errors())
178 fprintf(stderr, "PCI: Failed to initialize libpciaccess with pci_system_init(): %d (%s)\n",
178 fprintf(stderr, "hwloc/pci: Failed to initialize libpciaccess with pci_system_init(): %d (%s)\n",
179179 ret, strerror(errno));
180180 return -1;
181181 }
204204 #ifndef HWLOC_HAVE_32BITS_PCI_DOMAIN
205205 if (domain > 0xffff) {
206206 static int warned = 0;
207 if (!warned && !hwloc_hide_errors())
208 fprintf(stderr, "Ignoring PCI device with non-16bit domain.\nPass --enable-32bits-pci-domain to configure to support such devices\n(warning: it would break the library ABI, don't enable unless really needed).\n");
207 if (!warned && hwloc_hide_errors() < 2)
208 fprintf(stderr, "hwloc/pci: Ignoring PCI device with non-16bit domain.\nPass --enable-32bits-pci-domain to configure to support such devices\n(warning: it would break the library ABI, don't enable unless really needed).\n");
209209 warned = 1;
210210 continue;
211211 }
221221
222222 /* bridge or pci dev? */
223223 type = hwloc_pcidisc_check_bridge_type(device_class, config_space_cache);
224 /* only HWLOC_OBJ_BRIDGE for bridges to-PCI */
224225 if (type == HWLOC_OBJ_BRIDGE) {
225226 if (hwloc_pcidisc_find_bridge_buses(domain, bus, dev, func,
226227 &secondary_bus, &subordinate_bus,
309310
310311 /* bridge specific attributes */
311312 if (type == HWLOC_OBJ_BRIDGE) {
313 /* assumes this is a Bridge to-PCI */
312314 struct hwloc_bridge_attr_s *battr = &obj->attr->bridge;
313315 battr->upstream_type = HWLOC_OBJ_BRIDGE_PCI;
314316 battr->downstream_type = HWLOC_OBJ_BRIDGE_PCI;
00 /*
1 * Copyright © 2012-2020 Inria. All rights reserved.
1 * Copyright © 2012-2021 Inria. All rights reserved.
22 * Copyright (c) 2020, Advanced Micro Devices, Inc. All rights reserved.
33 * Written by Advanced Micro Devices,
44 * See COPYING in top-level directory.
1414
1515 #include <rocm_smi/rocm_smi.h>
1616
17 static int
18 hwloc__rsmi_add_xgmi_bandwidth(hwloc_topology_t topology,
19 unsigned nbobjs, hwloc_obj_t *objs, hwloc_uint64_t *bws)
20 {
21 void *handle;
22 int err;
23
24 handle = hwloc_backend_distances_add_create(topology, "XGMIBandwidth",
25 HWLOC_DISTANCES_KIND_FROM_OS|HWLOC_DISTANCES_KIND_MEANS_BANDWIDTH,
26 0);
27 if (!handle)
28 goto out;
29
30 err = hwloc_backend_distances_add_values(topology, handle, nbobjs, objs, bws, 0);
31 if (err < 0)
32 goto out;
33 /* arrays are now attached to the handle */
34 objs = NULL;
35 bws = NULL;
36
37 err = hwloc_backend_distances_add_commit(topology, handle, 0 /* don't group GPUs */);
38 if (err < 0)
39 goto out;
40
41 return 0;
42
43 out:
44 free(objs);
45 free(bws);
46 return -1;
47 }
48
1749 /*
1850 * Get the name of the GPU
1951 *
2961 if (!hwloc_hide_errors()) {
3062 const char *status_string;
3163 rsmi_rc = rsmi_status_string(rsmi_rc, &status_string);
32 fprintf(stderr, "RSMI: GPU(%u): Failed to get name: %s\n", (unsigned)dv_ind, status_string);
64 fprintf(stderr, "hwloc/rsmi: GPU(%u): Failed to get name: %s\n", (unsigned)dv_ind, status_string);
3365 }
3466 return -1;
3567 }
5082 if (!hwloc_hide_errors()) {
5183 const char *status_string;
5284 rsmi_rc = rsmi_status_string(rsmi_rc, &status_string);
53 fprintf(stderr, "RSMI: GPU(%u): Failed to get PCI Info: %s\n", (unsigned)dv_ind, status_string);
85 fprintf(stderr, "hwloc/rsmi: GPU(%u): Failed to get PCI Info: %s\n", (unsigned)dv_ind, status_string);
5486 }
5587 return -1;
5688 }
131163 if (!hwloc_hide_errors()) {
132164 const char *status_string;
133165 rsmi_rc = rsmi_status_string(rsmi_rc, &status_string);
134 fprintf(stderr, "RSMI: GPU(%u): Failed to get hive id: %s\n", (unsigned)dv_ind, status_string);
166 fprintf(stderr, "hwloc/rsmi: GPU(%u): Failed to get hive id: %s\n", (unsigned)dv_ind, status_string);
135167 }
136168 return -1;
137169 }
157189 if (!hwloc_hide_errors()) {
158190 const char *status_string;
159191 rsmi_rc = rsmi_status_string(rsmi_rc, &status_string);
160 fprintf(stderr, "RSMI: GPU(%u): Failed to get link type: %s\n", (unsigned)dv_ind_src, status_string);
192 fprintf(stderr, "hwloc/rsmi: GPU(%u): Failed to get link type: %s\n", (unsigned)dv_ind_src, status_string);
161193 }
162194 return -1;
163195 }
175207
176208 struct hwloc_topology *topology = backend->topology;
177209 enum hwloc_type_filter_e filter;
210 hwloc_obj_t *osdevs = NULL;
211 hwloc_uint64_t *xgmi_bws = NULL;
212 int got_xgmi_bws = 0;
178213 rsmi_version_t version;
179214 rsmi_status_t ret;
180215 int may_shutdown;
191226 if (!hwloc_hide_errors()) {
192227 const char *status_string;
193228 rsmi_status_string(ret, &status_string);
194 fprintf(stderr, "RSMI: Failed to initialize with rsmi_init(): %s\n", status_string);
229 fprintf(stderr, "hwloc/rsmi: Failed to initialize with rsmi_init(): %s\n", status_string);
195230 }
196231 return 0;
197232 }
203238 if (RSMI_STATUS_SUCCESS != ret && !hwloc_hide_errors()) {
204239 const char *status_string;
205240 rsmi_status_string(ret, &status_string);
206 fprintf(stderr, "RSMI: Failed to get number of devices with rsmi_num_monitor_devices(): %s\n", status_string);
207 }
208 rsmi_shut_down();
209 return 0;
210 }
241 fprintf(stderr, "hwloc/rsmi: Failed to get number of devices with rsmi_num_monitor_devices(): %s\n", status_string);
242 }
243 goto out;
244 }
245
246 osdevs = malloc(nb *sizeof(*osdevs));
247 xgmi_bws = calloc(nb*nb, sizeof(*xgmi_bws));
248 if (!osdevs || !xgmi_bws)
249 goto out;
211250
212251 for (i=0; i<nb; i++) {
213252 uint64_t bdfid = 0;
219258 osdev = hwloc_alloc_setup_object(topology, HWLOC_OBJ_OS_DEVICE, HWLOC_UNKNOWN_INDEX);
220259 snprintf(buffer, sizeof(buffer), "rsmi%u", i);
221260 osdev->name = strdup(buffer);
261 osdev->subtype = strdup("RSMI");
222262 osdev->depth = HWLOC_TYPE_DEPTH_UNKNOWN;
223263 osdev->attr->osdev.type = HWLOC_OBJ_OSDEV_GPU;
224264
252292 if ((get_device_io_link_type(i, j, &type) == 0) &&
253293 (type == RSMI_IOLINK_TYPE_XGMI)) {
254294 xgmi_peers_ptr += sprintf(xgmi_peers_ptr, "rsmi%u ", j);
255 }
256 if (xgmi_peers[0] != '\0')
257 hwloc_obj_add_info(osdev, "XGMIPeers", xgmi_peers);
295 xgmi_bws[i*nb+j] = 100000; /* TODO: verify the XGMI version before putting 100GB/s here? */
296 got_xgmi_bws = 1;
297 }
298 if (xgmi_peers[0] != '\0')
299 hwloc_obj_add_info(osdev, "XGMIPeers", xgmi_peers);
258300 }
259301 free(xgmi_peers);
260302 }
274316 }
275317
276318 hwloc_insert_object_by_parent(topology, parent, osdev);
277 }
278
319 osdevs[i] = osdev;
320 }
321
322 if (got_xgmi_bws) {
323 /* add very high artifical values on the diagonal since local is faster than remote.
324 * XGMI links are 100GB/s, so use 1TB/s for local, it somehow matches the HBM.
325 */
326 for(i=0; i<nb; i++)
327 xgmi_bws[i*nb+i] = 1000000;
328
329 hwloc__rsmi_add_xgmi_bandwidth(topology, nb, osdevs, xgmi_bws);
330 /* don't free arrays, they were given to the distance internals */
331 osdevs = NULL;
332 xgmi_bws = NULL;
333 }
334
335 out:
279336 may_shutdown = 0;
280337 if (version.major > 3 || (version.major == 3 && version.minor > 3)) {
281338 may_shutdown = 1;
290347 if (may_shutdown)
291348 rsmi_shut_down();
292349
350 free(osdevs);
351 free(xgmi_bws);
293352 return 0;
294353 }
295354
00 /*
11 * Copyright © 2009 CNRS
2 * Copyright © 2009-2020 Inria. All rights reserved.
2 * Copyright © 2009-2021 Inria. All rights reserved.
33 * Copyright © 2009-2011 Université Bordeaux
44 * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
55 * Copyright © 2011 Oracle and/or its affiliates. All rights reserved.
638638
639639 if (kstat_read(kc, ksp, NULL) == -1)
640640 {
641 fprintf(stderr, "kstat_read failed for CPU%u: %s\n", cpuid, strerror(errno));
641 if (hwloc_hide_errors() < 2)
642 fprintf(stderr, "hwloc/solaris: kstat_read failed for CPU%u: %s\n", cpuid, strerror(errno));
642643 continue;
643644 }
644645
695696 stat = (kstat_named_t *) kstat_data_lookup(ksp, (char *) "chip_id");
696697 if (!stat)
697698 {
698 if (Lpkg_num)
699 fprintf(stderr, "could not read package id for CPU%u: %s\n", cpuid, strerror(errno));
700 else
699 if (Lpkg_num) {
700 if (hwloc_hide_errors() < 2)
701 fprintf(stderr, "hwloc/solaris: could not read package id for CPU%u: %s\n", cpuid, strerror(errno));
702 } else {
701703 hwloc_debug("could not read package id for CPU%u: %s\n", cpuid, strerror(errno));
704 }
702705 look_chips = 0;
703706 continue;
704707 }
718721 break;
719722 #endif
720723 default:
721 fprintf(stderr, "chip_id type %u unknown\n", (unsigned) stat->data_type);
724 if (hwloc_hide_errors() < 2)
725 fprintf(stderr, "hwloc/solaris: chip_id type %u unknown\n", (unsigned) stat->data_type);
722726 look_chips = 0;
723727 continue;
724728 }
745749 stat = (kstat_named_t *) kstat_data_lookup(ksp, (char *) "core_id");
746750 if (!stat)
747751 {
748 if (Lcore_num)
749 fprintf(stderr, "could not read core id for CPU%u: %s\n", cpuid, strerror(errno));
750 else
752 if (Lcore_num) {
753 if (hwloc_hide_errors() < 2)
754 fprintf(stderr, "hwloc/solaris: could not read core id for CPU%u: %s\n", cpuid, strerror(errno));
755 } else {
751756 hwloc_debug("could not read core id for CPU%u: %s\n", cpuid, strerror(errno));
757 }
752758 look_cores = 0;
753759 continue;
754760 }
768774 break;
769775 #endif
770776 default:
771 fprintf(stderr, "core_id type %u unknown\n", (unsigned) stat->data_type);
777 if (hwloc_hide_errors() < 2)
778 fprintf(stderr, "hwloc/solaris: core_id type %u unknown\n", (unsigned) stat->data_type);
772779 look_cores = 0;
773780 continue;
774781 }
796803
797804 } else if (!strcmp("pg_hw_perf", ksp->ks_module)) {
798805 if (kstat_read(kc, ksp, NULL) == -1) {
799 fprintf(stderr, "kstat_read failed for module %s name %s instance %d: %s\n", ksp->ks_module, ksp->ks_name, ksp->ks_instance, strerror(errno));
806 if (hwloc_hide_errors() < 2)
807 fprintf(stderr, "hwloc/solaris: kstat_read failed for module %s name %s instance %d: %s\n", ksp->ks_module, ksp->ks_name, ksp->ks_instance, strerror(errno));
800808 continue;
801809 }
802810 stat = (kstat_named_t *) kstat_data_lookup(ksp, (char *) "cpus");
00 /*
11 * Copyright © 2009 CNRS
2 * Copyright © 2009-2020 Inria. All rights reserved.
2 * Copyright © 2009-2021 Inria. All rights reserved.
33 * Copyright © 2009-2012, 2020 Université Bordeaux
44 * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
55 * See COPYING in top-level directory.
1010
1111 #include "private/autogen/config.h"
1212 #include "hwloc.h"
13 #include "hwloc/windows.h"
1314 #include "private/private.h"
1415 #include "private/debug.h"
1516
188189
189190 typedef WORD (WINAPI *PFN_GETACTIVEPROCESSORGROUPCOUNT)(void);
190191 static PFN_GETACTIVEPROCESSORGROUPCOUNT GetActiveProcessorGroupCountProc;
191
192 static unsigned long nr_processor_groups = 1;
193 static unsigned long max_numanode_index = 0;
194192
195193 typedef WORD (WINAPI *PFN_GETACTIVEPROCESSORCOUNT)(WORD);
196194 static PFN_GETACTIVEPROCESSORCOUNT GetActiveProcessorCountProc;
269267 (PFN_VIRTUALFREEEX) GetProcAddress(kernel32, "VirtualFreeEx");
270268 }
271269
272 if (GetActiveProcessorGroupCountProc)
273 nr_processor_groups = GetActiveProcessorGroupCountProc();
274
275270 if (!QueryWorkingSetExProc) {
276271 HMODULE psapi = LoadLibrary("psapi.dll");
277272 if (psapi)
359354 return -1;
360355 *mask = hwloc_bitmap_to_ith_ULONG_PTR(set, first_ulp);
361356 *index = first_ulp;
357 return 0;
358 }
359
360 /**********************
361 * Processor Groups
362 */
363
364 static unsigned long max_numanode_index = 0;
365
366 static unsigned long nr_processor_groups = 1;
367 static hwloc_cpuset_t * processor_group_cpusets = NULL;
368
369 static void
370 hwloc_win_get_processor_groups(void)
371 {
372 PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX procInfoTotal, tmpprocInfoTotal, procInfo;
373 DWORD length;
374 unsigned i;
375
376 hwloc_debug("querying windows processor groups\n");
377
378 if (!GetActiveProcessorGroupCountProc || !GetLogicalProcessorInformationExProc)
379 goto error;
380
381 nr_processor_groups = GetActiveProcessorGroupCountProc();
382 if (!nr_processor_groups)
383 goto error;
384
385 length = 0;
386 procInfoTotal = NULL;
387
388 while (1) {
389 if (GetLogicalProcessorInformationExProc(RelationGroup, procInfoTotal, &length))
390 break;
391 if (GetLastError() != ERROR_INSUFFICIENT_BUFFER)
392 goto error;
393 tmpprocInfoTotal = realloc(procInfoTotal, length);
394 if (!tmpprocInfoTotal)
395 goto error_with_procinfo;
396 procInfoTotal = tmpprocInfoTotal;
397 }
398
399 processor_group_cpusets = calloc(nr_processor_groups, sizeof(*processor_group_cpusets));
400 if (!processor_group_cpusets)
401 goto error_with_procinfo;
402 hwloc_debug("found %lu windows processor groups\n", nr_processor_groups);
403
404 for (procInfo = procInfoTotal;
405 (void*) procInfo < (void*) ((uintptr_t) procInfoTotal + length);
406 procInfo = (void*) ((uintptr_t) procInfo + procInfo->Size)) {
407 unsigned id;
408
409 assert(procInfo->Relationship == RelationGroup);
410
411 for (id = 0; id < procInfo->Group.ActiveGroupCount; id++) {
412 KAFFINITY mask;
413 hwloc_bitmap_t set;
414
415 set = hwloc_bitmap_alloc();
416 if (!set)
417 goto error_with_cpusets;
418
419 mask = procInfo->Group.GroupInfo[id].ActiveProcessorMask;
420 hwloc_debug("group %u %d cpus mask %lx\n", id,
421 procInfo->Group.GroupInfo[id].ActiveProcessorCount, mask);
422 /* KAFFINITY is ULONG_PTR */
423 hwloc_bitmap_set_ith_ULONG_PTR(set, id, mask);
424 /* FIXME: what if running 32bits on a 64bits windows with 64-processor groups?
425 * ULONG_PTR is 32bits, so half the group is invisible?
426 * maybe scale id to id*8/sizeof(ULONG_PTR) so that groups are 64-PU aligned?
427 */
428 hwloc_debug_2args_bitmap("group %u %d bitmap %s\n", id, procInfo->Group.GroupInfo[id].ActiveProcessorCount, set);
429 processor_group_cpusets[id] = set;
430 }
431 }
432
433 free(procInfoTotal);
434 return;
435
436 error_with_cpusets:
437 for(i=0; i<nr_processor_groups; i++) {
438 if (processor_group_cpusets[i])
439 hwloc_bitmap_free(processor_group_cpusets[i]);
440 }
441 free(processor_group_cpusets);
442 processor_group_cpusets = NULL;
443 error_with_procinfo:
444 free(procInfoTotal);
445 error:
446 /* on error set nr to 1 and keep cpusets NULL. We'll use the topology cpuset whenever needed */
447 nr_processor_groups = 1;
448 }
449
450 static void
451 hwloc_win_free_processor_groups(void)
452 {
453 unsigned i;
454 for(i=0; i<nr_processor_groups; i++) {
455 if (processor_group_cpusets[i])
456 hwloc_bitmap_free(processor_group_cpusets[i]);
457 }
458 free(processor_group_cpusets);
459 processor_group_cpusets = NULL;
460 nr_processor_groups = 1;
461 }
462
463
464 int
465 hwloc_windows_get_nr_processor_groups(hwloc_topology_t topology, unsigned long flags)
466 {
467 if (!topology->is_loaded || !topology->is_thissystem) {
468 errno = EINVAL;
469 return -1;
470 }
471
472 if (flags) {
473 errno = EINVAL;
474 return -1;
475 }
476
477 return nr_processor_groups;
478 }
479
480 int
481 hwloc_windows_get_processor_group_cpuset(hwloc_topology_t topology, unsigned pg_index, hwloc_cpuset_t cpuset, unsigned long flags)
482 {
483 if (!topology->is_loaded || !topology->is_thissystem) {
484 errno = EINVAL;
485 return -1;
486 }
487
488 if (!cpuset) {
489 errno = EINVAL;
490 return -1;
491 }
492
493 if (flags) {
494 errno = EINVAL;
495 return -1;
496 }
497
498 if (pg_index >= nr_processor_groups) {
499 errno = ENOENT;
500 return -1;
501 }
502
503 if (!processor_group_cpusets) {
504 assert(nr_processor_groups == 1);
505 /* we found no processor groups, return the entire topology as a single one */
506 hwloc_bitmap_copy(cpuset, topology->levels[0][0]->cpuset);
507 return 0;
508 }
509
510 if (!processor_group_cpusets[pg_index]) {
511 errno = ENOENT;
512 return -1;
513 }
514
515 hwloc_bitmap_copy(cpuset, processor_group_cpusets[pg_index]);
362516 return 0;
363517 }
364518
13271481 static int hwloc_windows_component_init(unsigned long flags __hwloc_attribute_unused)
13281482 {
13291483 hwloc_win_get_function_ptrs();
1484 hwloc_win_get_processor_groups();
13301485 return 0;
13311486 }
13321487
13331488 static void hwloc_windows_component_finalize(unsigned long flags __hwloc_attribute_unused)
13341489 {
1490 hwloc_win_free_processor_groups();
13351491 }
13361492
13371493 static struct hwloc_backend *
66 *
77 * This backend is only used when the operating system does not export
88 * the necessary hardware topology information to user-space applications.
9 * Currently, only the FreeBSD backend relies on this x86 backend.
9 * Currently, FreeBSD and NetBSD only add PUs and then fallback to this
10 * backend for CPU/Cache discovery.
1011 *
1112 * Other backends such as Linux have their own way to retrieve various
1213 * pieces of hardware topology information from the operating system
1314 * on various architectures, without having to use this x86-specific code.
15 * But this backend is still used after them to annotate some objects with
16 * additional details (CPU info in Package, Inclusiveness in Caches).
1417 */
1518
1619 #include "private/autogen/config.h"
12561259 look_procs(struct hwloc_backend *backend, struct procinfo *infos, unsigned long flags,
12571260 unsigned highest_cpuid, unsigned highest_ext_cpuid, unsigned *features, enum cpuid_type cpuid_type,
12581261 int (*get_cpubind)(hwloc_topology_t topology, hwloc_cpuset_t set, int flags),
1259 int (*set_cpubind)(hwloc_topology_t topology, hwloc_const_cpuset_t set, int flags))
1262 int (*set_cpubind)(hwloc_topology_t topology, hwloc_const_cpuset_t set, int flags),
1263 hwloc_bitmap_t restrict_set)
12601264 {
12611265 struct hwloc_x86_backend_data_s *data = backend->private_data;
12621266 struct hwloc_topology *topology = backend->topology;
12761280
12771281 for (i = 0; i < nbprocs; i++) {
12781282 struct cpuiddump *src_cpuiddump = NULL;
1283
1284 if (restrict_set && !hwloc_bitmap_isset(restrict_set, i)) {
1285 /* skip this CPU outside of the binding mask */
1286 continue;
1287 }
1288
12791289 if (data->src_cpuiddump_path) {
12801290 src_cpuiddump = cpuiddump_read(data->src_cpuiddump_path, i);
12811291 if (!src_cpuiddump)
14091419 int hwloc_look_x86(struct hwloc_backend *backend, unsigned long flags)
14101420 {
14111421 struct hwloc_x86_backend_data_s *data = backend->private_data;
1422 struct hwloc_topology *topology = backend->topology;
14121423 unsigned nbprocs = data->nbprocs;
14131424 unsigned eax, ebx, ecx = 0, edx;
14141425 unsigned i;
14241435 struct hwloc_topology_membind_support memsupport __hwloc_attribute_unused;
14251436 int (*get_cpubind)(hwloc_topology_t topology, hwloc_cpuset_t set, int flags) = NULL;
14261437 int (*set_cpubind)(hwloc_topology_t topology, hwloc_const_cpuset_t set, int flags) = NULL;
1438 hwloc_bitmap_t restrict_set = NULL;
14271439 struct cpuiddump *src_cpuiddump = NULL;
14281440 int ret = -1;
1441
1442 /* check if binding works */
1443 memset(&hooks, 0, sizeof(hooks));
1444 support.membind = &memsupport;
1445 /* We could just copy the main hooks (except in some corner cases),
1446 * but the current overhead is negligible, so just always reget them.
1447 */
1448 hwloc_set_native_binding_hooks(&hooks, &support);
1449 /* in theory, those are only needed if !data->src_cpuiddump_path || HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_BINDING
1450 * but that's the vast majority of cases anyway, and the overhead is very small.
1451 */
14291452
14301453 if (data->src_cpuiddump_path) {
14311454 /* Just read cpuid from the dump (implies !topology->is_thissystem by default) */
14391462 * we may still force use this backend when debugging with !thissystem.
14401463 */
14411464
1442 /* check if binding works */
1443 memset(&hooks, 0, sizeof(hooks));
1444 support.membind = &memsupport;
1445 /* We could just copy the main hooks (except in some corner cases),
1446 * but the current overhead is negligible, so just always reget them.
1447 */
1448 hwloc_set_native_binding_hooks(&hooks, &support);
14491465 if (hooks.get_thisthread_cpubind && hooks.set_thisthread_cpubind) {
14501466 get_cpubind = hooks.get_thisthread_cpubind;
14511467 set_cpubind = hooks.set_thisthread_cpubind;
14651481 }
14661482 }
14671483
1484 if (topology->flags & HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING) {
1485 restrict_set = hwloc_bitmap_alloc();
1486 if (!restrict_set)
1487 goto out;
1488 if (hooks.get_thisproc_cpubind)
1489 hooks.get_thisproc_cpubind(topology, restrict_set, 0);
1490 else if (hooks.get_thisthread_cpubind)
1491 hooks.get_thisthread_cpubind(topology, restrict_set, 0);
1492 if (hwloc_bitmap_iszero(restrict_set)) {
1493 hwloc_bitmap_free(restrict_set);
1494 restrict_set = NULL;
1495 }
1496 }
1497
14681498 if (!src_cpuiddump && !hwloc_have_x86_cpuid())
14691499 goto out;
14701500
15291559
15301560 ret = look_procs(backend, infos, flags,
15311561 highest_cpuid, highest_ext_cpuid, features, cpuid_type,
1532 get_cpubind, set_cpubind);
1562 get_cpubind, set_cpubind, restrict_set);
15331563 if (!ret)
15341564 /* success, we're done */
15351565 goto out_with_os_state;
15541584 }
15551585
15561586 out:
1587 hwloc_bitmap_free(restrict_set);
15571588 if (src_cpuiddump)
15581589 cpuiddump_free(src_cpuiddump);
15591590 return ret;
15691600 int ret;
15701601
15711602 assert(dstatus->phase == HWLOC_DISC_PHASE_CPU);
1603
1604 if (topology->flags & HWLOC_TOPOLOGY_FLAG_DONT_CHANGE_BINDING) {
1605 /* TODO: Things would work if there's a single PU, no need to rebind */
1606 return 0;
1607 }
15721608
15731609 if (getenv("HWLOC_X86_TOPOEXT_NUMANODES")) {
15741610 flags |= HWLOC_X86_DISC_FLAG_TOPOEXT_NUMANODES;
00 /*
11 * Copyright © 2009 CNRS
2 * Copyright © 2009-2020 Inria. All rights reserved.
2 * Copyright © 2009-2021 Inria. All rights reserved.
33 * Copyright © 2009-2011, 2020 Université Bordeaux
44 * Copyright © 2009-2018 Cisco Systems, Inc. All rights reserved.
55 * See COPYING in top-level directory.
191191 || lvalue == HWLOC_OBJ_CACHE_INSTRUCTION)
192192 obj->attr->cache.type = (hwloc_obj_cache_type_t) lvalue;
193193 else
194 fprintf(stderr, "%s: ignoring invalid cache_type attribute %lu\n",
195 state->global->msgprefix, lvalue);
194 if (hwloc__xml_verbose())
195 fprintf(stderr, "%s: ignoring invalid cache_type attribute %lu\n",
196 state->global->msgprefix, lvalue);
196197 } else if (hwloc__xml_verbose())
197198 fprintf(stderr, "%s: ignoring cache_type attribute for non-cache object type\n",
198199 state->global->msgprefix);
261262 #ifndef HWLOC_HAVE_32BITS_PCI_DOMAIN
262263 } else if (domain > 0xffff) {
263264 static int warned = 0;
264 if (!warned && !hwloc_hide_errors())
265 fprintf(stderr, "Ignoring PCI device with non-16bit domain.\nPass --enable-32bits-pci-domain to configure to support such devices\n(warning: it would break the library ABI, don't enable unless really needed).\n");
265 if (!warned && hwloc_hide_errors() < 2)
266 fprintf(stderr, "hwloc/xml: Ignoring PCI device with non-16bit domain.\nPass --enable-32bits-pci-domain to configure to support such devices\n(warning: it would break the library ABI, don't enable unless really needed).\n");
266267 warned = 1;
267268 *ignore = 1;
268269 #endif
336337 } else {
337338 obj->attr->bridge.upstream_type = (hwloc_obj_bridge_type_t) upstream_type;
338339 obj->attr->bridge.downstream_type = (hwloc_obj_bridge_type_t) downstream_type;
340 /* FIXME verify that upstream/downstream type is valid */
339341 };
340342 break;
341343 }
360362 #ifndef HWLOC_HAVE_32BITS_PCI_DOMAIN
361363 } else if (domain > 0xffff) {
362364 static int warned = 0;
363 if (!warned && !hwloc_hide_errors())
364 fprintf(stderr, "Ignoring bridge to PCI with non-16bit domain.\nPass --enable-32bits-pci-domain to configure to support such devices\n(warning: it would break the library ABI, don't enable unless really needed).\n");
365 if (!warned && hwloc_hide_errors() < 2)
366 fprintf(stderr, "hwloc/xml: Ignoring bridge to PCI with non-16bit domain.\nPass --enable-32bits-pci-domain to configure to support such devices\n(warning: it would break the library ABI, don't enable unless really needed).\n");
365367 warned = 1;
366368 *ignore = 1;
367369 #endif
368370 } else {
371 /* FIXME verify that downstream type vs pci info are valid */
369372 obj->attr->bridge.downstream.pci.domain = domain;
370373 obj->attr->bridge.downstream.pci.secondary_bus = secbus;
371374 obj->attr->bridge.downstream.pci.subordinate_bus = subbus;
12311234 /* next should be before cur */
12321235 if (!childrengotignored) {
12331236 static int reported = 0;
1234 if (!reported && !hwloc_hide_errors()) {
1237 if (!reported && hwloc_hide_errors() < 2) {
12351238 hwloc__xml_import_report_outoforder(topology, next, cur);
12361239 reported = 1;
12371240 }
15641567 }
15651568 }
15661569
1567 hwloc_internal_distances_add_by_index(topology, name, unique_type, different_types, nbobjs, indexes, u64values, kind, 0);
1570 hwloc_internal_distances_add_by_index(topology, name, unique_type, different_types, nbobjs, indexes, u64values, kind, 0 /* assume grouping was applied when this matrix was discovered before exporting to XML */);
15681571
15691572 /* prevent freeing below */
15701573 indexes = NULL;
26462649
26472650 logical_to_v2array = malloc(nbobjs * sizeof(*logical_to_v2array));
26482651 if (!logical_to_v2array) {
2649 fprintf(stderr, "xml/export/v1: failed to allocated logical_to_v2array\n");
2652 if (!hwloc_hide_errors())
2653 fprintf(stderr, "hwloc/xml/export/v1: failed to allocated logical_to_v2array\n");
26502654 continue;
26512655 }
26522656
5151 #include <windows.h>
5252 #endif
5353
54 /*
55 * Define ZES_ENABLE_SYSMAN=1 early so that the LevelZero backend gets Sysman enabled.
56 * Use the constructor if supported and/or the Windows DllMain callback.
57 * Do it in the main hwloc library instead of the levelzero component because
58 * the latter could be loaded later as a plugin.
59 *
60 * L0 seems to be using getenv() to check this variable on Windows
61 * (at least in the Intel Compute-Runtime of March 2021),
62 * so use putenv() to set the variable.
63 *
64 * For the record, Get/SetEnvironmentVariable() is not exactly the same as getenv/putenv():
65 * - getenv() doesn't see what was set with SetEnvironmentVariable()
66 * - GetEnvironmentVariable() doesn't see putenv() in cygwin (while it does in MSVC and MinGW).
67 * Hence, if L0 ever switches from getenv() to GetEnvironmentVariable(),
68 * it will break in cygwin, we'll have to use both putenv() and SetEnvironmentVariable().
69 * Hopefully L0 will be provide a way to enable Sysman without env vars before it happens.
70 */
71 #ifdef HWLOC_HAVE_ATTRIBUTE_CONSTRUCTOR
72 static void hwloc_constructor(void) __attribute__((constructor));
73 static void hwloc_constructor(void)
74 {
75 if (!getenv("ZES_ENABLE_SYSMAN"))
76 putenv((char *) "ZES_ENABLE_SYSMAN=1");
77 }
78 #endif
79 #ifdef HWLOC_WIN_SYS
80 BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
81 {
82 if (fdwReason == DLL_PROCESS_ATTACH) {
83 if (!getenv("ZES_ENABLE_SYSMAN"))
84 putenv((char *) "ZES_ENABLE_SYSMAN=1");
85 }
86 return TRUE;
87 }
88 #endif
89
5490 unsigned hwloc_get_api_version(void)
5591 {
5692 return HWLOC_API_VERSION;
6399
64100 int hwloc_hide_errors(void)
65101 {
66 static int hide = 0;
102 static int hide = 1; /* only show critical errors by default. lstopo will show others */
67103 static int checked = 0;
68104 if (!checked) {
69105 const char *envvar = getenv("HWLOC_HIDE_ERRORS");
105141 {
106142 static int reported = 0;
107143
108 if (reason && !reported && !hwloc_hide_errors()) {
144 if (reason && !reported && hwloc_hide_errors() < 2) {
109145 char newstr[512];
110146 char oldstr[512];
111147 report_insert_error_format_obj(newstr, sizeof(newstr), new);
23062342
23072343 child->attr->bridge.depth = depth;
23082344
2309 if (child->type == HWLOC_OBJ_BRIDGE
2310 && filter == HWLOC_TYPE_FILTER_KEEP_IMPORTANT
2311 && !child->io_first_child) {
2345 /* remove bridges that have no child,
2346 * and pci-to-non-pci bridges (pcidev) that no child either.
2347 * keep NVSwitch since they may be used in NVLink matrices.
2348 */
2349 if (filter == HWLOC_TYPE_FILTER_KEEP_IMPORTANT
2350 && !child->io_first_child
2351 && (child->type == HWLOC_OBJ_BRIDGE
2352 || (child->type == HWLOC_OBJ_PCI_DEVICE && (child->attr->pcidev.class_id >> 8) == 0x06
2353 && (!child->subtype || strcmp(child->subtype, "NVSwitch"))))) {
23122354 unlink_and_free_single_object(pchild);
23132355 topology->modified = 1;
23142356 }
30873129 tmpnbobjs = realloc(topology->level_nbobjects,
30883130 2 * topology->nb_levels_allocated * sizeof(*topology->level_nbobjects));
30893131 if (!tmplevels || !tmpnbobjs) {
3090 fprintf(stderr, "hwloc failed to realloc level arrays to %u\n", topology->nb_levels_allocated * 2);
3132 if (hwloc_hide_errors() < 2)
3133 fprintf(stderr, "hwloc: failed to realloc level arrays to %u\n", topology->nb_levels_allocated * 2);
30913134
30923135 /* if one realloc succeeded, make sure the caller will free the new buffer */
30933136 if (tmplevels)
34693512 hwloc_debug("%s", "\nRemoving empty objects\n");
34703513 remove_empty(topology, &topology->levels[0][0]);
34713514 if (!topology->levels[0][0]) {
3472 fprintf(stderr, "Topology became empty, aborting!\n");
3515 if (hwloc_hide_errors() < 2)
3516 fprintf(stderr, "hwloc: Topology became empty, aborting!\n");
34733517 return -1;
34743518 }
34753519 if (hwloc_bitmap_iszero(topology->levels[0][0]->cpuset)) {
3476 fprintf(stderr, "Topology does not contain any PU, aborting!\n");
3520 if (hwloc_hide_errors() < 2)
3521 fprintf(stderr, "hwloc: Topology does not contain any PU, aborting!\n");
34773522 return -1;
34783523 }
34793524 if (hwloc_bitmap_iszero(topology->levels[0][0]->nodeset)) {
3480 fprintf(stderr, "Topology does not contain any NUMA node, aborting!\n");
3525 if (hwloc_hide_errors() < 2)
3526 fprintf(stderr, "hwloc: Topology does not contain any NUMA node, aborting!\n");
34813527 return -1;
34823528 }
34833529 hwloc_debug_print_objects(0, topology->levels[0][0]);
37153761 return -1;
37163762 }
37173763
3718 if (flags & ~(HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED|HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM|HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES|HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT)) {
3764 if (flags & ~(HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED|HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM|HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES|HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT|HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING|HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_MEMBINDING|HWLOC_TOPOLOGY_FLAG_DONT_CHANGE_BINDING)) {
3765 errno = EINVAL;
3766 return -1;
3767 }
3768
3769 if ((flags & (HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING|HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM)) == HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING) {
3770 /* RESTRICT_TO_CPUBINDING requires THISSYSTEM for binding */
3771 errno = EINVAL;
3772 return -1;
3773 }
3774 if ((flags & (HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_MEMBINDING|HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM)) == HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_MEMBINDING) {
3775 /* RESTRICT_TO_MEMBINDING requires THISSYSTEM for binding */
37193776 errno = EINVAL;
37203777 return -1;
37213778 }
40014058 hwloc_internal_memattrs_refresh(topology);
40024059
40034060 topology->is_loaded = 1;
4061
4062 if (topology->flags & HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING) {
4063 /* FIXME: filter directly in backends during the discovery.
4064 * Only x86 does it because binding may cause issues on Windows.
4065 */
4066 hwloc_bitmap_t set = hwloc_bitmap_alloc();
4067 if (set) {
4068 err = hwloc_get_cpubind(topology, set, HWLOC_CPUBIND_STRICT);
4069 if (!err)
4070 hwloc_topology_restrict(topology, set, 0);
4071 hwloc_bitmap_free(set);
4072 }
4073 }
4074 if (topology->flags & HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_MEMBINDING) {
4075 /* FIXME: filter directly in backends during the discovery.
4076 */
4077 hwloc_bitmap_t set = hwloc_bitmap_alloc();
4078 hwloc_membind_policy_t policy;
4079 if (set) {
4080 err = hwloc_get_membind(topology, set, &policy, HWLOC_MEMBIND_STRICT | HWLOC_MEMBIND_BYNODESET);
4081 if (!err)
4082 hwloc_topology_restrict(topology, set, HWLOC_RESTRICT_FLAG_BYNODESET);
4083 hwloc_bitmap_free(set);
4084 }
4085 }
40044086
40054087 if (topology->backend_phases & HWLOC_DISC_PHASE_TWEAK) {
40064088 dstatus.phase = HWLOC_DISC_PHASE_TWEAK;
00 /*
11 * Copyright © 2009 CNRS
2 * Copyright © 2009-2020 Inria. All rights reserved.
2 * Copyright © 2009-2021 Inria. All rights reserved.
33 * Copyright © 2009-2010, 2020 Université Bordeaux
44 * Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
55 * See COPYING in top-level directory.
394394 } else if (hwloc__type_match(string, "pcibridge", 5)) {
395395 type = HWLOC_OBJ_BRIDGE;
396396 ubtype = HWLOC_OBJ_BRIDGE_PCI;
397 /* if downstream_type can ever be non-PCI, we'll have to make strings more precise,
398 * or relax the hwloc_type_sscanf test */
397399
398400 } else if (hwloc__type_match(string, "pcidev", 3)) {
399401 type = HWLOC_OBJ_PCI_DEVICE;
447449 attrp->group.depth = depthattr;
448450 } else if (type == HWLOC_OBJ_BRIDGE && attrsize >= sizeof(attrp->bridge)) {
449451 attrp->bridge.upstream_type = ubtype;
450 attrp->bridge.downstream_type = HWLOC_OBJ_BRIDGE_PCI; /* nothing else so far */
452 attrp->bridge.downstream_type = HWLOC_OBJ_BRIDGE_PCI;
453 /* if downstream_type can ever be non-PCI, we'll have to make strings more precise,
454 * or relax the hwloc_type_sscanf test */
451455 } else if (type == HWLOC_OBJ_OS_DEVICE && attrsize >= sizeof(attrp->osdev)) {
452456 attrp->osdev.type = ostype;
453457 }
530534 else
531535 return hwloc_snprintf(string, size, "%s", hwloc_obj_type_string(type));
532536 case HWLOC_OBJ_BRIDGE:
537 /* if downstream_type can ever be non-PCI, we'll have to make strings more precise,
538 * or relax the hwloc_type_sscanf test */
539 assert(obj->attr->bridge.downstream_type == HWLOC_OBJ_BRIDGE_PCI);
533540 return hwloc_snprintf(string, size, obj->attr->bridge.upstream_type == HWLOC_OBJ_BRIDGE_PCI ? "PCIBridge" : "HostBridge");
534541 case HWLOC_OBJ_PCI_DEVICE:
535542 return hwloc_snprintf(string, size, "PCI");
647654 } else
648655 *up = '\0';
649656 /* downstream is_PCI */
650 snprintf(down, sizeof(down), "buses=%04x:[%02x-%02x]",
651 obj->attr->bridge.downstream.pci.domain, obj->attr->bridge.downstream.pci.secondary_bus, obj->attr->bridge.downstream.pci.subordinate_bus);
657 if (obj->attr->bridge.downstream_type == HWLOC_OBJ_BRIDGE_PCI) {
658 snprintf(down, sizeof(down), "buses=%04x:[%02x-%02x]",
659 obj->attr->bridge.downstream.pci.domain, obj->attr->bridge.downstream.pci.secondary_bus, obj->attr->bridge.downstream.pci.subordinate_bus);
660 } else
661 assert(0);
652662 if (*up)
653663 res = hwloc_snprintf(string, size, "%s%s%s", up, separator, down);
654664 else
735745 }
736746 return 0;
737747 }
748
749 hwloc_obj_t
750 hwloc_get_obj_with_same_locality(hwloc_topology_t topology, hwloc_obj_t src,
751 hwloc_obj_type_t type, const char *subtype, const char *nameprefix,
752 unsigned long flags)
753 {
754 if (flags) {
755 errno = EINVAL;
756 return NULL;
757 }
758
759 if (hwloc_obj_type_is_normal(src->type) || hwloc_obj_type_is_memory(src->type)) {
760 /* normal/memory type, look for normal/memory type with same sets */
761 hwloc_obj_t obj;
762
763 if (!hwloc_obj_type_is_normal(type) && !hwloc_obj_type_is_memory(type)) {
764 errno = EINVAL;
765 return NULL;
766 }
767
768 obj = NULL;
769 while ((obj = hwloc_get_next_obj_by_type(topology, type, obj)) != NULL) {
770 if (!hwloc_bitmap_isequal(src->cpuset, obj->cpuset)
771 || !hwloc_bitmap_isequal(src->nodeset, obj->nodeset))
772 continue;
773 if (subtype && (!obj->subtype || strcasecmp(subtype, obj->subtype)))
774 continue;
775 if (nameprefix && (!obj->name || hwloc_strncasecmp(nameprefix, obj->name, strlen(nameprefix))))
776 continue;
777 return obj;
778 }
779 errno = ENOENT;
780 return NULL;
781
782 } else if (hwloc_obj_type_is_io(src->type)) {
783 /* I/O device, look for PCI/OS in same PCI */
784 hwloc_obj_t pci;
785
786 if ((src->type != HWLOC_OBJ_OS_DEVICE && src->type != HWLOC_OBJ_PCI_DEVICE)
787 || (type != HWLOC_OBJ_OS_DEVICE && type != HWLOC_OBJ_PCI_DEVICE)) {
788 errno = EINVAL;
789 return NULL;
790 }
791
792 /* walk up to find the container */
793 pci = src;
794 while (pci->type == HWLOC_OBJ_OS_DEVICE)
795 pci = pci->parent;
796
797 if (type == HWLOC_OBJ_PCI_DEVICE) {
798 if (pci->type != HWLOC_OBJ_PCI_DEVICE) {
799 errno = ENOENT;
800 return NULL;
801 }
802 if (subtype && (!pci->subtype || strcasecmp(subtype, pci->subtype))) {
803 errno = ENOENT;
804 return NULL;
805 }
806 if (nameprefix && (!pci->name || hwloc_strncasecmp(nameprefix, pci->name, strlen(nameprefix)))) {
807 errno = ENOENT;
808 return NULL;
809 }
810 return pci;
811
812 } else {
813 /* find a matching osdev child */
814 assert(type == HWLOC_OBJ_OS_DEVICE);
815 /* FIXME: won't work if we ever store osdevs in osdevs */
816 hwloc_obj_t child;
817 for(child = pci->io_first_child; child; child = child->next_sibling) {
818 if (child->type != HWLOC_OBJ_OS_DEVICE)
819 /* FIXME: should never occur currently */
820 continue;
821 if (subtype && (!child->subtype || strcasecmp(subtype, child->subtype)))
822 continue;
823 if (nameprefix && (!child->name || hwloc_strncasecmp(nameprefix, child->name, strlen(nameprefix))))
824 continue;
825 return child;
826 }
827 }
828 errno = ENOENT;
829 return NULL;
830
831 } else {
832 /* nothing for Misc */
833 errno = EINVAL;
834 return NULL;
835 }
836 }
0 # Copyright © 2009-2020 Inria. All rights reserved.
0 # Copyright © 2009-2021 Inria. All rights reserved.
11 # Copyright © 2009-2010 Université Bordeaux
22 # Copyright © 2009-2014 Cisco Systems, Inc. All rights reserved.
33 # Copyright © 2011 Oracle and/or its affiliates. All rights reserved.
3030 hwloc/cudart.h \
3131 hwloc/nvml.h \
3232 hwloc/rsmi.h \
33 hwloc/levelzero.h \
3334 hwloc/plugins.h \
3435 hwloc/gl.h \
3536 hwloc/rename.h \
6465 include_hwloc_HEADERS += hwloc/glibc-sched.h
6566 endif HWLOC_HAVE_SCHED_SETAFFINITY
6667
68 if HWLOC_HAVE_WINDOWS
69 include_hwloc_HEADERS += \
70 hwloc/windows.h
71 endif HWLOC_HAVE_WINDOWS
72
6773 endif HWLOC_BUILD_STANDALONE
1313
1414 @SET_MAKE@
1515
16 # Copyright © 2009-2020 Inria. All rights reserved.
16 # Copyright © 2009-2021 Inria. All rights reserved.
1717 # Copyright © 2009-2010 Université Bordeaux
1818 # Copyright © 2009-2014 Cisco Systems, Inc. All rights reserved.
1919 # Copyright © 2011 Oracle and/or its affiliates. All rights reserved.
106106 @HWLOC_BUILD_STANDALONE_TRUE@@HWLOC_HAVE_SOLARIS_TRUE@ private/solaris-chiptype.h
107107
108108 @HWLOC_BUILD_STANDALONE_TRUE@@HWLOC_HAVE_SCHED_SETAFFINITY_TRUE@am__append_4 = hwloc/glibc-sched.h
109 @HWLOC_BUILD_STANDALONE_TRUE@@HWLOC_HAVE_WINDOWS_TRUE@am__append_5 = \
110 @HWLOC_BUILD_STANDALONE_TRUE@@HWLOC_HAVE_WINDOWS_TRUE@ hwloc/windows.h
111
109112 subdir = include
110113 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
111114 am__aclocal_m4_deps = $(top_srcdir)/config/hwloc.m4 \
185188 hwloc/inlines.h hwloc/memattrs.h hwloc/cpukinds.h hwloc/diff.h \
186189 hwloc/shmem.h hwloc/distances.h hwloc/export.h \
187190 hwloc/openfabrics-verbs.h hwloc/opencl.h hwloc/cuda.h \
188 hwloc/cudart.h hwloc/nvml.h hwloc/rsmi.h hwloc/plugins.h \
189 hwloc/gl.h hwloc/rename.h hwloc/deprecated.h hwloc/linux.h \
190 hwloc/linux-libnuma.h private/solaris-chiptype.h \
191 hwloc/glibc-sched.h
191 hwloc/cudart.h hwloc/nvml.h hwloc/rsmi.h hwloc/levelzero.h \
192 hwloc/plugins.h hwloc/gl.h hwloc/rename.h hwloc/deprecated.h \
193 hwloc/linux.h hwloc/linux-libnuma.h private/solaris-chiptype.h \
194 hwloc/glibc-sched.h hwloc/windows.h
192195 am__noinst_HEADERS_DIST = private/private.h private/debug.h \
193196 private/misc.h private/xml.h private/components.h \
194197 private/internal-components.h private/cpuid-x86.h \
234237 CONFIGURE_DEPENDENCIES = @CONFIGURE_DEPENDENCIES@
235238 CPP = @CPP@
236239 CPPFLAGS = @CPPFLAGS@
240 CUDA_VERSION = @CUDA_VERSION@
237241 CXX = @CXX@
238242 CXXCPP = @CXXCPP@
239243 CXXDEPMODE = @CXXDEPMODE@
260264 HWLOC_CAIRO_LIBS = @HWLOC_CAIRO_LIBS@
261265 HWLOC_CFLAGS = @HWLOC_CFLAGS@
262266 HWLOC_CPPFLAGS = @HWLOC_CPPFLAGS@
267 HWLOC_CUDART_CFLAGS = @HWLOC_CUDART_CFLAGS@
268 HWLOC_CUDART_CPPFLAGS = @HWLOC_CUDART_CPPFLAGS@
269 HWLOC_CUDART_LDFLAGS = @HWLOC_CUDART_LDFLAGS@
270 HWLOC_CUDART_LIBS = @HWLOC_CUDART_LIBS@
271 HWLOC_CUDA_CFLAGS = @HWLOC_CUDA_CFLAGS@
272 HWLOC_CUDA_CPPFLAGS = @HWLOC_CUDA_CPPFLAGS@
273 HWLOC_CUDA_LDFLAGS = @HWLOC_CUDA_LDFLAGS@
263274 HWLOC_CUDA_LIBS = @HWLOC_CUDA_LIBS@
264275 HWLOC_DIFF_U = @HWLOC_DIFF_U@
265276 HWLOC_DIFF_W = @HWLOC_DIFF_W@
270281 HWLOC_EMBEDDED_LDFLAGS = @HWLOC_EMBEDDED_LDFLAGS@
271282 HWLOC_EMBEDDED_LIBS = @HWLOC_EMBEDDED_LIBS@
272283 HWLOC_GL_LIBS = @HWLOC_GL_LIBS@
284 HWLOC_HAVE_LEVELZERO = @HWLOC_HAVE_LEVELZERO@
273285 HWLOC_HAVE_LIBXML2 = @HWLOC_HAVE_LIBXML2@
274286 HWLOC_HAVE_NVML = @HWLOC_HAVE_NVML@
275287 HWLOC_HAVE_OPENCL = @HWLOC_HAVE_OPENCL@
276288 HWLOC_HAVE_RSMI = @HWLOC_HAVE_RSMI@
289 HWLOC_IBVERBS_LIBS = @HWLOC_IBVERBS_LIBS@
277290 HWLOC_LDFLAGS = @HWLOC_LDFLAGS@
291 HWLOC_LEVELZERO_CFLAGS = @HWLOC_LEVELZERO_CFLAGS@
292 HWLOC_LEVELZERO_LIBS = @HWLOC_LEVELZERO_LIBS@
278293 HWLOC_LIBS = @HWLOC_LIBS@
279294 HWLOC_LIBS_PRIVATE = @HWLOC_LIBS_PRIVATE@
280295 HWLOC_LIBXML2_CFLAGS = @HWLOC_LIBXML2_CFLAGS@
284299 HWLOC_MS_LIB_ARCH = @HWLOC_MS_LIB_ARCH@
285300 HWLOC_NUMA_CFLAGS = @HWLOC_NUMA_CFLAGS@
286301 HWLOC_NUMA_LIBS = @HWLOC_NUMA_LIBS@
302 HWLOC_NVML_CPPFLAGS = @HWLOC_NVML_CPPFLAGS@
303 HWLOC_NVML_LDFLAGS = @HWLOC_NVML_LDFLAGS@
287304 HWLOC_NVML_LIBS = @HWLOC_NVML_LIBS@
288 HWLOC_OPENCL_CFLAGS = @HWLOC_OPENCL_CFLAGS@
305 HWLOC_OPENCL_CPPFLAGS = @HWLOC_OPENCL_CPPFLAGS@
289306 HWLOC_OPENCL_LDFLAGS = @HWLOC_OPENCL_LDFLAGS@
290307 HWLOC_OPENCL_LIBS = @HWLOC_OPENCL_LIBS@
291308 HWLOC_PCIACCESS_CFLAGS = @HWLOC_PCIACCESS_CFLAGS@
411428 prefix = @prefix@
412429 program_transform_name = @program_transform_name@
413430 psdir = @psdir@
431 runstatedir = @runstatedir@
414432 sbindir = @sbindir@
415433 sharedstatedir = @sharedstatedir@
416434 srcdir = @srcdir@
434452 @HWLOC_BUILD_STANDALONE_TRUE@ hwloc/openfabrics-verbs.h \
435453 @HWLOC_BUILD_STANDALONE_TRUE@ hwloc/opencl.h hwloc/cuda.h \
436454 @HWLOC_BUILD_STANDALONE_TRUE@ hwloc/cudart.h hwloc/nvml.h \
437 @HWLOC_BUILD_STANDALONE_TRUE@ hwloc/rsmi.h hwloc/plugins.h \
438 @HWLOC_BUILD_STANDALONE_TRUE@ hwloc/gl.h hwloc/rename.h \
439 @HWLOC_BUILD_STANDALONE_TRUE@ hwloc/deprecated.h \
455 @HWLOC_BUILD_STANDALONE_TRUE@ hwloc/rsmi.h hwloc/levelzero.h \
456 @HWLOC_BUILD_STANDALONE_TRUE@ hwloc/plugins.h hwloc/gl.h \
457 @HWLOC_BUILD_STANDALONE_TRUE@ hwloc/rename.h hwloc/deprecated.h \
440458 @HWLOC_BUILD_STANDALONE_TRUE@ $(am__append_2) $(am__append_3) \
441 @HWLOC_BUILD_STANDALONE_TRUE@ $(am__append_4)
459 @HWLOC_BUILD_STANDALONE_TRUE@ $(am__append_4) $(am__append_5)
442460 @HWLOC_BUILD_STANDALONE_TRUE@include_hwloc_autogendir = $(includedir)/hwloc/autogen
443461 @HWLOC_BUILD_STANDALONE_TRUE@nodist_include_hwloc_autogen_HEADERS = hwloc/autogen/config.h
444462 @HWLOC_BUILD_STANDALONE_TRUE@noinst_HEADERS = \
00 /*
1 * Copyright © 2010-2020 Inria. All rights reserved.
1 * Copyright © 2010-2021 Inria. All rights reserved.
22 * Copyright © 2010-2011 Université Bordeaux
33 * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
44 * See COPYING in top-level directory.
7474 /** \brief Get the CPU set of processors that are physically
7575 * close to device \p cudevice.
7676 *
77 * Return the CPU set describing the locality of the CUDA device \p cudevice.
77 * Store in \p set the CPU-set describing the locality of the CUDA device \p cudevice.
7878 *
7979 * Topology \p topology and device \p cudevice must match the local machine.
8080 * I/O devices detection and the CUDA component are not needed in the topology.
119119 /** \brief Get the hwloc PCI device object corresponding to the
120120 * CUDA device \p cudevice.
121121 *
122 * Return the PCI device object describing the CUDA device \p cudevice.
123 * Return NULL if there is none.
122 * \return The hwloc PCI device object describing the CUDA device \p cudevice.
123 * \return \c NULL if none could be found.
124124 *
125125 * Topology \p topology and device \p cudevice must match the local machine.
126126 * I/O devices detection must be enabled in topology \p topology.
139139
140140 /** \brief Get the hwloc OS device object corresponding to CUDA device \p cudevice.
141141 *
142 * Return the hwloc OS device object that describes the given
143 * CUDA device \p cudevice. Return NULL if there is none.
142 * \return The hwloc OS device object that describes the given CUDA device \p cudevice.
143 * \return \c NULL if none could be found.
144144 *
145145 * Topology \p topology and device \p cudevice must match the local machine.
146146 * I/O devices detection and the CUDA component must be enabled in the topology.
182182 /** \brief Get the hwloc OS device object corresponding to the
183183 * CUDA device whose index is \p idx.
184184 *
185 * Return the OS device object describing the CUDA device whose
186 * index is \p idx. Return NULL if there is none.
185 * \return The hwloc OS device object describing the CUDA device whose index is \p idx.
186 * \return \c NULL if none could be found.
187187 *
188188 * The topology \p topology does not necessarily have to match the current
189189 * machine. For instance the topology may be an XML import of a remote host.
00 /*
1 * Copyright © 2010-2020 Inria. All rights reserved.
1 * Copyright © 2010-2021 Inria. All rights reserved.
22 * Copyright © 2010-2011 Université Bordeaux
33 * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
44 * See COPYING in top-level directory.
7171 /** \brief Get the CPU set of processors that are physically
7272 * close to device \p idx.
7373 *
74 * Return the CPU set describing the locality of the CUDA device
74 * Store in \p set the CPU-set describing the locality of the CUDA device
7575 * whose index is \p idx.
7676 *
7777 * Topology \p topology and device \p idx must match the local machine.
116116 /** \brief Get the hwloc PCI device object corresponding to the
117117 * CUDA device whose index is \p idx.
118118 *
119 * Return the PCI device object describing the CUDA device whose
120 * index is \p idx. Return NULL if there is none.
119 * \return The hwloc PCI device object describing the CUDA device whose index is \p idx.
120 * \return \c NULL if none could be found.
121121 *
122122 * Topology \p topology and device \p idx must match the local machine.
123123 * I/O devices detection must be enabled in topology \p topology.
137137 /** \brief Get the hwloc OS device object corresponding to the
138138 * CUDA device whose index is \p idx.
139139 *
140 * Return the OS device object describing the CUDA device whose
141 * index is \p idx. Return NULL if there is none.
140 * \return The hwloc OS device object describing the CUDA device whose index is \p idx.
141 * \return \c NULL if none could be found.
142142 *
143143 * The topology \p topology does not necessarily have to match the current
144144 * machine. For instance the topology may be an XML import of a remote host.
00 /*
11 * Copyright © 2009 CNRS
2 * Copyright © 2009-2018 Inria. All rights reserved.
2 * Copyright © 2009-2021 Inria. All rights reserved.
33 * Copyright © 2009-2012 Université Bordeaux
44 * Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
55 * See COPYING in top-level directory.
2828 #define HWLOC_OBJ_SOCKET HWLOC_OBJ_PACKAGE
2929 /* backward compat with v1.10 before Node->NUMANode clarification */
3030 #define HWLOC_OBJ_NODE HWLOC_OBJ_NUMANODE
31
32 /** \brief Add a distances structure.
33 *
34 * Superseded by hwloc_distances_add_create()+hwloc_distances_add_values()+hwloc_distances_add_commit()
35 * in v2.5.
36 */
37 HWLOC_DECLSPEC int hwloc_distances_add(hwloc_topology_t topology,
38 unsigned nbobjs, hwloc_obj_t *objs, hwloc_uint64_t *values,
39 unsigned long kind, unsigned long flags) __hwloc_attribute_deprecated;
3140
3241 /** \brief Insert a misc object by parent.
3342 *
00 /*
1 * Copyright © 2010-2020 Inria. All rights reserved.
1 * Copyright © 2010-2021 Inria. All rights reserved.
22 * See COPYING in top-level directory.
33 */
44
3434 * from a core in another node.
3535 * The corresponding kind is ::HWLOC_DISTANCES_KIND_FROM_OS | ::HWLOC_DISTANCES_KIND_FROM_USER.
3636 * The name of this distances structure is "NUMALatency".
37 * Others distance structures include and "XGMIBandwidth" and "NVLinkBandwidth".
3738 *
3839 * The matrix may also contain bandwidths between random sets of objects,
3940 * possibly provided by the user, as specified in the \p kind attribute.
41 *
42 * Pointers \p objs and \p values should not be replaced, reallocated, freed, etc.
43 * However callers are allowed to modify \p kind as well as the contents
44 * of \p objs and \p values arrays.
45 * For instance, if there is a single NUMA node per Package,
46 * hwloc_get_obj_with_same_locality() may be used to convert between them
47 * and replace NUMA nodes in the \p objs array with the corresponding Packages.
48 * See also hwloc_distances_transform() for applying some transformations
49 * to the structure.
4050 */
4151 struct hwloc_distances_s {
4252 unsigned nbobjs; /**< \brief Number of objects described by the distance matrix. */
90100 HWLOC_DISTANCES_KIND_MEANS_BANDWIDTH = (1UL<<3),
91101
92102 /** \brief This distances structure covers objects of different types.
103 * This may apply to the "NVLinkBandwidth" structure in presence
104 * of a NVSwitch or POWER processor NVLink port.
93105 * \hideinitializer
94106 */
95107 HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES = (1UL<<4)
146158 * Usually only one distances structure may match a given name.
147159 *
148160 * The name of the most common structure is "NUMALatency".
161 * Others include "XGMIBandwidth" and "NVLinkBandwidth".
149162 */
150163 HWLOC_DECLSPEC int
151164 hwloc_distances_get_by_name(hwloc_topology_t topology, const char *name,
166179 */
167180 HWLOC_DECLSPEC void
168181 hwloc_distances_release(hwloc_topology_t topology, struct hwloc_distances_s *distances);
182
183 /** \brief Transformations of distances structures. */
184 enum hwloc_distances_transform_e {
185 /** \brief Remove \c NULL objects from the distances structure.
186 *
187 * Every object that was replaced with \c NULL in the \p objs array
188 * is removed and the \p values array is updated accordingly.
189 *
190 * At least \c 2 objects must remain, otherwise hwloc_distances_transform()
191 * will return \c -1 with \p errno set to \c EINVAL.
192 *
193 * \p kind will be updated with or without ::HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES
194 * according to the remaining objects.
195 *
196 * \hideinitializer
197 */
198 HWLOC_DISTANCES_TRANSFORM_REMOVE_NULL = 0,
199
200 /** \brief Replace bandwidth values with a number of links.
201 *
202 * Usually all values will be either \c 0 (no link) or \c 1 (one link).
203 * However some matrices could get larger values if some pairs of
204 * peers are connected by different numbers of links.
205 *
206 * Values on the diagonal are set to \c 0.
207 *
208 * This transformation only applies to bandwidth matrices.
209 *
210 * \hideinitializer
211 */
212 HWLOC_DISTANCES_TRANSFORM_LINKS = 1,
213
214 /** \brief Merge switches with multiple ports into a single object.
215 * This currently only applies to NVSwitches where GPUs seem connected to different
216 * separate switch ports in the NVLinkBandwidth matrix. This transformation will
217 * replace all of them with the same port connected to all GPUs.
218 * Other ports are removed by applying ::HWLOC_DISTANCES_TRANSFORM_REMOVE_NULL internally.
219 * \hideinitializer
220 */
221 HWLOC_DISTANCES_TRANSFORM_MERGE_SWITCH_PORTS = 2,
222
223 /** \brief Apply a transitive closure to the matrix to connect objects across switches.
224 * This currently only applies to GPUs and NVSwitches in the NVLinkBandwidth matrix.
225 * All pairs of GPUs will be reported as directly connected.
226 * \hideinitializer
227 */
228 HWLOC_DISTANCES_TRANSFORM_TRANSITIVE_CLOSURE = 3
229 };
230
231 /** \brief Apply a transformation to a distances structure.
232 *
233 * Modify a distances structure that was previously obtained with
234 * hwloc_distances_get() or one of its variants.
235 *
236 * This modifies the local copy of the distances structures but does
237 * not modify the distances information stored inside the topology
238 * (retrieved by another call to hwloc_distances_get() or exported to XML).
239 * To do so, one should add a new distances structure with same
240 * name, kind, objects and values (see \ref hwlocality_distances_add)
241 * and then remove this old one with hwloc_distances_release_remove().
242 *
243 * \p transform must be one of the transformations listed
244 * in ::hwloc_distances_transform_e.
245 *
246 * These transformations may modify the contents of the \p objs or \p values arrays.
247 *
248 * \p transform_attr must be \c NULL for now.
249 *
250 * \p flags must be \c 0 for now.
251 *
252 * \note Objects in distances array \p objs may be directly modified
253 * in place without using hwloc_distances_transform().
254 * One may use hwloc_get_obj_with_same_locality() to easily convert
255 * between similar objects of different types.
256 */
257 HWLOC_DECLSPEC int hwloc_distances_transform(hwloc_topology_t topology, struct hwloc_distances_s *distances,
258 enum hwloc_distances_transform_e transform,
259 void *transform_attr,
260 unsigned long flags);
169261
170262 /** @} */
171263
214306
215307
216308
217 /** \defgroup hwlocality_distances_add Add or remove distances between objects
309 /** \defgroup hwlocality_distances_add Add distances between objects
310 *
311 * The usual way to add distances is:
312 * \code
313 * hwloc_distances_add_handle_t handle;
314 * int err = -1;
315 * handle = hwloc_distances_add_create(topology, "name", kind, 0);
316 * if (handle) {
317 * err = hwloc_distances_add_values(topology, handle, nbobjs, objs, values, 0);
318 * if (!err)
319 * err = hwloc_distances_add_commit(topology, handle, flags);
320 * }
321 * \endcode
322 * If \p err is \c 0 at the end, then addition was successful.
323 *
218324 * @{
219325 */
326
327 /** \brief Handle to a new distances structure during its addition to the topology. */
328 typedef void * hwloc_distances_add_handle_t;
329
330 /** \brief Create a new empty distances structure.
331 *
332 * Create an empty distances structure
333 * to be filled with hwloc_distances_add_values()
334 * and then committed with hwloc_distances_add_commit().
335 *
336 * Parameter \p name is optional, it may be \c NULL.
337 * Otherwise, it will be copied internally and may later be freed by the caller.
338 *
339 * \p kind specifies the kind of distance as a OR'ed set of ::hwloc_distances_kind_e.
340 * Kind ::HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES will be automatically set
341 * according to objects having different types in hwloc_distances_add_values().
342 *
343 * \p flags must be \c 0 for now.
344 *
345 * \return A hwloc_distances_add_handle_t that should then be passed
346 * to hwloc_distances_add_values() and hwloc_distances_add_commit().
347 *
348 * \return \c NULL on error.
349 */
350 HWLOC_DECLSPEC hwloc_distances_add_handle_t
351 hwloc_distances_add_create(hwloc_topology_t topology,
352 const char *name, unsigned long kind,
353 unsigned long flags);
354
355 /** \brief Specify the objects and values in a new empty distances structure.
356 *
357 * Specify the objects and values for a new distances structure
358 * that was returned as a handle by hwloc_distances_add_create().
359 * The structure must then be committed with hwloc_distances_add_commit().
360 *
361 * The number of objects is \p nbobjs and the array of objects is \p objs.
362 * Distance values are stored as a one-dimension array in \p values.
363 * The distance from object i to object j is in slot i*nbobjs+j.
364 *
365 * \p nbobjs must be at least 2.
366 *
367 * Arrays \p objs and \p values will be copied internally,
368 * they may later be freed by the caller.
369 *
370 * On error, the temporary distances structure and its content are destroyed.
371 *
372 * \p flags must be \c 0 for now.
373 *
374 * \return \c 0 on success.
375 * \return \c -1 on error.
376 */
377 HWLOC_DECLSPEC int hwloc_distances_add_values(hwloc_topology_t topology,
378 hwloc_distances_add_handle_t handle,
379 unsigned nbobjs, hwloc_obj_t *objs,
380 hwloc_uint64_t *values,
381 unsigned long flags);
220382
221383 /** \brief Flags for adding a new distances to a topology. */
222384 enum hwloc_distances_add_flag_e {
223385 /** \brief Try to group objects based on the newly provided distance information.
386 * This is ignored for distances between objects of different types.
224387 * \hideinitializer
225388 */
226389 HWLOC_DISTANCES_ADD_FLAG_GROUP = (1UL<<0),
232395 HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE = (1UL<<1)
233396 };
234397
235 /** \brief Provide a new distance matrix.
236 *
237 * Provide the matrix of distances between a set of objects given by \p nbobjs
238 * and the \p objs array. \p nbobjs must be at least 2.
239 * The distances are stored as a one-dimension array in \p values.
240 * The distance from object i to object j is in slot i*nbobjs+j.
241 *
242 * \p kind specifies the kind of distance as a OR'ed set of ::hwloc_distances_kind_e.
243 * Kind ::HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES will be automatically added
244 * if objects of different types are given.
398 /** \brief Commit a new distances structure.
399 *
400 * This function finalizes the distances structure and inserts in it the topology.
401 *
402 * Parameter \p handle was previously returned by hwloc_distances_add_create().
403 * Then objects and values were specified with hwloc_distances_add_values().
245404 *
246405 * \p flags configures the behavior of the function using an optional OR'ed set of
247406 * ::hwloc_distances_add_flag_e.
248 */
249 HWLOC_DECLSPEC int hwloc_distances_add(hwloc_topology_t topology,
250 unsigned nbobjs, hwloc_obj_t *objs, hwloc_uint64_t *values,
251 unsigned long kind, unsigned long flags);
407 * It may be used to request the grouping of existing objects based on distances.
408 *
409 * On error, the temporary distances structure and its content are destroyed.
410 *
411 * \return \c 0 on success.
412 * \return \c -1 on error.
413 */
414 HWLOC_DECLSPEC int hwloc_distances_add_commit(hwloc_topology_t topology,
415 hwloc_distances_add_handle_t handle,
416 unsigned long flags);
417
418 /** @} */
419
420
421
422 /** \defgroup hwlocality_distances_remove Remove distances between objects
423 * @{
424 */
252425
253426 /** \brief Remove all distance matrices from a topology.
254427 *
00 /*
11 * Copyright © 2012 Blue Brain Project, EPFL. All rights reserved.
2 * Copyright © 2012-2013 Inria. All rights reserved.
2 * Copyright © 2012-2021 Inria. All rights reserved.
33 * See COPYING in top-level directory.
44 */
55
3838 /** \brief Get the hwloc OS device object corresponding to the
3939 * OpenGL display given by port and device index.
4040 *
41 * Return the OS device object describing the OpenGL display
41 * \return The hwloc OS device object describing the OpenGL display
4242 * whose port (server) is \p port and device (screen) is \p device.
43 * Return NULL if there is none.
43 * \return \c NULL if none could be found.
4444 *
4545 * The topology \p topology does not necessarily have to match the current
4646 * machine. For instance the topology may be an XML import of a remote host.
6969 /** \brief Get the hwloc OS device object corresponding to the
7070 * OpenGL display given by name.
7171 *
72 * Return the OS device object describing the OpenGL display
72 * \return The hwloc OS device object describing the OpenGL display
7373 * whose name is \p name, built as ":port.device" such as ":0.0" .
74 * Return NULL if there is none.
74 * \return \c NULL if none could be found.
7575 *
7676 * The topology \p topology does not necessarily have to match the current
7777 * machine. For instance the topology may be an XML import of a remote host.
9898 /** \brief Get the OpenGL display port and device corresponding
9999 * to the given hwloc OS object.
100100 *
101 * Return the OpenGL display port (server) in \p port and device (screen)
101 * Retrieves the OpenGL display port (server) in \p port and device (screen)
102102 * in \p screen that correspond to the given hwloc OS device object.
103 * Return \c -1 if there is none.
103 *
104 * \return \c -1 if none could be found.
104105 *
105106 * The topology \p topology does not necessarily have to match the current
106107 * machine. For instance the topology may be an XML import of a remote host.
00 /*
11 * Copyright © 2009 CNRS
2 * Copyright © 2009-2020 Inria. All rights reserved.
2 * Copyright © 2009-2021 Inria. All rights reserved.
33 * Copyright © 2009-2012 Université Bordeaux
44 * Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
55 * See COPYING in top-level directory.
805805 }
806806 return obj;
807807 }
808
809 /** \brief Return an object of a different type with same locality.
810 *
811 * If the source object \p src is a normal or memory type,
812 * this function returns an object of type \p type with same
813 * CPU and node sets, either below or above in the hierarchy.
814 *
815 * If the source object \p src is a PCI or an OS device within a PCI
816 * device, the function may either return that PCI device, or another
817 * OS device in the same PCI parent.
818 * This may for instance be useful for converting between OS devices
819 * such as "nvml0" or "rsmi1" used in distance structures into the
820 * the PCI device, or the CUDA or OpenCL OS device that correspond
821 * to the same physical card.
822 *
823 * If not \c NULL, parameter \p subtype only select objects whose
824 * subtype attribute exists and is \p subtype (case-insensitively),
825 * for instance "OpenCL" or "CUDA".
826 *
827 * If not \c NULL, parameter \p nameprefix only selects objects whose
828 * name attribute exists and starts with \p nameprefix (case-insensitively),
829 * for instance "rsmi" for matching "rsmi0".
830 *
831 * If multiple objects match, the first one is returned.
832 *
833 * This function will not walk the hierarchy across bridges since
834 * the PCI locality may become different.
835 * This function cannot also convert between normal/memory objects
836 * and I/O or Misc objects.
837 *
838 * \p flags must be \c 0 for now.
839 *
840 * \return An object with identical locality,
841 * matching \p subtype and \p nameprefix if any.
842 *
843 * \return \c NULL if no matching object could be found,
844 * or if the source object and target type are incompatible,
845 * for instance if converting between CPU and I/O objects.
846 */
847 HWLOC_DECLSPEC hwloc_obj_t
848 hwloc_get_obj_with_same_locality(hwloc_topology_t topology, hwloc_obj_t src,
849 hwloc_obj_type_t type, const char *subtype, const char *nameprefix,
850 unsigned long flags);
808851
809852 /** @} */
810853
0 /*
1 * Copyright © 2021 Inria. All rights reserved.
2 * See COPYING in top-level directory.
3 */
4
5 /** \file
6 * \brief Macros to help interaction between hwloc and the oneAPI Level Zero interface.
7 *
8 * Applications that use both hwloc and Level Zero may want to
9 * include this file so as to get topology information for L0 devices.
10 */
11
12 #ifndef HWLOC_LEVELZERO_H
13 #define HWLOC_LEVELZERO_H
14
15 #include "hwloc.h"
16 #include "hwloc/autogen/config.h"
17 #include "hwloc/helper.h"
18 #ifdef HWLOC_LINUX_SYS
19 #include "hwloc/linux.h"
20 #endif
21
22 #include <level_zero/ze_api.h>
23 #include <level_zero/zes_api.h>
24
25
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29
30
31 /** \defgroup hwlocality_levelzero Interoperability with the oneAPI Level Zero interface.
32 *
33 * This interface offers ways to retrieve topology information about
34 * devices managed by the Level Zero API.
35 *
36 * @{
37 */
38
39 /** \brief Get the CPU set of logical processors that are physically
40 * close to the Level Zero device \p device
41 *
42 * Store in \p set the CPU-set describing the locality of
43 * the Level Zero device \p device.
44 *
45 * Topology \p topology and device \p device must match the local machine.
46 * The Level Zero must have been initialized with Sysman enabled
47 * (ZES_ENABLE_SYSMAN=1 in the environment).
48 * I/O devices detection and the Level Zero component are not needed in the
49 * topology.
50 *
51 * The function only returns the locality of the device.
52 * If more information about the device is needed, OS objects should
53 * be used instead, see hwloc_levelzero_get_device_osdev().
54 *
55 * This function is currently only implemented in a meaningful way for
56 * Linux; other systems will simply get a full cpuset.
57 */
58 static __hwloc_inline int
59 hwloc_levelzero_get_device_cpuset(hwloc_topology_t topology __hwloc_attribute_unused,
60 ze_device_handle_t device, hwloc_cpuset_t set)
61 {
62 #ifdef HWLOC_LINUX_SYS
63 /* If we're on Linux, use the sysfs mechanism to get the local cpus */
64 #define HWLOC_LEVELZERO_DEVICE_SYSFS_PATH_MAX 128
65 char path[HWLOC_LEVELZERO_DEVICE_SYSFS_PATH_MAX];
66 zes_pci_properties_t pci;
67 zes_device_handle_t sdevice = device;
68 ze_result_t res;
69
70 if (!hwloc_topology_is_thissystem(topology)) {
71 errno = EINVAL;
72 return -1;
73 }
74
75 res = zesDevicePciGetProperties(sdevice, &pci);
76 if (res != ZE_RESULT_SUCCESS) {
77 errno = EINVAL;
78 return -1;
79 }
80
81 sprintf(path, "/sys/bus/pci/devices/%04x:%02x:%02x.%01x/local_cpus",
82 pci.address.domain, pci.address.bus, pci.address.device, pci.address.function);
83 if (hwloc_linux_read_path_as_cpumask(path, set) < 0
84 || hwloc_bitmap_iszero(set))
85 hwloc_bitmap_copy(set, hwloc_topology_get_complete_cpuset(topology));
86 #else
87 /* Non-Linux systems simply get a full cpuset */
88 hwloc_bitmap_copy(set, hwloc_topology_get_complete_cpuset(topology));
89 #endif
90 return 0;
91 }
92
93 /** \brief Get the hwloc OS device object corresponding to Level Zero device
94 * \p device.
95 *
96 * \return The hwloc OS device object that describes the given Level Zero device \p device.
97 * \return \c NULL if none could be found.
98 *
99 * Topology \p topology and device \p dv_ind must match the local machine.
100 * I/O devices detection and the Level Zero component must be enabled in the
101 * topology. If not, the locality of the object may still be found using
102 * hwloc_levelzero_get_device_cpuset().
103 *
104 * \note The corresponding hwloc PCI device may be found by looking
105 * at the result parent pointer (unless PCI devices are filtered out).
106 */
107 static __hwloc_inline hwloc_obj_t
108 hwloc_levelzero_get_device_osdev(hwloc_topology_t topology, ze_device_handle_t device)
109 {
110 zes_device_handle_t sdevice = device;
111 zes_pci_properties_t pci;
112 ze_result_t res;
113 hwloc_obj_t osdev;
114
115 if (!hwloc_topology_is_thissystem(topology)) {
116 errno = EINVAL;
117 return NULL;
118 }
119
120 res = zesDevicePciGetProperties(sdevice, &pci);
121 if (res != ZE_RESULT_SUCCESS) {
122 /* L0 was likely initialized without sysman, don't bother */
123 errno = EINVAL;
124 return NULL;
125 }
126
127 osdev = NULL;
128 while ((osdev = hwloc_get_next_osdev(topology, osdev)) != NULL) {
129 hwloc_obj_t pcidev = osdev->parent;
130
131 if (strncmp(osdev->name, "ze", 2))
132 continue;
133
134 if (pcidev
135 && pcidev->type == HWLOC_OBJ_PCI_DEVICE
136 && pcidev->attr->pcidev.domain == pci.address.domain
137 && pcidev->attr->pcidev.bus == pci.address.bus
138 && pcidev->attr->pcidev.dev == pci.address.device
139 && pcidev->attr->pcidev.func == pci.address.function)
140 return osdev;
141
142 /* FIXME: when we'll have serialnumber, try it in case PCI is filtered-out */
143 }
144
145 return NULL;
146 }
147
148 /** @} */
149
150
151 #ifdef __cplusplus
152 } /* extern "C" */
153 #endif
154
155
156 #endif /* HWLOC_LEVELZERO_H */
00 /*
1 * Copyright © 2012-2020 Inria. All rights reserved.
1 * Copyright © 2012-2021 Inria. All rights reserved.
22 * See COPYING in top-level directory.
33 */
44
3838 /** \brief Get the CPU set of processors that are physically
3939 * close to NVML device \p device.
4040 *
41 * Return the CPU set describing the locality of the NVML device \p device.
41 * Store in \p set the CPU-set describing the locality of the NVML device \p device.
4242 *
4343 * Topology \p topology and device \p device must match the local machine.
4444 * I/O devices detection and the NVML component are not needed in the topology.
8787 /** \brief Get the hwloc OS device object corresponding to the
8888 * NVML device whose index is \p idx.
8989 *
90 * Return the OS device object describing the NVML device whose
91 * index is \p idx. Returns NULL if there is none.
90 * \return The hwloc OS device object describing the NVML device whose index is \p idx.
91 * \return \c NULL if none could be found.
9292 *
9393 * The topology \p topology does not necessarily have to match the current
9494 * machine. For instance the topology may be an XML import of a remote host.
113113
114114 /** \brief Get the hwloc OS device object corresponding to NVML device \p device.
115115 *
116 * Return the hwloc OS device object that describes the given
117 * NVML device \p device. Return NULL if there is none.
116 * \return The hwloc OS device object that describes the given NVML device \p device.
117 * \return \c NULL if none could be found.
118118 *
119119 * Topology \p topology and device \p device must match the local machine.
120120 * I/O devices detection and the NVML component must be enabled in the topology.
112112 /** \brief Get the CPU set of processors that are physically
113113 * close to OpenCL device \p device.
114114 *
115 * Return the CPU set describing the locality of the OpenCL device \p device.
115 * Store in \p set the CPU-set describing the locality of the OpenCL device \p device.
116116 *
117117 * Topology \p topology and device \p device must match the local machine.
118118 * I/O devices detection and the OpenCL component are not needed in the topology.
161161 /** \brief Get the hwloc OS device object corresponding to the
162162 * OpenCL device for the given indexes.
163163 *
164 * Return the OS device object describing the OpenCL device
164 * \return The hwloc OS device object describing the OpenCL device
165165 * whose platform index is \p platform_index,
166166 * and whose device index within this platform if \p device_index.
167 * Return NULL if there is none.
167 * \return \c NULL if there is none.
168168 *
169169 * The topology \p topology does not necessarily have to match the current
170170 * machine. For instance the topology may be an XML import of a remote host.
191191
192192 /** \brief Get the hwloc OS device object corresponding to OpenCL device \p deviceX.
193193 *
194 * Use OpenCL device attributes to find the corresponding hwloc OS device object.
195 * Return NULL if there is none or if useful attributes are not available.
194 * \return The hwloc OS device object corresponding to the given OpenCL device \p device.
195 * \return \c NULL if none could be found, for instance
196 * if required OpenCL attributes are not available.
196197 *
197198 * This function currently only works on AMD and NVIDIA OpenCL devices that support
198199 * relevant OpenCL extensions. hwloc_opencl_get_device_osdev_by_index()
00 /*
11 * Copyright © 2009 CNRS
2 * Copyright © 2009-2020 Inria. All rights reserved.
2 * Copyright © 2009-2021 Inria. All rights reserved.
33 * Copyright © 2009-2010 Université Bordeaux
44 * Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
55 * See COPYING in top-level directory.
4343 /** \brief Get the CPU set of processors that are physically
4444 * close to device \p ibdev.
4545 *
46 * Return the CPU set describing the locality of the OpenFabrics
46 * Store in \p set the CPU-set describing the locality of the OpenFabrics
4747 * device \p ibdev (InfiniBand, etc).
4848 *
4949 * Topology \p topology and device \p ibdev must match the local machine.
8787 /** \brief Get the hwloc OS device object corresponding to the OpenFabrics
8888 * device named \p ibname.
8989 *
90 * Return the OS device object describing the OpenFabrics device
90 * \return The hwloc OS device object describing the OpenFabrics device
9191 * (InfiniBand, Omni-Path, usNIC, etc) whose name is \p ibname
9292 * (mlx5_0, hfi1_0, usnic_0, qib0, etc).
93 * Returns NULL if there is none.
93 * \return \c NULL if none could be found.
94 *
9495 * The name \p ibname is usually obtained from ibv_get_device_name().
9596 *
9697 * The topology \p topology does not necessarily have to match the current
116117 /** \brief Get the hwloc OS device object corresponding to the OpenFabrics
117118 * device \p ibdev.
118119 *
119 * Return the OS device object describing the OpenFabrics device \p ibdev
120 * (InfiniBand, etc). Returns NULL if there is none.
120 * \return The hwloc OS device object describing the OpenFabrics
121 * device \p ibdev (InfiniBand, etc).
122 * \return \c NULL if none could be found.
121123 *
122124 * Topology \p topology and device \p ibdev must match the local machine.
123125 * I/O devices detection must be enabled in the topology.
00 /*
1 * Copyright © 2013-2020 Inria. All rights reserved.
1 * Copyright © 2013-2021 Inria. All rights reserved.
22 * Copyright © 2016 Cisco Systems, Inc. All rights reserved.
33 * See COPYING in top-level directory.
44 */
2626
2727
2828 /** \defgroup hwlocality_disc_components Components and Plugins: Discovery components
29 *
30 * \note These structures and functions may change when ::HWLOC_COMPONENT_ABI is modified.
31 *
2932 * @{
3033 */
3134
9295
9396
9497 /** \defgroup hwlocality_disc_backends Components and Plugins: Discovery backends
98 *
99 * \note These structures and functions may change when ::HWLOC_COMPONENT_ABI is modified.
100 *
95101 * @{
96102 */
97103
240246
241247
242248 /** \defgroup hwlocality_generic_components Components and Plugins: Generic components
249 *
250 * \note These structures and functions may change when ::HWLOC_COMPONENT_ABI is modified.
251 *
243252 * @{
244253 */
245254
309318
310319
311320 /** \defgroup hwlocality_components_core_funcs Components and Plugins: Core functions to be used by components
321 *
322 * \note These structures and functions may change when ::HWLOC_COMPONENT_ABI is modified.
323 *
312324 * @{
313325 */
314326
315 /** \brief Check whether insertion errors are hidden */
327 /** \brief Check whether error messages are hidden.
328 *
329 * Callers should print critical error messages
330 * (e.g. invalid hw topo info, invalid config)
331 * only if this function returns strictly less than 2.
332 *
333 * Callers should print non-critical error messages
334 * (e.g. failure to initialize CUDA)
335 * if this function returns 0.
336 *
337 * This function return 1 by default (show critical only),
338 * 0 in lstopo (show all),
339 * or anything set in HWLOC_HIDE_ERRORS in the environment.
340 */
316341 HWLOC_DECLSPEC int hwloc_hide_errors(void);
317342
318343 /** \brief Add an object to the topology.
454479
455480
456481 /** \defgroup hwlocality_components_filtering Components and Plugins: Filtering objects
482 *
483 * \note These structures and functions may change when ::HWLOC_COMPONENT_ABI is modified.
484 *
457485 * @{
458486 */
459487
471499 || baseclass == 0x0b /* PCI_BASE_CLASS_PROCESSOR */
472500 || classid == 0x0c04 /* PCI_CLASS_SERIAL_FIBER */
473501 || classid == 0x0c06 /* PCI_CLASS_SERIAL_INFINIBAND */
502 || baseclass == 0x06 /* PCI_BASE_CLASS_BRIDGE with non-PCI downstream. the core will drop the useless ones later */
474503 || baseclass == 0x12 /* Processing Accelerators */);
475504 }
476505
526555
527556
528557 /** \defgroup hwlocality_components_pcidisc Components and Plugins: helpers for PCI discovery
558 *
559 * \note These structures and functions may change when ::HWLOC_COMPONENT_ABI is modified.
560 *
529561 * @{
530562 */
531563
577609
578610
579611 /** \defgroup hwlocality_components_pcifind Components and Plugins: finding PCI objects during other discoveries
612 *
613 * \note These structures and functions may change when ::HWLOC_COMPONENT_ABI is modified.
614 *
580615 * @{
581616 */
582617
583 /** \brief Find the normal parent of a PCI bus ID.
584 *
585 * Look at PCI affinity to find out where the given PCI bus ID should be attached.
586 *
587 * This function should be used to attach an I/O device under the corresponding
588 * PCI object (if any), or under a normal (non-I/O) object with same locality.
618 /** \brief Find the object or a parent of a PCI bus ID.
619 *
620 * When attaching a new object (typically an OS device) whose locality
621 * is specified by PCI bus ID, this function returns the PCI object
622 * to use as a parent for attaching.
623 *
624 * If the exact PCI device with this bus ID exists, it is returned.
625 * Otherwise (for instance if it was filtered out), the function returns
626 * another object with similar locality (for instance a parent bridge,
627 * or the local CPU Package).
589628 */
590629 HWLOC_DECLSPEC struct hwloc_obj * hwloc_pci_find_parent_by_busid(struct hwloc_topology *topology, unsigned domain, unsigned bus, unsigned dev, unsigned func);
591630
631 /** \brief Find the PCI device or bridge matching a PCI bus ID exactly.
632 *
633 * This is useful for adding specific information about some objects
634 * based on their PCI id. When it comes to attaching objects based on
635 * PCI locality, hwloc_pci_find_parent_by_busid() should be preferred.
636 */
637 HWLOC_DECLSPEC struct hwloc_obj * hwloc_pci_find_by_busid(struct hwloc_topology *topology, unsigned domain, unsigned bus, unsigned dev, unsigned func);
638
639 /** \brief Handle to a new distances structure during its addition to the topology. */
640 typedef void * hwloc_backend_distances_add_handle_t;
641
642 /** \brief Create a new empty distances structure.
643 *
644 * This is identical to hwloc_distances_add_create()
645 * but this variant is designed for backend inserting
646 * distances during topology discovery.
647 */
648 HWLOC_DECLSPEC hwloc_backend_distances_add_handle_t
649 hwloc_backend_distances_add_create(hwloc_topology_t topology,
650 const char *name, unsigned long kind,
651 unsigned long flags);
652
653 /** \brief Specify the objects and values in a new empty distances structure.
654 *
655 * This is similar to hwloc_distances_add_values()
656 * but this variant is designed for backend inserting
657 * distances during topology discovery.
658 *
659 * The only semantical difference is that \p objs and \p values
660 * are not duplicated, but directly attached to the topology.
661 * On success, these arrays are given to the core and should not
662 * ever be freed by the caller anymore.
663 */
664 HWLOC_DECLSPEC int
665 hwloc_backend_distances_add_values(hwloc_topology_t topology,
666 hwloc_backend_distances_add_handle_t handle,
667 unsigned nbobjs, hwloc_obj_t *objs,
668 hwloc_uint64_t *values,
669 unsigned long flags);
670
671 /** \brief Commit a new distances structure.
672 *
673 * This is similar to hwloc_distances_add_commit()
674 * but this variant is designed for backend inserting
675 * distances during topology discovery.
676 */
677 HWLOC_DECLSPEC int
678 hwloc_backend_distances_add_commit(hwloc_topology_t topology,
679 hwloc_backend_distances_add_handle_t handle,
680 unsigned long flags);
681
592682 /** @} */
593683
594684
00 /*
11 * Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
2 * Copyright © 2010-2020 Inria. All rights reserved.
2 * Copyright © 2010-2021 Inria. All rights reserved.
33 * See COPYING in top-level directory.
44 */
55
119119 #define HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM HWLOC_NAME_CAPS(TOPOLOGY_FLAG_IS_THISSYSTEM)
120120 #define HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES HWLOC_NAME_CAPS(TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES)
121121 #define HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT HWLOC_NAME_CAPS(TOPOLOGY_FLAG_IMPORT_SUPPORT)
122 #define HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING HWLOC_NAME_CAPS(TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING)
123 #define HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_MEMBINDING HWLOC_NAME_CAPS(TOPOLOGY_FLAG_RESTRICT_TO_MEMBINDING)
124 #define HWLOC_TOPOLOGY_FLAG_DONT_CHANGE_BINDING HWLOC_NAME_CAPS(TOPOLOGY_FLAG_DONT_CHANGE_BINDING)
122125
123126 #define hwloc_topology_set_pid HWLOC_NAME(topology_set_pid)
124127 #define hwloc_topology_set_synthetic HWLOC_NAME(topology_set_synthetic)
355358 #define hwloc_get_closest_objs HWLOC_NAME(get_closest_objs)
356359 #define hwloc_get_obj_below_by_type HWLOC_NAME(get_obj_below_by_type)
357360 #define hwloc_get_obj_below_array_by_type HWLOC_NAME(get_obj_below_array_by_type)
361 #define hwloc_get_obj_with_same_locality HWLOC_NAME(get_obj_with_same_locality)
358362 #define hwloc_distrib_flags_e HWLOC_NAME(distrib_flags_e)
359363 #define HWLOC_DISTRIB_FLAG_REVERSE HWLOC_NAME_CAPS(DISTRIB_FLAG_REVERSE)
360364 #define hwloc_distrib HWLOC_NAME(distrib)
453457 #define hwloc_distances_obj_index HWLOC_NAME(distances_obj_index)
454458 #define hwloc_distances_obj_pair_values HWLOC_NAME(distances_pair_values)
455459
460 #define hwloc_distances_transform_e HWLOC_NAME(distances_transform_e)
461 #define HWLOC_DISTANCES_TRANSFORM_REMOVE_NULL HWLOC_NAME_CAPS(DISTANCES_TRANSFORM_REMOVE_NULL)
462 #define HWLOC_DISTANCES_TRANSFORM_LINKS HWLOC_NAME_CAPS(DISTANCES_TRANSFORM_LINKS)
463 #define HWLOC_DISTANCES_TRANSFORM_MERGE_SWITCH_PORTS HWLOC_NAME_CAPS(DISTANCES_TRANSFORM_MERGE_SWITCH_PORTS)
464 #define HWLOC_DISTANCES_TRANSFORM_TRANSITIVE_CLOSURE HWLOC_NAME_CAPS(DISTANCES_TRANSFORM_TRANSITIVE_CLOSURE)
465 #define hwloc_distances_transform HWLOC_NAME(distances_transform)
466
456467 #define hwloc_distances_add_flag_e HWLOC_NAME(distances_add_flag_e)
457468 #define HWLOC_DISTANCES_ADD_FLAG_GROUP HWLOC_NAME_CAPS(DISTANCES_ADD_FLAG_GROUP)
458469 #define HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE HWLOC_NAME_CAPS(DISTANCES_ADD_FLAG_GROUP_INACCURATE)
459470
460 #define hwloc_distances_add HWLOC_NAME(distances_add)
471 #define hwloc_distances_add_handle_t HWLOC_NAME(distances_add_handle_t)
472 #define hwloc_distances_add_create HWLOC_NAME(distances_add_create)
473 #define hwloc_distances_add_values HWLOC_NAME(distances_add_values)
474 #define hwloc_distances_add_commit HWLOC_NAME(distances_add_commit)
475
461476 #define hwloc_distances_remove HWLOC_NAME(distances_remove)
462477 #define hwloc_distances_remove_by_depth HWLOC_NAME(distances_remove_by_depth)
463478 #define hwloc_distances_remove_by_type HWLOC_NAME(distances_remove_by_type)
522537 #define hwloc_linux_get_tid_last_cpu_location HWLOC_NAME(linux_get_tid_last_cpu_location)
523538 #define hwloc_linux_read_path_as_cpumask HWLOC_NAME(linux_read_file_cpumask)
524539
540 /* windows.h */
541
542 #define hwloc_windows_get_nr_processor_groups HWLOC_NAME(windows_get_nr_processor_groups)
543 #define hwloc_windows_get_processor_group_cpuset HWLOC_NAME(windows_get_processor_group_cpuset)
544
525545 /* openfabrics-verbs.h */
526546
527547 #define hwloc_ibv_get_device_cpuset HWLOC_NAME(ibv_get_device_cpuset)
562582 #define hwloc_rsmi_get_device_cpuset HWLOC_NAME(rsmi_get_device_cpuset)
563583 #define hwloc_rsmi_get_device_osdev HWLOC_NAME(rsmi_get_device_osdev)
564584 #define hwloc_rsmi_get_device_osdev_by_index HWLOC_NAME(rsmi_get_device_osdev_by_index)
585
586 /* levelzero.h */
587
588 #define hwloc_levelzero_get_device_cpuset HWLOC_NAME(levelzero_get_device_cpuset)
589 #define hwloc_levelzero_get_device_osdev HWLOC_NAME(levelzero_get_device_osdev)
565590
566591 /* gl.h */
567592
619644 #define hwloc_pcidisc_tree_insert_by_busid HWLOC_NAME(pcidisc_tree_insert_by_busid)
620645 #define hwloc_pcidisc_tree_attach HWLOC_NAME(pcidisc_tree_attach)
621646
647 #define hwloc_pci_find_by_busid HWLOC_NAME(pcidisc_find_by_busid)
622648 #define hwloc_pci_find_parent_by_busid HWLOC_NAME(pcidisc_find_busid_parent)
623649
650 #define hwloc_backend_distances_add_handle_t HWLOC_NAME(backend_distances_add_handle_t)
651 #define hwloc_backend_distances_add_create HWLOC_NAME(backend_distances_add_create)
652 #define hwloc_backend_distances_add_values HWLOC_NAME(backend_distances_add_values)
653 #define hwloc_backend_distances_add_commit HWLOC_NAME(backend_distances_add_commit)
654
624655 /* hwloc/deprecated.h */
656
657 #define hwloc_distances_add HWLOC_NAME(distances_add)
625658
626659 #define hwloc_topology_insert_misc_object_by_parent HWLOC_NAME(topology_insert_misc_object_by_parent)
627660 #define hwloc_obj_cpuset_snprintf HWLOC_NAME(obj_cpuset_snprintf)
732765
733766 #define hwloc_cuda_component HWLOC_NAME(cuda_component)
734767 #define hwloc_gl_component HWLOC_NAME(gl_component)
768 #define hwloc_levelzero_component HWLOC_NAME(levelzero_component)
735769 #define hwloc_nvml_component HWLOC_NAME(nvml_component)
736770 #define hwloc_rsmi_component HWLOC_NAME(rsmi_component)
737771 #define hwloc_opencl_component HWLOC_NAME(opencl_component)
771805 #define hwloc_pci_discovery_init HWLOC_NAME(pci_discovery_init)
772806 #define hwloc_pci_discovery_prepare HWLOC_NAME(pci_discovery_prepare)
773807 #define hwloc_pci_discovery_exit HWLOC_NAME(pci_discovery_exit)
774 #define hwloc_pci_find_by_busid HWLOC_NAME(pcidisc_find_by_busid)
775808 #define hwloc_find_insert_io_parent_by_complete_cpuset HWLOC_NAME(hwloc_find_insert_io_parent_by_complete_cpuset)
776809
777810 #define hwloc__add_info HWLOC_NAME(_add_info)
815848 #define hwloc_internal_distances_dup HWLOC_NAME(internal_distances_dup)
816849 #define hwloc_internal_distances_refresh HWLOC_NAME(internal_distances_refresh)
817850 #define hwloc_internal_distances_destroy HWLOC_NAME(internal_distances_destroy)
818
819851 #define hwloc_internal_distances_add HWLOC_NAME(internal_distances_add)
820852 #define hwloc_internal_distances_add_by_index HWLOC_NAME(internal_distances_add_by_index)
821853 #define hwloc_internal_distances_invalidate_cached_objs HWLOC_NAME(hwloc_internal_distances_invalidate_cached_objs)
00 /*
1 * Copyright © 2012-2020 Inria. All rights reserved.
1 * Copyright © 2012-2021 Inria. All rights reserved.
22 * Copyright (c) 2020, Advanced Micro Devices, Inc. All rights reserved.
33 * Written by Advanced Micro Devices,
44 * See COPYING in top-level directory.
4040 /** \brief Get the CPU set of logical processors that are physically
4141 * close to AMD GPU device whose index is \p dv_ind.
4242 *
43 * Return the CPU set describing the locality of the AMD GPU device
43 * Store in \p set the CPU-set describing the locality of the AMD GPU device
4444 * whose index is \p dv_ind.
4545 *
4646 * Topology \p topology and device \p dv_ind must match the local machine.
9595 /** \brief Get the hwloc OS device object corresponding to the
9696 * AMD GPU device whose index is \p dv_ind.
9797 *
98 * Return the OS device object describing the AMD GPU device whose
99 * index is \p dv_ind. Returns NULL if there is none.
98 * \return The hwloc OS device object describing the AMD GPU device whose
99 * index is \p dv_ind.
100 * \return \c NULL if none could be found.
100101 *
101102 * The topology \p topology does not necessarily have to match the current
102103 * machine. For instance the topology may be an XML import of a remote host.
123124 /** \brief Get the hwloc OS device object corresponding to AMD GPU device,
124125 * whose index is \p dv_ind.
125126 *
126 * Return the hwloc OS device object that describes the given
127 * AMD GPU, whose index is \p dv_ind Return NULL if there is none.
127 * \return The hwloc OS device object that describes the given
128 * AMD GPU, whose index is \p dv_ind.
129 * \return \c NULL if none could be found.
128130 *
129131 * Topology \p topology and device \p dv_ind must match the local machine.
130132 * I/O devices detection and the ROCm SMI component must be enabled in the
0 /*
1 * Copyright © 2021 Inria. All rights reserved.
2 * See COPYING in top-level directory.
3 */
4
5 /** \file
6 * \brief Macros to help interaction between hwloc and Windows.
7 *
8 * Applications that use hwloc on Windows may want to include this file
9 * for Windows specific hwloc features.
10 */
11
12 #ifndef HWLOC_WINDOWS_H
13 #define HWLOC_WINDOWS_H
14
15 #include "hwloc.h"
16
17
18 #ifdef __cplusplus
19 extern "C" {
20 #endif
21
22
23 /** \defgroup hwlocality_windows Windows-specific helpers
24 *
25 * These functions query Windows processor groups.
26 * These groups partition the operating system into virtual sets
27 * of up to 64 neighbor PUs.
28 * Threads and processes may only be bound inside a single group.
29 * Although Windows processor groups may be exposed in the hwloc
30 * hierarchy as hwloc Groups, they are also often merged into
31 * existing hwloc objects such as NUMA nodes or Packages.
32 * This API provides explicit information about Windows processor
33 * groups so that applications know whether binding to a large
34 * set of PUs may fail because it spans over multiple Windows
35 * processor groups.
36 *
37 * @{
38 */
39
40
41 /** \brief Get the number of Windows processor groups
42 *
43 * \p flags must be 0 for now.
44 *
45 * \return at least \c 1 on success.
46 * \return -1 on error, for instance if the topology does not match
47 * the current system (e.g. loaded from another machine through XML).
48 */
49 HWLOC_DECLSPEC int hwloc_windows_get_nr_processor_groups(hwloc_topology_t topology, unsigned long flags);
50
51 /** \brief Get the CPU-set of a Windows processor group.
52 *
53 * Get the set of PU included in the processor group specified
54 * by \p pg_index.
55 * \p pg_index must be between \c 0 and the value returned
56 * by hwloc_windows_get_nr_processor_groups() minus 1.
57 *
58 * \p flags must be 0 for now.
59 *
60 * \return \c 0 on success.
61 * \return \c -1 on error, for instance if \p pg_index is invalid,
62 * or if the topology does not match the current system (e.g. loaded
63 * from another machine through XML).
64 */
65 HWLOC_DECLSPEC int hwloc_windows_get_processor_group_cpuset(hwloc_topology_t topology, unsigned pg_index, hwloc_cpuset_t cpuset, unsigned long flags);
66
67 /** @} */
68
69
70 #ifdef __cplusplus
71 } /* extern "C" */
72 #endif
73
74
75 #endif /* HWLOC_WINDOWS_H */
9292 * Two stable releases of the same series usually have the same ::HWLOC_API_VERSION
9393 * even if their HWLOC_VERSION are different.
9494 */
95 #define HWLOC_API_VERSION 0x00020400
95 #define HWLOC_API_VERSION 0x00020500
9696
9797 /** \brief Indicate at runtime which hwloc API version was used at build time.
9898 *
19651965 * hwloc and machine support.
19661966 *
19671967 */
1968 HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT = (1UL<<3)
1968 HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT = (1UL<<3),
1969
1970 /** \brief Do not consider resources outside of the process CPU binding.
1971 *
1972 * If the binding of the process is limited to a subset of cores,
1973 * ignore the other cores during discovery.
1974 *
1975 * The resulting topology is identical to what a call to hwloc_topology_restrict()
1976 * would generate, but this flag also prevents hwloc from ever touching other
1977 * resources during the discovery.
1978 *
1979 * This flag especially tells the x86 backend to never temporarily
1980 * rebind a thread on any excluded core. This is useful on Windows
1981 * because such temporary rebinding can change the process binding.
1982 *
1983 * If process CPU binding is not supported,
1984 * the thread CPU binding is considered instead if supported,
1985 * or the flag is ignored.
1986 *
1987 * This flag requires ::HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM as well
1988 * since binding support is required.
1989 */
1990 HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING = (1UL<<4),
1991
1992 /** \brief Do not consider resources outside of the process memory binding.
1993 *
1994 * If the binding of the process is limited to a subset of NUMA nodes,
1995 * ignore the other NUMA nodes during discovery.
1996 *
1997 * The resulting topology is identical to what a call to hwloc_topology_restrict()
1998 * would generate, but this flag also prevents hwloc from ever touching other
1999 * resources during the discovery.
2000 *
2001 * This flag is meant to be used together with
2002 * ::HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING when both cores
2003 * and NUMA nodes should be ignored outside of the process binding.
2004 *
2005 * If process memory binding is not supported,
2006 * the thread memory binding is considered instead if supported,
2007 * or the flag is ignored.
2008 *
2009 * This flag requires ::HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM as well
2010 * since binding support is required.
2011 */
2012 HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_MEMBINDING = (1UL<<5),
2013
2014 /** \brief Do not ever modify the process or thread binding during discovery.
2015 *
2016 * This flag disables all hwloc discovery steps that require a change of
2017 * the process or thread binding. This currently only affects the x86
2018 * backend which gets entirely disabled.
2019 *
2020 * This is useful when hwloc_topology_load() is called while the
2021 * application also creates additional threads or modifies the binding.
2022 *
2023 * This flag is also a strict way to make sure the process binding will
2024 * not change to due thread binding changes on Windows
2025 * (see ::HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING).
2026 */
2027 HWLOC_TOPOLOGY_FLAG_DONT_CHANGE_BINDING = (1UL<<6)
19692028 };
19702029
19712030 /** \brief Set OR'ed flags to non-yet-loaded topology.
229229 /* Define to 1 if you have the <langinfo.h> header file. */
230230 #undef HAVE_LANGINFO_H
231231
232 /* Define to 1 if you have the <level_zero/zes_api.h> header file. */
233 #undef HAVE_LEVEL_ZERO_ZES_API_H
234
235 /* Define to 1 if you have the <level_zero/ze_api.h> header file. */
236 #undef HAVE_LEVEL_ZERO_ZE_API_H
237
232238 /* Define to 1 if we have -lgdi32 */
233239 #undef HAVE_LIBGDI32
234240
265271 /* Define to 1 if you have the `memalign' function. */
266272 #undef HAVE_MEMALIGN
267273
268 /* Define to 1 if you have the <memory.h> header file. */
269 #undef HAVE_MEMORY_H
274 /* Define to 1 if you have the <minix/config.h> header file. */
275 #undef HAVE_MINIX_CONFIG_H
270276
271277 /* Define to 1 if you have the `mkstemp' function. */
272278 #undef HAVE_MKSTEMP
344350 /* Define to 1 if you have the <stdint.h> header file. */
345351 #undef HAVE_STDINT_H
346352
353 /* Define to 1 if you have the <stdio.h> header file. */
354 #undef HAVE_STDIO_H
355
347356 /* Define to 1 if you have the <stdlib.h> header file. */
348357 #undef HAVE_STDLIB_H
349358
424433 /* Define to 1 if you have the <valgrind/valgrind.h> header file. */
425434 #undef HAVE_VALGRIND_VALGRIND_H
426435
436 /* Define to 1 if you have the <wchar.h> header file. */
437 #undef HAVE_WCHAR_H
438
427439 /* Define to 1 if the system has the type `wchar_t'. */
428440 #undef HAVE_WCHAR_T
429441
477489
478490 /* Whether your compiler has __attribute__ const or not */
479491 #undef HWLOC_HAVE_ATTRIBUTE_CONST
492
493 /* Whether your compiler has __attribute__ constructor or not */
494 #undef HWLOC_HAVE_ATTRIBUTE_CONSTRUCTOR
480495
481496 /* Whether your compiler has __attribute__ deprecated or not */
482497 #undef HWLOC_HAVE_ATTRIBUTE_DEPRECATED
590605 /* Define to 1 if you have the GL module components. */
591606 #undef HWLOC_HAVE_GL
592607
608 /* Define to 1 if you have the `LevelZero' library. */
609 #undef HWLOC_HAVE_LEVELZERO
610
593611 /* Define to 1 if you have a library providing the termcap interface */
594612 #undef HWLOC_HAVE_LIBTERMCAP
595613
750768 /* The size of `void *', as computed by sizeof. */
751769 #undef SIZEOF_VOID_P
752770
753 /* Define to 1 if you have the ANSI C header files. */
771 /* Define to 1 if all of the C90 standard headers exist (not just the ones
772 required in a freestanding environment). This macro is provided for
773 backward compatibility; new code need not use it. */
754774 #undef STDC_HEADERS
755775
756776 /* Enable extensions on HP-UX. */
763783 #ifndef _ALL_SOURCE
764784 # undef _ALL_SOURCE
765785 #endif
786 /* Enable general extensions on macOS. */
787 #ifndef _DARWIN_C_SOURCE
788 # undef _DARWIN_C_SOURCE
789 #endif
790 /* Enable general extensions on Solaris. */
791 #ifndef __EXTENSIONS__
792 # undef __EXTENSIONS__
793 #endif
766794 /* Enable GNU extensions on systems that have them. */
767795 #ifndef _GNU_SOURCE
768796 # undef _GNU_SOURCE
769797 #endif
770 /* Enable threading extensions on Solaris. */
798 /* Enable X/Open compliant socket functions that do not require linking
799 with -lxnet on HP-UX 11.11. */
800 #ifndef _HPUX_ALT_XOPEN_SOCKET_API
801 # undef _HPUX_ALT_XOPEN_SOCKET_API
802 #endif
803 /* Identify the host operating system as Minix.
804 This macro does not affect the system headers' behavior.
805 A future release of Autoconf may stop defining this macro. */
806 #ifndef _MINIX
807 # undef _MINIX
808 #endif
809 /* Enable general extensions on NetBSD.
810 Enable NetBSD compatibility extensions on Minix. */
811 #ifndef _NETBSD_SOURCE
812 # undef _NETBSD_SOURCE
813 #endif
814 /* Enable OpenBSD compatibility extensions on NetBSD.
815 Oddly enough, this does nothing on OpenBSD. */
816 #ifndef _OPENBSD_SOURCE
817 # undef _OPENBSD_SOURCE
818 #endif
819 /* Define to 1 if needed for POSIX-compatible behavior. */
820 #ifndef _POSIX_SOURCE
821 # undef _POSIX_SOURCE
822 #endif
823 /* Define to 2 if needed for POSIX-compatible behavior. */
824 #ifndef _POSIX_1_SOURCE
825 # undef _POSIX_1_SOURCE
826 #endif
827 /* Enable POSIX-compatible threading on Solaris. */
771828 #ifndef _POSIX_PTHREAD_SEMANTICS
772829 # undef _POSIX_PTHREAD_SEMANTICS
830 #endif
831 /* Enable extensions specified by ISO/IEC TS 18661-5:2014. */
832 #ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__
833 # undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__
834 #endif
835 /* Enable extensions specified by ISO/IEC TS 18661-1:2014. */
836 #ifndef __STDC_WANT_IEC_60559_BFP_EXT__
837 # undef __STDC_WANT_IEC_60559_BFP_EXT__
838 #endif
839 /* Enable extensions specified by ISO/IEC TS 18661-2:2015. */
840 #ifndef __STDC_WANT_IEC_60559_DFP_EXT__
841 # undef __STDC_WANT_IEC_60559_DFP_EXT__
842 #endif
843 /* Enable extensions specified by ISO/IEC TS 18661-4:2015. */
844 #ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__
845 # undef __STDC_WANT_IEC_60559_FUNCS_EXT__
846 #endif
847 /* Enable extensions specified by ISO/IEC TS 18661-3:2015. */
848 #ifndef __STDC_WANT_IEC_60559_TYPES_EXT__
849 # undef __STDC_WANT_IEC_60559_TYPES_EXT__
850 #endif
851 /* Enable extensions specified by ISO/IEC TR 24731-2:2010. */
852 #ifndef __STDC_WANT_LIB_EXT2__
853 # undef __STDC_WANT_LIB_EXT2__
854 #endif
855 /* Enable extensions specified by ISO/IEC 24747:2009. */
856 #ifndef __STDC_WANT_MATH_SPEC_FUNCS__
857 # undef __STDC_WANT_MATH_SPEC_FUNCS__
773858 #endif
774859 /* Enable extensions on HP NonStop. */
775860 #ifndef _TANDEM_SOURCE
776861 # undef _TANDEM_SOURCE
777862 #endif
778 /* Enable general extensions on Solaris. */
779 #ifndef __EXTENSIONS__
780 # undef __EXTENSIONS__
863 /* Enable X/Open extensions. Define to 500 only if necessary
864 to make mbstate_t available. */
865 #ifndef _XOPEN_SOURCE
866 # undef _XOPEN_SOURCE
781867 #endif
782868
783869
790876 /* Are we building for HP-UX? */
791877 #undef _HPUX_SOURCE
792878
793 /* Define to 1 if on MINIX. */
794 #undef _MINIX
795
796 /* Define to 2 if the system does not provide POSIX.1 features except with
797 this defined. */
798 #undef _POSIX_1_SOURCE
799
800 /* Define to 1 if you need to in order for `stat' and other things to work. */
801 #undef _POSIX_SOURCE
802
803879 /* Define this to the process ID type */
804880 #undef hwloc_pid_t
805881
00 /*
1 * Copyright © 2018-2019 Inria. All rights reserved.
1 * Copyright © 2018-2020 Inria. All rights reserved.
22 *
33 * See COPYING in top-level directory.
44 */
3030 HWLOC_DECLSPEC extern const struct hwloc_component hwloc_gl_component;
3131 HWLOC_DECLSPEC extern const struct hwloc_component hwloc_nvml_component;
3232 HWLOC_DECLSPEC extern const struct hwloc_component hwloc_rsmi_component;
33 HWLOC_DECLSPEC extern const struct hwloc_component hwloc_levelzero_component;
3334 HWLOC_DECLSPEC extern const struct hwloc_component hwloc_opencl_component;
3435 HWLOC_DECLSPEC extern const struct hwloc_component hwloc_pci_component;
3536
00 /*
11 * Copyright © 2009 CNRS
2 * Copyright © 2009-2020 Inria. All rights reserved.
2 * Copyright © 2009-2021 Inria. All rights reserved.
33 * Copyright © 2009-2012, 2020 Université Bordeaux
44 * Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
55 *
165165 unsigned long kind;
166166
167167 #define HWLOC_INTERNAL_DIST_FLAG_OBJS_VALID (1U<<0) /* if the objs array is valid below */
168 #define HWLOC_INTERNAL_DIST_FLAG_NOT_COMMITTED (1U<<1) /* if the distances isn't in the list yet */
168169 unsigned iflags;
169170
170171 /* objects are currently stored in physical_index order */
303304 extern void hwloc_pci_discovery_prepare(struct hwloc_topology *topology);
304305 extern void hwloc_pci_discovery_exit(struct hwloc_topology *topology);
305306
306 /* Look for an object matching the given domain/bus/func,
307 * either exactly or return the smallest container bridge
308 */
309 extern struct hwloc_obj * hwloc_pci_find_by_busid(struct hwloc_topology *topology, unsigned domain, unsigned bus, unsigned dev, unsigned func);
310
311307 /* Look for an object matching complete cpuset exactly, or insert one.
312308 * Return NULL on failure.
313309 * Return a good fallback (object above) on failure to insert.
407403 extern void hwloc_internal_distances_destroy(hwloc_topology_t topology);
408404 extern int hwloc_internal_distances_dup(hwloc_topology_t new, hwloc_topology_t old);
409405 extern void hwloc_internal_distances_refresh(hwloc_topology_t topology);
406 extern void hwloc_internal_distances_invalidate_cached_objs(hwloc_topology_t topology);
407
408 /* these distances_add() functions are higher-level than those in hwloc/plugins.h
409 * but they may change in the future, hence they are not exported to plugins.
410 */
411 extern int hwloc_internal_distances_add_by_index(hwloc_topology_t topology, const char *name, hwloc_obj_type_t unique_type, hwloc_obj_type_t *different_types, unsigned nbobjs, uint64_t *indexes, uint64_t *values, unsigned long kind, unsigned long flags);
410412 extern int hwloc_internal_distances_add(hwloc_topology_t topology, const char *name, unsigned nbobjs, hwloc_obj_t *objs, uint64_t *values, unsigned long kind, unsigned long flags);
411 extern int hwloc_internal_distances_add_by_index(hwloc_topology_t topology, const char *name, hwloc_obj_type_t unique_type, hwloc_obj_type_t *different_types, unsigned nbobjs, uint64_t *indexes, uint64_t *values, unsigned long kind, unsigned long flags);
412 extern void hwloc_internal_distances_invalidate_cached_objs(hwloc_topology_t topology);
413413
414414 extern void hwloc_internal_memattrs_init(hwloc_topology_t topology);
415415 extern void hwloc_internal_memattrs_prepare(hwloc_topology_t topology);
295295 CONFIGURE_DEPENDENCIES = @CONFIGURE_DEPENDENCIES@
296296 CPP = @CPP@
297297 CPPFLAGS = @CPPFLAGS@
298 CUDA_VERSION = @CUDA_VERSION@
298299 CXX = @CXX@
299300 CXXCPP = @CXXCPP@
300301 CXXDEPMODE = @CXXDEPMODE@
321322 HWLOC_CAIRO_LIBS = @HWLOC_CAIRO_LIBS@
322323 HWLOC_CFLAGS = @HWLOC_CFLAGS@
323324 HWLOC_CPPFLAGS = @HWLOC_CPPFLAGS@
325 HWLOC_CUDART_CFLAGS = @HWLOC_CUDART_CFLAGS@
326 HWLOC_CUDART_CPPFLAGS = @HWLOC_CUDART_CPPFLAGS@
327 HWLOC_CUDART_LDFLAGS = @HWLOC_CUDART_LDFLAGS@
328 HWLOC_CUDART_LIBS = @HWLOC_CUDART_LIBS@
329 HWLOC_CUDA_CFLAGS = @HWLOC_CUDA_CFLAGS@
330 HWLOC_CUDA_CPPFLAGS = @HWLOC_CUDA_CPPFLAGS@
331 HWLOC_CUDA_LDFLAGS = @HWLOC_CUDA_LDFLAGS@
324332 HWLOC_CUDA_LIBS = @HWLOC_CUDA_LIBS@
325333 HWLOC_DIFF_U = @HWLOC_DIFF_U@
326334 HWLOC_DIFF_W = @HWLOC_DIFF_W@
331339 HWLOC_EMBEDDED_LDFLAGS = @HWLOC_EMBEDDED_LDFLAGS@
332340 HWLOC_EMBEDDED_LIBS = @HWLOC_EMBEDDED_LIBS@
333341 HWLOC_GL_LIBS = @HWLOC_GL_LIBS@
342 HWLOC_HAVE_LEVELZERO = @HWLOC_HAVE_LEVELZERO@
334343 HWLOC_HAVE_LIBXML2 = @HWLOC_HAVE_LIBXML2@
335344 HWLOC_HAVE_NVML = @HWLOC_HAVE_NVML@
336345 HWLOC_HAVE_OPENCL = @HWLOC_HAVE_OPENCL@
337346 HWLOC_HAVE_RSMI = @HWLOC_HAVE_RSMI@
347 HWLOC_IBVERBS_LIBS = @HWLOC_IBVERBS_LIBS@
338348 HWLOC_LDFLAGS = @HWLOC_LDFLAGS@
349 HWLOC_LEVELZERO_CFLAGS = @HWLOC_LEVELZERO_CFLAGS@
350 HWLOC_LEVELZERO_LIBS = @HWLOC_LEVELZERO_LIBS@
339351 HWLOC_LIBS = @HWLOC_LIBS@
340352 HWLOC_LIBS_PRIVATE = @HWLOC_LIBS_PRIVATE@
341353 HWLOC_LIBXML2_CFLAGS = @HWLOC_LIBXML2_CFLAGS@
345357 HWLOC_MS_LIB_ARCH = @HWLOC_MS_LIB_ARCH@
346358 HWLOC_NUMA_CFLAGS = @HWLOC_NUMA_CFLAGS@
347359 HWLOC_NUMA_LIBS = @HWLOC_NUMA_LIBS@
360 HWLOC_NVML_CPPFLAGS = @HWLOC_NVML_CPPFLAGS@
361 HWLOC_NVML_LDFLAGS = @HWLOC_NVML_LDFLAGS@
348362 HWLOC_NVML_LIBS = @HWLOC_NVML_LIBS@
349 HWLOC_OPENCL_CFLAGS = @HWLOC_OPENCL_CFLAGS@
363 HWLOC_OPENCL_CPPFLAGS = @HWLOC_OPENCL_CPPFLAGS@
350364 HWLOC_OPENCL_LDFLAGS = @HWLOC_OPENCL_LDFLAGS@
351365 HWLOC_OPENCL_LIBS = @HWLOC_OPENCL_LIBS@
352366 HWLOC_PCIACCESS_CFLAGS = @HWLOC_PCIACCESS_CFLAGS@
472486 prefix = @prefix@
473487 program_transform_name = @program_transform_name@
474488 psdir = @psdir@
489 runstatedir = @runstatedir@
475490 sbindir = @sbindir@
476491 sharedstatedir = @sharedstatedir@
477492 srcdir = @srcdir@
216216 CONFIGURE_DEPENDENCIES = @CONFIGURE_DEPENDENCIES@
217217 CPP = @CPP@
218218 CPPFLAGS = @CPPFLAGS@
219 CUDA_VERSION = @CUDA_VERSION@
219220 CXX = @CXX@
220221 CXXCPP = @CXXCPP@
221222 CXXDEPMODE = @CXXDEPMODE@
242243 HWLOC_CAIRO_LIBS = @HWLOC_CAIRO_LIBS@
243244 HWLOC_CFLAGS = @HWLOC_CFLAGS@
244245 HWLOC_CPPFLAGS = @HWLOC_CPPFLAGS@
246 HWLOC_CUDART_CFLAGS = @HWLOC_CUDART_CFLAGS@
247 HWLOC_CUDART_CPPFLAGS = @HWLOC_CUDART_CPPFLAGS@
248 HWLOC_CUDART_LDFLAGS = @HWLOC_CUDART_LDFLAGS@
249 HWLOC_CUDART_LIBS = @HWLOC_CUDART_LIBS@
250 HWLOC_CUDA_CFLAGS = @HWLOC_CUDA_CFLAGS@
251 HWLOC_CUDA_CPPFLAGS = @HWLOC_CUDA_CPPFLAGS@
252 HWLOC_CUDA_LDFLAGS = @HWLOC_CUDA_LDFLAGS@
245253 HWLOC_CUDA_LIBS = @HWLOC_CUDA_LIBS@
246254 HWLOC_DIFF_U = @HWLOC_DIFF_U@
247255 HWLOC_DIFF_W = @HWLOC_DIFF_W@
252260 HWLOC_EMBEDDED_LDFLAGS = @HWLOC_EMBEDDED_LDFLAGS@
253261 HWLOC_EMBEDDED_LIBS = @HWLOC_EMBEDDED_LIBS@
254262 HWLOC_GL_LIBS = @HWLOC_GL_LIBS@
263 HWLOC_HAVE_LEVELZERO = @HWLOC_HAVE_LEVELZERO@
255264 HWLOC_HAVE_LIBXML2 = @HWLOC_HAVE_LIBXML2@
256265 HWLOC_HAVE_NVML = @HWLOC_HAVE_NVML@
257266 HWLOC_HAVE_OPENCL = @HWLOC_HAVE_OPENCL@
258267 HWLOC_HAVE_RSMI = @HWLOC_HAVE_RSMI@
268 HWLOC_IBVERBS_LIBS = @HWLOC_IBVERBS_LIBS@
259269 HWLOC_LDFLAGS = @HWLOC_LDFLAGS@
270 HWLOC_LEVELZERO_CFLAGS = @HWLOC_LEVELZERO_CFLAGS@
271 HWLOC_LEVELZERO_LIBS = @HWLOC_LEVELZERO_LIBS@
260272 HWLOC_LIBS = @HWLOC_LIBS@
261273 HWLOC_LIBS_PRIVATE = @HWLOC_LIBS_PRIVATE@
262274 HWLOC_LIBXML2_CFLAGS = @HWLOC_LIBXML2_CFLAGS@
266278 HWLOC_MS_LIB_ARCH = @HWLOC_MS_LIB_ARCH@
267279 HWLOC_NUMA_CFLAGS = @HWLOC_NUMA_CFLAGS@
268280 HWLOC_NUMA_LIBS = @HWLOC_NUMA_LIBS@
281 HWLOC_NVML_CPPFLAGS = @HWLOC_NVML_CPPFLAGS@
282 HWLOC_NVML_LDFLAGS = @HWLOC_NVML_LDFLAGS@
269283 HWLOC_NVML_LIBS = @HWLOC_NVML_LIBS@
270 HWLOC_OPENCL_CFLAGS = @HWLOC_OPENCL_CFLAGS@
284 HWLOC_OPENCL_CPPFLAGS = @HWLOC_OPENCL_CPPFLAGS@
271285 HWLOC_OPENCL_LDFLAGS = @HWLOC_OPENCL_LDFLAGS@
272286 HWLOC_OPENCL_LIBS = @HWLOC_OPENCL_LIBS@
273287 HWLOC_PCIACCESS_CFLAGS = @HWLOC_PCIACCESS_CFLAGS@
393407 prefix = @prefix@
394408 program_transform_name = @program_transform_name@
395409 psdir = @psdir@
410 runstatedir = @runstatedir@
396411 sbindir = @sbindir@
397412 sharedstatedir = @sharedstatedir@
398413 srcdir = @srcdir@
0 # Copyright © 2009-2020 Inria. All rights reserved.
0 # Copyright © 2009-2021 Inria. All rights reserved.
11 # Copyright © 2009-2012 Université Bordeaux
22 # Copyright © 2009-2014 Cisco Systems, Inc. All rights reserved.
33 # See COPYING in top-level directory.
4141 hwloc_get_obj_inside_cpuset \
4242 hwloc_get_shared_cache_covering_obj \
4343 hwloc_get_obj_below_array_by_type \
44 hwloc_get_obj_with_same_locality \
4445 hwloc_bitmap_first_last_weight \
4546 hwloc_bitmap_singlify \
4647 hwloc_type_depth \
6869 cpukinds \
6970 xmlbuffer \
7071 gl
72
73 if HWLOC_HAVE_WINDOWS
74 check_PROGRAMS += windows_processor_groups
75 endif HWLOC_HAVE_WINDOWS
7176
7277 if !HWLOC_HAVE_WINDOWS
7378 if !HWLOC_HAVE_DARWIN
107112 check_PROGRAMS += rsmi
108113 endif HWLOC_HAVE_RSMI
109114
115 if HWLOC_HAVE_LEVELZERO
116 check_PROGRAMS += levelzero
117 endif HWLOC_HAVE_LEVELZERO
118
110119 TESTS = $(check_PROGRAMS)
111120
112121 # The library has a different name depending on whether we are
119128
120129 LDADD += $(HWLOC_top_builddir)/hwloc/$(hwloc_lib)
121130
122 linux_libnuma_CFLAGS = $(AM_CFLAGS) $(HWLOC_NUMA_CFLAGS)
123 linux_libnuma_LDADD = $(LDADD) $(HWLOC_NUMA_LIBS)
124 openfabrics_verbs_LDADD = $(LDADD) -libverbs
131 linux_libnuma_CFLAGS = $(AM_CFLAGS) $(HWLOC_NUMA_CPPFLAGS) $(HWLOC_NUMA_CFLAGS)
132 linux_libnuma_LDADD = $(LDADD) $(HWLOC_NUMA_LIBS) $(HWLOC_NUMA_LDFLAGS)
133
134 openfabrics_verbs_CFLAGS = $(AM_CFLAGS) $(HWLOC_IBVERBS_CPPFLAGS) $(HWLOC_IBVERBS_CFLAGS)
135 openfabrics_verbs_LDADD = $(LDADD) $(HWLOC_IBVERBS_LIBS) $(HWLOC_IBVERBS_LDFLAGS)
136
137 opencl_CFLAGS = $(AM_CFLAGS) $(HWLOC_OPENCL_CPPFLAGS) $(HWLOC_OPENCL_CFLAGS)
125138 opencl_LDADD = $(LDADD) $(HWLOC_OPENCL_LIBS) $(HWLOC_OPENCL_LDFLAGS)
126 cuda_LDADD = $(LDADD) -lcuda
127 cudart_LDADD = $(LDADD) -lcuda -lcudart
128 nvml_LDADD = $(LDADD) -lnvidia-ml
129 rsmi_LDADD = $(LDADD) -lrocm_smi64
139
140 cuda_CFLAGS = $(AM_CFLAGS) $(HWLOC_CUDA_CPPFLAGS) $(HWLOC_CUDA_CFLAGS)
141 cuda_LDADD = $(LDADD) $(HWLOC_CUDA_LIBS) $(HWLOC_CUDA_LDFLAGS)
142
143 cudart_CFLAGS = $(AM_CFLAGS) $(HWLOC_CUDART_CPPFLAGS) $(HWLOC_CUDART_CFLAGS)
144 cudart_LDADD = $(LDADD) $(HWLOC_CUDART_LIBS) $(HWLOC_CUDART_LDFLAGS)
145
146 nvml_CFLAGS = $(AM_CFLAGS) $(HWLOC_NVML_CPPFLAGS) $(HWLOC_NVML_CFLAGS)
147 nvml_LDADD = $(LDADD) $(HWLOC_NVML_LIBS) $(HWLOC_NVML_LDFLAGS)
148
149 rsmi_CFLAGS = $(AM_CFLAGS) $(HWLOC_RSMI_CPPFLAGS) $(HWLOC_RSMI_CFLAGS)
150 rsmi_LDADD = $(LDADD) $(HWLOC_RSMI_LIBS) $(HWLOC_RSMI_LDFLAGS)
151
152 levelzero_CFLAGS = $(AM_CFLAGS) $(HWLOC_LEVELZERO_CPPFLAGS) $(HWLOC_LEVELZERO_CFLAGS)
153 levelzero_LDADD = $(LDADD) $(HWLOC_LEVELZERO_LIBS) $(HWLOC_LEVELZERO_LDFLAGS)
154
130155 hwloc_bind_LDADD = $(LDADD)
131156 if HWLOC_HAVE_PTHREAD
132157 hwloc_bind_LDADD += -lpthread
1313
1414 @SET_MAKE@
1515
16 # Copyright © 2009-2020 Inria. All rights reserved.
16 # Copyright © 2009-2021 Inria. All rights reserved.
1717 # Copyright © 2009-2012 Université Bordeaux
1818 # Copyright © 2009-2014 Cisco Systems, Inc. All rights reserved.
1919 # See COPYING in top-level directory.
107107 hwloc_get_obj_inside_cpuset$(EXEEXT) \
108108 hwloc_get_shared_cache_covering_obj$(EXEEXT) \
109109 hwloc_get_obj_below_array_by_type$(EXEEXT) \
110 hwloc_get_obj_with_same_locality$(EXEEXT) \
110111 hwloc_bitmap_first_last_weight$(EXEEXT) \
111112 hwloc_bitmap_singlify$(EXEEXT) hwloc_type_depth$(EXEEXT) \
112113 hwloc_type_sscanf$(EXEEXT) hwloc_bind$(EXEEXT) \
123124 memattrs$(EXEEXT) cpukinds$(EXEEXT) xmlbuffer$(EXEEXT) \
124125 gl$(EXEEXT) $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
125126 $(am__EXEEXT_4) $(am__EXEEXT_5) $(am__EXEEXT_6) \
126 $(am__EXEEXT_7) $(am__EXEEXT_8) $(am__EXEEXT_9)
127 @HWLOC_HAVE_DARWIN_FALSE@@HWLOC_HAVE_WINDOWS_FALSE@am__append_4 = shmem
128 @HWLOC_HAVE_LINUX_LIBNUMA_TRUE@am__append_5 = linux-libnuma
129 @HWLOC_HAVE_SCHED_SETAFFINITY_TRUE@am__append_6 = glibc-sched
130 @HWLOC_HAVE_LIBIBVERBS_TRUE@am__append_7 = openfabrics-verbs
131 @HWLOC_HAVE_OPENCL_TRUE@am__append_8 = opencl
132 @HWLOC_HAVE_CUDA_TRUE@am__append_9 = cuda
133 @HWLOC_HAVE_CUDART_TRUE@am__append_10 = cudart
134 @HWLOC_HAVE_NVML_TRUE@am__append_11 = nvml
135 @HWLOC_HAVE_RSMI_TRUE@am__append_12 = rsmi
136 @HWLOC_HAVE_PTHREAD_TRUE@am__append_13 = -lpthread
127 $(am__EXEEXT_7) $(am__EXEEXT_8) $(am__EXEEXT_9) \
128 $(am__EXEEXT_10) $(am__EXEEXT_11)
129 @HWLOC_HAVE_WINDOWS_TRUE@am__append_4 = windows_processor_groups
130 @HWLOC_HAVE_DARWIN_FALSE@@HWLOC_HAVE_WINDOWS_FALSE@am__append_5 = shmem
131 @HWLOC_HAVE_LINUX_LIBNUMA_TRUE@am__append_6 = linux-libnuma
132 @HWLOC_HAVE_SCHED_SETAFFINITY_TRUE@am__append_7 = glibc-sched
133 @HWLOC_HAVE_LIBIBVERBS_TRUE@am__append_8 = openfabrics-verbs
134 @HWLOC_HAVE_OPENCL_TRUE@am__append_9 = opencl
135 @HWLOC_HAVE_CUDA_TRUE@am__append_10 = cuda
136 @HWLOC_HAVE_CUDART_TRUE@am__append_11 = cudart
137 @HWLOC_HAVE_NVML_TRUE@am__append_12 = nvml
138 @HWLOC_HAVE_RSMI_TRUE@am__append_13 = rsmi
139 @HWLOC_HAVE_LEVELZERO_TRUE@am__append_14 = levelzero
140 @HWLOC_HAVE_PTHREAD_TRUE@am__append_15 = -lpthread
137141 subdir = tests/hwloc
138142 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
139143 am__aclocal_m4_deps = $(top_srcdir)/config/hwloc.m4 \
157161 $(top_builddir)/include/hwloc/autogen/config.h
158162 CONFIG_CLEAN_FILES = wrapper.sh
159163 CONFIG_CLEAN_VPATH_FILES =
160 @HWLOC_HAVE_DARWIN_FALSE@@HWLOC_HAVE_WINDOWS_FALSE@am__EXEEXT_1 = shmem$(EXEEXT)
161 @HWLOC_HAVE_LINUX_LIBNUMA_TRUE@am__EXEEXT_2 = linux-libnuma$(EXEEXT)
162 @HWLOC_HAVE_SCHED_SETAFFINITY_TRUE@am__EXEEXT_3 = \
164 @HWLOC_HAVE_WINDOWS_TRUE@am__EXEEXT_1 = \
165 @HWLOC_HAVE_WINDOWS_TRUE@ windows_processor_groups$(EXEEXT)
166 @HWLOC_HAVE_DARWIN_FALSE@@HWLOC_HAVE_WINDOWS_FALSE@am__EXEEXT_2 = shmem$(EXEEXT)
167 @HWLOC_HAVE_LINUX_LIBNUMA_TRUE@am__EXEEXT_3 = linux-libnuma$(EXEEXT)
168 @HWLOC_HAVE_SCHED_SETAFFINITY_TRUE@am__EXEEXT_4 = \
163169 @HWLOC_HAVE_SCHED_SETAFFINITY_TRUE@ glibc-sched$(EXEEXT)
164 @HWLOC_HAVE_LIBIBVERBS_TRUE@am__EXEEXT_4 = openfabrics-verbs$(EXEEXT)
165 @HWLOC_HAVE_OPENCL_TRUE@am__EXEEXT_5 = opencl$(EXEEXT)
166 @HWLOC_HAVE_CUDA_TRUE@am__EXEEXT_6 = cuda$(EXEEXT)
167 @HWLOC_HAVE_CUDART_TRUE@am__EXEEXT_7 = cudart$(EXEEXT)
168 @HWLOC_HAVE_NVML_TRUE@am__EXEEXT_8 = nvml$(EXEEXT)
169 @HWLOC_HAVE_RSMI_TRUE@am__EXEEXT_9 = rsmi$(EXEEXT)
170 @HWLOC_HAVE_LIBIBVERBS_TRUE@am__EXEEXT_5 = openfabrics-verbs$(EXEEXT)
171 @HWLOC_HAVE_OPENCL_TRUE@am__EXEEXT_6 = opencl$(EXEEXT)
172 @HWLOC_HAVE_CUDA_TRUE@am__EXEEXT_7 = cuda$(EXEEXT)
173 @HWLOC_HAVE_CUDART_TRUE@am__EXEEXT_8 = cudart$(EXEEXT)
174 @HWLOC_HAVE_NVML_TRUE@am__EXEEXT_9 = nvml$(EXEEXT)
175 @HWLOC_HAVE_RSMI_TRUE@am__EXEEXT_10 = rsmi$(EXEEXT)
176 @HWLOC_HAVE_LEVELZERO_TRUE@am__EXEEXT_11 = levelzero$(EXEEXT)
170177 cpukinds_SOURCES = cpukinds.c
171178 cpukinds_OBJECTS = cpukinds.$(OBJEXT)
172179 cpukinds_LDADD = $(LDADD)
181188 cpuset_nodeset_DEPENDENCIES = \
182189 $(HWLOC_top_builddir)/hwloc/$(hwloc_lib)
183190 cuda_SOURCES = cuda.c
184 cuda_OBJECTS = cuda.$(OBJEXT)
185 cuda_DEPENDENCIES = $(LDADD)
191 cuda_OBJECTS = cuda-cuda.$(OBJEXT)
192 am__DEPENDENCIES_1 =
193 cuda_DEPENDENCIES = $(LDADD) $(am__DEPENDENCIES_1) \
194 $(am__DEPENDENCIES_1)
195 cuda_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
196 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(cuda_CFLAGS) $(CFLAGS) \
197 $(AM_LDFLAGS) $(LDFLAGS) -o $@
186198 cudart_SOURCES = cudart.c
187 cudart_OBJECTS = cudart.$(OBJEXT)
188 cudart_DEPENDENCIES = $(LDADD)
199 cudart_OBJECTS = cudart-cudart.$(OBJEXT)
200 cudart_DEPENDENCIES = $(LDADD) $(am__DEPENDENCIES_1) \
201 $(am__DEPENDENCIES_1)
202 cudart_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
203 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(cudart_CFLAGS) $(CFLAGS) \
204 $(AM_LDFLAGS) $(LDFLAGS) -o $@
189205 gl_SOURCES = gl.c
190206 gl_OBJECTS = gl.$(OBJEXT)
191207 gl_LDADD = $(LDADD)
206222 $(HWLOC_top_builddir)/hwloc/$(hwloc_lib)
207223 hwloc_bind_SOURCES = hwloc_bind.c
208224 hwloc_bind_OBJECTS = hwloc_bind.$(OBJEXT)
209 am__DEPENDENCIES_1 =
210225 hwloc_bind_DEPENDENCIES = $(LDADD) $(am__DEPENDENCIES_1)
211226 hwloc_bitmap_SOURCES = hwloc_bitmap.c
212227 hwloc_bitmap_OBJECTS = hwloc_bitmap.$(OBJEXT)
299314 hwloc_get_obj_inside_cpuset_LDADD = $(LDADD)
300315 hwloc_get_obj_inside_cpuset_DEPENDENCIES = \
301316 $(HWLOC_top_builddir)/hwloc/$(hwloc_lib)
317 hwloc_get_obj_with_same_locality_SOURCES = \
318 hwloc_get_obj_with_same_locality.c
319 hwloc_get_obj_with_same_locality_OBJECTS = \
320 hwloc_get_obj_with_same_locality.$(OBJEXT)
321 hwloc_get_obj_with_same_locality_LDADD = $(LDADD)
322 hwloc_get_obj_with_same_locality_DEPENDENCIES = \
323 $(HWLOC_top_builddir)/hwloc/$(hwloc_lib)
302324 hwloc_get_shared_cache_covering_obj_SOURCES = \
303325 hwloc_get_shared_cache_covering_obj.c
304326 hwloc_get_shared_cache_covering_obj_OBJECTS = \
384406 hwloc_type_sscanf_LDADD = $(LDADD)
385407 hwloc_type_sscanf_DEPENDENCIES = \
386408 $(HWLOC_top_builddir)/hwloc/$(hwloc_lib)
409 levelzero_SOURCES = levelzero.c
410 levelzero_OBJECTS = levelzero-levelzero.$(OBJEXT)
411 levelzero_DEPENDENCIES = $(LDADD) $(am__DEPENDENCIES_1)
412 levelzero_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
413 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(levelzero_CFLAGS) \
414 $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
387415 linux_libnuma_SOURCES = linux-libnuma.c
388416 linux_libnuma_OBJECTS = linux_libnuma-linux-libnuma.$(OBJEXT)
389417 linux_libnuma_DEPENDENCIES = $(LDADD) $(am__DEPENDENCIES_1)
395423 memattrs_LDADD = $(LDADD)
396424 memattrs_DEPENDENCIES = $(HWLOC_top_builddir)/hwloc/$(hwloc_lib)
397425 nvml_SOURCES = nvml.c
398 nvml_OBJECTS = nvml.$(OBJEXT)
399 nvml_DEPENDENCIES = $(LDADD)
426 nvml_OBJECTS = nvml-nvml.$(OBJEXT)
427 nvml_DEPENDENCIES = $(LDADD) $(am__DEPENDENCIES_1) \
428 $(am__DEPENDENCIES_1)
429 nvml_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
430 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(nvml_CFLAGS) $(CFLAGS) \
431 $(AM_LDFLAGS) $(LDFLAGS) -o $@
400432 opencl_SOURCES = opencl.c
401 opencl_OBJECTS = opencl.$(OBJEXT)
433 opencl_OBJECTS = opencl-opencl.$(OBJEXT)
402434 opencl_DEPENDENCIES = $(LDADD) $(am__DEPENDENCIES_1) \
403435 $(am__DEPENDENCIES_1)
436 opencl_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
437 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(opencl_CFLAGS) $(CFLAGS) \
438 $(AM_LDFLAGS) $(LDFLAGS) -o $@
404439 openfabrics_verbs_SOURCES = openfabrics-verbs.c
405 openfabrics_verbs_OBJECTS = openfabrics-verbs.$(OBJEXT)
406 openfabrics_verbs_DEPENDENCIES = $(LDADD)
440 openfabrics_verbs_OBJECTS = \
441 openfabrics_verbs-openfabrics-verbs.$(OBJEXT)
442 openfabrics_verbs_DEPENDENCIES = $(LDADD) $(am__DEPENDENCIES_1)
443 openfabrics_verbs_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
444 $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
445 $(openfabrics_verbs_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
446 -o $@
407447 rsmi_SOURCES = rsmi.c
408 rsmi_OBJECTS = rsmi.$(OBJEXT)
409 rsmi_DEPENDENCIES = $(LDADD)
448 rsmi_OBJECTS = rsmi-rsmi.$(OBJEXT)
449 rsmi_DEPENDENCIES = $(LDADD) $(am__DEPENDENCIES_1)
450 rsmi_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
451 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(rsmi_CFLAGS) $(CFLAGS) \
452 $(AM_LDFLAGS) $(LDFLAGS) -o $@
410453 shmem_SOURCES = shmem.c
411454 shmem_OBJECTS = shmem.$(OBJEXT)
412455 shmem_LDADD = $(LDADD)
413456 shmem_DEPENDENCIES = $(HWLOC_top_builddir)/hwloc/$(hwloc_lib)
457 windows_processor_groups_SOURCES = windows_processor_groups.c
458 windows_processor_groups_OBJECTS = windows_processor_groups.$(OBJEXT)
459 windows_processor_groups_LDADD = $(LDADD)
460 windows_processor_groups_DEPENDENCIES = \
461 $(HWLOC_top_builddir)/hwloc/$(hwloc_lib)
414462 xmlbuffer_SOURCES = xmlbuffer.c
415463 xmlbuffer_OBJECTS = xmlbuffer.$(OBJEXT)
416464 xmlbuffer_LDADD = $(LDADD)
431479 depcomp = $(SHELL) $(top_srcdir)/./config/depcomp
432480 am__maybe_remake_depfiles = depfiles
433481 am__depfiles_remade = ./$(DEPDIR)/cpukinds.Po \
434 ./$(DEPDIR)/cpuset_nodeset.Po ./$(DEPDIR)/cuda.Po \
435 ./$(DEPDIR)/cudart.Po ./$(DEPDIR)/gl.Po \
482 ./$(DEPDIR)/cpuset_nodeset.Po ./$(DEPDIR)/cuda-cuda.Po \
483 ./$(DEPDIR)/cudart-cudart.Po ./$(DEPDIR)/gl.Po \
436484 ./$(DEPDIR)/glibc-sched.Po ./$(DEPDIR)/hwloc_api_version.Po \
437485 ./$(DEPDIR)/hwloc_backends.Po ./$(DEPDIR)/hwloc_bind.Po \
438486 ./$(DEPDIR)/hwloc_bitmap.Po \
450498 ./$(DEPDIR)/hwloc_get_obj_below_array_by_type.Po \
451499 ./$(DEPDIR)/hwloc_get_obj_covering_cpuset.Po \
452500 ./$(DEPDIR)/hwloc_get_obj_inside_cpuset.Po \
501 ./$(DEPDIR)/hwloc_get_obj_with_same_locality.Po \
453502 ./$(DEPDIR)/hwloc_get_shared_cache_covering_obj.Po \
454503 ./$(DEPDIR)/hwloc_groups.Po ./$(DEPDIR)/hwloc_insert_misc.Po \
455504 ./$(DEPDIR)/hwloc_iodevs.Po ./$(DEPDIR)/hwloc_is_thissystem.Po \
465514 ./$(DEPDIR)/hwloc_topology_restrict.Po \
466515 ./$(DEPDIR)/hwloc_type_depth.Po \
467516 ./$(DEPDIR)/hwloc_type_sscanf.Po \
517 ./$(DEPDIR)/levelzero-levelzero.Po \
468518 ./$(DEPDIR)/linux_libnuma-linux-libnuma.Po \
469 ./$(DEPDIR)/memattrs.Po ./$(DEPDIR)/nvml.Po \
470 ./$(DEPDIR)/opencl.Po ./$(DEPDIR)/openfabrics-verbs.Po \
471 ./$(DEPDIR)/rsmi.Po ./$(DEPDIR)/shmem.Po \
519 ./$(DEPDIR)/memattrs.Po ./$(DEPDIR)/nvml-nvml.Po \
520 ./$(DEPDIR)/opencl-opencl.Po \
521 ./$(DEPDIR)/openfabrics_verbs-openfabrics-verbs.Po \
522 ./$(DEPDIR)/rsmi-rsmi.Po ./$(DEPDIR)/shmem.Po \
523 ./$(DEPDIR)/windows_processor_groups.Po \
472524 ./$(DEPDIR)/xmlbuffer.Po
473525 am__mv = mv -f
474526 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
501553 hwloc_get_next_obj_covering_cpuset.c \
502554 hwloc_get_obj_below_array_by_type.c \
503555 hwloc_get_obj_covering_cpuset.c hwloc_get_obj_inside_cpuset.c \
556 hwloc_get_obj_with_same_locality.c \
504557 hwloc_get_shared_cache_covering_obj.c hwloc_groups.c \
505558 hwloc_insert_misc.c hwloc_iodevs.c hwloc_is_thissystem.c \
506559 hwloc_list_components.c hwloc_obj_infos.c \
508561 hwloc_topology_abi.c hwloc_topology_allow.c \
509562 hwloc_topology_diff.c hwloc_topology_dup.c \
510563 hwloc_topology_restrict.c hwloc_type_depth.c \
511 hwloc_type_sscanf.c linux-libnuma.c memattrs.c nvml.c opencl.c \
512 openfabrics-verbs.c rsmi.c shmem.c xmlbuffer.c
564 hwloc_type_sscanf.c levelzero.c linux-libnuma.c memattrs.c \
565 nvml.c opencl.c openfabrics-verbs.c rsmi.c shmem.c \
566 windows_processor_groups.c xmlbuffer.c
513567 DIST_SOURCES = cpukinds.c cpuset_nodeset.c cuda.c cudart.c gl.c \
514568 glibc-sched.c hwloc_api_version.c hwloc_backends.c \
515569 hwloc_bind.c hwloc_bitmap.c hwloc_bitmap_compare_inclusion.c \
522576 hwloc_get_next_obj_covering_cpuset.c \
523577 hwloc_get_obj_below_array_by_type.c \
524578 hwloc_get_obj_covering_cpuset.c hwloc_get_obj_inside_cpuset.c \
579 hwloc_get_obj_with_same_locality.c \
525580 hwloc_get_shared_cache_covering_obj.c hwloc_groups.c \
526581 hwloc_insert_misc.c hwloc_iodevs.c hwloc_is_thissystem.c \
527582 hwloc_list_components.c hwloc_obj_infos.c \
529584 hwloc_topology_abi.c hwloc_topology_allow.c \
530585 hwloc_topology_diff.c hwloc_topology_dup.c \
531586 hwloc_topology_restrict.c hwloc_type_depth.c \
532 hwloc_type_sscanf.c linux-libnuma.c memattrs.c nvml.c opencl.c \
533 openfabrics-verbs.c rsmi.c shmem.c xmlbuffer.c
587 hwloc_type_sscanf.c levelzero.c linux-libnuma.c memattrs.c \
588 nvml.c opencl.c openfabrics-verbs.c rsmi.c shmem.c \
589 windows_processor_groups.c xmlbuffer.c
534590 RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
535591 ctags-recursive dvi-recursive html-recursive info-recursive \
536592 install-data-recursive install-dvi-recursive \
822878 CONFIGURE_DEPENDENCIES = @CONFIGURE_DEPENDENCIES@
823879 CPP = @CPP@
824880 CPPFLAGS = @CPPFLAGS@
881 CUDA_VERSION = @CUDA_VERSION@
825882 CXX = @CXX@
826883 CXXCPP = @CXXCPP@
827884 CXXDEPMODE = @CXXDEPMODE@
848905 HWLOC_CAIRO_LIBS = @HWLOC_CAIRO_LIBS@
849906 HWLOC_CFLAGS = @HWLOC_CFLAGS@
850907 HWLOC_CPPFLAGS = @HWLOC_CPPFLAGS@
908 HWLOC_CUDART_CFLAGS = @HWLOC_CUDART_CFLAGS@
909 HWLOC_CUDART_CPPFLAGS = @HWLOC_CUDART_CPPFLAGS@
910 HWLOC_CUDART_LDFLAGS = @HWLOC_CUDART_LDFLAGS@
911 HWLOC_CUDART_LIBS = @HWLOC_CUDART_LIBS@
912 HWLOC_CUDA_CFLAGS = @HWLOC_CUDA_CFLAGS@
913 HWLOC_CUDA_CPPFLAGS = @HWLOC_CUDA_CPPFLAGS@
914 HWLOC_CUDA_LDFLAGS = @HWLOC_CUDA_LDFLAGS@
851915 HWLOC_CUDA_LIBS = @HWLOC_CUDA_LIBS@
852916 HWLOC_DIFF_U = @HWLOC_DIFF_U@
853917 HWLOC_DIFF_W = @HWLOC_DIFF_W@
858922 HWLOC_EMBEDDED_LDFLAGS = @HWLOC_EMBEDDED_LDFLAGS@
859923 HWLOC_EMBEDDED_LIBS = @HWLOC_EMBEDDED_LIBS@
860924 HWLOC_GL_LIBS = @HWLOC_GL_LIBS@
925 HWLOC_HAVE_LEVELZERO = @HWLOC_HAVE_LEVELZERO@
861926 HWLOC_HAVE_LIBXML2 = @HWLOC_HAVE_LIBXML2@
862927 HWLOC_HAVE_NVML = @HWLOC_HAVE_NVML@
863928 HWLOC_HAVE_OPENCL = @HWLOC_HAVE_OPENCL@
864929 HWLOC_HAVE_RSMI = @HWLOC_HAVE_RSMI@
930 HWLOC_IBVERBS_LIBS = @HWLOC_IBVERBS_LIBS@
865931 HWLOC_LDFLAGS = @HWLOC_LDFLAGS@
932 HWLOC_LEVELZERO_CFLAGS = @HWLOC_LEVELZERO_CFLAGS@
933 HWLOC_LEVELZERO_LIBS = @HWLOC_LEVELZERO_LIBS@
866934 HWLOC_LIBS = @HWLOC_LIBS@
867935 HWLOC_LIBS_PRIVATE = @HWLOC_LIBS_PRIVATE@
868936 HWLOC_LIBXML2_CFLAGS = @HWLOC_LIBXML2_CFLAGS@
872940 HWLOC_MS_LIB_ARCH = @HWLOC_MS_LIB_ARCH@
873941 HWLOC_NUMA_CFLAGS = @HWLOC_NUMA_CFLAGS@
874942 HWLOC_NUMA_LIBS = @HWLOC_NUMA_LIBS@
943 HWLOC_NVML_CPPFLAGS = @HWLOC_NVML_CPPFLAGS@
944 HWLOC_NVML_LDFLAGS = @HWLOC_NVML_LDFLAGS@
875945 HWLOC_NVML_LIBS = @HWLOC_NVML_LIBS@
876 HWLOC_OPENCL_CFLAGS = @HWLOC_OPENCL_CFLAGS@
946 HWLOC_OPENCL_CPPFLAGS = @HWLOC_OPENCL_CPPFLAGS@
877947 HWLOC_OPENCL_LDFLAGS = @HWLOC_OPENCL_LDFLAGS@
878948 HWLOC_OPENCL_LIBS = @HWLOC_OPENCL_LIBS@
879949 HWLOC_PCIACCESS_CFLAGS = @HWLOC_PCIACCESS_CFLAGS@
9991069 prefix = @prefix@
10001070 program_transform_name = @program_transform_name@
10011071 psdir = @psdir@
1072 runstatedir = @runstatedir@
10021073 sbindir = @sbindir@
10031074 sharedstatedir = @sharedstatedir@
10041075 srcdir = @srcdir@
10251096 # The library has a different name depending on whether we are
10261097 # building in standalone or embedded mode.
10271098 @HWLOC_BUILD_STANDALONE_TRUE@hwloc_lib = libhwloc.la
1028 linux_libnuma_CFLAGS = $(AM_CFLAGS) $(HWLOC_NUMA_CFLAGS)
1029 linux_libnuma_LDADD = $(LDADD) $(HWLOC_NUMA_LIBS)
1030 openfabrics_verbs_LDADD = $(LDADD) -libverbs
1099 linux_libnuma_CFLAGS = $(AM_CFLAGS) $(HWLOC_NUMA_CPPFLAGS) $(HWLOC_NUMA_CFLAGS)
1100 linux_libnuma_LDADD = $(LDADD) $(HWLOC_NUMA_LIBS) $(HWLOC_NUMA_LDFLAGS)
1101 openfabrics_verbs_CFLAGS = $(AM_CFLAGS) $(HWLOC_IBVERBS_CPPFLAGS) $(HWLOC_IBVERBS_CFLAGS)
1102 openfabrics_verbs_LDADD = $(LDADD) $(HWLOC_IBVERBS_LIBS) $(HWLOC_IBVERBS_LDFLAGS)
1103 opencl_CFLAGS = $(AM_CFLAGS) $(HWLOC_OPENCL_CPPFLAGS) $(HWLOC_OPENCL_CFLAGS)
10311104 opencl_LDADD = $(LDADD) $(HWLOC_OPENCL_LIBS) $(HWLOC_OPENCL_LDFLAGS)
1032 cuda_LDADD = $(LDADD) -lcuda
1033 cudart_LDADD = $(LDADD) -lcuda -lcudart
1034 nvml_LDADD = $(LDADD) -lnvidia-ml
1035 rsmi_LDADD = $(LDADD) -lrocm_smi64
1036 hwloc_bind_LDADD = $(LDADD) $(am__append_13)
1105 cuda_CFLAGS = $(AM_CFLAGS) $(HWLOC_CUDA_CPPFLAGS) $(HWLOC_CUDA_CFLAGS)
1106 cuda_LDADD = $(LDADD) $(HWLOC_CUDA_LIBS) $(HWLOC_CUDA_LDFLAGS)
1107 cudart_CFLAGS = $(AM_CFLAGS) $(HWLOC_CUDART_CPPFLAGS) $(HWLOC_CUDART_CFLAGS)
1108 cudart_LDADD = $(LDADD) $(HWLOC_CUDART_LIBS) $(HWLOC_CUDART_LDFLAGS)
1109 nvml_CFLAGS = $(AM_CFLAGS) $(HWLOC_NVML_CPPFLAGS) $(HWLOC_NVML_CFLAGS)
1110 nvml_LDADD = $(LDADD) $(HWLOC_NVML_LIBS) $(HWLOC_NVML_LDFLAGS)
1111 rsmi_CFLAGS = $(AM_CFLAGS) $(HWLOC_RSMI_CPPFLAGS) $(HWLOC_RSMI_CFLAGS)
1112 rsmi_LDADD = $(LDADD) $(HWLOC_RSMI_LIBS) $(HWLOC_RSMI_LDFLAGS)
1113 levelzero_CFLAGS = $(AM_CFLAGS) $(HWLOC_LEVELZERO_CPPFLAGS) $(HWLOC_LEVELZERO_CFLAGS)
1114 levelzero_LDADD = $(LDADD) $(HWLOC_LEVELZERO_LIBS) $(HWLOC_LEVELZERO_LDFLAGS)
1115 hwloc_bind_LDADD = $(LDADD) $(am__append_15)
10371116
10381117 # ship the embedded test code but don't actually let automake ever
10391118 # look at it because we have another configure stuff in there
11011180
11021181 cuda$(EXEEXT): $(cuda_OBJECTS) $(cuda_DEPENDENCIES) $(EXTRA_cuda_DEPENDENCIES)
11031182 @rm -f cuda$(EXEEXT)
1104 $(AM_V_CCLD)$(LINK) $(cuda_OBJECTS) $(cuda_LDADD) $(LIBS)
1183 $(AM_V_CCLD)$(cuda_LINK) $(cuda_OBJECTS) $(cuda_LDADD) $(LIBS)
11051184
11061185 cudart$(EXEEXT): $(cudart_OBJECTS) $(cudart_DEPENDENCIES) $(EXTRA_cudart_DEPENDENCIES)
11071186 @rm -f cudart$(EXEEXT)
1108 $(AM_V_CCLD)$(LINK) $(cudart_OBJECTS) $(cudart_LDADD) $(LIBS)
1187 $(AM_V_CCLD)$(cudart_LINK) $(cudart_OBJECTS) $(cudart_LDADD) $(LIBS)
11091188
11101189 gl$(EXEEXT): $(gl_OBJECTS) $(gl_DEPENDENCIES) $(EXTRA_gl_DEPENDENCIES)
11111190 @rm -f gl$(EXEEXT)
11871266 @rm -f hwloc_get_obj_inside_cpuset$(EXEEXT)
11881267 $(AM_V_CCLD)$(LINK) $(hwloc_get_obj_inside_cpuset_OBJECTS) $(hwloc_get_obj_inside_cpuset_LDADD) $(LIBS)
11891268
1269 hwloc_get_obj_with_same_locality$(EXEEXT): $(hwloc_get_obj_with_same_locality_OBJECTS) $(hwloc_get_obj_with_same_locality_DEPENDENCIES) $(EXTRA_hwloc_get_obj_with_same_locality_DEPENDENCIES)
1270 @rm -f hwloc_get_obj_with_same_locality$(EXEEXT)
1271 $(AM_V_CCLD)$(LINK) $(hwloc_get_obj_with_same_locality_OBJECTS) $(hwloc_get_obj_with_same_locality_LDADD) $(LIBS)
1272
11901273 hwloc_get_shared_cache_covering_obj$(EXEEXT): $(hwloc_get_shared_cache_covering_obj_OBJECTS) $(hwloc_get_shared_cache_covering_obj_DEPENDENCIES) $(EXTRA_hwloc_get_shared_cache_covering_obj_DEPENDENCIES)
11911274 @rm -f hwloc_get_shared_cache_covering_obj$(EXEEXT)
11921275 $(AM_V_CCLD)$(LINK) $(hwloc_get_shared_cache_covering_obj_OBJECTS) $(hwloc_get_shared_cache_covering_obj_LDADD) $(LIBS)
12551338 @rm -f hwloc_type_sscanf$(EXEEXT)
12561339 $(AM_V_CCLD)$(LINK) $(hwloc_type_sscanf_OBJECTS) $(hwloc_type_sscanf_LDADD) $(LIBS)
12571340
1341 levelzero$(EXEEXT): $(levelzero_OBJECTS) $(levelzero_DEPENDENCIES) $(EXTRA_levelzero_DEPENDENCIES)
1342 @rm -f levelzero$(EXEEXT)
1343 $(AM_V_CCLD)$(levelzero_LINK) $(levelzero_OBJECTS) $(levelzero_LDADD) $(LIBS)
1344
12581345 linux-libnuma$(EXEEXT): $(linux_libnuma_OBJECTS) $(linux_libnuma_DEPENDENCIES) $(EXTRA_linux_libnuma_DEPENDENCIES)
12591346 @rm -f linux-libnuma$(EXEEXT)
12601347 $(AM_V_CCLD)$(linux_libnuma_LINK) $(linux_libnuma_OBJECTS) $(linux_libnuma_LDADD) $(LIBS)
12651352
12661353 nvml$(EXEEXT): $(nvml_OBJECTS) $(nvml_DEPENDENCIES) $(EXTRA_nvml_DEPENDENCIES)
12671354 @rm -f nvml$(EXEEXT)
1268 $(AM_V_CCLD)$(LINK) $(nvml_OBJECTS) $(nvml_LDADD) $(LIBS)
1355 $(AM_V_CCLD)$(nvml_LINK) $(nvml_OBJECTS) $(nvml_LDADD) $(LIBS)
12691356
12701357 opencl$(EXEEXT): $(opencl_OBJECTS) $(opencl_DEPENDENCIES) $(EXTRA_opencl_DEPENDENCIES)
12711358 @rm -f opencl$(EXEEXT)
1272 $(AM_V_CCLD)$(LINK) $(opencl_OBJECTS) $(opencl_LDADD) $(LIBS)
1359 $(AM_V_CCLD)$(opencl_LINK) $(opencl_OBJECTS) $(opencl_LDADD) $(LIBS)
12731360
12741361 openfabrics-verbs$(EXEEXT): $(openfabrics_verbs_OBJECTS) $(openfabrics_verbs_DEPENDENCIES) $(EXTRA_openfabrics_verbs_DEPENDENCIES)
12751362 @rm -f openfabrics-verbs$(EXEEXT)
1276 $(AM_V_CCLD)$(LINK) $(openfabrics_verbs_OBJECTS) $(openfabrics_verbs_LDADD) $(LIBS)
1363 $(AM_V_CCLD)$(openfabrics_verbs_LINK) $(openfabrics_verbs_OBJECTS) $(openfabrics_verbs_LDADD) $(LIBS)
12771364
12781365 rsmi$(EXEEXT): $(rsmi_OBJECTS) $(rsmi_DEPENDENCIES) $(EXTRA_rsmi_DEPENDENCIES)
12791366 @rm -f rsmi$(EXEEXT)
1280 $(AM_V_CCLD)$(LINK) $(rsmi_OBJECTS) $(rsmi_LDADD) $(LIBS)
1367 $(AM_V_CCLD)$(rsmi_LINK) $(rsmi_OBJECTS) $(rsmi_LDADD) $(LIBS)
12811368
12821369 shmem$(EXEEXT): $(shmem_OBJECTS) $(shmem_DEPENDENCIES) $(EXTRA_shmem_DEPENDENCIES)
12831370 @rm -f shmem$(EXEEXT)
12841371 $(AM_V_CCLD)$(LINK) $(shmem_OBJECTS) $(shmem_LDADD) $(LIBS)
12851372
1373 windows_processor_groups$(EXEEXT): $(windows_processor_groups_OBJECTS) $(windows_processor_groups_DEPENDENCIES) $(EXTRA_windows_processor_groups_DEPENDENCIES)
1374 @rm -f windows_processor_groups$(EXEEXT)
1375 $(AM_V_CCLD)$(LINK) $(windows_processor_groups_OBJECTS) $(windows_processor_groups_LDADD) $(LIBS)
1376
12861377 xmlbuffer$(EXEEXT): $(xmlbuffer_OBJECTS) $(xmlbuffer_DEPENDENCIES) $(EXTRA_xmlbuffer_DEPENDENCIES)
12871378 @rm -f xmlbuffer$(EXEEXT)
12881379 $(AM_V_CCLD)$(LINK) $(xmlbuffer_OBJECTS) $(xmlbuffer_LDADD) $(LIBS)
12951386
12961387 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpukinds.Po@am__quote@ # am--include-marker
12971388 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpuset_nodeset.Po@am__quote@ # am--include-marker
1298 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cuda.Po@am__quote@ # am--include-marker
1299 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cudart.Po@am__quote@ # am--include-marker
1389 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cuda-cuda.Po@am__quote@ # am--include-marker
1390 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cudart-cudart.Po@am__quote@ # am--include-marker
13001391 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gl.Po@am__quote@ # am--include-marker
13011392 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glibc-sched.Po@am__quote@ # am--include-marker
13021393 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hwloc_api_version.Po@am__quote@ # am--include-marker
13171408 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hwloc_get_obj_below_array_by_type.Po@am__quote@ # am--include-marker
13181409 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hwloc_get_obj_covering_cpuset.Po@am__quote@ # am--include-marker
13191410 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hwloc_get_obj_inside_cpuset.Po@am__quote@ # am--include-marker
1411 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hwloc_get_obj_with_same_locality.Po@am__quote@ # am--include-marker
13201412 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hwloc_get_shared_cache_covering_obj.Po@am__quote@ # am--include-marker
13211413 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hwloc_groups.Po@am__quote@ # am--include-marker
13221414 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hwloc_insert_misc.Po@am__quote@ # am--include-marker
13341426 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hwloc_topology_restrict.Po@am__quote@ # am--include-marker
13351427 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hwloc_type_depth.Po@am__quote@ # am--include-marker
13361428 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hwloc_type_sscanf.Po@am__quote@ # am--include-marker
1429 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/levelzero-levelzero.Po@am__quote@ # am--include-marker
13371430 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/linux_libnuma-linux-libnuma.Po@am__quote@ # am--include-marker
13381431 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memattrs.Po@am__quote@ # am--include-marker
1339 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nvml.Po@am__quote@ # am--include-marker
1340 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opencl.Po@am__quote@ # am--include-marker
1341 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openfabrics-verbs.Po@am__quote@ # am--include-marker
1342 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rsmi.Po@am__quote@ # am--include-marker
1432 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nvml-nvml.Po@am__quote@ # am--include-marker
1433 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opencl-opencl.Po@am__quote@ # am--include-marker
1434 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openfabrics_verbs-openfabrics-verbs.Po@am__quote@ # am--include-marker
1435 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rsmi-rsmi.Po@am__quote@ # am--include-marker
13431436 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shmem.Po@am__quote@ # am--include-marker
1437 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/windows_processor_groups.Po@am__quote@ # am--include-marker
13441438 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmlbuffer.Po@am__quote@ # am--include-marker
13451439
13461440 $(am__depfiles_remade):
13731467 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
13741468 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
13751469
1470 cuda-cuda.o: cuda.c
1471 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cuda_CFLAGS) $(CFLAGS) -MT cuda-cuda.o -MD -MP -MF $(DEPDIR)/cuda-cuda.Tpo -c -o cuda-cuda.o `test -f 'cuda.c' || echo '$(srcdir)/'`cuda.c
1472 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cuda-cuda.Tpo $(DEPDIR)/cuda-cuda.Po
1473 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cuda.c' object='cuda-cuda.o' libtool=no @AMDEPBACKSLASH@
1474 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1475 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cuda_CFLAGS) $(CFLAGS) -c -o cuda-cuda.o `test -f 'cuda.c' || echo '$(srcdir)/'`cuda.c
1476
1477 cuda-cuda.obj: cuda.c
1478 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cuda_CFLAGS) $(CFLAGS) -MT cuda-cuda.obj -MD -MP -MF $(DEPDIR)/cuda-cuda.Tpo -c -o cuda-cuda.obj `if test -f 'cuda.c'; then $(CYGPATH_W) 'cuda.c'; else $(CYGPATH_W) '$(srcdir)/cuda.c'; fi`
1479 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cuda-cuda.Tpo $(DEPDIR)/cuda-cuda.Po
1480 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cuda.c' object='cuda-cuda.obj' libtool=no @AMDEPBACKSLASH@
1481 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1482 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cuda_CFLAGS) $(CFLAGS) -c -o cuda-cuda.obj `if test -f 'cuda.c'; then $(CYGPATH_W) 'cuda.c'; else $(CYGPATH_W) '$(srcdir)/cuda.c'; fi`
1483
1484 cudart-cudart.o: cudart.c
1485 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cudart_CFLAGS) $(CFLAGS) -MT cudart-cudart.o -MD -MP -MF $(DEPDIR)/cudart-cudart.Tpo -c -o cudart-cudart.o `test -f 'cudart.c' || echo '$(srcdir)/'`cudart.c
1486 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cudart-cudart.Tpo $(DEPDIR)/cudart-cudart.Po
1487 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cudart.c' object='cudart-cudart.o' libtool=no @AMDEPBACKSLASH@
1488 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1489 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cudart_CFLAGS) $(CFLAGS) -c -o cudart-cudart.o `test -f 'cudart.c' || echo '$(srcdir)/'`cudart.c
1490
1491 cudart-cudart.obj: cudart.c
1492 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cudart_CFLAGS) $(CFLAGS) -MT cudart-cudart.obj -MD -MP -MF $(DEPDIR)/cudart-cudart.Tpo -c -o cudart-cudart.obj `if test -f 'cudart.c'; then $(CYGPATH_W) 'cudart.c'; else $(CYGPATH_W) '$(srcdir)/cudart.c'; fi`
1493 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/cudart-cudart.Tpo $(DEPDIR)/cudart-cudart.Po
1494 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cudart.c' object='cudart-cudart.obj' libtool=no @AMDEPBACKSLASH@
1495 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1496 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cudart_CFLAGS) $(CFLAGS) -c -o cudart-cudart.obj `if test -f 'cudart.c'; then $(CYGPATH_W) 'cudart.c'; else $(CYGPATH_W) '$(srcdir)/cudart.c'; fi`
1497
1498 levelzero-levelzero.o: levelzero.c
1499 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(levelzero_CFLAGS) $(CFLAGS) -MT levelzero-levelzero.o -MD -MP -MF $(DEPDIR)/levelzero-levelzero.Tpo -c -o levelzero-levelzero.o `test -f 'levelzero.c' || echo '$(srcdir)/'`levelzero.c
1500 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/levelzero-levelzero.Tpo $(DEPDIR)/levelzero-levelzero.Po
1501 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='levelzero.c' object='levelzero-levelzero.o' libtool=no @AMDEPBACKSLASH@
1502 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1503 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(levelzero_CFLAGS) $(CFLAGS) -c -o levelzero-levelzero.o `test -f 'levelzero.c' || echo '$(srcdir)/'`levelzero.c
1504
1505 levelzero-levelzero.obj: levelzero.c
1506 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(levelzero_CFLAGS) $(CFLAGS) -MT levelzero-levelzero.obj -MD -MP -MF $(DEPDIR)/levelzero-levelzero.Tpo -c -o levelzero-levelzero.obj `if test -f 'levelzero.c'; then $(CYGPATH_W) 'levelzero.c'; else $(CYGPATH_W) '$(srcdir)/levelzero.c'; fi`
1507 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/levelzero-levelzero.Tpo $(DEPDIR)/levelzero-levelzero.Po
1508 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='levelzero.c' object='levelzero-levelzero.obj' libtool=no @AMDEPBACKSLASH@
1509 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1510 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(levelzero_CFLAGS) $(CFLAGS) -c -o levelzero-levelzero.obj `if test -f 'levelzero.c'; then $(CYGPATH_W) 'levelzero.c'; else $(CYGPATH_W) '$(srcdir)/levelzero.c'; fi`
1511
13761512 linux_libnuma-linux-libnuma.o: linux-libnuma.c
13771513 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(linux_libnuma_CFLAGS) $(CFLAGS) -MT linux_libnuma-linux-libnuma.o -MD -MP -MF $(DEPDIR)/linux_libnuma-linux-libnuma.Tpo -c -o linux_libnuma-linux-libnuma.o `test -f 'linux-libnuma.c' || echo '$(srcdir)/'`linux-libnuma.c
13781514 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/linux_libnuma-linux-libnuma.Tpo $(DEPDIR)/linux_libnuma-linux-libnuma.Po
13861522 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='linux-libnuma.c' object='linux_libnuma-linux-libnuma.obj' libtool=no @AMDEPBACKSLASH@
13871523 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
13881524 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(linux_libnuma_CFLAGS) $(CFLAGS) -c -o linux_libnuma-linux-libnuma.obj `if test -f 'linux-libnuma.c'; then $(CYGPATH_W) 'linux-libnuma.c'; else $(CYGPATH_W) '$(srcdir)/linux-libnuma.c'; fi`
1525
1526 nvml-nvml.o: nvml.c
1527 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nvml_CFLAGS) $(CFLAGS) -MT nvml-nvml.o -MD -MP -MF $(DEPDIR)/nvml-nvml.Tpo -c -o nvml-nvml.o `test -f 'nvml.c' || echo '$(srcdir)/'`nvml.c
1528 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nvml-nvml.Tpo $(DEPDIR)/nvml-nvml.Po
1529 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nvml.c' object='nvml-nvml.o' libtool=no @AMDEPBACKSLASH@
1530 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1531 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nvml_CFLAGS) $(CFLAGS) -c -o nvml-nvml.o `test -f 'nvml.c' || echo '$(srcdir)/'`nvml.c
1532
1533 nvml-nvml.obj: nvml.c
1534 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nvml_CFLAGS) $(CFLAGS) -MT nvml-nvml.obj -MD -MP -MF $(DEPDIR)/nvml-nvml.Tpo -c -o nvml-nvml.obj `if test -f 'nvml.c'; then $(CYGPATH_W) 'nvml.c'; else $(CYGPATH_W) '$(srcdir)/nvml.c'; fi`
1535 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/nvml-nvml.Tpo $(DEPDIR)/nvml-nvml.Po
1536 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nvml.c' object='nvml-nvml.obj' libtool=no @AMDEPBACKSLASH@
1537 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1538 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(nvml_CFLAGS) $(CFLAGS) -c -o nvml-nvml.obj `if test -f 'nvml.c'; then $(CYGPATH_W) 'nvml.c'; else $(CYGPATH_W) '$(srcdir)/nvml.c'; fi`
1539
1540 opencl-opencl.o: opencl.c
1541 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(opencl_CFLAGS) $(CFLAGS) -MT opencl-opencl.o -MD -MP -MF $(DEPDIR)/opencl-opencl.Tpo -c -o opencl-opencl.o `test -f 'opencl.c' || echo '$(srcdir)/'`opencl.c
1542 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/opencl-opencl.Tpo $(DEPDIR)/opencl-opencl.Po
1543 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='opencl.c' object='opencl-opencl.o' libtool=no @AMDEPBACKSLASH@
1544 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1545 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(opencl_CFLAGS) $(CFLAGS) -c -o opencl-opencl.o `test -f 'opencl.c' || echo '$(srcdir)/'`opencl.c
1546
1547 opencl-opencl.obj: opencl.c
1548 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(opencl_CFLAGS) $(CFLAGS) -MT opencl-opencl.obj -MD -MP -MF $(DEPDIR)/opencl-opencl.Tpo -c -o opencl-opencl.obj `if test -f 'opencl.c'; then $(CYGPATH_W) 'opencl.c'; else $(CYGPATH_W) '$(srcdir)/opencl.c'; fi`
1549 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/opencl-opencl.Tpo $(DEPDIR)/opencl-opencl.Po
1550 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='opencl.c' object='opencl-opencl.obj' libtool=no @AMDEPBACKSLASH@
1551 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1552 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(opencl_CFLAGS) $(CFLAGS) -c -o opencl-opencl.obj `if test -f 'opencl.c'; then $(CYGPATH_W) 'opencl.c'; else $(CYGPATH_W) '$(srcdir)/opencl.c'; fi`
1553
1554 openfabrics_verbs-openfabrics-verbs.o: openfabrics-verbs.c
1555 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(openfabrics_verbs_CFLAGS) $(CFLAGS) -MT openfabrics_verbs-openfabrics-verbs.o -MD -MP -MF $(DEPDIR)/openfabrics_verbs-openfabrics-verbs.Tpo -c -o openfabrics_verbs-openfabrics-verbs.o `test -f 'openfabrics-verbs.c' || echo '$(srcdir)/'`openfabrics-verbs.c
1556 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/openfabrics_verbs-openfabrics-verbs.Tpo $(DEPDIR)/openfabrics_verbs-openfabrics-verbs.Po
1557 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='openfabrics-verbs.c' object='openfabrics_verbs-openfabrics-verbs.o' libtool=no @AMDEPBACKSLASH@
1558 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1559 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(openfabrics_verbs_CFLAGS) $(CFLAGS) -c -o openfabrics_verbs-openfabrics-verbs.o `test -f 'openfabrics-verbs.c' || echo '$(srcdir)/'`openfabrics-verbs.c
1560
1561 openfabrics_verbs-openfabrics-verbs.obj: openfabrics-verbs.c
1562 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(openfabrics_verbs_CFLAGS) $(CFLAGS) -MT openfabrics_verbs-openfabrics-verbs.obj -MD -MP -MF $(DEPDIR)/openfabrics_verbs-openfabrics-verbs.Tpo -c -o openfabrics_verbs-openfabrics-verbs.obj `if test -f 'openfabrics-verbs.c'; then $(CYGPATH_W) 'openfabrics-verbs.c'; else $(CYGPATH_W) '$(srcdir)/openfabrics-verbs.c'; fi`
1563 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/openfabrics_verbs-openfabrics-verbs.Tpo $(DEPDIR)/openfabrics_verbs-openfabrics-verbs.Po
1564 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='openfabrics-verbs.c' object='openfabrics_verbs-openfabrics-verbs.obj' libtool=no @AMDEPBACKSLASH@
1565 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1566 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(openfabrics_verbs_CFLAGS) $(CFLAGS) -c -o openfabrics_verbs-openfabrics-verbs.obj `if test -f 'openfabrics-verbs.c'; then $(CYGPATH_W) 'openfabrics-verbs.c'; else $(CYGPATH_W) '$(srcdir)/openfabrics-verbs.c'; fi`
1567
1568 rsmi-rsmi.o: rsmi.c
1569 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rsmi_CFLAGS) $(CFLAGS) -MT rsmi-rsmi.o -MD -MP -MF $(DEPDIR)/rsmi-rsmi.Tpo -c -o rsmi-rsmi.o `test -f 'rsmi.c' || echo '$(srcdir)/'`rsmi.c
1570 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/rsmi-rsmi.Tpo $(DEPDIR)/rsmi-rsmi.Po
1571 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rsmi.c' object='rsmi-rsmi.o' libtool=no @AMDEPBACKSLASH@
1572 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1573 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rsmi_CFLAGS) $(CFLAGS) -c -o rsmi-rsmi.o `test -f 'rsmi.c' || echo '$(srcdir)/'`rsmi.c
1574
1575 rsmi-rsmi.obj: rsmi.c
1576 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rsmi_CFLAGS) $(CFLAGS) -MT rsmi-rsmi.obj -MD -MP -MF $(DEPDIR)/rsmi-rsmi.Tpo -c -o rsmi-rsmi.obj `if test -f 'rsmi.c'; then $(CYGPATH_W) 'rsmi.c'; else $(CYGPATH_W) '$(srcdir)/rsmi.c'; fi`
1577 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/rsmi-rsmi.Tpo $(DEPDIR)/rsmi-rsmi.Po
1578 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rsmi.c' object='rsmi-rsmi.obj' libtool=no @AMDEPBACKSLASH@
1579 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1580 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(rsmi_CFLAGS) $(CFLAGS) -c -o rsmi-rsmi.obj `if test -f 'rsmi.c'; then $(CYGPATH_W) 'rsmi.c'; else $(CYGPATH_W) '$(srcdir)/rsmi.c'; fi`
13891581
13901582 mostlyclean-libtool:
13911583 -rm -f *.lo
17241916 --log-file $$b.log --trs-file $$b.trs \
17251917 $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
17261918 "$$tst" $(AM_TESTS_FD_REDIRECT)
1919 hwloc_get_obj_with_same_locality.log: hwloc_get_obj_with_same_locality$(EXEEXT)
1920 @p='hwloc_get_obj_with_same_locality$(EXEEXT)'; \
1921 b='hwloc_get_obj_with_same_locality'; \
1922 $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
1923 --log-file $$b.log --trs-file $$b.trs \
1924 $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
1925 "$$tst" $(AM_TESTS_FD_REDIRECT)
17271926 hwloc_bitmap_first_last_weight.log: hwloc_bitmap_first_last_weight$(EXEEXT)
17281927 @p='hwloc_bitmap_first_last_weight$(EXEEXT)'; \
17291928 b='hwloc_bitmap_first_last_weight'; \
19132112 --log-file $$b.log --trs-file $$b.trs \
19142113 $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
19152114 "$$tst" $(AM_TESTS_FD_REDIRECT)
2115 windows_processor_groups.log: windows_processor_groups$(EXEEXT)
2116 @p='windows_processor_groups$(EXEEXT)'; \
2117 b='windows_processor_groups'; \
2118 $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
2119 --log-file $$b.log --trs-file $$b.trs \
2120 $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
2121 "$$tst" $(AM_TESTS_FD_REDIRECT)
19162122 shmem.log: shmem$(EXEEXT)
19172123 @p='shmem$(EXEEXT)'; \
19182124 b='shmem'; \
19722178 rsmi.log: rsmi$(EXEEXT)
19732179 @p='rsmi$(EXEEXT)'; \
19742180 b='rsmi'; \
2181 $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
2182 --log-file $$b.log --trs-file $$b.trs \
2183 $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
2184 "$$tst" $(AM_TESTS_FD_REDIRECT)
2185 levelzero.log: levelzero$(EXEEXT)
2186 @p='levelzero$(EXEEXT)'; \
2187 b='levelzero'; \
19752188 $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
19762189 --log-file $$b.log --trs-file $$b.trs \
19772190 $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
20972310 distclean: distclean-recursive
20982311 -rm -f ./$(DEPDIR)/cpukinds.Po
20992312 -rm -f ./$(DEPDIR)/cpuset_nodeset.Po
2100 -rm -f ./$(DEPDIR)/cuda.Po
2101 -rm -f ./$(DEPDIR)/cudart.Po
2313 -rm -f ./$(DEPDIR)/cuda-cuda.Po
2314 -rm -f ./$(DEPDIR)/cudart-cudart.Po
21022315 -rm -f ./$(DEPDIR)/gl.Po
21032316 -rm -f ./$(DEPDIR)/glibc-sched.Po
21042317 -rm -f ./$(DEPDIR)/hwloc_api_version.Po
21192332 -rm -f ./$(DEPDIR)/hwloc_get_obj_below_array_by_type.Po
21202333 -rm -f ./$(DEPDIR)/hwloc_get_obj_covering_cpuset.Po
21212334 -rm -f ./$(DEPDIR)/hwloc_get_obj_inside_cpuset.Po
2335 -rm -f ./$(DEPDIR)/hwloc_get_obj_with_same_locality.Po
21222336 -rm -f ./$(DEPDIR)/hwloc_get_shared_cache_covering_obj.Po
21232337 -rm -f ./$(DEPDIR)/hwloc_groups.Po
21242338 -rm -f ./$(DEPDIR)/hwloc_insert_misc.Po
21362350 -rm -f ./$(DEPDIR)/hwloc_topology_restrict.Po
21372351 -rm -f ./$(DEPDIR)/hwloc_type_depth.Po
21382352 -rm -f ./$(DEPDIR)/hwloc_type_sscanf.Po
2353 -rm -f ./$(DEPDIR)/levelzero-levelzero.Po
21392354 -rm -f ./$(DEPDIR)/linux_libnuma-linux-libnuma.Po
21402355 -rm -f ./$(DEPDIR)/memattrs.Po
2141 -rm -f ./$(DEPDIR)/nvml.Po
2142 -rm -f ./$(DEPDIR)/opencl.Po
2143 -rm -f ./$(DEPDIR)/openfabrics-verbs.Po
2144 -rm -f ./$(DEPDIR)/rsmi.Po
2356 -rm -f ./$(DEPDIR)/nvml-nvml.Po
2357 -rm -f ./$(DEPDIR)/opencl-opencl.Po
2358 -rm -f ./$(DEPDIR)/openfabrics_verbs-openfabrics-verbs.Po
2359 -rm -f ./$(DEPDIR)/rsmi-rsmi.Po
21452360 -rm -f ./$(DEPDIR)/shmem.Po
2361 -rm -f ./$(DEPDIR)/windows_processor_groups.Po
21462362 -rm -f ./$(DEPDIR)/xmlbuffer.Po
21472363 -rm -f Makefile
21482364 distclean-am: clean-am distclean-compile distclean-generic \
21912407 maintainer-clean: maintainer-clean-recursive
21922408 -rm -f ./$(DEPDIR)/cpukinds.Po
21932409 -rm -f ./$(DEPDIR)/cpuset_nodeset.Po
2194 -rm -f ./$(DEPDIR)/cuda.Po
2195 -rm -f ./$(DEPDIR)/cudart.Po
2410 -rm -f ./$(DEPDIR)/cuda-cuda.Po
2411 -rm -f ./$(DEPDIR)/cudart-cudart.Po
21962412 -rm -f ./$(DEPDIR)/gl.Po
21972413 -rm -f ./$(DEPDIR)/glibc-sched.Po
21982414 -rm -f ./$(DEPDIR)/hwloc_api_version.Po
22132429 -rm -f ./$(DEPDIR)/hwloc_get_obj_below_array_by_type.Po
22142430 -rm -f ./$(DEPDIR)/hwloc_get_obj_covering_cpuset.Po
22152431 -rm -f ./$(DEPDIR)/hwloc_get_obj_inside_cpuset.Po
2432 -rm -f ./$(DEPDIR)/hwloc_get_obj_with_same_locality.Po
22162433 -rm -f ./$(DEPDIR)/hwloc_get_shared_cache_covering_obj.Po
22172434 -rm -f ./$(DEPDIR)/hwloc_groups.Po
22182435 -rm -f ./$(DEPDIR)/hwloc_insert_misc.Po
22302447 -rm -f ./$(DEPDIR)/hwloc_topology_restrict.Po
22312448 -rm -f ./$(DEPDIR)/hwloc_type_depth.Po
22322449 -rm -f ./$(DEPDIR)/hwloc_type_sscanf.Po
2450 -rm -f ./$(DEPDIR)/levelzero-levelzero.Po
22332451 -rm -f ./$(DEPDIR)/linux_libnuma-linux-libnuma.Po
22342452 -rm -f ./$(DEPDIR)/memattrs.Po
2235 -rm -f ./$(DEPDIR)/nvml.Po
2236 -rm -f ./$(DEPDIR)/opencl.Po
2237 -rm -f ./$(DEPDIR)/openfabrics-verbs.Po
2238 -rm -f ./$(DEPDIR)/rsmi.Po
2453 -rm -f ./$(DEPDIR)/nvml-nvml.Po
2454 -rm -f ./$(DEPDIR)/opencl-opencl.Po
2455 -rm -f ./$(DEPDIR)/openfabrics_verbs-openfabrics-verbs.Po
2456 -rm -f ./$(DEPDIR)/rsmi-rsmi.Po
22392457 -rm -f ./$(DEPDIR)/shmem.Po
2458 -rm -f ./$(DEPDIR)/windows_processor_groups.Po
22402459 -rm -f ./$(DEPDIR)/xmlbuffer.Po
22412460 -rm -f Makefile
22422461 maintainer-clean-am: distclean-am maintainer-clean-generic
00 /*
1 * Copyright © 2010-2020 Inria. All rights reserved.
1 * Copyright © 2010-2021 Inria. All rights reserved.
22 * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
33 * See COPYING in top-level directory.
44 */
6666 struct hwloc_distances_s *distances[2];
6767 hwloc_obj_t objs[16];
6868 hwloc_uint64_t values[16*16], value1, value2;
69 hwloc_distances_add_handle_t handle;
6970 int topodepth;
7071 unsigned i, j, k, nr;
7172 int err;
9394 values[3+4*2] = 4;
9495 for(i=0; i<4; i++)
9596 values[i+4*i] = 1;
96 err = hwloc_distances_add(topology, 4, objs, values,
97 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
98 HWLOC_DISTANCES_ADD_FLAG_GROUP);
97 handle = hwloc_distances_add_create(topology, NULL,
98 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
99 0);
100 assert(handle);
101 err = hwloc_distances_add_values(topology, handle, 4, objs, values, 0);
102 assert(!err);
103 err = hwloc_distances_add_commit(topology, handle,
104 HWLOC_DISTANCES_ADD_FLAG_GROUP);
99105 assert(!err);
100106
101107 err = hwloc_topology_refresh(topology);
162168 }
163169 for(i=0; i<16; i++)
164170 values[i+16*i] = 1;
165 err = hwloc_distances_add(topology, 16, objs, values,
166 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
167 HWLOC_DISTANCES_ADD_FLAG_GROUP);
171 handle = hwloc_distances_add_create(topology, NULL,
172 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
173 0);
174 assert(handle);
175 err = hwloc_distances_add_values(topology, handle, 16, objs, values, 0);
176 assert(!err);
177 err = hwloc_distances_add_commit(topology, handle,
178 HWLOC_DISTANCES_ADD_FLAG_GROUP);
168179 assert(!err);
169180
170181 topodepth = hwloc_topology_get_depth(topology);
205216 values[i] = 3;
206217 for(i=0; i<4; i++)
207218 values[i+4*i] = 7;
208 err = hwloc_distances_add(topology, 4, objs, values,
209 HWLOC_DISTANCES_KIND_MEANS_BANDWIDTH|HWLOC_DISTANCES_KIND_FROM_USER,
210 HWLOC_DISTANCES_ADD_FLAG_GROUP);
219 handle = hwloc_distances_add_create(topology, NULL,
220 HWLOC_DISTANCES_KIND_MEANS_BANDWIDTH|HWLOC_DISTANCES_KIND_FROM_USER,
221 0);
222 assert(handle);
223 err = hwloc_distances_add_values(topology, handle, 4, objs, values, 0);
224 assert(!err);
225 err = hwloc_distances_add_commit(topology, handle,
226 HWLOC_DISTANCES_ADD_FLAG_GROUP);
211227 assert(!err);
212228
213229 topodepth = hwloc_topology_get_depth(topology);
247263 values[i*3+j] = 10;
248264 values[i*3+i] = 5;
249265 }
250 err = hwloc_distances_add(topology, 3, objs, values,
251 HWLOC_DISTANCES_KIND_MEANS_BANDWIDTH|HWLOC_DISTANCES_KIND_FROM_USER,
252 0);
266 handle = hwloc_distances_add_create(topology, NULL,
267 HWLOC_DISTANCES_KIND_MEANS_BANDWIDTH|HWLOC_DISTANCES_KIND_FROM_USER,
268 0);
269 assert(handle);
270 err = hwloc_distances_add_values(topology, handle, 3, objs, values, 0);
271 assert(!err);
272 err = hwloc_distances_add_commit(topology, handle,
273 0);
253274 assert(!err);
254275
255276 /* check distances by kind */
329350 assert(!err);
330351 assert(!nr);
331352
353 /* add a bandwidth distance that we'll modify */
354 printf("\nInserting NUMA bandwidths\n");
355 for(i=0; i<4; i++)
356 objs[i] = hwloc_get_obj_by_type(topology, HWLOC_OBJ_NUMANODE, i);
357 /* matrix 2*2 */
358 for(i=0; i<16; i++)
359 values[i] = 0;
360 values[0+4*1] = 100;
361 values[1+4*0] = 100;
362 values[2+4*3] = 200;
363 values[3+4*2] = 100;
364 for(i=0; i<4; i++)
365 values[i+4*i] = 1000;
366 handle = hwloc_distances_add_create(topology, NULL,
367 HWLOC_DISTANCES_KIND_MEANS_BANDWIDTH|HWLOC_DISTANCES_KIND_FROM_USER,
368 0);
369 assert(handle);
370 err = hwloc_distances_add_values(topology, handle, 4, objs, values, 0);
371 assert(!err);
372 err = hwloc_distances_add_commit(topology, handle,
373 HWLOC_DISTANCES_ADD_FLAG_GROUP);
374 assert(!err);
375
376 nr = 1;
377 err = hwloc_distances_get_by_type(topology, HWLOC_OBJ_NUMANODE, &nr, distances, HWLOC_DISTANCES_KIND_MEANS_BANDWIDTH, 0);
378 assert(!err);
379 assert(nr == 1);
380 printf("make it links\n");
381 err = hwloc_distances_transform(topology, distances[0], HWLOC_DISTANCES_TRANSFORM_LINKS, NULL, 0);
382 assert(!err);
383 assert(distances[0]->nbobjs == 4);
384 assert(distances[0]->values[0] == 0);
385 assert(distances[0]->values[1] == 1);
386 assert(distances[0]->values[2] == 0);
387 assert(distances[0]->values[3] == 0);
388 assert(distances[0]->values[4] == 1);
389 assert(distances[0]->values[5] == 0);
390 assert(distances[0]->values[6] == 0);
391 assert(distances[0]->values[7] == 0);
392 assert(distances[0]->values[8] == 0);
393 assert(distances[0]->values[9] == 0);
394 assert(distances[0]->values[10] == 0);
395 assert(distances[0]->values[11] == 1);
396 assert(distances[0]->values[12] == 0);
397 assert(distances[0]->values[13] == 0);
398 assert(distances[0]->values[14] == 2);
399 assert(distances[0]->values[15] == 0);
400 printf("remove 2 objects\n");
401 distances[0]->objs[0] = NULL;
402 distances[0]->objs[1] = NULL;
403 err = hwloc_distances_transform(topology, distances[0], HWLOC_DISTANCES_TRANSFORM_REMOVE_NULL, NULL, 0);
404 assert(!err);
405 assert(distances[0]->nbobjs == 2);
406 assert(distances[0]->values[0] == 0);
407 assert(distances[0]->values[1] == 1);
408 assert(distances[0]->values[2] == 2);
409 assert(distances[0]->values[3] == 0);
410
411 hwloc_distances_release(topology, distances[0]);
412
332413 hwloc_topology_destroy(topology);
333414
334415 return 0;
0 /*
1 * Copyright © 2021 Inria. All rights reserved.
2 * See COPYING in top-level directory.
3 */
4
5 #include "hwloc.h"
6
7 #include <stdlib.h>
8 #include <stdio.h>
9 #include <stdint.h>
10 #include <string.h>
11 #include <assert.h>
12
13 int main(void)
14 {
15 const char *top_srcdir;
16 char xmlpath[PATH_MAX];
17 hwloc_topology_t topology;
18 hwloc_obj_t tmp, obj, sda, cuda0, card0;
19 int err;
20
21 top_srcdir = getenv("HWLOC_TOP_SRCDIR");
22 if (!top_srcdir) {
23 fprintf(stderr, "HWLOC_TOP_SRCDIR missing in the environment.\n");
24 exit(EXIT_FAILURE);
25 }
26
27 snprintf(xmlpath, sizeof(xmlpath), "%s/tests/hwloc/xml/32em64t-2n8c2t-pci-normalio.xml", top_srcdir);
28 err = hwloc_topology_init(&topology);
29 assert(!err);
30 err = hwloc_topology_set_xml(topology, xmlpath);
31 assert(!err);
32 err = hwloc_topology_set_all_types_filter(topology, HWLOC_TYPE_FILTER_KEEP_ALL);
33 assert(!err);
34 err = hwloc_topology_load(topology);
35 assert(!err);
36
37 /* normal checks */
38
39 /* no NUMA or package == root */
40 tmp = hwloc_get_root_obj(topology);
41 assert(tmp);
42 obj = hwloc_get_obj_with_same_locality(topology, tmp, HWLOC_OBJ_PACKAGE, NULL, NULL, 0);
43 assert(!obj);
44 obj = hwloc_get_obj_with_same_locality(topology, tmp, HWLOC_OBJ_NUMANODE, NULL, NULL, 0);
45 assert(!obj);
46
47 /* NUMA == Package == L3 != PU */
48 tmp = hwloc_get_obj_by_type(topology, HWLOC_OBJ_PACKAGE, 0);
49 assert(tmp);
50 obj = hwloc_get_obj_with_same_locality(topology, tmp, HWLOC_OBJ_PACKAGE, NULL, NULL, 0);
51 assert(obj);
52 assert(obj == tmp);
53 obj = hwloc_get_obj_with_same_locality(topology, tmp, HWLOC_OBJ_L3CACHE, NULL, NULL, 0);
54 assert(obj);
55 assert(obj->parent == tmp);
56 assert(obj->type == HWLOC_OBJ_L3CACHE);
57 obj = hwloc_get_obj_with_same_locality(topology, tmp, HWLOC_OBJ_NUMANODE, NULL, NULL, 0);
58 assert(obj);
59 assert(obj->parent == tmp);
60 assert(obj->type == HWLOC_OBJ_NUMANODE);
61 obj = hwloc_get_obj_with_same_locality(topology, tmp, HWLOC_OBJ_PU, NULL, NULL, 0);
62 assert(!obj);
63
64 /* Core == L1 == L2 != Package */
65 tmp = hwloc_get_obj_by_type(topology, HWLOC_OBJ_CORE, 15);
66 assert(tmp);
67 obj = hwloc_get_obj_with_same_locality(topology, tmp, HWLOC_OBJ_PACKAGE, NULL, NULL, 0);
68 assert(!obj);
69 obj = hwloc_get_obj_with_same_locality(topology, tmp, HWLOC_OBJ_L1CACHE, NULL, NULL, 0);
70 assert(obj);
71 assert(obj == tmp->parent);
72 assert(obj->type == HWLOC_OBJ_L1CACHE);
73 obj = hwloc_get_obj_with_same_locality(topology, tmp, HWLOC_OBJ_L2CACHE, NULL, NULL, 0);
74 assert(obj);
75 assert(obj == tmp->parent->parent);
76 assert(obj->type == HWLOC_OBJ_L2CACHE);
77
78 /* I/O checks */
79
80 /* get pointers to some I/O objects */
81 obj = hwloc_get_pcidev_by_busid(topology, 0, 0, 0x1f, 2);
82 assert(obj);
83 sda = obj->io_first_child;
84 assert(sda);
85 assert(!strcmp(sda->name, "sda"));
86
87 obj = hwloc_get_pcidev_by_busid(topology, 0, 0x84, 0, 0);
88 assert(obj);
89 cuda0 = obj->io_first_child;
90 assert(cuda0);
91 assert(!strcmp(cuda0->name, "cuda0"));
92 card0 = cuda0->next_sibling;
93 assert(card0);
94 assert(!strcmp(card0->name, "card0"));
95
96 /* invalid flags */
97 obj = hwloc_get_obj_with_same_locality(topology, sda, HWLOC_OBJ_PCI_DEVICE, NULL, NULL, 1);
98 assert(!obj);
99 /* invalid subtype */
100 obj = hwloc_get_obj_with_same_locality(topology, sda, HWLOC_OBJ_PCI_DEVICE, "foo", NULL, 0);
101 assert(!obj);
102 /* invalid name */
103 obj = hwloc_get_obj_with_same_locality(topology, sda, HWLOC_OBJ_PCI_DEVICE, NULL, "bar", 0);
104 assert(!obj);
105
106 /* get sda PCI parent */
107 obj = hwloc_get_obj_with_same_locality(topology, sda, HWLOC_OBJ_PCI_DEVICE, NULL, NULL, 0);
108 assert(obj == sda->parent);
109 /* get sda from itself */
110 obj = hwloc_get_obj_with_same_locality(topology, sda, HWLOC_OBJ_OS_DEVICE, NULL, NULL, 0);
111 assert(obj == sda);
112 /* get sda from PCI */
113 obj = hwloc_get_obj_with_same_locality(topology, sda->parent, HWLOC_OBJ_OS_DEVICE, NULL, NULL, 0);
114 assert(obj == sda);
115 /* get PCI from PCI */
116 obj = hwloc_get_obj_with_same_locality(topology, sda->parent, HWLOC_OBJ_PCI_DEVICE, NULL, NULL, 0);
117 assert(obj == sda->parent);
118
119 /* get cuda0 from card0 */
120 obj = hwloc_get_obj_with_same_locality(topology, card0, HWLOC_OBJ_OS_DEVICE, "CUDA", NULL, 0);
121 assert(obj == cuda0);
122 obj = hwloc_get_obj_with_same_locality(topology, card0, HWLOC_OBJ_OS_DEVICE, NULL, "cuda", 0);
123 assert(obj == cuda0);
124 /* get card0 from cuda parent */
125 obj = hwloc_get_obj_with_same_locality(topology, cuda0->parent, HWLOC_OBJ_OS_DEVICE, NULL, "card", 0);
126 assert(obj == card0);
127
128 /* invalid normal to I/O */
129 tmp = hwloc_get_obj_by_type(topology, HWLOC_OBJ_PACKAGE, 0);
130 assert(tmp);
131 obj = hwloc_get_obj_with_same_locality(topology, tmp, HWLOC_OBJ_PCI_DEVICE, NULL, NULL, 0);
132 assert(!obj);
133 /* invalid I/O to normal */
134 obj = hwloc_get_obj_with_same_locality(topology, cuda0->parent, HWLOC_OBJ_PACKAGE, NULL, NULL, 0);
135 assert(!obj);
136
137 hwloc_topology_destroy(topology);
138
139 return 0;
140 }
1616 hwloc_obj_t obj, group, saved, res, root;
1717 hwloc_obj_t objs[32];
1818 hwloc_uint64_t values[32*32];
19 hwloc_distances_add_handle_t handle;
1920 int depth;
2021 hwloc_obj_type_t type;
2122 unsigned width;
147148 values[0] = 1; values[1] = 4; values[2] = 4;
148149 values[3] = 4; values[4] = 1; values[5] = 2;
149150 values[6] = 4; values[7] = 2; values[8] = 1;
150 err = hwloc_distances_add(topology, 3, objs, values,
151 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
152 HWLOC_DISTANCES_ADD_FLAG_GROUP);
151 handle = hwloc_distances_add_create(topology, NULL,
152 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
153 0);
154 assert(handle);
155 err = hwloc_distances_add_values(topology, handle, 3, objs, values, 0);
156 assert(!err);
157 err = hwloc_distances_add_commit(topology, handle,
158 HWLOC_DISTANCES_ADD_FLAG_GROUP);
153159 assert(!err);
154160 /* 1 groups at depth 1 and 2 */
155161 depth = hwloc_get_type_depth(topology, HWLOC_OBJ_GROUP);
198204 values[10] = 4; values[11] = 4; values[12] = 1; values[13] = 4; values[14] = 4;
199205 values[15] = 4; values[16] = 4; values[17] = 4; values[18] = 1; values[19] = 2;
200206 values[20] = 4; values[21] = 4; values[22] = 4; values[23] = 2; values[24] = 1;
201 err = hwloc_distances_add(topology, 5, objs, values,
202 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
203 HWLOC_DISTANCES_ADD_FLAG_GROUP);
207 handle = hwloc_distances_add_create(topology, NULL,
208 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
209 0);
210 assert(handle);
211 err = hwloc_distances_add_values(topology, handle, 5, objs, values, 0);
212 assert(!err);
213 err = hwloc_distances_add_commit(topology, handle,
214 HWLOC_DISTANCES_ADD_FLAG_GROUP);
204215 assert(!err);
205216 /* 1 node */
206217 depth = hwloc_get_type_depth(topology, HWLOC_OBJ_NUMANODE);
273284 /* group 8cores as 2*2*2 */
274285 for(i=0; i<16; i++)
275286 objs[i] = hwloc_get_obj_by_type(topology, HWLOC_OBJ_CORE, i);
276 assert(!hwloc_distances_add(topology, 16, objs, values,
277 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
278 HWLOC_DISTANCES_ADD_FLAG_GROUP));
287 handle = hwloc_distances_add_create(topology, NULL,
288 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
289 0);
290 assert(handle);
291 err = hwloc_distances_add_values(topology, handle, 16, objs, values, 0);
292 assert(!err);
293 err = hwloc_distances_add_commit(topology, handle,
294 HWLOC_DISTANCES_ADD_FLAG_GROUP);
295 assert(!err);
279296 depth = hwloc_topology_get_depth(topology);
280297 assert(depth == 6);
281298 width = hwloc_get_nbobjs_by_depth(topology, 0);
301318 hwloc_topology_load(topology);
302319 for(i=0; i<16; i++)
303320 objs[i] = hwloc_get_obj_by_type(topology, HWLOC_OBJ_CORE, i);
304 assert(!hwloc_distances_add(topology, 16, objs, values,
305 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
306 HWLOC_DISTANCES_ADD_FLAG_GROUP|HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE));
321 handle = hwloc_distances_add_create(topology, NULL,
322 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
323 0);
324 assert(handle);
325 err = hwloc_distances_add_values(topology, handle, 16, objs, values, 0);
326 assert(!err);
327 err = hwloc_distances_add_commit(topology, handle,
328 HWLOC_DISTANCES_ADD_FLAG_GROUP|HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE);
329 assert(!err);
307330 depth = hwloc_topology_get_depth(topology);
308331 assert(depth == 6);
309332 hwloc_topology_destroy(topology);
314337 hwloc_topology_load(topology);
315338 for(i=0; i<16; i++)
316339 objs[i] = hwloc_get_obj_by_type(topology, HWLOC_OBJ_CORE, i);
317 assert(!hwloc_distances_add(topology, 16, objs, values,
318 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
319 HWLOC_DISTANCES_ADD_FLAG_GROUP|HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE));
340 handle = hwloc_distances_add_create(topology, NULL,
341 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
342 0);
343 assert(handle);
344 err = hwloc_distances_add_values(topology, handle, 16, objs, values, 0);
345 assert(!err);
346 err = hwloc_distances_add_commit(topology, handle,
347 HWLOC_DISTANCES_ADD_FLAG_GROUP|HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE);
348 assert(!err);
320349 depth = hwloc_topology_get_depth(topology);
321350 assert(depth == 6);
322351 hwloc_topology_destroy(topology);
326355 hwloc_topology_load(topology);
327356 for(i=0; i<16; i++)
328357 objs[i] = hwloc_get_obj_by_type(topology, HWLOC_OBJ_CORE, i);
329 assert(!hwloc_distances_add(topology, 16, objs, values,
330 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
331 HWLOC_DISTANCES_ADD_FLAG_GROUP /* no inaccurate flag, cannot group */));
358 handle = hwloc_distances_add_create(topology, NULL,
359 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
360 0);
361 assert(handle);
362 err = hwloc_distances_add_values(topology, handle, 16, objs, values, 0);
363 assert(!err);
364 err = hwloc_distances_add_commit(topology, handle,
365 HWLOC_DISTANCES_ADD_FLAG_GROUP /* no inaccurate flag, cannot group */);
366 assert(!err);
332367 depth = hwloc_topology_get_depth(topology);
333368 assert(depth == 4);
334369 hwloc_topology_destroy(topology);
339374 hwloc_topology_load(topology);
340375 for(i=0; i<16; i++)
341376 objs[i] = hwloc_get_obj_by_type(topology, HWLOC_OBJ_CORE, i);
342 assert(!hwloc_distances_add(topology, 16, objs, values,
343 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
344 HWLOC_DISTANCES_ADD_FLAG_GROUP|HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE));
377 handle = hwloc_distances_add_create(topology, NULL,
378 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
379 0);
380 assert(handle);
381 err = hwloc_distances_add_values(topology, handle, 16, objs, values, 0);
382 assert(!err);
383 err = hwloc_distances_add_commit(topology, handle,
384 HWLOC_DISTANCES_ADD_FLAG_GROUP|HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE);
385 assert(!err);
345386 depth = hwloc_topology_get_depth(topology);
346387 assert(depth == 4);
347388 hwloc_topology_destroy(topology);
352393 hwloc_topology_load(topology);
353394 for(i=0; i<16; i++)
354395 objs[i] = hwloc_get_obj_by_type(topology, HWLOC_OBJ_CORE, i);
355 assert(!hwloc_distances_add(topology, 16, objs, values,
356 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
357 HWLOC_DISTANCES_ADD_FLAG_GROUP|HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE));
396 handle = hwloc_distances_add_create(topology, NULL,
397 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
398 0);
399 assert(handle);
400 err = hwloc_distances_add_values(topology, handle, 16, objs, values, 0);
401 assert(!err);
402 err = hwloc_distances_add_commit(topology, handle,
403 HWLOC_DISTANCES_ADD_FLAG_GROUP|HWLOC_DISTANCES_ADD_FLAG_GROUP_INACCURATE);
404 assert(!err);
358405 depth = hwloc_topology_get_depth(topology);
359406 assert(depth == 4);
360407 hwloc_topology_destroy(topology);
386433 else
387434 values[i+8*j] = values[j+8*i] = 8;
388435 }
389 assert(!hwloc_distances_add(topology, 8, objs, values,
390 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
391 HWLOC_DISTANCES_ADD_FLAG_GROUP));
436 handle = hwloc_distances_add_create(topology, NULL,
437 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
438 0);
439 assert(handle);
440 err = hwloc_distances_add_values(topology, handle, 8, objs, values, 0);
441 assert(!err);
442 err = hwloc_distances_add_commit(topology, handle,
443 HWLOC_DISTANCES_ADD_FLAG_GROUP);
444 assert(!err);
392445 depth = hwloc_topology_get_depth(topology);
393446 assert(depth == 4);
394447 /* group 4cores as 2*2 */
402455 else
403456 values[i+8*j] = values[j+8*i] = 8;
404457 }
405 assert(!hwloc_distances_add(topology, 8, objs, values,
406 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
407 HWLOC_DISTANCES_ADD_FLAG_GROUP));
458 handle = hwloc_distances_add_create(topology, NULL,
459 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
460 0);
461 assert(handle);
462 err = hwloc_distances_add_values(topology, handle, 8, objs, values, 0);
463 assert(!err);
464 err = hwloc_distances_add_commit(topology, handle,
465 HWLOC_DISTANCES_ADD_FLAG_GROUP);
466 assert(!err);
408467 depth = hwloc_topology_get_depth(topology);
409468 assert(depth == 5);
410469 width = hwloc_get_nbobjs_by_depth(topology, 0);
430489 else
431490 values[i+32*j] = values[j+32*i] = 8;
432491 }
433 assert(!hwloc_distances_add(topology, 32, objs, values,
434 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
435 HWLOC_DISTANCES_ADD_FLAG_GROUP));
492 handle = hwloc_distances_add_create(topology, NULL,
493 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
494 0);
495 assert(handle);
496 err = hwloc_distances_add_values(topology, handle, 32, objs, values, 0);
497 assert(!err);
498 err = hwloc_distances_add_commit(topology, handle,
499 HWLOC_DISTANCES_ADD_FLAG_GROUP);
500 assert(!err);
436501 depth = hwloc_topology_get_depth(topology);
437502 assert(depth == 6);
438503 width = hwloc_get_nbobjs_by_depth(topology, 0);
00 /*
1 * Copyright © 2011-2017 Inria. All rights reserved.
1 * Copyright © 2011-2021 Inria. All rights reserved.
22 * See COPYING in top-level directory.
33 */
44
1717 struct hwloc_distances_s *distances;
1818 hwloc_obj_t nodes[3], cores[6];
1919 hwloc_uint64_t node_distances[9], core_distances[36];
20 hwloc_distances_add_handle_t handle;
2021 unsigned i,j,nr;
2122 int err;
2223
2930 for(j=0; j<3; j++)
3031 node_distances[i*3+j] = (i == j ? 10 : 20);
3132 }
32 err = hwloc_distances_add(oldtopology, 3, nodes, node_distances,
33 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
34 HWLOC_DISTANCES_ADD_FLAG_GROUP);
33 handle = hwloc_distances_add_create(oldtopology, NULL,
34 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
35 0);
36 assert(handle);
37 err = hwloc_distances_add_values(oldtopology, handle, 3, nodes, node_distances, 0);
38 assert(!err);
39 err = hwloc_distances_add_commit(oldtopology, handle,
40 HWLOC_DISTANCES_ADD_FLAG_GROUP);
3541 assert(!err);
3642
3743 for(i=0; i<6; i++) {
3945 for(j=0; j<6; j++)
4046 core_distances[i*6+j] = (i == j ? 4 : 8);
4147 }
42 err = hwloc_distances_add(oldtopology, 6, cores, core_distances,
43 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
44 HWLOC_DISTANCES_ADD_FLAG_GROUP);
48 handle = hwloc_distances_add_create(oldtopology, NULL,
49 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
50 0);
51 assert(handle);
52 err = hwloc_distances_add_values(oldtopology, handle, 6, cores, core_distances, 0);
53 assert(!err);
54 err = hwloc_distances_add_commit(oldtopology, handle,
55 HWLOC_DISTANCES_ADD_FLAG_GROUP);
4556 assert(!err);
4657
4758 printf("duplicating\n");
00 /*
1 * Copyright © 2011-2020 Inria. All rights reserved.
1 * Copyright © 2011-2021 Inria. All rights reserved.
22 * Copyright © 2011 Université Bordeaux. All rights reserved.
33 * See COPYING in top-level directory.
44 */
106106 hwloc_bitmap_t cpuset = hwloc_bitmap_alloc();
107107 hwloc_obj_t nodes[3], cores[6];
108108 hwloc_uint64_t node_distances[9], core_distances[36];
109 hwloc_distances_add_handle_t handle;
109110 hwloc_obj_t obj;
110111 unsigned i,j;
111112 int err;
119120 for(j=0; j<3; j++)
120121 node_distances[i*3+j] = (i == j ? 10 : 20);
121122 }
122 err = hwloc_distances_add(topology, 3, nodes, node_distances,
123 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
124 HWLOC_DISTANCES_ADD_FLAG_GROUP);
123 handle = hwloc_distances_add_create(topology, NULL,
124 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
125 0);
126 assert(handle);
127 err = hwloc_distances_add_values(topology, handle, 3, nodes, node_distances, 0);
128 assert(!err);
129 err = hwloc_distances_add_commit(topology, handle,
130 HWLOC_DISTANCES_ADD_FLAG_GROUP);
125131 assert(!err);
126132
127133 for(i=0; i<6; i++) {
129135 for(j=0; j<6; j++)
130136 core_distances[i*6+j] = (i == j ? 4 : 8);
131137 }
132 err = hwloc_distances_add(topology, 6, cores, core_distances,
133 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
134 HWLOC_DISTANCES_ADD_FLAG_GROUP);
138 handle = hwloc_distances_add_create(topology, NULL,
139 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
140 0);
141 assert(handle);
142 err = hwloc_distances_add_values(topology, handle, 6, cores, core_distances, 0);
143 assert(!err);
144 err = hwloc_distances_add_commit(topology, handle,
145 HWLOC_DISTANCES_ADD_FLAG_GROUP);
135146 assert(!err);
136147
137148 /* entire topology */
2828 } else if (type == HWLOC_OBJ_BRIDGE) {
2929 assert(attr.bridge.upstream_type == obj->attr->bridge.upstream_type);
3030 assert(attr.bridge.downstream_type == obj->attr->bridge.downstream_type);
31 /* FIXME: if downstream_type can ever be non-PCI, we'll need to improve strings, or relax these checks */
3132 } else if (type == HWLOC_OBJ_OS_DEVICE) {
3233 assert(attr.osdev.type == obj->attr->osdev.type);
3334 }
0 /*
1 * Copyright © 2021 Inria. All rights reserved.
2 * See COPYING in top-level directory.
3 */
4
5 #include <stdio.h>
6 #include <assert.h>
7
8 #include <level_zero/ze_api.h>
9 #include <level_zero/zes_api.h>
10
11 #include "hwloc.h"
12 #include "hwloc/levelzero.h"
13
14 /* check the RSMI helpers */
15
16 int main(void)
17 {
18 hwloc_topology_t topology;
19 ze_driver_handle_t *drh;
20 uint32_t nbdrivers, i, k;
21 ze_result_t res;
22 int err = 0;
23
24 putenv((char *) "ZES_ENABLE_SYSMAN=1");
25
26 res = zeInit(0);
27 if (res != ZE_RESULT_SUCCESS) {
28 fprintf(stderr, "Failed to initialize LevelZero in ze_init(): %d\n", (int)res);
29 return 0;
30 }
31
32 hwloc_topology_init(&topology);
33 hwloc_topology_set_io_types_filter(topology, HWLOC_TYPE_FILTER_KEEP_IMPORTANT);
34 hwloc_topology_load(topology);
35
36 nbdrivers = 0;
37 res = zeDriverGet(&nbdrivers, NULL);
38 if (res != ZE_RESULT_SUCCESS || !nbdrivers)
39 return 0;
40 drh = malloc(nbdrivers * sizeof(*drh));
41 if (!drh)
42 return 0;
43 res = zeDriverGet(&nbdrivers, drh);
44 if (res != ZE_RESULT_SUCCESS) {
45 free(drh);
46 return 0;
47 }
48
49 printf("found %u L0 drivers\n", nbdrivers);
50
51 k = 0;
52 for(i=0; i<nbdrivers; i++) {
53 uint32_t nbdevices, j;
54 ze_device_handle_t *dvh;
55
56 nbdevices = 0;
57 res = zeDeviceGet(drh[i], &nbdevices, NULL);
58 if (res != ZE_RESULT_SUCCESS || !nbdevices)
59 continue;
60 dvh = malloc(nbdevices * sizeof(*dvh));
61 if (!dvh)
62 continue;
63 res = zeDeviceGet(drh[i], &nbdevices, dvh);
64 if (res != ZE_RESULT_SUCCESS) {
65 free(dvh);
66 continue;
67 }
68
69 printf("found %u L0 devices in driver #%u\n", nbdevices, i);
70
71 for (j=0; j<nbdevices; j++, k++) {
72 hwloc_bitmap_t set;
73 hwloc_obj_t osdev, ancestor;
74 const char *value;
75
76 osdev = hwloc_levelzero_get_device_osdev(topology, dvh[j]);
77 assert(osdev);
78
79 ancestor = hwloc_get_non_io_ancestor_obj(topology, osdev);
80
81 printf("found OSDev %s\n", osdev->name);
82 err = strncmp(osdev->name, "ze", 2);
83 assert(!err);
84 assert(atoi(osdev->name+2) == (int) k);
85
86 assert(osdev->attr->osdev.type == HWLOC_OBJ_OSDEV_COPROC);
87
88 value = hwloc_obj_get_info_by_name(osdev, "Backend");
89 err = strcmp(value, "LevelZero");
90 assert(!err);
91
92 value = hwloc_obj_get_info_by_name(osdev, "LevelZeroDriverIndex");
93 assert(value);
94 assert(atoi(value) == (int) i);
95 value = hwloc_obj_get_info_by_name(osdev, "LevelZeroDriverDeviceIndex");
96 assert(value);
97 assert(atoi(value) == (int) j);
98
99 set = hwloc_bitmap_alloc();
100 err = hwloc_levelzero_get_device_cpuset(topology, dvh[j], set);
101 if (err < 0) {
102 printf("failed to get cpuset for driver #%u device #%u\n", i, j);
103 } else {
104 char *cpuset_string = NULL;
105 hwloc_bitmap_asprintf(&cpuset_string, set);
106 printf("got cpuset %s for driver #%u device #%u\n", cpuset_string, j, i);
107 free(cpuset_string);
108 if (hwloc_bitmap_isequal(hwloc_topology_get_complete_cpuset(topology), hwloc_topology_get_topology_cpuset(topology)))
109 /* only compare if the topology is complete, otherwise things can be significantly different */
110 assert(hwloc_bitmap_isequal(set, ancestor->cpuset));
111 }
112 hwloc_bitmap_free(set);
113 }
114 }
115
116 hwloc_topology_destroy(topology);
117
118 return err;
119 }
66 Core L#0 (P#0)
77 PU L#0 (P#0)
88 HostBridge L#0 (buses=0000:[00-00])
9 PCI L#0 (busid=0000:00:01.1 id=8086:7010 class=0101(IDE))
9 PCI L#0 (busid=0000:00:01.1 id=8086:7010 class=0101(IDE) PCISlot=1)
1010 Block(Removable Media Device) L#0 (Size=1048575 SectorSize=512 LinuxDeviceID=11:0 Model=QEMU_DVD-ROM Revision=1.5.3 SerialNumber=QM00003) "sr0"
1111 PCI L#1 (busid=0000:00:02.0 id=1013:00b8 class=0300(VGA) PCISlot=2)
1212 PCI L#2 (busid=0000:00:03.0 id=1af4:1000 class=0200(Ethernet) PCISlot=3)
66 Core L#0 (P#0)
77 PU L#0 (P#0)
88 HostBridge L#0 (buses=0000:[00-00])
9 PCI L#0 (busid=0000:00:01.1 id=8086:7010 class=0101(IDE))
9 PCI L#0 (busid=0000:00:01.1 id=8086:7010 class=0101(IDE) PCISlot=1)
1010 Block(Removable Media Device) L#0 (Size=1048575 SectorSize=512 LinuxDeviceID=11:0 Model=QEMU_DVD-ROM Revision=1.5.3 SerialNumber=QM00003) "sr0"
1111 PCI L#1 (busid=0000:00:02.0 id=1013:00b8 class=0300(VGA) PCISlot=2)
1212 PCI L#2 (busid=0000:00:03.0 id=1af4:1000 class=0200(Ethernet) PCISlot=3)
0 Machine (P#0 total=97445592KB DMIProductName=SYS-4029GP-TRT2-1-NE010 DMIProductVersion=123456789 DMIBoardVendor=Supermicro DMIBoardName=X11DPG-OT-CPU DMIBoardVersion=1.00 DMIBoardAssetTag="Default string" DMIChassisVendor=Supermicro DMIChassisType=1 DMIChassisVersion=123456789 DMIChassisAssetTag="Default string" DMIBIOSVendor="American Megatrends Inc." DMIBIOSVersion=2.0b DMIBIOSDate=02/13/2018 DMISysVendor=Supermicro Backend=Linux LinuxCgroup=/ OSName=Linux OSRelease=3.10.0-1160.15.2.el7.x86_64 OSVersion="#1 SMP Wed Feb 3 15:06:38 UTC 2021" HostName=ve Architecture=x86_64)
1 Package L#0 (P#0 total=47925628KB CPUVendor=GenuineIntel CPUFamilyNumber=6 CPUModelNumber=85 CPUModel="Intel(R) Xeon(R) Silver 4108 CPU @ 1.80GHz" CPUStepping=4)
2 NUMANode L#0 (P#0 local=47925628KB total=47925628KB)
3 L3Cache L#0 (size=11264KB linesize=64 ways=11)
4 L2Cache L#0 (size=1024KB linesize=64 ways=16)
5 L1dCache L#0 (size=32KB linesize=64 ways=8)
6 L1iCache L#0 (size=32KB linesize=64 ways=8)
7 Core L#0 (P#0)
8 PU L#0 (P#0)
9 PU L#1 (P#16)
10 L2Cache L#1 (size=1024KB linesize=64 ways=16)
11 L1dCache L#1 (size=32KB linesize=64 ways=8)
12 L1iCache L#1 (size=32KB linesize=64 ways=8)
13 Core L#1 (P#1)
14 PU L#2 (P#1)
15 PU L#3 (P#17)
16 L2Cache L#2 (size=1024KB linesize=64 ways=16)
17 L1dCache L#2 (size=32KB linesize=64 ways=8)
18 L1iCache L#2 (size=32KB linesize=64 ways=8)
19 Core L#2 (P#2)
20 PU L#4 (P#2)
21 PU L#5 (P#18)
22 L2Cache L#3 (size=1024KB linesize=64 ways=16)
23 L1dCache L#3 (size=32KB linesize=64 ways=8)
24 L1iCache L#3 (size=32KB linesize=64 ways=8)
25 Core L#3 (P#3)
26 PU L#6 (P#3)
27 PU L#7 (P#19)
28 L2Cache L#4 (size=1024KB linesize=64 ways=16)
29 L1dCache L#4 (size=32KB linesize=64 ways=8)
30 L1iCache L#4 (size=32KB linesize=64 ways=8)
31 Core L#4 (P#4)
32 PU L#8 (P#4)
33 PU L#9 (P#20)
34 L2Cache L#5 (size=1024KB linesize=64 ways=16)
35 L1dCache L#5 (size=32KB linesize=64 ways=8)
36 L1iCache L#5 (size=32KB linesize=64 ways=8)
37 Core L#5 (P#5)
38 PU L#10 (P#5)
39 PU L#11 (P#21)
40 L2Cache L#6 (size=1024KB linesize=64 ways=16)
41 L1dCache L#6 (size=32KB linesize=64 ways=8)
42 L1iCache L#6 (size=32KB linesize=64 ways=8)
43 Core L#6 (P#6)
44 PU L#12 (P#6)
45 PU L#13 (P#22)
46 L2Cache L#7 (size=1024KB linesize=64 ways=16)
47 L1dCache L#7 (size=32KB linesize=64 ways=8)
48 L1iCache L#7 (size=32KB linesize=64 ways=8)
49 Core L#7 (P#7)
50 PU L#14 (P#7)
51 PU L#15 (P#23)
52 HostBridge L#0 (buses=0000:[17-1e])
53 PCIBridge L#1 (busid=0000:17:00.0 id=8086:2030 class=0604(PCIBridge) link=15.75GB/s buses=0000:[18-1e])
54 PCIBridge L#2 (busid=0000:18:00.0 id=10b5:9797 class=0604(PCIBridge) link=15.75GB/s buses=0000:[19-1e])
55 PCIBridge L#3 (busid=0000:19:04.0 id=10b5:9797 class=0604(PCIBridge) link=15.75GB/s buses=0000:[1a-1a])
56 PCI L#0 (busid=0000:1a:00.0 id=15b3:1013 class=0207(InfiniBand) link=15.75GB/s)
57 PCIBridge L#4 (busid=0000:19:08.0 id=10b5:9797 class=0604(PCIBridge) link=15.75GB/s buses=0000:[1b-1b])
58 PCI L#1 (busid=0000:1b:00.0 id=1bcf:001c class=0b40(Co-Processor) link=15.75GB/s)
59 Co-Processor(VectorEngine) L#0 (VectorEngineModel=1 VectorEngineSerialNumber=32424a32333030343900000000000000 VectorEngineCores=8 VectorEngineMemorySize=50331648 VectorEngineLLCSize=16384 VectorEngineL2Size=256 VectorEngineL1dSize=32 VectorEngineL1iSize=32) "ve0"
60 PCIBridge L#5 (busid=0000:19:0c.0 id=10b5:9797 class=0604(PCIBridge) link=15.75GB/s buses=0000:[1c-1c])
61 PCI L#2 (busid=0000:1c:00.0 id=1bcf:001c class=0b40(Co-Processor) link=15.75GB/s)
62 Co-Processor(VectorEngine) L#1 (VectorEngineModel=1 VectorEngineSerialNumber=32424a35303030313800000000000000 VectorEngineCores=8 VectorEngineMemorySize=50331648 VectorEngineLLCSize=16384 VectorEngineL2Size=256 VectorEngineL1dSize=32 VectorEngineL1iSize=32) "ve1"
63 PCIBridge L#6 (busid=0000:19:10.0 id=10b5:9797 class=0604(PCIBridge) link=15.75GB/s buses=0000:[1d-1d])
64 PCI L#3 (busid=0000:1d:00.0 id=1bcf:001c class=0b40(Co-Processor) link=15.75GB/s)
65 Co-Processor(VectorEngine) L#2 (VectorEngineModel=1 VectorEngineSerialNumber=32424a32333030363800000000000000 VectorEngineCores=8 VectorEngineMemorySize=50331648 VectorEngineLLCSize=16384 VectorEngineL2Size=256 VectorEngineL1dSize=32 VectorEngineL1iSize=32) "ve2"
66 PCIBridge L#7 (busid=0000:19:14.0 id=10b5:9797 class=0604(PCIBridge) link=15.75GB/s buses=0000:[1e-1e])
67 PCI L#4 (busid=0000:1e:00.0 id=1bcf:001c class=0b40(Co-Processor) link=15.75GB/s)
68 Co-Processor(VectorEngine) L#3 (VectorEngineModel=1 VectorEngineSerialNumber=32424a35303030313700000000000000 VectorEngineCores=8 VectorEngineMemorySize=50331648 VectorEngineLLCSize=16384 VectorEngineL2Size=256 VectorEngineL1dSize=32 VectorEngineL1iSize=32) "ve3"
69 HostBridge L#8 (buses=0000:[3a-41])
70 PCIBridge L#9 (busid=0000:3a:00.0 id=8086:2030 class=0604(PCIBridge) link=15.75GB/s buses=0000:[3b-41])
71 PCIBridge L#10 (busid=0000:3b:00.0 id=10b5:9797 class=0604(PCIBridge) link=15.75GB/s buses=0000:[3c-41])
72 PCIBridge L#11 (busid=0000:3c:04.0 id=10b5:9797 class=0604(PCIBridge) link=15.75GB/s buses=0000:[3d-3d])
73 PCI L#5 (busid=0000:3d:00.0 id=1bcf:001c class=0b40(Co-Processor) link=15.75GB/s)
74 Co-Processor(VectorEngine) L#4 (VectorEngineModel=1 VectorEngineSerialNumber=32424a32333030353000000000000000 VectorEngineCores=8 VectorEngineMemorySize=50331648 VectorEngineLLCSize=16384 VectorEngineL2Size=256 VectorEngineL1dSize=32 VectorEngineL1iSize=32) "ve4"
75 PCIBridge L#12 (busid=0000:3c:08.0 id=10b5:9797 class=0604(PCIBridge) link=15.75GB/s buses=0000:[3e-3e])
76 PCI L#6 (busid=0000:3e:00.0 id=15b3:1013 class=0207(InfiniBand) link=15.75GB/s)
77 PCIBridge L#13 (busid=0000:3c:0c.0 id=10b5:9797 class=0604(PCIBridge) link=15.75GB/s buses=0000:[3f-3f])
78 PCI L#7 (busid=0000:3f:00.0 id=1bcf:001c class=0b40(Co-Processor) link=15.75GB/s)
79 Co-Processor(VectorEngine) L#5 (VectorEngineModel=1 VectorEngineSerialNumber=32424a34383030353200000000000000 VectorEngineCores=8 VectorEngineMemorySize=50331648 VectorEngineLLCSize=16384 VectorEngineL2Size=256 VectorEngineL1dSize=32 VectorEngineL1iSize=32) "ve5"
80 PCIBridge L#14 (busid=0000:3c:10.0 id=10b5:9797 class=0604(PCIBridge) link=15.75GB/s buses=0000:[40-40])
81 PCI L#8 (busid=0000:40:00.0 id=1bcf:001c class=0b40(Co-Processor) link=15.75GB/s)
82 Co-Processor(VectorEngine) L#6 (VectorEngineModel=1 VectorEngineSerialNumber=32424a34383030343500000000000000 VectorEngineCores=8 VectorEngineMemorySize=50331648 VectorEngineLLCSize=16384 VectorEngineL2Size=256 VectorEngineL1dSize=32 VectorEngineL1iSize=32) "ve6"
83 PCIBridge L#15 (busid=0000:3c:14.0 id=10b5:9797 class=0604(PCIBridge) link=15.75GB/s buses=0000:[41-41])
84 PCI L#9 (busid=0000:41:00.0 id=1bcf:001c class=0b40(Co-Processor) link=15.75GB/s)
85 Co-Processor(VectorEngine) L#7 (VectorEngineModel=1 VectorEngineSerialNumber=32424a34383030343800000000000000 VectorEngineNUMAPartitioned=1 VectorEngineCores=8 VectorEngineMemorySize=50331648 VectorEngineLLCSize=16384 VectorEngineL2Size=256 VectorEngineL1dSize=32 VectorEngineL1iSize=32) "ve7"
86 HostBridge L#16 (buses=0000:[5d-60])
87 PCIBridge L#17 (busid=0000:5d:02.0 id=8086:2032 class=0604(PCIBridge) link=7.88GB/s buses=0000:[5e-60])
88 PCIBridge L#18 (busid=0000:5e:00.0 id=8086:37c0 class=0604(PCIBridge) link=7.88GB/s buses=0000:[5f-60])
89 PCI L#10 (busid=0000:60:00.0 id=8086:37d2 class=0200(Ethernet) link=0.25GB/s)
90 Network L#8 (Address=ac:1f:6b:8a:5f:c8) "enp96s0f0"
91 PCI L#11 (busid=0000:60:00.1 id=8086:37d2 class=0200(Ethernet) link=0.25GB/s)
92 Network L#9 (Address=ac:1f:6b:8a:5f:c9) "enp96s0f1"
93 Package L#1 (P#1 total=49519964KB CPUVendor=GenuineIntel CPUFamilyNumber=6 CPUModelNumber=85 CPUModel="Intel(R) Xeon(R) Silver 4108 CPU @ 1.80GHz" CPUStepping=4)
94 NUMANode L#1 (P#1 local=49519964KB total=49519964KB)
95 L3Cache L#1 (size=11264KB linesize=64 ways=11)
96 L2Cache L#8 (size=1024KB linesize=64 ways=16)
97 L1dCache L#8 (size=32KB linesize=64 ways=8)
98 L1iCache L#8 (size=32KB linesize=64 ways=8)
99 Core L#8 (P#0)
100 PU L#16 (P#8)
101 PU L#17 (P#24)
102 L2Cache L#9 (size=1024KB linesize=64 ways=16)
103 L1dCache L#9 (size=32KB linesize=64 ways=8)
104 L1iCache L#9 (size=32KB linesize=64 ways=8)
105 Core L#9 (P#1)
106 PU L#18 (P#9)
107 PU L#19 (P#25)
108 L2Cache L#10 (size=1024KB linesize=64 ways=16)
109 L1dCache L#10 (size=32KB linesize=64 ways=8)
110 L1iCache L#10 (size=32KB linesize=64 ways=8)
111 Core L#10 (P#2)
112 PU L#20 (P#10)
113 PU L#21 (P#26)
114 L2Cache L#11 (size=1024KB linesize=64 ways=16)
115 L1dCache L#11 (size=32KB linesize=64 ways=8)
116 L1iCache L#11 (size=32KB linesize=64 ways=8)
117 Core L#11 (P#3)
118 PU L#22 (P#11)
119 PU L#23 (P#27)
120 L2Cache L#12 (size=1024KB linesize=64 ways=16)
121 L1dCache L#12 (size=32KB linesize=64 ways=8)
122 L1iCache L#12 (size=32KB linesize=64 ways=8)
123 Core L#12 (P#4)
124 PU L#24 (P#12)
125 PU L#25 (P#28)
126 L2Cache L#13 (size=1024KB linesize=64 ways=16)
127 L1dCache L#13 (size=32KB linesize=64 ways=8)
128 L1iCache L#13 (size=32KB linesize=64 ways=8)
129 Core L#13 (P#5)
130 PU L#26 (P#13)
131 PU L#27 (P#29)
132 L2Cache L#14 (size=1024KB linesize=64 ways=16)
133 L1dCache L#14 (size=32KB linesize=64 ways=8)
134 L1iCache L#14 (size=32KB linesize=64 ways=8)
135 Core L#14 (P#6)
136 PU L#28 (P#14)
137 PU L#29 (P#30)
138 L2Cache L#15 (size=1024KB linesize=64 ways=16)
139 L1dCache L#15 (size=32KB linesize=64 ways=8)
140 L1iCache L#15 (size=32KB linesize=64 ways=8)
141 Core L#15 (P#7)
142 PU L#30 (P#15)
143 PU L#31 (P#31)
144 depth 0: 1 Machine (type #0)
145 depth 1: 2 Package (type #1)
146 depth 2: 2 L3Cache (type #6)
147 depth 3: 16 L2Cache (type #5)
148 depth 4: 16 L1dCache (type #4)
149 depth 5: 16 L1iCache (type #9)
150 depth 6: 16 Core (type #2)
151 depth 7: 32 PU (type #3)
152 Special depth -3: 2 NUMANode (type #13)
153 Special depth -4: 19 Bridge (type #14)
154 Special depth -5: 12 PCIDev (type #15)
155 Special depth -6: 10 OSDev (type #16)
156 Relative latency matrix (name NUMALatency kind 5) between 2 NUMANodes (depth -3) by logical indexes:
157 index 0 1
158 0 10 21
159 1 21 10
160 Topology not from this system
4242 16em64t-4s2c2t.xml.output \
4343 16ia64-8n2s.output \
4444 32em64t-2n8c+1mic.output \
45 32intel64-2p8co2t+8ve.output \
4546 40intel64-2g2n4c+pci.output \
4647 40intel64-4n10c+pci-conflicts.output \
4748 48amd64-4d2n6c-sparse.output \
6162 nvidiagpunumanodes.kept.output \
6263 fakememinitiators-1np2c+1npp+gi.output \
6364 fakecpuid1f-64intel64-2p4d2n2c2t.output \
64 fakeheterocpunuma.output
65 fakeheterocpunuma.output \
66 offline-cpu0-node0.output
6567
6668 if HWLOC_HAVE_32BITS_PCI_DOMAIN
6769 sysfs_outputs += 2pa-pcidomain32bits.output
109111 16em64t-4s2c2t.xml.source \
110112 16ia64-8n2s.tar.bz2 \
111113 32em64t-2n8c+1mic.tar.bz2 \
114 32intel64-2p8co2t+8ve.tar.bz2 \
112115 40intel64-2g2n4c+pci.tar.bz2 \
113116 40intel64-4n10c+pci-conflicts.tar.bz2 \
114117 48amd64-4d2n6c-sparse.tar.bz2 \
130133 nvidiagpunumanodes.kept.source \
131134 fakememinitiators-1np2c+1npp+gi.tar.bz2 \
132135 fakecpuid1f-64intel64-2p4d2n2c2t.tar.bz2 \
133 fakeheterocpunuma.tar.bz2
136 fakeheterocpunuma.tar.bz2 \
137 offline-cpu0-node0.tar.bz2
134138
135139 # Each output `xyz.output' may have a corresponding exclude `xyz.exclude'
136140 sysfs_excludes =
422422 CONFIGURE_DEPENDENCIES = @CONFIGURE_DEPENDENCIES@
423423 CPP = @CPP@
424424 CPPFLAGS = @CPPFLAGS@
425 CUDA_VERSION = @CUDA_VERSION@
425426 CXX = @CXX@
426427 CXXCPP = @CXXCPP@
427428 CXXDEPMODE = @CXXDEPMODE@
448449 HWLOC_CAIRO_LIBS = @HWLOC_CAIRO_LIBS@
449450 HWLOC_CFLAGS = @HWLOC_CFLAGS@
450451 HWLOC_CPPFLAGS = @HWLOC_CPPFLAGS@
452 HWLOC_CUDART_CFLAGS = @HWLOC_CUDART_CFLAGS@
453 HWLOC_CUDART_CPPFLAGS = @HWLOC_CUDART_CPPFLAGS@
454 HWLOC_CUDART_LDFLAGS = @HWLOC_CUDART_LDFLAGS@
455 HWLOC_CUDART_LIBS = @HWLOC_CUDART_LIBS@
456 HWLOC_CUDA_CFLAGS = @HWLOC_CUDA_CFLAGS@
457 HWLOC_CUDA_CPPFLAGS = @HWLOC_CUDA_CPPFLAGS@
458 HWLOC_CUDA_LDFLAGS = @HWLOC_CUDA_LDFLAGS@
451459 HWLOC_CUDA_LIBS = @HWLOC_CUDA_LIBS@
452460 HWLOC_DIFF_U = @HWLOC_DIFF_U@
453461 HWLOC_DIFF_W = @HWLOC_DIFF_W@
458466 HWLOC_EMBEDDED_LDFLAGS = @HWLOC_EMBEDDED_LDFLAGS@
459467 HWLOC_EMBEDDED_LIBS = @HWLOC_EMBEDDED_LIBS@
460468 HWLOC_GL_LIBS = @HWLOC_GL_LIBS@
469 HWLOC_HAVE_LEVELZERO = @HWLOC_HAVE_LEVELZERO@
461470 HWLOC_HAVE_LIBXML2 = @HWLOC_HAVE_LIBXML2@
462471 HWLOC_HAVE_NVML = @HWLOC_HAVE_NVML@
463472 HWLOC_HAVE_OPENCL = @HWLOC_HAVE_OPENCL@
464473 HWLOC_HAVE_RSMI = @HWLOC_HAVE_RSMI@
474 HWLOC_IBVERBS_LIBS = @HWLOC_IBVERBS_LIBS@
465475 HWLOC_LDFLAGS = @HWLOC_LDFLAGS@
476 HWLOC_LEVELZERO_CFLAGS = @HWLOC_LEVELZERO_CFLAGS@
477 HWLOC_LEVELZERO_LIBS = @HWLOC_LEVELZERO_LIBS@
466478 HWLOC_LIBS = @HWLOC_LIBS@
467479 HWLOC_LIBS_PRIVATE = @HWLOC_LIBS_PRIVATE@
468480 HWLOC_LIBXML2_CFLAGS = @HWLOC_LIBXML2_CFLAGS@
472484 HWLOC_MS_LIB_ARCH = @HWLOC_MS_LIB_ARCH@
473485 HWLOC_NUMA_CFLAGS = @HWLOC_NUMA_CFLAGS@
474486 HWLOC_NUMA_LIBS = @HWLOC_NUMA_LIBS@
487 HWLOC_NVML_CPPFLAGS = @HWLOC_NVML_CPPFLAGS@
488 HWLOC_NVML_LDFLAGS = @HWLOC_NVML_LDFLAGS@
475489 HWLOC_NVML_LIBS = @HWLOC_NVML_LIBS@
476 HWLOC_OPENCL_CFLAGS = @HWLOC_OPENCL_CFLAGS@
490 HWLOC_OPENCL_CPPFLAGS = @HWLOC_OPENCL_CPPFLAGS@
477491 HWLOC_OPENCL_LDFLAGS = @HWLOC_OPENCL_LDFLAGS@
478492 HWLOC_OPENCL_LIBS = @HWLOC_OPENCL_LIBS@
479493 HWLOC_PCIACCESS_CFLAGS = @HWLOC_PCIACCESS_CFLAGS@
599613 prefix = @prefix@
600614 program_transform_name = @program_transform_name@
601615 psdir = @psdir@
616 runstatedir = @runstatedir@
602617 sbindir = @sbindir@
603618 sharedstatedir = @sharedstatedir@
604619 srcdir = @srcdir@
637652 16em64t-4s2c2t-offlines.xml.output \
638653 16em64t-4s2c2t_ncaches.output 16em64t-4s2c2t_merge.output \
639654 16em64t-4s2c2t.xml.output 16ia64-8n2s.output \
640 32em64t-2n8c+1mic.output 40intel64-2g2n4c+pci.output \
655 32em64t-2n8c+1mic.output 32intel64-2p8co2t+8ve.output \
656 40intel64-2g2n4c+pci.output \
641657 40intel64-4n10c+pci-conflicts.output \
642658 48amd64-4d2n6c-sparse.output 64amd64-4s2n4ca2co.output \
643659 64fake-4n2s2ca2c2t.output 64intel64-fakeKNL-A2A-cache.output \
649665 nvidiagpunumanodes.kept.output \
650666 fakememinitiators-1np2c+1npp+gi.output \
651667 fakecpuid1f-64intel64-2p4d2n2c2t.output \
652 fakeheterocpunuma.output $(am__append_1) $(am__append_2)
668 fakeheterocpunuma.output offline-cpu0-node0.output \
669 $(am__append_1) $(am__append_2)
653670 @HWLOC_HAVE_32BITS_PCI_DOMAIN_FALSE@EXTRA_DIST = 2pa-pcidomain32bits.output \
654671 @HWLOC_HAVE_32BITS_PCI_DOMAIN_FALSE@ $(sysfs_outputs) \
655672 @HWLOC_HAVE_32BITS_PCI_DOMAIN_FALSE@ $(sysfs_tarballs) \
701718 16em64t-4s2c2t.xml.source \
702719 16ia64-8n2s.tar.bz2 \
703720 32em64t-2n8c+1mic.tar.bz2 \
721 32intel64-2p8co2t+8ve.tar.bz2 \
704722 40intel64-2g2n4c+pci.tar.bz2 \
705723 40intel64-4n10c+pci-conflicts.tar.bz2 \
706724 48amd64-4d2n6c-sparse.tar.bz2 \
722740 nvidiagpunumanodes.kept.source \
723741 fakememinitiators-1np2c+1npp+gi.tar.bz2 \
724742 fakecpuid1f-64intel64-2p4d2n2c2t.tar.bz2 \
725 fakeheterocpunuma.tar.bz2
743 fakeheterocpunuma.tar.bz2 \
744 offline-cpu0-node0.tar.bz2
726745
727746
728747 # Each output `xyz.output' may have a corresponding exclude `xyz.exclude'
12731292 --log-file $$b.log --trs-file $$b.trs \
12741293 $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
12751294 "$$tst" $(AM_TESTS_FD_REDIRECT)
1295 32intel64-2p8co2t+8ve.output.log: 32intel64-2p8co2t+8ve.output
1296 @p='32intel64-2p8co2t+8ve.output'; \
1297 b='32intel64-2p8co2t+8ve.output'; \
1298 $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
1299 --log-file $$b.log --trs-file $$b.trs \
1300 $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
1301 "$$tst" $(AM_TESTS_FD_REDIRECT)
12761302 40intel64-2g2n4c+pci.output.log: 40intel64-2g2n4c+pci.output
12771303 @p='40intel64-2g2n4c+pci.output'; \
12781304 b='40intel64-2g2n4c+pci.output'; \
14091435 fakeheterocpunuma.output.log: fakeheterocpunuma.output
14101436 @p='fakeheterocpunuma.output'; \
14111437 b='fakeheterocpunuma.output'; \
1438 $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
1439 --log-file $$b.log --trs-file $$b.trs \
1440 $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
1441 "$$tst" $(AM_TESTS_FD_REDIRECT)
1442 offline-cpu0-node0.output.log: offline-cpu0-node0.output
1443 @p='offline-cpu0-node0.output'; \
1444 b='offline-cpu0-node0.output'; \
14121445 $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
14131446 --log-file $$b.log --trs-file $$b.trs \
14141447 $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
359359 CONFIGURE_DEPENDENCIES = @CONFIGURE_DEPENDENCIES@
360360 CPP = @CPP@
361361 CPPFLAGS = @CPPFLAGS@
362 CUDA_VERSION = @CUDA_VERSION@
362363 CXX = @CXX@
363364 CXXCPP = @CXXCPP@
364365 CXXDEPMODE = @CXXDEPMODE@
385386 HWLOC_CAIRO_LIBS = @HWLOC_CAIRO_LIBS@
386387 HWLOC_CFLAGS = @HWLOC_CFLAGS@
387388 HWLOC_CPPFLAGS = @HWLOC_CPPFLAGS@
389 HWLOC_CUDART_CFLAGS = @HWLOC_CUDART_CFLAGS@
390 HWLOC_CUDART_CPPFLAGS = @HWLOC_CUDART_CPPFLAGS@
391 HWLOC_CUDART_LDFLAGS = @HWLOC_CUDART_LDFLAGS@
392 HWLOC_CUDART_LIBS = @HWLOC_CUDART_LIBS@
393 HWLOC_CUDA_CFLAGS = @HWLOC_CUDA_CFLAGS@
394 HWLOC_CUDA_CPPFLAGS = @HWLOC_CUDA_CPPFLAGS@
395 HWLOC_CUDA_LDFLAGS = @HWLOC_CUDA_LDFLAGS@
388396 HWLOC_CUDA_LIBS = @HWLOC_CUDA_LIBS@
389397 HWLOC_DIFF_U = @HWLOC_DIFF_U@
390398 HWLOC_DIFF_W = @HWLOC_DIFF_W@
395403 HWLOC_EMBEDDED_LDFLAGS = @HWLOC_EMBEDDED_LDFLAGS@
396404 HWLOC_EMBEDDED_LIBS = @HWLOC_EMBEDDED_LIBS@
397405 HWLOC_GL_LIBS = @HWLOC_GL_LIBS@
406 HWLOC_HAVE_LEVELZERO = @HWLOC_HAVE_LEVELZERO@
398407 HWLOC_HAVE_LIBXML2 = @HWLOC_HAVE_LIBXML2@
399408 HWLOC_HAVE_NVML = @HWLOC_HAVE_NVML@
400409 HWLOC_HAVE_OPENCL = @HWLOC_HAVE_OPENCL@
401410 HWLOC_HAVE_RSMI = @HWLOC_HAVE_RSMI@
411 HWLOC_IBVERBS_LIBS = @HWLOC_IBVERBS_LIBS@
402412 HWLOC_LDFLAGS = @HWLOC_LDFLAGS@
413 HWLOC_LEVELZERO_CFLAGS = @HWLOC_LEVELZERO_CFLAGS@
414 HWLOC_LEVELZERO_LIBS = @HWLOC_LEVELZERO_LIBS@
403415 HWLOC_LIBS = @HWLOC_LIBS@
404416 HWLOC_LIBS_PRIVATE = @HWLOC_LIBS_PRIVATE@
405417 HWLOC_LIBXML2_CFLAGS = @HWLOC_LIBXML2_CFLAGS@
409421 HWLOC_MS_LIB_ARCH = @HWLOC_MS_LIB_ARCH@
410422 HWLOC_NUMA_CFLAGS = @HWLOC_NUMA_CFLAGS@
411423 HWLOC_NUMA_LIBS = @HWLOC_NUMA_LIBS@
424 HWLOC_NVML_CPPFLAGS = @HWLOC_NVML_CPPFLAGS@
425 HWLOC_NVML_LDFLAGS = @HWLOC_NVML_LDFLAGS@
412426 HWLOC_NVML_LIBS = @HWLOC_NVML_LIBS@
413 HWLOC_OPENCL_CFLAGS = @HWLOC_OPENCL_CFLAGS@
427 HWLOC_OPENCL_CPPFLAGS = @HWLOC_OPENCL_CPPFLAGS@
414428 HWLOC_OPENCL_LDFLAGS = @HWLOC_OPENCL_LDFLAGS@
415429 HWLOC_OPENCL_LIBS = @HWLOC_OPENCL_LIBS@
416430 HWLOC_PCIACCESS_CFLAGS = @HWLOC_PCIACCESS_CFLAGS@
536550 prefix = @prefix@
537551 program_transform_name = @program_transform_name@
538552 psdir = @psdir@
553 runstatedir = @runstatedir@
539554 sbindir = @sbindir@
540555 sharedstatedir = @sharedstatedir@
541556 srcdir = @srcdir@
361361 CONFIGURE_DEPENDENCIES = @CONFIGURE_DEPENDENCIES@
362362 CPP = @CPP@
363363 CPPFLAGS = @CPPFLAGS@
364 CUDA_VERSION = @CUDA_VERSION@
364365 CXX = @CXX@
365366 CXXCPP = @CXXCPP@
366367 CXXDEPMODE = @CXXDEPMODE@
387388 HWLOC_CAIRO_LIBS = @HWLOC_CAIRO_LIBS@
388389 HWLOC_CFLAGS = @HWLOC_CFLAGS@
389390 HWLOC_CPPFLAGS = @HWLOC_CPPFLAGS@
391 HWLOC_CUDART_CFLAGS = @HWLOC_CUDART_CFLAGS@
392 HWLOC_CUDART_CPPFLAGS = @HWLOC_CUDART_CPPFLAGS@
393 HWLOC_CUDART_LDFLAGS = @HWLOC_CUDART_LDFLAGS@
394 HWLOC_CUDART_LIBS = @HWLOC_CUDART_LIBS@
395 HWLOC_CUDA_CFLAGS = @HWLOC_CUDA_CFLAGS@
396 HWLOC_CUDA_CPPFLAGS = @HWLOC_CUDA_CPPFLAGS@
397 HWLOC_CUDA_LDFLAGS = @HWLOC_CUDA_LDFLAGS@
390398 HWLOC_CUDA_LIBS = @HWLOC_CUDA_LIBS@
391399 HWLOC_DIFF_U = @HWLOC_DIFF_U@
392400 HWLOC_DIFF_W = @HWLOC_DIFF_W@
397405 HWLOC_EMBEDDED_LDFLAGS = @HWLOC_EMBEDDED_LDFLAGS@
398406 HWLOC_EMBEDDED_LIBS = @HWLOC_EMBEDDED_LIBS@
399407 HWLOC_GL_LIBS = @HWLOC_GL_LIBS@
408 HWLOC_HAVE_LEVELZERO = @HWLOC_HAVE_LEVELZERO@
400409 HWLOC_HAVE_LIBXML2 = @HWLOC_HAVE_LIBXML2@
401410 HWLOC_HAVE_NVML = @HWLOC_HAVE_NVML@
402411 HWLOC_HAVE_OPENCL = @HWLOC_HAVE_OPENCL@
403412 HWLOC_HAVE_RSMI = @HWLOC_HAVE_RSMI@
413 HWLOC_IBVERBS_LIBS = @HWLOC_IBVERBS_LIBS@
404414 HWLOC_LDFLAGS = @HWLOC_LDFLAGS@
415 HWLOC_LEVELZERO_CFLAGS = @HWLOC_LEVELZERO_CFLAGS@
416 HWLOC_LEVELZERO_LIBS = @HWLOC_LEVELZERO_LIBS@
405417 HWLOC_LIBS = @HWLOC_LIBS@
406418 HWLOC_LIBS_PRIVATE = @HWLOC_LIBS_PRIVATE@
407419 HWLOC_LIBXML2_CFLAGS = @HWLOC_LIBXML2_CFLAGS@
411423 HWLOC_MS_LIB_ARCH = @HWLOC_MS_LIB_ARCH@
412424 HWLOC_NUMA_CFLAGS = @HWLOC_NUMA_CFLAGS@
413425 HWLOC_NUMA_LIBS = @HWLOC_NUMA_LIBS@
426 HWLOC_NVML_CPPFLAGS = @HWLOC_NVML_CPPFLAGS@
427 HWLOC_NVML_LDFLAGS = @HWLOC_NVML_LDFLAGS@
414428 HWLOC_NVML_LIBS = @HWLOC_NVML_LIBS@
415 HWLOC_OPENCL_CFLAGS = @HWLOC_OPENCL_CFLAGS@
429 HWLOC_OPENCL_CPPFLAGS = @HWLOC_OPENCL_CPPFLAGS@
416430 HWLOC_OPENCL_LDFLAGS = @HWLOC_OPENCL_LDFLAGS@
417431 HWLOC_OPENCL_LIBS = @HWLOC_OPENCL_LIBS@
418432 HWLOC_PCIACCESS_CFLAGS = @HWLOC_PCIACCESS_CFLAGS@
538552 prefix = @prefix@
539553 program_transform_name = @program_transform_name@
540554 psdir = @psdir@
555 runstatedir = @runstatedir@
541556 sbindir = @sbindir@
542557 sharedstatedir = @sharedstatedir@
543558 srcdir = @srcdir@
0 Machine (P#0 total=67108864KB DMIProductName="PowerEdge R630" DMIProductVersion= DMIBoardVendor="Dell Inc." DMIBoardName=0CNCJW DMIBoardVersion=A17 DMIBoardAssetTag= DMIChassisVendor="Dell Inc." DMIChassisType=23 DMIChassisVersion= DMIChassisAssetTag= DMIBIOSVendor="Dell Inc." DMIBIOSVersion=2.12.1 DMIBIOSDate=12/04/2020 DMISysVendor="Dell Inc." Backend=Linux LinuxCgroup=/ OSName=Linux OSRelease=3.10.0-957.el7.x86_64 OSVersion="#1 SMP Thu Nov 8 23:39:32 UTC 2018" HostName=miriel023.plafrim.cluster Architecture=x86_64)
1 Package L#0 (P#0 CPUVendor=GenuineIntel CPUFamilyNumber=6 CPUModelNumber=63 CPUModel="Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz" CPUStepping=2)
2 L3Cache L#0 (size=30720KB linesize=64 ways=20)
3 L2Cache L#0 (size=256KB linesize=64 ways=8)
4 L1dCache L#0 (size=32KB linesize=64 ways=8)
5 L1iCache L#0 (size=32KB linesize=64 ways=8)
6 Core L#0 (P#2)
7 PU L#0 (P#4)
8 L2Cache L#1 (size=256KB linesize=64 ways=8)
9 L1dCache L#1 (size=32KB linesize=64 ways=8)
10 L1iCache L#1 (size=32KB linesize=64 ways=8)
11 Core L#1 (P#3)
12 PU L#1 (P#6)
13 L2Cache L#2 (size=256KB linesize=64 ways=8)
14 L1dCache L#2 (size=32KB linesize=64 ways=8)
15 L1iCache L#2 (size=32KB linesize=64 ways=8)
16 Core L#2 (P#4)
17 PU L#2 (P#8)
18 L2Cache L#3 (size=256KB linesize=64 ways=8)
19 L1dCache L#3 (size=32KB linesize=64 ways=8)
20 L1iCache L#3 (size=32KB linesize=64 ways=8)
21 Core L#3 (P#5)
22 PU L#3 (P#10)
23 L2Cache L#4 (size=256KB linesize=64 ways=8)
24 L1dCache L#4 (size=32KB linesize=64 ways=8)
25 L1iCache L#4 (size=32KB linesize=64 ways=8)
26 Core L#4 (P#8)
27 PU L#4 (P#12)
28 L2Cache L#5 (size=256KB linesize=64 ways=8)
29 L1dCache L#5 (size=32KB linesize=64 ways=8)
30 L1iCache L#5 (size=32KB linesize=64 ways=8)
31 Core L#5 (P#9)
32 PU L#5 (P#14)
33 L2Cache L#6 (size=256KB linesize=64 ways=8)
34 L1dCache L#6 (size=32KB linesize=64 ways=8)
35 L1iCache L#6 (size=32KB linesize=64 ways=8)
36 Core L#6 (P#10)
37 PU L#6 (P#16)
38 L2Cache L#7 (size=256KB linesize=64 ways=8)
39 L1dCache L#7 (size=32KB linesize=64 ways=8)
40 L1iCache L#7 (size=32KB linesize=64 ways=8)
41 Core L#7 (P#11)
42 PU L#7 (P#18)
43 L2Cache L#8 (size=256KB linesize=64 ways=8)
44 L1dCache L#8 (size=32KB linesize=64 ways=8)
45 L1iCache L#8 (size=32KB linesize=64 ways=8)
46 Core L#8 (P#12)
47 PU L#8 (P#20)
48 Package L#1 (P#1 total=67108864KB CPUVendor=GenuineIntel CPUFamilyNumber=6 CPUModelNumber=63 CPUModel="Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz" CPUStepping=2)
49 NUMANode L#0 (P#1 local=67108864KB total=67108864KB)
50 L3Cache L#1 (size=30720KB linesize=64 ways=20)
51 L2Cache L#9 (size=256KB linesize=64 ways=8)
52 L1dCache L#9 (size=32KB linesize=64 ways=8)
53 L1iCache L#9 (size=32KB linesize=64 ways=8)
54 Core L#9 (P#2)
55 PU L#9 (P#5)
56 L2Cache L#10 (size=256KB linesize=64 ways=8)
57 L1dCache L#10 (size=32KB linesize=64 ways=8)
58 L1iCache L#10 (size=32KB linesize=64 ways=8)
59 Core L#10 (P#3)
60 PU L#10 (P#7)
61 L2Cache L#11 (size=256KB linesize=64 ways=8)
62 L1dCache L#11 (size=32KB linesize=64 ways=8)
63 L1iCache L#11 (size=32KB linesize=64 ways=8)
64 Core L#11 (P#4)
65 PU L#11 (P#9)
66 L2Cache L#12 (size=256KB linesize=64 ways=8)
67 L1dCache L#12 (size=32KB linesize=64 ways=8)
68 L1iCache L#12 (size=32KB linesize=64 ways=8)
69 Core L#12 (P#5)
70 PU L#12 (P#11)
71 L2Cache L#13 (size=256KB linesize=64 ways=8)
72 L1dCache L#13 (size=32KB linesize=64 ways=8)
73 L1iCache L#13 (size=32KB linesize=64 ways=8)
74 Core L#13 (P#8)
75 PU L#13 (P#13)
76 L2Cache L#14 (size=256KB linesize=64 ways=8)
77 L1dCache L#14 (size=32KB linesize=64 ways=8)
78 L1iCache L#14 (size=32KB linesize=64 ways=8)
79 Core L#14 (P#9)
80 PU L#14 (P#15)
81 L2Cache L#15 (size=256KB linesize=64 ways=8)
82 L1dCache L#15 (size=32KB linesize=64 ways=8)
83 L1iCache L#15 (size=32KB linesize=64 ways=8)
84 Core L#15 (P#10)
85 PU L#15 (P#17)
86 L2Cache L#16 (size=256KB linesize=64 ways=8)
87 L1dCache L#16 (size=32KB linesize=64 ways=8)
88 L1iCache L#16 (size=32KB linesize=64 ways=8)
89 Core L#16 (P#11)
90 PU L#16 (P#19)
91 depth 0: 1 Machine (type #0)
92 depth 1: 2 Package (type #1)
93 depth 2: 2 L3Cache (type #6)
94 depth 3: 17 L2Cache (type #5)
95 depth 4: 17 L1dCache (type #4)
96 depth 5: 17 L1iCache (type #9)
97 depth 6: 17 Core (type #2)
98 depth 7: 17 PU (type #3)
99 Special depth -3: 1 NUMANode (type #13)
100 7 processors not represented in topology: 0x00e0000f
101 Topology not from this system
0 # Copyright © 2009-2020 Inria. All rights reserved.
0 # Copyright © 2009-2021 Inria. All rights reserved.
11 # Copyright © 2009, 2011-2012, 2020 Université Bordeaux
22 # Copyright © 2009-2014 Cisco Systems, Inc. All rights reserved.
33 # See COPYING in top-level directory.
2222 libhwloc-port-cuda.la \
2323 libhwloc-port-nvml.la \
2424 libhwloc-port-rsmi.la \
25 libhwloc-port-levelzero.la \
2526 libhwloc-port-gl.la
2627 check_LIBRARIES = \
2728 liblstopo-port-windows.a \
174175 libhwloc_port_rsmi_la_CPPFLAGS = $(common_CPPFLAGS) \
175176 -I$(HWLOC_top_srcdir)/tests/hwloc/ports/include/rsmi
176177
178 nodist_libhwloc_port_levelzero_la_SOURCES = topology-levelzero.c
179 libhwloc_port_levelzero_la_SOURCES = \
180 include/levelzero/level_zero/ze_api.h \
181 include/levelzero/level_zero/zes_api.h
182 libhwloc_port_levelzero_la_CPPFLAGS = $(common_CPPFLAGS) \
183 -I$(HWLOC_top_srcdir)/tests/hwloc/ports/include/levelzero
184
177185 nodist_libhwloc_port_gl_la_SOURCES = topology-gl.c
178186 libhwloc_port_gl_la_SOURCES = \
179187 include/gl/X11/Xlib.h \
1313
1414 @SET_MAKE@
1515
16 # Copyright © 2009-2020 Inria. All rights reserved.
16 # Copyright © 2009-2021 Inria. All rights reserved.
1717 # Copyright © 2009, 2011-2012, 2020 Université Bordeaux
1818 # Copyright © 2009-2014 Cisco Systems, Inc. All rights reserved.
1919 # See COPYING in top-level directory.
117117 topology-aix.c topology-windows.c topology-darwin.c \
118118 topology-freebsd.c topology-netbsd.c topology-hpux.c \
119119 topology-bgq.c topology-opencl.c topology-cuda.c \
120 topology-nvml.c topology-rsmi.c topology-gl.c lstopo-windows.c \
121 lstopo-android.c
120 topology-nvml.c topology-rsmi.c topology-levelzero.c \
121 topology-gl.c lstopo-windows.c lstopo-android.c
122122 CONFIG_CLEAN_VPATH_FILES =
123123 ARFLAGS = cru
124124 AM_V_AR = $(am__v_AR_@AM_V@)
194194 libhwloc_port_hpux_la_OBJECTS = $(am_libhwloc_port_hpux_la_OBJECTS) \
195195 $(nodist_libhwloc_port_hpux_la_OBJECTS)
196196 @HWLOC_HAVE_LINUX_TRUE@am_libhwloc_port_hpux_la_rpath =
197 libhwloc_port_levelzero_la_LIBADD =
198 am_libhwloc_port_levelzero_la_OBJECTS =
199 nodist_libhwloc_port_levelzero_la_OBJECTS = \
200 libhwloc_port_levelzero_la-topology-levelzero.lo
201 libhwloc_port_levelzero_la_OBJECTS = \
202 $(am_libhwloc_port_levelzero_la_OBJECTS) \
203 $(nodist_libhwloc_port_levelzero_la_OBJECTS)
204 @HWLOC_HAVE_LINUX_TRUE@am_libhwloc_port_levelzero_la_rpath =
197205 libhwloc_port_netbsd_la_LIBADD =
198206 am_libhwloc_port_netbsd_la_OBJECTS =
199207 nodist_libhwloc_port_netbsd_la_OBJECTS = \
264272 ./$(DEPDIR)/libhwloc_port_freebsd_la-topology-freebsd.Plo \
265273 ./$(DEPDIR)/libhwloc_port_gl_la-topology-gl.Plo \
266274 ./$(DEPDIR)/libhwloc_port_hpux_la-topology-hpux.Plo \
275 ./$(DEPDIR)/libhwloc_port_levelzero_la-topology-levelzero.Plo \
267276 ./$(DEPDIR)/libhwloc_port_netbsd_la-topology-netbsd.Plo \
268277 ./$(DEPDIR)/libhwloc_port_nvml_la-topology-nvml.Plo \
269278 ./$(DEPDIR)/libhwloc_port_opencl_la-topology-opencl.Plo \
309318 $(nodist_libhwloc_port_gl_la_SOURCES) \
310319 $(libhwloc_port_hpux_la_SOURCES) \
311320 $(nodist_libhwloc_port_hpux_la_SOURCES) \
321 $(libhwloc_port_levelzero_la_SOURCES) \
322 $(nodist_libhwloc_port_levelzero_la_SOURCES) \
312323 $(libhwloc_port_netbsd_la_SOURCES) \
313324 $(nodist_libhwloc_port_netbsd_la_SOURCES) \
314325 $(libhwloc_port_nvml_la_SOURCES) \
329340 $(libhwloc_port_freebsd_la_SOURCES) \
330341 $(libhwloc_port_gl_la_SOURCES) \
331342 $(libhwloc_port_hpux_la_SOURCES) \
343 $(libhwloc_port_levelzero_la_SOURCES) \
332344 $(libhwloc_port_netbsd_la_SOURCES) \
333345 $(libhwloc_port_nvml_la_SOURCES) \
334346 $(libhwloc_port_opencl_la_SOURCES) \
379391 CONFIGURE_DEPENDENCIES = @CONFIGURE_DEPENDENCIES@
380392 CPP = @CPP@
381393 CPPFLAGS = @CPPFLAGS@
394 CUDA_VERSION = @CUDA_VERSION@
382395 CXX = @CXX@
383396 CXXCPP = @CXXCPP@
384397 CXXDEPMODE = @CXXDEPMODE@
405418 HWLOC_CAIRO_LIBS = @HWLOC_CAIRO_LIBS@
406419 HWLOC_CFLAGS = @HWLOC_CFLAGS@
407420 HWLOC_CPPFLAGS = @HWLOC_CPPFLAGS@
421 HWLOC_CUDART_CFLAGS = @HWLOC_CUDART_CFLAGS@
422 HWLOC_CUDART_CPPFLAGS = @HWLOC_CUDART_CPPFLAGS@
423 HWLOC_CUDART_LDFLAGS = @HWLOC_CUDART_LDFLAGS@
424 HWLOC_CUDART_LIBS = @HWLOC_CUDART_LIBS@
425 HWLOC_CUDA_CFLAGS = @HWLOC_CUDA_CFLAGS@
426 HWLOC_CUDA_CPPFLAGS = @HWLOC_CUDA_CPPFLAGS@
427 HWLOC_CUDA_LDFLAGS = @HWLOC_CUDA_LDFLAGS@
408428 HWLOC_CUDA_LIBS = @HWLOC_CUDA_LIBS@
409429 HWLOC_DIFF_U = @HWLOC_DIFF_U@
410430 HWLOC_DIFF_W = @HWLOC_DIFF_W@
415435 HWLOC_EMBEDDED_LDFLAGS = @HWLOC_EMBEDDED_LDFLAGS@
416436 HWLOC_EMBEDDED_LIBS = @HWLOC_EMBEDDED_LIBS@
417437 HWLOC_GL_LIBS = @HWLOC_GL_LIBS@
438 HWLOC_HAVE_LEVELZERO = @HWLOC_HAVE_LEVELZERO@
418439 HWLOC_HAVE_LIBXML2 = @HWLOC_HAVE_LIBXML2@
419440 HWLOC_HAVE_NVML = @HWLOC_HAVE_NVML@
420441 HWLOC_HAVE_OPENCL = @HWLOC_HAVE_OPENCL@
421442 HWLOC_HAVE_RSMI = @HWLOC_HAVE_RSMI@
443 HWLOC_IBVERBS_LIBS = @HWLOC_IBVERBS_LIBS@
422444 HWLOC_LDFLAGS = @HWLOC_LDFLAGS@
445 HWLOC_LEVELZERO_CFLAGS = @HWLOC_LEVELZERO_CFLAGS@
446 HWLOC_LEVELZERO_LIBS = @HWLOC_LEVELZERO_LIBS@
423447 HWLOC_LIBS = @HWLOC_LIBS@
424448 HWLOC_LIBS_PRIVATE = @HWLOC_LIBS_PRIVATE@
425449 HWLOC_LIBXML2_CFLAGS = @HWLOC_LIBXML2_CFLAGS@
429453 HWLOC_MS_LIB_ARCH = @HWLOC_MS_LIB_ARCH@
430454 HWLOC_NUMA_CFLAGS = @HWLOC_NUMA_CFLAGS@
431455 HWLOC_NUMA_LIBS = @HWLOC_NUMA_LIBS@
456 HWLOC_NVML_CPPFLAGS = @HWLOC_NVML_CPPFLAGS@
457 HWLOC_NVML_LDFLAGS = @HWLOC_NVML_LDFLAGS@
432458 HWLOC_NVML_LIBS = @HWLOC_NVML_LIBS@
433 HWLOC_OPENCL_CFLAGS = @HWLOC_OPENCL_CFLAGS@
459 HWLOC_OPENCL_CPPFLAGS = @HWLOC_OPENCL_CPPFLAGS@
434460 HWLOC_OPENCL_LDFLAGS = @HWLOC_OPENCL_LDFLAGS@
435461 HWLOC_OPENCL_LIBS = @HWLOC_OPENCL_LIBS@
436462 HWLOC_PCIACCESS_CFLAGS = @HWLOC_PCIACCESS_CFLAGS@
556582 prefix = @prefix@
557583 program_transform_name = @program_transform_name@
558584 psdir = @psdir@
585 runstatedir = @runstatedir@
559586 sbindir = @sbindir@
560587 sharedstatedir = @sharedstatedir@
561588 srcdir = @srcdir@
586613 @HWLOC_HAVE_LINUX_TRUE@ libhwloc-port-cuda.la \
587614 @HWLOC_HAVE_LINUX_TRUE@ libhwloc-port-nvml.la \
588615 @HWLOC_HAVE_LINUX_TRUE@ libhwloc-port-rsmi.la \
616 @HWLOC_HAVE_LINUX_TRUE@ libhwloc-port-levelzero.la \
589617 @HWLOC_HAVE_LINUX_TRUE@ libhwloc-port-gl.la
590618
591619 @HWLOC_HAVE_LINUX_TRUE@check_LIBRARIES = \
750778
751779 libhwloc_port_rsmi_la_CPPFLAGS = $(common_CPPFLAGS) \
752780 -I$(HWLOC_top_srcdir)/tests/hwloc/ports/include/rsmi
781
782 nodist_libhwloc_port_levelzero_la_SOURCES = topology-levelzero.c
783 libhwloc_port_levelzero_la_SOURCES = \
784 include/levelzero/level_zero/ze_api.h \
785 include/levelzero/level_zero/zes_api.h
786
787 libhwloc_port_levelzero_la_CPPFLAGS = $(common_CPPFLAGS) \
788 -I$(HWLOC_top_srcdir)/tests/hwloc/ports/include/levelzero
753789
754790 nodist_libhwloc_port_gl_la_SOURCES = topology-gl.c
755791 libhwloc_port_gl_la_SOURCES = \
839875 libhwloc-port-hpux.la: $(libhwloc_port_hpux_la_OBJECTS) $(libhwloc_port_hpux_la_DEPENDENCIES) $(EXTRA_libhwloc_port_hpux_la_DEPENDENCIES)
840876 $(AM_V_CCLD)$(LINK) $(am_libhwloc_port_hpux_la_rpath) $(libhwloc_port_hpux_la_OBJECTS) $(libhwloc_port_hpux_la_LIBADD) $(LIBS)
841877
878 libhwloc-port-levelzero.la: $(libhwloc_port_levelzero_la_OBJECTS) $(libhwloc_port_levelzero_la_DEPENDENCIES) $(EXTRA_libhwloc_port_levelzero_la_DEPENDENCIES)
879 $(AM_V_CCLD)$(LINK) $(am_libhwloc_port_levelzero_la_rpath) $(libhwloc_port_levelzero_la_OBJECTS) $(libhwloc_port_levelzero_la_LIBADD) $(LIBS)
880
842881 libhwloc-port-netbsd.la: $(libhwloc_port_netbsd_la_OBJECTS) $(libhwloc_port_netbsd_la_DEPENDENCIES) $(EXTRA_libhwloc_port_netbsd_la_DEPENDENCIES)
843882 $(AM_V_CCLD)$(LINK) $(am_libhwloc_port_netbsd_la_rpath) $(libhwloc_port_netbsd_la_OBJECTS) $(libhwloc_port_netbsd_la_LIBADD) $(LIBS)
844883
870909 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhwloc_port_freebsd_la-topology-freebsd.Plo@am__quote@ # am--include-marker
871910 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhwloc_port_gl_la-topology-gl.Plo@am__quote@ # am--include-marker
872911 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhwloc_port_hpux_la-topology-hpux.Plo@am__quote@ # am--include-marker
912 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhwloc_port_levelzero_la-topology-levelzero.Plo@am__quote@ # am--include-marker
873913 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhwloc_port_netbsd_la-topology-netbsd.Plo@am__quote@ # am--include-marker
874914 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhwloc_port_nvml_la-topology-nvml.Plo@am__quote@ # am--include-marker
875915 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libhwloc_port_opencl_la-topology-opencl.Plo@am__quote@ # am--include-marker
9861026 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='topology-hpux.c' object='libhwloc_port_hpux_la-topology-hpux.lo' libtool=yes @AMDEPBACKSLASH@
9871027 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
9881028 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhwloc_port_hpux_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhwloc_port_hpux_la-topology-hpux.lo `test -f 'topology-hpux.c' || echo '$(srcdir)/'`topology-hpux.c
1029
1030 libhwloc_port_levelzero_la-topology-levelzero.lo: topology-levelzero.c
1031 @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhwloc_port_levelzero_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhwloc_port_levelzero_la-topology-levelzero.lo -MD -MP -MF $(DEPDIR)/libhwloc_port_levelzero_la-topology-levelzero.Tpo -c -o libhwloc_port_levelzero_la-topology-levelzero.lo `test -f 'topology-levelzero.c' || echo '$(srcdir)/'`topology-levelzero.c
1032 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libhwloc_port_levelzero_la-topology-levelzero.Tpo $(DEPDIR)/libhwloc_port_levelzero_la-topology-levelzero.Plo
1033 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='topology-levelzero.c' object='libhwloc_port_levelzero_la-topology-levelzero.lo' libtool=yes @AMDEPBACKSLASH@
1034 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
1035 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhwloc_port_levelzero_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libhwloc_port_levelzero_la-topology-levelzero.lo `test -f 'topology-levelzero.c' || echo '$(srcdir)/'`topology-levelzero.c
9891036
9901037 libhwloc_port_netbsd_la-topology-netbsd.lo: topology-netbsd.c
9911038 @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libhwloc_port_netbsd_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libhwloc_port_netbsd_la-topology-netbsd.lo -MD -MP -MF $(DEPDIR)/libhwloc_port_netbsd_la-topology-netbsd.Tpo -c -o libhwloc_port_netbsd_la-topology-netbsd.lo `test -f 'topology-netbsd.c' || echo '$(srcdir)/'`topology-netbsd.c
11761223 -rm -f ./$(DEPDIR)/libhwloc_port_freebsd_la-topology-freebsd.Plo
11771224 -rm -f ./$(DEPDIR)/libhwloc_port_gl_la-topology-gl.Plo
11781225 -rm -f ./$(DEPDIR)/libhwloc_port_hpux_la-topology-hpux.Plo
1226 -rm -f ./$(DEPDIR)/libhwloc_port_levelzero_la-topology-levelzero.Plo
11791227 -rm -f ./$(DEPDIR)/libhwloc_port_netbsd_la-topology-netbsd.Plo
11801228 -rm -f ./$(DEPDIR)/libhwloc_port_nvml_la-topology-nvml.Plo
11811229 -rm -f ./$(DEPDIR)/libhwloc_port_opencl_la-topology-opencl.Plo
12371285 -rm -f ./$(DEPDIR)/libhwloc_port_freebsd_la-topology-freebsd.Plo
12381286 -rm -f ./$(DEPDIR)/libhwloc_port_gl_la-topology-gl.Plo
12391287 -rm -f ./$(DEPDIR)/libhwloc_port_hpux_la-topology-hpux.Plo
1288 -rm -f ./$(DEPDIR)/libhwloc_port_levelzero_la-topology-levelzero.Plo
12401289 -rm -f ./$(DEPDIR)/libhwloc_port_netbsd_la-topology-netbsd.Plo
12411290 -rm -f ./$(DEPDIR)/libhwloc_port_nvml_la-topology-nvml.Plo
12421291 -rm -f ./$(DEPDIR)/libhwloc_port_opencl_la-topology-opencl.Plo
00 /*
1 * Copyright © 2013-2020 Inria. All rights reserved.
1 * Copyright © 2013-2021 Inria. All rights reserved.
22 * See COPYING in top-level directory.
33 */
44
1313 #define HWLOC_HAVE_CUDA_L2CACHESIZE 1
1414
1515 typedef unsigned cudaError_t;
16 #define cudaErrorNoDevice 37
1617
1718 struct cudaDeviceProp {
1819 char name[256];
0 /*
1 * Copyright © 2020-2021 Inria. All rights reserved.
2 * See COPYING in top-level directory.
3 */
4
5 #ifndef HWLOC_PORT_L0_ZE_API_H
6 #define HWLOC_PORT_L0_ZE_API_H
7
8 typedef int ze_result_t;
9 #define ZE_RESULT_SUCCESS 0
10
11 typedef void * ze_driver_handle_t;
12 typedef void * ze_device_handle_t;
13
14 extern ze_result_t zeInit(int);
15 extern ze_result_t zeDriverGet(uint32_t *, ze_driver_handle_t *);
16 extern ze_result_t zeDeviceGet(ze_driver_handle_t, uint32_t *, ze_device_handle_t *);
17
18 typedef struct ze_command_queue_group_properties {
19 unsigned long flags;
20 unsigned numQueues;
21 } ze_command_queue_group_properties_t;
22
23 extern ze_result_t zeDeviceGetCommandQueueGroupProperties(ze_driver_handle_t, uint32_t *, ze_command_queue_group_properties_t *);
24
25
26 #endif /* HWLOC_PORT_L0_ZE_API_H */
0 /*
1 * Copyright © 2020 Inria. All rights reserved.
2 * See COPYING in top-level directory.
3 */
4
5 #ifndef HWLOC_PORT_L0_ZET_API_H
6 #define HWLOC_PORT_L0_ZET_API_H
7
8 #include "ze_api.h"
9
10 typedef void * zes_device_handle_t;
11
12 typedef struct {
13 char *vendorName;
14 char *brandName;
15 char *modelName;
16 char *serialNumber;
17 char *boardNumber;
18 } zes_device_properties_t;
19
20 typedef struct {
21 struct {
22 unsigned domain, bus, device, function;
23 } address;
24 struct {
25 unsigned gen;
26 unsigned lanes;
27 unsigned maxBandwidth;
28 } maxSpeed;
29 } zes_pci_properties_t;
30
31 extern ze_result_t zesDeviceGetProperties(zes_device_handle_t, zes_device_properties_t *);
32 extern ze_result_t zesDevicePciGetProperties(zes_device_handle_t, zes_pci_properties_t *);
33
34 #endif /* HWLOC_PORT_L0_ZET_API_H */
3737 nvmlReturn_t nvmlDeviceGetMaxPcieLinkGeneration(nvmlDevice_t device, unsigned int *maxLinkGen);
3838 nvmlReturn_t nvmlDeviceGetMaxPcieLinkWidth(nvmlDevice_t device, unsigned int *maxLinkGen);
3939
40 #define NVML_NVLINK_MAX_LINKS 6
41 typedef unsigned nvmlEnableState_t;
42 #define NVML_FEATURE_ENABLED 1
43 nvmlReturn_t nvmlDeviceGetNvLinkState(nvmlDevice_t device, unsigned int link, nvmlEnableState_t * isActive);
44 nvmlReturn_t nvmlDeviceGetNvLinkVersion(nvmlDevice_t device, unsigned int link, unsigned int* version);
45 nvmlReturn_t nvmlDeviceGetNvLinkRemotePciInfo(nvmlDevice_t device, unsigned int link, nvmlPciInfo_t * pci);
46
4047 #endif /* HWLOC_PORT_NVML_NVML_H */
00 /*
1 * Copyright © 2013-2018 Inria. All rights reserved.
1 * Copyright © 2013-2021 Inria. All rights reserved.
22 * See COPYING in top-level directory.
33 */
44
2525 cl_int clGetDeviceInfo(cl_device_id, cl_device_info, size_t, void *, size_t *);
2626 cl_int clGetPlatformInfo(cl_platform_id, cl_platform_info, size_t, void *, size_t *);
2727
28 #define CL_DEVICE_TYPE_DEFAULT (1 << 0)
2829 #define CL_DEVICE_TYPE_CPU (1 << 1)
2930 #define CL_DEVICE_TYPE_GPU (1 << 2)
3031 #define CL_DEVICE_TYPE_ACCELERATOR (1 << 3)
1818 TEST_CPPFLAGS += -DHWLOC_TEST_RENAME_OPENFABRICS_VERBS=1
1919 endif HWLOC_HAVE_LIBIBVERBS
2020 if HWLOC_HAVE_OPENCL
21 TEST_CPPFLAGS += -DHWLOC_TEST_RENAME_OPENCL=1
21 TEST_CPPFLAGS += -DHWLOC_TEST_RENAME_OPENCL=1 $(HWLOC_OPENCL_CFLAGS) $(HWLOC_OPENCL_CPPFLAGS)
2222 endif HWLOC_HAVE_OPENCL
2323 if HWLOC_HAVE_CUDA
24 TEST_CPPFLAGS += -DHWLOC_TEST_RENAME_CUDA=1
24 TEST_CPPFLAGS += -DHWLOC_TEST_RENAME_CUDA=1 $(HWLOC_CUDA_CFLAGS) $(HWLOC_CUDA_CPPFLAGS)
2525 endif HWLOC_HAVE_CUDA
2626 if HWLOC_HAVE_CUDART
27 TEST_CPPFLAGS += -DHWLOC_TEST_RENAME_CUDART=1
27 TEST_CPPFLAGS += -DHWLOC_TEST_RENAME_CUDART=1 $(HWLOC_CUDART_CFLAGS) $(HWLOC_CUDART_CPPFLAGS)
2828 endif HWLOC_HAVE_CUDART
2929 if HWLOC_HAVE_NVML
30 TEST_CPPFLAGS += -DHWLOC_TEST_RENAME_NVML=1
30 TEST_CPPFLAGS += -DHWLOC_TEST_RENAME_NVML=1 $(HWLOC_NVML_CFLAGS) $(HWLOC_NVML_CPPFLAGS)
3131 endif HWLOC_HAVE_NVML
3232 if HWLOC_HAVE_RSMI
33 TEST_CPPFLAGS += -DHWLOC_TEST_RENAME_RSMI=1
33 TEST_CPPFLAGS += -DHWLOC_TEST_RENAME_RSMI=1 $(HWLOC_RSMI_CFLAGS) $(HWLOC_RSMI_CPPFLAGS)
3434 endif HWLOC_HAVE_RSMI
35 if HWLOC_HAVE_LEVELZERO
36 TEST_CPPFLAGS += -DHWLOC_TEST_RENAME_LEVELZERO=1 $(HWLOC_LEVELZERO_CFLAGS) $(HWLOC_LEVELZERO_CPPFLAGS)
37 endif HWLOC_HAVE_LEVELZERO
3538
3639 dirs:
3740 mkdir -p include/hwloc/autogen include/private/autogen
9191 @HWLOC_HAVE_LINUX_LIBNUMA_TRUE@am__append_2 = -DHWLOC_TEST_RENAME_LINUX_LIBNUMA=1
9292 @HWLOC_HAVE_SCHED_SETAFFINITY_TRUE@am__append_3 = -DHWLOC_TEST_RENAME_GLIBC_SCHED=1
9393 @HWLOC_HAVE_LIBIBVERBS_TRUE@am__append_4 = -DHWLOC_TEST_RENAME_OPENFABRICS_VERBS=1
94 @HWLOC_HAVE_OPENCL_TRUE@am__append_5 = -DHWLOC_TEST_RENAME_OPENCL=1
95 @HWLOC_HAVE_CUDA_TRUE@am__append_6 = -DHWLOC_TEST_RENAME_CUDA=1
96 @HWLOC_HAVE_CUDART_TRUE@am__append_7 = -DHWLOC_TEST_RENAME_CUDART=1
97 @HWLOC_HAVE_NVML_TRUE@am__append_8 = -DHWLOC_TEST_RENAME_NVML=1
98 @HWLOC_HAVE_RSMI_TRUE@am__append_9 = -DHWLOC_TEST_RENAME_RSMI=1
94 @HWLOC_HAVE_OPENCL_TRUE@am__append_5 = -DHWLOC_TEST_RENAME_OPENCL=1 $(HWLOC_OPENCL_CFLAGS) $(HWLOC_OPENCL_CPPFLAGS)
95 @HWLOC_HAVE_CUDA_TRUE@am__append_6 = -DHWLOC_TEST_RENAME_CUDA=1 $(HWLOC_CUDA_CFLAGS) $(HWLOC_CUDA_CPPFLAGS)
96 @HWLOC_HAVE_CUDART_TRUE@am__append_7 = -DHWLOC_TEST_RENAME_CUDART=1 $(HWLOC_CUDART_CFLAGS) $(HWLOC_CUDART_CPPFLAGS)
97 @HWLOC_HAVE_NVML_TRUE@am__append_8 = -DHWLOC_TEST_RENAME_NVML=1 $(HWLOC_NVML_CFLAGS) $(HWLOC_NVML_CPPFLAGS)
98 @HWLOC_HAVE_RSMI_TRUE@am__append_9 = -DHWLOC_TEST_RENAME_RSMI=1 $(HWLOC_RSMI_CFLAGS) $(HWLOC_RSMI_CPPFLAGS)
99 @HWLOC_HAVE_LEVELZERO_TRUE@am__append_10 = -DHWLOC_TEST_RENAME_LEVELZERO=1 $(HWLOC_LEVELZERO_CFLAGS) $(HWLOC_LEVELZERO_CPPFLAGS)
99100 subdir = tests/hwloc/rename
100101 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
101102 am__aclocal_m4_deps = $(top_srcdir)/config/hwloc.m4 \
159160 CONFIGURE_DEPENDENCIES = @CONFIGURE_DEPENDENCIES@
160161 CPP = @CPP@
161162 CPPFLAGS = @CPPFLAGS@
163 CUDA_VERSION = @CUDA_VERSION@
162164 CXX = @CXX@
163165 CXXCPP = @CXXCPP@
164166 CXXDEPMODE = @CXXDEPMODE@
185187 HWLOC_CAIRO_LIBS = @HWLOC_CAIRO_LIBS@
186188 HWLOC_CFLAGS = @HWLOC_CFLAGS@
187189 HWLOC_CPPFLAGS = @HWLOC_CPPFLAGS@
190 HWLOC_CUDART_CFLAGS = @HWLOC_CUDART_CFLAGS@
191 HWLOC_CUDART_CPPFLAGS = @HWLOC_CUDART_CPPFLAGS@
192 HWLOC_CUDART_LDFLAGS = @HWLOC_CUDART_LDFLAGS@
193 HWLOC_CUDART_LIBS = @HWLOC_CUDART_LIBS@
194 HWLOC_CUDA_CFLAGS = @HWLOC_CUDA_CFLAGS@
195 HWLOC_CUDA_CPPFLAGS = @HWLOC_CUDA_CPPFLAGS@
196 HWLOC_CUDA_LDFLAGS = @HWLOC_CUDA_LDFLAGS@
188197 HWLOC_CUDA_LIBS = @HWLOC_CUDA_LIBS@
189198 HWLOC_DIFF_U = @HWLOC_DIFF_U@
190199 HWLOC_DIFF_W = @HWLOC_DIFF_W@
195204 HWLOC_EMBEDDED_LDFLAGS = @HWLOC_EMBEDDED_LDFLAGS@
196205 HWLOC_EMBEDDED_LIBS = @HWLOC_EMBEDDED_LIBS@
197206 HWLOC_GL_LIBS = @HWLOC_GL_LIBS@
207 HWLOC_HAVE_LEVELZERO = @HWLOC_HAVE_LEVELZERO@
198208 HWLOC_HAVE_LIBXML2 = @HWLOC_HAVE_LIBXML2@
199209 HWLOC_HAVE_NVML = @HWLOC_HAVE_NVML@
200210 HWLOC_HAVE_OPENCL = @HWLOC_HAVE_OPENCL@
201211 HWLOC_HAVE_RSMI = @HWLOC_HAVE_RSMI@
212 HWLOC_IBVERBS_LIBS = @HWLOC_IBVERBS_LIBS@
202213 HWLOC_LDFLAGS = @HWLOC_LDFLAGS@
214 HWLOC_LEVELZERO_CFLAGS = @HWLOC_LEVELZERO_CFLAGS@
215 HWLOC_LEVELZERO_LIBS = @HWLOC_LEVELZERO_LIBS@
203216 HWLOC_LIBS = @HWLOC_LIBS@
204217 HWLOC_LIBS_PRIVATE = @HWLOC_LIBS_PRIVATE@
205218 HWLOC_LIBXML2_CFLAGS = @HWLOC_LIBXML2_CFLAGS@
209222 HWLOC_MS_LIB_ARCH = @HWLOC_MS_LIB_ARCH@
210223 HWLOC_NUMA_CFLAGS = @HWLOC_NUMA_CFLAGS@
211224 HWLOC_NUMA_LIBS = @HWLOC_NUMA_LIBS@
225 HWLOC_NVML_CPPFLAGS = @HWLOC_NVML_CPPFLAGS@
226 HWLOC_NVML_LDFLAGS = @HWLOC_NVML_LDFLAGS@
212227 HWLOC_NVML_LIBS = @HWLOC_NVML_LIBS@
213 HWLOC_OPENCL_CFLAGS = @HWLOC_OPENCL_CFLAGS@
228 HWLOC_OPENCL_CPPFLAGS = @HWLOC_OPENCL_CPPFLAGS@
214229 HWLOC_OPENCL_LDFLAGS = @HWLOC_OPENCL_LDFLAGS@
215230 HWLOC_OPENCL_LIBS = @HWLOC_OPENCL_LIBS@
216231 HWLOC_PCIACCESS_CFLAGS = @HWLOC_PCIACCESS_CFLAGS@
336351 prefix = @prefix@
337352 program_transform_name = @program_transform_name@
338353 psdir = @psdir@
354 runstatedir = @runstatedir@
339355 sbindir = @sbindir@
340356 sharedstatedir = @sharedstatedir@
341357 srcdir = @srcdir@
351367 xz = @xz@
352368 TEST_CPPFLAGS = $(am__append_1) $(am__append_2) $(am__append_3) \
353369 $(am__append_4) $(am__append_5) $(am__append_6) \
354 $(am__append_7) $(am__append_8) $(am__append_9)
370 $(am__append_7) $(am__append_8) $(am__append_9) \
371 $(am__append_10)
355372 EXTRA_DIST = main.c
356373 all: all-am
357374
4343 #if HWLOC_TEST_RENAME_RSMI
4444 #include "hwloc/rsmi.h"
4545 #endif
46 #if HWLOC_TEST_RENAME_LEVELZERO
47 #include "hwloc/levelzero.h"
48 #endif
4649 #include "hwloc/gl.h"
50 #include "hwloc/windows.h"
4751
4852 #include "private/components.h"
4953 #include "private/internal-components.h"
00 /*
1 * Copyright © 2011-2018 Inria. All rights reserved.
1 * Copyright © 2011-2021 Inria. All rights reserved.
22 * See COPYING in top-level directory.
33 */
44
129129 unsigned long forced_addr;
130130 unsigned long fileoffset;
131131 size_t shmem_length;
132 int synthetic_with_distances = (hwloc_obj_get_info_by_name(hwloc_get_root_obj(orig), "SyntheticDescription") != NULL);
132 int synthetic_with_distances = (hwloc_obj_get_info_by_name(hwloc_get_root_obj(orig), "ShmemSyntheticWithDistances") != NULL);
133133 char tmpname[] = "/tmp/hwloc_test_shmem.XXXXXX";
134134 char cmd[512];
135135 struct stat st;
203203 static hwloc_topology_t orig;
204204 hwloc_obj_t nodes[3];
205205 uint64_t node_distances[9];
206 hwloc_distances_add_handle_t handle;
206207 unsigned i,j;
208 const char *top_srcdir;
207209 int err, ret, ret2;
208210
209211 if (argc > 1) {
257259 assert(!err);
258260 err = hwloc_topology_load(orig);
259261 assert(!err);
262 err = hwloc_obj_add_info(hwloc_get_root_obj(orig), "ShmemSyntheticWithDistances", "1");
263 assert(!err);
260264
261265 printf("adding distance matrix\n");
262266 for(i=0; i<3; i++) {
264268 for(j=0; j<3; j++)
265269 node_distances[i*3+j] = (i == j ? 10 : 20);
266270 }
267 err = hwloc_distances_add(orig, 3, nodes, node_distances,
268 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
269 HWLOC_DISTANCES_ADD_FLAG_GROUP);
271 handle = hwloc_distances_add_create(orig, NULL,
272 HWLOC_DISTANCES_KIND_MEANS_LATENCY|HWLOC_DISTANCES_KIND_FROM_USER,
273 0);
274 assert(handle);
275 err = hwloc_distances_add_values(orig, handle, 3, nodes, node_distances, 0);
276 assert(!err);
277 err = hwloc_distances_add_commit(orig, handle,
278 HWLOC_DISTANCES_ADD_FLAG_GROUP);
270279 assert(!err);
271280
272281 ret2 = test(orig, argv[0]);
273282
274283 printf("destroying original\n");
275284 hwloc_topology_destroy(orig);
285
286 top_srcdir = getenv("HWLOC_TOP_SRCDIR");
287 if (top_srcdir) {
288 const char *xmlnames[4] = {
289 "16intel64-manyVFs.xml",
290 "8intel64-4n2t-memattrs.xml",
291 "fakecpukinds.xml",
292 "fakeheterodistances.xml"
293 };
294 for(i=0; i<4; i++) {
295 char xmlpath[PATH_MAX];
296 snprintf(xmlpath, sizeof(xmlpath), "%s/tests/hwloc/xml/%s", top_srcdir, xmlnames[i]);
297
298 printf("#########################################\n");
299 printf("creating from XML %s\n", xmlpath);
300 err = hwloc_topology_init(&orig);
301 assert(!err);
302 err = hwloc_topology_set_xml(orig, xmlpath);
303 assert(!err);
304 err = hwloc_topology_set_all_types_filter(orig, HWLOC_TYPE_FILTER_KEEP_ALL);
305 assert(!err);
306 err = hwloc_topology_load(orig);
307 assert(!err);
308
309 ret = test(orig, argv[0]);
310
311 printf("destroying original\n");
312 hwloc_topology_destroy(orig);
313 }
314 } else {
315 printf("#########################################\n");
316 printf("Skipping XML tests because HWLOC_TOP_SRCDIR isn't defined in the environment\n");
317 }
276318
277319 /* we caught errors above.
278320 * return SKIP if both returned SKIP. otherwise SUCCESS
0 /*
1 * Copyright © 2021 Inria. All rights reserved.
2 * See COPYING in top-level directory.
3 */
4
5 #include "private/autogen/config.h"
6 #include "hwloc.h"
7 #include "hwloc/windows.h"
8
9 #include <assert.h>
10
11 int main(void)
12 {
13 hwloc_topology_t topology;
14 hwloc_bitmap_t set;
15 int nr, i, err;
16 char *s;
17
18 hwloc_topology_init(&topology);
19 hwloc_topology_load(topology);
20
21 set = hwloc_bitmap_alloc();
22 assert(set);
23
24 /* check invalid flag */
25 nr = hwloc_windows_get_nr_processor_groups(topology, 1);
26 assert(nr < 0);
27 assert(errno == EINVAL);
28
29 nr = hwloc_windows_get_nr_processor_groups(topology, 0);
30 assert(nr >= 1);
31 printf("found %d groups\n", nr);
32
33 /* check invalid flag */
34 err = hwloc_windows_get_processor_group_cpuset(topology, 0, set, 1);
35 assert(err < 0);
36 assert(errno == EINVAL);
37 /* check invalid index */
38 err = hwloc_windows_get_processor_group_cpuset(topology, nr, set, 0);
39 assert(err < 0);
40 assert(errno == ENOENT);
41
42 for(i=0; i<nr; i++) {
43 hwloc_bitmap_zero(set);
44 err = hwloc_windows_get_processor_group_cpuset(topology, i, set, 0);
45 assert(err == 0);
46 assert(!hwloc_bitmap_iszero(set));
47 err = hwloc_bitmap_asprintf(&s, set);
48 assert(err >= 0);
49 printf("processor group #%d has cpuset %s\n", i, s);
50 free(s);
51 }
52
53 hwloc_bitmap_free(set);
54 hwloc_topology_destroy(topology);
55 return 0;
56 }
11 #-*-sh-*-
22
33 #
4 # Copyright © 2012-2020 Inria. All rights reserved.
4 # Copyright © 2012-2021 Inria. All rights reserved.
55 # See COPYING in top-level directory.
66 #
77
88 HWLOC_top_builddir="@HWLOC_top_builddir@"
9 HWLOC_top_srcdir="@HWLOC_top_srcdir@"
910 xmlbuffer=xmlbuffer@EXEEXT@
11
12 HWLOC_TOP_SRCDIR=${HWLOC_top_srcdir}
13 export HWLOC_TOP_SRCDIR
1014
1115 HWLOC_PLUGINS_PATH=${HWLOC_top_builddir}/hwloc/.libs
1216 export HWLOC_PLUGINS_PATH
359359 CONFIGURE_DEPENDENCIES = @CONFIGURE_DEPENDENCIES@
360360 CPP = @CPP@
361361 CPPFLAGS = @CPPFLAGS@
362 CUDA_VERSION = @CUDA_VERSION@
362363 CXX = @CXX@
363364 CXXCPP = @CXXCPP@
364365 CXXDEPMODE = @CXXDEPMODE@
385386 HWLOC_CAIRO_LIBS = @HWLOC_CAIRO_LIBS@
386387 HWLOC_CFLAGS = @HWLOC_CFLAGS@
387388 HWLOC_CPPFLAGS = @HWLOC_CPPFLAGS@
389 HWLOC_CUDART_CFLAGS = @HWLOC_CUDART_CFLAGS@
390 HWLOC_CUDART_CPPFLAGS = @HWLOC_CUDART_CPPFLAGS@
391 HWLOC_CUDART_LDFLAGS = @HWLOC_CUDART_LDFLAGS@
392 HWLOC_CUDART_LIBS = @HWLOC_CUDART_LIBS@
393 HWLOC_CUDA_CFLAGS = @HWLOC_CUDA_CFLAGS@
394 HWLOC_CUDA_CPPFLAGS = @HWLOC_CUDA_CPPFLAGS@
395 HWLOC_CUDA_LDFLAGS = @HWLOC_CUDA_LDFLAGS@
388396 HWLOC_CUDA_LIBS = @HWLOC_CUDA_LIBS@
389397 HWLOC_DIFF_U = @HWLOC_DIFF_U@
390398 HWLOC_DIFF_W = @HWLOC_DIFF_W@
395403 HWLOC_EMBEDDED_LDFLAGS = @HWLOC_EMBEDDED_LDFLAGS@
396404 HWLOC_EMBEDDED_LIBS = @HWLOC_EMBEDDED_LIBS@
397405 HWLOC_GL_LIBS = @HWLOC_GL_LIBS@
406 HWLOC_HAVE_LEVELZERO = @HWLOC_HAVE_LEVELZERO@
398407 HWLOC_HAVE_LIBXML2 = @HWLOC_HAVE_LIBXML2@
399408 HWLOC_HAVE_NVML = @HWLOC_HAVE_NVML@
400409 HWLOC_HAVE_OPENCL = @HWLOC_HAVE_OPENCL@
401410 HWLOC_HAVE_RSMI = @HWLOC_HAVE_RSMI@
411 HWLOC_IBVERBS_LIBS = @HWLOC_IBVERBS_LIBS@
402412 HWLOC_LDFLAGS = @HWLOC_LDFLAGS@
413 HWLOC_LEVELZERO_CFLAGS = @HWLOC_LEVELZERO_CFLAGS@
414 HWLOC_LEVELZERO_LIBS = @HWLOC_LEVELZERO_LIBS@
403415 HWLOC_LIBS = @HWLOC_LIBS@
404416 HWLOC_LIBS_PRIVATE = @HWLOC_LIBS_PRIVATE@
405417 HWLOC_LIBXML2_CFLAGS = @HWLOC_LIBXML2_CFLAGS@
409421 HWLOC_MS_LIB_ARCH = @HWLOC_MS_LIB_ARCH@
410422 HWLOC_NUMA_CFLAGS = @HWLOC_NUMA_CFLAGS@
411423 HWLOC_NUMA_LIBS = @HWLOC_NUMA_LIBS@
424 HWLOC_NVML_CPPFLAGS = @HWLOC_NVML_CPPFLAGS@
425 HWLOC_NVML_LDFLAGS = @HWLOC_NVML_LDFLAGS@
412426 HWLOC_NVML_LIBS = @HWLOC_NVML_LIBS@
413 HWLOC_OPENCL_CFLAGS = @HWLOC_OPENCL_CFLAGS@
427 HWLOC_OPENCL_CPPFLAGS = @HWLOC_OPENCL_CPPFLAGS@
414428 HWLOC_OPENCL_LDFLAGS = @HWLOC_OPENCL_LDFLAGS@
415429 HWLOC_OPENCL_LIBS = @HWLOC_OPENCL_LIBS@
416430 HWLOC_PCIACCESS_CFLAGS = @HWLOC_PCIACCESS_CFLAGS@
536550 prefix = @prefix@
537551 program_transform_name = @program_transform_name@
538552 psdir = @psdir@
553 runstatedir = @runstatedir@
539554 sbindir = @sbindir@
540555 sharedstatedir = @sharedstatedir@
541556 srcdir = @srcdir@
0 HWLOC_COMPONENTS=linux,x86,stop
1 export HWLOC_COMPONENTS
0 Machine (P#0 total=3857124KB DMIProductName="LakeField Client Platform" DMIProductVersion=0.1 DMIProductSerial=fzlf933000en DMIBoardVendor="Intel Corporation" DMIBoardName="Lakefield LPDDR4x T4 RVP2" DMIBoardVersion=1 DMIBoardSerial=fzlf933000en DMIBoardAssetTag="Base Board Asset Tag" DMIChassisVendor="Intel Corporation" DMIChassisType=9 DMIChassisVersion=0.1 DMIChassisSerial="Chassis Serial Number" DMIChassisAssetTag="Chassis Asset Tag" DMIBIOSVendor="Intel Corporation" DMIBIOSVersion=LKFSFWR1.R00.4082.A00.2002190224 DMIBIOSDate=02/19/2020 DMISysVendor="Intel Corporation" Backend=Linux LinuxCgroup=/ OSName=Linux OSRelease=5.3.0-28-generic OSVersion="#30~18.04.1-Ubuntu SMP Fri Jan 17 06:14:09 UTC 2020" HostName=jf1lkf Architecture=x86_64)
1 Package L#0 (P#0 total=3857124KB CPUVendor=GenuineIntel CPUFamilyNumber=6 CPUModelNumber=138 CPUModel="Intel(R) Core(TM) i5-L16G7 CPU @ 1.40GHz" CPUStepping=1)
2 NUMANode L#0 (P#0 local=3857124KB total=3857124KB)
3 L3Cache L#0 (size=4096KB linesize=64 ways=16 Inclusive=1)
4 L2Cache L#0 (size=1536KB linesize=64 ways=12 Inclusive=0)
5 L1dCache L#0 (size=32KB linesize=64 ways=8 Inclusive=0)
6 L1iCache L#0 (size=32KB linesize=64 ways=8 Inclusive=0)
7 Core L#0 (P#0)
8 PU L#0 (P#0)
9 L1dCache L#1 (size=32KB linesize=64 ways=8 Inclusive=0)
10 L1iCache L#1 (size=32KB linesize=64 ways=8 Inclusive=0)
11 Core L#1 (P#1)
12 PU L#1 (P#1)
13 L1dCache L#2 (size=32KB linesize=64 ways=8 Inclusive=0)
14 L1iCache L#2 (size=32KB linesize=64 ways=8 Inclusive=0)
15 Core L#2 (P#2)
16 PU L#2 (P#2)
17 L1dCache L#3 (size=32KB linesize=64 ways=8 Inclusive=0)
18 L1iCache L#3 (size=32KB linesize=64 ways=8 Inclusive=0)
19 Core L#3 (P#3)
20 PU L#3 (P#3)
21 L2Cache L#1 (size=512KB linesize=64 ways=8 Inclusive=0)
22 L1dCache L#4 (size=48KB linesize=64 ways=12 Inclusive=0)
23 L1iCache L#4 (size=32KB linesize=64 ways=8 Inclusive=0)
24 Core L#4 (P#4)
25 PU L#4 (P#4)
26 depth 0: 1 Machine (type #0)
27 depth 1: 1 Package (type #1)
28 depth 2: 1 L3Cache (type #6)
29 depth 3: 2 L2Cache (type #5)
30 depth 4: 5 L1dCache (type #4)
31 depth 5: 5 L1iCache (type #9)
32 depth 6: 5 Core (type #2)
33 depth 7: 5 PU (type #3)
34 Special depth -3: 1 NUMANode (type #13)
35 CPU kind #0 efficiency 0 cpuset 0x0000000f
36 FrequencyMaxMHz = 2800
37 FrequencyBaseMHz = 1400
38 CoreType = IntelAtom
39 CPU kind #1 efficiency 1 cpuset 0x00000010
40 FrequencyMaxMHz = 3000
41 FrequencyBaseMHz = 2000
42 CoreType = IntelCore
43 Topology not from this system
693693 <u64values length="30">16 22 16 22 10 16 22 16 16 22 </u64values>
694694 <u64values length="12">22 16 16 10 </u64values>
695695 </distances2>
696 <cpukind cpuset="0xffffffff,0xffffffff">
697 <info name="FrequencyMaxMHz" value="2100"/>
698 </cpukind>
696699 </topology>
693693 <u64values length="30">16 22 16 22 10 16 22 16 16 22 </u64values>
694694 <u64values length="12">22 16 16 10 </u64values>
695695 </distances2>
696 <cpukind cpuset="0xffffffff,0xffffffff">
697 <info name="FrequencyMaxMHz" value="2100"/>
698 </cpukind>
696699 </topology>
0 # Copyright © 2019 Inria. All rights reserved.
0 # Copyright © 2019-2021 Inria. All rights reserved.
11 # See COPYING in top-level directory.
22
33 AM_CFLAGS = $(HWLOC_CFLAGS)
88 # By default, it shows the output of `lstopo - -v'.
99 cpuid_sysfs_outputs = \
1010 64amd64-4p2n4ca2co.output \
11 64amd64-4p2n4ca2co.topoextnuma.output
11 64amd64-4p2n4ca2co.topoextnuma.output \
12 5intel64-hybrid-lakefield.output
1213
1314 # Each output `xyz.output' must have a corresponding tarball `xyz.tar.bz2'
1415 # or a corresponding `xyz.source' specifying which tarball to use
1516 cpuid_sysfs_tarballs = \
1617 64amd64-4p2n4ca2co.tar.bz2 \
17 64amd64-4p2n4ca2co.topoextnuma.source
18 64amd64-4p2n4ca2co.topoextnuma.source \
19 5intel64-hybrid-lakefield.tar.bz2
20
21 # Each output `xyz.output' may have a corresponding `xyz.options'
22 # file modifying the behavior of lstopo
23 cpuid_sysfs_options = \
24 5intel64-hybrid-lakefield.options
1825
1926 # Each output `xyz.output' may have a corresponding `xyz.env'
2027 # modifying the environment of lstopo
2128 cpuid_sysfs_envs = \
22 64amd64-4p2n4ca2co.topoextnuma.env
29 64amd64-4p2n4ca2co.topoextnuma.env \
30 5intel64-hybrid-lakefield.env
2331
2432 if HWLOC_HAVE_OPENAT
2533 if HWLOC_HAVE_BUNZIPP
2735 endif HWLOC_HAVE_BUNZIPP
2836 endif HWLOC_HAVE_OPENAT
2937
30 EXTRA_DIST = $(cpuid_sysfs_outputs) $(cpuid_sysfs_tarballs) $(cpuid_sysfs_envs)
38 EXTRA_DIST = $(cpuid_sysfs_outputs) $(cpuid_sysfs_tarballs) $(cpuid_sysfs_options) $(cpuid_sysfs_envs)
3139
3240 LOG_COMPILER = $(builddir)/test-topology.sh
1313
1414 @SET_MAKE@
1515
16 # Copyright © 2019 Inria. All rights reserved.
16 # Copyright © 2019-2021 Inria. All rights reserved.
1717 # See COPYING in top-level directory.
1818 VPATH = @srcdir@
1919 am__is_gnu_make = { \
359359 CONFIGURE_DEPENDENCIES = @CONFIGURE_DEPENDENCIES@
360360 CPP = @CPP@
361361 CPPFLAGS = @CPPFLAGS@
362 CUDA_VERSION = @CUDA_VERSION@
362363 CXX = @CXX@
363364 CXXCPP = @CXXCPP@
364365 CXXDEPMODE = @CXXDEPMODE@
385386 HWLOC_CAIRO_LIBS = @HWLOC_CAIRO_LIBS@
386387 HWLOC_CFLAGS = @HWLOC_CFLAGS@
387388 HWLOC_CPPFLAGS = @HWLOC_CPPFLAGS@
389 HWLOC_CUDART_CFLAGS = @HWLOC_CUDART_CFLAGS@
390 HWLOC_CUDART_CPPFLAGS = @HWLOC_CUDART_CPPFLAGS@
391 HWLOC_CUDART_LDFLAGS = @HWLOC_CUDART_LDFLAGS@
392 HWLOC_CUDART_LIBS = @HWLOC_CUDART_LIBS@
393 HWLOC_CUDA_CFLAGS = @HWLOC_CUDA_CFLAGS@
394 HWLOC_CUDA_CPPFLAGS = @HWLOC_CUDA_CPPFLAGS@
395 HWLOC_CUDA_LDFLAGS = @HWLOC_CUDA_LDFLAGS@
388396 HWLOC_CUDA_LIBS = @HWLOC_CUDA_LIBS@
389397 HWLOC_DIFF_U = @HWLOC_DIFF_U@
390398 HWLOC_DIFF_W = @HWLOC_DIFF_W@
395403 HWLOC_EMBEDDED_LDFLAGS = @HWLOC_EMBEDDED_LDFLAGS@
396404 HWLOC_EMBEDDED_LIBS = @HWLOC_EMBEDDED_LIBS@
397405 HWLOC_GL_LIBS = @HWLOC_GL_LIBS@
406 HWLOC_HAVE_LEVELZERO = @HWLOC_HAVE_LEVELZERO@
398407 HWLOC_HAVE_LIBXML2 = @HWLOC_HAVE_LIBXML2@
399408 HWLOC_HAVE_NVML = @HWLOC_HAVE_NVML@
400409 HWLOC_HAVE_OPENCL = @HWLOC_HAVE_OPENCL@
401410 HWLOC_HAVE_RSMI = @HWLOC_HAVE_RSMI@
411 HWLOC_IBVERBS_LIBS = @HWLOC_IBVERBS_LIBS@
402412 HWLOC_LDFLAGS = @HWLOC_LDFLAGS@
413 HWLOC_LEVELZERO_CFLAGS = @HWLOC_LEVELZERO_CFLAGS@
414 HWLOC_LEVELZERO_LIBS = @HWLOC_LEVELZERO_LIBS@
403415 HWLOC_LIBS = @HWLOC_LIBS@
404416 HWLOC_LIBS_PRIVATE = @HWLOC_LIBS_PRIVATE@
405417 HWLOC_LIBXML2_CFLAGS = @HWLOC_LIBXML2_CFLAGS@
409421 HWLOC_MS_LIB_ARCH = @HWLOC_MS_LIB_ARCH@
410422 HWLOC_NUMA_CFLAGS = @HWLOC_NUMA_CFLAGS@
411423 HWLOC_NUMA_LIBS = @HWLOC_NUMA_LIBS@
424 HWLOC_NVML_CPPFLAGS = @HWLOC_NVML_CPPFLAGS@
425 HWLOC_NVML_LDFLAGS = @HWLOC_NVML_LDFLAGS@
412426 HWLOC_NVML_LIBS = @HWLOC_NVML_LIBS@
413 HWLOC_OPENCL_CFLAGS = @HWLOC_OPENCL_CFLAGS@
427 HWLOC_OPENCL_CPPFLAGS = @HWLOC_OPENCL_CPPFLAGS@
414428 HWLOC_OPENCL_LDFLAGS = @HWLOC_OPENCL_LDFLAGS@
415429 HWLOC_OPENCL_LIBS = @HWLOC_OPENCL_LIBS@
416430 HWLOC_PCIACCESS_CFLAGS = @HWLOC_PCIACCESS_CFLAGS@
536550 prefix = @prefix@
537551 program_transform_name = @program_transform_name@
538552 psdir = @psdir@
553 runstatedir = @runstatedir@
539554 sbindir = @sbindir@
540555 sharedstatedir = @sharedstatedir@
541556 srcdir = @srcdir@
557572 # By default, it shows the output of `lstopo - -v'.
558573 cpuid_sysfs_outputs = \
559574 64amd64-4p2n4ca2co.output \
560 64amd64-4p2n4ca2co.topoextnuma.output
575 64amd64-4p2n4ca2co.topoextnuma.output \
576 5intel64-hybrid-lakefield.output
561577
562578
563579 # Each output `xyz.output' must have a corresponding tarball `xyz.tar.bz2'
564580 # or a corresponding `xyz.source' specifying which tarball to use
565581 cpuid_sysfs_tarballs = \
566582 64amd64-4p2n4ca2co.tar.bz2 \
567 64amd64-4p2n4ca2co.topoextnuma.source
583 64amd64-4p2n4ca2co.topoextnuma.source \
584 5intel64-hybrid-lakefield.tar.bz2
585
586
587 # Each output `xyz.output' may have a corresponding `xyz.options'
588 # file modifying the behavior of lstopo
589 cpuid_sysfs_options = \
590 5intel64-hybrid-lakefield.options
568591
569592
570593 # Each output `xyz.output' may have a corresponding `xyz.env'
571594 # modifying the environment of lstopo
572595 cpuid_sysfs_envs = \
573 64amd64-4p2n4ca2co.topoextnuma.env
596 64amd64-4p2n4ca2co.topoextnuma.env \
597 5intel64-hybrid-lakefield.env
574598
575599 @HWLOC_HAVE_BUNZIPP_TRUE@@HWLOC_HAVE_OPENAT_TRUE@TESTS = $(cpuid_sysfs_outputs)
576 EXTRA_DIST = $(cpuid_sysfs_outputs) $(cpuid_sysfs_tarballs) $(cpuid_sysfs_envs)
600 EXTRA_DIST = $(cpuid_sysfs_outputs) $(cpuid_sysfs_tarballs) $(cpuid_sysfs_options) $(cpuid_sysfs_envs)
577601 LOG_COMPILER = $(builddir)/test-topology.sh
578602 all: all-am
579603
778802 --log-file $$b.log --trs-file $$b.trs \
779803 $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
780804 "$$tst" $(AM_TESTS_FD_REDIRECT)
805 5intel64-hybrid-lakefield.output.log: 5intel64-hybrid-lakefield.output
806 @p='5intel64-hybrid-lakefield.output'; \
807 b='5intel64-hybrid-lakefield.output'; \
808 $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
809 --log-file $$b.log --trs-file $$b.trs \
810 $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
811 "$$tst" $(AM_TESTS_FD_REDIRECT)
781812 .test.log:
782813 @p='$<'; \
783814 $(am__set_b); \
11 #-*-sh-*-
22
33 #
4 # Copyright © 2015-2020 Inria. All rights reserved.
4 # Copyright © 2015-2021 Inria. All rights reserved.
55 # See COPYING in top-level directory.
66 #
77
4444
4545 export HWLOC_THISSYSTEM=0
4646 export HWLOC_DEBUG_CHECK=1
47 export HWLOC_COMPONENTS=x86,linux,stop
4847 export HWLOC_FSROOT="$dir/fsroot"
4948 export HWLOC_CPUID_PATH="$dir/cpuid"
5049
112111 actual_source="$topology".tar.bz2
113112 fi
114113
114 # set HWLOC_COMPONENTS here so that tests may change the order in the .env below
115 export HWLOC_COMPONENTS=x86,linux,stop
116
115117 # if there's a .env file, source it
116118 if [ -f "$topology".env ] ; then
117119 . "$topology".env
106106 depth 7: 16 PU (type #3)
107107 Special depth -3: 8 NUMANode (type #13)
108108 Relative latency matrix (name NUMALatency kind 5) between 8 NUMANodes (depth -3) by logical indexes:
109 index 0 1 2 3 4 5 6 7
110 0 10 20 20 20 20 20 20 20
111 1 20 10 20 20 20 20 20 20
112 2 20 20 10 20 20 20 20 20
113 3 20 20 20 10 20 20 20 20
114 4 20 20 20 20 10 20 20 20
115 5 20 20 20 20 20 10 20 20
116 6 20 20 20 20 20 20 10 20
117 7 20 20 20 20 20 20 20 10
109 index 0 1 2 3 4 5 6 7
110 0 10 20 20 20 20 20 20 20
111 1 20 10 20 20 20 20 20 20
112 2 20 20 10 20 20 20 20 20
113 3 20 20 20 10 20 20 20 20
114 4 20 20 20 20 10 20 20 20
115 5 20 20 20 20 20 10 20 20
116 6 20 20 20 20 20 20 10 20
117 7 20 20 20 20 20 20 20 10
118118 Relative latency matrix (name (null) kind 5) between 8 Packages (depth 2) by logical indexes:
119 index 1 0 3 6 4 7 2 5
120 1 10 20 40 40 80 80 80 80
121 0 20 10 40 40 80 80 80 80
122 3 40 40 10 20 80 80 80 80
123 6 40 40 20 10 80 80 80 80
124 4 80 80 80 80 10 20 40 40
125 7 80 80 80 80 20 10 40 40
126 2 80 80 80 80 40 40 10 20
127 5 80 80 80 80 40 40 20 10
119 index 1 0 3 6 4 7 2 5
120 1 10 20 40 40 80 80 80 80
121 0 20 10 40 40 80 80 80 80
122 3 40 40 10 20 80 80 80 80
123 6 40 40 20 10 80 80 80 80
124 4 80 80 80 80 10 20 40 40
125 7 80 80 80 80 20 10 40 40
126 2 80 80 80 80 40 40 10 20
127 5 80 80 80 80 40 40 20 10
128128 Relative latency matrix (name (null) kind 5) between 4 PUs (depth 7) by logical indexes:
129 index 0 1 2 3
130 0 145 200 300 400
131 1 567 687 457 2300
132 2 450 12300 45 67
133 3 4600 345600 100 100
129 index 0 1 2 3
130 0 145 200 300 400
131 1 567 687 457 2300
132 2 450 12300 45 67
133 3 4600 345600 100 100
134134 Relative latency matrix (name (null) kind 5) between 8 Cores (depth 6) by logical indexes:
135 index 0 1 2 3 4 5 6 7
136 0 10 20 40 40 80 80 80 80
137 1 20 10 40 40 80 80 80 80
138 2 40 40 10 20 80 80 80 80
139 3 40 40 20 10 80 80 80 80
140 4 80 80 80 80 10 20 40 40
141 5 80 80 80 80 20 10 40 40
142 6 80 80 80 80 40 40 10 20
143 7 80 80 80 80 40 40 20 10
135 index 0 1 2 3 4 5 6 7
136 0 10 20 40 40 80 80 80 80
137 1 20 10 40 40 80 80 80 80
138 2 40 40 10 20 80 80 80 80
139 3 40 40 20 10 80 80 80 80
140 4 80 80 80 80 10 20 40 40
141 5 80 80 80 80 20 10 40 40
142 6 80 80 80 80 40 40 10 20
143 7 80 80 80 80 40 40 20 10
144144 Topology not from this system
384384 Special depth -5: 8 PCIDev (type #15)
385385 Special depth -6: 3 OSDev (type #16)
386386 Relative latency matrix (name NUMALatency kind 5) between 8 NUMANodes (depth -3) by logical indexes:
387 index 0 1 2 3 4 5 6 7
388 0 10 50 65 65 65 65 65 65
389 1 50 10 65 65 65 65 65 65
390 2 65 65 10 50 65 65 65 79
391 3 65 65 50 10 65 65 65 79
392 4 65 65 65 65 10 65 65 65
393 5 65 65 65 65 65 10 50 79
394 6 65 65 65 65 65 50 10 79
395 7 65 65 79 79 65 79 79 10
387 index 0 1 2 3 4 5 6 7
388 0 10 50 65 65 65 65 65 65
389 1 50 10 65 65 65 65 65 65
390 2 65 65 10 50 65 65 65 79
391 3 65 65 50 10 65 65 65 79
392 4 65 65 65 65 10 65 65 65
393 5 65 65 65 65 65 10 50 79
394 6 65 65 65 65 65 50 10 79
395 7 65 65 79 79 65 79 79 10
396396 48 processors represented but not allowed: 0xffffffff,0xffff0000
397397 Topology not from this system
0 # Copyright © 2009-2020 Inria. All rights reserved.
0 # Copyright © 2009-2021 Inria. All rights reserved.
11 # Copyright © 2009-2010 Université Bordeaux
22 # Copyright © 2009-2014 Cisco Systems, Inc. All rights reserved.
33 # See COPYING in top-level directory.
3131 96em64t-4n4d3ca2co-pci.xml \
3232 192em64t-12gr2n8c2t.xml \
3333 192em64t-24n8c2t.xml \
34 power8gpudistances.xml \
3435 fakeheterodistances.xml \
3536 fakecpukinds.xml \
3637 8em64t-2p2ca2co-nonodesets.v1tov2.xml \
1313
1414 @SET_MAKE@
1515
16 # Copyright © 2009-2020 Inria. All rights reserved.
16 # Copyright © 2009-2021 Inria. All rights reserved.
1717 # Copyright © 2009-2010 Université Bordeaux
1818 # Copyright © 2009-2014 Cisco Systems, Inc. All rights reserved.
1919 # See COPYING in top-level directory.
361361 CONFIGURE_DEPENDENCIES = @CONFIGURE_DEPENDENCIES@
362362 CPP = @CPP@
363363 CPPFLAGS = @CPPFLAGS@
364 CUDA_VERSION = @CUDA_VERSION@
364365 CXX = @CXX@
365366 CXXCPP = @CXXCPP@
366367 CXXDEPMODE = @CXXDEPMODE@
387388 HWLOC_CAIRO_LIBS = @HWLOC_CAIRO_LIBS@
388389 HWLOC_CFLAGS = @HWLOC_CFLAGS@
389390 HWLOC_CPPFLAGS = @HWLOC_CPPFLAGS@
391 HWLOC_CUDART_CFLAGS = @HWLOC_CUDART_CFLAGS@
392 HWLOC_CUDART_CPPFLAGS = @HWLOC_CUDART_CPPFLAGS@
393 HWLOC_CUDART_LDFLAGS = @HWLOC_CUDART_LDFLAGS@
394 HWLOC_CUDART_LIBS = @HWLOC_CUDART_LIBS@
395 HWLOC_CUDA_CFLAGS = @HWLOC_CUDA_CFLAGS@
396 HWLOC_CUDA_CPPFLAGS = @HWLOC_CUDA_CPPFLAGS@
397 HWLOC_CUDA_LDFLAGS = @HWLOC_CUDA_LDFLAGS@
390398 HWLOC_CUDA_LIBS = @HWLOC_CUDA_LIBS@
391399 HWLOC_DIFF_U = @HWLOC_DIFF_U@
392400 HWLOC_DIFF_W = @HWLOC_DIFF_W@
397405 HWLOC_EMBEDDED_LDFLAGS = @HWLOC_EMBEDDED_LDFLAGS@
398406 HWLOC_EMBEDDED_LIBS = @HWLOC_EMBEDDED_LIBS@
399407 HWLOC_GL_LIBS = @HWLOC_GL_LIBS@
408 HWLOC_HAVE_LEVELZERO = @HWLOC_HAVE_LEVELZERO@
400409 HWLOC_HAVE_LIBXML2 = @HWLOC_HAVE_LIBXML2@
401410 HWLOC_HAVE_NVML = @HWLOC_HAVE_NVML@
402411 HWLOC_HAVE_OPENCL = @HWLOC_HAVE_OPENCL@
403412 HWLOC_HAVE_RSMI = @HWLOC_HAVE_RSMI@
413 HWLOC_IBVERBS_LIBS = @HWLOC_IBVERBS_LIBS@
404414 HWLOC_LDFLAGS = @HWLOC_LDFLAGS@
415 HWLOC_LEVELZERO_CFLAGS = @HWLOC_LEVELZERO_CFLAGS@
416 HWLOC_LEVELZERO_LIBS = @HWLOC_LEVELZERO_LIBS@
405417 HWLOC_LIBS = @HWLOC_LIBS@
406418 HWLOC_LIBS_PRIVATE = @HWLOC_LIBS_PRIVATE@
407419 HWLOC_LIBXML2_CFLAGS = @HWLOC_LIBXML2_CFLAGS@
411423 HWLOC_MS_LIB_ARCH = @HWLOC_MS_LIB_ARCH@
412424 HWLOC_NUMA_CFLAGS = @HWLOC_NUMA_CFLAGS@
413425 HWLOC_NUMA_LIBS = @HWLOC_NUMA_LIBS@
426 HWLOC_NVML_CPPFLAGS = @HWLOC_NVML_CPPFLAGS@
427 HWLOC_NVML_LDFLAGS = @HWLOC_NVML_LDFLAGS@
414428 HWLOC_NVML_LIBS = @HWLOC_NVML_LIBS@
415 HWLOC_OPENCL_CFLAGS = @HWLOC_OPENCL_CFLAGS@
429 HWLOC_OPENCL_CPPFLAGS = @HWLOC_OPENCL_CPPFLAGS@
416430 HWLOC_OPENCL_LDFLAGS = @HWLOC_OPENCL_LDFLAGS@
417431 HWLOC_OPENCL_LIBS = @HWLOC_OPENCL_LIBS@
418432 HWLOC_PCIACCESS_CFLAGS = @HWLOC_PCIACCESS_CFLAGS@
538552 prefix = @prefix@
539553 program_transform_name = @program_transform_name@
540554 psdir = @psdir@
555 runstatedir = @runstatedir@
541556 sbindir = @sbindir@
542557 sharedstatedir = @sharedstatedir@
543558 srcdir = @srcdir@
580595 96em64t-4n4d3ca2co-pci.xml \
581596 192em64t-12gr2n8c2t.xml \
582597 192em64t-24n8c2t.xml \
598 power8gpudistances.xml \
583599 fakeheterodistances.xml \
584600 fakecpukinds.xml \
585601 8em64t-2p2ca2co-nonodesets.v1tov2.xml \
10061022 --log-file $$b.log --trs-file $$b.trs \
10071023 $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
10081024 "$$tst" $(AM_TESTS_FD_REDIRECT)
1025 power8gpudistances.xml.log: power8gpudistances.xml
1026 @p='power8gpudistances.xml'; \
1027 b='power8gpudistances.xml'; \
1028 $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
1029 --log-file $$b.log --trs-file $$b.trs \
1030 $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
1031 "$$tst" $(AM_TESTS_FD_REDIRECT)
10091032 fakeheterodistances.xml.log: fakeheterodistances.xml
10101033 @p='fakeheterodistances.xml'; \
10111034 b='fakeheterodistances.xml'; \
0 <?xml version="1.0" encoding="UTF-8"?>
1 <!DOCTYPE topology SYSTEM "hwloc2.dtd">
2 <topology version="2.0">
3 <object type="Machine" os_index="0" cpuset="0x00000303,0x03030000,,0x03030303" complete_cpuset="0x00000303,0x03030000,,0x03030303" allowed_cpuset="0x00000303,0x03030000,,0x03030303" nodeset="0x00000003" complete_nodeset="0x00000003" allowed_nodeset="0x00000003" gp_index="1">
4 <info name="PlatformName" value="PowerNV"/>
5 <info name="PlatformModel" value="PowerNV 8335-GTB"/>
6 <info name="Backend" value="Linux"/>
7 <info name="LinuxCgroup" value="/oar/bgoglin_1984938"/>
8 <info name="OSName" value="Linux"/>
9 <info name="OSRelease" value="4.19.0-14-powerpc64le"/>
10 <info name="OSVersion" value="#1 SMP Debian 4.19.171-2 (2021-01-30)"/>
11 <info name="HostName" value="drac-12.grenoble.grid5000.fr"/>
12 <info name="Architecture" value="ppc64le"/>
13 <info name="hwlocVersion" value="2.5.0a1-git"/>
14 <info name="ProcessName" value="lstopo-no-graphics"/>
15 <object type="Package" os_index="0" cpuset="0x03030303" complete_cpuset="0x03030303" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="3">
16 <info name="CPUModel" value="POWER8NVL, altivec supported"/>
17 <info name="CPURevision" value="1.0 (pvr 004c 0100)"/>
18 <object type="NUMANode" os_index="0" cpuset="0x03030303" complete_cpuset="0x03030303" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="264" local_memory="68556816384"/>
19 <object type="L3Cache" cpuset="0x00000003" complete_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="8" cache_size="8388608" depth="3" cache_linesize="0" cache_associativity="0" cache_type="0">
20 <object type="Core" os_index="8" cpuset="0x00000003" complete_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="2">
21 <object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="4"/>
22 <object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="9"/>
23 </object>
24 </object>
25 <object type="L3Cache" cpuset="0x00000300" complete_cpuset="0x00000300" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="21" cache_size="8388608" depth="3" cache_linesize="0" cache_associativity="0" cache_type="0">
26 <object type="Core" os_index="16" cpuset="0x00000300" complete_cpuset="0x00000300" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="16">
27 <object type="PU" os_index="8" cpuset="0x00000100" complete_cpuset="0x00000100" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="17"/>
28 <object type="PU" os_index="9" cpuset="0x00000200" complete_cpuset="0x00000200" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="22"/>
29 </object>
30 </object>
31 <object type="L3Cache" cpuset="0x00030000" complete_cpuset="0x00030000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="34" cache_size="8388608" depth="3" cache_linesize="0" cache_associativity="0" cache_type="0">
32 <object type="Core" os_index="32" cpuset="0x00030000" complete_cpuset="0x00030000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="29">
33 <object type="PU" os_index="16" cpuset="0x00010000" complete_cpuset="0x00010000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="30"/>
34 <object type="PU" os_index="17" cpuset="0x00020000" complete_cpuset="0x00020000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="35"/>
35 </object>
36 </object>
37 <object type="L3Cache" cpuset="0x03000000" complete_cpuset="0x03000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="47" cache_size="8388608" depth="3" cache_linesize="0" cache_associativity="0" cache_type="0">
38 <object type="Core" os_index="40" cpuset="0x03000000" complete_cpuset="0x03000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="42">
39 <object type="PU" os_index="24" cpuset="0x01000000" complete_cpuset="0x01000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="43"/>
40 <object type="PU" os_index="25" cpuset="0x02000000" complete_cpuset="0x02000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="48"/>
41 </object>
42 </object>
43 <object type="Bridge" gp_index="304" bridge_type="0-1" depth="0" bridge_pci="0002:[00-01]">
44 <object type="Bridge" gp_index="287" bridge_type="1-1" depth="1" bridge_pci="0002:[01-01]" pci_busid="0002:00:00.0" pci_type="0604 [1014:03dc] [0000:0000] 00" pci_link_speed="7.876923">
45 <object type="PCIDev" gp_index="282" pci_busid="0002:01:00.0" pci_type="0302 [10de:15f9] [10de:116b] a1" pci_link_speed="15.753846">
46 <object type="OSDev" gp_index="328" name="cuda0" subtype="CUDA" osdev_type="5">
47 <info name="Backend" value="CUDA"/>
48 <info name="GPUVendor" value="NVIDIA Corporation"/>
49 <info name="GPUModel" value="Tesla P100-SXM2-16GB"/>
50 <info name="CUDAGlobalMemorySize" value="16671616"/>
51 <info name="CUDAL2CacheSize" value="4096"/>
52 <info name="CUDAMultiProcessors" value="56"/>
53 <info name="CUDACoresPerMP" value="64"/>
54 <info name="CUDASharedMemorySizePerMP" value="48"/>
55 </object>
56 <object type="OSDev" gp_index="324" name="opencl0d0" subtype="OpenCL" osdev_type="5">
57 <info name="Backend" value="OpenCL"/>
58 <info name="OpenCLDeviceType" value="GPU"/>
59 <info name="GPUVendor" value="NVIDIA Corporation"/>
60 <info name="GPUModel" value="Tesla P100-SXM2-16GB"/>
61 <info name="OpenCLPlatformIndex" value="0"/>
62 <info name="OpenCLPlatformName" value="NVIDIA CUDA"/>
63 <info name="OpenCLPlatformDeviceIndex" value="0"/>
64 <info name="OpenCLComputeUnits" value="56"/>
65 <info name="OpenCLGlobalMemorySize" value="16671616"/>
66 </object>
67 <object type="OSDev" gp_index="332" name="nvml0" subtype="NVML" osdev_type="1">
68 <info name="Backend" value="NVML"/>
69 <info name="GPUVendor" value="NVIDIA Corporation"/>
70 <info name="GPUModel" value="Tesla P100-SXM2-16GB"/>
71 <info name="NVIDIASerial" value="0322716104625"/>
72 <info name="NVIDIAUUID" value="GPU-77bf6b9a-6906-5a93-d28b-b77d2c23d1d2"/>
73 </object>
74 </object>
75 </object>
76 </object>
77 <object type="Bridge" gp_index="305" bridge_type="0-1" depth="0" bridge_pci="0003:[00-01]">
78 <object type="Bridge" gp_index="271" bridge_type="1-1" depth="1" bridge_pci="0003:[01-01]" pci_busid="0003:00:00.0" pci_type="0604 [1014:03dc] [0000:0000] 00" pci_link_speed="7.876923">
79 <object type="PCIDev" gp_index="268" pci_busid="0003:01:00.0" pci_type="0302 [10de:15f9] [10de:116b] a1" pci_link_speed="15.753846">
80 <object type="OSDev" gp_index="329" name="cuda1" subtype="CUDA" osdev_type="5">
81 <info name="Backend" value="CUDA"/>
82 <info name="GPUVendor" value="NVIDIA Corporation"/>
83 <info name="GPUModel" value="Tesla P100-SXM2-16GB"/>
84 <info name="CUDAGlobalMemorySize" value="16671616"/>
85 <info name="CUDAL2CacheSize" value="4096"/>
86 <info name="CUDAMultiProcessors" value="56"/>
87 <info name="CUDACoresPerMP" value="64"/>
88 <info name="CUDASharedMemorySizePerMP" value="48"/>
89 </object>
90 <object type="OSDev" gp_index="325" name="opencl0d1" subtype="OpenCL" osdev_type="5">
91 <info name="Backend" value="OpenCL"/>
92 <info name="OpenCLDeviceType" value="GPU"/>
93 <info name="GPUVendor" value="NVIDIA Corporation"/>
94 <info name="GPUModel" value="Tesla P100-SXM2-16GB"/>
95 <info name="OpenCLPlatformIndex" value="0"/>
96 <info name="OpenCLPlatformName" value="NVIDIA CUDA"/>
97 <info name="OpenCLPlatformDeviceIndex" value="1"/>
98 <info name="OpenCLComputeUnits" value="56"/>
99 <info name="OpenCLGlobalMemorySize" value="16671616"/>
100 </object>
101 <object type="OSDev" gp_index="333" name="nvml1" subtype="NVML" osdev_type="1">
102 <info name="Backend" value="NVML"/>
103 <info name="GPUVendor" value="NVIDIA Corporation"/>
104 <info name="GPUModel" value="Tesla P100-SXM2-16GB"/>
105 <info name="NVIDIASerial" value="0322716103693"/>
106 <info name="NVIDIAUUID" value="GPU-00fc8f7f-8206-b5f8-1d34-e600a300e314"/>
107 </object>
108 </object>
109 </object>
110 </object>
111 </object>
112 <object type="Package" os_index="1" cpuset="0x00000303,0x03030000,,0x0" complete_cpuset="0x00000303,0x03030000,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="134">
113 <info name="CPUModel" value="POWER8NVL, altivec supported"/>
114 <info name="CPURevision" value="1.0 (pvr 004c 0100)"/>
115 <object type="NUMANode" os_index="1" cpuset="0x00000303,0x03030000,,0x0" complete_cpuset="0x00000303,0x03030000,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="265" local_memory="68450713600"/>
116 <object type="L3Cache" cpuset="0x00030000,,0x0" complete_cpuset="0x00030000,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="139" cache_size="8388608" depth="3" cache_linesize="0" cache_associativity="0" cache_type="0">
117 <object type="Core" os_index="136" cpuset="0x00030000,,0x0" complete_cpuset="0x00030000,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="133">
118 <object type="PU" os_index="80" cpuset="0x00010000,,0x0" complete_cpuset="0x00010000,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="135"/>
119 <object type="PU" os_index="81" cpuset="0x00020000,,0x0" complete_cpuset="0x00020000,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="140"/>
120 </object>
121 </object>
122 <object type="L3Cache" cpuset="0x03000000,,0x0" complete_cpuset="0x03000000,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="152" cache_size="8388608" depth="3" cache_linesize="0" cache_associativity="0" cache_type="0">
123 <object type="Core" os_index="144" cpuset="0x03000000,,0x0" complete_cpuset="0x03000000,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="147">
124 <object type="PU" os_index="88" cpuset="0x01000000,,0x0" complete_cpuset="0x01000000,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="148"/>
125 <object type="PU" os_index="89" cpuset="0x02000000,,0x0" complete_cpuset="0x02000000,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="153"/>
126 </object>
127 </object>
128 <object type="L3Cache" cpuset="0x00000003,,,0x0" complete_cpuset="0x00000003,,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="165" cache_size="8388608" depth="3" cache_linesize="0" cache_associativity="0" cache_type="0">
129 <object type="Core" os_index="152" cpuset="0x00000003,,,0x0" complete_cpuset="0x00000003,,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="160">
130 <object type="PU" os_index="96" cpuset="0x00000001,,,0x0" complete_cpuset="0x00000001,,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="161"/>
131 <object type="PU" os_index="97" cpuset="0x00000002,,,0x0" complete_cpuset="0x00000002,,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="166"/>
132 </object>
133 </object>
134 <object type="L3Cache" cpuset="0x00000300,,,0x0" complete_cpuset="0x00000300,,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="178" cache_size="8388608" depth="3" cache_linesize="0" cache_associativity="0" cache_type="0">
135 <object type="Core" os_index="168" cpuset="0x00000300,,,0x0" complete_cpuset="0x00000300,,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="173">
136 <object type="PU" os_index="104" cpuset="0x00000100,,,0x0" complete_cpuset="0x00000100,,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="174"/>
137 <object type="PU" os_index="105" cpuset="0x00000200,,,0x0" complete_cpuset="0x00000200,,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="179"/>
138 </object>
139 </object>
140 <object type="Bridge" gp_index="310" bridge_type="0-1" depth="0" bridge_pci="000a:[00-01]">
141 <object type="Bridge" gp_index="294" bridge_type="1-1" depth="1" bridge_pci="000a:[01-01]" pci_busid="000a:00:00.0" pci_type="0604 [1014:03dc] [0000:0000] 00" pci_link_speed="7.876923">
142 <object type="PCIDev" gp_index="289" pci_busid="000a:01:00.0" pci_type="0302 [10de:15f9] [10de:116b] a1" pci_link_speed="15.753846">
143 <object type="OSDev" gp_index="330" name="cuda2" subtype="CUDA" osdev_type="5">
144 <info name="Backend" value="CUDA"/>
145 <info name="GPUVendor" value="NVIDIA Corporation"/>
146 <info name="GPUModel" value="Tesla P100-SXM2-16GB"/>
147 <info name="CUDAGlobalMemorySize" value="16671616"/>
148 <info name="CUDAL2CacheSize" value="4096"/>
149 <info name="CUDAMultiProcessors" value="56"/>
150 <info name="CUDACoresPerMP" value="64"/>
151 <info name="CUDASharedMemorySizePerMP" value="48"/>
152 </object>
153 <object type="OSDev" gp_index="326" name="opencl0d2" subtype="OpenCL" osdev_type="5">
154 <info name="Backend" value="OpenCL"/>
155 <info name="OpenCLDeviceType" value="GPU"/>
156 <info name="GPUVendor" value="NVIDIA Corporation"/>
157 <info name="GPUModel" value="Tesla P100-SXM2-16GB"/>
158 <info name="OpenCLPlatformIndex" value="0"/>
159 <info name="OpenCLPlatformName" value="NVIDIA CUDA"/>
160 <info name="OpenCLPlatformDeviceIndex" value="2"/>
161 <info name="OpenCLComputeUnits" value="56"/>
162 <info name="OpenCLGlobalMemorySize" value="16671616"/>
163 </object>
164 <object type="OSDev" gp_index="334" name="nvml2" subtype="NVML" osdev_type="1">
165 <info name="Backend" value="NVML"/>
166 <info name="GPUVendor" value="NVIDIA Corporation"/>
167 <info name="GPUModel" value="Tesla P100-SXM2-16GB"/>
168 <info name="NVIDIASerial" value="0322716104229"/>
169 <info name="NVIDIAUUID" value="GPU-ea919830-8251-6a30-e379-daeb01448779"/>
170 </object>
171 </object>
172 </object>
173 </object>
174 <object type="Bridge" gp_index="311" bridge_type="0-1" depth="0" bridge_pci="000b:[00-01]">
175 <object type="Bridge" gp_index="279" bridge_type="1-1" depth="1" bridge_pci="000b:[01-01]" pci_busid="000b:00:00.0" pci_type="0604 [1014:03dc] [0000:0000] 00" pci_link_speed="7.876923">
176 <object type="PCIDev" gp_index="273" pci_busid="000b:01:00.0" pci_type="0302 [10de:15f9] [10de:116b] a1" pci_link_speed="15.753846">
177 <object type="OSDev" gp_index="331" name="cuda3" subtype="CUDA" osdev_type="5">
178 <info name="Backend" value="CUDA"/>
179 <info name="GPUVendor" value="NVIDIA Corporation"/>
180 <info name="GPUModel" value="Tesla P100-SXM2-16GB"/>
181 <info name="CUDAGlobalMemorySize" value="16671616"/>
182 <info name="CUDAL2CacheSize" value="4096"/>
183 <info name="CUDAMultiProcessors" value="56"/>
184 <info name="CUDACoresPerMP" value="64"/>
185 <info name="CUDASharedMemorySizePerMP" value="48"/>
186 </object>
187 <object type="OSDev" gp_index="327" name="opencl0d3" subtype="OpenCL" osdev_type="5">
188 <info name="Backend" value="OpenCL"/>
189 <info name="OpenCLDeviceType" value="GPU"/>
190 <info name="GPUVendor" value="NVIDIA Corporation"/>
191 <info name="GPUModel" value="Tesla P100-SXM2-16GB"/>
192 <info name="OpenCLPlatformIndex" value="0"/>
193 <info name="OpenCLPlatformName" value="NVIDIA CUDA"/>
194 <info name="OpenCLPlatformDeviceIndex" value="3"/>
195 <info name="OpenCLComputeUnits" value="56"/>
196 <info name="OpenCLGlobalMemorySize" value="16671616"/>
197 </object>
198 <object type="OSDev" gp_index="335" name="nvml3" subtype="NVML" osdev_type="1">
199 <info name="Backend" value="NVML"/>
200 <info name="GPUVendor" value="NVIDIA Corporation"/>
201 <info name="GPUModel" value="Tesla P100-SXM2-16GB"/>
202 <info name="NVIDIASerial" value="0322816173796"/>
203 <info name="NVIDIAUUID" value="GPU-93f5db36-624e-1453-40ab-85cc675aa903"/>
204 </object>
205 </object>
206 </object>
207 </object>
208 </object>
209 </object>
210 <distances2 type="NUMANode" nbobjs="2" kind="5" name="NUMALatency" indexing="os">
211 <indexes length="4">0 1 </indexes>
212 <u64values length="12">10 40 40 10 </u64values>
213 </distances2>
214 <distances2hetero nbobjs="6" kind="25" name="NVLinkBandwidth">
215 <indexes length="62">OSDev:332 OSDev:333 OSDev:334 OSDev:335 Package:3 Package:134 </indexes>
216 <u64values length="44">1000000 40000 0 0 40000 0 40000 1000000 0 0 </u64values>
217 <u64values length="38">40000 0 0 0 1000000 40000 0 40000 0 0 </u64values>
218 <u64values length="48">40000 1000000 0 40000 40000 40000 0 0 1000000 0 </u64values>
219 <u64values length="26">0 0 40000 40000 0 1000000 </u64values>
220 </distances2hetero>
221 <support name="discovery.pu"/>
222 <support name="discovery.numa"/>
223 <support name="discovery.numa_memory"/>
224 <support name="discovery.disallowed_pu"/>
225 <support name="discovery.disallowed_numa"/>
226 <support name="cpubind.set_thisproc_cpubind"/>
227 <support name="cpubind.get_thisproc_cpubind"/>
228 <support name="cpubind.set_proc_cpubind"/>
229 <support name="cpubind.get_proc_cpubind"/>
230 <support name="cpubind.set_thisthread_cpubind"/>
231 <support name="cpubind.get_thisthread_cpubind"/>
232 <support name="cpubind.set_thread_cpubind"/>
233 <support name="cpubind.get_thread_cpubind"/>
234 <support name="cpubind.get_thisproc_last_cpu_location"/>
235 <support name="cpubind.get_proc_last_cpu_location"/>
236 <support name="cpubind.get_thisthread_last_cpu_location"/>
237 <support name="membind.set_thisthread_membind"/>
238 <support name="membind.get_thisthread_membind"/>
239 <support name="membind.set_area_membind"/>
240 <support name="membind.get_area_membind"/>
241 <support name="membind.alloc_membind"/>
242 <support name="membind.firsttouch_membind"/>
243 <support name="membind.bind_membind"/>
244 <support name="membind.interleave_membind"/>
245 <support name="membind.migrate_membind"/>
246 <support name="membind.get_area_memlocation"/>
247 <support name="custom.exported_support"/>
248 <cpukind cpuset="0x00000303,0x03030000,,0x03030303">
249 <info name="FrequencyMaxMHz" value="4023"/>
250 </cpukind>
251 </topology>
362362 CONFIGURE_DEPENDENCIES = @CONFIGURE_DEPENDENCIES@
363363 CPP = @CPP@
364364 CPPFLAGS = @CPPFLAGS@
365 CUDA_VERSION = @CUDA_VERSION@
365366 CXX = @CXX@
366367 CXXCPP = @CXXCPP@
367368 CXXDEPMODE = @CXXDEPMODE@
388389 HWLOC_CAIRO_LIBS = @HWLOC_CAIRO_LIBS@
389390 HWLOC_CFLAGS = @HWLOC_CFLAGS@
390391 HWLOC_CPPFLAGS = @HWLOC_CPPFLAGS@
392 HWLOC_CUDART_CFLAGS = @HWLOC_CUDART_CFLAGS@
393 HWLOC_CUDART_CPPFLAGS = @HWLOC_CUDART_CPPFLAGS@
394 HWLOC_CUDART_LDFLAGS = @HWLOC_CUDART_LDFLAGS@
395 HWLOC_CUDART_LIBS = @HWLOC_CUDART_LIBS@
396 HWLOC_CUDA_CFLAGS = @HWLOC_CUDA_CFLAGS@
397 HWLOC_CUDA_CPPFLAGS = @HWLOC_CUDA_CPPFLAGS@
398 HWLOC_CUDA_LDFLAGS = @HWLOC_CUDA_LDFLAGS@
391399 HWLOC_CUDA_LIBS = @HWLOC_CUDA_LIBS@
392400 HWLOC_DIFF_U = @HWLOC_DIFF_U@
393401 HWLOC_DIFF_W = @HWLOC_DIFF_W@
398406 HWLOC_EMBEDDED_LDFLAGS = @HWLOC_EMBEDDED_LDFLAGS@
399407 HWLOC_EMBEDDED_LIBS = @HWLOC_EMBEDDED_LIBS@
400408 HWLOC_GL_LIBS = @HWLOC_GL_LIBS@
409 HWLOC_HAVE_LEVELZERO = @HWLOC_HAVE_LEVELZERO@
401410 HWLOC_HAVE_LIBXML2 = @HWLOC_HAVE_LIBXML2@
402411 HWLOC_HAVE_NVML = @HWLOC_HAVE_NVML@
403412 HWLOC_HAVE_OPENCL = @HWLOC_HAVE_OPENCL@
404413 HWLOC_HAVE_RSMI = @HWLOC_HAVE_RSMI@
414 HWLOC_IBVERBS_LIBS = @HWLOC_IBVERBS_LIBS@
405415 HWLOC_LDFLAGS = @HWLOC_LDFLAGS@
416 HWLOC_LEVELZERO_CFLAGS = @HWLOC_LEVELZERO_CFLAGS@
417 HWLOC_LEVELZERO_LIBS = @HWLOC_LEVELZERO_LIBS@
406418 HWLOC_LIBS = @HWLOC_LIBS@
407419 HWLOC_LIBS_PRIVATE = @HWLOC_LIBS_PRIVATE@
408420 HWLOC_LIBXML2_CFLAGS = @HWLOC_LIBXML2_CFLAGS@
412424 HWLOC_MS_LIB_ARCH = @HWLOC_MS_LIB_ARCH@
413425 HWLOC_NUMA_CFLAGS = @HWLOC_NUMA_CFLAGS@
414426 HWLOC_NUMA_LIBS = @HWLOC_NUMA_LIBS@
427 HWLOC_NVML_CPPFLAGS = @HWLOC_NVML_CPPFLAGS@
428 HWLOC_NVML_LDFLAGS = @HWLOC_NVML_LDFLAGS@
415429 HWLOC_NVML_LIBS = @HWLOC_NVML_LIBS@
416 HWLOC_OPENCL_CFLAGS = @HWLOC_OPENCL_CFLAGS@
430 HWLOC_OPENCL_CPPFLAGS = @HWLOC_OPENCL_CPPFLAGS@
417431 HWLOC_OPENCL_LDFLAGS = @HWLOC_OPENCL_LDFLAGS@
418432 HWLOC_OPENCL_LIBS = @HWLOC_OPENCL_LIBS@
419433 HWLOC_PCIACCESS_CFLAGS = @HWLOC_PCIACCESS_CFLAGS@
539553 prefix = @prefix@
540554 program_transform_name = @program_transform_name@
541555 psdir = @psdir@
556 runstatedir = @runstatedir@
542557 sbindir = @sbindir@
543558 sharedstatedir = @sharedstatedir@
544559 srcdir = @srcdir@
222222 CONFIGURE_DEPENDENCIES = @CONFIGURE_DEPENDENCIES@
223223 CPP = @CPP@
224224 CPPFLAGS = @CPPFLAGS@
225 CUDA_VERSION = @CUDA_VERSION@
225226 CXX = @CXX@
226227 CXXCPP = @CXXCPP@
227228 CXXDEPMODE = @CXXDEPMODE@
248249 HWLOC_CAIRO_LIBS = @HWLOC_CAIRO_LIBS@
249250 HWLOC_CFLAGS = @HWLOC_CFLAGS@
250251 HWLOC_CPPFLAGS = @HWLOC_CPPFLAGS@
252 HWLOC_CUDART_CFLAGS = @HWLOC_CUDART_CFLAGS@
253 HWLOC_CUDART_CPPFLAGS = @HWLOC_CUDART_CPPFLAGS@
254 HWLOC_CUDART_LDFLAGS = @HWLOC_CUDART_LDFLAGS@
255 HWLOC_CUDART_LIBS = @HWLOC_CUDART_LIBS@
256 HWLOC_CUDA_CFLAGS = @HWLOC_CUDA_CFLAGS@
257 HWLOC_CUDA_CPPFLAGS = @HWLOC_CUDA_CPPFLAGS@
258 HWLOC_CUDA_LDFLAGS = @HWLOC_CUDA_LDFLAGS@
251259 HWLOC_CUDA_LIBS = @HWLOC_CUDA_LIBS@
252260 HWLOC_DIFF_U = @HWLOC_DIFF_U@
253261 HWLOC_DIFF_W = @HWLOC_DIFF_W@
258266 HWLOC_EMBEDDED_LDFLAGS = @HWLOC_EMBEDDED_LDFLAGS@
259267 HWLOC_EMBEDDED_LIBS = @HWLOC_EMBEDDED_LIBS@
260268 HWLOC_GL_LIBS = @HWLOC_GL_LIBS@
269 HWLOC_HAVE_LEVELZERO = @HWLOC_HAVE_LEVELZERO@
261270 HWLOC_HAVE_LIBXML2 = @HWLOC_HAVE_LIBXML2@
262271 HWLOC_HAVE_NVML = @HWLOC_HAVE_NVML@
263272 HWLOC_HAVE_OPENCL = @HWLOC_HAVE_OPENCL@
264273 HWLOC_HAVE_RSMI = @HWLOC_HAVE_RSMI@
274 HWLOC_IBVERBS_LIBS = @HWLOC_IBVERBS_LIBS@
265275 HWLOC_LDFLAGS = @HWLOC_LDFLAGS@
276 HWLOC_LEVELZERO_CFLAGS = @HWLOC_LEVELZERO_CFLAGS@
277 HWLOC_LEVELZERO_LIBS = @HWLOC_LEVELZERO_LIBS@
266278 HWLOC_LIBS = @HWLOC_LIBS@
267279 HWLOC_LIBS_PRIVATE = @HWLOC_LIBS_PRIVATE@
268280 HWLOC_LIBXML2_CFLAGS = @HWLOC_LIBXML2_CFLAGS@
272284 HWLOC_MS_LIB_ARCH = @HWLOC_MS_LIB_ARCH@
273285 HWLOC_NUMA_CFLAGS = @HWLOC_NUMA_CFLAGS@
274286 HWLOC_NUMA_LIBS = @HWLOC_NUMA_LIBS@
287 HWLOC_NVML_CPPFLAGS = @HWLOC_NVML_CPPFLAGS@
288 HWLOC_NVML_LDFLAGS = @HWLOC_NVML_LDFLAGS@
275289 HWLOC_NVML_LIBS = @HWLOC_NVML_LIBS@
276 HWLOC_OPENCL_CFLAGS = @HWLOC_OPENCL_CFLAGS@
290 HWLOC_OPENCL_CPPFLAGS = @HWLOC_OPENCL_CPPFLAGS@
277291 HWLOC_OPENCL_LDFLAGS = @HWLOC_OPENCL_LDFLAGS@
278292 HWLOC_OPENCL_LIBS = @HWLOC_OPENCL_LIBS@
279293 HWLOC_PCIACCESS_CFLAGS = @HWLOC_PCIACCESS_CFLAGS@
399413 prefix = @prefix@
400414 program_transform_name = @program_transform_name@
401415 psdir = @psdir@
416 runstatedir = @runstatedir@
402417 sbindir = @sbindir@
403418 sharedstatedir = @sharedstatedir@
404419 srcdir = @srcdir@
0 # Copyright © 2009-2020 Inria. All rights reserved.
0 # Copyright © 2009-2021 Inria. All rights reserved.
11 # Copyright © 2009-2012, 2014, 2016 Université Bordeaux
22 # Copyright © 2009-2014 Cisco Systems, Inc. All rights reserved.
33 #
1212 LDADD = $(HWLOC_top_builddir)/hwloc/libhwloc.la
1313
1414 EXTRA_DIST = \
15 test-hwloc-annotate.input test-hwloc-annotate.output \
15 test-hwloc-annotate.input test-hwloc-annotate.output test-hwloc-annotate.output2 \
1616 test-hwloc-calc.output \
1717 test-hwloc-compress-dir.input.tar.gz test-hwloc-compress-dir.output.tar.gz \
1818 test-hwloc-diffpatch.input1 test-hwloc-diffpatch.input2 \
1313
1414 @SET_MAKE@
1515
16 # Copyright © 2009-2020 Inria. All rights reserved.
16 # Copyright © 2009-2021 Inria. All rights reserved.
1717 # Copyright © 2009-2012, 2014, 2016 Université Bordeaux
1818 # Copyright © 2009-2014 Cisco Systems, Inc. All rights reserved.
1919 #
561561 CONFIGURE_DEPENDENCIES = @CONFIGURE_DEPENDENCIES@
562562 CPP = @CPP@
563563 CPPFLAGS = @CPPFLAGS@
564 CUDA_VERSION = @CUDA_VERSION@
564565 CXX = @CXX@
565566 CXXCPP = @CXXCPP@
566567 CXXDEPMODE = @CXXDEPMODE@
587588 HWLOC_CAIRO_LIBS = @HWLOC_CAIRO_LIBS@
588589 HWLOC_CFLAGS = @HWLOC_CFLAGS@
589590 HWLOC_CPPFLAGS = @HWLOC_CPPFLAGS@
591 HWLOC_CUDART_CFLAGS = @HWLOC_CUDART_CFLAGS@
592 HWLOC_CUDART_CPPFLAGS = @HWLOC_CUDART_CPPFLAGS@
593 HWLOC_CUDART_LDFLAGS = @HWLOC_CUDART_LDFLAGS@
594 HWLOC_CUDART_LIBS = @HWLOC_CUDART_LIBS@
595 HWLOC_CUDA_CFLAGS = @HWLOC_CUDA_CFLAGS@
596 HWLOC_CUDA_CPPFLAGS = @HWLOC_CUDA_CPPFLAGS@
597 HWLOC_CUDA_LDFLAGS = @HWLOC_CUDA_LDFLAGS@
590598 HWLOC_CUDA_LIBS = @HWLOC_CUDA_LIBS@
591599 HWLOC_DIFF_U = @HWLOC_DIFF_U@
592600 HWLOC_DIFF_W = @HWLOC_DIFF_W@
597605 HWLOC_EMBEDDED_LDFLAGS = @HWLOC_EMBEDDED_LDFLAGS@
598606 HWLOC_EMBEDDED_LIBS = @HWLOC_EMBEDDED_LIBS@
599607 HWLOC_GL_LIBS = @HWLOC_GL_LIBS@
608 HWLOC_HAVE_LEVELZERO = @HWLOC_HAVE_LEVELZERO@
600609 HWLOC_HAVE_LIBXML2 = @HWLOC_HAVE_LIBXML2@
601610 HWLOC_HAVE_NVML = @HWLOC_HAVE_NVML@
602611 HWLOC_HAVE_OPENCL = @HWLOC_HAVE_OPENCL@
603612 HWLOC_HAVE_RSMI = @HWLOC_HAVE_RSMI@
613 HWLOC_IBVERBS_LIBS = @HWLOC_IBVERBS_LIBS@
604614 HWLOC_LDFLAGS = @HWLOC_LDFLAGS@
615 HWLOC_LEVELZERO_CFLAGS = @HWLOC_LEVELZERO_CFLAGS@
616 HWLOC_LEVELZERO_LIBS = @HWLOC_LEVELZERO_LIBS@
605617 HWLOC_LIBS = @HWLOC_LIBS@
606618 HWLOC_LIBS_PRIVATE = @HWLOC_LIBS_PRIVATE@
607619 HWLOC_LIBXML2_CFLAGS = @HWLOC_LIBXML2_CFLAGS@
611623 HWLOC_MS_LIB_ARCH = @HWLOC_MS_LIB_ARCH@
612624 HWLOC_NUMA_CFLAGS = @HWLOC_NUMA_CFLAGS@
613625 HWLOC_NUMA_LIBS = @HWLOC_NUMA_LIBS@
626 HWLOC_NVML_CPPFLAGS = @HWLOC_NVML_CPPFLAGS@
627 HWLOC_NVML_LDFLAGS = @HWLOC_NVML_LDFLAGS@
614628 HWLOC_NVML_LIBS = @HWLOC_NVML_LIBS@
615 HWLOC_OPENCL_CFLAGS = @HWLOC_OPENCL_CFLAGS@
629 HWLOC_OPENCL_CPPFLAGS = @HWLOC_OPENCL_CPPFLAGS@
616630 HWLOC_OPENCL_LDFLAGS = @HWLOC_OPENCL_LDFLAGS@
617631 HWLOC_OPENCL_LIBS = @HWLOC_OPENCL_LIBS@
618632 HWLOC_PCIACCESS_CFLAGS = @HWLOC_PCIACCESS_CFLAGS@
738752 prefix = @prefix@
739753 program_transform_name = @program_transform_name@
740754 psdir = @psdir@
755 runstatedir = @runstatedir@
741756 sbindir = @sbindir@
742757 sharedstatedir = @sharedstatedir@
743758 srcdir = @srcdir@
756771 AM_LDFLAGS = $(HWLOC_LDFLAGS)
757772 LDADD = $(HWLOC_top_builddir)/hwloc/libhwloc.la
758773 EXTRA_DIST = test-hwloc-annotate.input test-hwloc-annotate.output \
759 test-hwloc-calc.output test-hwloc-compress-dir.input.tar.gz \
774 test-hwloc-annotate.output2 test-hwloc-calc.output \
775 test-hwloc-compress-dir.input.tar.gz \
760776 test-hwloc-compress-dir.output.tar.gz \
761777 test-hwloc-diffpatch.input1 test-hwloc-diffpatch.input2 \
762778 test-hwloc-distrib.output test-hwloc-info.output \
00 /*
1 * Copyright © 2009-2019 Inria. All rights reserved.
1 * Copyright © 2009-2021 Inria. All rights reserved.
22 * Copyright © 2009-2012 Université Bordeaux
33 * Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
44 * See COPYING in top-level directory.
2323
2424 int hwloc_ps_read_process(hwloc_topology_t topology, hwloc_const_bitmap_t topocpuset,
2525 struct hwloc_ps_process *proc,
26 unsigned long flags, const char *pidcmd)
26 unsigned long flags)
2727 {
2828 #ifdef HAVE_DIRENT_H
2929 hwloc_pid_t realpid;
103103
104104 free(path);
105105
106 proc->string[0] = '\0';
107 if (pidcmd) {
108 char *cmd;
109 FILE *file;
110 cmd = malloc(strlen(pidcmd)+1+5+2+1);
111 sprintf(cmd, "%s %u", pidcmd, (unsigned) proc->pid);
112 file = popen(cmd, "r");
113 if (file) {
114 if (fgets(proc->string, sizeof(proc->string), file)) {
115 end = strchr(proc->string, '\n');
116 if (end)
117 *end = '\0';
118 }
119 pclose(file);
120 }
121 free(cmd);
122 }
106 proc->string[0] = '\0'; /* might be set later if hwloc_ps_pidcmd is called */
123107
124108 if (flags & HWLOC_PS_FLAG_UID) {
125109 proc->uid = HWLOC_PS_ALL_UIDS;
262246 return -1;
263247 }
264248
249 #if defined(HWLOC_WIN_SYS) && !defined(__CYGWIN__)
250 /* hwloc-ps isn't built for Windows, but lstopo is */
251 #define popen _popen
252 #define pclose _pclose
253 #endif
254
255 static int
256 hwloc_ps_pidcmd__from_env(struct hwloc_ps_process *proc,
257 const char *envname, size_t envnamelen,
258 const char *buffer)
259 {
260 const char *cur = buffer;
261 while (*cur) {
262 size_t len;
263 if (!strncmp(cur, envname, envnamelen)) {
264 /* copy the entire "name=value" instead of only the value
265 * so that users know which variable was used.
266 */
267 strncpy(proc->string, cur, sizeof(proc->string));
268 proc->string[sizeof(proc->string)-1] = '\0';
269 return 0;
270 }
271 len = strlen(cur);
272 cur += len + 1;
273 }
274 return -1;
275 }
276
277 static void
278 hwloc_ps_pidcmd_from_env(struct hwloc_ps_process *proc,
279 unsigned nr_env, const char *env[])
280 {
281 char path[64]; /* enough for "/proc/%ld/environ" */
282 char buffer[65536]; /* should be enough for the vast majority of cases */
283 FILE *file;
284 size_t len;
285 unsigned i;
286
287 snprintf(path, sizeof(path), "/proc/%ld/environ", proc->pid);
288 file = fopen(path, "r");
289 if (!file)
290 return;
291 len = fread(buffer, 1, sizeof(buffer)-2, file);
292 fclose(file);
293 if (!len)
294 return;
295
296 /* we must end with 2 '\0', one for the current variable if truncated, and one for an empty variable ending the environment array */
297 buffer[len] = '\0';
298 buffer[len+1] = '\0';
299
300 for(i=0; i<nr_env; i++)
301 if (hwloc_ps_pidcmd__from_env(proc, env[i], strlen(env[i]), buffer) == 0)
302 return;
303 }
304
305 void hwloc_ps_pidcmd(struct hwloc_ps_process *proc, const char *pidcmd)
306 {
307 char *cmd;
308 FILE *file;
309
310 if (!strcmp(pidcmd, "mpirank")) {
311 /* SLURM_PROCID works in srun, but not in salloc+mpirun (returns the node ID?), hence use it as a last fallback */
312 const char *envs[] = { "OMPI_COMM_WORLD_RANK", "PMIX_RANK", "PMI_RANK", "SLURM_PROCID" };
313 hwloc_ps_pidcmd_from_env(proc, sizeof(envs)/sizeof(*envs), envs);
314 return;
315 }
316 if (!strncmp(pidcmd, "env=", 4)) {
317 const char *env = pidcmd+4;
318 hwloc_ps_pidcmd_from_env(proc, 1, &env);
319 return;
320 }
321
322 cmd = malloc(strlen(pidcmd)+1+5+2+1);
323 sprintf(cmd, "%s %u", pidcmd, (unsigned) proc->pid);
324 file = popen(cmd, "r");
325 if (file) {
326 if (fgets(proc->string, sizeof(proc->string), file)) {
327 char *end = strchr(proc->string, '\n');
328 if (end)
329 *end = '\0';
330 }
331 pclose(file);
332 }
333 free(cmd);
334 }
335
265336 void hwloc_ps_free_process(struct hwloc_ps_process *proc)
266337 {
267338 unsigned i;
278349 int hwloc_ps_foreach_process(hwloc_topology_t topology, hwloc_const_bitmap_t topocpuset,
279350 void (*callback)(hwloc_topology_t topology, struct hwloc_ps_process *proc, void *cbdata),
280351 void *cbdata,
281 unsigned long flags, const char *only_name, long uid, const char *pidcmd)
352 unsigned long flags, const char *only_name, long uid)
282353 {
283354 #ifdef HAVE_DIRENT_H
284355 DIR *dir;
303374 proc.nthreads = 0;
304375 proc.nboundthreads = 0;
305376 proc.threads = NULL;
306 if (hwloc_ps_read_process(topology, topocpuset, &proc, flags, pidcmd) < 0)
377 if (hwloc_ps_read_process(topology, topocpuset, &proc, flags) < 0)
307378 goto next;
308379 if (only_name && !strstr(proc.name, only_name))
309380 goto next;
00 /*
1 * Copyright © 2009-2019 Inria. All rights reserved.
1 * Copyright © 2009-2021 Inria. All rights reserved.
22 * Copyright © 2009-2012 Université Bordeaux
33 * Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
44 * See COPYING in top-level directory.
1414
1515 struct hwloc_ps_process {
1616 long pid;
17 char string[1024];
1817 char name[64];
18 char string[1024]; /* optional string, used by hwloc-ps --pid-cmd */
1919 hwloc_bitmap_t cpuset;
2020 #define HWLOC_PS_ALL_UIDS ((long)-1)
2121 long uid;
3737
3838 int hwloc_ps_read_process(hwloc_topology_t topology, hwloc_const_bitmap_t topocpuset,
3939 struct hwloc_ps_process *proc,
40 unsigned long flags, const char *pidcmd);
40 unsigned long flags);
4141
4242 int hwloc_ps_foreach_process(hwloc_topology_t topology, hwloc_const_bitmap_t topocpuset,
4343 void (*callback)(hwloc_topology_t topology, struct hwloc_ps_process *proc, void *cbdata),
4444 void *cbdata,
45 unsigned long flags, const char *only_name, long only_uid, const char *pidcmd);
45 unsigned long flags, const char *only_name, long only_uid);
46
47 void hwloc_ps_pidcmd(struct hwloc_ps_process *proc, const char *pidcmd);
4648
4749 void hwloc_ps_free_process(struct hwloc_ps_process *proc);
4850
00 .\" -*- nroff -*-
1 .\" Copyright © 2013-2020 Inria. All rights reserved.
1 .\" Copyright © 2013-2021 Inria. All rights reserved.
22 .\" See COPYING in top-level directory.
33 .TH HWLOC-ANNOTATE "1" "%HWLOC_DATE%" "%PACKAGE_VERSION%" "%PACKAGE_NAME%"
44 .SH NAME
5656 If nothing else has to be performed after clearing, \fImode\fR should be
5757 set to \fInone\fR.
5858 .TP
59 \fB\-\-version\fR
60 Report version and exit.
61 .TP
5962 \fB\-h\fR \fB\-\-help\fR
6063 Display help message and exit.
6164 .
128131 given to the function \fBhwloc_distances_set()\fR.
129132 \fIlocation\fR is ignored in this mode.
130133
131 The first line of the pointed file must be a integer representing
134 The real first line of the pointed file must be a integer representing
132135 a distances \fBkind\fR as defined in \fBhwloc/distances.h\fR.
133136 The second line is the number of objects involved in the distances.
134137 The next lines contain one object each.
135138 The next lines contain one distance value each,
136139 or a single line may be given with a integer combination of format \fBx*y\fR or \fBx*y*z\fR.
140 An optional line before all others may start with \fBname=\fR
141 to specify the name of the distances structure if any.
142
143 .TP
144 .B distances-transform <name> links
145 Transform a bandwidth distances structure named <name> into links.
146 See the documentation of HWLOC_DISTANCES_TRANSFORM_LINKS in hwloc/distances.h for details.
147 .TP
148 .B distances-transform <name> merge-switch-ports
149 When switches appear in the matrix as different ports, merge all of them
150 into a single port for clarity.
151 This currently only applies to the NVLinkBandwidth matrix between NVIDIA GPUs.
152 See the documentation of HWLOC_DISTANCES_TRANSFORM_MERGE_SWITCH_PORTS in hwloc/distances.h for details.
153 .TP
154 .B distances-transform <name> transitive-closure
155 If objects are connected across a switch, apply a transitive-closure
156 to report the bandwidth through that switch.
157 This currently only applies to the NVLinkBandwidth matrix between NVIDIA GPUs.
158 The bandwidth between all pairs of GPUs will be exposed instead of
159 bandwidths between single GPUs and single NVSwitch ports.
160 See the documentation of HWLOC_DISTANCES_TRANSFORM_TRANSITIVE_CLOSURE in hwloc/distances.h for details.
161 .TP
162 .B distances-transform <name> remove-obj <obj>
163 Remove the given object from the distances structure named <name>.
164 .TP
165 .B distances-transform <name> replace-objs <oldtype> <newtype>
166 Replace objects of type <oldtype> in distances structure named <name>
167 with objects of type <newtype> with same locality.
168 If <oldtype> or <newtype> are not object types, they are assumed
169 subtypes of OS devices, e.g. "NVML" or "OpenCL".
170 See the documentation of hwloc_get_obj_with_same_locality() in hwloc/helper.h for details.
171
172 If <newtype> is "NULL", objects are removed from the distances structure.
173
137174 .TP
138175 .B none
139176 No new annotation is added. This is useful when clearing existing attributes.
200237
201238 $ hwloc-annotate topo.xml topo.xml dummy cpukind 0x0f 0 0 CoreType Small
202239 $ hwloc-annotate topo.xml topo.xml dummy cpukind 0xf0 1 0 CoreType Big
240
241 Replace NUMA nodes with Packages in the NUMALatency distances matrix,
242 when they have the exact same locality.
243
244 $ hwloc-annotate topo.xml topo.xml -- dummy -- distances-transform NUMALatency replace-objs numanode packages
245
246 Remove NUMA node #3 from the NUMALatency distances matrix:
247
248 $ hwloc-annotate topo.xml topo.xml -- dummy -- distances-transform NUMALatency remove-obj numa:3
249
250 Merge all NVSwitch ports bandwidth information into a single port in the NVLinkBandwidth matrix:
251
252 $ hwloc-annotate topo.xml topo.xml -- dummy -- distances-transform NVLinkBandwidth merge-switch-ports
253
254 Apply a transitive closure to get inter-GPU bandwidth across NVSwitches in the NVLinkBandwidth matrix:
255
256 $ hwloc-annotate topo.xml topo.xml -- dummy -- distances-transform NVLinkBandwidth transitive-closure
257
203258 .
204259 .\" **************************
205260 .\" Return value section
00 /*
1 * Copyright © 2012-2020 Inria. All rights reserved.
1 * Copyright © 2012-2021 Inria. All rights reserved.
22 * See COPYING in top-level directory.
33 */
44
2424 fprintf(where, " memattr <name> <flags>\n");
2525 fprintf(where, " memattr <name> <initiator> <value>\n");
2626 fprintf(where, " cpukind <cpuset> <efficiency> <flags> [<infoname> <infovalue>]\n");
27 fprintf(where, " distances-transform <name> links\n");
28 fprintf(where, " distances-transform <name> merge-switch-ports\n");
29 fprintf(where, " distances-transform <name> transitive-closure\n");
30 fprintf(where, " distances-transform <name> remove-obj <obj>\n");
31 fprintf(where, " distances-transform <name> replace-objs <oldtype <newtype>\n");
2732 fprintf(where, " none\n");
2833 fprintf(where, "Options:\n");
2934 fprintf(where, " --ci\tClear existing infos\n");
3035 fprintf(where, " --ri\tReplace or remove existing infos with same name (annotation must be info)\n");
3136 fprintf(where, " --cu\tClear existing userdata\n");
3237 fprintf(where, " --cd\tClear existing distances\n");
38 fprintf(where, " --version\tReport version and exit\n");
39 fprintf(where, " -h --help\tShow this usage\n");
3340 }
3441
3542 static char *infoname = NULL, *infovalue = NULL;
5865 static int replaceinfos = 0;
5966 static int clearuserdata = 0;
6067 static int cleardistances = 0;
68
69 static char *distances_transform_name = NULL;
70 static int distances_transform_links = 0;
71 static int distances_transform_merge_switch_ports = 0;
72 static int distances_transform_closure = 0;
73 static char *distances_transform_removeobj = NULL;
74 static char *distances_transform_replace_oldtype = NULL;
75 static char *distances_transform_replace_newtype = NULL;
6176
6277 static void apply(hwloc_topology_t topology, hwloc_obj_t obj)
6378 {
160175 int err;
161176
162177 typelen = strspn(str, "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789");
163 if (!typelen || str[typelen] != ':')
178 if (!typelen || (str[typelen] != ':' && str[typelen] != '=' && str[typelen] != '['))
164179 return NULL;
165180
166181 lcontext.topology = topology;
175190 } else {
176191 *ignored_multiple = 0;
177192 }
178 str[typelen+1+length] = '\0';
179193 err = hwloc_calc_process_location(&lcontext, str, typelen,
180194 hwloc_calc_get_unique_obj_cb, &obj);
181195 if (err < 0)
187201 static void
188202 add_distances(hwloc_topology_t topology, int topodepth)
189203 {
204 char *name = NULL;
190205 unsigned long kind = 0;
191206 unsigned nbobjs = 0;
192207 hwloc_obj_t *objs = NULL;
193208 hwloc_uint64_t *values = NULL;
194209 FILE *file;
195 char line[64];
210 char line[64], *end;
196211 unsigned i, x, y, z;
212 hwloc_distances_add_handle_t handle;
197213 int err;
198214
199215 file = fopen(distancesfilename, "r");
203219 }
204220
205221 if (!fgets(line, sizeof(line), file)) {
206 fprintf(stderr, "Failed to read kind line\n");
222 fprintf(stderr, "Failed to read header line\n");
207223 goto out;
208224 }
209 kind = strtoul(line, NULL, 0);
225 if (!strncmp(line, "name=", 5)) {
226 end = strchr(line, '\n');
227 if (end) {
228 *end = '\0';
229 name = strdup(line+5);
230 }
231 if (!fgets(line, sizeof(line), file)) {
232 fprintf(stderr, "Failed to read kind line\n");
233 goto out;
234 }
235 }
236
237 kind = strtoul(line, NULL, 0);
210238
211239 if (!fgets(line, sizeof(line), file)) {
212240 fprintf(stderr, "Failed to read nbobjs line\n");
231259 fprintf(stderr, "Failed to read object line #%u.\n", i);
232260 goto out;
233261 }
262 end = strchr(line, '\n');
263 if (end)
264 *end = '\0';
234265
235266 obj = get_unique_obj(topology, topodepth, line, &ignored_multiple);
236267 if (!obj) {
282313 }
283314 }
284315
285 err = hwloc_distances_add(topology, nbobjs, objs, values, kind, distancesflags);
286 if (err < 0) {
287 fprintf(stderr, "Failed to add distances\n");
288 goto out;
316 err = -1;
317 handle = hwloc_distances_add_create(topology, name, kind, 0);
318 if (handle) {
319 err = hwloc_distances_add_values(topology, handle, nbobjs, objs, values, 0);
320 if (!err) {
321 err = hwloc_distances_add_commit(topology, handle, distancesflags);
322 }
323 }
324 if (err < 0 || !handle) {
325 fprintf(stderr, "Failed to add distances\n");
326 goto out;
289327 }
290328
291329 out:
330 free(name);
292331 free(objs);
293332 free(values);
294333 fclose(file);
295334 return;
335 }
336
337 static void transform_distances(hwloc_topology_t topology, int topodepth)
338 {
339 hwloc_distances_add_handle_t handle;
340 struct hwloc_distances_s *dist;
341 unsigned nr = 1;
342 int err;
343
344 err = hwloc_distances_get_by_name(topology, distances_transform_name, &nr, &dist, 0);
345 if (err < 0 || !nr) {
346 fprintf(stderr, "Failed to find a distances structure with name `%s'\n", distances_transform_name);
347 goto out;
348 }
349 if (nr > 1) {
350 fprintf(stderr, "Found %u distances structure with name `%s'\n", nr, distances_transform_name);
351 goto out_with_dist;
352 }
353
354 if (distances_transform_links) {
355 /* replace bandwidth with links */
356 err = hwloc_distances_transform(topology, dist, HWLOC_DISTANCES_TRANSFORM_LINKS, NULL, 0);
357 if (err < 0) {
358 fprintf(stderr, "Failed to transform distances `%s' into links\n", distances_transform_name);
359 goto out_with_dist;
360 }
361
362 } else if (distances_transform_merge_switch_ports) {
363 /* merge switch ports */
364 err = hwloc_distances_transform(topology, dist, HWLOC_DISTANCES_TRANSFORM_MERGE_SWITCH_PORTS, NULL, 0);
365 if (err < 0) {
366 fprintf(stderr, "Failed to transform distances `%s' by merging switch ports\n", distances_transform_name);
367 goto out_with_dist;
368 }
369
370 } else if (distances_transform_closure) {
371 /* closure */
372 err = hwloc_distances_transform(topology, dist, HWLOC_DISTANCES_TRANSFORM_TRANSITIVE_CLOSURE, NULL, 0);
373 if (err < 0) {
374 fprintf(stderr, "Failed to transform distances `%s' through transitive closure\n", distances_transform_name);
375 goto out_with_dist;
376 }
377
378 } else if (distances_transform_removeobj) {
379 /* remove an object */
380 hwloc_obj_t obj;
381 unsigned i;
382 int ignored_multiple;
383 obj = get_unique_obj(topology, topodepth, distances_transform_removeobj, &ignored_multiple);
384 if (!obj) {
385 fprintf(stderr, "Failed to find object `%s' to remove from distances structure\n", distances_transform_removeobj);
386 goto out_with_dist;
387 }
388 for(i=0; i<dist->nbobjs; i++)
389 if (obj == dist->objs[i]) {
390 printf("Removing object #%u from distances structures `%s'\n",
391 i, distances_transform_name);
392 dist->objs[i] = NULL;
393 }
394 err = hwloc_distances_transform(topology, dist, HWLOC_DISTANCES_TRANSFORM_REMOVE_NULL, NULL, 0);
395 if (err < 0) {
396 fprintf(stderr, "Failed to transform distances `%s' to remove NULL objects\n", distances_transform_name);
397 goto out_with_dist;
398 }
399
400 } else if (distances_transform_replace_oldtype) {
401 /* replace some objects */
402 hwloc_obj_type_t old_type, new_type;
403 char *old_subtype, *new_subtype;
404 int replace_with_NULL;
405 unsigned i;
406
407 assert(distances_transform_replace_newtype);
408
409 if (hwloc_type_sscanf(distances_transform_replace_oldtype, &old_type, NULL, 0) < 0) {
410 old_type = HWLOC_OBJ_OS_DEVICE;
411 old_subtype = distances_transform_replace_oldtype;
412 } else {
413 old_subtype = NULL;
414 }
415
416 if (!strcasecmp(distances_transform_replace_newtype, "null")) {
417 replace_with_NULL = 1;
418 } else {
419 replace_with_NULL = 0;
420 if (hwloc_type_sscanf(distances_transform_replace_newtype, &new_type, NULL, 0) < 0) {
421 new_type = HWLOC_OBJ_OS_DEVICE;
422 new_subtype = distances_transform_replace_newtype;
423 } else {
424 new_subtype = NULL;
425 }
426 }
427
428 for(i=0; i<dist->nbobjs; i++) {
429 hwloc_obj_t new, old = dist->objs[i];
430 if (old->type != old_type)
431 continue;
432 if (old_subtype && (!old->subtype || strcasecmp(old_subtype, old->subtype)))
433 continue;
434 if (replace_with_NULL) {
435 new = NULL;
436 printf("Replacing object #%u in distances structures `%s' with NULL\n",
437 i, distances_transform_name);
438 } else {
439 new = hwloc_get_obj_with_same_locality(topology, old,
440 new_type, new_subtype, NULL, 0);
441 if (!new)
442 continue;
443 printf("Replacing object #%u in distances structures `%s'\n",
444 i, distances_transform_name);
445 }
446 dist->objs[i] = new;
447 }
448
449 if (replace_with_NULL)
450 err = hwloc_distances_transform(topology, dist, HWLOC_DISTANCES_TRANSFORM_REMOVE_NULL, NULL, 0);
451 }
452
453 handle = hwloc_distances_add_create(topology, distances_transform_name, dist->kind, 0);
454 if (!handle) {
455 fprintf(stderr, "Failed to create new distances handle after transformation\n");
456 goto out_with_dist;
457 }
458 err = hwloc_distances_add_values(topology, handle, dist->nbobjs, dist->objs, dist->values, 0);
459 if (err < 0) {
460 fprintf(stderr, "Failed to set values in new distances handle after transformation\n");
461 goto out_with_dist;
462 }
463 err = hwloc_distances_add_commit(topology, handle, 0);
464 if (err < 0) {
465 fprintf(stderr, "Failed to commit new distances handle after transformation\n");
466 goto out_with_dist;
467 }
468
469 out_with_dist:
470 hwloc_distances_release_remove(topology, dist);
471 out:
472 return;
296473 }
297474
298475 int main(int argc, char *argv[])
304481 int topodepth;
305482 int err;
306483
307 callname = argv[0];
484 callname = strrchr(argv[0], '/');
485 if (!callname)
486 callname = argv[0];
487 else
488 callname++;
489
308490 /* skip argv[0], handle options */
309491 argc--;
310492 argv++;
323505 clearuserdata = 1;
324506 else if (!strcmp(argv[0], "--cd"))
325507 cleardistances = 1;
508 else if (!strcmp (argv[0], "--version")) {
509 printf("%s %s\n", callname, HWLOC_VERSION);
510 exit(EXIT_SUCCESS);
511 }
326512 else if (!strcmp(argv[0], "-h") || !strcmp(argv[0], "--help")) {
327513 usage(callname, stdout);
328514 exit(EXIT_SUCCESS);
398584 if(distancesflags == (unsigned long)-1)
399585 goto out;
400586 }
587
588 } else if (!strcmp(argv[0], "distances-transform")) {
589 if (argc < 3) {
590 usage(callname, stderr);
591 exit(EXIT_FAILURE);
592 }
593 distances_transform_name = argv[1];
594 if (!strcmp(argv[2], "links")) {
595 distances_transform_links = 1;
596 } else if (!strcmp(argv[2], "merge-switch-ports")) {
597 distances_transform_merge_switch_ports = 1;
598 } else if (!strcmp(argv[2], "transitive-closure")) {
599 distances_transform_closure = 1;
600 } else if (!strcmp(argv[2], "remove-obj")) {
601 if (argc < 4) {
602 usage(callname, stderr);
603 exit(EXIT_FAILURE);
604 }
605 distances_transform_removeobj = argv[3];
606 } else if (!strcmp(argv[2], "replace-objs")) {
607 if (argc < 5) {
608 usage(callname, stderr);
609 exit(EXIT_FAILURE);
610 }
611 distances_transform_replace_oldtype = argv[3];
612 distances_transform_replace_newtype = argv[4];
613 } else {
614 fprintf(stderr, "Unrecognized distances-transform operation `%s'\n", argv[2]);
615 usage(callname, stderr);
616 exit(EXIT_FAILURE);
617 }
401618
402619 } else if (!strcmp(argv[0], "memattr")) {
403620 if (argc < 3) {
487704 /* ignore locations */
488705 add_distances(topology, topodepth);
489706
707 } else if (distances_transform_name) {
708 transform_distances(topology, topodepth);
709
490710 } else if (maname) {
491711 hwloc_memattr_id_t id;
492712 err = hwloc_memattr_register(topology, maname, maflags, &id);
00 .\" -*- nroff -*-
1 .\" Copyright © 2009-2020 Inria. All rights reserved.
1 .\" Copyright © 2009-2021 Inria. All rights reserved.
22 .\" Copyright © 2010 Université of Bordeaux
33 .\" Copyright © 2009-2020 Cisco Systems, Inc. All rights reserved.
44 .\" See COPYING in top-level directory.
4949 \fB\-\-disallowed\fR
5050 Include objects disallowed by administrative limitations.
5151 .TP
52 \fB--best-memattr\fR <name>
52 \fB\-\-best\-memattr\fR <name>
5353 Select the best NUMA node among the given memory binding set by looking
5454 at the memory attribute given by \fI<name>\fR (or as an index).
5555
6363 $ lstopo --memattrs
6464
6565 .TP
66 \fB--hbm\fR
66 \fB\-\-hbm\fR
6767 Only take high bandwidth memory nodes (Intel Xeon Phi MCDRAM)
6868 in account when looking for NUMA nodes in the input locations.
6969
7171 such as \fI--hbm numa:1\fR for binding on the second HBM node.
7272 It may also be written as \fIhbm:1\fR.
7373 .TP
74 \fB--no-hbm\fR
74 \fB\-\-no\-hbm\fR
7575 Ignore high bandwidth memory nodes (Intel Xeon Phi MCDRAM)
7676 when looking for NUMA nodes in the input locations.
7777 .
130130 still be parsed as nodesets if they are prefixed with \fInodeset=\fR.
131131
132132 .TP
133 \fB\-e\fR \fB\-\-get-last-cpu-location\fR
133 \fB\-e\fR \fB\-\-get\-last\-cpu\-location\fR
134134 Report the last processors where the process ran.
135135 The output is an opaque bitmask that may be translated into objects with hwloc-calc
136136 (see EXAMPLES below).
00 /*
11 * Copyright © 2009 CNRS
2 * Copyright © 2009-2020 Inria. All rights reserved.
2 * Copyright © 2009-2021 Inria. All rights reserved.
33 * Copyright © 2009-2010, 2012 Université Bordeaux
44 * Copyright © 2009-2018 Cisco Systems, Inc. All rights reserved.
55 * See COPYING in top-level directory.
6363 fprintf(where, " -q --quiet Hide non-fatal error messages\n");
6464 fprintf(where, " -v --verbose Show verbose messages\n");
6565 fprintf(where, " --version Report version and exit\n");
66 fprintf(where, " -h --help Show this usage\n");
6667 }
6768
6869 int main(int argc, char *argv[])
100101 struct hwloc_calc_location_context_s lcontext;
101102 struct hwloc_calc_set_context_s scontext;
102103
103 callname = argv[0];
104 callname = strrchr(argv[0], '/');
105 if (!callname)
106 callname = argv[0];
107 else
108 callname++;
109
104110 /* skip argv[0], handle options */
105111 argv++;
106112 argc--;
509515 char *s;
510516 hwloc_bitmap_asprintf(&s, membind_set);
511517 if (pid_number > 0)
512 fprintf(stderr, "hwloc_set_proc_membind %s (policy %d flags %x) PID %d failed (errno %d %s)\n",
518 fprintf(stderr, "hwloc_set_proc_membind %s (policy %d flags 0x%x) PID %d failed (errno %d %s)\n",
513519 s, membind_policy, membind_flags, pid_number, bind_errno, errmsg);
514520 else
515 fprintf(stderr, "hwloc_set_membind %s (policy %d flags %x) failed (errno %d %s)\n",
521 fprintf(stderr, "hwloc_set_membind %s (policy %d flags 0x%x) failed (errno %d %s)\n",
516522 s, membind_policy, membind_flags, bind_errno, errmsg);
517523 free(s);
518524 }
569575 char *s;
570576 hwloc_bitmap_asprintf(&s, cpubind_set);
571577 if (pid_number > 0)
572 fprintf(stderr, "hwloc_set_proc_cpubind %s (flags %x) PID %d failed (errno %d %s)\n",
578 fprintf(stderr, "hwloc_set_proc_cpubind %s (flags 0x%x) PID %d failed (errno %d %s)\n",
573579 s, cpubind_flags, pid_number, bind_errno, errmsg);
574580 else if (tid_number > 0)
575 fprintf(stderr, "hwloc_set_tid_cpubind %s (flags %x) PID %d failed (errno %d %s)\n",
581 fprintf(stderr, "hwloc_set_tid_cpubind %s (flags 0x%x) PID %d failed (errno %d %s)\n",
576582 s, cpubind_flags, tid_number, bind_errno, errmsg);
577583 else
578 fprintf(stderr, "hwloc_set_cpubind %s (flags %x) failed (errno %d %s)\n",
584 fprintf(stderr, "hwloc_set_cpubind %s (flags 0x%x) failed (errno %d %s)\n",
579585 s, cpubind_flags, bind_errno, errmsg);
580586 free(s);
581587 }
00 .\" -*- nroff -*-
1 .\" Copyright © 2010-2020 Inria. All rights reserved.
1 .\" Copyright © 2010-2021 Inria. All rights reserved.
22 .\" Copyright © 2009-2020 Cisco Systems, Inc. All rights reserved.
33 .\" See COPYING in top-level directory.
44 .TH HWLOC-CALC "1" "%HWLOC_DATE%" "%PACKAGE_VERSION%" "%PACKAGE_NAME%"
110110 \fB\-\-ni\fR \fB\-\-nodeset\-input\fR
111111 Interpret input sets as nodesets instead of CPU sets.
112112 .TP
113 \fB\-N \-\-number-of <type|depth>\fR
113 \fB\-N \-\-number\-of <type|depth>\fR
114114 Report the number of objects of the given type or depth that intersect the CPU set.
115115 This is convenient for finding how many cores, NUMA nodes or PUs are available
116116 in a machine.
00 /*
11 * Copyright © 2009 CNRS
2 * Copyright © 2009-2020 Inria. All rights reserved.
2 * Copyright © 2009-2021 Inria. All rights reserved.
33 * Copyright © 2009-2011 Université Bordeaux
44 * Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
55 * See COPYING in top-level directory.
6060 fprintf(where, " -q --quiet Hide non-fatal error messages\n");
6161 fprintf(where, " -v --verbose Show verbose messages\n");
6262 fprintf(where, " --version Report version and exit\n");
63 fprintf(where, " -h --help Show this usage\n");
6364 }
6465
6566 static int verbose = 0;
113114 while ((obj = hwloc_get_next_obj_covering_cpuset_by_depth(topology, root->cpuset, hierdepth[level], prev)) != NULL) {
114115 char string[256];
115116 char type[32];
117 unsigned idx = logicalo ? logi : obj->os_index;
116118 if (!hwloc_bitmap_intersects(set, obj->cpuset))
117119 goto next;
118120 hwloc_obj_type_snprintf(type, sizeof(type), obj, 1);
119 snprintf(string, sizeof(string), "%s%s%s:%u", prefix, level ? "." : "", type, logicalo ? logi : obj->os_index);
121 if (idx == (unsigned)-1)
122 snprintf(string, sizeof(string), "%s%s%s:-1", prefix, level ? "." : "", type);
123 else
124 snprintf(string, sizeof(string), "%s%s%s:%u", prefix, level ? "." : "", type, idx);
120125 if (!first)
121126 printf("%s", sep);
122127 first = 0;
188193 if (!sep)
189194 sep = ",";
190195 while ((proc = hwloc_calc_get_next_obj_covering_set_by_depth(topology, set, nodeseto, intersectdepth, prev)) != NULL) {
196 unsigned idx = logicalo ? proc->logical_index : proc->os_index;
191197 if (prev)
192198 printf("%s", sep);
193 printf("%u", logicalo ? proc->logical_index : proc->os_index);
199 if (idx == (unsigned)-1)
200 printf("-1");
201 else
202 printf("%u", idx);
194203 prev = proc;
195204 }
196205 printf("\n");
305314 struct hwloc_calc_location_context_s lcontext;
306315 struct hwloc_calc_set_context_s scontext;
307316
308 callname = argv[0];
317 callname = strrchr(argv[0], '/');
318 if (!callname)
319 callname = argv[0];
320 else
321 callname++;
322
309323 /* skip argv[0], handle options */
310324 argv++;
311325 argc--;
431445 opt = 0;
432446
433447 if (*argv[0] == '-') {
448 if (!strcmp (argv[0], "-h") || !strcmp (argv[0], "--help")) {
449 usage(callname, stdout);
450 exit(EXIT_SUCCESS);
451 }
434452 if (!strcmp(argv[0], "-v") || !strcmp(argv[0], "--verbose")) {
435453 verbose++;
436454 goto next;
782782 static __hwloc_inline void
783783 hwloc_calc_locations_usage(FILE *where)
784784 {
785 fprintf (where, " core:2-3 for the second and third core\n");
785 fprintf (where, " core:2-3 for the third and fourth cores\n");
786786 fprintf (where, " node:1.pu:2 the third PU of the second NUMA node\n");
787787 fprintf (where, " 0x12345678 a CPU set given a bitmask string\n");
788788 fprintf (where, " os=eth0 the operating system device named eth0\n");
00 .\" -*- nroff -*-
1 .\" Copyright © 2013-2018 Inria. All rights reserved.
1 .\" Copyright © 2013-2021 Inria. All rights reserved.
22 .\" See COPYING in top-level directory.
33 .TH HWLOC-COMPRESS-DIR "1" "%HWLOC_DATE%" "%PACKAGE_VERSION%" "%PACKAGE_NAME%"
44 .SH NAME
2424 .TP
2525 \fB\-v \-\-verbose\fR
2626 Display verbose messages.
27 .TP
28 \fB\-\-version\fR
29 Report version and exit.
2730 .TP
2831 \fB\-h\fR \fB\-\-help\fR
2932 Display help message and exit.
11 #-*-sh-*-
22
33 #
4 # Copyright © 2013-2018 Inria. All rights reserved.
4 # Copyright © 2013-2021 Inria. All rights reserved.
55 # See COPYING in top-level directory.
66 #
77
8 HWLOC_VERSION="@HWLOC_VERSION@"
89 HWLOC_top_builddir="@HWLOC_top_builddir@"
910 prefix="@prefix@"
1011 exec_prefix="@exec_prefix@"
2324
2425 usage()
2526 {
26 echo "$0 [options] <inputdir> <outputdir>"
27 echo `basename $0`" [options] <inputdir> <outputdir>"
2728 echo " Compress topologies from <inputdir> into <outputdir>"
2829 echo "Options:"
2930 echo " -R --reverse Uncompress instead of compressing"
3031 echo " -v --verbose Display verbose messages"
32 echo " --version Report version and exit"
33 echo " -h --help Show this usage"
3134 }
3235
3336 while test $# -gt 0 ; do
3841 -v|--verbose)
3942 verbose=1
4043 ;;
44 --version)
45 echo `basename $0`" $HWLOC_VERSION"
46 exit 0
47 ;;
4148 -h|--help)
4249 usage
4350 exit 0
00 /*
1 * Copyright © 2013-2020 Inria. All rights reserved.
1 * Copyright © 2013-2021 Inria. All rights reserved.
22 * See COPYING in top-level directory.
33 */
44
1414 fprintf(where, " --refname <name> Change the XML reference identifier to <name> in the output\n");
1515 fprintf(where, " (default is the filename of the first topology\n");
1616 fprintf(where, " --version Report version and exit\n");
17 fprintf(where, " -h --help Show this usage\n");
1718 }
1819
1920 int main(int argc, char *argv[])
2728 unsigned i, j;
2829 int err;
2930
30 callname = argv[0];
31 callname = strrchr(argv[0], '/');
32 if (!callname)
33 callname = argv[0];
34 else
35 callname++;
36
3137 /* skip argv[0], handle options */
3238 argc--;
3339 argv++;
00 /*
11 * Copyright © 2009 CNRS
2 * Copyright © 2009-2020 Inria. All rights reserved.
2 * Copyright © 2009-2021 Inria. All rights reserved.
33 * Copyright © 2009-2010 Université Bordeaux
44 * Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
55 * See COPYING in top-level directory.
3434 fprintf(where, "Miscellaneous options:\n");
3535 fprintf(where, " -v --verbose Show verbose messages\n");
3636 fprintf(where, " --version Report version and exit\n");
37 fprintf(where, " -h --help Show this usage\n");
3738 }
3839
3940 int main(int argc, char *argv[])
5455 int opt;
5556 int err;
5657
57 callname = argv[0];
58 callname = strrchr(argv[0], '/');
59 if (!callname)
60 callname = argv[0];
61 else
62 callname++;
63
5864 /* skip argv[0], handle options */
5965 argv++;
6066 argc--;
00 .\" -*- nroff -*-
1 .\" Copyright © 2015-2018 Inria. All rights reserved.
1 .\" Copyright © 2015-2021 Inria. All rights reserved.
22 .\" See COPYING in top-level directory.
33 .TH HWLOC-DUMP-HWDATA "1" "%HWLOC_DATE%" "%PACKAGE_VERSION%" "%PACKAGE_NAME%"
44 .SH NAME
2525 You may want to set the HWLOC_DUMPED_HWDATA_DIR environment variable
2626 as well so that the hwloc library looks for dumped files in that same
2727 directory.
28 .TP
29 \fB\-\-version\fR
30 Report version and exit.
2831 .TP
2932 \fB\-h\fR \fB\-\-help\fR
3033 Display help message and exit.
00 /*
11 * Copyright © 2015 Intel, Inc. All rights reserved.
2 * Copyright © 2015-2018 Inria. All rights reserved.
2 * Copyright © 2015-2021 Inria. All rights reserved.
33 * See COPYING in top-level directory.
44 */
55
2626 fprintf (where, "Usage: %s [ options ] ...\n", name);
2727 fprintf (where, "Options:\n");
2828 fprintf (where, " -o <dir> Output files to directory <dir> instead of " DEFAULT_DUMP_DIR "\n");
29 fprintf (where, " --version Report version and exit\n");
30 fprintf (where, " -h --help Show this usage\n");
2931 }
3032
3133 int main(int argc, char *argv[])
3234 {
33 const char *callname = argv[0];
35 const char *callname;
3436 char *dirname = (char *) DEFAULT_DUMP_DIR;
3537 const char *input_fsroot;
3638 char *filename;
3739 int err;
3840
41 callname = strrchr(argv[0], '/');
42 if (!callname)
43 callname = argv[0];
44 else
45 callname++;
46
3947 argv++; argc--;
4048 while (argc) {
4149 if (!strcmp(argv[0], "-h") || !strcmp(argv[0], "--help")) {
4250 usage(callname, stdout);
51 exit(EXIT_SUCCESS);
52 } else if (!strcmp (argv[0], "--version")) {
53 printf("%s %s\n", callname, HWLOC_VERSION);
4354 exit(EXIT_SUCCESS);
4455 } else if (!strcmp(argv[0], "-o")) {
4556 if (argc == 1) {
00 .\" -*- nroff -*-
1 .\" Copyright © 2015-2019 Inria. All rights reserved.
1 .\" Copyright © 2015-2021 Inria. All rights reserved.
22 .\" See COPYING in top-level directory.
33 .TH HWLOC-GATHER-CPUID "1" "%HWLOC_DATE%" "%PACKAGE_VERSION%" "%PACKAGE_NAME%"
44 .SH NAME
2424 .TP
2525 \fB\-s\fR \fB\-\-silent\fR
2626 Do not show verbose messages.
27 .TP
28 \fB\-\-version\fR
29 Report version and exit.
2730 .TP
2831 \fB\-h\fR \fB\-\-help\fR
2932 Display help message and exit.
446446 fprintf(where, "Options:\n");
447447 fprintf(where, " -c <n> Only gather for logical processor with logical index <n>\n");
448448 fprintf(where, " -s --silent Do not show verbose messages\n");
449 fprintf(where, " --version Report version and exit\n");
449450 fprintf(where, " -h --help Show this usage\n");
450451 }
451452
461462 int err;
462463 int ret = EXIT_SUCCESS;
463464
464 callname = argv[0];
465 callname = strrchr(argv[0], '/');
466 if (!callname)
467 callname = argv[0];
468 else
469 callname++;
470
465471 argc--; argv++;
466472
467473 hwloc_utils_check_api_version(callname);
481487 verbose--;
482488 argc--;
483489 argv++;
490 } else if (!strcmp (argv[0], "--version")) {
491 printf("%s %s\n", callname, HWLOC_VERSION);
492 exit(EXIT_SUCCESS);
484493 } else if (!strcmp(argv[0], "-h") || !strcmp(argv[0], "--help")) {
485494 usage(callname, stdout);
486495 goto out;
00 .\" -*- nroff -*-
11 .\" Copyright © 2010 Jirka Hladky
2 .\" Copyright © 2010-2019 Inria. All rights reserved.
2 .\" Copyright © 2010-2021 Inria. All rights reserved.
33 .\" See COPYING in top-level directory.
44 .TH HWLOC-GATHER-TOPOLOGY "1" "%HWLOC_DATE%" "%PACKAGE_VERSION%" "%PACKAGE_NAME%"
55 .SH NAME
3131 .TP
3232 \fB\-\-no\-cpuid\fR
3333 Do not gather x86 CPUID dump using \fIhwloc\-gather\-cpuid\fR.
34 .
35 .TP
36 \fB\-\-keep\fR
37 Keep the temporary copy of dumped files instead of destroying it.
38 .
39 .TP
40 \fB\-\-version\fR
41 Report version and exit.
3442 .
3543 .TP
3644 \fB\-h\fR \fB\-\-help\fR
22
33 #
44 # Copyright © 2009 CNRS
5 # Copyright © 2009-2020 Inria. All rights reserved.
5 # Copyright © 2009-2021 Inria. All rights reserved.
66 # Copyright © 2009-2012 Université Bordeaux
77 # Copyright © 2014 Cisco Systems, Inc. All rights reserved.
88 # See COPYING in top-level directory.
99 #
1010
11 HWLOC_VERSION="@HWLOC_VERSION@"
1112 HWLOC_top_builddir="@HWLOC_top_builddir@"
1213 prefix="@prefix@"
1314 exec_prefix="@exec_prefix@"
4445
4546 usage()
4647 {
47 echo "$0 [options] <savepath>"
48 echo `basename $0`" [options] <savepath>"
4849 echo " Saves the Linux topology files (/sys, /proc, ...) under <savepath>.tar.bz2"
4950 echo " and the corresponding lstopo verbose output under <savepath>.output"
5051 echo "Options:"
5253 echo " --dmi Gather SMBIOS files. Works only when run as root. Requires dmi-sysfs kernel module"
5354 echo " --no-cpuid Do not gather x86 CPUID using hwloc-gather-cpuid"
5455 echo " --keep Keep the temporary copy of dumped files"
56 echo " --version Report version and exit"
57 echo " -h --help Show this usage"
5558 echo "Example:"
5659 echo " $0 /tmp/\$(uname -n)"
5760 }
6265 --dmi) gatherdmi=1;;
6366 --no-cpuid) gathercpuid=0;;
6467 --keep) keep=1;;
68 --version) echo `basename $0`" $HWLOC_VERSION"; exit 0;;
6569 -h|--help) usage; exit 0;;
6670 *) echo "Unrecognized option: $1"; usage; exit 1;;
6771 esac
286290 saveclassdir "$destdir/$basename" drm
287291 saveclassdir "$destdir/$basename" infiniband
288292 saveclassdir "$destdir/$basename" net
293 saveclassdir "$destdir/$basename" ve
289294 saveclassdir "$destdir/$basename" mic
290295 # udev block data
291296 ls -d /run/udev/data/b* 2>/dev/null | while read -r path ; do savefile "$destdir/$basename" "$path" ; done
00 /*
11 * Copyright © 2009 CNRS
2 * Copyright © 2009-2020 Inria. All rights reserved.
2 * Copyright © 2009-2021 Inria. All rights reserved.
33 * Copyright © 2009-2012 Université Bordeaux
44 * Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
55 * See COPYING in top-level directory.
7070 fprintf (where, " -p --physical Use physical object indexes for input\n");
7171 fprintf (where, "Miscellaneous options:\n");
7272 fprintf (where, " --version Report version and exit\n");
73 fprintf (where, " -h --help Show this usage\n");
7374 }
7475
7576 static void
278279 } else if (initiators[j].type == HWLOC_LOCATION_TYPE_OBJECT) {
279280 char types[64];
280281 hwloc_obj_type_snprintf(types, sizeof(types), initiators[j].location.object, 1);
281 snprintf(_inits, sizeof(_inits), "%s L#%u P#%u", types, initiators[j].location.object->logical_index, initiators[j].location.object->os_index);
282 if (initiators[j].location.object->os_index != (unsigned)-1)
283 snprintf(_inits, sizeof(_inits), "%s L#%u P#%u", types, initiators[j].location.object->logical_index, initiators[j].location.object->os_index);
284 else
285 snprintf(_inits, sizeof(_inits), "%s L#%u", types, initiators[j].location.object->logical_index);
282286 inits = _inits;
283287 } else {
284288 assert(0);
00 /*
1 * Copyright © 2013-2020 Inria. All rights reserved.
1 * Copyright © 2013-2021 Inria. All rights reserved.
22 * See COPYING in top-level directory.
33 */
44
1313 fprintf(where, "Options:\n");
1414 fprintf(where, " -R --reverse Reverse the sense of the difference\n");
1515 fprintf(where, " --version Report version and exit\n");
16 fprintf(where, " -h --help Show this usage\n");
1617 }
1718
1819 static int hwloc_diff_read(const char *inputdiff,
7071 char *callname, *input, *inputdiff, *output = NULL, *refname = NULL;
7172 int err;
7273
73 callname = argv[0];
74 callname = strrchr(argv[0], '/');
75 if (!callname)
76 callname = argv[0];
77 else
78 callname++;
79
7480 /* skip argv[0], handle options */
7581 argc--;
7682 argv++;
3232 even if they are not bound to any specific part of the machine.
3333 This is not supported on all operating systems.
3434 .TP
35 \fB\--uid <uid>\fR
35 \fB\-\-uid <uid>\fR
3636 Only show processes of the user whose UID is \fI<uid>\fR,
3737 or processes of all users if \fIall\fR is given.
3838 By default, only processes of the current user are displayed.
5454 thread is bound.
5555 This is currently only supported on Linux.
5656 .TP
57 \fB\-\-single\-ancestor\fR
58 When the object is bound to different objects,
59 report their common ancestor (even if it may be larger than the actual binding).
60 .TP
5761 \fB\-e\fR \fB\-\-get\-last\-cpu\-location\fR
5862 Report the last processors where the process/thread ran.
5963 Note that the result may already be outdated when reported
6973 and append \fBthe first line\fR of its output to the regular hwloc-ps
7074 line.
7175 .TP
76 \fB\-\-pid\-cmd env=<name>\fR
77 On Linux, try to read the value of environment variable \fIname\fR
78 in each process and display it at the end of the line.
79 .TP
80 \fB\-\-pid\-cmd mpirank\fR
81 On Linux, try to find the process MPI rank (by querying some widespread
82 environment variables) and display it at the end of the line.
83
84 .TP
7285 \fB\-\-json\-server\fR
7386 Run the tool as a JSON server that waits for other process' requests
7487 on a port and sends back binding information.
7992 .TP
8093 \fB\-v\fR \fB\-\-verbose\fR
8194 Increase verbosity of the JSON server.
95 .TP
96 \fB\-\-short\-name\fR
97 Show only the process short name instead of the path.
98 .TP
99 \fB\-\-version\fR
100 Report version and exit.
82101 .TP
83102 \fB\-h\fR \fB\-\-help\fR
84103 Display help message and exit.
124143
125144 $ hwloc-ps
126145 4759 Core:0 myprogram
146
147 If a process is bound on two cores of a larger package,
148 the output will show these cores.
149 Option \-\-single\-ancestor will rather return the package
150 even if it is actually larger than the binding here
151 (the process is not bound to Core:0 of Package:0):
152
153 $ hwloc-ps
154 4863 Core:1 Core:2 myprogram
155 $ hwloc-ps --single-ancestor
156 4863 Package:0 myprogram
127157
128158 If a process is not bound but 3 of his 4 threads are bound,
129159 it only appears in the thread-aware output (or if explicitly selected):
140170 $ hwloc-ps --pid 4759
141171 4759 Machine:0 myprogram
142172
143 To display the binding of already running MPI processes (launched by
144 Open MPI) and append their MPI rank (in MPI_COMM_WORLD) to each line:
173 On Linux, hwloc-ps may also display some process specific environment
174 variable at the end of the line. This is for instance useful
175 for identify MPI ranks among processes:
176
177 $ hwloc-ps --pid-cmd env=OMPI_COMM_WORLD_RANK
178 29093 PU:0 myprogram OMPI_COMM_WORLD_RANK=0
179 29094 PU:2 myprogram OMPI_COMM_WORLD_RANK=1
180 29095 PU:1 myprogram OMPI_COMM_WORLD_RANK=2
181 29096 PU:3 myprogram OMPI_COMM_WORLD_RANK=3
182
183 Some widespread MPI specific environment variables
184 (OMPI_COMM_WORLD_RANK, PMIX_RANK, PMI_RANK and SLURM_PROCID)
185 are actually directly recognized by hwloc-ps when requesting the \fImpirank\fR command:
186
187 $ hwloc-ps --pid-cmd mpirank
188 29093 PU:0 myprogram PMIX_RANK=0
189 29094 PU:2 myprogram PMIX_RANK=1
190 29095 PU:1 myprogram PMIX_RANK=2
191 29096 PU:3 myprogram PMIX_RANK=3
192
193 Beside reading environment variables, hwloc-ps may also append
194 the output of a custom program. Again, for reading the Open MPI
195 process rank:
145196
146197 $ hwloc-ps --pid-cmd myscript
147 29093 L1dCache:0 myprogram OMPI_COMM_WORLD_RANK=0
148 29094 L1dCache:2 myprogram OMPI_COMM_WORLD_RANK=1
149 29095 L1dCache:1 myprogram OMPI_COMM_WORLD_RANK=2
150 29096 L1dCache:3 myprogram OMPI_COMM_WORLD_RANK=3
151
152 where \fBmyscript\fR is a bash script doing:
198 29093 PU:0 myprogram OMPI_COMM_WORLD_RANK=0
199 29094 PU:2 myprogram OMPI_COMM_WORLD_RANK=1
200 29095 PU:1 myprogram OMPI_COMM_WORLD_RANK=2
201 29096 PU:3 myprogram OMPI_COMM_WORLD_RANK=3
202
203 where \fBmyscript\fR is a shell script doing:
153204
154205 #!/bin/sh
155206 cat /proc/$1/environ 2>/dev/null | xargs --null --max-args=1 echo | grep OMPI_COMM_WORLD_RANK
00 /*
1 * Copyright © 2009-2019 Inria. All rights reserved.
1 * Copyright © 2009-2021 Inria. All rights reserved.
22 * Copyright © 2009-2012 Université Bordeaux
33 * Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
44 * See COPYING in top-level directory.
3131 static char *only_name = NULL;
3232 static int show_cpuset = 0;
3333 static int logical = 1;
34 static int single_ancestor = 0;
3435 #define NO_ONLY_PID -1
3536 static long only_pid = NO_ONLY_PID;
3637 static long only_uid;
5354 fprintf (where, " -l --logical Use logical object indexes (default)\n");
5455 fprintf (where, " -p --physical Use physical object indexes\n");
5556 fprintf (where, " -c --cpuset Show cpuset instead of objects\n");
57 fprintf (where, " --single-ancestor Show a single ancestor containing the binding\n");
5658 #ifdef HWLOC_LINUX_SYS
5759 fprintf (where, " -t --threads Show threads\n");
5860 #endif
5961 fprintf (where, " -e --get-last-cpu-location\n");
6062 fprintf (where, " Retrieve the last processors where the tasks ran\n");
6163 fprintf (where, " --pid-cmd <cmd> Append the output of <cmd> <pid> to each PID line\n");
64 fprintf (where, " --short-name Show only the process short name instead of the path\n");
6265 fprintf (where, " --disallowed Include objects disallowed by administrative limitations\n");
6366 fprintf (where, " --json-server Run as a JSON server\n");
6467 fprintf (where, " --json-port <n> Use port <n> for JSON server (default is %d)\n", JSON_PORT);
6568 fprintf (where, " -v --verbose Increase verbosity\n");
69 fprintf (where, " --version Report version and exit\n");
70 fprintf (where, " -h --help Show this usage\n");
6671 }
6772
6873 static void print_task(hwloc_topology_t topology,
8085 } else {
8186 hwloc_bitmap_t remaining = hwloc_bitmap_dup(cpuset);
8287 int first = 1;
83 while (!hwloc_bitmap_iszero(remaining)) {
84 char type[64];
85 unsigned idx;
88 char type[64];
89 unsigned idx;
90 if (single_ancestor) {
91 hwloc_obj_t obj = hwloc_get_obj_covering_cpuset(topology, cpuset);
92 while (obj->parent && hwloc_bitmap_isequal(obj->cpuset, obj->parent->cpuset) && !hwloc_obj_type_is_cache(obj->parent->type) )
93 obj = obj->parent;
94
95 hwloc_obj_type_snprintf(type, sizeof(type), obj, 1);
96 idx = logical ? obj->logical_index : obj->os_index;
97 if (idx == (unsigned) -1)
98 printf("%s", type);
99 else
100 printf("%s:%u", type, idx);
101 } else {
102 while (!hwloc_bitmap_iszero(remaining)) {
86103 hwloc_obj_t obj = hwloc_get_first_largest_obj_inside_cpuset(topology, remaining);
87104 /* don't show a cache if there's something equivalent and nicer */
88105 while (hwloc_obj_type_is_cache(obj->type) && obj->arity == 1)
89 obj = obj->first_child;
106 obj = obj->first_child;
90107 hwloc_obj_type_snprintf(type, sizeof(type), obj, 1);
91108 idx = logical ? obj->logical_index : obj->os_index;
92109 if (idx == (unsigned) -1)
95112 printf("%s%s:%u", first ? "" : " ", type, idx);
96113 hwloc_bitmap_andnot(remaining, remaining, obj->cpuset);
97114 first = 0;
115 }
98116 }
99117 hwloc_bitmap_free(remaining);
100118 }
173191
174192 static void foreach_process_cb(hwloc_topology_t topology,
175193 struct hwloc_ps_process *proc,
176 void *cbdata __hwloc_attribute_unused)
177 {
194 void *cbdata)
195 {
196 const char *pidcmd = cbdata;
197
178198 /* don't print anything if the process isn't bound and if no threads are bound and if not showing all */
179199 if (!proc->bound && (!proc->nthreads || !proc->nboundthreads) && !show_all && !only_name)
180200 return;
201
202 if (pidcmd)
203 hwloc_ps_pidcmd(proc, pidcmd);
181204
182205 if (json_output)
183206 print_process_json(topology, proc);
190213 {
191214 if (only_pid == NO_ONLY_PID) {
192215 /* show all */
193 return hwloc_ps_foreach_process(topology, topocpuset, foreach_process_cb, NULL, psflags, only_name, only_uid, pidcmd);
216 return hwloc_ps_foreach_process(topology, topocpuset, foreach_process_cb, pidcmd, psflags, only_name, only_uid);
194217
195218 } else {
196219 /* show only one */
203226 proc.nthreads = 0;
204227 proc.nboundthreads = 0;
205228 proc.threads = NULL;
206 ret = hwloc_ps_read_process(topology, topocpuset, &proc, psflags, pidcmd);
229 ret = hwloc_ps_read_process(topology, topocpuset, &proc, psflags);
207230 if (ret >= 0) {
231
232 if (pidcmd)
233 hwloc_ps_pidcmd(&proc, pidcmd);
234
208235 if (json_output)
209236 print_process_json(topology, &proc);
210237 else
381408 #else
382409 fprintf (stderr, "Listing threads is currently only supported on Linux\n");
383410 #endif
411 } else if (!strcmp(argv[0], "--single-ancestor")) {
412 single_ancestor = 1;
384413 } else if (!strcmp(argv[0], "--pid")) {
385414 if (argc < 2) {
386415 usage(callname, stderr);
432461 } else if (!strcmp(argv[0], "-v") || !strcmp(argv[0], "--verbose")) {
433462 verbose++;
434463
464 } else if (!strcmp (argv[0], "--short-name")) {
465 psflags |= HWLOC_PS_FLAG_SHORTNAME;
466
467 } else if (!strcmp (argv[0], "--version")) {
468 printf("%s %s\n", callname, HWLOC_VERSION);
469 exit(EXIT_SUCCESS);
470
435471 } else if (!strcmp (argv[0], "-h") || !strcmp (argv[0], "--help")) {
436472 usage (callname, stderr);
437473 exit(EXIT_SUCCESS);
00 /*
11 * Copyright © 2009 CNRS
2 * Copyright © 2009-2020 Inria. All rights reserved.
2 * Copyright © 2009-2021 Inria. All rights reserved.
33 * Copyright © 2009-2012 Université Bordeaux
44 * Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
55 * See COPYING in top-level directory.
314314 hwloc_utils_print_distance_matrix(FILE *output, unsigned nbobjs, hwloc_obj_t *objs, hwloc_uint64_t *matrix, int logical, int show_types)
315315 {
316316 unsigned i, j;
317
318 /* column header */
319 fprintf(output, " index");
320 for(j=0; j<nbobjs; j++) {
321 if (show_types)
322 fprintf(output, " %s:%d",
323 hwloc_obj_type_string(objs[j]->type),
324 (int) (logical ? objs[j]->logical_index : objs[j]->os_index));
317 #define MATRIX_ITEM_SIZE_MAX 17 /* 16 + ending \0 */
318 char *headers;
319 char *values;
320 char *buf;
321 size_t len, max;
322
323 headers = malloc((nbobjs+1)*MATRIX_ITEM_SIZE_MAX);
324 values = malloc(nbobjs*nbobjs*MATRIX_ITEM_SIZE_MAX);
325 if (!headers || !values) {
326 free(headers);
327 free(values);
328 return;
329 }
330
331 snprintf(headers, MATRIX_ITEM_SIZE_MAX, " index" /* 16 */);
332 max = 5;
333 /* prepare column headers */
334 for(i=0, buf = headers + MATRIX_ITEM_SIZE_MAX;
335 i<nbobjs;
336 i++, buf += MATRIX_ITEM_SIZE_MAX) {
337 char tmp[MATRIX_ITEM_SIZE_MAX];
338 hwloc_obj_t obj = objs[i];
339 unsigned index = logical ? obj->logical_index : obj->os_index;
340 if (obj->type == HWLOC_OBJ_OS_DEVICE)
341 len = snprintf(tmp, MATRIX_ITEM_SIZE_MAX,
342 "%s", obj->name);
343 else if (obj->type == HWLOC_OBJ_PCI_DEVICE)
344 len = snprintf(tmp, MATRIX_ITEM_SIZE_MAX,
345 "%04x:%02x:%02x.%01x",
346 obj->attr->pcidev.domain, obj->attr->pcidev.bus, obj->attr->pcidev.dev, obj->attr->pcidev.func);
347 else if (show_types)
348 len = snprintf(tmp, MATRIX_ITEM_SIZE_MAX,
349 "%s:%d", hwloc_obj_type_string(obj->type), (int) index);
325350 else
326 fprintf(output, " % 5d",
327 (int) (logical ? objs[j]->logical_index : objs[j]->os_index));
328 }
351 len = snprintf(tmp, MATRIX_ITEM_SIZE_MAX,
352 "%d", (int) index);
353 if (len >= max)
354 max = len;
355 /* store it at the end of the slot in headers */
356 memcpy(buf + (MATRIX_ITEM_SIZE_MAX - len - 1), tmp, len+1);
357 /* and pad with spaces at the begining */
358 memset(buf, ' ', MATRIX_ITEM_SIZE_MAX - len - 1);
359 }
360 /* prepare values */
361 for(i=0, buf = values;
362 i<nbobjs;
363 i++) {
364 for(j=0; j<nbobjs; j++, buf += MATRIX_ITEM_SIZE_MAX) {
365 char tmp[MATRIX_ITEM_SIZE_MAX];
366 len = snprintf(tmp, MATRIX_ITEM_SIZE_MAX, "%llu", (unsigned long long) matrix[i*nbobjs+j]);
367 if (len >= max)
368 max = len;
369 /* store it at the end of the slot in values */
370 memcpy(buf + (MATRIX_ITEM_SIZE_MAX - len - 1), tmp, len+1);
371 /* and pad with spaces at the begining */
372 memset(buf, ' ', MATRIX_ITEM_SIZE_MAX - len - 1);
373 }
374 }
375
376 /* now display everything */
377 for(i=0; i<nbobjs + 1; i++)
378 fprintf(output, " %s", headers + i*MATRIX_ITEM_SIZE_MAX + MATRIX_ITEM_SIZE_MAX-max-1);
329379 fprintf(output, "\n");
330
331 /* each line */
332380 for(i=0; i<nbobjs; i++) {
333 /* row header */
334 fprintf(output, " % 5d",
335 (int) (logical ? objs[i]->logical_index : objs[i]->os_index));
336
337 /* row values */
338 for(j=0; j<nbobjs; j++) {
339 for(j=0; j<nbobjs; j++)
340 fprintf(output, " % 5d", (int) matrix[i*nbobjs+j]);
341 fprintf(output, "\n");
342 }
343 }
381 fprintf(output, " %s", headers + (i+1)*MATRIX_ITEM_SIZE_MAX + MATRIX_ITEM_SIZE_MAX-max-1);
382 for(j=0; j<nbobjs; j++)
383 fprintf(output, " %s", values + (i*nbobjs+j)*MATRIX_ITEM_SIZE_MAX + MATRIX_ITEM_SIZE_MAX-max-1);
384 fprintf(output, "\n");
385 }
386
387 free(headers);
388 free(values);
344389 }
345390
346391 static __hwloc_inline int
792837 HWLOC_UTILS_PARSING_FLAG(HWLOC_TOPOLOGY_FLAG_INCLUDE_DISALLOWED),
793838 HWLOC_UTILS_PARSING_FLAG(HWLOC_TOPOLOGY_FLAG_IS_THISSYSTEM),
794839 HWLOC_UTILS_PARSING_FLAG(HWLOC_TOPOLOGY_FLAG_THISSYSTEM_ALLOWED_RESOURCES),
795 HWLOC_UTILS_PARSING_FLAG(HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT)
840 HWLOC_UTILS_PARSING_FLAG(HWLOC_TOPOLOGY_FLAG_IMPORT_SUPPORT),
841 HWLOC_UTILS_PARSING_FLAG(HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_CPUBINDING),
842 HWLOC_UTILS_PARSING_FLAG(HWLOC_TOPOLOGY_FLAG_RESTRICT_TO_MEMBINDING),
843 HWLOC_UTILS_PARSING_FLAG(HWLOC_TOPOLOGY_FLAG_DONT_CHANGE_BINDING)
796844 };
797845
798846 return hwloc_utils_parse_flags(str, possible_flags, (int) sizeof(possible_flags) / sizeof(possible_flags[0]), "topology");
152152 <info name="Foo" value="Bar"/>
153153 </object>
154154 </object>
155 <distances2 type="PU" nbobjs="3" kind="5" indexing="os">
155 <distances2 type="PU" nbobjs="3" kind="5" name="mynewdistances" indexing="os">
156156 <indexes length="6">1 0 2 </indexes>
157157 <u64values length="27">10 80 80 80 10 80 80 80 10 </u64values>
158158 </distances2>
0 <?xml version="1.0" encoding="UTF-8"?>
1 <!DOCTYPE topology SYSTEM "hwloc2.dtd">
2 <topology version="2.0">
3 <object type="Machine" os_index="0" cpuset="0x00000303,0x03030000,,0x03030303" complete_cpuset="0x00000303,0x03030000,,0x03030303" allowed_cpuset="0x00000303,0x03030000,,0x03030303" nodeset="0x00000003" complete_nodeset="0x00000003" allowed_nodeset="0x00000003" gp_index="1">
4 <info name="PlatformName" value="PowerNV"/>
5 <info name="PlatformModel" value="PowerNV 8335-GTB"/>
6 <info name="Backend" value="Linux"/>
7 <info name="LinuxCgroup" value="/oar/bgoglin_1984938"/>
8 <info name="OSName" value="Linux"/>
9 <info name="OSRelease" value="4.19.0-14-powerpc64le"/>
10 <info name="OSVersion" value="#1 SMP Debian 4.19.171-2 (2021-01-30)"/>
11 <info name="HostName" value="drac-12.grenoble.grid5000.fr"/>
12 <info name="Architecture" value="ppc64le"/>
13 <info name="hwlocVersion" value="2.5.0a1-git"/>
14 <info name="ProcessName" value="lstopo-no-graphics"/>
15 <object type="Package" os_index="0" cpuset="0x03030303" complete_cpuset="0x03030303" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="3">
16 <info name="CPUModel" value="POWER8NVL, altivec supported"/>
17 <info name="CPURevision" value="1.0 (pvr 004c 0100)"/>
18 <object type="NUMANode" os_index="0" cpuset="0x03030303" complete_cpuset="0x03030303" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="264" local_memory="68556816384"/>
19 <object type="L3Cache" cpuset="0x00000003" complete_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="8" cache_size="8388608" depth="3" cache_linesize="0" cache_associativity="0" cache_type="0">
20 <object type="Core" os_index="8" cpuset="0x00000003" complete_cpuset="0x00000003" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="2">
21 <object type="PU" os_index="0" cpuset="0x00000001" complete_cpuset="0x00000001" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="4"/>
22 <object type="PU" os_index="1" cpuset="0x00000002" complete_cpuset="0x00000002" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="9"/>
23 </object>
24 </object>
25 <object type="L3Cache" cpuset="0x00000300" complete_cpuset="0x00000300" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="21" cache_size="8388608" depth="3" cache_linesize="0" cache_associativity="0" cache_type="0">
26 <object type="Core" os_index="16" cpuset="0x00000300" complete_cpuset="0x00000300" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="16">
27 <object type="PU" os_index="8" cpuset="0x00000100" complete_cpuset="0x00000100" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="17"/>
28 <object type="PU" os_index="9" cpuset="0x00000200" complete_cpuset="0x00000200" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="22"/>
29 </object>
30 </object>
31 <object type="L3Cache" cpuset="0x00030000" complete_cpuset="0x00030000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="34" cache_size="8388608" depth="3" cache_linesize="0" cache_associativity="0" cache_type="0">
32 <object type="Core" os_index="32" cpuset="0x00030000" complete_cpuset="0x00030000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="29">
33 <object type="PU" os_index="16" cpuset="0x00010000" complete_cpuset="0x00010000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="30"/>
34 <object type="PU" os_index="17" cpuset="0x00020000" complete_cpuset="0x00020000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="35"/>
35 </object>
36 </object>
37 <object type="L3Cache" cpuset="0x03000000" complete_cpuset="0x03000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="47" cache_size="8388608" depth="3" cache_linesize="0" cache_associativity="0" cache_type="0">
38 <object type="Core" os_index="40" cpuset="0x03000000" complete_cpuset="0x03000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="42">
39 <object type="PU" os_index="24" cpuset="0x01000000" complete_cpuset="0x01000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="43"/>
40 <object type="PU" os_index="25" cpuset="0x02000000" complete_cpuset="0x02000000" nodeset="0x00000001" complete_nodeset="0x00000001" gp_index="48"/>
41 </object>
42 </object>
43 <object type="Bridge" gp_index="304" bridge_type="0-1" depth="0" bridge_pci="0002:[00-01]">
44 <object type="Bridge" gp_index="287" bridge_type="1-1" depth="1" bridge_pci="0002:[01-01]" pci_busid="0002:00:00.0" pci_type="0604 [1014:03dc] [0000:0000] 00" pci_link_speed="7.876923">
45 <object type="PCIDev" gp_index="282" pci_busid="0002:01:00.0" pci_type="0302 [10de:15f9] [10de:116b] a1" pci_link_speed="15.753846">
46 <object type="OSDev" gp_index="328" name="cuda0" subtype="CUDA" osdev_type="5">
47 <info name="Backend" value="CUDA"/>
48 <info name="GPUVendor" value="NVIDIA Corporation"/>
49 <info name="GPUModel" value="Tesla P100-SXM2-16GB"/>
50 <info name="CUDAGlobalMemorySize" value="16671616"/>
51 <info name="CUDAL2CacheSize" value="4096"/>
52 <info name="CUDAMultiProcessors" value="56"/>
53 <info name="CUDACoresPerMP" value="64"/>
54 <info name="CUDASharedMemorySizePerMP" value="48"/>
55 </object>
56 <object type="OSDev" gp_index="324" name="opencl0d0" subtype="OpenCL" osdev_type="5">
57 <info name="Backend" value="OpenCL"/>
58 <info name="OpenCLDeviceType" value="GPU"/>
59 <info name="GPUVendor" value="NVIDIA Corporation"/>
60 <info name="GPUModel" value="Tesla P100-SXM2-16GB"/>
61 <info name="OpenCLPlatformIndex" value="0"/>
62 <info name="OpenCLPlatformName" value="NVIDIA CUDA"/>
63 <info name="OpenCLPlatformDeviceIndex" value="0"/>
64 <info name="OpenCLComputeUnits" value="56"/>
65 <info name="OpenCLGlobalMemorySize" value="16671616"/>
66 </object>
67 <object type="OSDev" gp_index="332" name="nvml0" subtype="NVML" osdev_type="1">
68 <info name="Backend" value="NVML"/>
69 <info name="GPUVendor" value="NVIDIA Corporation"/>
70 <info name="GPUModel" value="Tesla P100-SXM2-16GB"/>
71 <info name="NVIDIASerial" value="0322716104625"/>
72 <info name="NVIDIAUUID" value="GPU-77bf6b9a-6906-5a93-d28b-b77d2c23d1d2"/>
73 </object>
74 </object>
75 </object>
76 </object>
77 <object type="Bridge" gp_index="305" bridge_type="0-1" depth="0" bridge_pci="0003:[00-01]">
78 <object type="Bridge" gp_index="271" bridge_type="1-1" depth="1" bridge_pci="0003:[01-01]" pci_busid="0003:00:00.0" pci_type="0604 [1014:03dc] [0000:0000] 00" pci_link_speed="7.876923">
79 <object type="PCIDev" gp_index="268" pci_busid="0003:01:00.0" pci_type="0302 [10de:15f9] [10de:116b] a1" pci_link_speed="15.753846">
80 <object type="OSDev" gp_index="329" name="cuda1" subtype="CUDA" osdev_type="5">
81 <info name="Backend" value="CUDA"/>
82 <info name="GPUVendor" value="NVIDIA Corporation"/>
83 <info name="GPUModel" value="Tesla P100-SXM2-16GB"/>
84 <info name="CUDAGlobalMemorySize" value="16671616"/>
85 <info name="CUDAL2CacheSize" value="4096"/>
86 <info name="CUDAMultiProcessors" value="56"/>
87 <info name="CUDACoresPerMP" value="64"/>
88 <info name="CUDASharedMemorySizePerMP" value="48"/>
89 </object>
90 <object type="OSDev" gp_index="325" name="opencl0d1" subtype="OpenCL" osdev_type="5">
91 <info name="Backend" value="OpenCL"/>
92 <info name="OpenCLDeviceType" value="GPU"/>
93 <info name="GPUVendor" value="NVIDIA Corporation"/>
94 <info name="GPUModel" value="Tesla P100-SXM2-16GB"/>
95 <info name="OpenCLPlatformIndex" value="0"/>
96 <info name="OpenCLPlatformName" value="NVIDIA CUDA"/>
97 <info name="OpenCLPlatformDeviceIndex" value="1"/>
98 <info name="OpenCLComputeUnits" value="56"/>
99 <info name="OpenCLGlobalMemorySize" value="16671616"/>
100 </object>
101 <object type="OSDev" gp_index="333" name="nvml1" subtype="NVML" osdev_type="1">
102 <info name="Backend" value="NVML"/>
103 <info name="GPUVendor" value="NVIDIA Corporation"/>
104 <info name="GPUModel" value="Tesla P100-SXM2-16GB"/>
105 <info name="NVIDIASerial" value="0322716103693"/>
106 <info name="NVIDIAUUID" value="GPU-00fc8f7f-8206-b5f8-1d34-e600a300e314"/>
107 </object>
108 </object>
109 </object>
110 </object>
111 </object>
112 <object type="Package" os_index="1" cpuset="0x00000303,0x03030000,,0x0" complete_cpuset="0x00000303,0x03030000,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="134">
113 <info name="CPUModel" value="POWER8NVL, altivec supported"/>
114 <info name="CPURevision" value="1.0 (pvr 004c 0100)"/>
115 <object type="NUMANode" os_index="1" cpuset="0x00000303,0x03030000,,0x0" complete_cpuset="0x00000303,0x03030000,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="265" local_memory="68450713600"/>
116 <object type="L3Cache" cpuset="0x00030000,,0x0" complete_cpuset="0x00030000,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="139" cache_size="8388608" depth="3" cache_linesize="0" cache_associativity="0" cache_type="0">
117 <object type="Core" os_index="136" cpuset="0x00030000,,0x0" complete_cpuset="0x00030000,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="133">
118 <object type="PU" os_index="80" cpuset="0x00010000,,0x0" complete_cpuset="0x00010000,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="135"/>
119 <object type="PU" os_index="81" cpuset="0x00020000,,0x0" complete_cpuset="0x00020000,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="140"/>
120 </object>
121 </object>
122 <object type="L3Cache" cpuset="0x03000000,,0x0" complete_cpuset="0x03000000,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="152" cache_size="8388608" depth="3" cache_linesize="0" cache_associativity="0" cache_type="0">
123 <object type="Core" os_index="144" cpuset="0x03000000,,0x0" complete_cpuset="0x03000000,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="147">
124 <object type="PU" os_index="88" cpuset="0x01000000,,0x0" complete_cpuset="0x01000000,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="148"/>
125 <object type="PU" os_index="89" cpuset="0x02000000,,0x0" complete_cpuset="0x02000000,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="153"/>
126 </object>
127 </object>
128 <object type="L3Cache" cpuset="0x00000003,,,0x0" complete_cpuset="0x00000003,,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="165" cache_size="8388608" depth="3" cache_linesize="0" cache_associativity="0" cache_type="0">
129 <object type="Core" os_index="152" cpuset="0x00000003,,,0x0" complete_cpuset="0x00000003,,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="160">
130 <object type="PU" os_index="96" cpuset="0x00000001,,,0x0" complete_cpuset="0x00000001,,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="161"/>
131 <object type="PU" os_index="97" cpuset="0x00000002,,,0x0" complete_cpuset="0x00000002,,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="166"/>
132 </object>
133 </object>
134 <object type="L3Cache" cpuset="0x00000300,,,0x0" complete_cpuset="0x00000300,,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="178" cache_size="8388608" depth="3" cache_linesize="0" cache_associativity="0" cache_type="0">
135 <object type="Core" os_index="168" cpuset="0x00000300,,,0x0" complete_cpuset="0x00000300,,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="173">
136 <object type="PU" os_index="104" cpuset="0x00000100,,,0x0" complete_cpuset="0x00000100,,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="174"/>
137 <object type="PU" os_index="105" cpuset="0x00000200,,,0x0" complete_cpuset="0x00000200,,,0x0" nodeset="0x00000002" complete_nodeset="0x00000002" gp_index="179"/>
138 </object>
139 </object>
140 <object type="Bridge" gp_index="310" bridge_type="0-1" depth="0" bridge_pci="000a:[00-01]">
141 <object type="Bridge" gp_index="294" bridge_type="1-1" depth="1" bridge_pci="000a:[01-01]" pci_busid="000a:00:00.0" pci_type="0604 [1014:03dc] [0000:0000] 00" pci_link_speed="7.876923">
142 <object type="PCIDev" gp_index="289" pci_busid="000a:01:00.0" pci_type="0302 [10de:15f9] [10de:116b] a1" pci_link_speed="15.753846">
143 <object type="OSDev" gp_index="330" name="cuda2" subtype="CUDA" osdev_type="5">
144 <info name="Backend" value="CUDA"/>
145 <info name="GPUVendor" value="NVIDIA Corporation"/>
146 <info name="GPUModel" value="Tesla P100-SXM2-16GB"/>
147 <info name="CUDAGlobalMemorySize" value="16671616"/>
148 <info name="CUDAL2CacheSize" value="4096"/>
149 <info name="CUDAMultiProcessors" value="56"/>
150 <info name="CUDACoresPerMP" value="64"/>
151 <info name="CUDASharedMemorySizePerMP" value="48"/>
152 </object>
153 <object type="OSDev" gp_index="326" name="opencl0d2" subtype="OpenCL" osdev_type="5">
154 <info name="Backend" value="OpenCL"/>
155 <info name="OpenCLDeviceType" value="GPU"/>
156 <info name="GPUVendor" value="NVIDIA Corporation"/>
157 <info name="GPUModel" value="Tesla P100-SXM2-16GB"/>
158 <info name="OpenCLPlatformIndex" value="0"/>
159 <info name="OpenCLPlatformName" value="NVIDIA CUDA"/>
160 <info name="OpenCLPlatformDeviceIndex" value="2"/>
161 <info name="OpenCLComputeUnits" value="56"/>
162 <info name="OpenCLGlobalMemorySize" value="16671616"/>
163 </object>
164 <object type="OSDev" gp_index="334" name="nvml2" subtype="NVML" osdev_type="1">
165 <info name="Backend" value="NVML"/>
166 <info name="GPUVendor" value="NVIDIA Corporation"/>
167 <info name="GPUModel" value="Tesla P100-SXM2-16GB"/>
168 <info name="NVIDIASerial" value="0322716104229"/>
169 <info name="NVIDIAUUID" value="GPU-ea919830-8251-6a30-e379-daeb01448779"/>
170 </object>
171 </object>
172 </object>
173 </object>
174 <object type="Bridge" gp_index="311" bridge_type="0-1" depth="0" bridge_pci="000b:[00-01]">
175 <object type="Bridge" gp_index="279" bridge_type="1-1" depth="1" bridge_pci="000b:[01-01]" pci_busid="000b:00:00.0" pci_type="0604 [1014:03dc] [0000:0000] 00" pci_link_speed="7.876923">
176 <object type="PCIDev" gp_index="273" pci_busid="000b:01:00.0" pci_type="0302 [10de:15f9] [10de:116b] a1" pci_link_speed="15.753846">
177 <object type="OSDev" gp_index="331" name="cuda3" subtype="CUDA" osdev_type="5">
178 <info name="Backend" value="CUDA"/>
179 <info name="GPUVendor" value="NVIDIA Corporation"/>
180 <info name="GPUModel" value="Tesla P100-SXM2-16GB"/>
181 <info name="CUDAGlobalMemorySize" value="16671616"/>
182 <info name="CUDAL2CacheSize" value="4096"/>
183 <info name="CUDAMultiProcessors" value="56"/>
184 <info name="CUDACoresPerMP" value="64"/>
185 <info name="CUDASharedMemorySizePerMP" value="48"/>
186 </object>
187 <object type="OSDev" gp_index="327" name="opencl0d3" subtype="OpenCL" osdev_type="5">
188 <info name="Backend" value="OpenCL"/>
189 <info name="OpenCLDeviceType" value="GPU"/>
190 <info name="GPUVendor" value="NVIDIA Corporation"/>
191 <info name="GPUModel" value="Tesla P100-SXM2-16GB"/>
192 <info name="OpenCLPlatformIndex" value="0"/>
193 <info name="OpenCLPlatformName" value="NVIDIA CUDA"/>
194 <info name="OpenCLPlatformDeviceIndex" value="3"/>
195 <info name="OpenCLComputeUnits" value="56"/>
196 <info name="OpenCLGlobalMemorySize" value="16671616"/>
197 </object>
198 <object type="OSDev" gp_index="335" name="nvml3" subtype="NVML" osdev_type="1">
199 <info name="Backend" value="NVML"/>
200 <info name="GPUVendor" value="NVIDIA Corporation"/>
201 <info name="GPUModel" value="Tesla P100-SXM2-16GB"/>
202 <info name="NVIDIASerial" value="0322816173796"/>
203 <info name="NVIDIAUUID" value="GPU-93f5db36-624e-1453-40ab-85cc675aa903"/>
204 </object>
205 </object>
206 </object>
207 </object>
208 </object>
209 </object>
210 <distances2 type="NUMANode" nbobjs="2" kind="5" name="NUMALatency" indexing="os">
211 <indexes length="4">0 1 </indexes>
212 <u64values length="12">10 40 40 10 </u64values>
213 </distances2>
214 <distances2hetero nbobjs="6" kind="25" name="NVLinkBandwidth">
215 <indexes length="66">OSDev:324 OSDev:325 OSDev:326 OSDev:327 NUMANode:264 NUMANode:265 </indexes>
216 <u64values length="44">1000000 40000 0 0 40000 0 40000 1000000 0 0 </u64values>
217 <u64values length="38">40000 0 0 0 1000000 40000 0 40000 0 0 </u64values>
218 <u64values length="48">40000 1000000 0 40000 40000 40000 0 0 1000000 0 </u64values>
219 <u64values length="26">0 0 40000 40000 0 1000000 </u64values>
220 </distances2hetero>
221 <support name="discovery.pu"/>
222 <support name="discovery.numa"/>
223 <support name="discovery.numa_memory"/>
224 <support name="discovery.disallowed_pu"/>
225 <support name="discovery.disallowed_numa"/>
226 <support name="cpubind.set_thisproc_cpubind"/>
227 <support name="cpubind.get_thisproc_cpubind"/>
228 <support name="cpubind.set_proc_cpubind"/>
229 <support name="cpubind.get_proc_cpubind"/>
230 <support name="cpubind.set_thisthread_cpubind"/>
231 <support name="cpubind.get_thisthread_cpubind"/>
232 <support name="cpubind.set_thread_cpubind"/>
233 <support name="cpubind.get_thread_cpubind"/>
234 <support name="cpubind.get_thisproc_last_cpu_location"/>
235 <support name="cpubind.get_proc_last_cpu_location"/>
236 <support name="cpubind.get_thisthread_last_cpu_location"/>
237 <support name="membind.set_thisthread_membind"/>
238 <support name="membind.get_thisthread_membind"/>
239 <support name="membind.set_area_membind"/>
240 <support name="membind.get_area_membind"/>
241 <support name="membind.alloc_membind"/>
242 <support name="membind.firsttouch_membind"/>
243 <support name="membind.bind_membind"/>
244 <support name="membind.interleave_membind"/>
245 <support name="membind.migrate_membind"/>
246 <support name="membind.get_area_memlocation"/>
247 <support name="custom.exported_support"/>
248 <cpukind cpuset="0x00000303,0x03030000,,0x03030303">
249 <info name="FrequencyMaxMHz" value="4023"/>
250 </cpukind>
251 </topology>
11 #-*-sh-*-
22
33 #
4 # Copyright © 2009-2020 Inria. All rights reserved.
4 # Copyright © 2009-2021 Inria. All rights reserved.
55 # Copyright © 2014 Cisco Systems, Inc. All rights reserved.
66 # See COPYING in top-level directory.
77 #
3636 (umask 077 && mkdir "$tmp")
3737 } || exit $?
3838 file="$tmp/test-hwloc-annotate.output"
39 file2="$tmp/test-hwloc-annotate.output2"
3940 distances="$tmp/test-hwloc-annotate.distances"
4041
4142 set -e
6667 $annotate $file $file -- dummy -- cpukind 0x3 4 0 foo2 bar2
6768 $annotate $file $file -- dummy -- cpukind 0xc 7 0 foo2 bar3
6869 cat > $distances << EOF
70 name=mynewdistances
6971 5
70 3
72 4
7173 pu:2
74 pu:3
7275 pu:0
7376 pu:1
74 3*1
77 4*1
7578 EOF
7679 $annotate $file $file dummy distances $distances group\$
80 $annotate $file $file dummy distances-transform mynewdistances remove-obj pu:3
7781
7882 @DIFF@ @HWLOC_DIFF_U@ @HWLOC_DIFF_W@ $srcdir/test-hwloc-annotate.output "$file"
83
84
85 $annotate $srcdir/../../tests/hwloc/xml/power8gpudistances.xml $file2 -- dummy -- distances-transform NVLinkBandwidth replace-objs nvml opencl
86 $annotate $file2 $file2 -- dummy -- distances-transform NVLinkBandwidth replace-objs package numa
87
88 @DIFF@ @HWLOC_DIFF_U@ @HWLOC_DIFF_W@ $srcdir/test-hwloc-annotate.output2 "$file2"
89
90
7991 rm -rf "$tmp"
360360 CONFIGURE_DEPENDENCIES = @CONFIGURE_DEPENDENCIES@
361361 CPP = @CPP@
362362 CPPFLAGS = @CPPFLAGS@
363 CUDA_VERSION = @CUDA_VERSION@
363364 CXX = @CXX@
364365 CXXCPP = @CXXCPP@
365366 CXXDEPMODE = @CXXDEPMODE@
386387 HWLOC_CAIRO_LIBS = @HWLOC_CAIRO_LIBS@
387388 HWLOC_CFLAGS = @HWLOC_CFLAGS@
388389 HWLOC_CPPFLAGS = @HWLOC_CPPFLAGS@
390 HWLOC_CUDART_CFLAGS = @HWLOC_CUDART_CFLAGS@
391 HWLOC_CUDART_CPPFLAGS = @HWLOC_CUDART_CPPFLAGS@
392 HWLOC_CUDART_LDFLAGS = @HWLOC_CUDART_LDFLAGS@
393 HWLOC_CUDART_LIBS = @HWLOC_CUDART_LIBS@
394 HWLOC_CUDA_CFLAGS = @HWLOC_CUDA_CFLAGS@
395 HWLOC_CUDA_CPPFLAGS = @HWLOC_CUDA_CPPFLAGS@
396 HWLOC_CUDA_LDFLAGS = @HWLOC_CUDA_LDFLAGS@
389397 HWLOC_CUDA_LIBS = @HWLOC_CUDA_LIBS@
390398 HWLOC_DIFF_U = @HWLOC_DIFF_U@
391399 HWLOC_DIFF_W = @HWLOC_DIFF_W@
396404 HWLOC_EMBEDDED_LDFLAGS = @HWLOC_EMBEDDED_LDFLAGS@
397405 HWLOC_EMBEDDED_LIBS = @HWLOC_EMBEDDED_LIBS@
398406 HWLOC_GL_LIBS = @HWLOC_GL_LIBS@
407 HWLOC_HAVE_LEVELZERO = @HWLOC_HAVE_LEVELZERO@
399408 HWLOC_HAVE_LIBXML2 = @HWLOC_HAVE_LIBXML2@
400409 HWLOC_HAVE_NVML = @HWLOC_HAVE_NVML@
401410 HWLOC_HAVE_OPENCL = @HWLOC_HAVE_OPENCL@
402411 HWLOC_HAVE_RSMI = @HWLOC_HAVE_RSMI@
412 HWLOC_IBVERBS_LIBS = @HWLOC_IBVERBS_LIBS@
403413 HWLOC_LDFLAGS = @HWLOC_LDFLAGS@
414 HWLOC_LEVELZERO_CFLAGS = @HWLOC_LEVELZERO_CFLAGS@
415 HWLOC_LEVELZERO_LIBS = @HWLOC_LEVELZERO_LIBS@
404416 HWLOC_LIBS = @HWLOC_LIBS@
405417 HWLOC_LIBS_PRIVATE = @HWLOC_LIBS_PRIVATE@
406418 HWLOC_LIBXML2_CFLAGS = @HWLOC_LIBXML2_CFLAGS@
410422 HWLOC_MS_LIB_ARCH = @HWLOC_MS_LIB_ARCH@
411423 HWLOC_NUMA_CFLAGS = @HWLOC_NUMA_CFLAGS@
412424 HWLOC_NUMA_LIBS = @HWLOC_NUMA_LIBS@
425 HWLOC_NVML_CPPFLAGS = @HWLOC_NVML_CPPFLAGS@
426 HWLOC_NVML_LDFLAGS = @HWLOC_NVML_LDFLAGS@
413427 HWLOC_NVML_LIBS = @HWLOC_NVML_LIBS@
414 HWLOC_OPENCL_CFLAGS = @HWLOC_OPENCL_CFLAGS@
428 HWLOC_OPENCL_CPPFLAGS = @HWLOC_OPENCL_CPPFLAGS@
415429 HWLOC_OPENCL_LDFLAGS = @HWLOC_OPENCL_LDFLAGS@
416430 HWLOC_OPENCL_LIBS = @HWLOC_OPENCL_LIBS@
417431 HWLOC_PCIACCESS_CFLAGS = @HWLOC_PCIACCESS_CFLAGS@
537551 prefix = @prefix@
538552 program_transform_name = @program_transform_name@
539553 psdir = @psdir@
554 runstatedir = @runstatedir@
540555 sbindir = @sbindir@
541556 sharedstatedir = @sharedstatedir@
542557 srcdir = @srcdir@
541541 CONFIGURE_DEPENDENCIES = @CONFIGURE_DEPENDENCIES@
542542 CPP = @CPP@
543543 CPPFLAGS = @CPPFLAGS@
544 CUDA_VERSION = @CUDA_VERSION@
544545 CXX = @CXX@
545546 CXXCPP = @CXXCPP@
546547 CXXDEPMODE = @CXXDEPMODE@
567568 HWLOC_CAIRO_LIBS = @HWLOC_CAIRO_LIBS@
568569 HWLOC_CFLAGS = @HWLOC_CFLAGS@
569570 HWLOC_CPPFLAGS = @HWLOC_CPPFLAGS@
571 HWLOC_CUDART_CFLAGS = @HWLOC_CUDART_CFLAGS@
572 HWLOC_CUDART_CPPFLAGS = @HWLOC_CUDART_CPPFLAGS@
573 HWLOC_CUDART_LDFLAGS = @HWLOC_CUDART_LDFLAGS@
574 HWLOC_CUDART_LIBS = @HWLOC_CUDART_LIBS@
575 HWLOC_CUDA_CFLAGS = @HWLOC_CUDA_CFLAGS@
576 HWLOC_CUDA_CPPFLAGS = @HWLOC_CUDA_CPPFLAGS@
577 HWLOC_CUDA_LDFLAGS = @HWLOC_CUDA_LDFLAGS@
570578 HWLOC_CUDA_LIBS = @HWLOC_CUDA_LIBS@
571579 HWLOC_DIFF_U = @HWLOC_DIFF_U@
572580 HWLOC_DIFF_W = @HWLOC_DIFF_W@
577585 HWLOC_EMBEDDED_LDFLAGS = @HWLOC_EMBEDDED_LDFLAGS@
578586 HWLOC_EMBEDDED_LIBS = @HWLOC_EMBEDDED_LIBS@
579587 HWLOC_GL_LIBS = @HWLOC_GL_LIBS@
588 HWLOC_HAVE_LEVELZERO = @HWLOC_HAVE_LEVELZERO@
580589 HWLOC_HAVE_LIBXML2 = @HWLOC_HAVE_LIBXML2@
581590 HWLOC_HAVE_NVML = @HWLOC_HAVE_NVML@
582591 HWLOC_HAVE_OPENCL = @HWLOC_HAVE_OPENCL@
583592 HWLOC_HAVE_RSMI = @HWLOC_HAVE_RSMI@
593 HWLOC_IBVERBS_LIBS = @HWLOC_IBVERBS_LIBS@
584594 HWLOC_LDFLAGS = @HWLOC_LDFLAGS@
595 HWLOC_LEVELZERO_CFLAGS = @HWLOC_LEVELZERO_CFLAGS@
596 HWLOC_LEVELZERO_LIBS = @HWLOC_LEVELZERO_LIBS@
585597 HWLOC_LIBS = @HWLOC_LIBS@
586598 HWLOC_LIBS_PRIVATE = @HWLOC_LIBS_PRIVATE@
587599 HWLOC_LIBXML2_CFLAGS = @HWLOC_LIBXML2_CFLAGS@
591603 HWLOC_MS_LIB_ARCH = @HWLOC_MS_LIB_ARCH@
592604 HWLOC_NUMA_CFLAGS = @HWLOC_NUMA_CFLAGS@
593605 HWLOC_NUMA_LIBS = @HWLOC_NUMA_LIBS@
606 HWLOC_NVML_CPPFLAGS = @HWLOC_NVML_CPPFLAGS@
607 HWLOC_NVML_LDFLAGS = @HWLOC_NVML_LDFLAGS@
594608 HWLOC_NVML_LIBS = @HWLOC_NVML_LIBS@
595 HWLOC_OPENCL_CFLAGS = @HWLOC_OPENCL_CFLAGS@
609 HWLOC_OPENCL_CPPFLAGS = @HWLOC_OPENCL_CPPFLAGS@
596610 HWLOC_OPENCL_LDFLAGS = @HWLOC_OPENCL_LDFLAGS@
597611 HWLOC_OPENCL_LIBS = @HWLOC_OPENCL_LIBS@
598612 HWLOC_PCIACCESS_CFLAGS = @HWLOC_PCIACCESS_CFLAGS@
718732 prefix = @prefix@
719733 program_transform_name = @program_transform_name@
720734 psdir = @psdir@
735 runstatedir = @runstatedir@
721736 sbindir = @sbindir@
722737 sharedstatedir = @sharedstatedir@
723738 srcdir = @srcdir@
00 /*
11 * Copyright © 2009 CNRS
2 * Copyright © 2009-2020 Inria. All rights reserved.
2 * Copyright © 2009-2021 Inria. All rights reserved.
33 * Copyright © 2009-2013, 2015 Université Bordeaux
44 * Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
55 * See COPYING in top-level directory.
10481048 mb >= 10240 ? "%llu GB" : "%llu MB",
10491049 mb >= 10240 ? mb/1024 : mb);
10501050 }
1051 }
1051 } else if (!strcmp(obj->subtype, "VectorEngine")) {
1052 /* NEC Vector Engine */
1053 const char *value;
1054 value = hwloc_obj_get_info_by_name(obj, "VectorEngineCores");
1055 if (value) {
1056 unsigned long long cu = strtoull(value, NULL, 10);
1057 snprintf(lud->text[lud->ntext++].text, sizeof(lud->text[0].text),
1058 "%llu cores", cu);
1059 }
1060 value = hwloc_obj_get_info_by_name(obj, "VectorEngineMemorySize");
1061 if (value) {
1062 unsigned long long mb = strtoull(value, NULL, 10) / 1024;
1063 snprintf(lud->text[lud->ntext++].text, sizeof(lud->text[0].text),
1064 mb >= 10240 ? "%llu GB" : "%llu MB",
1065 mb >= 10240 ? mb/1024 : mb);
1066 }
1067 }
10521068
10531069 } else if (HWLOC_OBJ_OSDEV_BLOCK == obj->attr->osdev.type) {
10541070 /* Block */
00 .\" -*- nroff -*-
1 .\" Copyright © 2009-2020 Inria. All rights reserved.
1 .\" Copyright © 2009-2021 Inria. All rights reserved.
22 .\" Copyright © 2009-2010 Université of Bordeaux
33 .\" Copyright © 2009-2010 Cisco Systems, Inc. All rights reserved.
44 .\" Copyright © 2020 Hewlett Packard Enterprise. All rights reserved.
8989 \fB\-\-distances\fR
9090 Only display distance matrices.
9191 .TP
92 \fB\-\-distances-transform\fR <links|merge-switch-ports|transitive-closure>
93 Try applying a transformation to distances structures before displaying them.
94 See hwloc_distances_transform() for details.
95 More transformations may be applied using hwloc-annotate(1)
96 (and it may save their output to XML).
97 .TP
9298 \fB\-\-memattrs\fR
9399 Only display memory attributes.
94100 All of them are displayed (while the default textual output selects
96102 .TP
97103 \fB\-\-cpukinds\fR
98104 Only display CPU kinds.
105 .TP
106 B\-\-windows\-processor\-groups\fR
107 On Windows, only show information about processor groups.
108 All of them are displayed, while the default verbose output
109 only shows them if there are more than one.
99110 .TP
100111 \fB\-f\fR \fB\-\-force\fR
101112 If the destination file already exists, overwrite it.
195206 This sets HWLOC_TYPE_FILTER_KEEP_STRUCTURE for all object types.
196207 This is identical to \fB\-\-filter all:structure\fR.
197208 .TP
198 \fB\-\-no-factorize\fR \fB\-\-no-factorize\fR=<type>
209 \fB\-\-no\-factorize\fR \fB\-\-no\-factorize\fR=<type>
199210 Never factorize identical objects in the graphical output.
200211
201212 If an object type is given, only factorizing of these objects is disabled.
217228 By default, identical sibling PCI devices (such as many virtual functions
218229 inside a single physical device) are collapsed.
219230 .TP
220 \fB\-\-no\-cpukinds
231 \fB\-\-no\-cpukinds\fR
221232 Do not show different kinds of CPUs in the graphical output.
222233 By default, when supported, different types of lines, thickness
223234 and bold font may be used to display PU boxes of different kinds.
00 /*
11 * Copyright © 2009 CNRS
2 * Copyright © 2009-2020 Inria. All rights reserved.
2 * Copyright © 2009-2021 Inria. All rights reserved.
33 * Copyright © 2009-2012 Université Bordeaux
44 * Copyright © 2009-2011 Cisco Systems, Inc. All rights reserved.
55 * See COPYING in top-level directory.
1212 #include <stdio.h>
1313 #include <string.h>
1414 #include <errno.h>
15
16 #ifdef HWLOC_WIN_SYS
17 #include <hwloc/windows.h>
18 #endif
1519
1620 #include "lstopo.h"
1721 #include "misc.h"
227231 const char *name = hwloc_distances_get_name(topology, dist[j]);
228232 if (!name)
229233 name = "(null)";
234 if (loutput->transform_distances != -1)
235 hwloc_distances_transform(topology, dist[j], loutput->transform_distances, NULL, 0);
230236 if (dist[j]->kind & HWLOC_DISTANCES_KIND_HETEROGENEOUS_TYPES) {
231237 fprintf(output, "Relative %s matrix (name %s kind %lu) between %u heterogeneous objects by %s indexes:\n",
232238 kindmeans, name, dist[j]->kind,
247253 free(dist);
248254 }
249255
256 static void output_memattr_obj(struct lstopo_output *loutput,
257 hwloc_obj_t obj)
258 {
259 enum lstopo_index_type_e index_type = loutput->index_type;
260 unsigned idx = (index_type == LSTOPO_INDEX_TYPE_PHYSICAL ? obj->os_index : obj->logical_index);
261 char objtype[16];
262
263 hwloc_obj_type_snprintf(objtype, sizeof(objtype), obj, 0);
264 if (idx == (unsigned) -1)
265 printf("%s %c#-1", objtype,
266 index_type == LSTOPO_INDEX_TYPE_PHYSICAL ? 'P' : 'L');
267 else
268 printf("%s %c#%u", objtype,
269 index_type == LSTOPO_INDEX_TYPE_PHYSICAL ? 'P' : 'L',
270 idx);
271
272 if (obj->name)
273 printf(" \"%s\"", obj->name);
274 }
275
250276 static void output_memattr_initiator(struct lstopo_output *loutput,
251277 struct hwloc_location *initiator)
252278 {
253279 hwloc_topology_t topology = loutput->topology;
254 enum lstopo_index_type_e index_type = loutput->index_type;
255280
256281 if (initiator->type == HWLOC_LOCATION_TYPE_CPUSET) {
257282 hwloc_obj_t obj;
266291 if (obj && !hwloc_bitmap_isequal(obj->cpuset, initiator->location.cpuset))
267292 obj = NULL;
268293 if (obj) {
269 char objtype[16];
270294 while (obj->parent && hwloc_bitmap_isequal(obj->cpuset, obj->parent->cpuset))
271295 obj = obj->parent;
272 hwloc_obj_type_snprintf(objtype, sizeof(objtype), obj, 0);
273 printf(" (%s %c#%u)", objtype,
274 index_type == LSTOPO_INDEX_TYPE_PHYSICAL ? 'P' : 'L',
275 index_type == LSTOPO_INDEX_TYPE_PHYSICAL ? obj->os_index : obj->logical_index);
296 printf(" (");
297 output_memattr_obj(loutput, obj);
298 printf(")");
276299 }
277300
278301 } else if (initiator->type == HWLOC_LOCATION_TYPE_OBJECT) {
279 hwloc_obj_t obj = initiator->location.object;
280 char objtype[16];
281 assert(obj);
282 hwloc_obj_type_snprintf(objtype, sizeof(objtype), obj, 0);
283 printf(" (%s %c#%u)", objtype,
284 index_type == LSTOPO_INDEX_TYPE_PHYSICAL ? 'P' : 'L',
285 index_type == LSTOPO_INDEX_TYPE_PHYSICAL ? obj->os_index : obj->logical_index);
302 printf(" from ");
303 output_memattr_obj(loutput, initiator->location.object);
286304
287305 } else {
288 printf(" from initiator with unexpected type %d\n",
306 printf(" from initiator with unexpected type %d",
289307 (int) initiator->type);
290308 }
291309
294312 static void output_memattrs(struct lstopo_output *loutput)
295313 {
296314 hwloc_topology_t topology = loutput->topology;
297 enum lstopo_index_type_e index_type = loutput->index_type;
298315 int verbose_mode = loutput->verbose_mode;
299316 int show_all = (loutput->show_memattrs_only || (verbose_mode >= 3));
300317 unsigned id;
338355 if (!(flags & HWLOC_MEMATTR_FLAG_NEED_INITIATOR)) {
339356 hwloc_uint64_t value;
340357 err = hwloc_memattr_get_value(topology, id, targets[i], NULL, 0, &value);
341 if (!err)
342 printf(" %s %c#%u = %llu\n",
343 hwloc_obj_type_string(targets[i]->type),
344 index_type == LSTOPO_INDEX_TYPE_PHYSICAL ? 'P' : 'L',
345 index_type == LSTOPO_INDEX_TYPE_PHYSICAL ? targets[i]->os_index : targets[i]->logical_index,
346 (unsigned long long) value);
358 if (!err) {
359 printf(" ");
360 output_memattr_obj(loutput, targets[i]);
361 printf(" = %llu\n", (unsigned long long) value);
362 }
347363
348364 } else {
349365 unsigned nr_initiators = 0;
356372 if (!err) {
357373 unsigned j;
358374 for(j=0; j<nr_initiators; j++) {
359 printf(" %s %c#%u = %llu",
360 hwloc_obj_type_string(targets[i]->type),
361 index_type == LSTOPO_INDEX_TYPE_PHYSICAL ? 'P' : 'L',
362 index_type == LSTOPO_INDEX_TYPE_PHYSICAL ? targets[i]->os_index : targets[i]->logical_index,
375 printf(" ");
376 output_memattr_obj(loutput, targets[i]);
377 printf(" = %llu",
363378 (unsigned long long) values[j]);
364379 output_memattr_initiator(loutput, &initiators[j]);
365380 printf("\n");
375390 }
376391 }
377392
393
394 static void output_windows_processor_groups(struct lstopo_output *loutput __hwloc_attribute_unused,
395 int force __hwloc_attribute_unused)
396 {
397 #ifdef HWLOC_WIN_SYS
398 hwloc_topology_t topology = loutput->topology;
399 int err = hwloc_windows_get_nr_processor_groups(topology, 0);
400 if (err > 0) {
401 unsigned nr = (unsigned) err;
402 if (nr > 1 || force) {
403 hwloc_bitmap_t set = hwloc_bitmap_alloc();
404 if (set) {
405 unsigned i;
406 for(i=0; i<nr; i++) {
407 err = hwloc_windows_get_processor_group_cpuset(topology, i, set, 0);
408 if (!err) {
409 char *s;
410 hwloc_bitmap_asprintf(&s, set);
411 printf("Processor Group #%u = %s\n", i, s);
412 free(s);
413 }
414 }
415 hwloc_bitmap_free(set);
416 }
417 }
418 }
419 #endif
420 }
421
378422 static void output_cpukinds(struct lstopo_output *loutput)
379423 {
380424 hwloc_topology_t topology = loutput->topology;
429473 output_cpukinds(loutput);
430474 return 0;
431475 }
476 if (loutput->show_windows_processor_groups_only) {
477 output_windows_processor_groups(loutput, 1);
478 return 0;
479 }
432480
433481 /*
434482 * if verbose_mode == 0, only print the summary.
453501 output_distances(loutput);
454502 output_memattrs(loutput);
455503 output_cpukinds(loutput);
504 output_windows_processor_groups(loutput, verbose_mode > 2);
456505 }
457506
458507 if (verbose_mode > 1 && loutput->show_only == HWLOC_OBJ_TYPE_NONE) {
159159
160160 hwloc_ps_foreach_process(topology, root->cpuset,
161161 foreach_process_cb, NULL,
162 HWLOC_PS_FLAG_THREADS | HWLOC_PS_FLAG_SHORTNAME, NULL, HWLOC_PS_ALL_UIDS, NULL);
162 HWLOC_PS_FLAG_THREADS | HWLOC_PS_FLAG_SHORTNAME, NULL, HWLOC_PS_ALL_UIDS);
163163 }
164164
165165 static __hwloc_inline void lstopo_update_factorize_bounds(unsigned min, unsigned *first, unsigned *last)
405405 fprintf (where, " -v --verbose Include additional details\n");
406406 fprintf (where, " -s --silent Reduce the amount of details to show\n");
407407 fprintf (where, " --distances Only show distance matrices\n");
408 fprintf (where, " --distances-transform <links|merge-switch-ports|transitive-closure>\n");
409 fprintf (where, " Transform distances before displaying them\n");
408410 fprintf (where, " --memattrs Only show memory attributes\n");
409411 fprintf (where, " --cpukinds Only show CPU kinds\n");
412 #ifdef HWLOC_WIN_SYS
413 fprintf (where, " --windows-processor-groups Only show Windows processor groups\n");
414 #endif
410415 fprintf (where, " -c --cpuset Show the cpuset of each object\n");
411416 fprintf (where, " -C --cpuset-only Only show the cpuset of each object\n");
412417 fprintf (where, " --taskset Show taskset-specific cpuset strings\n");
475480 /* --shmem-output-addr is undocumented on purpose */
476481 fprintf (where, " --ps --top Display processes within the hierarchy\n");
477482 fprintf (where, " --version Report version and exit\n");
483 fprintf (where, " -h --help Show this usage\n");
478484 }
479485
480486 void lstopo_show_interactive_help(void)
740746 loutput.show_distances_only = 0;
741747 loutput.show_memattrs_only = 0;
742748 loutput.show_cpukinds_only = 0;
749 loutput.show_windows_processor_groups_only = 0;
743750 loutput.show_only = HWLOC_OBJ_TYPE_NONE;
744751 loutput.show_cpuset = 0;
745752 loutput.show_taskset = 0;
753 loutput.transform_distances = -1;
746754
747755 loutput.nr_cpukind_styles = 0;
748756
780788 loutput.show_disallowed = 1;
781789 loutput.show_cpukinds = 1;
782790
791 /* show all error messages */
792 if (!getenv("HWLOC_HIDE_ERRORS"))
793 putenv((char *) "HWLOC_HIDE_ERRORS=0");
783794 /* enable verbose backends */
784795 if (!getenv("HWLOC_XML_VERBOSE"))
785796 putenv((char *) "HWLOC_XML_VERBOSE=1");
805816 loutput.verbose_mode--;
806817 } else if (!strcmp (argv[0], "--distances")) {
807818 loutput.show_distances_only = 1;
819 } else if (!strcmp (argv[0], "--distances-transform")) {
820 if (argc < 2)
821 goto out_usagefailure;
822 if (!strcmp (argv[1], "links"))
823 loutput.transform_distances = HWLOC_DISTANCES_TRANSFORM_LINKS;
824 else if (!strcmp (argv[1], "merge-switch-ports"))
825 loutput.transform_distances = HWLOC_DISTANCES_TRANSFORM_MERGE_SWITCH_PORTS;
826 else if (!strcmp (argv[1], "transitive-closure"))
827 loutput.transform_distances = HWLOC_DISTANCES_TRANSFORM_TRANSITIVE_CLOSURE;
828 else {
829 fprintf(stderr, "Unrecognized argument `%s' passed to --distances-transform\n", argv[1]);
830 goto out_usagefailure;
831 }
832 opt = 1;
808833 } else if (!strcmp (argv[0], "--memattrs")) {
809834 loutput.show_memattrs_only = 1;
810835 } else if (!strcmp (argv[0], "--cpukinds")) {
811836 loutput.show_cpukinds_only = 1;
837 #ifdef HWLOC_WIN_SYS
838 } else if (!strcmp (argv[0], "--windows-processor-groups")) {
839 loutput.show_windows_processor_groups_only = 1;
840 #endif
812841 } else if (!strcmp (argv[0], "-h") || !strcmp (argv[0], "--help")) {
813842 usage(callname, stdout);
814843 exit(EXIT_SUCCESS);
13041333 || loutput.show_distances_only
13051334 || loutput.show_memattrs_only
13061335 || loutput.show_cpukinds_only
1336 || loutput.show_windows_processor_groups_only
13071337 || loutput.verbose_mode != LSTOPO_VERBOSE_MODE_DEFAULT)
13081338 output_format = LSTOPO_OUTPUT_CONSOLE;
13091339 }
14051435
14061436 err = hwloc_topology_set_flags(topology, flags);
14071437 if (err < 0) {
1408 fprintf(stderr, "Failed to set flags %lx (%s).\n", flags, strerror(errno));
1438 fprintf(stderr, "Failed to set flags 0x%lx (%s).\n", flags, strerror(errno));
14091439 goto out_with_topology;
14101440 }
14111441
77 Type=Application
88 Categories=System;
99 Keywords=System;Utility;
10 Icon=hwloc
00 /*
11 * Copyright © 2009 CNRS
2 * Copyright © 2009-2020 Inria. All rights reserved.
2 * Copyright © 2009-2021 Inria. All rights reserved.
33 * Copyright © 2009-2010, 2012, 2015 Université Bordeaux
44 * Copyright © 2011 Cisco Systems, Inc. All rights reserved.
55 * Copyright © 2020 Hewlett Packard Enterprise. All rights reserved.
8989 int show_distances_only;
9090 int show_memattrs_only;
9191 int show_cpukinds_only;
92 int show_windows_processor_groups_only;
9293 hwloc_obj_type_t show_only;
9394 int show_cpuset;
9495 int show_taskset;
96 int transform_distances;
9597
9698 /* draw config */
9799 char title[256];
244244 CONFIGURE_DEPENDENCIES = @CONFIGURE_DEPENDENCIES@
245245 CPP = @CPP@
246246 CPPFLAGS = @CPPFLAGS@
247 CUDA_VERSION = @CUDA_VERSION@
247248 CXX = @CXX@
248249 CXXCPP = @CXXCPP@
249250 CXXDEPMODE = @CXXDEPMODE@
270271 HWLOC_CAIRO_LIBS = @HWLOC_CAIRO_LIBS@
271272 HWLOC_CFLAGS = @HWLOC_CFLAGS@
272273 HWLOC_CPPFLAGS = @HWLOC_CPPFLAGS@
274 HWLOC_CUDART_CFLAGS = @HWLOC_CUDART_CFLAGS@
275 HWLOC_CUDART_CPPFLAGS = @HWLOC_CUDART_CPPFLAGS@
276 HWLOC_CUDART_LDFLAGS = @HWLOC_CUDART_LDFLAGS@
277 HWLOC_CUDART_LIBS = @HWLOC_CUDART_LIBS@
278 HWLOC_CUDA_CFLAGS = @HWLOC_CUDA_CFLAGS@
279 HWLOC_CUDA_CPPFLAGS = @HWLOC_CUDA_CPPFLAGS@
280 HWLOC_CUDA_LDFLAGS = @HWLOC_CUDA_LDFLAGS@
273281 HWLOC_CUDA_LIBS = @HWLOC_CUDA_LIBS@
274282 HWLOC_DIFF_U = @HWLOC_DIFF_U@
275283 HWLOC_DIFF_W = @HWLOC_DIFF_W@
280288 HWLOC_EMBEDDED_LDFLAGS = @HWLOC_EMBEDDED_LDFLAGS@
281289 HWLOC_EMBEDDED_LIBS = @HWLOC_EMBEDDED_LIBS@
282290 HWLOC_GL_LIBS = @HWLOC_GL_LIBS@
291 HWLOC_HAVE_LEVELZERO = @HWLOC_HAVE_LEVELZERO@
283292 HWLOC_HAVE_LIBXML2 = @HWLOC_HAVE_LIBXML2@
284293 HWLOC_HAVE_NVML = @HWLOC_HAVE_NVML@
285294 HWLOC_HAVE_OPENCL = @HWLOC_HAVE_OPENCL@
286295 HWLOC_HAVE_RSMI = @HWLOC_HAVE_RSMI@
296 HWLOC_IBVERBS_LIBS = @HWLOC_IBVERBS_LIBS@
287297 HWLOC_LDFLAGS = @HWLOC_LDFLAGS@
298 HWLOC_LEVELZERO_CFLAGS = @HWLOC_LEVELZERO_CFLAGS@
299 HWLOC_LEVELZERO_LIBS = @HWLOC_LEVELZERO_LIBS@
288300 HWLOC_LIBS = @HWLOC_LIBS@
289301 HWLOC_LIBS_PRIVATE = @HWLOC_LIBS_PRIVATE@
290302 HWLOC_LIBXML2_CFLAGS = @HWLOC_LIBXML2_CFLAGS@
294306 HWLOC_MS_LIB_ARCH = @HWLOC_MS_LIB_ARCH@
295307 HWLOC_NUMA_CFLAGS = @HWLOC_NUMA_CFLAGS@
296308 HWLOC_NUMA_LIBS = @HWLOC_NUMA_LIBS@
309 HWLOC_NVML_CPPFLAGS = @HWLOC_NVML_CPPFLAGS@
310 HWLOC_NVML_LDFLAGS = @HWLOC_NVML_LDFLAGS@
297311 HWLOC_NVML_LIBS = @HWLOC_NVML_LIBS@
298 HWLOC_OPENCL_CFLAGS = @HWLOC_OPENCL_CFLAGS@
312 HWLOC_OPENCL_CPPFLAGS = @HWLOC_OPENCL_CPPFLAGS@
299313 HWLOC_OPENCL_LDFLAGS = @HWLOC_OPENCL_LDFLAGS@
300314 HWLOC_OPENCL_LIBS = @HWLOC_OPENCL_LIBS@
301315 HWLOC_PCIACCESS_CFLAGS = @HWLOC_PCIACCESS_CFLAGS@
421435 prefix = @prefix@
422436 program_transform_name = @program_transform_name@
423437 psdir = @psdir@
438 runstatedir = @runstatedir@
424439 sbindir = @sbindir@
425440 sharedstatedir = @sharedstatedir@
426441 srcdir = @srcdir@
235235 CONFIGURE_DEPENDENCIES = @CONFIGURE_DEPENDENCIES@
236236 CPP = @CPP@
237237 CPPFLAGS = @CPPFLAGS@
238 CUDA_VERSION = @CUDA_VERSION@
238239 CXX = @CXX@
239240 CXXCPP = @CXXCPP@
240241 CXXDEPMODE = @CXXDEPMODE@
261262 HWLOC_CAIRO_LIBS = @HWLOC_CAIRO_LIBS@
262263 HWLOC_CFLAGS = @HWLOC_CFLAGS@
263264 HWLOC_CPPFLAGS = @HWLOC_CPPFLAGS@
265 HWLOC_CUDART_CFLAGS = @HWLOC_CUDART_CFLAGS@
266 HWLOC_CUDART_CPPFLAGS = @HWLOC_CUDART_CPPFLAGS@
267 HWLOC_CUDART_LDFLAGS = @HWLOC_CUDART_LDFLAGS@
268 HWLOC_CUDART_LIBS = @HWLOC_CUDART_LIBS@
269 HWLOC_CUDA_CFLAGS = @HWLOC_CUDA_CFLAGS@
270 HWLOC_CUDA_CPPFLAGS = @HWLOC_CUDA_CPPFLAGS@
271 HWLOC_CUDA_LDFLAGS = @HWLOC_CUDA_LDFLAGS@
264272 HWLOC_CUDA_LIBS = @HWLOC_CUDA_LIBS@
265273 HWLOC_DIFF_U = @HWLOC_DIFF_U@
266274 HWLOC_DIFF_W = @HWLOC_DIFF_W@
271279 HWLOC_EMBEDDED_LDFLAGS = @HWLOC_EMBEDDED_LDFLAGS@
272280 HWLOC_EMBEDDED_LIBS = @HWLOC_EMBEDDED_LIBS@
273281 HWLOC_GL_LIBS = @HWLOC_GL_LIBS@
282 HWLOC_HAVE_LEVELZERO = @HWLOC_HAVE_LEVELZERO@
274283 HWLOC_HAVE_LIBXML2 = @HWLOC_HAVE_LIBXML2@
275284 HWLOC_HAVE_NVML = @HWLOC_HAVE_NVML@
276285 HWLOC_HAVE_OPENCL = @HWLOC_HAVE_OPENCL@
277286 HWLOC_HAVE_RSMI = @HWLOC_HAVE_RSMI@
287 HWLOC_IBVERBS_LIBS = @HWLOC_IBVERBS_LIBS@
278288 HWLOC_LDFLAGS = @HWLOC_LDFLAGS@
289 HWLOC_LEVELZERO_CFLAGS = @HWLOC_LEVELZERO_CFLAGS@
290 HWLOC_LEVELZERO_LIBS = @HWLOC_LEVELZERO_LIBS@
279291 HWLOC_LIBS = @HWLOC_LIBS@
280292 HWLOC_LIBS_PRIVATE = @HWLOC_LIBS_PRIVATE@
281293 HWLOC_LIBXML2_CFLAGS = @HWLOC_LIBXML2_CFLAGS@
285297 HWLOC_MS_LIB_ARCH = @HWLOC_MS_LIB_ARCH@
286298 HWLOC_NUMA_CFLAGS = @HWLOC_NUMA_CFLAGS@
287299 HWLOC_NUMA_LIBS = @HWLOC_NUMA_LIBS@
300 HWLOC_NVML_CPPFLAGS = @HWLOC_NVML_CPPFLAGS@
301 HWLOC_NVML_LDFLAGS = @HWLOC_NVML_LDFLAGS@
288302 HWLOC_NVML_LIBS = @HWLOC_NVML_LIBS@
289 HWLOC_OPENCL_CFLAGS = @HWLOC_OPENCL_CFLAGS@
303 HWLOC_OPENCL_CPPFLAGS = @HWLOC_OPENCL_CPPFLAGS@
290304 HWLOC_OPENCL_LDFLAGS = @HWLOC_OPENCL_LDFLAGS@
291305 HWLOC_OPENCL_LIBS = @HWLOC_OPENCL_LIBS@
292306 HWLOC_PCIACCESS_CFLAGS = @HWLOC_PCIACCESS_CFLAGS@
412426 prefix = @prefix@
413427 program_transform_name = @program_transform_name@
414428 psdir = @psdir@
429 runstatedir = @runstatedir@
415430 sbindir = @sbindir@
416431 sharedstatedir = @sharedstatedir@
417432 srcdir = @srcdir@
234234 CONFIGURE_DEPENDENCIES = @CONFIGURE_DEPENDENCIES@
235235 CPP = @CPP@
236236 CPPFLAGS = @CPPFLAGS@
237 CUDA_VERSION = @CUDA_VERSION@
237238 CXX = @CXX@
238239 CXXCPP = @CXXCPP@
239240 CXXDEPMODE = @CXXDEPMODE@
260261 HWLOC_CAIRO_LIBS = @HWLOC_CAIRO_LIBS@
261262 HWLOC_CFLAGS = @HWLOC_CFLAGS@
262263 HWLOC_CPPFLAGS = @HWLOC_CPPFLAGS@
264 HWLOC_CUDART_CFLAGS = @HWLOC_CUDART_CFLAGS@
265 HWLOC_CUDART_CPPFLAGS = @HWLOC_CUDART_CPPFLAGS@
266 HWLOC_CUDART_LDFLAGS = @HWLOC_CUDART_LDFLAGS@
267 HWLOC_CUDART_LIBS = @HWLOC_CUDART_LIBS@
268 HWLOC_CUDA_CFLAGS = @HWLOC_CUDA_CFLAGS@
269 HWLOC_CUDA_CPPFLAGS = @HWLOC_CUDA_CPPFLAGS@
270 HWLOC_CUDA_LDFLAGS = @HWLOC_CUDA_LDFLAGS@
263271 HWLOC_CUDA_LIBS = @HWLOC_CUDA_LIBS@
264272 HWLOC_DIFF_U = @HWLOC_DIFF_U@
265273 HWLOC_DIFF_W = @HWLOC_DIFF_W@
270278 HWLOC_EMBEDDED_LDFLAGS = @HWLOC_EMBEDDED_LDFLAGS@
271279 HWLOC_EMBEDDED_LIBS = @HWLOC_EMBEDDED_LIBS@
272280 HWLOC_GL_LIBS = @HWLOC_GL_LIBS@
281 HWLOC_HAVE_LEVELZERO = @HWLOC_HAVE_LEVELZERO@
273282 HWLOC_HAVE_LIBXML2 = @HWLOC_HAVE_LIBXML2@
274283 HWLOC_HAVE_NVML = @HWLOC_HAVE_NVML@
275284 HWLOC_HAVE_OPENCL = @HWLOC_HAVE_OPENCL@
276285 HWLOC_HAVE_RSMI = @HWLOC_HAVE_RSMI@
286 HWLOC_IBVERBS_LIBS = @HWLOC_IBVERBS_LIBS@
277287 HWLOC_LDFLAGS = @HWLOC_LDFLAGS@
288 HWLOC_LEVELZERO_CFLAGS = @HWLOC_LEVELZERO_CFLAGS@
289 HWLOC_LEVELZERO_LIBS = @HWLOC_LEVELZERO_LIBS@
278290 HWLOC_LIBS = @HWLOC_LIBS@
279291 HWLOC_LIBS_PRIVATE = @HWLOC_LIBS_PRIVATE@
280292 HWLOC_LIBXML2_CFLAGS = @HWLOC_LIBXML2_CFLAGS@
284296 HWLOC_MS_LIB_ARCH = @HWLOC_MS_LIB_ARCH@
285297 HWLOC_NUMA_CFLAGS = @HWLOC_NUMA_CFLAGS@
286298 HWLOC_NUMA_LIBS = @HWLOC_NUMA_LIBS@
299 HWLOC_NVML_CPPFLAGS = @HWLOC_NVML_CPPFLAGS@
300 HWLOC_NVML_LDFLAGS = @HWLOC_NVML_LDFLAGS@
287301 HWLOC_NVML_LIBS = @HWLOC_NVML_LIBS@
288 HWLOC_OPENCL_CFLAGS = @HWLOC_OPENCL_CFLAGS@
302 HWLOC_OPENCL_CPPFLAGS = @HWLOC_OPENCL_CPPFLAGS@
289303 HWLOC_OPENCL_LDFLAGS = @HWLOC_OPENCL_LDFLAGS@
290304 HWLOC_OPENCL_LIBS = @HWLOC_OPENCL_LIBS@
291305 HWLOC_PCIACCESS_CFLAGS = @HWLOC_PCIACCESS_CFLAGS@
411425 prefix = @prefix@
412426 program_transform_name = @program_transform_name@
413427 psdir = @psdir@
428 runstatedir = @runstatedir@
414429 sbindir = @sbindir@
415430 sharedstatedir = @sharedstatedir@
416431 srcdir = @srcdir@
214214 CONFIGURE_DEPENDENCIES = @CONFIGURE_DEPENDENCIES@
215215 CPP = @CPP@
216216 CPPFLAGS = @CPPFLAGS@
217 CUDA_VERSION = @CUDA_VERSION@
217218 CXX = @CXX@
218219 CXXCPP = @CXXCPP@
219220 CXXDEPMODE = @CXXDEPMODE@
240241 HWLOC_CAIRO_LIBS = @HWLOC_CAIRO_LIBS@
241242 HWLOC_CFLAGS = @HWLOC_CFLAGS@
242243 HWLOC_CPPFLAGS = @HWLOC_CPPFLAGS@
244 HWLOC_CUDART_CFLAGS = @HWLOC_CUDART_CFLAGS@
245 HWLOC_CUDART_CPPFLAGS = @HWLOC_CUDART_CPPFLAGS@
246 HWLOC_CUDART_LDFLAGS = @HWLOC_CUDART_LDFLAGS@
247 HWLOC_CUDART_LIBS = @HWLOC_CUDART_LIBS@
248 HWLOC_CUDA_CFLAGS = @HWLOC_CUDA_CFLAGS@
249 HWLOC_CUDA_CPPFLAGS = @HWLOC_CUDA_CPPFLAGS@
250 HWLOC_CUDA_LDFLAGS = @HWLOC_CUDA_LDFLAGS@
243251 HWLOC_CUDA_LIBS = @HWLOC_CUDA_LIBS@
244252 HWLOC_DIFF_U = @HWLOC_DIFF_U@
245253 HWLOC_DIFF_W = @HWLOC_DIFF_W@
250258 HWLOC_EMBEDDED_LDFLAGS = @HWLOC_EMBEDDED_LDFLAGS@
251259 HWLOC_EMBEDDED_LIBS = @HWLOC_EMBEDDED_LIBS@
252260 HWLOC_GL_LIBS = @HWLOC_GL_LIBS@
261 HWLOC_HAVE_LEVELZERO = @HWLOC_HAVE_LEVELZERO@
253262 HWLOC_HAVE_LIBXML2 = @HWLOC_HAVE_LIBXML2@
254263 HWLOC_HAVE_NVML = @HWLOC_HAVE_NVML@
255264 HWLOC_HAVE_OPENCL = @HWLOC_HAVE_OPENCL@
256265 HWLOC_HAVE_RSMI = @HWLOC_HAVE_RSMI@
266 HWLOC_IBVERBS_LIBS = @HWLOC_IBVERBS_LIBS@
257267 HWLOC_LDFLAGS = @HWLOC_LDFLAGS@
268 HWLOC_LEVELZERO_CFLAGS = @HWLOC_LEVELZERO_CFLAGS@
269 HWLOC_LEVELZERO_LIBS = @HWLOC_LEVELZERO_LIBS@
258270 HWLOC_LIBS = @HWLOC_LIBS@
259271 HWLOC_LIBS_PRIVATE = @HWLOC_LIBS_PRIVATE@
260272 HWLOC_LIBXML2_CFLAGS = @HWLOC_LIBXML2_CFLAGS@
264276 HWLOC_MS_LIB_ARCH = @HWLOC_MS_LIB_ARCH@
265277 HWLOC_NUMA_CFLAGS = @HWLOC_NUMA_CFLAGS@
266278 HWLOC_NUMA_LIBS = @HWLOC_NUMA_LIBS@
279 HWLOC_NVML_CPPFLAGS = @HWLOC_NVML_CPPFLAGS@
280 HWLOC_NVML_LDFLAGS = @HWLOC_NVML_LDFLAGS@
267281 HWLOC_NVML_LIBS = @HWLOC_NVML_LIBS@
268 HWLOC_OPENCL_CFLAGS = @HWLOC_OPENCL_CFLAGS@
282 HWLOC_OPENCL_CPPFLAGS = @HWLOC_OPENCL_CPPFLAGS@
269283 HWLOC_OPENCL_LDFLAGS = @HWLOC_OPENCL_LDFLAGS@
270284 HWLOC_OPENCL_LIBS = @HWLOC_OPENCL_LIBS@
271285 HWLOC_PCIACCESS_CFLAGS = @HWLOC_PCIACCESS_CFLAGS@
391405 prefix = @prefix@
392406 program_transform_name = @program_transform_name@
393407 psdir = @psdir@
408 runstatedir = @runstatedir@
394409 sbindir = @sbindir@
395410 sharedstatedir = @sharedstatedir@
396411 srcdir = @srcdir@